diff options
author | Roger Pau Monné <royger@FreeBSD.org> | 2022-06-17 13:29:05 +0000 |
---|---|---|
committer | Roger Pau Monné <royger@FreeBSD.org> | 2022-06-28 07:51:57 +0000 |
commit | 091febc04a5d5065fe633fe29c11f008dc392ab8 (patch) | |
tree | bce00f44fc776df78cd97d66a432cde2f8bd1d36 /sys/x86 | |
parent | 2049cc3218151f8d4108d878196905c34bbf15bc (diff) | |
download | src-091febc04a5d5065fe633fe29c11f008dc392ab8.tar.gz src-091febc04a5d5065fe633fe29c11f008dc392ab8.zip |
xen/blkback: do not use x86 CPUID in generic code
Move checker for whether Xen creates IOMMU mappings for foreign pages
into a helper that's defined in arch-specific code.
Reported by: Elliott Mitchell <ehem+freebsd@m5p.com>
Fixes: 1d528f95e8ce ('xen/blkback: remove bounce buffering mode')
Sponsored by: Citrix Systems R&D
Diffstat (limited to 'sys/x86')
-rw-r--r-- | sys/x86/include/xen/xen-os.h | 2 | ||||
-rw-r--r-- | sys/x86/xen/hvm.c | 11 |
2 files changed, 13 insertions, 0 deletions
diff --git a/sys/x86/include/xen/xen-os.h b/sys/x86/include/xen/xen-os.h index 4d4aa64955ba..861ad10e3d78 100644 --- a/sys/x86/include/xen/xen-os.h +++ b/sys/x86/include/xen/xen-os.h @@ -72,6 +72,8 @@ xen_pv_nics_disabled(void) return (xen_hvm_domain() && xen_disable_pv_nics != 0); } +bool xen_has_iommu_maps(void); + #endif /* !__ASSEMBLY__ */ #endif /* _MACHINE_X86_XEN_XEN_OS_H_ */ diff --git a/sys/x86/xen/hvm.c b/sys/x86/xen/hvm.c index 544b6e6439e8..8d25e35e5151 100644 --- a/sys/x86/xen/hvm.c +++ b/sys/x86/xen/hvm.c @@ -489,3 +489,14 @@ xen_hvm_cpu_init(void) DPCPU_SET(vcpu_info, vcpu_info); } SYSINIT(xen_hvm_cpu_init, SI_SUB_INTR, SI_ORDER_FIRST, xen_hvm_cpu_init, NULL); + +bool +xen_has_iommu_maps(void) +{ + uint32_t regs[4]; + + KASSERT(xen_cpuid_base != 0, ("Invalid base Xen CPUID leaf")); + cpuid_count(xen_cpuid_base + 4, 0, regs); + + return (regs[0] & XEN_HVM_CPUID_IOMMU_MAPPINGS); +} |