WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] Intel systems with more than 8 CPUs require that the API

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Intel systems with more than 8 CPUs require that the APIC is configured
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 23 Nov 2005 13:40:06 +0000
Delivery-date: Wed, 23 Nov 2005 13:40:14 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID be41d7631c2ffebb3c35ce29a6b7c4ae01161ea1
# Parent  b6ebabe4658a0c08e17853431d1c0eba13664d6e
Intel systems with more than 8 CPUs require that the APIC is configured
in clustered mode with the apic=bigsmp kernel parameter. This patch does
the APIC mode selection automatically without needing to manually specify
the kernel paremeter.

(KAF note: I see the patch is also present in Linux 2.6.14.2)

Signed-off-by: Nitin Kamble <nitin.a.kamble@xxxxxxxxx>
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@xxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxx>

diff -r b6ebabe4658a -r be41d7631c2f xen/arch/x86/acpi/boot.c
--- a/xen/arch/x86/acpi/boot.c  Wed Nov 23 10:15:18 2005
+++ b/xen/arch/x86/acpi/boot.c  Wed Nov 23 11:11:05 2005
@@ -602,7 +602,8 @@
                error = acpi_parse_madt_lapic_entries();
                if (!error) {
                        acpi_lapic = 1;
-
+                       generic_bigsmp_probe();
+ 
                        /*
                         * Parse MADT IO-APIC entries
                         */
diff -r b6ebabe4658a -r be41d7631c2f xen/arch/x86/genapic/bigsmp.c
--- a/xen/arch/x86/genapic/bigsmp.c     Wed Nov 23 10:15:18 2005
+++ b/xen/arch/x86/genapic/bigsmp.c     Wed Nov 23 11:11:05 2005
@@ -45,7 +45,10 @@
 
 static __init int probe_bigsmp(void)
 { 
-       dmi_check_system(bigsmp_dmi_table);
+       if (def_to_bigsmp)
+               dmi_bigsmp = 1;
+       else
+               dmi_check_system(bigsmp_dmi_table);
        return dmi_bigsmp; 
 } 
 
diff -r b6ebabe4658a -r be41d7631c2f xen/arch/x86/genapic/probe.c
--- a/xen/arch/x86/genapic/probe.c      Wed Nov 23 10:15:18 2005
+++ b/xen/arch/x86/genapic/probe.c      Wed Nov 23 11:11:05 2005
@@ -29,6 +29,25 @@
        NULL,
 };
 
+static int cmdline_apic;
+
+void __init generic_bigsmp_probe(void)
+{
+       /*
+        * This routine is used to switch to bigsmp mode when
+        * - There is no apic= option specified by the user
+        * - generic_apic_probe() has choosen apic_default as the sub_arch
+        * - we find more than 8 CPUs in acpi LAPIC listing with xAPIC support
+        */
+
+       if (!cmdline_apic && genapic == &apic_default)
+               if (apic_bigsmp.probe()) {
+                       genapic = &apic_bigsmp;
+                       printk(KERN_INFO "Overriding APIC driver with %s\n",
+                              genapic->name);
+               }
+}
+
 static void __init genapic_apic_force(char *str)
 {
        int i;
@@ -41,7 +60,7 @@
 void __init generic_apic_probe(void) 
 { 
        int i;
-       int changed = (genapic != NULL);
+       int changed = cmdline_apic = (genapic != NULL);
 
        for (i = 0; !changed && apic_probe[i]; i++) { 
                if (apic_probe[i]->probe()) {
diff -r b6ebabe4658a -r be41d7631c2f xen/arch/x86/mpparse.c
--- a/xen/arch/x86/mpparse.c    Wed Nov 23 10:15:18 2005
+++ b/xen/arch/x86/mpparse.c    Wed Nov 23 11:11:05 2005
@@ -62,6 +62,8 @@
 
 int pic_mode;
 unsigned long mp_lapic_addr;
+
+unsigned int def_to_bigsmp;
 
 /* Processor that is doing the boot up */
 unsigned int boot_cpu_physical_apicid = -1U;
@@ -213,6 +215,13 @@
                ver = 0x10;
        }
        apic_version[m->mpc_apicid] = ver;
+       if ((num_processors > 8) &&
+           APIC_XAPIC(ver) &&
+           (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL))
+               def_to_bigsmp = 1;
+       else
+               def_to_bigsmp = 0;
+
        bios_cpu_apicid[num_processors - 1] = m->mpc_apicid;
 }
 
diff -r b6ebabe4658a -r be41d7631c2f xen/include/asm-x86/apicdef.h
--- a/xen/include/asm-x86/apicdef.h     Wed Nov 23 10:15:18 2005
+++ b/xen/include/asm-x86/apicdef.h     Wed Nov 23 11:11:05 2005
@@ -16,6 +16,7 @@
 #define                        GET_APIC_VERSION(x)     ((x)&0xFF)
 #define                        GET_APIC_MAXLVT(x)      (((x)>>16)&0xFF)
 #define                        APIC_INTEGRATED(x)      ((x)&0xF0)
+#define                        APIC_XAPIC(x)           ((x) >= 0x14)
 #define                APIC_TASKPRI    0x80
 #define                        APIC_TPRI_MASK          0xFF
 #define                APIC_ARBPRI     0x90
diff -r b6ebabe4658a -r be41d7631c2f 
xen/include/asm-x86/mach-generic/mach_apic.h
--- a/xen/include/asm-x86/mach-generic/mach_apic.h      Wed Nov 23 10:15:18 2005
+++ b/xen/include/asm-x86/mach-generic/mach_apic.h      Wed Nov 23 11:11:05 2005
@@ -28,4 +28,6 @@
 #define enable_apic_mode (genapic->enable_apic_mode)
 #define phys_pkg_id (genapic->phys_pkg_id)
 
+extern void generic_bigsmp_probe(void);
+
 #endif /* __ASM_MACH_APIC_H */
diff -r b6ebabe4658a -r be41d7631c2f xen/include/asm-x86/mpspec.h
--- a/xen/include/asm-x86/mpspec.h      Wed Nov 23 10:15:18 2005
+++ b/xen/include/asm-x86/mpspec.h      Wed Nov 23 11:11:05 2005
@@ -11,6 +11,7 @@
 extern int quad_local_to_mp_bus_id [NR_CPUS/4][4];
 extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES];
 
+extern unsigned int def_to_bigsmp;
 extern unsigned int boot_cpu_physical_apicid;
 extern int smp_found_config;
 extern void find_smp_config (void);

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Intel systems with more than 8 CPUs require that the APIC is configured, Xen patchbot -unstable <=