Jan Beulich
2012-Apr-17 12:58 UTC
[PATCH] x86: suppress warning messages on IO-APIC-less systems
Each call to mp_register_gsi() so far produced two warnings (about not
being able to find the corresponding IO-APIC pin).
However, we should use the provided information for setting the ELCR
correctly (we might want to even do this when there is an IO-APIC, if
was absolutely certain that all machines really have this register
[and specifically not some other device at the two I/O ports in
question]). It is in any case questionable that we allow Dom0 to set
this register - it could particularly be the interrupt of a plug-in
serial port card that might not work due to this. The problem is that
all Dom0 kernels to date do so, hence we can''t simply #GP on such an
access (which would be the result if we disallowed access to the port
as we should have done from the beginning).
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/xen/arch/x86/mpparse.c
+++ b/xen/arch/x86/mpparse.c
@@ -1034,6 +1034,21 @@ int mp_register_gsi (u32 gsi, int trigge
return gsi;
#endif
+ if (!nr_ioapics) {
+ unsigned int port = 0x4d0 + (gsi >> 3);
+ u8 val;
+
+ if (!platform_legacy_irq(gsi))
+ return -EINVAL;
+ val = inb(port);
+ if (triggering)
+ val |= 1 << (gsi & 7);
+ else
+ val &= ~(1 << (gsi & 7));
+ outb(val, port);
+ return 0;
+ }
+
ioapic = mp_find_ioapic(gsi);
if (ioapic < 0) {
printk(KERN_WARNING "No IOAPIC for GSI %u\n", gsi);
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
Keir Fraser
2012-Apr-17 13:09 UTC
Re: [PATCH] x86: suppress warning messages on IO-APIC-less systems
On 17/04/2012 13:58, "Jan Beulich" <JBeulich@suse.com> wrote:> Each call to mp_register_gsi() so far produced two warnings (about not > being able to find the corresponding IO-APIC pin). > > However, we should use the provided information for setting the ELCR > correctly (we might want to even do this when there is an IO-APIC, if > was absolutely certain that all machines really have this register > [and specifically not some other device at the two I/O ports in > question]). It is in any case questionable that we allow Dom0 to set > this register - it could particularly be the interrupt of a plug-in > serial port card that might not work due to this. The problem is that > all Dom0 kernels to date do so, hence we can''t simply #GP on such an > access (which would be the result if we disallowed access to the port > as we should have done from the beginning). > > Signed-off-by: Jan Beulich <jbeulich@suse.com>Acked-by: Keir Fraser <keir@xen.org>> --- a/xen/arch/x86/mpparse.c > +++ b/xen/arch/x86/mpparse.c > @@ -1034,6 +1034,21 @@ int mp_register_gsi (u32 gsi, int trigge > return gsi; > #endif > > + if (!nr_ioapics) { > + unsigned int port = 0x4d0 + (gsi >> 3); > + u8 val; > + > + if (!platform_legacy_irq(gsi)) > + return -EINVAL; > + val = inb(port); > + if (triggering) > + val |= 1 << (gsi & 7); > + else > + val &= ~(1 << (gsi & 7)); > + outb(val, port); > + return 0; > + } > + > ioapic = mp_find_ioapic(gsi); > if (ioapic < 0) { > printk(KERN_WARNING "No IOAPIC for GSI %u\n", gsi); > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel