[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 02/16] x86: introduce and use a set of internal emulation flags
Use these flags in has_* tests and emulation_flags_ok. Not using raw flags directly enabling DCE to kick in for has_* tests while at the same time making sure emulation_flags_ok won't go out of sync. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- v3: new --- xen/arch/x86/domain.c | 13 ++++++---- xen/include/asm-x86/domain.h | 57 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 53 insertions(+), 17 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index cd1419e740..313ebb3221 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -403,19 +403,22 @@ void vcpu_destroy(struct vcpu *v) static bool emulation_flags_ok(const struct domain *d, uint32_t emflags) { +#ifdef CONFIG_HVM + /* This doesn't catch !CONFIG_HVM case but it is better than nothing */ + BUILD_BUG_ON(X86_EMU_ALL != XEN_X86_EMU_ALL); +#endif if ( is_hvm_domain(d) ) { if ( is_hardware_domain(d) && - emflags != (XEN_X86_EMU_VPCI | XEN_X86_EMU_LAPIC | - XEN_X86_EMU_IOAPIC) ) + emflags != (X86_EMU_VPCI | X86_EMU_LAPIC | X86_EMU_IOAPIC) ) return false; if ( !is_hardware_domain(d) && - emflags != (XEN_X86_EMU_ALL & ~XEN_X86_EMU_VPCI) && - emflags != XEN_X86_EMU_LAPIC ) + emflags != (X86_EMU_ALL & ~X86_EMU_VPCI) && + emflags != X86_EMU_LAPIC ) return false; } - else if ( emflags != 0 && emflags != XEN_X86_EMU_PIT ) + else if ( emflags != 0 && emflags != X86_EMU_PIT ) { /* PV or classic PVH. */ return false; diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h index c7cdf974bf..4da4353de7 100644 --- a/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h @@ -440,18 +440,51 @@ struct arch_domain uint32_t emulation_flags; } __cacheline_aligned; -#define has_vlapic(d) (!!((d)->arch.emulation_flags & XEN_X86_EMU_LAPIC)) -#define has_vhpet(d) (!!((d)->arch.emulation_flags & XEN_X86_EMU_HPET)) -#define has_vpm(d) (!!((d)->arch.emulation_flags & XEN_X86_EMU_PM)) -#define has_vrtc(d) (!!((d)->arch.emulation_flags & XEN_X86_EMU_RTC)) -#define has_vioapic(d) (!!((d)->arch.emulation_flags & XEN_X86_EMU_IOAPIC)) -#define has_vpic(d) (!!((d)->arch.emulation_flags & XEN_X86_EMU_PIC)) -#define has_vvga(d) (!!((d)->arch.emulation_flags & XEN_X86_EMU_VGA)) -#define has_viommu(d) (!!((d)->arch.emulation_flags & XEN_X86_EMU_IOMMU)) -#define has_vpit(d) (!!((d)->arch.emulation_flags & XEN_X86_EMU_PIT)) -#define has_pirq(d) (!!((d)->arch.emulation_flags & \ - XEN_X86_EMU_USE_PIRQ)) -#define has_vpci(d) (!!((d)->arch.emulation_flags & XEN_X86_EMU_VPCI)) +#ifdef CONFIG_HVM +#define X86_EMU_LAPIC XEN_X86_EMU_LAPIC +#define X86_EMU_HPET XEN_X86_EMU_HPET +#define X86_EMU_PM XEN_X86_EMU_PM +#define X86_EMU_RTC XEN_X86_EMU_RTC +#define X86_EMU_IOAPIC XEN_X86_EMU_IOAPIC +#define X86_EMU_PIC XEN_X86_EMU_PIC +#define X86_EMU_VGA XEN_X86_EMU_VGA +#define X86_EMU_IOMMU XEN_X86_EMU_IOMMU +#define X86_EMU_USE_PIRQ XEN_X86_EMU_USE_PIRQ +#define X86_EMU_VPCI XEN_X86_EMU_VPCI +#else +#define X86_EMU_LAPIC 0 +#define X86_EMU_HPET 0 +#define X86_EMU_PM 0 +#define X86_EMU_RTC 0 +#define X86_EMU_IOAPIC 0 +#define X86_EMU_PIC 0 +#define X86_EMU_VGA 0 +#define X86_EMU_IOMMU 0 +#define X86_EMU_USE_PIRQ 0 +#define X86_EMU_VPCI 0 +#endif + +#define X86_EMU_PIT XEN_X86_EMU_PIT + +/* This must match XEN_X86_EMU_ALL in xen.h */ +#define X86_EMU_ALL (X86_EMU_LAPIC | X86_EMU_HPET | \ + X86_EMU_PM | X86_EMU_RTC | \ + X86_EMU_IOAPIC | X86_EMU_PIC | \ + X86_EMU_VGA | X86_EMU_IOMMU | \ + X86_EMU_PIT | X86_EMU_USE_PIRQ | \ + X86_EMU_VPCI) + +#define has_vlapic(d) (!!((d)->arch.emulation_flags & X86_EMU_LAPIC)) +#define has_vhpet(d) (!!((d)->arch.emulation_flags & X86_EMU_HPET)) +#define has_vpm(d) (!!((d)->arch.emulation_flags & X86_EMU_PM)) +#define has_vrtc(d) (!!((d)->arch.emulation_flags & X86_EMU_RTC)) +#define has_vioapic(d) (!!((d)->arch.emulation_flags & X86_EMU_IOAPIC)) +#define has_vpic(d) (!!((d)->arch.emulation_flags & X86_EMU_PIC)) +#define has_vvga(d) (!!((d)->arch.emulation_flags & X86_EMU_VGA)) +#define has_viommu(d) (!!((d)->arch.emulation_flags & X86_EMU_IOMMU)) +#define has_vpit(d) (!!((d)->arch.emulation_flags & X86_EMU_PIT)) +#define has_pirq(d) (!!((d)->arch.emulation_flags & X86_EMU_USE_PIRQ)) +#define has_vpci(d) (!!((d)->arch.emulation_flags & X86_EMU_VPCI)) #define has_arch_pdevs(d) (!list_empty(&(d)->arch.pdev_list)) -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |