kernel - Add APIC_IO conf option back in / make it adjust hw.apic_io_enable
authorMatthew Dillon <dillon@apollo.backplane.com>
Mon, 22 Nov 2010 21:46:58 +0000 (13:46 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Mon, 22 Nov 2010 21:46:58 +0000 (13:46 -0800)
* APIC_IO again controls whether a SMP kernel will use the io-apic or not.
  All it does now is adjust the hw.apic_io_enable default value.

  Changing the code to allow apic-io to be soft-selectable was great, but
  removing the kernel config option was not so great.

* SMP Kernels compiled without APIC_IO again default to not using it.  You
  can use APIC_IO either by configuring the kernel with the option or
  by setting hw.apic_io_enable=1 in /boot/loader.conf.

* SMP Kernels compiled with APIC_IO default to using APIC_IO.

* Reduces confusion between 2.8 and 2.9 kernel config files.

* Reduces personal frustrations.

sys/config/GENERIC
sys/config/GENERIC_SMP
sys/config/X86_64_GENERIC
sys/config/X86_64_GENERIC_SMP
sys/platform/pc32/conf/options
sys/platform/pc32/i386/machdep.c
sys/platform/pc64/conf/options
sys/platform/pc64/x86_64/machdep.c

index 0899a56..4792568 100644 (file)
@@ -65,12 +65,12 @@ options         ALTQ_FAIRQ      #fair queueing
 #options        ALTQ_NOPCC      #don't use processor cycle counter
 #options        ALTQ_DEBUG      #for debugging
 
-# SMP boxes with severely broken BIOSes which
-# boot fine for non-SMP builds *might* work in SMP mode
-# if you disable APIC_IO by setting the loader tunable
-# hw.apic_io_enable to 0.
+# SMP boxes should normally be build with SMP and APIC_IO.  If SMP has
+# interrupt routing problems in APIC_IO you can disable it with the
+# hw.apic_io_enable=0 tunable or by building without the APIC_IO option.
 #
 #options       SMP                     # Symmetric MultiProcessor Kernel
+#options       APIC_IO                 # hw.apic_io_enable = 1 by default
 
 # Debugging for Development
 options        DDB
index e9eaf19..c5195e1 100644 (file)
@@ -65,12 +65,13 @@ options         ALTQ_FAIRQ      #fair queueing
 #options        ALTQ_NOPCC      #don't use processor cycle counter
 #options        ALTQ_DEBUG      #for debugging
 
-# SMP boxes with severely broken BIOSes which
-# boot fine for non-SMP builds *might* work in SMP mode
-# if you disable APIC_IO by setting the loader tunable
-# hw.apic_io_enable to 0.
+# SMP boxes should normally be build with SMP and APIC_IO.  If SMP has
+# interrupt routing problems in APIC_IO you can disable it with the
+# hw.apic_io_enable=0 tunable or by building without the APIC_IO option.
+#
 #
 options        SMP                     # Symmetric MultiProcessor Kernel
+options                APIC_IO                 # hw.apic_io_enable = 1 by default
 
 # Debugging for Development
 options        DDB
index b60dbb9..30a5472 100644 (file)
@@ -60,12 +60,13 @@ options             ALTQ_FAIRQ      #fair queueing
 #options       ALTQ_DEBUG      #for debugging
 
 
-# SMP boxes with severely broken BIOSes which
-# boot fine for non-SMP builds *might* work in SMP mode
-# if you disable APIC_IO by setting the loader tunable
-# hw.apic_io_enable to 0.
+# SMP boxes should normally be build with SMP and APIC_IO.  If SMP has
+# interrupt routing problems in APIC_IO you can disable it with the
+# hw.apic_io_enable=0 tunable or by building without the APIC_IO option.
+#
 #
 #options       SMP                     # Symmetric MultiProcessor Kernel
+#options       APIC_IO                 # hw.apic_io_enable = 1 by default
 
 # Debugging for Development
 options        DDB
index 3189056..4a82102 100644 (file)
@@ -60,12 +60,13 @@ options             ALTQ_FAIRQ      #fair queueing
 #options       ALTQ_DEBUG      #for debugging
 
 
-# SMP boxes with severely broken BIOSes which
-# boot fine for non-SMP builds *might* work in SMP mode
-# if you disable APIC_IO by setting the loader tunable
-# hw.apic_io_enable to 0.
+# SMP boxes should normally be build with SMP and APIC_IO.  If SMP has
+# interrupt routing problems in APIC_IO you can disable it with the
+# hw.apic_io_enable=0 tunable or by building without the APIC_IO option.
+#
 #
 options        SMP                     # Symmetric MultiProcessor Kernel
+options                APIC_IO                 # hw.apic_io_enable = 1 by default
 
 # Debugging for Development
 options        DDB
index 61d60e7..657c5d8 100644 (file)
@@ -16,6 +16,7 @@ I586_PMC_GUPROF               opt_i586_guprof.h
 WLCACHE                        opt_wavelan.h
 WLDEBUG                        opt_wavelan.h
 BROKEN_KEYBOARD_RESET  opt_reset.h
+APIC_IO                        opt_apic.h
 
 # Options for emulators.  These should only be used at config time, so
 # they are handled like options for static file systems
index 36260f2..d137233 100644 (file)
@@ -52,6 +52,7 @@
 #include "opt_perfmon.h"
 #include "opt_swap.h"
 #include "opt_userconfig.h"
+#include "opt_apic.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1850,7 +1851,11 @@ do_next:
 }
 
 #ifdef SMP
-int apic_io_enable = 1; /* Enabled by default */
+#ifdef APIC_IO
+int apic_io_enable = 1; /* Enabled by default for kernels compiled w/APIC_IO */
+#else
+int apic_io_enable = 0; /* Disabled by default for kernels compiled without */
+#endif
 TUNABLE_INT("hw.apic_io_enable", &apic_io_enable);
 extern struct machintr_abi MachIntrABI_APIC;
 #endif
index 93a3c45..49f5a3e 100644 (file)
@@ -10,6 +10,7 @@ AUTO_EOI_2            opt_auto_eoi.h
 CONSPEED               opt_comconsole.h
 I586_PMC_GUPROF                opt_i586_guprof.h
 BROKEN_KEYBOARD_RESET  opt_reset.h
+APIC_IO                        opt_apic.h
 
 # x86_64 SMP options
 CPU_AMD64X2_INTR_SPAM  opt_cpu.h
index 10068ff..a1ffa1a 100644 (file)
@@ -51,6 +51,7 @@
 #include "opt_ipx.h"
 #include "opt_msgbuf.h"
 #include "opt_swap.h"
+#include "opt_apic.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1619,7 +1620,11 @@ do_next:
 }
 
 #ifdef SMP
-int apic_io_enable = 1; /* Enabled by default */
+#ifdef APIC_IO
+int apic_io_enable = 1; /* Enabled by default for kernels compiled w/APIC_IO */
+#else
+int apic_io_enable = 0; /* Disabled by default for kernels compiled without */
+#endif
 TUNABLE_INT("hw.apic_io_enable", &apic_io_enable);
 extern struct machintr_abi MachIntrABI_APIC;
 #endif