[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-4.1-testing] IO-APIC: Prevent using EOI broadcast suppression if user specified



# HG changeset patch
# User Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
# Date 1331117651 0
# Node ID dc7fc50b35948d3727ff11887041410948ab3629
# Parent  bcf1250a14e8b5f7a63d7b9311687ee8d98b7853
IO-APIC: Prevent using EOI broadcast suppression if user specified
ioapic_ack=new on the command line.

Currently, if EOI broadcast suppression is advertised on the BSP
LAPIC, Xen will discard any user specified option regarding IO-APIC
ack mode.

This patch introduces a check which prevents EOI Broadcast suppression
from forcing the IO-APIC ack mode to old if the user has explicitly
asked for the new ack mode on the command line.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Committed-by: Keir Fraser <keir@xxxxxxx>
xen-unstable changeset:   24870:9bf3ec036bef
xen-unstable date:        Thu Feb 23 09:58:47 2012 +0000
---


diff -r bcf1250a14e8 -r dc7fc50b3594 xen/arch/x86/apic.c
--- a/xen/arch/x86/apic.c       Wed Mar 07 09:39:45 2012 +0000
+++ b/xen/arch/x86/apic.c       Wed Mar 07 10:54:11 2012 +0000
@@ -437,9 +437,15 @@
      */
     if ( reg0 & APIC_LVR_DIRECTED_EOI )
     {
-        ioapic_ack_new = 0;
-        directed_eoi_enabled = 1;
-        printk("Enabled directed EOI with ioapic_ack_old on!\n");
+        if ( ioapic_ack_new == 1 && ioapic_ack_forced == 1 )
+            printk("Not enabling directed EOI because ioapic_ack_new has been "
+                   "forced on the command line\n");
+        else
+        {
+            ioapic_ack_new = 0;
+            directed_eoi_enabled = 1;
+            printk("Enabled directed EOI with ioapic_ack_old on!\n");
+        }
     }
 
     /*
diff -r bcf1250a14e8 -r dc7fc50b3594 xen/arch/x86/io_apic.c
--- a/xen/arch/x86/io_apic.c    Wed Mar 07 09:39:45 2012 +0000
+++ b/xen/arch/x86/io_apic.c    Wed Mar 07 10:54:11 2012 +0000
@@ -44,6 +44,7 @@
 static DEFINE_SPINLOCK(ioapic_lock);
 
 bool_t __read_mostly skip_ioapic_setup;
+bool_t __read_mostly ioapic_ack_forced = 0;
 
 #ifndef sis_apic_bug
 /*
@@ -1610,9 +1611,15 @@
 static void setup_ioapic_ack(char *s)
 {
     if ( !strcmp(s, "old") )
+    {
         ioapic_ack_new = 0;
+        ioapic_ack_forced = 1;
+    }
     else if ( !strcmp(s, "new") )
+    {
         ioapic_ack_new = 1;
+        ioapic_ack_forced = 1;
+    }
     else
         printk("Unknown ioapic_ack value specified: '%s'\n", s);
 }
diff -r bcf1250a14e8 -r dc7fc50b3594 xen/include/asm-x86/io_apic.h
--- a/xen/include/asm-x86/io_apic.h     Wed Mar 07 09:39:45 2012 +0000
+++ b/xen/include/asm-x86/io_apic.h     Wed Mar 07 10:54:11 2012 +0000
@@ -179,6 +179,7 @@
 
 /* 1 if "noapic" boot option passed */
 extern bool_t skip_ioapic_setup;
+extern bool_t ioapic_ack_forced;
 
 #ifdef CONFIG_ACPI_BOOT
 extern int io_apic_get_unique_id (int ioapic, int apic_id);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.