git: 091febc04a5d - main - xen/blkback: do not use x86 CPUID in generic code

From: Roger Pau Monné <royger_at_FreeBSD.org>
Date: Tue, 28 Jun 2022 07:53:12 UTC
The branch main has been updated by royger:

URL: https://cgit.FreeBSD.org/src/commit/?id=091febc04a5d5065fe633fe29c11f008dc392ab8

commit 091febc04a5d5065fe633fe29c11f008dc392ab8
Author:     Roger Pau Monné <royger@FreeBSD.org>
AuthorDate: 2022-06-17 13:29:05 +0000
Commit:     Roger Pau Monné <royger@FreeBSD.org>
CommitDate: 2022-06-28 07:51:57 +0000

    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
---
 sys/dev/xen/blkback/blkback.c |  7 +------
 sys/x86/include/xen/xen-os.h  |  2 ++
 sys/x86/xen/hvm.c             | 11 +++++++++++
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/sys/dev/xen/blkback/blkback.c b/sys/dev/xen/blkback/blkback.c
index b15dbb1e9155..bd550695e719 100644
--- a/sys/dev/xen/blkback/blkback.c
+++ b/sys/dev/xen/blkback/blkback.c
@@ -80,7 +80,6 @@ __FBSDID("$FreeBSD$");
 #include <xen/gnttab.h>
 #include <xen/xen_intr.h>
 
-#include <contrib/xen/arch-x86/cpuid.h>
 #include <contrib/xen/event_channel.h>
 #include <contrib/xen/grant_table.h>
 
@@ -3318,16 +3317,12 @@ xbb_attach_failed(struct xbb_softc *xbb, int err, const char *fmt, ...)
 static int
 xbb_probe(device_t dev)
 {
-	uint32_t regs[4];
 
 	if (strcmp(xenbus_get_type(dev), "vbd"))
 		return (ENXIO);
 
-	KASSERT(xen_cpuid_base != 0, ("Invalid base Xen CPUID leaf"));
-	cpuid_count(xen_cpuid_base + 4, 0, regs);
-
 	/* Only attach if Xen creates IOMMU entries for grant mapped pages. */
-	if (!(regs[0] & XEN_HVM_CPUID_IOMMU_MAPPINGS)) {
+	if (!xen_has_iommu_maps()) {
 		static bool warned;
 
 		if (!warned) {
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);
+}