]> xenbits.xensource.com Git - xen.git/commitdiff
x86: suppress warning messages on IO-APIC-less systems
authorJan Beulich <jbeulich@suse.com>
Tue, 17 Apr 2012 13:37:05 +0000 (15:37 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 17 Apr 2012 13:37:05 +0000 (15:37 +0200)
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>
xen/arch/x86/mpparse.c

index 76a4a665044fb9fef10c880cf6f37c76371fbe08..03c3416713304e8197c397bc9443c3994b7f7451 100644 (file)
@@ -1034,6 +1034,21 @@ int mp_register_gsi (u32 gsi, int triggering, int polarity)
                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);