Message ID | 8a73a627feab24dd2c779a7fab736aeef36aeb58.1537438302.git.joseph.salisbury@canonical.com |
---|---|
State | New |
Headers | show |
Series | x86/EISA: Don't probe EISA bus for Xen PV guests | expand |
On 20.09.2018 12:20, Joseph Salisbury wrote: > From: Boris Ostrovsky <boris.ostrovsky@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@strugglers.net> > Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > Cc: hpa@zytor.com > Cc: xen-devel@lists.xenproject.org > Cc: jgross@suse.com > Cc: stable@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@canonical.com> Acked-by: Stefan Bader <stefan.bader@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; >
On 09/20/18 12:20, Joseph Salisbury wrote: > From: Boris Ostrovsky <boris.ostrovsky@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@strugglers.net> > Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > Cc: hpa@zytor.com > Cc: xen-devel@lists.xenproject.org > Cc: jgross@suse.com > Cc: stable@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@canonical.com> Acked-by: Kleber Sacilotto de Souza <kleber.souza@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; >
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;