[Bluetooth] Code cleanup of the drivers source code
[pandora-kernel.git] / Documentation / cpu-hotplug.txt
index 08c5d04..bc107cb 100644 (file)
@@ -11,6 +11,8 @@
                        Joel Schopp <jschopp@austin.ibm.com>
                ia64/x86_64:
                        Ashok Raj <ashok.raj@intel.com>
+               s390:
+                       Heiko Carstens <heiko.carstens@de.ibm.com>
 
 Authors: Ashok Raj <ashok.raj@intel.com>
 Lots of feedback: Nathan Lynch <nathanl@austin.ibm.com>,
@@ -44,9 +46,28 @@ maxcpus=n    Restrict boot time cpus to n. Say if you have 4 cpus, using
              maxcpus=2 will only boot 2. You can choose to bring the
              other cpus later online, read FAQ's for more info.
 
-additional_cpus=n      [x86_64 only] use this to limit hotpluggable cpus.
-                        This option sets
-                       cpu_possible_map = cpu_present_map + additional_cpus
+additional_cpus*=n     Use this to limit hotpluggable cpus. This option sets
+                       cpu_possible_map = cpu_present_map + additional_cpus
+
+(*) Option valid only for following architectures
+- x86_64, ia64, s390
+
+ia64 and x86_64 use the number of disabled local apics in ACPI tables MADT
+to determine the number of potentially hot-pluggable cpus. The implementation
+should only rely on this to count the #of cpus, but *MUST* not rely on the
+apicid values in those tables for disabled apics. In the event BIOS doesnt
+mark such hot-pluggable cpus as disabled entries, one could use this
+parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map.
+
+s390 uses the number of cpus it detects at IPL time to also the number of bits
+in cpu_possible_map. If it is desired to add additional cpus at a later time
+the number should be specified using this option or the possible_cpus option.
+
+possible_cpus=n                [s390 only] use this to set hotpluggable cpus.
+                       This option sets possible_cpus bits in
+                       cpu_possible_map. Thus keeping the numbers of bits set
+                       constant even if the machine gets rebooted.
+                       This option overrides additional_cpus.
 
 CPU maps and such
 -----------------
@@ -76,13 +97,13 @@ at which time hotplug is disabled.
 
 You really dont need to manipulate any of the system cpu maps. They should
 be read-only for most use. When setting up per-cpu resources almost always use
-cpu_possible_map/for_each_cpu() to iterate.
+cpu_possible_map/for_each_possible_cpu() to iterate.
 
 Never use anything other than cpumask_t to represent bitmap of CPUs.
 
 #include <linux/cpumask.h>
 
-for_each_cpu              - Iterate over cpu_possible_map
+for_each_possible_cpu     - Iterate over cpu_possible_map
 for_each_online_cpu       - Iterate over cpu_online_map
 for_each_present_cpu      - Iterate over cpu_present_map
 for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask.
@@ -230,16 +251,24 @@ A: This is what you would need in your kernel code to receive notifications.
                return NOTIFY_OK;
        }
 
-       static struct notifier_block foobar_cpu_notifer =
+       static struct notifier_block __cpuinitdata foobar_cpu_notifer =
        {
           .notifier_call = foobar_cpu_callback,
        };
 
+You need to call register_cpu_notifier() from your init function.
+Init functions could be of two types:
+1. early init (init function called when only the boot processor is online).
+2. late init (init function called _after_ all the CPUs are online).
 
-In your init function,
+For the first case, you should add the following to your init function
 
        register_cpu_notifier(&foobar_cpu_notifier);
 
+For the second case, you should add the following to your init function
+
+       register_hotcpu_notifier(&foobar_cpu_notifier);
+
 You can fail PREPARE notifiers if something doesn't work to prepare resources.
 This will stop the activity and send a following CANCELED event back.