[SRU][Bionic][PATCH 1/1] x86/EISA: Don't probe EISA bus for Xen PV guests

Joseph Salisbury joseph.salisbury at canonical.com
Thu Sep 20 10:20:24 UTC 2018


From: Boris Ostrovsky <boris.ostrovsky at oracle.com>

BugLink: https://bugs.launchpad.net/bugs/1789118

For unprivileged Xen PV guests this is normal memory and ioremap will
not be able to properly map it.

While at it, since ioremap may return NULL, add a test for pointer's
validity.

Reported-by: Andy Smith <andy at strugglers.net>
Signed-off-by: Boris Ostrovsky <boris.ostrovsky at oracle.com>
Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
Cc: hpa at zytor.com
Cc: xen-devel at lists.xenproject.org
Cc: jgross at suse.com
Cc: stable at vger.kernel.org
Link: https://lkml.kernel.org/r/20180911195538.23289-1-boris.ostrovsky@oracle.com

(cherry picked from commit 6a92b11169a65b3f8cc512c75a252cbd0d096ba0)
Signed-off-by: Joseph Salisbury <joseph.salisbury at canonical.com>
---
 arch/x86/kernel/eisa.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/eisa.c b/arch/x86/kernel/eisa.c
index f260e45..e8c8c5d 100644
--- a/arch/x86/kernel/eisa.c
+++ b/arch/x86/kernel/eisa.c
@@ -7,11 +7,17 @@
 #include <linux/eisa.h>
 #include <linux/io.h>
 
+#include <xen/xen.h>
+
 static __init int eisa_bus_probe(void)
 {
-	void __iomem *p = ioremap(0x0FFFD9, 4);
+	void __iomem *p;
+
+	if (xen_pv_domain() && !xen_initial_domain())
+		return 0;
 
-	if (readl(p) == 'E' + ('I'<<8) + ('S'<<16) + ('A'<<24))
+	p = ioremap(0x0FFFD9, 4);
+	if (p && readl(p) == 'E' + ('I' << 8) + ('S' << 16) + ('A' << 24))
 		EISA_bus = 1;
 	iounmap(p);
 	return 0;
-- 
2.7.4





More information about the kernel-team mailing list