|
[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 |