x86_64: Fix AP count after LAPIC enumeration
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Sun, 15 May 2011 05:53:54 +0000 (13:53 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Sun, 15 May 2011 05:55:38 +0000 (13:55 +0800)
While I'm here, add hw.ap_max to further limit the number of APs to
be activated.

sys/platform/pc64/apic/lapic.c
sys/platform/pc64/x86_64/mptable.c

index 0c89c47..d57221a 100644 (file)
@@ -705,7 +705,7 @@ int
 lapic_config(void)
 {
        struct lapic_enumerator *e;
-       int error, i, enable;
+       int error, i, enable, ap_max;
 
        for (i = 0; i < NAPICID; ++i)
                APICID_TO_CPUID(i) = -1;
@@ -728,6 +728,19 @@ lapic_config(void)
        }
 
        e->lapic_enumerate(e);
+
+       ap_max = MAXCPU - 1;
+       TUNABLE_INT_FETCH("hw.ap_max", &ap_max);
+       if (ap_max > MAXCPU - 1)
+               ap_max = MAXCPU - 1;
+
+       if (mp_naps > ap_max) {
+               kprintf("LAPIC: Warning use only %d out of %d "
+                       "available APs\n",
+                       ap_max, mp_naps);
+               mp_naps = ap_max;
+       }
+
        return 0;
 }
 
index 407f504..ec1c4f0 100644 (file)
@@ -777,18 +777,8 @@ mptable_lapic_enumerate(struct lapic_enumerator *e)
                if (logical_cpus != 0)
                        arg1.cpu_count *= logical_cpus;
        }
-       mp_naps = arg1.cpu_count;
+       mp_naps = arg1.cpu_count - 1;   /* subtract the BSP */
  
-       /* Qualify the numbers again, after possible HT fixup */
-       if (mp_naps > MAXCPU) {
-               kprintf("Warning: only using %d of %d available CPUs!\n",
-                       MAXCPU, mp_naps);
-               DELAY(1000000);
-               mp_naps = MAXCPU;
-       }
-
-       --mp_naps;      /* subtract the BSP */
-
        /*
         * Link logical CPU id to local apic id
         */