From b074b99c34f9ab5bf234b4778a417b5b55690060 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roger=20Pau=20Monn=C3=A9?= Date: Mon, 11 Aug 2014 14:58:40 +0200 Subject: [PATCH] x86/HVM: expose that grant table mappings update the IOMMU MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Add a new CPUID flag for leaf 4 that indicates that grant/foreign mappings update the IOMMU accordingly. Signed-off-by: Roger Pau Monné Acked-by: Jan Beulich --- xen/arch/x86/hvm/hvm.c | 10 ++++++++++ xen/include/public/arch-x86/cpuid.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index d2c6942b64..d40c48ed7e 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -67,6 +67,7 @@ #include #include #include +#include bool_t __read_mostly hvm_enabled; @@ -4197,6 +4198,15 @@ void hvm_hypervisor_cpuid_leaf(uint32_t sub_idx, *eax = *ebx = *ecx = *edx = 0; if ( hvm_funcs.hypervisor_cpuid_leaf ) hvm_funcs.hypervisor_cpuid_leaf(sub_idx, eax, ebx, ecx, edx); + + if ( sub_idx == 0 ) + { + /* + * Indicate that memory mapped from other domains (either grants or + * foreign pages) has valid IOMMU entries. + */ + *eax |= XEN_HVM_CPUID_IOMMU_MAPPINGS; + } } void hvm_cpuid(unsigned int input, unsigned int *eax, unsigned int *ebx, diff --git a/xen/include/public/arch-x86/cpuid.h b/xen/include/public/arch-x86/cpuid.h index 7135d5456b..e57a4578e5 100644 --- a/xen/include/public/arch-x86/cpuid.h +++ b/xen/include/public/arch-x86/cpuid.h @@ -73,6 +73,8 @@ /* EAX Features */ #define XEN_HVM_CPUID_APIC_ACCESS_VIRT (1u << 0) /* Virtualized APIC registers */ #define XEN_HVM_CPUID_X2APIC_VIRT (1u << 1) /* Virtualized x2APIC accesses */ +/* Memory mapped from other domains has valid IOMMU entries */ +#define XEN_HVM_CPUID_IOMMU_MAPPINGS (1u << 2) #define XEN_CPUID_MAX_NUM_LEAVES 4 -- 2.30.2