cpumask: Replace cpumask_t with struct cpumask
Subsystems (36)
cover cpumask: Replace cpumask_t with struct cpumask
[Resubmit: cleanup and rebase on latest tip/master.]
Redesign cpumask API to explicitly declare struct cpumask pointers to the cpumask_* operators and add functions to make it easier to support struct cpumask pointers on the stack.
This patchset supplies the infrastructure going forward to implement this new struct cpumask API. Many more patches (currently 58) have been written and tested to verify the functionality of this API. These will be submitted as soon as they are thoroughly tested.
Compiled and tested on x86_64.
Based on tip/master @ v2.6.27-6973-ga90cd11
PATCH 1/35 cpumask: add for_each_cpu_mask_and function
Add for_each_cpu_mask_and() function to eliminate need for a common use of a temporary cpumask_t variable. When the following procedure is being used:
funcproto(const cpumask_t *mask, ...)
{
cpumask_t temp;
cpus_and(temp, mask, cpu_online_map);
for_each_cpu_mask(cpu, temp)
...It then becomes:
funcproto(cpumask_t *mask, ...)
{
for_each_cpu_mask_and(cpu, *mask, cpu_online_map)
...... eliminating the need for the temp cpumask.
Applies to linux-2.6.tip/master.
--- include/linux/cpumask.h | 33 ++++++++++++++++++++++++--------- lib/cpumask.c | 9 +++++++++ 2 files changed, 33 insertions(+), 9 deletions(-)
include/linux/cpumask.h +24 -9
@@ -109,6 +109,7 @@* * for_each_cpu_mask(cpu, mask) for-loop cpu over mask using NR_CPUS * for_each_cpu_mask_nr(cpu, mask) for-loop cpu over mask using nr_cpu_ids +* for_each_cpu_mask_and(cpu, mask, and) for-loop cpu over (mask & and). * * int num_online_cpus() Number of online CPUs * int num_possible_cpus() Number of all possible CPUs
@@ -400,29 +401,41 @@ static inline void __cpus_fold(cpumask_t#if NR_CPUS ==1 -#define nr_cpu_ids 1 -#define first_cpu (src) ({ (void)(src); 0; }) -#define next_cpu (n, src) ({ (void)(src); 1; }) -#define any_online_cpu (mask) 0 -#define for_each_cpu_mask (cpu, mask) \ +#define nr_cpu_ids 1 +#define first_cpu (src) ({ (void)(src); 0; }) +#define next_cpu (n, src) ({ (void)(src); 1; }) +#define cpumask_next_and (n, srcp, andp) ({ (void)(srcp), (void)(andp); 1; }) +#define any_online_cpu (mask) 0 + +#define for_each_cpu_mask (cpu, mask) \ for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask) +#define for_each_cpu_mask_and (cpu, mask, and) \ + for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask, (void)and)#else /* NR_CPUS > 1 */ extern int nr_cpu_ids;int __first_cpu (const cpumask_t *srcp);int __next_cpu (int n,const cpumask_t *srcp); +int cpumask_next_and (int n,const cpumask_t *srcp,const cpumask_t *andp);int __any_online_cpu (const cpumask_t *mask);#define first_cpu (src) __first_cpu(&(src))#define next_cpu (n, src) __next_cpu((n), &(src))#define any_online_cpu (mask) __any_online_cpu(&(mask)) +#define for_each_cpu_mask (cpu, mask) \ for ((cpu) = -1; \ (cpu) = next_cpu((cpu), (mask)), \ - (cpu) < NR_CPUS; ) + (cpu) < NR_CPUS;) +#define for_each_cpu_mask_and (cpu, mask, and) \ + for ((cpu) = -1; \ + (cpu) = cpumask_next_and((cpu), &(mask), &(and)), \ + (cpu) < nr_cpu_ids;)#endif +#define cpumask_first_and (mask, and) cpumask_next_and(-1, (mask), (and)) +#if NR_CPUS <=64 #define next_cpu_nr (n, src) next_cpu(n, src)
@@ -432,12 +445,14 @@ int __any_online_cpu(const cpumask_t *ma#else /* NR_CPUS > 64 */ int __next_cpu_nr (int n,const cpumask_t *srcp); -#define next_cpu_nr (n, src) __next_cpu_nr((n), &(src)) -#define cpus_weight_nr (cpumask) __cpus_weight(&(cpumask), nr_cpu_ids) + +#define next_cpu_nr (n, src) __next_cpu_nr((n), &(src)) +#define cpus_weight_nr (cpumask) __cpus_weight(&(cpumask), nr_cpu_ids) +#define for_each_cpu_mask_nr (cpu, mask) \ for ((cpu) = -1; \ (cpu) = next_cpu_nr((cpu), (mask)), \ - (cpu) < nr_cpu_ids; ) + (cpu) < nr_cpu_ids;)#endif /* NR_CPUS > 64 */
lib/cpumask.c +9 -0
@@ -15,6 +15,15 @@ int __next_cpu(int n, const cpumask_t *s }EXPORT_SYMBOL (__next_cpu); +int cpumask_next_and (int n,const cpumask_t *srcp,const cpumask_t *andp) +{ +while ((n =next_cpu_nr (n, *srcp)) < nr_cpu_ids) +if (cpu_isset (n, *andp)) +break ; +return n; +} +EXPORT_SYMBOL (cpumask_next_and); +#if NR_CPUS >64 int __next_cpu_nr (int n,const cpumask_t *srcp) {
PATCH 2/35 x86 smp: modify send_IPI_mask interface to accept cpumask_t pointers
In reply to Mike TravisChange genapic interfaces to accept cpumask_t pointers where possible.
Modify external callers to use cpumask_t pointers in function calls.
Create new send_IPI_mask_allbutself which is the same as the send_IPI_mask functions but removes smp_processor_id() from list. This removes another common need for a temporary cpumask_t variable.
Functions that used a temp cpumask_t variable for:
cpumask_t allbutme = cpu_online_map;
cpu_clear(smp_processor_id(), allbutme);
if (!cpus_empty(allbutme))
...becomes:
if (!cpus_equal(cpu_online_map, cpumask_of_cpu(cpu)))
...
Other minor code optimizations (like using cpus_clear instead of CPU_MASK_NONE, etc.)
Applies to linux-2.6.tip/master.
--- arch/x86/kernel/apic.c | 2 arch/x86/kernel/crash.c | 5 - arch/x86/kernel/genapic_flat_64.c | 76 +++++++++++++------ arch/x86/kernel/genx2apic_cluster.c | 60 ++++++++++----- arch/x86/kernel/genx2apic_phys.c | 55 +++++++++----- arch/x86/kernel/genx2apic_uv_x.c | 43 ++++++----- arch/x86/kernel/io_apic.c | 118 ++++++++++++++----------------- arch/x86/kernel/ipi.c | 26 ++++-- arch/x86/kernel/smp.c | 6 - arch/x86/kernel/tlb_32.c | 2 arch/x86/kernel/tlb_64.c | 2 arch/x86/mach-generic/bigsmp.c | 5 - arch/x86/mach-generic/es7000.c | 5 - arch/x86/mach-generic/numaq.c | 5 - arch/x86/mach-generic/summit.c | 5 - arch/x86/xen/smp.c | 15 +-- include/asm-x86/bigsmp/apic.h | 14 +-- include/asm-x86/bigsmp/ipi.h | 9 +- include/asm-x86/es7000/apic.h | 22 ++--- include/asm-x86/es7000/ipi.h | 9 +- include/asm-x86/genapic_32.h | 11 +- include/asm-x86/genapic_64.h | 11 +- include/asm-x86/ipi.h | 21 ++++- include/asm-x86/mach-default/mach_apic.h | 17 ++-- include/asm-x86/mach-default/mach_ipi.h | 18 ++-- include/asm-x86/numaq/apic.h | 4 - include/asm-x86/numaq/ipi.h | 9 +- include/asm-x86/summit/apic.h | 12 +-- include/asm-x86/summit/ipi.h | 9 +- 29 files changed, 347 insertions(+), 249 deletions(-)
arch/x86/kernel/apic.c +1 -1
@@ -456,7 +456,7 @@ static void lapic_timer_setup(enum clockstatic void lapic_timer_broadcast (cpumask_t mask) {#ifdef CONFIG_SMP -send_IPI_mask (mask,LOCAL_TIMER_VECTOR ); +send_IPI_mask (&mask,LOCAL_TIMER_VECTOR );#endif }
arch/x86/kernel/crash.c +1 -4
@@ -77,10 +77,7 @@ static int crash_nmi_callback(struct notstatic void smp_send_nmi_allbutself (void ) { -cpumask_t mask = cpu_online_map; -cpu_clear (safe_smp_processor_id (), mask); -if (!cpus_empty (mask)) -send_IPI_mask (mask,NMI_VECTOR ); +send_IPI_allbutself (NMI_VECTOR ); }static struct notifier_block crash_nmi_nb = {
arch/x86/kernel/genapic_flat_64.c +50 -26
169 lines not on this page · raw message
arch/x86/kernel/genx2apic_cluster.c +40 -20
112 lines not on this page · raw message
arch/x86/kernel/genx2apic_phys.c +37 -18
106 lines not on this page · raw message
arch/x86/kernel/genx2apic_uv_x.c +26 -17
90 lines not on this page · raw message
arch/x86/kernel/io_apic.c +57 -61
353 lines not on this page · raw message
arch/x86/kernel/ipi.c +19 -7
@@ -116,9 +116,9 @@ static inline void __send_IPI_dest_field/* * This is only used on smaller machines. */ -void send_IPI_mask_bitmask (cpumask_t cpumask,int vector) +void send_IPI_mask_bitmask (const cpumask_t *cpumask,int vector) { -unsigned long mask =cpus_addr (cpumask)[0 ]; +unsigned long mask =cpus_addr (*cpumask)[0 ];unsigned long flags;local_irq_save (flags);
@@ -127,7 +127,7 @@ void send_IPI_mask_bitmask(cpumask_t cpulocal_irq_restore (flags); } -void send_IPI_mask_sequence (cpumask_t mask,int vector) +void send_IPI_mask_sequence (const cpumask_t *mask,int vector) {unsigned long flags;unsigned int query_cpu;
@@ -139,12 +139,24 @@ void send_IPI_mask_sequence(cpumask_t ma*/ local_irq_save (flags); -for_each_possible_cpu (query_cpu) { -if (cpu_isset (query_cpu, mask)) { +for_each_cpu_mask_nr (query_cpu, *mask) +__send_IPI_dest_field (cpu_to_logical_apicid (query_cpu), vector); +local_irq_restore (flags); +} + +void send_IPI_mask_allbutself (const cpumask_t *mask,int vector) +{ +unsigned long flags; +unsigned int query_cpu; +unsigned int this_cpu =smp_processor_id (); + +/* See Hack comment above */ + +local_irq_save (flags); +for_each_cpu_mask_nr (query_cpu, *mask) +if (query_cpu != this_cpu)__send_IPI_dest_field (cpu_to_logical_apicid (query_cpu), vector); - } - }local_irq_restore (flags); }
arch/x86/kernel/smp.c +3 -3
@@ -118,12 +118,12 @@ static void native_smp_send_reschedule(iWARN_ON (1 );return ; } -send_IPI_mask (cpumask_of_cpu (cpu),RESCHEDULE_VECTOR ); +send_IPI_mask (&cpumask_of_cpu (cpu),RESCHEDULE_VECTOR ); }void native_send_call_func_single_ipi (int cpu) { -send_IPI_mask (cpumask_of_cpu (cpu),CALL_FUNCTION_SINGLE_VECTOR ); +send_IPI_mask (&cpumask_of_cpu (cpu),CALL_FUNCTION_SINGLE_VECTOR ); }void native_send_call_func_ipi (const cpumask_t *mask)
@@ -137,7 +137,7 @@ void native_send_call_func_ipi(const cpu cpus_equal(cpu_online_map, cpu_callout_map))send_IPI_allbutself (CALL_FUNCTION_VECTOR ); else - send_IPI_mask(*mask, CALL_FUNCTION_VECTOR); +send_IPI_mask (mask ,CALL_FUNCTION_VECTOR ); }static void stop_this_cpu (void *dummy)
arch/x86/kernel/tlb_32.c +1 -1
@@ -158,7 +158,7 @@ void native_flush_tlb_others(const cpuma* We have to send the IPI only to * CPUs affected. */ -send_IPI_mask (cpumask,INVALIDATE_TLB_VECTOR ); +send_IPI_mask (&cpumask,INVALIDATE_TLB_VECTOR );while (!cpus_empty (flush_cpumask))/* nothing. lockup detection does not belong here */
arch/x86/kernel/tlb_64.c +1 -1
@@ -186,7 +186,7 @@ void native_flush_tlb_others(const cpuma* We have to send the IPI only to * CPUs affected. */ -send_IPI_mask (cpumask,INVALIDATE_TLB_VECTOR_START + sender); +send_IPI_mask (&cpumask,INVALIDATE_TLB_VECTOR_START + sender);while (!cpus_empty (f->flush_cpumask))cpu_relax ();
arch/x86/mach-generic/bigsmp.c +3 -2
@@ -41,9 +41,10 @@ static const struct dmi_system_id bigsmp { } }; -static cpumask_t vector_allocation_domain (int cpu) +static void vector_allocation_domain (int cpu,cpumask_t *retmask) { -return cpumask_of_cpu (cpu); +cpus_clear (*retmask); +cpu_set (cpu, *retmask); }static int probe_bigsmp (void )
arch/x86/mach-generic/es7000.c +2 -3
@@ -75,7 +75,7 @@ static int __init acpi_madt_oem_check(ch }#endif -static cpumask_t vector_allocation_domain (int cpu) +static void vector_allocation_domain (int cpu,cpumask_t *retmask) {/* Careful. Some cpus do not strictly honor the set of cpus * specified in the interrupt destination when using lowest
@@ -85,8 +85,7 @@ static cpumask_t vector_allocation_domai* deliver interrupts to the wrong hyperthread when only one * hyperthread was specified in the interrupt desitination. */ -cpumask_t domain = { { [0 ] =APIC_ALL_CPUS , } }; -return domain; + *retmask = (cpumask_t ){ { [0 ] =APIC_ALL_CPUS , } }; } struct genapic __initdata_refok apic_es7000 = APIC_INIT("es7000", probe_es7000);
arch/x86/mach-generic/numaq.c +2 -3
@@ -38,7 +38,7 @@ static int acpi_madt_oem_check(char *oemreturn 0 ; } -static cpumask_t vector_allocation_domain (int cpu) +static void vector_allocation_domain (int cpu,cpumask_t *retmask) {/* Careful. Some cpus do not strictly honor the set of cpus * specified in the interrupt destination when using lowest
@@ -48,8 +48,7 @@ static cpumask_t vector_allocation_domai* deliver interrupts to the wrong hyperthread when only one * hyperthread was specified in the interrupt desitination. */ -cpumask_t domain = { { [0 ] =APIC_ALL_CPUS , } }; -return domain; + *retmask = (cpumask_t ){ { [0 ] =APIC_ALL_CPUS , } }; }struct genapic apic_numaq =APIC_INIT ("NUMAQ" , probe_numaq);
arch/x86/mach-generic/summit.c +2 -3
@@ -23,7 +23,7 @@ static int probe_summit(void)return 0 ; } -static cpumask_t vector_allocation_domain (int cpu) +static void vector_allocation_domain (int cpu,cpumask_t *retmask) {/* Careful. Some cpus do not strictly honor the set of cpus * specified in the interrupt destination when using lowest
@@ -33,8 +33,7 @@ static cpumask_t vector_allocation_domai* deliver interrupts to the wrong hyperthread when only one * hyperthread was specified in the interrupt desitination. */ -cpumask_t domain = { { [0 ] =APIC_ALL_CPUS , } }; -return domain; + *retmask = (cpumask_t ){ { [0 ] =APIC_ALL_CPUS , } }; }struct genapic apic_summit =APIC_INIT ("summit" , probe_summit);
arch/x86/xen/smp.c +7 -8
@@ -158,7 +158,7 @@ static void __init xen_fill_possible_map {int i, rc; -for (i =0 ; i <NR_CPUS ; i++) { +for (i =0 ; i < nr_cpu_ids; i++) { rc =HYPERVISOR_vcpu_op (VCPUOP_is_up, i,NULL );if (rc >=0 ) { num_processors++;
@@ -196,7 +196,7 @@ static void __init xen_smp_prepare_cpus(/* Restrict the possible_map according to max_cpus. */ while ((num_possible_cpus () >1 ) && (num_possible_cpus () > max_cpus)) { -for (cpu =NR_CPUS -1 ; !cpu_possible (cpu); cpu--) +for (cpu = nr_cpu_ids -1 ; !cpu_possible (cpu); cpu--)continue ;cpu_clear (cpu, cpu_possible_map); }
@@ -408,13 +408,11 @@ static void xen_smp_send_reschedule(intxen_send_IPI_one (cpu,XEN_RESCHEDULE_VECTOR ); } -static void xen_send_IPI_mask (cpumask_t mask,enum ipi_vector vector) +static void xen_send_IPI_mask (const cpumask_t *mask,enum ipi_vector vector) {unsigned cpu; -cpus_and (mask, mask, cpu_online_map); - -for_each_cpu_mask_nr (cpu, mask) +for_each_cpu_mask_and (cpu, *mask, cpu_online_map)xen_send_IPI_one (cpu, vector); }
@@ -422,7 +420,7 @@ static void xen_smp_send_call_function_i {int cpu; -xen_send_IPI_mask (*mask,XEN_CALL_FUNCTION_VECTOR ); +xen_send_IPI_mask (mask,XEN_CALL_FUNCTION_VECTOR );/* Make sure other vcpus get a chance to run if they need to. */ for_each_cpu_mask_nr (cpu, *mask) {
@@ -435,7 +433,8 @@ static void xen_smp_send_call_function_istatic void xen_smp_send_call_function_single_ipi (int cpu) { -xen_send_IPI_mask (cpumask_of_cpu (cpu),XEN_CALL_FUNCTION_SINGLE_VECTOR ); +xen_send_IPI_mask (&cpumask_of_cpu (cpu), +XEN_CALL_FUNCTION_SINGLE_VECTOR ); }static irqreturn_t xen_call_function_interrupt (int irq,void *dev_id)
include/asm-x86/bigsmp/apic.h +7 -7
@@ -9,12 +9,12 @@ static inline int apic_id_registered(voireturn (1 ); } -static inline cpumask_t target_cpus (void ) +static inline const cpumask_t *target_cpus (void ) {#ifdef CONFIG_SMP -return cpu_online_map; +return &cpu_online_map;#else -return cpumask_of_cpu (0 ); +return &cpumask_of_cpu (0 );#endif }
@@ -81,7 +81,7 @@ static inline int apicid_to_node(int logstatic inline int cpu_present_to_apicid (int mps_cpu) { -if (mps_cpu <NR_CPUS ) +if (mps_cpu < nr_cpu_ids)return (int )per_cpu (x86_bios_cpu_apicid, mps_cpu);return BAD_APICID ;
@@ -96,7 +96,7 @@ extern u8 cpu_2_logical_apicid[];/* Mapping from cpu number to logical apicid */ static inline int cpu_to_logical_apicid (int cpu) { -if (cpu >=NR_CPUS ) +if (cpu >= nr_cpu_ids)return BAD_APICID ;return cpu_physical_id (cpu); }
@@ -121,12 +121,12 @@ static inline int check_phys_apicid_pres }/* As we are using single CPU as destination, pick only one CPU here */ -static inline unsigned int cpu_mask_to_apicid (cpumask_t cpumask) +static inline unsigned int cpu_mask_to_apicid (const cpumask_t *cpumask) {int cpu;int apicid; - cpu =first_cpu (cpumask); + cpu =first_cpu (*cpumask); apicid =cpu_to_logical_apicid (cpu);return apicid; }
include/asm-x86/bigsmp/ipi.h +5 -4
@@ -1,9 +1,10 @@#ifndef __ASM_MACH_IPI_H#define __ASM_MACH_IPI_H -void send_IPI_mask_sequence (cpumask_t mask,int vector); +void send_IPI_mask_sequence (const cpumask_t *mask,int vector); +void send_IPI_mask_allbutself (const cpumask_t *mask,int vector); -static inline void send_IPI_mask (cpumask_t mask,int vector) +static inline void send_IPI_mask (const cpumask_t *mask,int vector) {send_IPI_mask_sequence (mask, vector); }
@@ -14,12 +15,12 @@ static inline void send_IPI_allbutself(icpu_clear (smp_processor_id (), mask);if (!cpus_empty (mask)) - send_IPI_mask(mask, vector); + send_IPI_mask(&mask, vector); }static inline void send_IPI_all (int vector) { -send_IPI_mask (cpu_online_map, vector); +send_IPI_mask (&cpu_online_map, vector); }#endif /* __ASM_MACH_IPI_H */
include/asm-x86/es7000/apic.h +11 -11
@@ -9,12 +9,12 @@ static inline int apic_id_registered(voireturn (1 ); } -static inline cpumask_t target_cpus (void ) +static inline const cpumask_t *target_cpus (void ) {#if definedCONFIG_ES7000_CLUSTERED_APIC -return CPU_MASK_ALL ; +return &CPU_MASK_ALL ;#else -return cpumask_of_cpu (smp_processor_id ()); +return &cpumask_of_cpu (smp_processor_id ());#endif }
@@ -98,7 +98,7 @@ static inline int cpu_present_to_apicid( {if (!mps_cpu)return boot_cpu_physical_apicid; -else if (mps_cpu <NR_CPUS ) +else if (mps_cpu < nr_cpu_ids)return (int )per_cpu (x86_bios_cpu_apicid, mps_cpu);else return BAD_APICID ;
@@ -118,9 +118,9 @@ extern u8 cpu_2_logical_apicid[];static inline int cpu_to_logical_apicid (int cpu) {#ifdef CONFIG_SMP -if (cpu >=NR_CPUS ) -return BAD_APICID ; -return (int )cpu_2_logical_apicid[cpu]; +if (cpu >= nr_cpu_ids) +return BAD_APICID ; +return (int )cpu_2_logical_apicid[cpu];#else return logical_smp_processor_id ();#endif
@@ -144,14 +144,14 @@ static inline int check_phys_apicid_presreturn (1 ); } -static inline unsigned int cpu_mask_to_apicid (cpumask_t cpumask) +static inline unsigned int cpu_mask_to_apicid (const cpumask_t *cpumask) {int num_bits_set;int cpus_found =0 ;int cpu;int apicid; - num_bits_set =cpus_weight (cpumask); + num_bits_set =cpus_weight (*cpumask);/* Return id to all */ if (num_bits_set == NR_CPUS)#if definedCONFIG_ES7000_CLUSTERED_APIC
@@ -163,10 +163,10 @@ static inline unsigned int cpu_mask_to_a* The cpus in the mask must all be on the apic cluster. If are not * on the same apicid cluster return default value of TARGET_CPUS. */ - cpu =first_cpu (cpumask); + cpu =first_cpu (*cpumask); apicid =cpu_to_logical_apicid (cpu);while (cpus_found < num_bits_set) { -if (cpu_isset (cpu, cpumask)) { +if (cpu_isset (cpu, *cpumask)) {int new_apicid =cpu_to_logical_apicid (cpu);if (apicid_cluster (apicid) !=apicid_cluster (new_apicid)){
include/asm-x86/es7000/ipi.h +5 -4
@@ -1,9 +1,10 @@#ifndef __ASM_ES7000_IPI_H#define __ASM_ES7000_IPI_H -void send_IPI_mask_sequence (cpumask_t mask,int vector); +void send_IPI_mask_sequence (const cpumask_t *mask,int vector); +void send_IPI_mask_allbutself (const cpumask_t *mask,int vector); -static inline void send_IPI_mask (cpumask_t mask,int vector) +static inline void send_IPI_mask (const cpumask_t *mask,int vector) {send_IPI_mask_sequence (mask, vector); }
@@ -13,12 +14,12 @@ static inline void send_IPI_allbutself(icpumask_t mask = cpu_online_map;cpu_clear (smp_processor_id (), mask);if (!cpus_empty (mask)) - send_IPI_mask(mask, vector); + send_IPI_mask(&mask, vector); }static inline void send_IPI_all (int vector) { -send_IPI_mask (cpu_online_map, vector); +send_IPI_mask (&cpu_online_map, vector); }#endif /* __ASM_ES7000_IPI_H */
include/asm-x86/genapic_32.h +6 -5
@@ -23,7 +23,7 @@ struct genapic {int (*probe)(void );int (*apic_id_registered)(void ); -cpumask_t (*target_cpus)(void); +const cpumask_t *(*target_cpus)(void );int int_delivery_mode;int int_dest_mode;int ESR_DISABLE ;
@@ -56,12 +56,13 @@ struct genapic {unsigned (*get_apic_id)(unsigned long x);unsigned long apic_id_mask; -unsigned int (*cpu_mask_to_apicid)(cpumask_t cpumask); -cpumask_t (*vector_allocation_domain)(int cpu); +unsigned int (*cpu_mask_to_apicid)(const cpumask_t *cpumask); +void (*vector_allocation_domain)(int cpu,cpumask_t *retmask);#ifdef CONFIG_SMP /* ipi */ -void (*send_IPI_mask)(cpumask_t mask,int vector); +void (*send_IPI_mask)(const cpumask_t *mask,int vector); +void (*send_IPI_mask_allbutself)(const cpumask_t *mask,int vector);void (*send_IPI_allbutself)(int vector);void (*send_IPI_all)(int vector);#endif
@@ -105,7 +106,7 @@ struct genapic {APICFUNC (get_apic_id) \ .apic_id_mask =APIC_ID_MASK , \ APICFUNC(cpu_mask_to_apicid) \ - APICFUNC(vector_allocation_domain) \ + APICFUNC(vector_allocation_domain) \ APICFUNC(acpi_madt_oem_check) \ IPIFUNC(send_IPI_mask) \ IPIFUNC(send_IPI_allbutself) \
include/asm-x86/genapic_64.h +7 -4
@@ -1,6 +1,8 @@#ifndef ASM_X86__GENAPIC_64_H #define ASM_X86__GENAPIC_64_H +#include <linux/cpumask.h> +/* * Copyright 2004 James Cleverdon, IBM. * Subject to the GNU Public License, v.2
@@ -18,16 +20,17 @@ struct genapic {u32 int_delivery_mode;u32 int_dest_mode;int (*apic_id_registered)(void ); -cpumask_t (*target_cpus)(void); -cpumask_t (*vector_allocation_domain)(int cpu); +const cpumask_t *(*target_cpus)(void ); +void (*vector_allocation_domain)(int cpu,cpumask_t *retmask);void (*init_apic_ldr)(void );/* ipi */ -void (*send_IPI_mask)(cpumask_t mask,int vector); +void (*send_IPI_mask)(const cpumask_t *mask,int vector); +void (*send_IPI_mask_allbutself)(const cpumask_t *mask,int vector);void (*send_IPI_allbutself)(int vector);void (*send_IPI_all)(int vector);void (*send_IPI_self)(int vector);/* */ -unsigned int (*cpu_mask_to_apicid)(cpumask_t cpumask); +unsigned int (*cpu_mask_to_apicid)(const cpumask_t *cpumask);unsigned int (*phys_pkg_id)(int index_msb);unsigned int (*get_apic_id)(unsigned long x);unsigned long (*set_apic_id)(unsigned int id);
include/asm-x86/ipi.h +19 -2
@@ -117,7 +117,7 @@ static inline void __send_IPI_dest_fieldnative_apic_mem_write (APIC_ICR , cfg); } -static inline void send_IPI_mask_sequence (cpumask_t mask,int vector) +static inline void send_IPI_mask_sequence (const cpumask_t *mask,int vector) {unsigned long flags;unsigned long query_cpu;
@@ -128,11 +128,28 @@ static inline void send_IPI_mask_sequenc* - mbligh */ local_irq_save (flags); -for_each_cpu_mask_nr (query_cpu, mask) { +for_each_cpu_mask_nr (query_cpu, *mask) {__send_IPI_dest_field (per_cpu (x86_cpu_to_apicid, query_cpu), vector,APIC_DEST_PHYSICAL ); } local_irq_restore(flags); } +static inline void send_IPI_mask_allbutself (const cpumask_t *mask,int vector) +{ +unsigned long flags; +unsigned int query_cpu; +unsigned int this_cpu =smp_processor_id (); + +/* See Hack comment above */ + +local_irq_save (flags); +for_each_cpu_mask_nr (query_cpu, *mask) +if (query_cpu != this_cpu) +__send_IPI_dest_field ( +per_cpu (x86_cpu_to_apicid, query_cpu), + vector,APIC_DEST_PHYSICAL ); +local_irq_restore (flags); +} +#endif /* ASM_X86__IPI_H */
include/asm-x86/mach-default/mach_apic.h +8 -9
@@ -8,12 +8,12 @@#define APIC_DFR_VALUE (APIC_DFR_FLAT) -static inline cpumask_t target_cpus (void ) +static inline const cpumask_t *target_cpus (void ) {#ifdef CONFIG_SMP -return cpu_online_map; +return &cpu_online_map;#else -return cpumask_of_cpu (0 ); +return &cpumask_of_cpu (0 );#endif }
@@ -59,9 +59,9 @@ static inline int apic_id_registered(voireturn physid_isset (read_apic_id (), phys_cpu_present_map); } -static inline unsigned int cpu_mask_to_apicid (cpumask_t cpumask) +static inline unsigned int cpu_mask_to_apicid (const cpumask_t *cpumask) { -return cpus_addr (cpumask)[0 ]; +return cpus_addr (*cpumask)[0 ]; }static inline u32 phys_pkg_id (u32 cpuid_apic,int index_msb)
@@ -86,7 +86,7 @@ static inline int apicid_to_node(int log#endif } -static inline cpumask_t vector_allocation_domain (int cpu) +static inline void vector_allocation_domain (int cpu,cpumask_t *retmask) {/* Careful. Some cpus do not strictly honor the set of cpus * specified in the interrupt destination when using lowest
@@ -96,8 +96,7 @@ static inline cpumask_t vector_allocatio* deliver interrupts to the wrong hyperthread when only one * hyperthread was specified in the interrupt desitination. */ -cpumask_t domain = { { [0 ] =APIC_ALL_CPUS , } }; - return domain; + *retmask = (cpumask_t){ { [0] = APIC_ALL_CPUS, } }; }#endif
@@ -129,7 +128,7 @@ static inline int cpu_to_logical_apicid(static inline int cpu_present_to_apicid (int mps_cpu) { -if (mps_cpu <NR_CPUS &&cpu_present (mps_cpu)) +if (mps_cpu < nr_cpu_ids &&cpu_present (mps_cpu))return (int )per_cpu (x86_bios_cpu_apicid, mps_cpu);else return BAD_APICID ;
include/asm-x86/mach-default/mach_ipi.h +9 -9
@@ -4,7 +4,8 @@/* Avoid include hell */ #define NMI_VECTOR 0x02 -void send_IPI_mask_bitmask (cpumask_t mask,int vector); +void send_IPI_mask_bitmask (const cpumask_t *mask,int vector); +void send_IPI_mask_allbutself (const cpumask_t *mask,int vector);void __send_IPI_shortcut (unsigned int shortcut,int vector);extern int no_broadcast;
@@ -12,28 +13,27 @@ extern int no_broadcast;#ifdef CONFIG_X86_64 #include <asm/genapic.h> #define send_IPI_mask (genapic->send_IPI_mask) +#define send_IPI_mask_allbutself (genapic->send_IPI_mask_allbutself)#else -static inline void send_IPI_mask (cpumask_t mask,int vector) +static inline void send_IPI_mask (const cpumask_t *mask,int vector) {send_IPI_mask_bitmask (mask, vector); } +void send_IPI_mask_allbutself (const cpumask_t *mask,int vector);#endif static inline void __local_send_IPI_allbutself (int vector) { -if (no_broadcast || vector ==NMI_VECTOR ) { -cpumask_t mask = cpu_online_map; - -cpu_clear (smp_processor_id (), mask); -send_IPI_mask (mask, vector); - }else +if (no_broadcast || vector ==NMI_VECTOR ) +send_IPI_mask_allbutself (&cpu_online_map, vector); +else __send_IPI_shortcut (APIC_DEST_ALLBUT , vector); }static inline void __local_send_IPI_all (int vector) {if (no_broadcast || vector ==NMI_VECTOR ) -send_IPI_mask (cpu_online_map, vector); +send_IPI_mask (&cpu_online_map, vector);else __send_IPI_shortcut (APIC_DEST_ALLINC , vector); }
include/asm-x86/numaq/apic.h +2 -2
@@ -7,7 +7,7 @@#define APIC_DFR_VALUE (APIC_DFR_CLUSTER) -static inline cpumask_t target_cpus (void ) +static inline const cpumask_t *target_cpus (void ) {return CPU_MASK_ALL ; }
@@ -122,7 +122,7 @@ static inline void enable_apic_mode(void* We use physical apicids here, not logical, so just return the default * physical broadcast to stop people from breaking us */ -static inline unsigned int cpu_mask_to_apicid (cpumask_t cpumask) +static inline unsigned int cpu_mask_to_apicid (const cpumask_t *cpumask) {return (int )0xF ; }
include/asm-x86/numaq/ipi.h +5 -4
@@ -1,9 +1,10 @@#ifndef __ASM_NUMAQ_IPI_H#define __ASM_NUMAQ_IPI_H -void send_IPI_mask_sequence (cpumask_t ,int vector); +void send_IPI_mask_sequence (const cpumask_t *mask,int vector); +void send_IPI_mask_allbutself (const cpumask_t *mask,int vector); -static inline void send_IPI_mask (cpumask_t mask,int vector) +static inline void send_IPI_mask (const cpumask_t *mask,int vector) {send_IPI_mask_sequence (mask, vector); }
@@ -14,12 +15,12 @@ static inline void send_IPI_allbutself(icpu_clear (smp_processor_id (), mask);if (!cpus_empty (mask)) - send_IPI_mask(mask, vector); + send_IPI_mask(&mask, vector); }static inline void send_IPI_all (int vector) { -send_IPI_mask (cpu_online_map, vector); +send_IPI_mask (&cpu_online_map, vector); }#endif /* __ASM_NUMAQ_IPI_H */
include/asm-x86/summit/apic.h +6 -6
@@ -14,13 +14,13 @@#define APIC_DFR_VALUE (APIC_DFR_CLUSTER) -static inline cpumask_t target_cpus (void ) +static inline const cpumask_t *target_cpus (void ) {/* CPU_MASK_ALL (0xff) has undefined behaviour with * dest_LowestPrio mode logical clustered apic interrupt routing * Just start on cpu 0. IRQ balancing will spread load */ -return cpumask_of_cpu (0 ); +return &cpumask_of_cpu (0 ); }#define INT_DELIVERY_MODE (dest_LowestPrio)
@@ -137,14 +137,14 @@ static inline void enable_apic_mode(void { } -static inline unsigned int cpu_mask_to_apicid (cpumask_t cpumask) +static inline unsigned int cpu_mask_to_apicid (const cpumask_t *cpumask) {int num_bits_set;int cpus_found =0 ;int cpu;int apicid; - num_bits_set =cpus_weight (cpumask); + num_bits_set =cpus_weight (*cpumask);/* Return id to all */ if (num_bits_set ==NR_CPUS )return (int )0xFF ;
@@ -152,10 +152,10 @@ static inline unsigned int cpu_mask_to_a* The cpus in the mask must all be on the apic cluster. If are not * on the same apicid cluster return default value of TARGET_CPUS. */ - cpu =first_cpu (cpumask); + cpu =first_cpu (*cpumask); apicid =cpu_to_logical_apicid (cpu);while (cpus_found < num_bits_set) { -if (cpu_isset (cpu, cpumask)) { +if (cpu_isset (cpu, *cpumask)) {int new_apicid =cpu_to_logical_apicid (cpu);if (apicid_cluster (apicid) !=apicid_cluster (new_apicid)){
include/asm-x86/summit/ipi.h +5 -4
@@ -1,9 +1,10 @@#ifndef __ASM_SUMMIT_IPI_H#define __ASM_SUMMIT_IPI_H -void send_IPI_mask_sequence (cpumask_t mask,int vector); +void send_IPI_mask_sequence (const cpumask_t *mask,int vector); +void send_IPI_mask_allbutself (const cpumask_t *mask,int vector); -static inline void send_IPI_mask (cpumask_t mask,int vector) +static inline void send_IPI_mask (const cpumask_t *mask,int vector) {send_IPI_mask_sequence (mask, vector); }
@@ -14,12 +15,12 @@ static inline void send_IPI_allbutself(icpu_clear (smp_processor_id (), mask);if (!cpus_empty (mask)) - send_IPI_mask(mask, vector); + send_IPI_mask(&mask, vector); }static inline void send_IPI_all (int vector) { -send_IPI_mask (cpu_online_map, vector); +send_IPI_mask (&cpu_online_map, vector); }#endif /* __ASM_SUMMIT_IPI_H */
PATCH 3/35 sched: Reduce stack size requirements in kernel/sched.c
In reply to Mike TravisUse node_to_cpumask_ptr in place of node_to_cpumask to reduce stack requirements in sched.c
Applies to linux-2.6.tip/master.
--- kernel/sched.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
kernel/sched.c +7 -6
@@ -6118,8 +6118,9 @@ static void move_task_off_dead_cpu(int d do { /* On same node? */ - mask = node_to_cpumask(cpu_to_node(dead_cpu)); - cpus_and(mask, mask, p->cpus_allowed); + node_to_cpumask_ptr(pnodemask, cpu_to_node(dead_cpu)); + + cpus_and(mask, *pnodemask, p->cpus_allowed); dest_cpu = any_online_cpu(mask); /* On any allowed CPU? */
@@ -7127,9 +7128,9 @@ static int cpu_to_allnodes_group(int cpu struct sched_group **sg, cpumask_t *nodemask) { int group; +node_to_cpumask_ptr (pnodemask,cpu_to_node (cpu)); - *nodemask =node_to_cpumask (cpu_to_node (cpu)); -cpus_and (*nodemask, *nodemask, *cpu_map); +cpus_and (*nodemask, *pnodemask, *cpu_map); group =first_cpu (*nodemask);if (sg)
@@ -7179,9 +7180,9 @@ static void free_sched_groups(const cpumfor (i =0 ; i < nr_node_ids; i++) {struct sched_group *oldsg, *sg = sched_group_nodes[i]; +node_to_cpumask_ptr (pnodemask, i); - *nodemask =node_to_cpumask (i); -cpus_and (*nodemask, *nodemask, *cpu_map); +cpus_and (*nodemask, *pnodemask, *cpu_map);if (cpus_empty (*nodemask))continue ;
PATCH 4/35 cpumask: centralize cpu_online_map and cpu_possible_map
In reply to Mike TravisEach SMP arch defines these themselves. Move them to a central location.
Two twists:
1) Some archs set possible_map to all 1, so we add a CONFIG_INIT_ALL_POSSIBLE for this rather than break them.
2) mips and sparc32 '#define cpu_possible_map phys_cpu_present_map'. Those archs simply have phys_cpu_present_map replaced everywhere.
--- arch/alpha/kernel/smp.c | 5 ----- arch/arm/kernel/smp.c | 10 ---------- arch/cris/arch-v32/kernel/smp.c | 4 ---- arch/ia64/kernel/smpboot.c | 6 ------ arch/m32r/Kconfig | 1 + arch/m32r/kernel/smpboot.c | 6 ------ arch/mips/include/asm/smp.h | 3 --- arch/mips/kernel/smp-cmp.c | 2 +- arch/mips/kernel/smp-mt.c | 2 +- arch/mips/kernel/smp.c | 7 +------ arch/mips/kernel/smtc.c | 6 +++--- arch/mips/pmc-sierra/yosemite/smp.c | 6 +++--- arch/mips/sgi-ip27/ip27-smp.c | 2 +- arch/mips/sibyte/bcm1480/smp.c | 8 ++++---- arch/mips/sibyte/sb1250/smp.c | 8 ++++---- arch/parisc/Kconfig | 1 + arch/parisc/kernel/smp.c | 15 --------------- arch/powerpc/kernel/smp.c | 4 ---- arch/s390/Kconfig | 1 + arch/s390/kernel/smp.c | 6 ------ arch/sh/kernel/smp.c | 6 ------ arch/sparc/include/asm/smp_32.h | 2 -- arch/sparc/kernel/smp.c | 6 ++---- arch/sparc/kernel/sparc_ksyms.c | 4 ---- arch/sparc64/kernel/smp.c | 4 ---- arch/um/kernel/smp.c | 7 ------- arch/x86/kernel/smpboot.c | 6 ------ arch/x86/mach-voyager/voyager_smp.c | 7 ------- init/Kconfig | 9 +++++++++ kernel/cpu.c | 11 ++++++----- 30 files changed, 38 insertions(+), 127 deletions(-)
arch/alpha/kernel/smp.c +0 -5
@@ -70,11 +70,6 @@ enum ipi_message_type {/* Set to a secondary's cpuid when it comes online. */ static int smp_secondary_alive__devinitdata =0 ; -/* Which cpus ids came online. */ -cpumask_t cpu_online_map; - -EXPORT_SYMBOL (cpu_online_map); -int smp_num_probed;/* Internal processor count */ int smp_num_cpus =1 ;/* Number that came online. */ EXPORT_SYMBOL (smp_num_cpus);
arch/arm/kernel/smp.c +0 -10
@@ -34,16 +34,6 @@#include <asm/ptrace.h> /* -* bitmask of present and online CPUs. -* The present bitmask indicates that the CPU is physically present. -* The online bitmask indicates that the CPU is up and running. -*/ -cpumask_t cpu_possible_map; -EXPORT_SYMBOL (cpu_possible_map); -cpumask_t cpu_online_map; -EXPORT_SYMBOL (cpu_online_map); - -/* * as from 2.5, kernels no longer have an init_tasks structure * so we need some other way of telling a new secondary core * where to place its SVC stack
arch/cris/arch-v32/kernel/smp.c +0 -4
@@ -29,11 +29,7 @@spinlock_t cris_atomic_locks[] = { [0 ...LOCK_COUNT -1 ] =SPIN_LOCK_UNLOCKED };/* CPU masks */ -cpumask_t cpu_online_map =CPU_MASK_NONE ; -EXPORT_SYMBOL (cpu_online_map);cpumask_t phys_cpu_present_map =CPU_MASK_NONE ; -cpumask_t cpu_possible_map; -EXPORT_SYMBOL (cpu_possible_map);EXPORT_SYMBOL (phys_cpu_present_map);/* Variables used during SMP boot */
arch/ia64/kernel/smpboot.c +0 -6
@@ -131,12 +131,6 @@ struct task_struct *task_for_booting_cpu*/ DEFINE_PER_CPU (int, cpu_state); -/* Bitmasks of currently online, and possible CPUs */ -cpumask_t cpu_online_map; -EXPORT_SYMBOL (cpu_online_map); -cpumask_t cpu_possible_map =CPU_MASK_NONE ; -EXPORT_SYMBOL (cpu_possible_map); - cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned;EXPORT_SYMBOL (cpu_core_map);DEFINE_PER_CPU_SHARED_ALIGNED (cpumask_t, cpu_sibling_map);
arch/m32r/Kconfig +1 -0
@@ -10,6 +10,7 @@ config M32R default y select HAVE_IDE select HAVE_OPROFILE + select INIT_ALL_POSSIBLE config SBUS bool
arch/m32r/kernel/smpboot.c +0 -6
@@ -73,17 +73,11 @@ static unsigned int bsp_phys_id = -1;/* Bitmask of physically existing CPUs */ physid_mask_t phys_cpu_present_map; -/* Bitmask of currently online CPUs */ -cpumask_t cpu_online_map; -EXPORT_SYMBOL (cpu_online_map); -cpumask_t cpu_bootout_map;cpumask_t cpu_bootin_map;static cpumask_t cpu_callin_map;cpumask_t cpu_callout_map;EXPORT_SYMBOL (cpu_callout_map); -cpumask_t cpu_possible_map =CPU_MASK_ALL ; -EXPORT_SYMBOL (cpu_possible_map);/* Per CPU bogomips and other parameters */ struct cpuinfo_m32r cpu_data[NR_CPUS] __cacheline_aligned;
arch/mips/include/asm/smp.h +0 -3
@@ -38,9 +38,6 @@ extern int __cpu_logical_map[NR_CPUS];#define SMP_RESCHEDULE_YOURSELF 0x1/* XXX braindead */ #define SMP_CALL_FUNCTION 0x2 -extern cpumask_t phys_cpu_present_map; -#define cpu_possible_map phys_cpu_present_map - extern void asmlinkage smp_bootstrap(void);/*
arch/mips/kernel/smp-cmp.c +1 -1
@@ -226,7 +226,7 @@ void __init cmp_smp_setup(void)for (i =1 ; i <NR_CPUS ; i++) {if (amon_cpu_avail (i)) { -cpu_set (i, phys_cpu_present_map); +cpu_set (i, cpu_possible_map); __cpu_number_map[i] = ++ncpu; __cpu_logical_map[ncpu] = i; }
arch/mips/kernel/smp-mt.c +1 -1
@@ -70,7 +70,7 @@ static unsigned int __init smvp_vpe_initwrite_vpe_c0_vpeconf0 (tmp);/* Record this as available CPU */ -cpu_set (tc, phys_cpu_present_map); +cpu_set (tc, cpu_possible_map); __cpu_number_map[tc] = ++ncpu; __cpu_logical_map[ncpu] = tc; }
arch/mips/kernel/smp.c +1 -6
@@ -44,15 +44,10 @@#include <asm/mipsmtregs.h> #endif /* CONFIG_MIPS_MT_SMTC */ -cpumask_t phys_cpu_present_map;/* Bitmask of available CPUs */ volatile cpumask_t cpu_callin_map;/* Bitmask of started secondaries */ -cpumask_t cpu_online_map;/* Bitmask of currently online CPUs */ int __cpu_number_map[NR_CPUS ];/* Map physical to logical */ int __cpu_logical_map[NR_CPUS ];/* Map logical to physical */ -EXPORT_SYMBOL (phys_cpu_present_map); -EXPORT_SYMBOL (cpu_online_map); -extern void cpu_idle (void );/* Number of TCs (or siblings in Intel speak) per CPU core */
@@ -199,7 +194,7 @@ void __devinit smp_prepare_boot_cpu(void*/ __cpu_number_map[0 ] =0 ; __cpu_logical_map[0 ] =0 ; -cpu_set (0 , phys_cpu_present_map); +cpu_set (0 , cpu_possible_map);cpu_set (0 , cpu_online_map);cpu_set (0 , cpu_callin_map); }
arch/mips/kernel/smtc.c +3 -3
@@ -290,7 +290,7 @@ static void smtc_configure_tlb(void)* possibly leave some TCs/VPEs as "slave" processors. * * Use c0_MVPConf0 to find out how many TCs are available, setting up -* phys_cpu_present_map and the logical/physical mappings. +* cpu_possible_map and the logical/physical mappings. */ int __init smtc_build_cpu_map (int start_cpu_slot)
@@ -304,7 +304,7 @@ int __init smtc_build_cpu_map(int start_*/ ntcs = ((read_c0_mvpconf0 () &MVPCONF0_PTC ) >>MVPCONF0_PTC_SHIFT ) +1 ;for (i=start_cpu_slot; i<NR_CPUS && i<ntcs; i++) { -cpu_set (i, phys_cpu_present_map); +cpu_set (i, cpu_possible_map); __cpu_number_map[i] = i; __cpu_logical_map[i] = i; }
@@ -521,7 +521,7 @@ void smtc_prepare_cpus(int cpus)* Pull any physically present but unused TCs out of circulation. */ while (tc < (((val &MVPCONF0_PTC ) >>MVPCONF0_PTC_SHIFT ) +1 )) { -cpu_clear (tc, phys_cpu_present_map); +cpu_clear (tc, cpu_possible_map);cpu_clear (tc, cpu_present_map); tc++; }
arch/mips/pmc-sierra/yosemite/smp.c +3 -3
@@ -141,7 +141,7 @@ static void __cpuinit yos_boot_secondary }/* -* Detect available CPUs, populate phys_cpu_present_map before smp_init +* Detect available CPUs, populate cpu_possible_map before smp_init * * We don't want to start the secondary CPU yet nor do we have a nice probing * feature in PMON so we just assume presence of the secondary core.
@@ -150,10 +150,10 @@ static void __init yos_smp_setup(void) {int i; -cpus_clear (phys_cpu_present_map); +cpus_clear (cpu_possible_map);for (i =0 ; i <2 ; i++) { -cpu_set (i, phys_cpu_present_map); +cpu_set (i, cpu_possible_map); __cpu_number_map[i] = i; __cpu_logical_map[i] = i; }
arch/mips/sgi-ip27/ip27-smp.c +1 -1
@@ -76,7 +76,7 @@ static int do_cpumask(cnodeid_t cnode, n/* Only let it join in if it's marked enabled */ if ((acpu->cpu_info.flags &KLINFO_ENABLE ) && (tot_cpus_found !=NR_CPUS )) { -cpu_set (cpuid, phys_cpu_present_map); +cpu_set (cpuid, cpu_possible_map);alloc_cpupda (cpuid, tot_cpus_found); cpus_found++; tot_cpus_found++;
arch/mips/sibyte/bcm1480/smp.c +4 -4
@@ -136,7 +136,7 @@ static void __cpuinit bcm1480_boot_secon/* * Use CFE to find out how many CPUs are available, setting up -* phys_cpu_present_map and the logical/physical mappings. +* cpu_possible_map and the logical/physical mappings. * XXXKW will the boot CPU ever not be physical 0? * * Common setup before any secondaries are started
@@ -145,14 +145,14 @@ static void __init bcm1480_smp_setup(voi {int i, num; -cpus_clear (phys_cpu_present_map); -cpu_set (0 , phys_cpu_present_map); +cpus_clear (cpu_possible_map); +cpu_set (0 , cpu_possible_map); __cpu_number_map[0 ] =0 ; __cpu_logical_map[0 ] =0 ;for (i =1 , num =0 ; i <NR_CPUS ; i++) {if (cfe_cpu_stop (i) ==0 ) { -cpu_set (i, phys_cpu_present_map); +cpu_set (i, cpu_possible_map); __cpu_number_map[i] = ++num; __cpu_logical_map[num] = i; }
arch/mips/sibyte/sb1250/smp.c +4 -4
@@ -124,7 +124,7 @@ static void __cpuinit sb1250_boot_second/* * Use CFE to find out how many CPUs are available, setting up -* phys_cpu_present_map and the logical/physical mappings. +* cpu_possible_map and the logical/physical mappings. * XXXKW will the boot CPU ever not be physical 0? * * Common setup before any secondaries are started
@@ -133,14 +133,14 @@ static void __init sb1250_smp_setup(void {int i, num; -cpus_clear (phys_cpu_present_map); -cpu_set (0 , phys_cpu_present_map); +cpus_clear (cpu_possible_map); +cpu_set (0 , cpu_possible_map); __cpu_number_map[0 ] =0 ; __cpu_logical_map[0 ] =0 ;for (i =1 , num =0 ; i <NR_CPUS ; i++) {if (cfe_cpu_stop (i) ==0 ) { -cpu_set (i, phys_cpu_present_map); +cpu_set (i, cpu_possible_map); __cpu_number_map[i] = ++num; __cpu_logical_map[num] = i; }
arch/parisc/Kconfig +1 -0
@@ -11,6 +11,7 @@ config PARISC select HAVE_OPROFILE select RTC_CLASS select RTC_DRV_PARISC + select INIT_ALL_POSSIBLE help The PA-RISC microprocessor is designed by Hewlett-Packard and used in many of their workstations & servers (HP9000 700 and 800 series,
arch/parisc/kernel/smp.c +0 -15
@@ -67,21 +67,6 @@ static volatile int cpu_now_booting __restatic int parisc_max_cpus__read_mostly =1 ; -/* online cpus are ones that we've managed to bring up completely -* possible cpus are all valid cpu -* present cpus are all detected cpu -* -* On startup we bring up the "possible" cpus. Since we discover -* CPUs later, we add them as hotplug, so the possible cpu mask is -* empty in the beginning. -*/ - -cpumask_t cpu_online_map__read_mostly =CPU_MASK_NONE ;/* Bitmap of online CPUs */ -cpumask_t cpu_possible_map__read_mostly =CPU_MASK_ALL ;/* Bitmap of Present CPUs */ - -EXPORT_SYMBOL (cpu_online_map); -EXPORT_SYMBOL (cpu_possible_map); -DEFINE_PER_CPU (spinlock_t, ipi_lock) =SPIN_LOCK_UNLOCKED ;enum ipi_message_type {
arch/powerpc/kernel/smp.c +0 -4
@@ -60,13 +60,9 @@int smp_hw_index[NR_CPUS ];struct thread_info *secondary_ti; -cpumask_t cpu_possible_map =CPU_MASK_NONE ; -cpumask_t cpu_online_map =CPU_MASK_NONE ;DEFINE_PER_CPU (cpumask_t, cpu_sibling_map) =CPU_MASK_NONE ;DEFINE_PER_CPU (cpumask_t, cpu_core_map) =CPU_MASK_NONE ; -EXPORT_SYMBOL (cpu_online_map); -EXPORT_SYMBOL (cpu_possible_map);EXPORT_PER_CPU_SYMBOL (cpu_sibling_map);EXPORT_PER_CPU_SYMBOL (cpu_core_map);
arch/s390/Kconfig +1 -0
@@ -75,6 +75,7 @@ config S390 select HAVE_KRETPROBES select HAVE_KVM if 64BIT select HAVE_ARCH_TRACEHOOK + select INIT_ALL_POSSIBLE source "init/Kconfig"
arch/s390/kernel/smp.c +0 -6
@@ -52,12 +52,6 @@struct _lowcore *lowcore_ptr[NR_CPUS ];EXPORT_SYMBOL (lowcore_ptr); -cpumask_t cpu_online_map =CPU_MASK_NONE ; -EXPORT_SYMBOL (cpu_online_map); - -cpumask_t cpu_possible_map =CPU_MASK_ALL ; -EXPORT_SYMBOL (cpu_possible_map); -static struct task_struct *current_set[NR_CPUS ];static u8 smp_cpu_type;
arch/sh/kernel/smp.c +0 -6
@@ -30,12 +30,6 @@int __cpu_number_map[NR_CPUS ];/* Map physical to logical */ int __cpu_logical_map[NR_CPUS ];/* Map logical to physical */ -cpumask_t cpu_possible_map; -EXPORT_SYMBOL (cpu_possible_map); - -cpumask_t cpu_online_map; -EXPORT_SYMBOL (cpu_online_map); -static inline void __init smp_store_cpu_info (unsigned int cpu) {struct sh_cpuinfo *c = cpu_data + cpu;
arch/sparc/include/asm/smp_32.h +0 -2
@@ -29,8 +29,6 @@*/ extern unsigned char boot_cpu_id; -extern cpumask_t phys_cpu_present_map; -#define cpu_possible_map phys_cpu_present_maptypedef void (*smpfunc_t )(unsigned long ,unsigned long ,unsigned long ,unsigned long ,unsigned long );
arch/sparc/kernel/smp.c +2 -4
@@ -39,8 +39,6 @@ volatile unsigned long cpu_callin_map[NRunsigned char boot_cpu_id =0 ;unsigned char boot_cpu_id4 =0 ;/* boot_cpu_id << 2 */ -cpumask_t cpu_online_map =CPU_MASK_NONE ; -cpumask_t phys_cpu_present_map =CPU_MASK_NONE ;cpumask_t smp_commenced_mask =CPU_MASK_NONE ;/* The only guaranteed locking primitive available on all Sparc
@@ -334,7 +332,7 @@ void __init smp_setup_cpu_possible_map(v instance =0 ;while (!cpu_find_by_instance (instance,NULL , &mid)) {if (mid <NR_CPUS ) { -cpu_set (mid, phys_cpu_present_map); +cpu_set (mid, cpu_possible_map);cpu_set (mid, cpu_present_map); } instance++;
@@ -354,7 +352,7 @@ void __init smp_prepare_boot_cpu(void)current_thread_info ()->cpu = cpuid;cpu_set (cpuid, cpu_online_map); -cpu_set (cpuid, phys_cpu_present_map); +cpu_set (cpuid, cpu_possible_map); }int __cpuinit __cpu_up (unsigned int cpu)
arch/sparc/kernel/sparc_ksyms.c +0 -4
@@ -113,10 +113,6 @@ EXPORT_PER_CPU_SYMBOL(__cpu_data);#ifdef CONFIG_SMP /* IRQ implementation. */ EXPORT_SYMBOL (synchronize_irq); - -/* CPU online map and active count. */ -EXPORT_SYMBOL (cpu_online_map); -EXPORT_SYMBOL (phys_cpu_present_map);#endif EXPORT_SYMBOL (__udelay);
arch/sparc64/kernel/smp.c +0 -4
@@ -49,14 +49,10 @@int sparc64_multi_core__read_mostly ; -cpumask_t cpu_possible_map__read_mostly =CPU_MASK_NONE ; -cpumask_t cpu_online_map__read_mostly =CPU_MASK_NONE ;DEFINE_PER_CPU (cpumask_t, cpu_sibling_map) =CPU_MASK_NONE ;cpumask_t cpu_core_map[NR_CPUS ]__read_mostly = { [0 ...NR_CPUS -1 ] =CPU_MASK_NONE }; -EXPORT_SYMBOL (cpu_possible_map); -EXPORT_SYMBOL (cpu_online_map);EXPORT_PER_CPU_SYMBOL (cpu_sibling_map);EXPORT_SYMBOL (cpu_core_map);
arch/um/kernel/smp.c +0 -7
@@ -25,13 +25,6 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_ga#include "irq_user.h" #include "os.h" -/* CPU online map, set by smp_boot_cpus */ -cpumask_t cpu_online_map =CPU_MASK_NONE ; -cpumask_t cpu_possible_map =CPU_MASK_NONE ; - -EXPORT_SYMBOL (cpu_online_map); -EXPORT_SYMBOL (cpu_possible_map); -/* Per CPU bogomips and other parameters * The only piece used here is the ipi pipe, which is set before SMP is * started and never changed.
arch/x86/kernel/smpboot.c +0 -6
@@ -101,14 +101,8 @@ EXPORT_SYMBOL(smp_num_siblings);/* Last level cache ID of each logical CPU */ DEFINE_PER_CPU (u16, cpu_llc_id) =BAD_APICID ; -/* bitmap of online cpus */ -cpumask_t cpu_online_map__read_mostly ; -EXPORT_SYMBOL (cpu_online_map); -cpumask_t cpu_callin_map;cpumask_t cpu_callout_map; -cpumask_t cpu_possible_map; -EXPORT_SYMBOL (cpu_possible_map);/* representing HT siblings of each logical CPU */ DEFINE_PER_CPU (cpumask_t, cpu_sibling_map);
arch/x86/mach-voyager/voyager_smp.c +0 -7
@@ -62,11 +62,6 @@ static int voyager_extended_cpus = 1;/* Used for the invalidate map that's also checked in the spinlock */ static volatile unsigned long smp_invalidate_needed; -/* Bitmask of currently online CPUs - used by setup.c for -/proc/cpuinfo, visible externally but still physical */ -cpumask_t cpu_online_map =CPU_MASK_NONE ; -EXPORT_SYMBOL (cpu_online_map); -/* Bitmask of CPUs present in the system - exported by i386_syms.c, used * by scheduler but indexed physically */ cpumask_t phys_cpu_present_map =CPU_MASK_NONE ;
@@ -216,8 +211,6 @@ static cpumask_t smp_commenced_mask = CP/* This is for the new dynamic CPU boot code */ cpumask_t cpu_callin_map =CPU_MASK_NONE ;cpumask_t cpu_callout_map =CPU_MASK_NONE ; -cpumask_t cpu_possible_map =CPU_MASK_NONE ; -EXPORT_SYMBOL (cpu_possible_map);/* The per processor IRQ masks (these are usually kept in sync) */ static __u16 vic_irq_mask[NR_CPUS] __cacheline_aligned;
init/Kconfig +9 -0
@@ -911,6 +911,15 @@ config KMOD endif # MODULES +config INIT_ALL_POSSIBLE + bool + help + Back when each arch used to define their own cpu_online_map and + cpu_possible_map, some of them chose to initialize cpu_possible_map + with all 1s, and others with all 0s. When they were centralised, + it was better to provide this option than to break all the archs + and have several arch maintainers persuing me down dark alleys. + config STOP_MACHINE bool default y
kernel/cpu.c +6 -5
@@ -24,19 +24,20 @@cpumask_t cpu_present_map__read_mostly ;EXPORT_SYMBOL (cpu_present_map); -#ifndef CONFIG_SMP -/* * Represents all cpu's that are currently online. */ -cpumask_t cpu_online_map__read_mostly =CPU_MASK_ALL ; +cpumask_t cpu_online_map__read_mostly ;EXPORT_SYMBOL (cpu_online_map); +#ifdef CONFIG_INIT_ALL_POSSIBLE cpumask_t cpu_possible_map__read_mostly =CPU_MASK_ALL ; +#else +cpumask_t cpu_possible_map__read_mostly ; +#endif EXPORT_SYMBOL (cpu_possible_map); -#else /* CONFIG_SMP */ - +#ifdef CONFIG_SMP /* Serializes the updates to cpu_online_map, cpu_present_map */ static DEFINE_MUTEX (cpu_add_remove_lock);
Re: [PATCH 04/35] cpumask: centralize cpu_online_map and cpu_possible_map - resubmit
cpumask: centralize cpu_online_map and cpu_possible_map
From: Rusty Russell <[email protected]>
Each SMP arch defines these themselves. Move them to a central location.
Two twists:
1) Some archs set possible_map to all 1, so we add a CONFIG_INIT_ALL_POSSIBLE for this rather than break them.
2) mips and sparc32 '#define cpu_possible_map phys_cpu_present_map'. Those archs simply have phys_cpu_present_map replaced everywhere.
--- arch/alpha/kernel/smp.c | 5 ----- arch/arm/kernel/smp.c | 10 ---------- arch/cris/arch-v32/kernel/smp.c | 4 ---- arch/ia64/kernel/smpboot.c | 6 ------ arch/m32r/Kconfig | 1 + arch/m32r/kernel/smpboot.c | 6 ------ arch/mips/include/asm/smp.h | 3 --- arch/mips/kernel/smp-cmp.c | 2 +- arch/mips/kernel/smp-mt.c | 2 +- arch/mips/kernel/smp.c | 7 +------ arch/mips/kernel/smtc.c | 6 +++--- arch/mips/pmc-sierra/yosemite/smp.c | 6 +++--- arch/mips/sgi-ip27/ip27-smp.c | 2 +- arch/mips/sibyte/bcm1480/smp.c | 8 ++++---- arch/mips/sibyte/sb1250/smp.c | 8 ++++---- arch/parisc/Kconfig | 1 + arch/parisc/kernel/smp.c | 15 --------------- arch/powerpc/kernel/smp.c | 4 ---- arch/s390/Kconfig | 1 + arch/s390/kernel/smp.c | 6 ------ arch/sh/kernel/smp.c | 6 ------ arch/sparc/include/asm/smp_32.h | 2 -- arch/sparc/kernel/smp.c | 6 ++---- arch/sparc/kernel/sparc_ksyms.c | 4 ---- arch/sparc64/kernel/smp.c | 4 ---- arch/um/kernel/smp.c | 7 ------- arch/x86/kernel/smpboot.c | 6 ------ arch/x86/mach-voyager/voyager_smp.c | 7 ------- init/Kconfig | 9 +++++++++ kernel/cpu.c | 11 ++++++----- 30 files changed, 38 insertions(+), 127 deletions(-)
arch/alpha/kernel/smp.c +0 -5
@@ -70,11 +70,6 @@ enum ipi_message_type {/* Set to a secondary's cpuid when it comes online. */ static int smp_secondary_alive__devinitdata =0 ; -/* Which cpus ids came online. */ -cpumask_t cpu_online_map; - -EXPORT_SYMBOL (cpu_online_map); -int smp_num_probed;/* Internal processor count */ int smp_num_cpus =1 ;/* Number that came online. */ EXPORT_SYMBOL (smp_num_cpus);
arch/arm/kernel/smp.c +0 -10
@@ -34,16 +34,6 @@#include <asm/ptrace.h> /* -* bitmask of present and online CPUs. -* The present bitmask indicates that the CPU is physically present. -* The online bitmask indicates that the CPU is up and running. -*/ -cpumask_t cpu_possible_map; -EXPORT_SYMBOL (cpu_possible_map); -cpumask_t cpu_online_map; -EXPORT_SYMBOL (cpu_online_map); - -/* * as from 2.5, kernels no longer have an init_tasks structure * so we need some other way of telling a new secondary core * where to place its SVC stack
arch/cris/arch-v32/kernel/smp.c +0 -4
@@ -29,11 +29,7 @@spinlock_t cris_atomic_locks[] = { [0 ...LOCK_COUNT -1 ] =SPIN_LOCK_UNLOCKED };/* CPU masks */ -cpumask_t cpu_online_map =CPU_MASK_NONE ; -EXPORT_SYMBOL (cpu_online_map);cpumask_t phys_cpu_present_map =CPU_MASK_NONE ; -cpumask_t cpu_possible_map; -EXPORT_SYMBOL (cpu_possible_map);EXPORT_SYMBOL (phys_cpu_present_map);/* Variables used during SMP boot */
arch/ia64/kernel/smpboot.c +0 -6
@@ -131,12 +131,6 @@ struct task_struct *task_for_booting_cpu*/ DEFINE_PER_CPU (int, cpu_state); -/* Bitmasks of currently online, and possible CPUs */ -cpumask_t cpu_online_map; -EXPORT_SYMBOL (cpu_online_map); -cpumask_t cpu_possible_map =CPU_MASK_NONE ; -EXPORT_SYMBOL (cpu_possible_map); - cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned;EXPORT_SYMBOL (cpu_core_map);DEFINE_PER_CPU_SHARED_ALIGNED (cpumask_t, cpu_sibling_map);
arch/m32r/Kconfig +1 -0
@@ -10,6 +10,7 @@ config M32R default y select HAVE_IDE select HAVE_OPROFILE + select INIT_ALL_POSSIBLE config SBUS bool
arch/m32r/kernel/smpboot.c +0 -6
@@ -73,17 +73,11 @@ static unsigned int bsp_phys_id = -1;/* Bitmask of physically existing CPUs */ physid_mask_t phys_cpu_present_map; -/* Bitmask of currently online CPUs */ -cpumask_t cpu_online_map; -EXPORT_SYMBOL (cpu_online_map); -cpumask_t cpu_bootout_map;cpumask_t cpu_bootin_map;static cpumask_t cpu_callin_map;cpumask_t cpu_callout_map;EXPORT_SYMBOL (cpu_callout_map); -cpumask_t cpu_possible_map =CPU_MASK_ALL ; -EXPORT_SYMBOL (cpu_possible_map);/* Per CPU bogomips and other parameters */ struct cpuinfo_m32r cpu_data[NR_CPUS] __cacheline_aligned;
arch/mips/include/asm/smp.h +0 -3
@@ -38,9 +38,6 @@ extern int __cpu_logical_map[NR_CPUS];#define SMP_RESCHEDULE_YOURSELF 0x1/* XXX braindead */ #define SMP_CALL_FUNCTION 0x2 -extern cpumask_t phys_cpu_present_map; -#define cpu_possible_map phys_cpu_present_map - extern void asmlinkage smp_bootstrap(void);/*
arch/mips/kernel/smp-cmp.c +1 -1
@@ -226,7 +226,7 @@ void __init cmp_smp_setup(void)for (i =1 ; i <NR_CPUS ; i++) {if (amon_cpu_avail (i)) { -cpu_set (i, phys_cpu_present_map); +cpu_set (i, cpu_possible_map); __cpu_number_map[i] = ++ncpu; __cpu_logical_map[ncpu] = i; }
arch/mips/kernel/smp-mt.c +1 -1
@@ -70,7 +70,7 @@ static unsigned int __init smvp_vpe_initwrite_vpe_c0_vpeconf0 (tmp);/* Record this as available CPU */ -cpu_set (tc, phys_cpu_present_map); +cpu_set (tc, cpu_possible_map); __cpu_number_map[tc] = ++ncpu; __cpu_logical_map[ncpu] = tc; }
arch/mips/kernel/smp.c +1 -6
@@ -44,15 +44,10 @@#include <asm/mipsmtregs.h> #endif /* CONFIG_MIPS_MT_SMTC */ -cpumask_t phys_cpu_present_map;/* Bitmask of available CPUs */ volatile cpumask_t cpu_callin_map;/* Bitmask of started secondaries */ -cpumask_t cpu_online_map;/* Bitmask of currently online CPUs */ int __cpu_number_map[NR_CPUS ];/* Map physical to logical */ int __cpu_logical_map[NR_CPUS ];/* Map logical to physical */ -EXPORT_SYMBOL (phys_cpu_present_map); -EXPORT_SYMBOL (cpu_online_map); -extern void cpu_idle (void );/* Number of TCs (or siblings in Intel speak) per CPU core */
@@ -199,7 +194,7 @@ void __devinit smp_prepare_boot_cpu(void*/ __cpu_number_map[0 ] =0 ; __cpu_logical_map[0 ] =0 ; -cpu_set (0 , phys_cpu_present_map); +cpu_set (0 , cpu_possible_map);cpu_set (0 , cpu_online_map);cpu_set (0 , cpu_callin_map); }
arch/mips/kernel/smtc.c +3 -3
@@ -290,7 +290,7 @@ static void smtc_configure_tlb(void)* possibly leave some TCs/VPEs as "slave" processors. * * Use c0_MVPConf0 to find out how many TCs are available, setting up -* phys_cpu_present_map and the logical/physical mappings. +* cpu_possible_map and the logical/physical mappings. */ int __init smtc_build_cpu_map (int start_cpu_slot)
@@ -304,7 +304,7 @@ int __init smtc_build_cpu_map(int start_*/ ntcs = ((read_c0_mvpconf0 () &MVPCONF0_PTC ) >>MVPCONF0_PTC_SHIFT ) +1 ;for (i=start_cpu_slot; i<NR_CPUS && i<ntcs; i++) { -cpu_set (i, phys_cpu_present_map); +cpu_set (i, cpu_possible_map); __cpu_number_map[i] = i; __cpu_logical_map[i] = i; }
@@ -521,7 +521,7 @@ void smtc_prepare_cpus(int cpus)* Pull any physically present but unused TCs out of circulation. */ while (tc < (((val &MVPCONF0_PTC ) >>MVPCONF0_PTC_SHIFT ) +1 )) { -cpu_clear (tc, phys_cpu_present_map); +cpu_clear (tc, cpu_possible_map);cpu_clear (tc, cpu_present_map); tc++; }
arch/mips/pmc-sierra/yosemite/smp.c +3 -3
@@ -141,7 +141,7 @@ static void __cpuinit yos_boot_secondary }/* -* Detect available CPUs, populate phys_cpu_present_map before smp_init +* Detect available CPUs, populate cpu_possible_map before smp_init * * We don't want to start the secondary CPU yet nor do we have a nice probing * feature in PMON so we just assume presence of the secondary core.
@@ -150,10 +150,10 @@ static void __init yos_smp_setup(void) {int i; -cpus_clear (phys_cpu_present_map); +cpus_clear (cpu_possible_map);for (i =0 ; i <2 ; i++) { -cpu_set (i, phys_cpu_present_map); +cpu_set (i, cpu_possible_map); __cpu_number_map[i] = i; __cpu_logical_map[i] = i; }
arch/mips/sgi-ip27/ip27-smp.c +1 -1
@@ -76,7 +76,7 @@ static int do_cpumask(cnodeid_t cnode, n/* Only let it join in if it's marked enabled */ if ((acpu->cpu_info.flags &KLINFO_ENABLE ) && (tot_cpus_found !=NR_CPUS )) { -cpu_set (cpuid, phys_cpu_present_map); +cpu_set (cpuid, cpu_possible_map);alloc_cpupda (cpuid, tot_cpus_found); cpus_found++; tot_cpus_found++;
arch/mips/sibyte/bcm1480/smp.c +4 -4
@@ -136,7 +136,7 @@ static void __cpuinit bcm1480_boot_secon/* * Use CFE to find out how many CPUs are available, setting up -* phys_cpu_present_map and the logical/physical mappings. +* cpu_possible_map and the logical/physical mappings. * XXXKW will the boot CPU ever not be physical 0? * * Common setup before any secondaries are started
@@ -145,14 +145,14 @@ static void __init bcm1480_smp_setup(voi {int i, num; -cpus_clear (phys_cpu_present_map); -cpu_set (0 , phys_cpu_present_map); +cpus_clear (cpu_possible_map); +cpu_set (0 , cpu_possible_map); __cpu_number_map[0 ] =0 ; __cpu_logical_map[0 ] =0 ;for (i =1 , num =0 ; i <NR_CPUS ; i++) {if (cfe_cpu_stop (i) ==0 ) { -cpu_set (i, phys_cpu_present_map); +cpu_set (i, cpu_possible_map); __cpu_number_map[i] = ++num; __cpu_logical_map[num] = i; }
arch/mips/sibyte/sb1250/smp.c +4 -4
@@ -124,7 +124,7 @@ static void __cpuinit sb1250_boot_second/* * Use CFE to find out how many CPUs are available, setting up -* phys_cpu_present_map and the logical/physical mappings. +* cpu_possible_map and the logical/physical mappings. * XXXKW will the boot CPU ever not be physical 0? * * Common setup before any secondaries are started
@@ -133,14 +133,14 @@ static void __init sb1250_smp_setup(void {int i, num; -cpus_clear (phys_cpu_present_map); -cpu_set (0 , phys_cpu_present_map); +cpus_clear (cpu_possible_map); +cpu_set (0 , cpu_possible_map); __cpu_number_map[0 ] =0 ; __cpu_logical_map[0 ] =0 ;for (i =1 , num =0 ; i <NR_CPUS ; i++) {if (cfe_cpu_stop (i) ==0 ) { -cpu_set (i, phys_cpu_present_map); +cpu_set (i, cpu_possible_map); __cpu_number_map[i] = ++num; __cpu_logical_map[num] = i; }
arch/parisc/Kconfig +1 -0
@@ -11,6 +11,7 @@ config PARISC select HAVE_OPROFILE select RTC_CLASS select RTC_DRV_PARISC + select INIT_ALL_POSSIBLE help The PA-RISC microprocessor is designed by Hewlett-Packard and used in many of their workstations & servers (HP9000 700 and 800 series,
arch/parisc/kernel/smp.c +0 -15
@@ -67,21 +67,6 @@ static volatile int cpu_now_booting __restatic int parisc_max_cpus__read_mostly =1 ; -/* online cpus are ones that we've managed to bring up completely -* possible cpus are all valid cpu -* present cpus are all detected cpu -* -* On startup we bring up the "possible" cpus. Since we discover -* CPUs later, we add them as hotplug, so the possible cpu mask is -* empty in the beginning. -*/ - -cpumask_t cpu_online_map__read_mostly =CPU_MASK_NONE ;/* Bitmap of online CPUs */ -cpumask_t cpu_possible_map__read_mostly =CPU_MASK_ALL ;/* Bitmap of Present CPUs */ - -EXPORT_SYMBOL (cpu_online_map); -EXPORT_SYMBOL (cpu_possible_map); -DEFINE_PER_CPU (spinlock_t, ipi_lock) =SPIN_LOCK_UNLOCKED ;enum ipi_message_type {
arch/powerpc/kernel/smp.c +0 -4
@@ -60,13 +60,9 @@int smp_hw_index[NR_CPUS ];struct thread_info *secondary_ti; -cpumask_t cpu_possible_map =CPU_MASK_NONE ; -cpumask_t cpu_online_map =CPU_MASK_NONE ;DEFINE_PER_CPU (cpumask_t, cpu_sibling_map) =CPU_MASK_NONE ;DEFINE_PER_CPU (cpumask_t, cpu_core_map) =CPU_MASK_NONE ; -EXPORT_SYMBOL (cpu_online_map); -EXPORT_SYMBOL (cpu_possible_map);EXPORT_PER_CPU_SYMBOL (cpu_sibling_map);EXPORT_PER_CPU_SYMBOL (cpu_core_map);
arch/s390/Kconfig +1 -0
@@ -75,6 +75,7 @@ config S390 select HAVE_KRETPROBES select HAVE_KVM if 64BIT select HAVE_ARCH_TRACEHOOK + select INIT_ALL_POSSIBLE source "init/Kconfig"
arch/s390/kernel/smp.c +0 -6
@@ -52,12 +52,6 @@struct _lowcore *lowcore_ptr[NR_CPUS ];EXPORT_SYMBOL (lowcore_ptr); -cpumask_t cpu_online_map =CPU_MASK_NONE ; -EXPORT_SYMBOL (cpu_online_map); - -cpumask_t cpu_possible_map =CPU_MASK_ALL ; -EXPORT_SYMBOL (cpu_possible_map); -static struct task_struct *current_set[NR_CPUS ];static u8 smp_cpu_type;
arch/sh/kernel/smp.c +0 -6
@@ -30,12 +30,6 @@int __cpu_number_map[NR_CPUS ];/* Map physical to logical */ int __cpu_logical_map[NR_CPUS ];/* Map logical to physical */ -cpumask_t cpu_possible_map; -EXPORT_SYMBOL (cpu_possible_map); - -cpumask_t cpu_online_map; -EXPORT_SYMBOL (cpu_online_map); -static inline void __init smp_store_cpu_info (unsigned int cpu) {struct sh_cpuinfo *c = cpu_data + cpu;
arch/sparc/include/asm/smp_32.h +0 -2
@@ -29,8 +29,6 @@*/ extern unsigned char boot_cpu_id; -extern cpumask_t phys_cpu_present_map; -#define cpu_possible_map phys_cpu_present_maptypedef void (*smpfunc_t )(unsigned long ,unsigned long ,unsigned long ,unsigned long ,unsigned long );
arch/sparc/kernel/smp.c +2 -4
@@ -39,8 +39,6 @@ volatile unsigned long cpu_callin_map[NRunsigned char boot_cpu_id =0 ;unsigned char boot_cpu_id4 =0 ;/* boot_cpu_id << 2 */ -cpumask_t cpu_online_map =CPU_MASK_NONE ; -cpumask_t phys_cpu_present_map =CPU_MASK_NONE ;cpumask_t smp_commenced_mask =CPU_MASK_NONE ;/* The only guaranteed locking primitive available on all Sparc
@@ -334,7 +332,7 @@ void __init smp_setup_cpu_possible_map(v instance =0 ;while (!cpu_find_by_instance (instance,NULL , &mid)) {if (mid <NR_CPUS ) { -cpu_set (mid, phys_cpu_present_map); +cpu_set (mid, cpu_possible_map);cpu_set (mid, cpu_present_map); } instance++;
@@ -354,7 +352,7 @@ void __init smp_prepare_boot_cpu(void)current_thread_info ()->cpu = cpuid;cpu_set (cpuid, cpu_online_map); -cpu_set (cpuid, phys_cpu_present_map); +cpu_set (cpuid, cpu_possible_map); }int __cpuinit __cpu_up (unsigned int cpu)
arch/sparc/kernel/sparc_ksyms.c +0 -4
@@ -113,10 +113,6 @@ EXPORT_PER_CPU_SYMBOL(__cpu_data);#ifdef CONFIG_SMP /* IRQ implementation. */ EXPORT_SYMBOL (synchronize_irq); - -/* CPU online map and active count. */ -EXPORT_SYMBOL (cpu_online_map); -EXPORT_SYMBOL (phys_cpu_present_map);#endif EXPORT_SYMBOL (__udelay);
arch/sparc64/kernel/smp.c +0 -4
@@ -49,14 +49,10 @@int sparc64_multi_core__read_mostly ; -cpumask_t cpu_possible_map__read_mostly =CPU_MASK_NONE ; -cpumask_t cpu_online_map__read_mostly =CPU_MASK_NONE ;DEFINE_PER_CPU (cpumask_t, cpu_sibling_map) =CPU_MASK_NONE ;cpumask_t cpu_core_map[NR_CPUS ]__read_mostly = { [0 ...NR_CPUS -1 ] =CPU_MASK_NONE }; -EXPORT_SYMBOL (cpu_possible_map); -EXPORT_SYMBOL (cpu_online_map);EXPORT_PER_CPU_SYMBOL (cpu_sibling_map);EXPORT_SYMBOL (cpu_core_map);
arch/um/kernel/smp.c +0 -7
@@ -25,13 +25,6 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_ga#include "irq_user.h" #include "os.h" -/* CPU online map, set by smp_boot_cpus */ -cpumask_t cpu_online_map =CPU_MASK_NONE ; -cpumask_t cpu_possible_map =CPU_MASK_NONE ; - -EXPORT_SYMBOL (cpu_online_map); -EXPORT_SYMBOL (cpu_possible_map); -/* Per CPU bogomips and other parameters * The only piece used here is the ipi pipe, which is set before SMP is * started and never changed.
arch/x86/kernel/smpboot.c +0 -6
@@ -101,14 +101,8 @@ EXPORT_SYMBOL(smp_num_siblings);/* Last level cache ID of each logical CPU */ DEFINE_PER_CPU (u16, cpu_llc_id) =BAD_APICID ; -/* bitmap of online cpus */ -cpumask_t cpu_online_map__read_mostly ; -EXPORT_SYMBOL (cpu_online_map); -cpumask_t cpu_callin_map;cpumask_t cpu_callout_map; -cpumask_t cpu_possible_map; -EXPORT_SYMBOL (cpu_possible_map);/* representing HT siblings of each logical CPU */ DEFINE_PER_CPU (cpumask_t, cpu_sibling_map);
arch/x86/mach-voyager/voyager_smp.c +0 -7
@@ -62,11 +62,6 @@ static int voyager_extended_cpus = 1;/* Used for the invalidate map that's also checked in the spinlock */ static volatile unsigned long smp_invalidate_needed; -/* Bitmask of currently online CPUs - used by setup.c for -/proc/cpuinfo, visible externally but still physical */ -cpumask_t cpu_online_map =CPU_MASK_NONE ; -EXPORT_SYMBOL (cpu_online_map); -/* Bitmask of CPUs present in the system - exported by i386_syms.c, used * by scheduler but indexed physically */ cpumask_t phys_cpu_present_map =CPU_MASK_NONE ;
@@ -216,8 +211,6 @@ static cpumask_t smp_commenced_mask = CP/* This is for the new dynamic CPU boot code */ cpumask_t cpu_callin_map =CPU_MASK_NONE ;cpumask_t cpu_callout_map =CPU_MASK_NONE ; -cpumask_t cpu_possible_map =CPU_MASK_NONE ; -EXPORT_SYMBOL (cpu_possible_map);/* The per processor IRQ masks (these are usually kept in sync) */ static __u16 vic_irq_mask[NR_CPUS] __cacheline_aligned;
init/Kconfig +9 -0
@@ -911,6 +911,15 @@ config KMOD endif # MODULES +config INIT_ALL_POSSIBLE + bool + help + Back when each arch used to define their own cpu_online_map and + cpu_possible_map, some of them chose to initialize cpu_possible_map + with all 1s, and others with all 0s. When they were centralised, + it was better to provide this option than to break all the archs + and have several arch maintainers persuing me down dark alleys. + config STOP_MACHINE bool default y
kernel/cpu.c +6 -5
@@ -24,19 +24,20 @@cpumask_t cpu_present_map__read_mostly ;EXPORT_SYMBOL (cpu_present_map); -#ifndef CONFIG_SMP -/* * Represents all cpu's that are currently online. */ -cpumask_t cpu_online_map__read_mostly =CPU_MASK_ALL ; +cpumask_t cpu_online_map__read_mostly ;EXPORT_SYMBOL (cpu_online_map); +#ifdef CONFIG_INIT_ALL_POSSIBLE cpumask_t cpu_possible_map__read_mostly =CPU_MASK_ALL ; +#else +cpumask_t cpu_possible_map__read_mostly ; +#endif EXPORT_SYMBOL (cpu_possible_map); -#else /* CONFIG_SMP */ - +#ifdef CONFIG_SMP /* Serializes the updates to cpu_online_map, cpu_present_map */ static DEFINE_MUTEX (cpu_add_remove_lock);
PATCH 5/35 cpumask: remove min from first_cpu/next_cpu From: Rusty Russell <[email protected]>
In reply to Mike TravisSeems like this has been here forever, but I can't see why:find_first_bit and find_next_bit both return >= NR_CPUS on failure.
--- lib/cpumask.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
lib/cpumask.c +3 -4
@@ -5,13 +5,13 @@int __first_cpu (const cpumask_t *srcp) { -return min_t (int,NR_CPUS ,find_first_bit (srcp->bits,NR_CPUS )); +return find_first_bit (srcp->bits,NR_CPUS ); }EXPORT_SYMBOL (__first_cpu);int __next_cpu (int n,const cpumask_t *srcp) { -return min_t (int,NR_CPUS ,find_next_bit (srcp->bits,NR_CPUS , n+1 )); +return find_next_bit (srcp->bits,NR_CPUS , n+1 ); }EXPORT_SYMBOL (__next_cpu);
@@ -27,8 +27,7 @@ EXPORT_SYMBOL(cpumask_next_and);#if NR_CPUS >64 int __next_cpu_nr (int n,const cpumask_t *srcp) { -return min_t (int, nr_cpu_ids, -find_next_bit (srcp->bits, nr_cpu_ids, n+1 )); +return find_next_bit (srcp->bits, nr_cpu_ids, n+1 ); }EXPORT_SYMBOL (__next_cpu_nr);#endif
PATCH 6/35 cpumask: introduce struct cpumask. From: Rusty Russell <[email protected]>
In reply to Mike TravisWe want to move cpumasks off the stack: no local decls, no passing by copy. We also don't want to allow assignment of them, so we can later partially allocate them (ie. not all NR_CPUS bits).
Unfortunately, all the cpus_* functions are written perversely to take cpumask_t not cpumask_t *; although they are in fact wrapper macros. This sets a bad example. Also, we want to eventually make cpumasks an undefined struct, so we can catch on-stack usage with a compile error.
So we create a 'struct cpumask', typedef cpumask_t to it during the transition, and cleanup all the cpumask operators to be normal functions (cpus_ -> cpumask_). Note that two functions already use variants of the new names: they are fixed in the next patch.
--- include/linux/cpumask.h | 356 +++++++++++++++++++++++++----------------------- lib/cpumask.c | 2 2 files changed, 191 insertions(+), 167 deletions(-)
include/linux/cpumask.h +190 -166
@@ -5,17 +5,20 @@* Cpumasks provide a bitmap suitable for representing the * set of CPU's in a system, one bit position per CPU number. * +* Old-style uses "cpumask_t", but new ops are "struct cpumask *"; +* don't put "struct cpumask"s on the stack. +* * See detailed comments in the file linux/bitmap.h describing the * data type on which these cpumasks are based. * * For details of cpumask_scnprintf() and cpumask_parse_user(), -* see bitmap_scnprintf() and bitmap_parse_user() in lib/bitmap.c. -* For details of cpulist_scnprintf() and cpulist_parse(), see -* bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. -* For details of cpu_remap(), see bitmap_bitremap in lib/bitmap.c -* For details of cpus_remap(), see bitmap_remap in lib/bitmap.c. -* For details of cpus_onto(), see bitmap_onto in lib/bitmap.c. -* For details of cpus_fold(), see bitmap_fold in lib/bitmap.c. +* see bitmap_scnprintf() and bitmap_parse_user() in lib/bitmap.c. +* For details of cpulist_scnprintf() and cpulist_parse(), +* see bitmap_scnlistprintf() and bitmap_parselist(), in lib/bitmap.c. +* For details of cpumask_cpuremap(), see bitmap_bitremap in lib/bitmap.c +* For details of cpumask_remap(), see bitmap_remap in lib/bitmap.c. +* For details of cpumask_onto(), see bitmap_onto in lib/bitmap.c. +* For details of cpumask_fold(), see bitmap_fold in lib/bitmap.c. * * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * Note: The alternate operations with the suffix "_nr" are used
@@ -33,29 +36,29 @@* * The available cpumask operations are: * -* void cpu_set(cpu, mask) turn on bit 'cpu' in mask -* void cpu_clear(cpu, mask) turn off bit 'cpu' in mask -* void cpus_setall(mask) set all bits -* void cpus_clear(mask) clear all bits -* int cpu_isset(cpu, mask) true iff bit 'cpu' set in mask -* int cpu_test_and_set(cpu, mask) test and set bit 'cpu' in mask -* -* void cpus_and(dst, src1, src2) dst = src1 & src2 [intersection] -* void cpus_or(dst, src1, src2) dst = src1 | src2 [union] -* void cpus_xor(dst, src1, src2) dst = src1 ^ src2 -* void cpus_andnot(dst, src1, src2) dst = src1 & ~src2 -* void cpus_complement(dst, src) dst = ~src -* -* int cpus_equal(mask1, mask2) Does mask1 == mask2? -* int cpus_intersects(mask1, mask2) Do mask1 and mask2 intersect? -* int cpus_subset(mask1, mask2) Is mask1 a subset of mask2? -* int cpus_empty(mask) Is mask empty (no bits sets)? -* int cpus_full(mask) Is mask full (all bits sets)? -* int cpus_weight(mask) Hamming weigh - number of set bits -* int cpus_weight_nr(mask) Same using nr_cpu_ids instead of NR_CPUS +* void cpumask_set_cpu(cpu, mask) turn on bit 'cpu' in mask +* void cpumask_clear_cpu(cpu, mask) turn off bit 'cpu' in mask +* int cpumask_test_and_set_cpu(cpu, mask) test and set bit 'cpu' in mask +* int cpumask_test_cpu(cpu, mask) true iff bit 'cpu' set in mask +* void cpumask_setall(mask) set all bits +* void cpumask_clear(mask) clear all bits +* +* void cpumask_and(dst, src1, src2) dst = src1 & src2 [intersection] +* void cpumask_or(dst, src1, src2) dst = src1 | src2 [union] +* void cpumask_xor(dst, src1, src2) dst = src1 ^ src2 +* void cpumask_andnot(dst, src1, src2) dst = src1 & ~src2 +* void cpumask_complement(dst, src) dst = ~src +* +* int cpumask_equal(mask1, mask2) Does mask1 == mask2? +* int cpumask_intersects(mask1, mask2) Do mask1 and mask2 intersect? +* int cpumask_subset(mask1, mask2) Is mask1 a subset of mask2? +* int cpumask_empty(mask) Is mask empty (no bits sets)? +* int cpumask_full(mask) Is mask full (all bits sets)? +* int cpumask_weight(mask) Hamming weigh - number of set bits +* int cpumask_weight_nr(mask) Same using nr_cpu_ids instead of NR_CPUS * -* void cpus_shift_right(dst, src, n) Shift right -* void cpus_shift_left(dst, src, n) Shift left +* void cpumask_shift_right(dst, src, n) Shift right +* void cpumask_shift_left(dst, src, n) Shift left * * int first_cpu(mask) Number lowest set bit, or NR_CPUS * int next_cpu(cpu, mask) Next cpu past 'cpu', or NR_CPUS
@@ -65,7 +68,7 @@* (can be used as an lvalue) * CPU_MASK_ALL Initializer - all bits set * CPU_MASK_NONE Initializer - no bits set -* unsigned long *cpus_addr(mask) Array of unsigned long's in mask +* unsigned long *cpumask_bits(mask) Array of unsigned long's in mask * * CPUMASK_ALLOC kmalloc's a structure that is a composite of many cpumask_t * variables, and CPUMASK_PTR provides pointers to each field.
@@ -100,12 +103,12 @@* * int cpumask_scnprintf(buf, len, mask) Format cpumask for printing * int cpumask_parse_user(ubuf, ulen, mask) Parse ascii string as cpumask -* int cpulist_scnprintf(buf, len, mask) Format cpumask as list for printing -* int cpulist_parse(buf, map) Parse ascii string as cpulist +* int cpumask_scnprintf(buf, len, mask) Format cpumask as list for printing +* int cpumask_parse(buf, map) Parse ascii string as cpumask * int cpu_remap(oldbit, old, new) newbit = map(old, new)(oldbit) -* void cpus_remap(dst, src, old, new) *dst = map(old, new)(src) -* void cpus_onto(dst, orig, relmap) *dst = orig relative to relmap -* void cpus_fold(dst, orig, sz) dst bits = orig bits mod sz +* void cpumask_remap(dst, src, old, new) *dst = map(old, new)(src) +* void cpumask_onto(dst, orig, relmap) *dst = orig relative to relmap +* void cpumask_fold(dst, orig, sz) dst bits = orig bits mod sz * * for_each_cpu_mask(cpu, mask) for-loop cpu over mask using NR_CPUS * for_each_cpu_mask_nr(cpu, mask) for-loop cpu over mask using nr_cpu_ids
@@ -139,131 +142,216 @@#include <linux/threads.h> #include <linux/bitmap.h> -typedef struct { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t; +struct cpumask { + DECLARE_BITMAP(bits, NR_CPUS); +}; +#define cpumask_bits (maskp) ((maskp)->bits) + +/* Deprecated. */ +typedef struct cpumask cpumask_t ;extern cpumask_t _unused_cpumask_arg_; -#define cpu_set (cpu, dst) __cpu_set((cpu), &(dst)) -static inline void __cpu_set (int cpu,volatile cpumask_t *dstp) +#define cpu_set (cpu, dst) cpumask_set_cpu((cpu), &(dst)) +#define cpu_clear (cpu, dst) cpumask_clear_cpu((cpu), &(dst)) +#define cpu_test_and_set (cpu, mask) cpumask_test_and_set_cpu((cpu), &(mask)) +/* No static inline type checking - see Subtlety (1) above. */ +#define cpu_isset (cpu, cpumask) test_bit((cpu), (cpumask).bits) +#define cpus_setall (dst) cpumask_setall(&(dst)) +#define cpus_clear (dst) cpumask_clear(&(dst)) +#define cpus_and (dst, src1, src2) cpumask_and(&(dst), &(src1), &(src2)) +#define cpus_or (dst, src1, src2) cpumask_or(&(dst), &(src1), &(src2)) +#define cpus_xor (dst, src1, src2) cpumask_xor(&(dst), &(src1), &(src2)) +#define cpus_andnot (dst, src1, src2) \ + cpumask_andnot(&(dst), &(src1), &(src2)) +#define cpus_complement (dst, src) cpumask_complement(&(dst), &(src)) +#define cpus_equal (src1, src2) cpumask_equal(&(src1), &(src2)) +#define cpus_intersects (src1, src2) cpumask_intersects(&(src1), &(src2)) +#define cpus_subset (src1, src2) cpumask_subset(&(src1), &(src2)) +#define cpus_empty (src) cpumask_empty(&(src)) +#define cpus_full (cpumask) cpumask_full(&(cpumask)) +#define cpus_weight (cpumask) cpumask_weight(&(cpumask)) +#define cpus_shift_right (dst, src, n) \ + cpumask_shift_right(&(dst), &(src), (n)) +#define cpus_shift_left (dst, src, n) \ + cpumask_shift_left(&(dst), &(src), (n)) +#define cpumask_scnprintf (buf, len, src) \ + __cpumask_scnprintf((buf), (len), &(src)) +#define cpumask_parse_user (ubuf, ulen, dst) \ + __cpumask_parse_user((ubuf), (ulen), &(dst)) +#define cpulist_scnprintf (buf, len, src) \ + __cpulist_scnprintf((buf), (len), &(src)) +#define cpulist_parse (buf, dst) __cpulist_parse((buf), &(dst)) +#define cpu_remap (oldbit, old, new) \ + cpumask_cpuremap((oldbit), &(old), &(new)) +#define cpus_remap (dst, src, old, new) \ + cpumask_remap(&(dst), &(src), &(old), &(new)) +#define cpus_onto (dst, orig, relmap) \ + cpumask_onto(&(dst), &(orig), &(relmap)) +#define cpus_fold (dst, orig, sz) \ + cpumask_fold(&(dst), &(orig), sz) +#define cpus_addr (src) ((src).bits) +/* End deprecated region. */ + +static inline void cpumask_set_cpu (int cpu,volatile struct cpumask *dstp) {set_bit (cpu, dstp->bits); } -#define cpu_clear (cpu, dst) __cpu_clear((cpu), &(dst)) -static inline void __cpu_clear (int cpu,volatile cpumask_t *dstp) +static inline void cpumask_clear_cpu (int cpu,volatile struct cpumask *dstp) {clear_bit (cpu, dstp->bits); } -#define cpus_setall (dst) __cpus_setall(&(dst), NR_CPUS) -static inline void __cpus_setall (cpumask_t *dstp,int nbits) +/* No static inline type checking - see Subtlety (1) above. */ +#define cpumask_test_cpu (cpu, cpumask) test_bit((cpu), (cpumask)->bits) + +static inline int cpumask_test_and_set_cpu (int cpu,struct cpumask *addr) { -bitmap_fill (dstp->bits, nbits); +return test_and_set_bit (cpu, addr->bits); } -#define cpus_clear (dst) __cpus_clear(&(dst), NR_CPUS) -static inline void __cpus_clear (cpumask_t *dstp,int nbits) +static inline void cpumask_setall (struct cpumask *dstp) { -bitmap_zero (dstp->bits, nbits); +bitmap_fill (dstp->bits,NR_CPUS ); } -/* No static inline type checking - see Subtlety (1) above. */ -#define cpu_isset (cpu, cpumask) test_bit((cpu), (cpumask).bits) - -#define cpu_test_and_set (cpu, cpumask) __cpu_test_and_set((cpu), &(cpumask)) -static inline int __cpu_test_and_set (int cpu,cpumask_t *addr) +static inline void cpumask_clear (struct cpumask *dstp) { -return test_and_set_bit (cpu, addr->bits); +bitmap_zero (dstp->bits,NR_CPUS ); } -#define cpus_and (dst, src1, src2) __cpus_and(&(dst), &(src1), &(src2), NR_CPUS) -static inline void __cpus_and (cpumask_t *dstp,const cpumask_t *src1p, -const cpumask_t *src2p,int nbits) +static inline void cpumask_and (struct cpumask *dstp, +const struct cpumask *src1p, +const struct cpumask *src2p) { -bitmap_and (dstp->bits, src1p->bits, src2p->bits, nbits); +bitmap_and (dstp->bits, src1p->bits, src2p->bits,NR_CPUS ); } -#define cpus_or (dst, src1, src2) __cpus_or(&(dst), &(src1), &(src2), NR_CPUS) -static inline void __cpus_or (cpumask_t *dstp,const cpumask_t *src1p, -const cpumask_t *src2p,int nbits) +static inline void cpumask_or (struct cpumask *dstp,const struct cpumask *src1p, +const struct cpumask *src2p) { -bitmap_or (dstp->bits, src1p->bits, src2p->bits, nbits); +bitmap_or (dstp->bits, src1p->bits, src2p->bits,NR_CPUS ); } -#define cpus_xor (dst, src1, src2) __cpus_xor(&(dst), &(src1), &(src2), NR_CPUS) -static inline void __cpus_xor (cpumask_t *dstp,const cpumask_t *src1p, -const cpumask_t *src2p,int nbits) +static inline void cpumask_xor (struct cpumask *dstp, +const struct cpumask *src1p, +const struct cpumask *src2p) { -bitmap_xor (dstp->bits, src1p->bits, src2p->bits, nbits); +bitmap_xor (dstp->bits, src1p->bits, src2p->bits,NR_CPUS ); } -#define cpus_andnot (dst, src1, src2) \ - __cpus_andnot(&(dst), &(src1), &(src2), NR_CPUS) -static inline void __cpus_andnot (cpumask_t *dstp,const cpumask_t *src1p, -const cpumask_t *src2p,int nbits) +static inline void cpumask_andnot (struct cpumask *dstp, +const struct cpumask *src1p, +const struct cpumask *src2p) { -bitmap_andnot (dstp->bits, src1p->bits, src2p->bits, nbits); +bitmap_andnot (dstp->bits, src1p->bits, src2p->bits,NR_CPUS ); } -#define cpus_complement (dst, src) __cpus_complement(&(dst), &(src), NR_CPUS) -static inline void __cpus_complement (cpumask_t *dstp, -const cpumask_t *srcp,int nbits) +static inline void cpumask_complement (struct cpumask *dstp, +const struct cpumask *srcp) { -bitmap_complement (dstp->bits, srcp->bits, nbits); +bitmap_complement (dstp->bits, srcp->bits,NR_CPUS ); } -#define cpus_equal (src1, src2) __cpus_equal(&(src1), &(src2), NR_CPUS) -static inline int __cpus_equal (const cpumask_t *src1p, -const cpumask_t *src2p,int nbits) +static inline int cpumask_equal (const struct cpumask *src1p, +const struct cpumask *src2p) { -return bitmap_equal (src1p->bits, src2p->bits, nbits); +return bitmap_equal (src1p->bits, src2p->bits,NR_CPUS ); } -#define cpus_intersects (src1, src2) __cpus_intersects(&(src1), &(src2), NR_CPUS) -static inline int __cpus_intersects (const cpumask_t *src1p, -const cpumask_t *src2p,int nbits) +static inline int cpumask_intersects (const struct cpumask *src1p, +const struct cpumask *src2p) { -return bitmap_intersects (src1p->bits, src2p->bits, nbits); +return bitmap_intersects (src1p->bits, src2p->bits,NR_CPUS ); } -#define cpus_subset (src1, src2) __cpus_subset(&(src1), &(src2), NR_CPUS) -static inline int __cpus_subset (const cpumask_t *src1p, -const cpumask_t *src2p,int nbits) +static inline int cpumask_subset (const struct cpumask *src1p, +const struct cpumask *src2p) { -return bitmap_subset (src1p->bits, src2p->bits, nbits); +return bitmap_subset (src1p->bits, src2p->bits,NR_CPUS ); } -#define cpus_empty (src) __cpus_empty(&(src), NR_CPUS) -static inline int __cpus_empty (const cpumask_t *srcp,int nbits) +static inline int cpumask_empty (const struct cpumask *srcp) { -return bitmap_empty (srcp->bits, nbits); +return bitmap_empty (srcp->bits,NR_CPUS ); } -#define cpus_full (cpumask) __cpus_full(&(cpumask), NR_CPUS) -static inline int __cpus_full (const cpumask_t *srcp,int nbits) +static inline int cpumask_full (const struct cpumask *srcp) { -return bitmap_full (srcp->bits, nbits); +return bitmap_full (srcp->bits,NR_CPUS ); } -#define cpus_weight (cpumask) __cpus_weight(&(cpumask), NR_CPUS)static inline int __cpus_weight (const cpumask_t *srcp,int nbits) {return bitmap_weight (srcp->bits, nbits); } -#define cpus_shift_right (dst, src, n) \ - __cpus_shift_right(&(dst), &(src), (n), NR_CPUS) -static inline void __cpus_shift_right (cpumask_t *dstp, -const cpumask_t *srcp,int n,int nbits) +static inline int cpumask_weight (const struct cpumask *srcp) { -bitmap_shift_right (dstp->bits, srcp->bits, n, nbits); +return bitmap_weight (srcp->bits,NR_CPUS ); } -#define cpus_shift_left (dst, src, n) \ - __cpus_shift_left(&(dst), &(src), (n), NR_CPUS) -static inline void __cpus_shift_left (cpumask_t *dstp, -const cpumask_t *srcp,int n,int nbits) +static inline void cpumask_shift_right (struct cpumask *dstp, +const struct cpumask *srcp,int n) +{ +bitmap_shift_right (dstp->bits, srcp->bits, n,NR_CPUS ); +} + +static inline void cpumask_shift_left (struct cpumask *dstp, +const struct cpumask *srcp,int n) +{ +bitmap_shift_left (dstp->bits, srcp->bits, n,NR_CPUS ); +} + +static inline int __cpumask_scnprintf (char *buf,int len, +const struct cpumask *srcp) +{ +return bitmap_scnprintf (buf, len, srcp->bits,NR_CPUS ); +} + +static inline int __cpumask_parse_user (const char __user *buf,int len, +struct cpumask *dstp) +{ +return bitmap_parse_user (buf, len, dstp->bits,NR_CPUS ); +} + +static inline int __cpulist_scnprintf (char *buf,int len, +const struct cpumask *srcp) +{ +return bitmap_scnlistprintf (buf, len, srcp->bits,NR_CPUS ); +} + +static inline int __cpulist_parse (const char *buf,struct cpumask *dstp) +{ +return bitmap_parselist (buf, dstp->bits,NR_CPUS ); +} + +static inline int cpumask_cpuremap (int oldbit, +const struct cpumask *oldp, +const struct cpumask *newp) +{ +return bitmap_bitremap (oldbit, oldp->bits, newp->bits,NR_CPUS ); +} + +static inline void cpumask_remap (struct cpumask *dstp, +const struct cpumask *srcp, +const struct cpumask *oldp, +const struct cpumask *newp) +{ +bitmap_remap (dstp->bits, srcp->bits, oldp->bits, newp->bits,NR_CPUS ); +} + +static inline void cpumask_onto (struct cpumask *dstp, +const struct cpumask *origp, +const struct cpumask *relmapp) +{ +bitmap_onto (dstp->bits, origp->bits, relmapp->bits,NR_CPUS ); +} + +static inline void cpumask_fold (struct cpumask *dstp, +const struct cpumask *origp,int sz) { -bitmap_shift_left (dstp->bits, srcp->bits, n, nbits); +bitmap_fold (dstp->bits, origp->bits, sz,NR_CPUS ); }/*
@@ -326,8 +414,6 @@ extern cpumask_t cpu_mask_all; [0] = 1UL \ } } -#define cpus_addr (src) ((src).bits) -#if NR_CPUS >BITS_PER_LONG #define CPUMASK_ALLOC (m) struct m *m = kmalloc(sizeof(*m), GFP_KERNEL)#define CPUMASK_FREE (m) kfree(m)
@@ -337,68 +423,6 @@ extern cpumask_t cpu_mask_all;#endif #define CPUMASK_PTR (v, m) cpumask_t *v = &(m->v) -#define cpumask_scnprintf (buf, len, src) \ - __cpumask_scnprintf((buf), (len), &(src), NR_CPUS) -static inline int __cpumask_scnprintf (char *buf,int len, -const cpumask_t *srcp,int nbits) -{ -return bitmap_scnprintf (buf, len, srcp->bits, nbits); -} - -#define cpumask_parse_user (ubuf, ulen, dst) \ - __cpumask_parse_user((ubuf), (ulen), &(dst), NR_CPUS) -static inline int __cpumask_parse_user (const char __user *buf,int len, -cpumask_t *dstp,int nbits) -{ -return bitmap_parse_user (buf, len, dstp->bits, nbits); -} - -#define cpulist_scnprintf (buf, len, src) \ - __cpulist_scnprintf((buf), (len), &(src), NR_CPUS) -static inline int __cpulist_scnprintf (char *buf,int len, -const cpumask_t *srcp,int nbits) -{ -return bitmap_scnlistprintf (buf, len, srcp->bits, nbits); -} - -#define cpulist_parse (buf, dst) __cpulist_parse((buf), &(dst), NR_CPUS) -static inline int __cpulist_parse (const char *buf,cpumask_t *dstp,int nbits) -{ -return bitmap_parselist (buf, dstp->bits, nbits); -} - -#define cpu_remap (oldbit, old, new) \ - __cpu_remap((oldbit), &(old), &(new), NR_CPUS) -static inline int __cpu_remap (int oldbit, -const cpumask_t *oldp,const cpumask_t *newp,int nbits) -{ -return bitmap_bitremap (oldbit, oldp->bits, newp->bits, nbits); -} - -#define cpus_remap (dst, src, old, new) \ - __cpus_remap(&(dst), &(src), &(old), &(new), NR_CPUS) -static inline void __cpus_remap (cpumask_t *dstp,const cpumask_t *srcp, -const cpumask_t *oldp,const cpumask_t *newp,int nbits) -{ -bitmap_remap (dstp->bits, srcp->bits, oldp->bits, newp->bits, nbits); -} - -#define cpus_onto (dst, orig, relmap) \ - __cpus_onto(&(dst), &(orig), &(relmap), NR_CPUS) -static inline void __cpus_onto (cpumask_t *dstp,const cpumask_t *origp, -const cpumask_t *relmapp,int nbits) -{ -bitmap_onto (dstp->bits, origp->bits, relmapp->bits, nbits); -} - -#define cpus_fold (dst, orig, sz) \ - __cpus_fold(&(dst), &(orig), sz, NR_CPUS) -static inline void __cpus_fold (cpumask_t *dstp,const cpumask_t *origp, -int sz,int nbits) -{ -bitmap_fold (dstp->bits, origp->bits, sz, nbits); -} -#if NR_CPUS ==1 #define nr_cpu_ids 1
lib/cpumask.c +1 -1
@@ -18,7 +18,7 @@ EXPORT_SYMBOL(__next_cpu);int cpumask_next_and (int n,const cpumask_t *srcp,const cpumask_t *andp) {while ((n =next_cpu_nr (n, *srcp)) < nr_cpu_ids) -if (cpu_isset (n, *andp)) +if (cpumask_test_cpu (n, andp))break ;return n; }
PATCH 7/35 cpumask: change cpumask/list_scnprintf, cpumask/list_parse to take pointers. From: Rusty Russell <[email protected]>
In reply to Mike TravisWe want to move cpumasks off the stack: no local decls, no passing by copy.
Most cpumask functions started with cpus_: these have been replaced by cpumask_ ones which take struct cpumask pointers as expected, and macro stubs used for the transition.
These four functions don't have good replacement names; fortunately they're rarely used, so we just change them over.
--- arch/ia64/kernel/topology.c | 2 +- arch/mips/kernel/smp-cmp.c | 4 ++-- arch/powerpc/platforms/pseries/xics.c | 2 +- arch/x86/kernel/cpu/intel_cacheinfo.c | 4 ++-- arch/x86/kernel/setup_percpu.c | 2 +- drivers/base/cpu.c | 2 +- drivers/base/node.c | 4 ++-- drivers/base/topology.c | 4 ++-- drivers/pci/pci-sysfs.c | 4 ++-- drivers/pci/probe.c | 4 ++-- include/linux/cpumask.h | 21 +++++++-------------- kernel/cpuset.c | 4 ++-- kernel/irq/proc.c | 4 ++-- kernel/profile.c | 4 ++-- kernel/sched.c | 4 ++-- kernel/sched_stats.h | 2 +- kernel/taskstats.c | 2 +- kernel/trace/trace.c | 4 ++-- mm/slub.c | 2 +- 19 files changed, 36 insertions(+), 43 deletions(-)
arch/ia64/kernel/topology.c +1 -1
@@ -217,7 +217,7 @@ static ssize_t show_shared_cpu_map(struccpumask_t shared_cpu_map;cpus_and (shared_cpu_map, this_leaf->shared_cpu_map, cpu_online_map); - len =cpumask_scnprintf (buf,NR_CPUS +1 , shared_cpu_map); + len =cpumask_scnprintf (buf,NR_CPUS +1 , &shared_cpu_map); len +=sprintf (buf+len,"\n" );return len; }
arch/mips/kernel/smp-cmp.c +2 -2
@@ -51,10 +51,10 @@ static int __init allowcpus(char *str)int len;cpus_clear (cpu_allow_map); -if (cpulist_parse (str, cpu_allow_map) ==0 ) { +if (cpulist_parse (str, &cpu_allow_map) ==0 ) {cpu_set (0 , cpu_allow_map);cpus_and (cpu_possible_map, cpu_possible_map, cpu_allow_map); - len =cpulist_scnprintf (buf,sizeof (buf)-1 , cpu_possible_map); + len =cpulist_scnprintf (buf,sizeof (buf)-1 , &cpu_possible_map); buf[len] ='\0' ;pr_debug ("Allowable CPUs: %s\n" , buf);return 1 ;
arch/powerpc/platforms/pseries/xics.c +1 -1
@@ -358,7 +358,7 @@ static void xics_set_affinity(unsigned i irq_server =get_irq_server (virq,1 );if (irq_server ==-1 ) {char cpulist[128 ]; -cpumask_scnprintf (cpulist,sizeof (cpulist), cpumask); +cpumask_scnprintf (cpulist,sizeof (cpulist), &cpumask);printk (KERN_WARNING "%s: No online cpus in the mask %s for irq %d\n" , __func__, cpulist, virq);
arch/x86/kernel/cpu/intel_cacheinfo.c +2 -2
@@ -626,8 +626,8 @@ static ssize_t show_shared_cpu_map_func(cpumask_t *mask = &this_leaf->shared_cpu_map; n = type? -cpulist_scnprintf (buf, len-2 , *mask): -cpumask_scnprintf (buf, len-2 , *mask); +cpulist_scnprintf (buf, len-2 , mask) : +cpumask_scnprintf (buf, len-2 , mask); buf[n++] ='\n' ; buf[n] ='\0' ; }
arch/x86/kernel/setup_percpu.c +1 -1
@@ -282,7 +282,7 @@ static void __cpuinit numa_set_cpumask(ielse cpu_clear (cpu, *mask); -cpulist_scnprintf (buf,sizeof (buf), *mask); +cpulist_scnprintf (buf,sizeof (buf), mask);printk (KERN_DEBUG "%s cpu %d node %d: mask now %s\n" , enable?"numa_add_cpu" :"numa_remove_cpu" , cpu, node, buf); }
drivers/base/cpu.c +1 -1
@@ -109,7 +109,7 @@ static SYSDEV_ATTR(crash_notes, 0400, sh*/ static ssize_t print_cpus_map (char *buf,cpumask_t *map) { -int n =cpulist_scnprintf (buf,PAGE_SIZE -2 , *map); +int n =cpulist_scnprintf (buf,PAGE_SIZE -2 , map); buf[n++] ='\n' ; buf[n] ='\0' ;
drivers/base/node.c +2 -2
@@ -30,8 +30,8 @@ static ssize_t node_read_cpumap(struct sBUILD_BUG_ON ((NR_CPUS /32 *9 ) > (PAGE_SIZE -1 )); len = type? -cpulist_scnprintf (buf,PAGE_SIZE -2 , *mask): -cpumask_scnprintf (buf,PAGE_SIZE -2 , *mask); +cpulist_scnprintf (buf,PAGE_SIZE -2 , mask) : +cpumask_scnprintf (buf,PAGE_SIZE -2 , mask); buf[len++] ='\n' ; buf[len] ='\0' ;return len;
drivers/base/topology.c +2 -2
@@ -49,8 +49,8 @@ static ssize_t show_cpumap(int type, cpuif (len >1 ) { n = type? -cpulist_scnprintf (buf, len-2 , *mask): -cpumask_scnprintf (buf, len-2 , *mask); +cpulist_scnprintf (buf, len-2 , mask) : +cpumask_scnprintf (buf, len-2 , mask); buf[n++] ='\n' ; buf[n] ='\0' ; }
drivers/pci/pci-sysfs.c +2 -2
@@ -74,7 +74,7 @@ static ssize_t local_cpus_show(struct deint len; mask =pcibus_to_cpumask (to_pci_dev (dev)->bus); - len =cpumask_scnprintf (buf,PAGE_SIZE -2 , mask); + len =cpumask_scnprintf (buf,PAGE_SIZE -2 , &mask); buf[len++] ='\n' ; buf[len] ='\0' ;return len;
@@ -88,7 +88,7 @@ static ssize_t local_cpulist_show(structint len; mask =pcibus_to_cpumask (to_pci_dev (dev)->bus); - len =cpulist_scnprintf (buf,PAGE_SIZE -2 , mask); + len =cpulist_scnprintf (buf,PAGE_SIZE -2 , &mask); buf[len++] ='\n' ; buf[len] ='\0' ;return len;
drivers/pci/probe.c +2 -2
@@ -55,8 +55,8 @@ static ssize_t pci_bus_show_cpuaffinity( cpumask =pcibus_to_cpumask (to_pci_bus (dev)); ret = type? -cpulist_scnprintf (buf,PAGE_SIZE -2 , cpumask): -cpumask_scnprintf (buf,PAGE_SIZE -2 , cpumask); +cpulist_scnprintf (buf,PAGE_SIZE -2 , &cpumask) : +cpumask_scnprintf (buf,PAGE_SIZE -2 , &cpumask); buf[ret++] ='\n' ; buf[ret] ='\0' ;return ret;
include/linux/cpumask.h +7 -14
@@ -174,13 +174,6 @@ extern cpumask_t _unused_cpumask_arg_; cpumask_shift_right(&(dst), &(src), (n))#define cpus_shift_left (dst, src, n) \ cpumask_shift_left(&(dst), &(src), (n)) -#define cpumask_scnprintf (buf, len, src) \ - __cpumask_scnprintf((buf), (len), &(src)) -#define cpumask_parse_user (ubuf, ulen, dst) \ - __cpumask_parse_user((ubuf), (ulen), &(dst)) -#define cpulist_scnprintf (buf, len, src) \ - __cpulist_scnprintf((buf), (len), &(src)) -#define cpulist_parse (buf, dst) __cpulist_parse((buf), &(dst))#define cpu_remap (oldbit, old, new) \ cpumask_cpuremap((oldbit), &(old), &(new))#define cpus_remap (dst, src, old, new) \
@@ -303,25 +296,25 @@ static inline void cpumask_shift_left(stbitmap_shift_left (dstp->bits, srcp->bits, n,NR_CPUS ); } -static inline int __cpumask_scnprintf (char *buf,int len, -const struct cpumask *srcp) +static inline int cpumask_scnprintf (char *buf,int len, +const struct cpumask *srcp) {return bitmap_scnprintf (buf, len, srcp->bits,NR_CPUS ); } -static inline int __cpumask_parse_user (const char __user *buf,int len, -struct cpumask *dstp) +static inline int cpumask_parse_user (const char __user *buf,int len, +struct cpumask *dstp) {return bitmap_parse_user (buf, len, dstp->bits,NR_CPUS ); } -static inline int __cpulist_scnprintf (char *buf,int len, -const struct cpumask *srcp) +static inline int cpulist_scnprintf (char *buf,int len, +const struct cpumask *srcp) {return bitmap_scnlistprintf (buf, len, srcp->bits,NR_CPUS ); } -static inline int __cpulist_parse (const char *buf,struct cpumask *dstp) +static inline int cpulist_parse (const char *buf,struct cpumask *dstp) {return bitmap_parselist (buf, dstp->bits,NR_CPUS ); }
kernel/cpuset.c +2 -2
@@ -891,7 +891,7 @@ static int update_cpumask(struct cpusetif (!*buf) {cpus_clear (trialcs.cpus_allowed); }else { - retval =cpulist_parse (buf, trialcs.cpus_allowed); + retval =cpulist_parse (buf, &trialcs.cpus_allowed);if (retval <0 )return retval;
@@ -1477,7 +1477,7 @@ static int cpuset_sprintf_cpulist(char * mask = cs->cpus_allowed;mutex_unlock (&callback_mutex); -return cpulist_scnprintf (page,PAGE_SIZE , mask); +return cpulist_scnprintf (page,PAGE_SIZE , &mask); }static int cpuset_sprintf_memlist (char *page,struct cpuset *cs)
kernel/irq/proc.c +2 -2
@@ -47,7 +47,7 @@ static ssize_t irq_affinity_proc_write(s irq_balancing_disabled(irq))return -EIO ; - err =cpumask_parse_user (buffer, count, new_value); + err =cpumask_parse_user (buffer, count, &new_value);if (err)return err;
@@ -95,7 +95,7 @@ static ssize_t default_affinity_write(stcpumask_t new_value;int err; - err =cpumask_parse_user (buffer, count, new_value); + err =cpumask_parse_user (buffer, count, &new_value);if (err)return err;
kernel/profile.c +2 -2
@@ -446,7 +446,7 @@ void profile_tick(int type)static int prof_cpu_mask_read_proc (char *page,char **start,off_t off,int count,int *eof,void *data) { -int len =cpumask_scnprintf (page, count, *(cpumask_t *)data); +int len =cpumask_scnprintf (page, count, (cpumask_t *)data);if (count - len <2 )return -EINVAL ; len +=sprintf (page + len,"\n" );
@@ -460,7 +460,7 @@ static int prof_cpu_mask_write_proc(struunsigned long full_count = count, err;cpumask_t new_value; - err =cpumask_parse_user (buffer, count, new_value); + err =cpumask_parse_user (buffer, count, &new_value);if (err)return err;
kernel/sched.c +2 -2
@@ -6646,7 +6646,7 @@ static int sched_domain_debug_one(structstruct sched_group *group = sd->groups;char str[256 ]; -cpulist_scnprintf (str,sizeof (str), sd->span); +cpulist_scnprintf (str,sizeof (str), &sd->span);cpus_clear (*groupmask);printk (KERN_DEBUG "%*s domain %d: " , level,"" , level);
@@ -6700,7 +6700,7 @@ static int sched_domain_debug_one(structcpus_or (*groupmask, *groupmask, group->cpumask); -cpulist_scnprintf (str,sizeof (str), group->cpumask); +cpulist_scnprintf (str,sizeof (str), &group->cpumask);printk (KERN_CONT " %s" , str); group = group->next;
kernel/sched_stats.h +1 -1
@@ -42,7 +42,7 @@ static int show_schedstat(struct seq_filfor_each_domain (cpu, sd) {enum cpu_idle_type itype; -cpumask_scnprintf (mask_str, mask_len, sd->span); +cpumask_scnprintf (mask_str, mask_len, &sd->span);seq_printf (seq,"domain%d %s" , dcount++, mask_str);for (itype =CPU_IDLE ; itype <CPU_MAX_IDLE_TYPES ; itype++) {
kernel/taskstats.c +1 -1
@@ -352,7 +352,7 @@ static int parse(struct nlattr *na, cpumif (!data)return -ENOMEM ;nla_strlcpy (data, na, len); - ret =cpulist_parse (data, *mask); + ret =cpulist_parse (data, mask);kfree (data);return ret; }
kernel/trace/trace.c +2 -2
@@ -2117,7 +2117,7 @@ tracing_cpumask_read(struct file *filp,mutex_lock (&tracing_cpumask_update_lock); - len =cpumask_scnprintf (mask_str, count, tracing_cpumask); + len =cpumask_scnprintf (mask_str, count, &tracing_cpumask);if (count - len <2 ) { count = -EINVAL ; goto out_err;
@@ -2138,7 +2138,7 @@ tracing_cpumask_write(struct file *filp,int err, cpu;mutex_lock (&tracing_cpumask_update_lock); - err =cpumask_parse_user (ubuf, count, tracing_cpumask_new); + err =cpumask_parse_user (ubuf, count, &tracing_cpumask_new);if (err) goto err_unlock;
mm/slub.c +1 -1
@@ -3637,7 +3637,7 @@ static int list_locations(struct kmem_ca len < PAGE_SIZE - 60) { len +=sprintf (buf + len," cpus=" ); len +=cpulist_scnprintf (buf + len,PAGE_SIZE - len -50 , - l->cpus); + &l->cpus); } if (num_online_nodes() > 1 && !nodes_empty(l->nodes) &&
PATCH 8/35 cpumask: cpumask_size() From: Mike Travis <[email protected]>
In reply to Mike TravisDynamic allocation of cpumasks requires the size.
--- include/linux/cpumask.h | 3 +++ 1 file changed, 3 insertions(+)
include/linux/cpumask.h +3 -0
@@ -64,6 +64,7 @@* int next_cpu(cpu, mask) Next cpu past 'cpu', or NR_CPUS * int next_cpu_nr(cpu, mask) Next cpu past 'cpu', or nr_cpu_ids * +* size_t cpumask_size() Length of cpumask in bytes. * cpumask_t cpumask_of_cpu(cpu) Return cpumask with bit 'cpu' set * (can be used as an lvalue) * CPU_MASK_ALL Initializer - all bits set
@@ -147,6 +148,8 @@ struct cpumask { };#define cpumask_bits (maskp) ((maskp)->bits) +#define cpumask_size () (BITS_TO_LONGS(NR_CPUS) * sizeof(long)) +/* Deprecated. */ typedef struct cpumask cpumask_t ;extern cpumask_t _unused_cpumask_arg_;
PATCH 9/35 cpumask: add cpumask_copy()
In reply to Mike TravisSince cpumasks are to become pointers to undefined structs, we need to replace assignments. Also, dynamically allocated ones will eventually be nr_cpu_ids bits (<= NR_CPUS), so assignment is a definite no-no.
--- include/linux/cpumask.h | 8 ++++++++ 1 file changed, 8 insertions(+)
include/linux/cpumask.h +8 -0
@@ -64,6 +64,8 @@* int next_cpu(cpu, mask) Next cpu past 'cpu', or NR_CPUS * int next_cpu_nr(cpu, mask) Next cpu past 'cpu', or nr_cpu_ids * +* void cpumask_copy(dmask, smask) dmask = smask +* * size_t cpumask_size() Length of cpumask in bytes. * cpumask_t cpumask_of_cpu(cpu) Return cpumask with bit 'cpu' set * (can be used as an lvalue)
@@ -350,6 +352,12 @@ static inline void cpumask_fold(struct cbitmap_fold (dstp->bits, origp->bits, sz,NR_CPUS ); } +static inline void cpumask_copy (struct cpumask *dstp, +const struct cpumask *srcp) +{ +bitmap_copy (cpumask_bits (dstp),cpumask_bits (srcp),NR_CPUS ); +} +/* * Special-case data structure for "single bit set only" constant CPU masks. *
PATCH 10/35 cpumask: introduce cpumask_var_t for local cpumask vars From: Rusty Russell <[email protected]>
In reply to Mike TravisWe want to move cpumasks off the stack: no local decls, no passing by copy. Linus suggested we use the array-or-pointer trick for on-stack vars; we introduce a new cpumask_var_t for this.
Rather than pick an arbitrary limit, I chose a new config option so arch maintainers can decide where their threshold is.
--- include/linux/cpumask.h | 36 ++++++++++++++++++++++++++++++++++++ kernel/Kconfig.preempt | 10 ++++++++++ lib/cpumask.c | 31 +++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+)
include/linux/cpumask.h +36 -0
@@ -485,6 +485,42 @@ int __next_cpu_nr(int n, const cpumask_t#endif /* NR_CPUS > 64 */ /* +* cpumask_var_t: struct cpumask for stack usage. +* +* Oh, the wicked games we play! In order to make kernel coding a +* little more difficult, we typedef cpumask_var_t to an array or a +* pointer: doing &mask on an array is a noop, so it still works. +* +* ie. +* cpumask_var_t tmpmask; +* if (!alloc_cpumask_var(&tmpmask, GFP_KERNEL)) +* return -ENOMEM; +* +* ... use 'tmpmask' like a normal struct cpumask * ... +* +* free_cpumask_var(tmpmask); +*/ +#ifdef CONFIG_CPUMASK_OFFSTACK +typedef struct cpumask *cpumask_var_t ; + +bool alloc_cpumask_var (cpumask_var_t *mask,gfp_t flags); +void free_cpumask_var (cpumask_var_t mask); + +#else +typedef struct cpumask cpumask_var_t [1 ]; + +static inline bool alloc_cpumask_var (cpumask_var_t *mask,gfp_t flags) +{ +return true; +} + +static inline void free_cpumask_var (cpumask_var_t mask) +{ +} + +#endif /* CONFIG_CPUMASK_OFFSTACK */ + +/* * The following particular system cpumasks and operations manage * possible, present, active and online cpus. Each of them is a fixed size * bitmap of size NR_CPUS.
kernel/Kconfig.preempt +10 -0
@@ -77,3 +77,13 @@ config RCU_TRACE Say Y here if you want to enable RCU tracing Say N if you are unsure. + +# FIXME - does not need to be in this Kconfig file but putting it here puts it +# on the processors menu. To fix means changing all arch Kconfig's. +config CPUMASK_OFFSTACK + bool + prompt "Force CPU masks off stack" if DEBUG_PER_CPU_MAPS + help + Use dynamic allocation for cpumask_var_t, instead of putting + them on the stack. This is a bit more expensive, but avoids + stack overflow.
lib/cpumask.c +31 -0
@@ -43,3 +43,34 @@ int __any_online_cpu(const cpumask_t *mareturn cpu; }EXPORT_SYMBOL (__any_online_cpu); + +/* These are not inline because of header tangles. */ +#ifdef CONFIG_CPUMASK_OFFSTACK +bool alloc_cpumask_var (cpumask_var_t *mask,gfp_t flags) +{ +if (likely (slab_is_available ())) + *mask =kmalloc (cpumask_size (), flags); +else { +#ifdef CONFIG_DEBUG_PER_CPU_MAPS +printk (KERN_ERR +"=> alloc_cpumask_var: kmalloc not available!\n" ); +dump_stack (); +#endif + *mask =NULL ; + } +#ifdef CONFIG_DEBUG_PER_CPU_MAPS +if (!*mask) { +printk (KERN_ERR "=> alloc_cpumask_var: failed!\n" ); +dump_stack (); + } +#endif +return *mask !=NULL ; +} +EXPORT_SYMBOL (alloc_cpumask_var); + +void free_cpumask_var (cpumask_var_t mask) +{ +kfree (mask); +} +EXPORT_SYMBOL (free_cpumask_var); +#endif
PATCH 11/35 x86: enable MAXSMP
In reply to Mike TravisSet MAXSMP to enable CONFIG_CPUMASK_OFFSTACK which moves cpumask's off the stack (and in structs) when using cpumask_var_t.
--- arch/x86/Kconfig | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
arch/x86/Kconfig +6 -5
@@ -573,6 +573,7 @@ config IOMMU_HELPER config MAXSMP bool "Configure Maximum number of SMP Processors and NUMA Nodes" depends on X86_64 && SMP && DEBUG_KERNEL && EXPERIMENTAL + select CPUMASK_OFFSTACK help Configure maximum number of CPUS and NUMA Nodes for this architecture (up to 4096!).
@@ -584,16 +585,16 @@ config MAXSMP If unsure, say N. config NR_CPUS - int "Maximum number of CPUs (2-4096)" if !MAXSMP - range 2 4096 depends on SMP + int "Maximum number of CPUs" if SMP && !MAXSMP + range 2 512 if SMP && !MAXSMP default "4096" if MAXSMP - default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 + default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 default "8" help This allows you to specify the maximum number of CPUs which this - kernel will support. The maximum supported value is 512 and the - minimum value which makes sense is 2. + kernel will support. The maximum supported value is 512 (4096 + if MAXSMP set) and the minimum value which makes sense is 2. This is purely to save memory - each supported CPU adds approximately one kilobyte to the kernel image.
PATCH 12/35 cpumask: make CONFIG_NR_CPUS always valid. From: Rusty Russell <[email protected]>
In reply to Mike TravisCurrently we have NR_CPUS, which is 1 on UP, and CONFIG_NR_CPUS on SMP. If we make CONFIG_NR_CPUS always valid (and always 1 on !SMP), we can skip the middleman.
This also allows us to find and check all the remaining NR_CPUS users.
--- arch/alpha/Kconfig | 10 +++++----- arch/arm/Kconfig | 6 +++--- arch/ia64/Kconfig | 8 ++++---- arch/m32r/Kconfig | 8 ++++---- arch/mips/Kconfig | 4 ++-- arch/parisc/Kconfig | 8 ++++---- arch/s390/Kconfig | 10 +++++----- arch/sh/Kconfig | 10 +++++----- arch/sparc/Kconfig | 8 ++++---- arch/sparc64/Kconfig | 8 ++++---- arch/um/Kconfig | 8 ++++---- arch/x86/Kconfig | 6 +++--- include/linux/threads.h | 10 ++-------- 13 files changed, 49 insertions(+), 55 deletions(-)
arch/alpha/Kconfig +5 -5
@@ -544,11 +544,11 @@ config HAVE_DEC_LOCK default y config NR_CPUS - int "Maximum number of CPUs (2-32)" - range 2 32 - depends on SMP - default "32" if ALPHA_GENERIC || ALPHA_MARVEL - default "4" if !ALPHA_GENERIC && !ALPHA_MARVEL + int "Maximum number of CPUs (2-32)" if SMP + range 2 32 if SMP + default "1" if !SMP + default "32" if SMP && (ALPHA_GENERIC || ALPHA_MARVEL) + default "4" if SMP && (!ALPHA_GENERIC && !ALPHA_MARVEL) help MARVEL support can handle a maximum of 32 CPUs, all the others with working support have a maximum of 4 CPUs.
arch/arm/Kconfig +3 -3
@@ -769,9 +769,9 @@ config PAGE_OFFSET default 0xC0000000 config NR_CPUS - int "Maximum number of CPUs (2-32)" - range 2 32 - depends on SMP + int "Maximum number of CPUs (2-32)" if SMP + range 2 32 if SMP + default "1" if !SMP default "4" config HOTPLUG_CPU
arch/ia64/Kconfig +4 -4
@@ -315,10 +315,10 @@ config SMP If you don't know what to do here, say N. config NR_CPUS - int "Maximum number of CPUs (2-4096)" - range 2 4096 - depends on SMP - default "4096" + int "Maximum number of CPUs (2-4096)" if SMP + range 2 4096 if SMP + default "1" if !SMP + default "4096" if SMP help You should set this to the number of CPUs in your system, but keep in mind that a kernel compiled for, e.g., 2 CPUs will boot but
arch/m32r/Kconfig +4 -4
@@ -319,10 +319,10 @@ config CHIP_M32700_TS1 default n config NR_CPUS - int "Maximum number of CPUs (2-32)" - range 2 32 - depends on SMP - default "2" + int "Maximum number of CPUs (2-32)" if SMP + range 2 32 if SMP + default "1" if !SMP + default "2" if SMP help This allows you to specify the maximum number of CPUs which this kernel will support. The maximum supported value is 32 and the
arch/mips/Kconfig +2 -2
@@ -1719,9 +1719,9 @@ config NR_CPUS_DEFAULT_64 bool config NR_CPUS - int "Maximum number of CPUs (2-64)" + int "Maximum number of CPUs (2-64)" if SMP range 1 64 if NR_CPUS_DEFAULT_1 - depends on SMP + default "1" if !SMP default "1" if NR_CPUS_DEFAULT_1 default "2" if NR_CPUS_DEFAULT_2 default "4" if NR_CPUS_DEFAULT_4
arch/parisc/Kconfig +4 -4
@@ -256,10 +256,10 @@ config HPUX depends on !64BIT config NR_CPUS - int "Maximum number of CPUs (2-32)" - range 2 32 - depends on SMP - default "32" + int "Maximum number of CPUs (2-32)" if SMP + range 2 32 if SMP + default "1" if !SMP + default "32" if SMP endmenu
arch/s390/Kconfig +5 -5
@@ -116,11 +116,11 @@ config SMP Even if you don't know what to do here, say Y. config NR_CPUS - int "Maximum number of CPUs (2-64)" - range 2 64 - depends on SMP - default "32" if !64BIT - default "64" if 64BIT + int "Maximum number of CPUs (2-64)" if SMP + range 2 64 if SMP + default "1" if !SMP + default "32" if SMP && !64BIT + default "64" if SMP && 64BIT help This allows you to specify the maximum number of CPUs which this kernel will support. The maximum supported value is 64 and the
arch/sh/Kconfig +5 -5
@@ -545,11 +545,11 @@ config SMP If you don't know what to do here, say N. config NR_CPUS - int "Maximum number of CPUs (2-32)" - range 2 32 - depends on SMP - default "4" if CPU_SHX3 - default "2" + int "Maximum number of CPUs (2-32)" if SMP + range 2 32 if SMP + default "1" if !SMP + default "4" if SMP && CPU_SHX3 + default "2" if SMP help This allows you to specify the maximum number of CPUs which this kernel will support. The maximum supported value is 32 and the
arch/sparc/Kconfig +4 -4
@@ -64,10 +64,10 @@ config SMP If you don't know what to do here, say N. config NR_CPUS - int "Maximum number of CPUs (2-32)" - range 2 32 - depends on SMP - default "32" + int "Maximum number of CPUs (2-32)" if SMP + range 2 32 if SMP + default "1" if SMP + default "32" if SMP config SPARC bool
arch/sparc64/Kconfig +4 -4
@@ -169,10 +169,10 @@ config SMP If you don't know what to do here, say N. config NR_CPUS - int "Maximum number of CPUs (2-1024)" - range 2 1024 - depends on SMP - default "64" + int "Maximum number of CPUs (2-1024)" if SMP + range 2 1024 if SMP + default "1" if !SMP + default "64" if SMP source "drivers/cpufreq/Kconfig"
arch/um/Kconfig +4 -4
@@ -198,10 +198,10 @@ config SMP If you don't know what to do, say N. config NR_CPUS - int "Maximum number of CPUs (2-32)" - range 2 32 - depends on SMP - default "32" + int "Maximum number of CPUs (2-32)" if SMP + range 2 32 if SMP + default "1" if !SMP + default "32" if SMP config HIGHMEM bool "Highmem support (EXPERIMENTAL)"
arch/x86/Kconfig +3 -3
@@ -585,12 +585,12 @@ config MAXSMP If unsure, say N. config NR_CPUS - depends on SMP int "Maximum number of CPUs" if SMP && !MAXSMP range 2 512 if SMP && !MAXSMP + default "1" if !SMP default "4096" if MAXSMP - default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 - default "8" + default "32" if SMP && (X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000) + default "8" if SMP help This allows you to specify the maximum number of CPUs which this kernel will support. The maximum supported value is 512 (4096
include/linux/threads.h +2 -8
@@ -8,16 +8,10 @@*/ /* -* Maximum supported processors that can run under SMP. This value is -* set via configure setting. The maximum is equal to the size of the -* bitmasks used on that platform, i.e. 32 or 64. Setting this smaller -* saves quite a bit of memory. +* Maximum supported processors. Setting this smaller saves quite a +* bit of memory. Use nr_cpu_ids instead of this except for bitmaps. */ -#ifdef CONFIG_SMP #define NR_CPUS CONFIG_NR_CPUS -#else -#define NR_CPUS 1 -#endif #define MIN_THREADS_LEFT_FOR_ROOT 4
PATCH 13/35 cpumask: make nr_cpu_ids valid in all configurations. From: Rusty Russell <[email protected]>
In reply to Mike Travisnr_cpu_ids is the (badly named) runtime limit on possible CPU numbers; ie. the variable version of NR_CPUS.
This makes is valid in all configs, including UP.
--- include/linux/cpumask.h | 9 +++++++-- init/main.c | 7 +++++++ 2 files changed, 14 insertions(+), 2 deletions(-)
include/linux/cpumask.h +7 -2
@@ -190,6 +190,13 @@ extern cpumask_t _unused_cpumask_arg_;#define cpus_addr (src) ((src).bits)/* End deprecated region. */ +#if NR_CPUS >1 +/* Starts at NR_CPUS until we know better. */ +extern int nr_cpu_ids; +#else +#define nr_cpu_ids NR_CPUS +#endif +static inline void cpumask_set_cpu (int cpu,volatile struct cpumask *dstp) {set_bit (cpu, dstp->bits);
@@ -429,7 +436,6 @@ extern cpumask_t cpu_mask_all;#if NR_CPUS ==1 -#define nr_cpu_ids 1#define first_cpu (src) ({ (void)(src); 0; })#define next_cpu (n, src) ({ (void)(src); 1; })#define cpumask_next_and (n, srcp, andp) ({ (void)(srcp), (void)(andp); 1; })
@@ -442,7 +448,6 @@ extern cpumask_t cpu_mask_all;#else /* NR_CPUS > 1 */ -extern int nr_cpu_ids;int __first_cpu (const cpumask_t *srcp);int __next_cpu (int n,const cpumask_t *srcp);int cpumask_next_and (int n,const cpumask_t *srcp,const cpumask_t *andp);
init/main.c +7 -0
@@ -374,6 +374,8 @@ EXPORT_SYMBOL(cpu_mask_all);#endif /* Setup number of possible processor ids */ +/* nr_cpu_ids is a real variable for SMP. */ +#ifndef nr_cpu_idsint nr_cpu_ids__read_mostly =NR_CPUS ;EXPORT_SYMBOL (nr_cpu_ids);
@@ -387,6 +389,11 @@ static void __init setup_nr_cpu_ids(void nr_cpu_ids = highest_cpu + 1; } +#else +void __init setup_nr_cpu_ids (void ) +{ +} +#endif /* ... nr_cpu_ids is a constant. */ #ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA unsigned long __per_cpu_offset[NR_CPUS ]__read_mostly ;
PATCH 14/35 cpumask: add nr_cpumask_bits
In reply to Mike TravisWhen nr_cpu_ids is set to CONFIG_NR_CPUS then references to nr_cpu_ids will return the maximum index of the configured NR_CPUS (+1) instead of the maximum index of the possible number of cpus (+1). This results in extra unused memory being allocated by functions that are setting up arrays of structs to keep track of per cpu items.
Since we do want to keep the ability to use constants for the cpu bit operators on smaller systems (which are generally much faster assembler ops), we introduce a separate "nr_cpumask_bits" to replace "nr_cpu_ids" only for the inline assembly ops. This will be a constant when CONFIG_CPUMASK_OFFSTACK is undefined and a variable when it is defined.
Thus "nr_cpu_ids" reverts back to being a variable representing the maximum possible cpu (+1), except in the non-SMP case where it is a constant value of 1. The relationship between the related variables and constants is: (1 <= nr_cpu_ids <= nr_cpumask_bits <= NR_CPUS).
--- arch/x86/kernel/setup_percpu.c | 7 ++++--- include/linux/cpumask.h | 8 ++++++++ 2 files changed, 12 insertions(+), 3 deletions(-)
arch/x86/kernel/setup_percpu.c +4 -3
@@ -155,6 +155,10 @@ void __init setup_per_cpu_areas(void)printk (KERN_INFO "PERCPU: Allocating %zd bytes of per cpu data\n" , size); +printk (KERN_DEBUG +"NR_CPUS:%d nr_cpumask_bits:%d nr_cpu_ids:%d nr_node_ids:%d\n" , +NR_CPUS , nr_cpumask_bits, nr_cpu_ids, nr_node_ids); +for_each_possible_cpu (cpu) {#ifndef CONFIG_NEED_MULTIPLE_NODES ptr = __alloc_bootmem(size, align,
@@ -183,9 +187,6 @@ void __init setup_per_cpu_areas(void)memcpy (ptr, __per_cpu_start, __per_cpu_end - __per_cpu_start); } -printk (KERN_DEBUG "NR_CPUS: %d, nr_cpu_ids: %d, nr_node_ids %d\n" , -NR_CPUS , nr_cpu_ids, nr_node_ids); -/* Setup percpu data maps */ setup_per_cpu_maps ();
include/linux/cpumask.h +8 -0
@@ -197,6 +197,14 @@ extern int nr_cpu_ids;#define nr_cpu_ids NR_CPUS#endif +/* The number of bits to hand to the bitmask ops. */ +#if NR_CPUS <=BITS_PER_LONG +/* This produces more efficient code. */ +#define nr_cpumask_bits NR_CPUS +#else +#define nr_cpumask_bits nr_cpu_ids +#endif +static inline void cpumask_set_cpu (int cpu,volatile struct cpumask *dstp) {set_bit (cpu, dstp->bits);
PATCH 15/35 cpumask: prepare for iterators to only go to nr_cpu_ids/nr_cpumask_bits. From: Rusty Russell <[email protected]>
In reply to Mike TravisIn fact, all cpumask ops will only be valid (in general) for bit numbers < nr_cpu_ids. So use that instead of NR_CPUS in various places.
--- arch/alpha/kernel/irq.c | 3 ++- arch/alpha/kernel/smp.c | 8 ++++---- arch/arm/kernel/irq.c | 2 +- arch/cris/kernel/setup.c | 2 +- arch/frv/kernel/setup.c | 2 +- arch/h8300/kernel/setup.c | 2 +- arch/ia64/kernel/acpi.c | 2 +- arch/ia64/kernel/iosapic.c | 4 ++-- arch/ia64/kernel/irq.c | 2 +- arch/ia64/kernel/mca.c | 6 +++--- arch/ia64/kernel/perfmon.c | 4 ++-- arch/ia64/kernel/salinfo.c | 6 +++--- arch/ia64/kernel/setup.c | 4 ++-- arch/ia64/sn/kernel/setup.c | 2 +- arch/ia64/sn/kernel/sn2/sn2_smp.c | 6 +++--- arch/ia64/sn/kernel/sn2/sn_hwperf.c | 2 +- arch/m32r/kernel/setup.c | 2 +- arch/m68knommu/kernel/setup.c | 2 +- arch/mips/kernel/irq-gic.c | 2 +- arch/mips/kernel/proc.c | 2 +- arch/mips/kernel/smp-cmp.c | 2 +- arch/mips/kernel/smtc.c | 6 +++--- arch/mips/sibyte/bcm1480/irq.c | 2 +- arch/mips/sibyte/bcm1480/smp.c | 2 +- arch/mips/sibyte/sb1250/smp.c | 2 +- arch/mn10300/kernel/irq.c | 4 ++-- arch/mn10300/kernel/setup.c | 2 +- arch/parisc/kernel/irq.c | 4 ++-- arch/parisc/kernel/processor.c | 4 ++-- arch/powerpc/include/asm/cputhreads.h | 2 +- arch/powerpc/kernel/irq.c | 2 +- arch/powerpc/kernel/machine_kexec_64.c | 2 +- arch/powerpc/kernel/process.c | 2 +- arch/powerpc/kernel/setup-common.c | 10 +++++----- arch/powerpc/mm/numa.c | 4 ++-- arch/powerpc/platforms/powermac/setup.c | 2 +- arch/powerpc/platforms/powermac/smp.c | 4 ++-- arch/powerpc/platforms/pseries/hotplug-cpu.c | 2 +- arch/powerpc/platforms/pseries/rtasd.c | 2 +- arch/powerpc/platforms/pseries/xics.c | 2 +- arch/powerpc/xmon/xmon.c | 4 ++-- arch/s390/kernel/smp.c | 10 +++++----- arch/sh/kernel/setup.c | 2 +- arch/sparc/kernel/smp.c | 11 +++++------ arch/sparc/kernel/sun4d_smp.c | 9 ++++----- arch/sparc/kernel/sun4m_smp.c | 8 +++----- arch/sparc/mm/srmmu.c | 2 +- arch/sparc64/kernel/ds.c | 2 +- arch/sparc64/kernel/irq.c | 4 ++-- arch/sparc64/mm/init.c | 2 +- arch/um/kernel/um_arch.c | 2 +- arch/x86/kernel/apic.c | 2 +- arch/x86/kernel/irq_32.c | 2 +- arch/x86/mach-voyager/voyager_smp.c | 2 +- arch/x86/mm/numa_64.c | 4 ++-- arch/x86/mm/srat_64.c | 2 +- drivers/infiniband/hw/ehca/ehca_irq.c | 2 +- kernel/kexec.c | 2 +- kernel/smp.c | 2 +- net/core/neighbour.c | 4 ++-- net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c | 4 ++-- net/ipv4/route.c | 4 ++-- net/netfilter/nf_conntrack_standalone.c | 4 ++-- security/selinux/selinuxfs.c | 2 +- 64 files changed, 108 insertions(+), 111 deletions(-)
arch/alpha/kernel/irq.c +2 -1
@@ -50,8 +50,9 @@ int irq_select_affinity(unsigned int irqif (!irq_desc[irq].chip->set_affinity || irq_user_affinity[irq])return 1 ; +/* FIXME: This has an out-by-one error: inc then test! */ while (!cpu_possible (cpu) || !cpu_isset (cpu, irq_default_affinity)) - cpu = (cpu < (NR_CPUS -1 ) ? cpu +1 :0 ); + cpu = (cpu < (nr_cpu_ids-1 ) ? cpu +1 :0 ); last_cpu = cpu; irq_desc[irq].affinity =cpumask_of_cpu (cpu);
arch/alpha/kernel/smp.c +4 -4
@@ -497,7 +497,7 @@ smp_cpus_done(unsigned int max_cpus)int cpu;unsigned long bogosum =0 ; -for (cpu =0 ; cpu <NR_CPUS ; cpu++) +for (cpu =0 ; cpu < nr_cpu_ids; cpu++)if (cpu_online (cpu)) bogosum += cpu_data[cpu].loops_per_jiffy;
@@ -698,7 +698,7 @@ flush_tlb_mm(struct mm_struct *mm)flush_tlb_current (mm);if (atomic_read (&mm->mm_users) <=1 ) {int cpu, this_cpu =smp_processor_id (); -for (cpu =0 ; cpu <NR_CPUS ; cpu++) { +for (cpu =0 ; cpu < nr_cpu_ids; cpu++) {if (!cpu_online (cpu) || cpu == this_cpu)continue ;if (mm->context[cpu])
@@ -747,7 +747,7 @@ flush_tlb_page(struct vm_area_struct *vmflush_tlb_current_page (mm, vma, addr);if (atomic_read (&mm->mm_users) <=1 ) {int cpu, this_cpu =smp_processor_id (); -for (cpu =0 ; cpu <NR_CPUS ; cpu++) { +for (cpu =0 ; cpu < nr_cpu_ids; cpu++) {if (!cpu_online (cpu) || cpu == this_cpu)continue ;if (mm->context[cpu])
@@ -803,7 +803,7 @@ flush_icache_user_range(struct vm_area_s__load_new_mm_context (mm);if (atomic_read (&mm->mm_users) <=1 ) {int cpu, this_cpu =smp_processor_id (); -for (cpu =0 ; cpu <NR_CPUS ; cpu++) { +for (cpu =0 ; cpu < nr_cpu_ids; cpu++) {if (!cpu_online (cpu) || cpu == this_cpu)continue ;if (mm->context[cpu])
arch/arm/kernel/irq.c +1 -1
@@ -193,7 +193,7 @@ void migrate_irqs(void)if (desc->cpu == cpu) {unsigned int newcpu =any_online_cpu (desc->affinity); -if (newcpu ==NR_CPUS ) { +if (newcpu >= nr_cpu_ids) {if (printk_ratelimit ())printk (KERN_INFO "IRQ%u no longer affine to CPU%u\n" , i, cpu);
arch/cris/kernel/setup.c +1 -1
@@ -166,7 +166,7 @@ void __init setup_arch(char **cmdline_p)static void *c_start (struct seq_file *m,loff_t *pos) { -return *pos <NR_CPUS ? (void *)(int )(*pos +1 ):NULL ; +return *pos < nr_cpu_ids ? (void *)(int )(*pos +1 ) :NULL ; }static void *c_next (struct seq_file *m,void *v,loff_t *pos)
arch/frv/kernel/setup.c +1 -1
@@ -1100,7 +1100,7 @@ static int show_cpuinfo(struct seq_filestatic void *c_start (struct seq_file *m,loff_t *pos) { -return *pos <NR_CPUS ? (void *)0x12345678 :NULL ; +return *pos < nr_cpu_ids ? (void *)0x12345678 :NULL ; }static void *c_next (struct seq_file *m,void *v,loff_t *pos)
arch/h8300/kernel/setup.c +1 -1
@@ -224,7 +224,7 @@ static int show_cpuinfo(struct seq_filestatic void *c_start (struct seq_file *m,loff_t *pos) { -return *pos <NR_CPUS ? ((void *)0x12345678 ) :NULL ; +return *pos < nr_cpu_ids ? ((void *)0x12345678 ) :NULL ; }static void *c_next (struct seq_file *m,void *v,loff_t *pos)
arch/ia64/kernel/acpi.c +1 -1
@@ -885,7 +885,7 @@ int acpi_map_lsapic(acpi_handle handle,cpus_complement (tmp_map, cpu_present_map); cpu =first_cpu (tmp_map); -if (cpu >=NR_CPUS ) +if (cpu >= nr_cpu_ids)return -EINVAL ;acpi_map_cpu2node (handle, cpu, physid);
arch/ia64/kernel/iosapic.c +2 -2
@@ -720,7 +720,7 @@ get_target_cpu (unsigned int gsi, int irfor (numa_cpu =first_cpu (cpu_mask) ; i < cpu_index ; i++) numa_cpu =next_cpu (numa_cpu, cpu_mask); -if (numa_cpu !=NR_CPUS ) +if (numa_cpu < nr_cpus_ids)return cpu_physical_id (numa_cpu); } skip_numa_setup:
@@ -731,7 +731,7 @@ skip_numa_setup:* case of NUMA.) */ do { -if (++cpu >=NR_CPUS ) +if (++cpu >= nr_cpu_ids) cpu =0 ; }while (!cpu_online (cpu) || !cpu_isset (cpu, domain));
arch/ia64/kernel/irq.c +1 -1
@@ -153,7 +153,7 @@ static void migrate_irqs(void)continue ;cpus_and (mask, irq_desc[irq].affinity, cpu_online_map); -if (any_online_cpu (mask) ==NR_CPUS ) { +if (any_online_cpu (mask) >= nr_cpu_ids) {/* * Save it for phase 2 processing */
arch/ia64/kernel/mca.c +3 -3
@@ -1456,9 +1456,9 @@ ia64_mca_cmc_int_caller(int cmc_irq, voiia64_mca_cmc_int_handler (cmc_irq, arg); -for (++cpuid ; cpuid <NR_CPUS && !cpu_online (cpuid) ; cpuid++); + cpuid =next_cpu (cpuid+1 , cpu_online_map); -if (cpuid <NR_CPUS ) { +if (cpuid < nr_cpu_ids) {platform_send_ipi (cpuid,IA64_CMCP_VECTOR ,IA64_IPI_DM_INT ,0 ); }else {/* If no log record, switch out of polling mode */
@@ -1525,7 +1525,7 @@ ia64_mca_cpe_int_caller(int cpe_irq, voiia64_mca_cpe_int_handler (cpe_irq, arg); -for (++cpuid ; cpuid <NR_CPUS && !cpu_online (cpuid) ; cpuid++); + cpuid =next_cpu (cpuid+1 , cpu_online_map);if (cpuid <NR_CPUS ) {platform_send_ipi (cpuid,IA64_CPEP_VECTOR ,IA64_IPI_DM_INT ,0 );
arch/ia64/kernel/perfmon.c +2 -2
@@ -5598,7 +5598,7 @@ pfm_interrupt_handler(int irq, void *arg* /proc/perfmon interface, for debug only */ -#define PFM_PROC_SHOW_HEADER ((void *)NR_CPUS+1) +#define PFM_PROC_SHOW_HEADER ((void *)nr_cpu_ids+1)static void *pfm_proc_start (struct seq_file *m,loff_t *pos)
@@ -5607,7 +5607,7 @@ pfm_proc_start(struct seq_file *m, loff_return PFM_PROC_SHOW_HEADER ; } -while (*pos <=NR_CPUS ) { +while (*pos <= nr_cpu_ids) {if (cpu_online (*pos -1 )) {return (void *)*pos; }
arch/ia64/kernel/salinfo.c +3 -3
@@ -317,7 +317,7 @@ retry: } n = data->cpu_check; -for (i =0 ; i <NR_CPUS ; i++) { +for (i =0 ; i < nr_cpu_ids; i++) {if (cpu_isset (n, data->cpu_event)) {if (!cpu_online (n)) {cpu_clear (n, data->cpu_event);
@@ -326,7 +326,7 @@ retry: cpu = n;break ; } -if (++n ==NR_CPUS ) +if (++n == nr_cpu_ids) n =0 ; }
@@ -337,7 +337,7 @@ retry:/* for next read, start checking at next CPU */ data->cpu_check = cpu; -if (++data->cpu_check ==NR_CPUS ) +if (++data->cpu_check == nr_cpu_ids) data->cpu_check =0 ;snprintf (cmd,sizeof (cmd),"read %d\n" , cpu);
arch/ia64/kernel/setup.c +2 -2
@@ -719,10 +719,10 @@ static void * c_start (struct seq_file *m, loff_t *pos) { #ifdef CONFIG_SMP - while (*pos < NR_CPUS && !cpu_isset(*pos, cpu_online_map)) + while (*pos < nr_cpu_ids && !cpu_online(*pos)) ++*pos;#endif -return *pos <NR_CPUS ?cpu_data (*pos) :NULL ; +return *pos < nr_cpu_ids ?cpu_data (*pos) :NULL ; } static void *
arch/ia64/sn/kernel/setup.c +1 -1
@@ -753,7 +753,7 @@ nasid_slice_to_cpuid(int nasid, int slic {long cpu; -for (cpu =0 ; cpu <NR_CPUS ; cpu++) +for (cpu =0 ; cpu < nr_cpu_ids; cpu++)if (cpuid_to_nasid (cpu) == nasid &&cpuid_to_slice (cpu) == slice)return cpu;
arch/ia64/sn/kernel/sn2/sn2_smp.c +3 -3
@@ -461,7 +461,7 @@ bool sn_cpu_disable_allowed(int cpu)static void *sn2_ptc_seq_start (struct seq_file *file,loff_t * offset) { -if (*offset <NR_CPUS ) +if (*offset < nr_cpu_ids)return offset;return NULL ; }
@@ -469,7 +469,7 @@ static void *sn2_ptc_seq_start(struct sestatic void *sn2_ptc_seq_next (struct seq_file *file,void *data,loff_t * offset) { (*offset)++; -if (*offset <NR_CPUS ) +if (*offset < nr_cpu_ids)return offset;return NULL ; }
@@ -491,7 +491,7 @@ static int sn2_ptc_seq_show(struct seq_fseq_printf (file,"# ptctest %d, flushopt %d\n" , sn2_ptctest, sn2_flush_opt); } -if (cpu <NR_CPUS &&cpu_online (cpu)) { +if (cpu < nr_cpu_ids &&cpu_online (cpu)) { stat = &per_cpu (ptcstats, cpu); seq_printf(file, "cpu %d %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\n", cpu, stat->ptc_l, stat->change_rid, stat->shub_ptc_flushes, stat->nodes_flushed,
arch/ia64/sn/kernel/sn2/sn_hwperf.c +1 -1
@@ -615,7 +615,7 @@ static int sn_hwperf_op_cpu(struct sn_hw op_info->a->arg &=SN_HWPERF_ARG_OBJID_MASK ;if (cpu !=SN_HWPERF_ARG_ANY_CPU ) { -if (cpu >=NR_CPUS || !cpu_online (cpu)) { +if (cpu >= nr_cpu_ids || !cpu_online (cpu)) { r = -EINVAL ; goto out; }
arch/m32r/kernel/setup.c +1 -1
@@ -356,7 +356,7 @@ static int show_cpuinfo(struct seq_filestatic void *c_start (struct seq_file *m,loff_t *pos) { -return *pos <NR_CPUS ? cpu_data + *pos :NULL ; +return *pos < nr_cpu_ids ? cpu_data + *pos :NULL ; }static void *c_next (struct seq_file *m,void *v,loff_t *pos)
arch/m68knommu/kernel/setup.c +1 -1
@@ -248,7 +248,7 @@ static int show_cpuinfo(struct seq_filestatic void *c_start (struct seq_file *m,loff_t *pos) { -return *pos <NR_CPUS ? ((void *)0x12345678 ) :NULL ; +return *pos < nr_cpu_ids ? ((void *)0x12345678 ) :NULL ; }static void *c_next (struct seq_file *m,void *v,loff_t *pos)
arch/mips/kernel/irq-gic.c +1 -1
@@ -182,7 +182,7 @@ static void gic_set_affinity(unsigned in _intrmap[irq].cpunum =first_cpu (tmp);/* Update the pcpu_masks */ -for (i =0 ; i <NR_CPUS ; i++) +for (i =0 ; i < nr_cpu_ids; i++)clear_bit (irq, pcpu_masks[i].pcpu_mask);set_bit (irq, pcpu_masks[first_cpu (tmp)].pcpu_mask);
arch/mips/kernel/proc.c +1 -1
@@ -86,7 +86,7 @@ static void *c_start(struct seq_file *m, {unsigned long i = *pos; -return i <NR_CPUS ? (void *) (i +1 ) :NULL ; +return i < nr_cpu_ids ? (void *) (i +1 ) :NULL ; }static void *c_next (struct seq_file *m,void *v,loff_t *pos)
arch/mips/kernel/smp-cmp.c +1 -1
@@ -224,7 +224,7 @@ void __init cmp_smp_setup(void)cpu_set (0 , mt_fpu_cpumask);#endif /* CONFIG_MIPS_MT_FPAFF */ -for (i =1 ; i <NR_CPUS ; i++) { +for (i =1 ; i < nr_cpu_ids; i++) {if (amon_cpu_avail (i)) {cpu_set (i, cpu_possible_map); __cpu_number_map[i] = ++ncpu;
arch/mips/kernel/smtc.c +3 -3
@@ -303,7 +303,7 @@ int __init smtc_build_cpu_map(int start_* everything up so that "logical" = "physical". */ ntcs = ((read_c0_mvpconf0 () &MVPCONF0_PTC ) >>MVPCONF0_PTC_SHIFT ) +1 ; -for (i=start_cpu_slot; i<NR_CPUS && i<ntcs; i++) { +for (i = start_cpu_slot; i < nr_cpu_ids && i < ntcs; i++) {cpu_set (i, cpu_possible_map); __cpu_number_map[i] = i; __cpu_logical_map[i] = i;
@@ -422,8 +422,8 @@ void smtc_prepare_cpus(int cpus)if (vpelimit >0 && nvpe > vpelimit) nvpe = vpelimit; ntc = ((val &MVPCONF0_PTC ) >>MVPCONF0_PTC_SHIFT ) +1 ; -if (ntc >NR_CPUS ) - ntc =NR_CPUS ; +if (ntc > nr_cpu_ids) + ntc = nr_cpu_ids;if (tclimit >0 && ntc > tclimit) ntc = tclimit; slop = ntc % nvpe;
arch/mips/sibyte/bcm1480/irq.c +1 -1
@@ -195,7 +195,7 @@ static void ack_bcm1480_irq(unsigned intif (pending) {#ifdef CONFIG_SMP int i; -for (i=0 ; i<NR_CPUS ; i++) { +for (i =0 ; i < nr_cpu_ids; i++) {/* * Clear for all CPUs so an affinity switch * doesn't find an old status
arch/mips/sibyte/bcm1480/smp.c +1 -1
@@ -150,7 +150,7 @@ static void __init bcm1480_smp_setup(voi __cpu_number_map[0 ] =0 ; __cpu_logical_map[0 ] =0 ; -for (i =1 , num =0 ; i <NR_CPUS ; i++) { +for (i =1 , num =0 ; i < nr_cpu_ids; i++) {if (cfe_cpu_stop (i) ==0 ) {cpu_set (i, cpu_possible_map); __cpu_number_map[i] = ++num;
arch/mips/sibyte/sb1250/smp.c +1 -1
@@ -138,7 +138,7 @@ static void __init sb1250_smp_setup(void __cpu_number_map[0 ] =0 ; __cpu_logical_map[0 ] =0 ; -for (i =1 , num =0 ; i <NR_CPUS ; i++) { +for (i =1 , num =0 ; i < nr_cpu_ids; i++) {if (cfe_cpu_stop (i) ==0 ) {cpu_set (i, cpu_possible_map); __cpu_number_map[i] = ++num;
arch/mn10300/kernel/irq.c +2 -2
@@ -207,7 +207,7 @@ int show_interrupts(struct seq_file *p,/* display column title bar naming CPUs */ case 0 :seq_printf (p," " ); -for (j =0 ; j <NR_CPUS ; j++) +for (j =0 ; j < nr_cpu_ids; j++)if (cpu_online (j))seq_printf (p,"CPU%d " , j);seq_putc (p,'\n' );
@@ -241,7 +241,7 @@ int show_interrupts(struct seq_file *p,/* polish off with NMI and error counters */ case NR_IRQS :seq_printf (p,"NMI: " ); -for (j =0 ; j <NR_CPUS ; j++) +for (j =0 ; j < nr_cpu_ids; j++)if (cpu_online (j))seq_printf (p,"%10u " ,nmi_count (j));seq_putc (p,'\n' );
arch/mn10300/kernel/setup.c +1 -1
@@ -276,7 +276,7 @@ static int show_cpuinfo(struct seq_filestatic void *c_start (struct seq_file *m,loff_t *pos) { -return *pos <NR_CPUS ? cpu_data + *pos :NULL ; +return *pos < nr_cpu_ids ? cpu_data + *pos :NULL ; }static void *c_next (struct seq_file *m,void *v,loff_t *pos)
arch/parisc/kernel/irq.c +2 -2
@@ -309,11 +309,11 @@ unsigned long txn_alloc_addr(unsigned in next_cpu++;/* assign to "next" CPU we want this bugger on */ /* validate entry */ -while ((next_cpu <NR_CPUS ) && (!cpu_data[next_cpu].txn_addr || +while ((next_cpu < nr_cpu_ids) && (!cpu_data[next_cpu].txn_addr || !cpu_online (next_cpu))) next_cpu++; -if (next_cpu >=NR_CPUS ) +if (next_cpu >= nr_cpu_ids) next_cpu =0 ;/* nothing else, assign monarch */ return txn_affinity_addr (virt_irq, next_cpu);
arch/parisc/kernel/processor.c +2 -2
@@ -83,8 +83,8 @@ static int __cpuinit processor_probe(strstruct cpuinfo_parisc *p;#ifdef CONFIG_SMP -if (num_online_cpus () >=NR_CPUS ) { -printk (KERN_INFO "num_online_cpus() >= NR_CPUS\n" ); +if (num_online_cpus () >= nr_cpu_ids) { +printk (KERN_INFO "num_online_cpus() >= nr_cpu_ids\n" );return 1 ; }#else
arch/powerpc/include/asm/cputhreads.h +1 -1
@@ -34,7 +34,7 @@ static inline cpumask_t cpu_thread_mask_int i; res =CPU_MASK_NONE ; -for (i =0 ; i <NR_CPUS ; i += threads_per_core) { +for (i =0 ; i < nr_cpu_ids; i += threads_per_core) {cpus_shift_left (tmp, threads_core_mask, i);if (cpus_intersects (threads, tmp))cpu_set (i, res);
arch/powerpc/kernel/irq.c +1 -1
@@ -232,7 +232,7 @@ void fixup_irqs(cpumask_t map)continue ;cpus_and (mask, irq_desc[irq].affinity, map); -if (any_online_cpu (mask) ==NR_CPUS ) { +if (any_online_cpu (mask) >= nr_cpu_ids) {printk ("Breaking affinity for irq %i\n" , irq); mask = map; }
arch/powerpc/kernel/machine_kexec_64.c +1 -1
@@ -176,7 +176,7 @@ static void kexec_prepare_cpus(void) my_cpu =get_cpu ();/* check the others cpus are now down (via paca hw cpu id == -1) */ -for (i=0 ; i <NR_CPUS ; i++) { +for (i =0 ; i < nr_cpu_ids; i++) {if (i == my_cpu)continue ;
arch/powerpc/kernel/process.c +1 -1
@@ -941,7 +941,7 @@ static inline int valid_irq_stack(unsign* Avoid crashing if the stack has overflowed and corrupted * task_cpu(p), which is in the thread_info struct. */ -if (cpu <NR_CPUS &&cpu_possible (cpu)) { +if (cpu < nr_cpu_ids &&cpu_possible (cpu)) { stack_page = (unsigned long ) hardirq_ctx[cpu];if (sp >= stack_page +sizeof (struct thread_struct ) && sp <= stack_page +THREAD_SIZE - nbytes)
arch/powerpc/kernel/setup-common.c +5 -5
@@ -166,7 +166,7 @@ static int show_cpuinfo(struct seq_fileunsigned short maj;unsigned short min; -if (cpu_id ==NR_CPUS ) { +if (cpu_id == nr_cpu_ids) {struct device_node *root;const char *model =NULL ;#if defined(CONFIG_SMP ) && defined(CONFIG_PPC32 )
@@ -196,7 +196,7 @@ static int show_cpuinfo(struct seq_file/* We only show online cpus: disable preempt (overzealous, I * knew) to prevent cpu going down. */ preempt_disable (); -if (!cpu_online (cpu_id)) { +if (cpu_id >= nr_cpu_ids || !cpu_online (cpu_id)) {preempt_enable ();return 0 ; }
@@ -307,7 +307,7 @@ static void *c_start(struct seq_file *m, {unsigned long i = *pos; -return i <=NR_CPUS ? (void *)(i +1 ) :NULL ; +return i <= nr_cpu_ids ? (void *)(i +1 ) :NULL ; }static void *c_next (struct seq_file *m,void *v,loff_t *pos)
@@ -402,7 +402,7 @@ void __init smp_setup_cpu_maps(void)DBG ("smp_setup_cpu_maps()\n" ); -while ((dn =of_find_node_by_type (dn,"cpu" )) && cpu <NR_CPUS ) { +while ((dn =of_find_node_by_type (dn,"cpu" )) && cpu < nr_cpu_ids) {const int *intserv;int j, len;
@@ -421,7 +421,7 @@ void __init smp_setup_cpu_maps(void) intserv = &cpu;/* assume logical == phys */ } -for (j =0 ; j < nthreads && cpu <NR_CPUS ; j++) { +for (j =0 ; j < nthreads && cpu < nr_cpu_ids; j++) {DBG (" thread %d -> cpu %d (hard id %d)\n" , j, cpu, intserv[j]);cpu_set (cpu, cpu_present_map);
arch/powerpc/mm/numa.c +2 -2
@@ -765,7 +765,7 @@ void __init dump_numa_cpu_topology(void)* If we used a CPU iterator here we would miss printing * the holes in the cpumap. */ -for (cpu =0 ; cpu <NR_CPUS ; cpu++) { +for (cpu =0 ; cpu < nr_cpu_ids; cpu++) {if (cpu_isset (cpu, numa_cpumask_lookup_table[node])) {if (count ==0 )printk (" %u" , cpu);
@@ -778,7 +778,7 @@ void __init dump_numa_cpu_topology(void) }if (count >1 ) -printk ("-%u" ,NR_CPUS -1 ); +printk ("-%u" , nr_cpu_ids -1 );printk ("\n" ); } }
arch/powerpc/platforms/powermac/setup.c +1 -1
@@ -365,7 +365,7 @@ static void __init pmac_setup_arch(void)*/ int cpu; -for (cpu =1 ; cpu <4 && cpu <NR_CPUS ; ++cpu) +for (cpu =1 ; cpu <4 && cpu < nr_cpu_ids; ++cpu)cpu_set (cpu, cpu_possible_map); smp_ops = &psurge_smp_ops; }
arch/powerpc/platforms/powermac/smp.c +2 -2
@@ -314,8 +314,8 @@ static int __init smp_psurge_probe(void)* device tree for them, and smp_setup_cpu_maps hasn't * set their bits in cpu_possible_map and cpu_present_map. */ -if (ncpus >NR_CPUS ) - ncpus =NR_CPUS ; +if (ncpus > nr_cpu_ids) + ncpus = nr_cpu_ids;for (i =1 ; i < ncpus ; ++i) {cpu_set (i, cpu_present_map);set_hard_smp_processor_id (i, i);
arch/powerpc/platforms/pseries/hotplug-cpu.c +1 -1
@@ -221,7 +221,7 @@ static void pseries_remove_processor(strset_hard_smp_processor_id (cpu,-1 );break ; } -if (cpu ==NR_CPUS ) +if (cpu >= nr_cpu_ids)printk (KERN_WARNING "Could not find cpu to remove " "with physical id 0x%x\n" , intserv[i]); }
arch/powerpc/platforms/pseries/rtasd.c +1 -1
@@ -400,7 +400,7 @@ static void do_event_scan_all_cpus(longget_online_cpus (); cpu =next_cpu (cpu, cpu_online_map); -if (cpu ==NR_CPUS ) +if (cpu >= nr_cpu_ids)break ; }put_online_cpus ();
arch/powerpc/platforms/pseries/xics.c +1 -1
@@ -164,7 +164,7 @@ static int get_irq_server(unsigned int v server =first_cpu (tmp); -if (server <NR_CPUS ) +if (server < nr_cpu_ids)return get_hard_smp_processor_id (server);if (strict_check)
arch/powerpc/xmon/xmon.c +2 -2
@@ -938,7 +938,7 @@ static int cpu_cmd(void)/* print cpus waiting or in xmon */ printf ("cpus stopped:" ); count =0 ; -for (cpu =0 ; cpu <NR_CPUS ; ++cpu) { +for (cpu =0 ; cpu < nr_cpu_ids; ++cpu) {if (cpu_isset (cpu, cpus_in_xmon)) {if (count ==0 )printf (" %x" , cpu);
@@ -950,7 +950,7 @@ static int cpu_cmd(void) } }if (count >1 ) -printf ("-%x" ,NR_CPUS -1 ); +printf ("-%x" , nr_cpu_ids -1 );printf ("\n" );return 0 ; }
arch/s390/kernel/smp.c +5 -5
@@ -438,7 +438,7 @@ static int smp_rescan_cpus_sigp(cpumask_int cpu_id, logical_cpu; logical_cpu =first_cpu (avail); -if (logical_cpu ==NR_CPUS ) +if (logical_cpu >= nr_cpu_ids)return 0 ;for (cpu_id =0 ; cpu_id <=65535 ; cpu_id++) {if (cpu_known (cpu_id))
@@ -450,7 +450,7 @@ static int smp_rescan_cpus_sigp(cpumask_cpu_set (logical_cpu, cpu_present_map); smp_cpu_state[logical_cpu] =CPU_STATE_CONFIGURED ; logical_cpu =next_cpu (logical_cpu, avail); -if (logical_cpu ==NR_CPUS ) +if (logical_cpu >= nr_cpu_ids)break ; }return 0 ;
@@ -463,7 +463,7 @@ static int smp_rescan_cpus_sclp(cpumask_int rc; logical_cpu =first_cpu (avail); -if (logical_cpu ==NR_CPUS ) +if (logical_cpu >= nr_cpu_ids)return 0 ; info =kmalloc (sizeof (*info),GFP_KERNEL );if (!info)
@@ -485,7 +485,7 @@ static int smp_rescan_cpus_sclp(cpumask_else smp_cpu_state[logical_cpu] =CPU_STATE_CONFIGURED ; logical_cpu =next_cpu (logical_cpu, avail); -if (logical_cpu ==NR_CPUS ) +if (logical_cpu >= nr_cpu_ids)break ; } out:
@@ -727,7 +727,7 @@ static int __init setup_possible_cpus(ch pcpus =simple_strtoul (s,NULL ,0 ); cpu_possible_map =cpumask_of_cpu (0 ); -for (cpu =1 ; cpu < pcpus && cpu <NR_CPUS ; cpu++) +for (cpu =1 ; cpu < pcpus && cpu < nr_cpu_ids; cpu++)cpu_set (cpu, cpu_possible_map);return 0 ; }
arch/sh/kernel/setup.c +1 -1
@@ -534,7 +534,7 @@ static int show_cpuinfo(struct seq_filestatic void *c_start (struct seq_file *m,loff_t *pos) { -return *pos <NR_CPUS ? cpu_data + *pos :NULL ; +return *pos < nr_cpu_ids ? cpu_data + *pos :NULL ; }static void *c_next (struct seq_file *m,void *v,loff_t *pos) {
arch/sparc/kernel/smp.c +5 -6
@@ -70,13 +70,12 @@ void __init smp_cpus_done(unsigned int mextern void smp4m_smp_done (void );extern void smp4d_smp_done (void );unsigned long bogosum =0 ; -int cpu, num; +int cpu, num =0 ; -for (cpu =0 , num =0 ; cpu <NR_CPUS ; cpu++) -if (cpu_online (cpu)) { - num++; - bogosum +=cpu_data (cpu).udelay_val; - } +for_each_online_cpu (cpu) { + num++; + bogosum +=cpu_data (cpu).udelay_val; + } printk("Total of %d processors activated (%lu.%02lu BogoMIPS).\n", num, bogosum/(500000/HZ),
arch/sparc/kernel/sun4d_smp.c +4 -5
@@ -228,11 +228,10 @@ void __init smp4d_smp_done(void)/* setup cpu list for irq rotation */ first =0 ; prev = &first; -for (i =0 ; i <NR_CPUS ; i++) -if (cpu_online (i)) { - *prev = i; - prev = &cpu_data (i).next; - } +for_each_online_cpu (i) { + *prev = i; + prev = &cpu_data (i).next; + } *prev = first;local_flush_cache_all ();
arch/sparc/kernel/sun4m_smp.c +3 -5
@@ -185,11 +185,9 @@ void __init smp4m_smp_done(void)/* setup cpu list for irq rotation */ first =0 ; prev = &first; -for (i =0 ; i <NR_CPUS ; i++) { -if (cpu_online (i)) { - *prev = i; - prev = &cpu_data (i).next; - } +for_each_online_cpu (i) { + *prev = i; + prev = &cpu_data (i).next; } *prev = first;local_flush_cache_all ();
arch/sparc/mm/srmmu.c +1 -1
@@ -1427,7 +1427,7 @@ static void __init init_vac_layout(void) min_line_size = vac_line_size;//FIXME: cpus not contiguous!! cpu++; -if (cpu >=NR_CPUS || !cpu_online (cpu)) +if (cpu >= nr_cpu_ids || !cpu_online (cpu))break ;#else break ;
arch/sparc64/kernel/ds.c +1 -1
@@ -653,7 +653,7 @@ static void __cpuinit dr_cpu_data(structif (cpu_list[i] ==CPU_SENTINEL )continue ; -if (cpu_list[i] <NR_CPUS ) +if (cpu_list[i] < nr_cpu_ids)cpu_set (cpu_list[i], mask); }
arch/sparc64/kernel/irq.c +2 -2
@@ -260,12 +260,12 @@ static int irq_choose_cpu(unsigned int vspin_lock_irqsave (&irq_rover_lock, flags);while (!cpu_online (irq_rover)) { -if (++irq_rover >=NR_CPUS ) +if (++irq_rover >= nr_cpu_ids) irq_rover =0 ; } cpuid = irq_rover;do { -if (++irq_rover >=NR_CPUS ) +if (++irq_rover >= nr_cpu_ids) irq_rover =0 ; }while (!cpu_online (irq_rover));
arch/sparc64/mm/init.c +1 -1
@@ -1080,7 +1080,7 @@ static void __init numa_parse_mdesc_grouif (strcmp (name,"cpu" ))continue ; id =mdesc_get_property (md, target,"id" ,NULL ); -if (*id <NR_CPUS ) +if (*id < nr_cpu_ids)cpu_set (*id, *mask); } }
arch/um/kernel/um_arch.c +1 -1
@@ -80,7 +80,7 @@ static int show_cpuinfo(struct seq_filestatic void *c_start (struct seq_file *m,loff_t *pos) { -return *pos <NR_CPUS ? cpu_data + *pos :NULL ; +return *pos < nr_cpu_ids ? cpu_data + *pos :NULL ; }static void *c_next (struct seq_file *m,void *v,loff_t *pos)
arch/x86/kernel/apic.c +1 -1
@@ -2106,7 +2106,7 @@ __cpuinit int apic_is_clustered_box(void bios_cpu_apicid =early_per_cpu_ptr (x86_bios_cpu_apicid);bitmap_zero (clustermap,NUM_APIC_CLUSTERS ); -for (i =0 ; i <NR_CPUS ; i++) { +for (i =0 ; i < nr_cpu_ids; i++) {/* are we being called early in kernel startup? */ if (bios_cpu_apicid) { id = bios_cpu_apicid[i];
arch/x86/kernel/irq_32.c +1 -1
@@ -246,7 +246,7 @@ void fixup_irqs(cpumask_t map)continue ;cpus_and (mask, desc->affinity, map); -if (any_online_cpu (mask) ==NR_CPUS ) { +if (any_online_cpu (mask) >= nr_cpu_ids) {printk ("Breaking affinity for irq %i\n" , irq); mask = map; }
arch/x86/mach-voyager/voyager_smp.c +1 -1
@@ -661,7 +661,7 @@ void __init smp_boot_cpus(void)/* loop over all the extended VIC CPUs and boot them. The * Quad CPUs must be bootstrapped by their extended VIC cpu */ -for (i =0 ; i <NR_CPUS ; i++) { +for (i =0 ; i < nr_cpu_ids; i++) {if (i == boot_cpu_id || !cpu_isset (i, phys_cpu_present_map))continue ;do_boot_cpu (i);
arch/x86/mm/numa_64.c +2 -2
@@ -278,7 +278,7 @@ void __init numa_init_array(void)int rr, i; rr =first_node (node_online_map); -for (i =0 ; i <NR_CPUS ; i++) { +for (i =0 ; i < nr_cpu_ids; i++) {if (early_cpu_to_node (i) !=NUMA_NO_NODE )continue ;numa_set_node (i, rr);
@@ -549,7 +549,7 @@ void __init initmem_init(unsigned long s memnodemap[0 ] =0 ;node_set_online (0 );node_set (0 , node_possible_map); -for (i =0 ; i <NR_CPUS ; i++) +for (i =0 ; i < nr_cpu_ids; i++)numa_set_node (i,0 );e820_register_active_regions (0 , start_pfn, last_pfn);setup_node_bootmem (0 , start_pfn <<PAGE_SHIFT , last_pfn <<PAGE_SHIFT );
arch/x86/mm/srat_64.c +1 -1
@@ -382,7 +382,7 @@ int __init acpi_scan_nodes(unsigned longif (!node_online (i))setup_node_bootmem (i, nodes[i].start, nodes[i].end); -for (i =0 ; i <NR_CPUS ; i++) { +for (i =0 ; i < nr_cpu_ids; i++) {int node =early_cpu_to_node (i);if (node ==NUMA_NO_NODE )
drivers/infiniband/hw/ehca/ehca_irq.c +1 -1
@@ -922,7 +922,7 @@ void ehca_destroy_comp_pool(void)unregister_hotcpu_notifier (&comp_pool_callback_nb); -for (i =0 ; i <NR_CPUS ; i++) { +for (i =0 ; i < nr_cpu_ids; i++) {if (cpu_online (i))destroy_comp_task (pool, i); }
kernel/kexec.c +1 -1
@@ -1116,7 +1116,7 @@ void crash_save_cpu(struct pt_regs *regsstruct elf_prstatus prstatus;u32 *buf; -if ((cpu <0 ) || (cpu >=NR_CPUS )) +if ((cpu <0 ) || (cpu >= nr_cpu_ids))return ;/* Using ELF notes here is opportunistic.
kernel/smp.c +1 -1
@@ -222,7 +222,7 @@ int smp_call_function_single(int cpu, volocal_irq_save (flags);func (info);local_irq_restore (flags); - }else if ((unsigned )cpu <NR_CPUS &&cpu_online (cpu)) { + }else if ((unsigned )cpu < nr_cpu_ids &&cpu_online (cpu)) {struct call_single_data *data =NULL ;if (!wait) {
net/core/neighbour.c +2 -2
@@ -2423,7 +2423,7 @@ static void *neigh_stat_seq_start(structif (*pos ==0 )return SEQ_START_TOKEN ; -for (cpu = *pos-1 ; cpu <NR_CPUS ; ++cpu) { +for (cpu = *pos-1 ; cpu < nr_cpu_ids; ++cpu) {if (!cpu_possible (cpu))continue ; *pos = cpu+1 ;
@@ -2438,7 +2438,7 @@ static void *neigh_stat_seq_next(structstruct neigh_table *tbl = pde->data;int cpu; -for (cpu = *pos; cpu <NR_CPUS ; ++cpu) { +for (cpu = *pos; cpu < nr_cpu_ids; ++cpu) {if (!cpu_possible (cpu))continue ; *pos = cpu+1 ;
net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c +2 -2
@@ -291,7 +291,7 @@ static void *ct_cpu_seq_start(struct seqif (*pos ==0 )return SEQ_START_TOKEN ; -for (cpu = *pos-1 ; cpu <NR_CPUS ; ++cpu) { +for (cpu = *pos-1 ; cpu < nr_cpu_ids; ++cpu) {if (!cpu_possible (cpu))continue ; *pos = cpu+1 ;
@@ -306,7 +306,7 @@ static void *ct_cpu_seq_next(struct seq_struct net *net =seq_file_net (seq);int cpu; -for (cpu = *pos; cpu <NR_CPUS ; ++cpu) { +for (cpu = *pos; cpu < nr_cpu_ids; ++cpu) {if (!cpu_possible (cpu))continue ; *pos = cpu+1 ;
net/ipv4/route.c +2 -2
@@ -427,7 +427,7 @@ static void *rt_cpu_seq_start(struct seqif (*pos ==0 )return SEQ_START_TOKEN ; -for (cpu = *pos-1 ; cpu <NR_CPUS ; ++cpu) { +for (cpu = *pos-1 ; cpu < nr_cpu_ids; ++cpu) {if (!cpu_possible (cpu))continue ; *pos = cpu+1 ;
@@ -440,7 +440,7 @@ static void *rt_cpu_seq_next(struct seq_ {int cpu; -for (cpu = *pos; cpu <NR_CPUS ; ++cpu) { +for (cpu = *pos; cpu < nr_cpu_ids; ++cpu) {if (!cpu_possible (cpu))continue ; *pos = cpu+1 ;
net/netfilter/nf_conntrack_standalone.c +2 -2
@@ -200,7 +200,7 @@ static void *ct_cpu_seq_start(struct seqif (*pos ==0 )return SEQ_START_TOKEN ; -for (cpu = *pos-1 ; cpu <NR_CPUS ; ++cpu) { +for (cpu = *pos-1 ; cpu < nr_cpu_ids; ++cpu) {if (!cpu_possible (cpu))continue ; *pos = cpu +1 ;
@@ -215,7 +215,7 @@ static void *ct_cpu_seq_next(struct seq_struct net *net =seq_file_net (seq);int cpu; -for (cpu = *pos; cpu <NR_CPUS ; ++cpu) { +for (cpu = *pos; cpu < nr_cpu_ids; ++cpu) {if (!cpu_possible (cpu))continue ; *pos = cpu +1 ;
security/selinux/selinuxfs.c +1 -1
@@ -1206,7 +1206,7 @@ static struct avc_cache_stats *sel_avc_g {int cpu; -for (cpu = *idx; cpu <NR_CPUS ; ++cpu) { +for (cpu = *idx; cpu < nr_cpu_ids; ++cpu) {if (!cpu_possible (cpu))continue ; *idx = cpu +1 ;
PATCH 16/35 percpu: fix percpu accessors to potentially !cpu_possible() cpus From: Rusty Russell <[email protected]>
In reply to Mike TravisPercpu areas are only allocated for possible cpus. In general, you shouldn't access random cpu's percpu areas: you're corrupting memory.
--- arch/m32r/kernel/smpboot.c | 2 +- arch/x86/mach-voyager/voyager_smp.c | 2 +- drivers/pnp/pnpbios/bioscalls.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)
arch/m32r/kernel/smpboot.c +1 -1
@@ -592,7 +592,7 @@ int setup_profiling_timer(unsigned int m* accounting. At that time they also adjust their APIC timers * accordingly. */ -for (i =0 ; i <NR_CPUS ; ++i) +for_each_possible_cpu (i)per_cpu (prof_multiplier, i) = multiplier;return 0 ;
arch/x86/mach-voyager/voyager_smp.c +1 -1
@@ -1216,7 +1216,7 @@ int setup_profiling_timer(unsigned int m* new values until the next timer interrupt in which they do process * accounting. */ -for (i =0 ; i <NR_CPUS ; ++i) +for_each_possible_cpu (i)per_cpu (prof_multiplier, i) = multiplier;return 0 ;
drivers/pnp/pnpbios/bioscalls.c +1 -1
@@ -481,7 +481,7 @@ void pnpbios_calls_init(union pnp_bios_iset_base (bad_bios_desc,__va ((unsigned long )0x40 <<4 ));_set_limit ((char *)&bad_bios_desc,4095 - (0x40 <<4 )); -for (i =0 ; i <NR_CPUS ; i++) { +for_each_possible_cpu (i) {struct desc_struct *gdt =get_cpu_gdt_table (i);if (!gdt)continue ;
PATCH 17/35 cpumask: make nr_cpu_ids the actual limit on bitmap size
In reply to Mike Travisnr_cpu_ids is the (badly named) runtime limit on possible CPU numbers; ie. the variable version of NR_CPUS.
If we use this in *all* the cpu ops it simplifies the API, and will be possible to allocate cpumasks of the minimal length at runtime.
From: Rusty Russell <[email protected]>
--- include/linux/cpumask.h | 124 ++++++++++++++++++----------------------------- include/linux/seq_file.h | 2 lib/cpumask.c | 14 +---- 3 files changed, 54 insertions(+), 86 deletions(-)
include/linux/cpumask.h +50 -74
@@ -3,7 +3,8 @@/* * Cpumasks provide a bitmap suitable for representing the -* set of CPU's in a system, one bit position per CPU number. +* set of CPU's in a system, one bit position per CPU number up to +* nr_cpu_ids (<= NR_CPUS). * * Old-style uses "cpumask_t", but new ops are "struct cpumask *"; * don't put "struct cpumask"s on the stack.
@@ -20,20 +21,6 @@* For details of cpumask_onto(), see bitmap_onto in lib/bitmap.c. * For details of cpumask_fold(), see bitmap_fold in lib/bitmap.c. * -* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -* Note: The alternate operations with the suffix "_nr" are used -* to limit the range of the loop to nr_cpu_ids instead of -* NR_CPUS when NR_CPUS > 64 for performance reasons. -* If NR_CPUS is <= 64 then most assembler bitmask -* operators execute faster with a constant range, so -* the operator will continue to use NR_CPUS. -* -* Another consideration is that nr_cpu_ids is initialized -* to NR_CPUS and isn't lowered until the possible cpus are -* discovered (including any disabled cpus). So early uses -* will span the entire range of NR_CPUS. -* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -* * The available cpumask operations are: * * void cpumask_set_cpu(cpu, mask) turn on bit 'cpu' in mask
@@ -55,14 +42,12 @@* int cpumask_empty(mask) Is mask empty (no bits sets)? * int cpumask_full(mask) Is mask full (all bits sets)? * int cpumask_weight(mask) Hamming weigh - number of set bits -* int cpumask_weight_nr(mask) Same using nr_cpu_ids instead of NR_CPUS * * void cpumask_shift_right(dst, src, n) Shift right * void cpumask_shift_left(dst, src, n) Shift left * -* int first_cpu(mask) Number lowest set bit, or NR_CPUS -* int next_cpu(cpu, mask) Next cpu past 'cpu', or NR_CPUS -* int next_cpu_nr(cpu, mask) Next cpu past 'cpu', or nr_cpu_ids +* int first_cpu(mask) Number lowest set bit, or >= nr_cpu_ids +* int next_cpu(cpu, mask) Next cpu past 'cpu', or >= nr_cpu_ids * * void cpumask_copy(dmask, smask) dmask = smask *
@@ -113,8 +98,7 @@* void cpumask_onto(dst, orig, relmap) *dst = orig relative to relmap * void cpumask_fold(dst, orig, sz) dst bits = orig bits mod sz * -* for_each_cpu_mask(cpu, mask) for-loop cpu over mask using NR_CPUS -* for_each_cpu_mask_nr(cpu, mask) for-loop cpu over mask using nr_cpu_ids +* for_each_cpu_mask(cpu, mask) for-loop cpu over mask using nr_cpu_ids * for_each_cpu_mask_and(cpu, mask, and) for-loop cpu over (mask & and). * * int num_online_cpus() Number of online CPUs
@@ -150,7 +134,7 @@ struct cpumask { };#define cpumask_bits (maskp) ((maskp)->bits) -#define cpumask_size () (BITS_TO_LONGS(NR_CPUS) * sizeof(long)) +#define cpumask_size () (BITS_TO_LONGS(nr_cpumask_bits) * sizeof(long))/* Deprecated. */ typedef struct cpumask cpumask_t ;
@@ -188,6 +172,9 @@ extern cpumask_t _unused_cpumask_arg_;#define cpus_fold (dst, orig, sz) \ cpumask_fold(&(dst), &(orig), sz)#define cpus_addr (src) ((src).bits) +#define next_cpu_nr (n, src) next_cpu(n, src) +#define cpus_weight_nr (cpumask) cpus_weight(cpumask) +#define for_each_cpu_mask_nr (cpu, mask) for_each_cpu_mask(cpu, mask)/* End deprecated region. */ #if NR_CPUS >1
@@ -225,73 +212,73 @@ static inline int cpumask_test_and_set_cstatic inline void cpumask_setall (struct cpumask *dstp) { -bitmap_fill (dstp->bits,NR_CPUS ); +bitmap_fill (dstp->bits, nr_cpumask_bits); }static inline void cpumask_clear (struct cpumask *dstp) { -bitmap_zero (dstp->bits,NR_CPUS ); +bitmap_zero (dstp->bits, nr_cpumask_bits); }static inline void cpumask_and (struct cpumask *dstp,const struct cpumask *src1p,const struct cpumask *src2p) { -bitmap_and (dstp->bits, src1p->bits, src2p->bits,NR_CPUS ); +bitmap_and (dstp->bits, src1p->bits, src2p->bits, nr_cpumask_bits); }static inline void cpumask_or (struct cpumask *dstp,const struct cpumask *src1p,const struct cpumask *src2p) { -bitmap_or (dstp->bits, src1p->bits, src2p->bits,NR_CPUS ); +bitmap_or (dstp->bits, src1p->bits, src2p->bits, nr_cpumask_bits); }static inline void cpumask_xor (struct cpumask *dstp,const struct cpumask *src1p,const struct cpumask *src2p) { -bitmap_xor (dstp->bits, src1p->bits, src2p->bits,NR_CPUS ); +bitmap_xor (dstp->bits, src1p->bits, src2p->bits, nr_cpumask_bits); }static inline void cpumask_andnot (struct cpumask *dstp,const struct cpumask *src1p,const struct cpumask *src2p) { -bitmap_andnot (dstp->bits, src1p->bits, src2p->bits,NR_CPUS ); +bitmap_andnot (dstp->bits, src1p->bits, src2p->bits, nr_cpumask_bits); }static inline void cpumask_complement (struct cpumask *dstp,const struct cpumask *srcp) { -bitmap_complement (dstp->bits, srcp->bits,NR_CPUS ); +bitmap_complement (dstp->bits, srcp->bits, nr_cpumask_bits); }static inline int cpumask_equal (const struct cpumask *src1p,const struct cpumask *src2p) { -return bitmap_equal (src1p->bits, src2p->bits,NR_CPUS ); +return bitmap_equal (src1p->bits, src2p->bits, nr_cpumask_bits); }static inline int cpumask_intersects (const struct cpumask *src1p,const struct cpumask *src2p) { -return bitmap_intersects (src1p->bits, src2p->bits,NR_CPUS ); +return bitmap_intersects (src1p->bits, src2p->bits, nr_cpumask_bits); }static inline int cpumask_subset (const struct cpumask *src1p,const struct cpumask *src2p) { -return bitmap_subset (src1p->bits, src2p->bits,NR_CPUS ); +return bitmap_subset (src1p->bits, src2p->bits, nr_cpumask_bits); }static inline int cpumask_empty (const struct cpumask *srcp) { -return bitmap_empty (srcp->bits,NR_CPUS ); +return bitmap_empty (srcp->bits, nr_cpumask_bits); }static inline int cpumask_full (const struct cpumask *srcp) { -return bitmap_full (srcp->bits,NR_CPUS ); +return bitmap_full (srcp->bits, nr_cpumask_bits); }static inline int __cpus_weight (const cpumask_t *srcp,int nbits)
@@ -301,49 +288,49 @@ static inline int __cpus_weight(const cpstatic inline int cpumask_weight (const struct cpumask *srcp) { -return bitmap_weight (srcp->bits,NR_CPUS ); +return bitmap_weight (srcp->bits, nr_cpumask_bits); }static inline void cpumask_shift_right (struct cpumask *dstp,const struct cpumask *srcp,int n) { -bitmap_shift_right (dstp->bits, srcp->bits, n,NR_CPUS ); +bitmap_shift_right (dstp->bits, srcp->bits, n, nr_cpumask_bits); }static inline void cpumask_shift_left (struct cpumask *dstp,const struct cpumask *srcp,int n) { -bitmap_shift_left (dstp->bits, srcp->bits, n,NR_CPUS ); +bitmap_shift_left (dstp->bits, srcp->bits, n, nr_cpumask_bits); }static inline int cpumask_scnprintf (char *buf,int len,const struct cpumask *srcp) { -return bitmap_scnprintf (buf, len, srcp->bits,NR_CPUS ); +return bitmap_scnprintf (buf, len, srcp->bits, nr_cpumask_bits); }static inline int cpumask_parse_user (const char __user *buf,int len,struct cpumask *dstp) { -return bitmap_parse_user (buf, len, dstp->bits,NR_CPUS ); +return bitmap_parse_user (buf, len, dstp->bits, nr_cpumask_bits); }static inline int cpulist_scnprintf (char *buf,int len,const struct cpumask *srcp) { -return bitmap_scnlistprintf (buf, len, srcp->bits,NR_CPUS ); +return bitmap_scnlistprintf (buf, len, srcp->bits, nr_cpumask_bits); }static inline int cpulist_parse (const char *buf,struct cpumask *dstp) { -return bitmap_parselist (buf, dstp->bits,NR_CPUS ); +return bitmap_parselist (buf, dstp->bits, nr_cpumask_bits); }static inline int cpumask_cpuremap (int oldbit,const struct cpumask *oldp,const struct cpumask *newp) { -return bitmap_bitremap (oldbit, oldp->bits, newp->bits,NR_CPUS ); +return bitmap_bitremap (oldbit, oldp->bits, newp->bits, nr_cpumask_bits); } static inline void cpumask_remap(struct cpumask *dstp,
@@ -351,26 +338,27 @@ static inline void cpumask_remap(structconst struct cpumask *oldp, const struct cpumask *newp) { - bitmap_remap(dstp->bits, srcp->bits, oldp->bits, newp->bits, NR_CPUS); + bitmap_remap(dstp->bits, srcp->bits, oldp->bits, newp->bits, +nr_cpumask_bits ); }static inline void cpumask_onto (struct cpumask *dstp,const struct cpumask *origp,const struct cpumask *relmapp) { -bitmap_onto (dstp->bits, origp->bits, relmapp->bits,NR_CPUS ); +bitmap_onto (dstp->bits, origp->bits, relmapp->bits, nr_cpumask_bits); }static inline void cpumask_fold (struct cpumask *dstp,const struct cpumask *origp,int sz) { -bitmap_fold (dstp->bits, origp->bits, sz,NR_CPUS ); +bitmap_fold (dstp->bits, origp->bits, sz, nr_cpumask_bits); }static inline void cpumask_copy (struct cpumask *dstp,const struct cpumask *srcp) { -bitmap_copy (cpumask_bits (dstp),cpumask_bits (srcp),NR_CPUS ); +bitmap_copy (cpumask_bits (dstp),cpumask_bits (srcp), nr_cpumask_bits); }/*
@@ -468,34 +456,22 @@ int __any_online_cpu(const cpumask_t *ma#define for_each_cpu_mask (cpu, mask) \ for ((cpu) = -1; \ (cpu) = next_cpu((cpu), (mask)), \ - (cpu) < NR_CPUS;) + (cpu) < nr_cpu_ids;)#define for_each_cpu_mask_and (cpu, mask, and) \ for ((cpu) = -1; \ (cpu) = cpumask_next_and((cpu), &(mask), &(and)), \ (cpu) < nr_cpu_ids;) -#endif -#define cpumask_first_and (mask, and) cpumask_next_and(-1, (mask), (and)) - -#if NR_CPUS <=64 - -#define next_cpu_nr (n, src) next_cpu(n, src) -#define cpus_weight_nr (cpumask) cpus_weight(cpumask) -#define for_each_cpu_mask_nr (cpu, mask) for_each_cpu_mask(cpu, mask) - -#else /* NR_CPUS > 64 */ - -int __next_cpu_nr (int n,const cpumask_t *srcp); - -#define next_cpu_nr (n, src) __next_cpu_nr((n), &(src)) -#define cpus_weight_nr (cpumask) __cpus_weight(&(cpumask), nr_cpu_ids) - -#define for_each_cpu_mask_nr (cpu, mask) \ - for ((cpu) = -1; \ - (cpu) = next_cpu_nr((cpu), (mask)), \ - (cpu) < nr_cpu_ids;) +#define num_online_cpus () cpus_weight(cpu_online_map) +#define num_possible_cpus () cpus_weight(cpu_possible_map) +#define num_present_cpus () cpus_weight(cpu_present_map) +#define cpu_online (cpu) cpu_isset((cpu), cpu_online_map) +#define cpu_possible (cpu) cpu_isset((cpu), cpu_possible_map) +#define cpu_present (cpu) cpu_isset((cpu), cpu_present_map) +#define cpu_active (cpu) cpu_isset((cpu), cpu_active_map) +#endif /* NR_CPUS */ -#endif /* NR_CPUS > 64 */ +#define cpumask_first_and (mask, and) cpumask_next_and(-1, (mask), (and))/* * cpumask_var_t: struct cpumask for stack usage.
@@ -596,9 +572,9 @@ extern cpumask_t cpu_present_map;extern cpumask_t cpu_active_map;#if NR_CPUS >1 -#define num_online_cpus () cpus_weight_nr(cpu_online_map) -#define num_possible_cpus () cpus_weight_nr(cpu_possible_map) -#define num_present_cpus () cpus_weight_nr(cpu_present_map) +#define num_online_cpus () cpus_weight(cpu_online_map) +#define num_possible_cpus () cpus_weight(cpu_possible_map) +#define num_present_cpus () cpus_weight(cpu_present_map)#define cpu_online (cpu) cpu_isset((cpu), cpu_online_map)#define cpu_possible (cpu) cpu_isset((cpu), cpu_possible_map)#define cpu_present (cpu) cpu_isset((cpu), cpu_present_map)
@@ -615,8 +591,8 @@ extern cpumask_t cpu_active_map;#define cpu_is_offline (cpu) unlikely(!cpu_online(cpu)) -#define for_each_possible_cpu (cpu) for_each_cpu_mask_nr((cpu), cpu_possible_map) -#define for_each_online_cpu (cpu) for_each_cpu_mask_nr((cpu), cpu_online_map) -#define for_each_present_cpu (cpu) for_each_cpu_mask_nr((cpu), cpu_present_map) +#define for_each_possible_cpu (cpu) for_each_cpu_mask((cpu), cpu_possible_map) +#define for_each_online_cpu (cpu) for_each_cpu_mask((cpu), cpu_online_map) +#define for_each_present_cpu (cpu) for_each_cpu_mask((cpu), cpu_present_map)#endif /* __LINUX_CPUMASK_H */
include/linux/seq_file.h +1 -1
@@ -52,7 +52,7 @@ int seq_path_root(struct seq_file *m, stint seq_bitmap (struct seq_file *m,unsigned long *bits,unsigned int nr_bits);static inline int seq_cpumask (struct seq_file *m,cpumask_t *mask) { -return seq_bitmap (m, mask->bits,NR_CPUS ); +return seq_bitmap (m, mask->bits, nr_cpu_ids); }static inline int seq_nodemask (struct seq_file *m,nodemask_t *mask)
lib/cpumask.c +3 -11
@@ -5,33 +5,25 @@int __first_cpu (const cpumask_t *srcp) { -return find_first_bit (srcp->bits,NR_CPUS ); +return find_first_bit (srcp->bits, nr_cpumask_bits); }EXPORT_SYMBOL (__first_cpu);int __next_cpu (int n,const cpumask_t *srcp) { -return find_next_bit (srcp->bits,NR_CPUS , n+1 ); +return find_next_bit (srcp->bits, nr_cpumask_bits, n+1 ); }EXPORT_SYMBOL (__next_cpu);int cpumask_next_and (int n,const cpumask_t *srcp,const cpumask_t *andp) { -while ((n =next_cpu_nr (n, *srcp)) < nr_cpu_ids) +while ((n =next_cpu (n, *srcp)) < nr_cpu_ids)if (cpumask_test_cpu (n, andp))break ;return n; }EXPORT_SYMBOL (cpumask_next_and); -#if NR_CPUS >64 -int __next_cpu_nr (int n,const cpumask_t *srcp) -{ -return find_next_bit (srcp->bits, nr_cpu_ids, n+1 ); -} -EXPORT_SYMBOL (__next_cpu_nr); -#endif -int __any_online_cpu (const cpumask_t *mask) {int cpu;
PATCH 18/35 cpumask: use cpumask_bits() everywhere.
In reply to Mike TravisInstead of accessing ->bits, we use cpumask_bits(). This will be very useful when 'struct cpumask' has a hidden definition.
From: Rusty Russell <[email protected]>
--- include/linux/cpumask.h | 70 ++++++++++++++++++++++++++++------------------- include/linux/seq_file.h | 2 - kernel/time/timer_list.c | 4 +- lib/cpumask.c | 4 +- 4 files changed, 47 insertions(+), 33 deletions(-)
include/linux/cpumask.h +42 -28
@@ -194,12 +194,12 @@ extern int nr_cpu_ids;static inline void cpumask_set_cpu (int cpu,volatile struct cpumask *dstp) { -set_bit (cpu, dstp->bits); +set_bit (cpu,cpumask_bits (dstp)); }static inline void cpumask_clear_cpu (int cpu,volatile struct cpumask *dstp) { -clear_bit (cpu, dstp->bits); +clear_bit (cpu,cpumask_bits (dstp)); }/* No static inline type checking - see Subtlety (1) above. */
@@ -207,130 +207,142 @@ static inline void cpumask_clear_cpu(intstatic inline int cpumask_test_and_set_cpu (int cpu,struct cpumask *addr) { -return test_and_set_bit (cpu, addr->bits); +return test_and_set_bit (cpu,cpumask_bits (addr)); }static inline void cpumask_setall (struct cpumask *dstp) { -bitmap_fill (dstp->bits, nr_cpumask_bits); +bitmap_fill (cpumask_bits (dstp), nr_cpumask_bits); }static inline void cpumask_clear (struct cpumask *dstp) { -bitmap_zero (dstp->bits, nr_cpumask_bits); +bitmap_zero (cpumask_bits (dstp), nr_cpumask_bits); }static inline void cpumask_and (struct cpumask *dstp,const struct cpumask *src1p,const struct cpumask *src2p) { -bitmap_and (dstp->bits, src1p->bits, src2p->bits, nr_cpumask_bits); +bitmap_and (cpumask_bits (dstp),cpumask_bits (src1p), +cpumask_bits (src2p), nr_cpumask_bits); }static inline void cpumask_or (struct cpumask *dstp,const struct cpumask *src1p,const struct cpumask *src2p) { -bitmap_or (dstp->bits, src1p->bits, src2p->bits, nr_cpumask_bits); +bitmap_or (cpumask_bits (dstp),cpumask_bits (src1p), +cpumask_bits (src2p), nr_cpumask_bits); }static inline void cpumask_xor (struct cpumask *dstp,const struct cpumask *src1p,const struct cpumask *src2p) { -bitmap_xor (dstp->bits, src1p->bits, src2p->bits, nr_cpumask_bits); +bitmap_xor (cpumask_bits (dstp),cpumask_bits (src1p), +cpumask_bits (src2p), nr_cpumask_bits); }static inline void cpumask_andnot (struct cpumask *dstp,const struct cpumask *src1p,const struct cpumask *src2p) { -bitmap_andnot (dstp->bits, src1p->bits, src2p->bits, nr_cpumask_bits); +bitmap_andnot (cpumask_bits (dstp),cpumask_bits (src1p), +cpumask_bits (src2p), nr_cpumask_bits); }static inline void cpumask_complement (struct cpumask *dstp,const struct cpumask *srcp) { -bitmap_complement (dstp->bits, srcp->bits, nr_cpumask_bits); +bitmap_complement (cpumask_bits (dstp),cpumask_bits (srcp), + nr_cpumask_bits); }static inline int cpumask_equal (const struct cpumask *src1p,const struct cpumask *src2p) { -return bitmap_equal (src1p->bits, src2p->bits, nr_cpumask_bits); +return bitmap_equal (cpumask_bits (src1p),cpumask_bits (src2p), + nr_cpumask_bits); }static inline int cpumask_intersects (const struct cpumask *src1p,const struct cpumask *src2p) { -return bitmap_intersects (src1p->bits, src2p->bits, nr_cpumask_bits); +return bitmap_intersects (cpumask_bits (src1p),cpumask_bits (src2p), + nr_cpumask_bits); }static inline int cpumask_subset (const struct cpumask *src1p,const struct cpumask *src2p) { -return bitmap_subset (src1p->bits, src2p->bits, nr_cpumask_bits); +return bitmap_subset (cpumask_bits (src1p),cpumask_bits (src2p), + nr_cpumask_bits); }static inline int cpumask_empty (const struct cpumask *srcp) { -return bitmap_empty (srcp->bits, nr_cpumask_bits); +return bitmap_empty (cpumask_bits (srcp), nr_cpumask_bits); }static inline int cpumask_full (const struct cpumask *srcp) { -return bitmap_full (srcp->bits, nr_cpumask_bits); +return bitmap_full (cpumask_bits (srcp), nr_cpumask_bits); }static inline int __cpus_weight (const cpumask_t *srcp,int nbits) { -return bitmap_weight (srcp->bits, nbits); +return bitmap_weight (cpumask_bits (srcp), nbits); }static inline int cpumask_weight (const struct cpumask *srcp) { -return bitmap_weight (srcp->bits, nr_cpumask_bits); +return bitmap_weight (cpumask_bits (srcp), nr_cpumask_bits); }static inline void cpumask_shift_right (struct cpumask *dstp,const struct cpumask *srcp,int n) { -bitmap_shift_right (dstp->bits, srcp->bits, n, nr_cpumask_bits); +bitmap_shift_right (cpumask_bits (dstp),cpumask_bits (srcp), n, + nr_cpumask_bits); }static inline void cpumask_shift_left (struct cpumask *dstp,const struct cpumask *srcp,int n) { -bitmap_shift_left (dstp->bits, srcp->bits, n, nr_cpumask_bits); +bitmap_shift_left (cpumask_bits (dstp),cpumask_bits (srcp), n, + nr_cpumask_bits); }static inline int cpumask_scnprintf (char *buf,int len,const struct cpumask *srcp) { -return bitmap_scnprintf (buf, len, srcp->bits, nr_cpumask_bits); +return bitmap_scnprintf (buf, len,cpumask_bits (srcp), nr_cpumask_bits); }static inline int cpumask_parse_user (const char __user *buf,int len,struct cpumask *dstp) { -return bitmap_parse_user (buf, len, dstp->bits, nr_cpumask_bits); +return bitmap_parse_user (buf, len,cpumask_bits (dstp), nr_cpumask_bits); }static inline int cpulist_scnprintf (char *buf,int len,const struct cpumask *srcp) { -return bitmap_scnlistprintf (buf, len, srcp->bits, nr_cpumask_bits); +return bitmap_scnlistprintf (buf, len,cpumask_bits (srcp), + nr_cpumask_bits); }static inline int cpulist_parse (const char *buf,struct cpumask *dstp) { -return bitmap_parselist (buf, dstp->bits, nr_cpumask_bits); +return bitmap_parselist (buf,cpumask_bits (dstp), nr_cpumask_bits); }static inline int cpumask_cpuremap (int oldbit,const struct cpumask *oldp,const struct cpumask *newp) { -return bitmap_bitremap (oldbit, oldp->bits, newp->bits, nr_cpumask_bits); +return bitmap_bitremap (oldbit,cpumask_bits (oldp),cpumask_bits (newp), + nr_cpumask_bits); } static inline void cpumask_remap(struct cpumask *dstp,
@@ -338,21 +350,23 @@ static inline void cpumask_remap(structconst struct cpumask *oldp, const struct cpumask *newp) { - bitmap_remap(dstp->bits, srcp->bits, oldp->bits, newp->bits, -nr_cpumask_bits ); +bitmap_remap (cpumask_bits (dstp ),cpumask_bits (srcp ), +cpumask_bits (oldp ),cpumask_bits (newp ),nr_cpumask_bits ); }static inline void cpumask_onto (struct cpumask *dstp,const struct cpumask *origp,const struct cpumask *relmapp) { -bitmap_onto (dstp->bits, origp->bits, relmapp->bits, nr_cpumask_bits); +bitmap_onto (cpumask_bits (dstp),cpumask_bits (origp), +cpumask_bits (relmapp), nr_cpumask_bits); }static inline void cpumask_fold (struct cpumask *dstp,const struct cpumask *origp,int sz) { -bitmap_fold (dstp->bits, origp->bits, sz, nr_cpumask_bits); +bitmap_fold (cpumask_bits (dstp),cpumask_bits (origp), sz, + nr_cpumask_bits); } static inline void cpumask_copy(struct cpumask *dstp,
include/linux/seq_file.h +1 -1
@@ -52,7 +52,7 @@ int seq_path_root(struct seq_file *m, stint seq_bitmap (struct seq_file *m,unsigned long *bits,unsigned int nr_bits);static inline int seq_cpumask (struct seq_file *m,cpumask_t *mask) { -return seq_bitmap (m, mask->bits, nr_cpu_ids); +return seq_bitmap (m,cpumask_bits (mask), nr_cpu_ids); }static inline int seq_nodemask (struct seq_file *m,nodemask_t *mask)
kernel/time/timer_list.c +2 -2
@@ -232,10 +232,10 @@ static void timer_list_show_tickdevices(#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST print_tickdevice (m,tick_get_broadcast_device (),-1 );SEQ_printf (m,"tick_broadcast_mask: %08lx\n" , -tick_get_broadcast_mask ()->bits[0 ]); +cpumask_bits (tick_get_broadcast_mask ())[0 ]);#ifdef CONFIG_TICK_ONESHOT SEQ_printf (m,"tick_broadcast_oneshot_mask: %08lx\n" , -tick_get_broadcast_oneshot_mask ()->bits[0 ]); +cpumask_bits (tick_get_broadcast_oneshot_mask ())[0 ]);#endif SEQ_printf (m,"\n" );#endif
lib/cpumask.c +2 -2
@@ -5,13 +5,13 @@int __first_cpu (const cpumask_t *srcp) { -return find_first_bit (srcp->bits, nr_cpumask_bits); +return find_first_bit (cpumask_bits (srcp), nr_cpumask_bits); }EXPORT_SYMBOL (__first_cpu);int __next_cpu (int n,const cpumask_t *srcp) { -return find_next_bit (srcp->bits, nr_cpumask_bits, n+1 ); +return find_next_bit (cpumask_bits (srcp), nr_cpumask_bits, n+1 ); }EXPORT_SYMBOL (__next_cpu);
Re: [PATCH 18/35] cpumask: use cpumask_bits() everywhere.-resubmit
cpumask: use cpumask_bits() everywhere.
From: Rusty Russell <[email protected]>
Instead of accessing ->bits, we use cpumask_bits(). This will be very useful when 'struct cpumask' has a hidden definition.
--- include/linux/cpumask.h | 70 ++++++++++++++++++++++++++++------------------- include/linux/seq_file.h | 2 - kernel/time/timer_list.c | 4 +- lib/cpumask.c | 4 +- 4 files changed, 47 insertions(+), 33 deletions(-)
include/linux/cpumask.h +42 -28
@@ -194,12 +194,12 @@ extern int nr_cpu_ids;static inline void cpumask_set_cpu (int cpu,volatile struct cpumask *dstp) { -set_bit (cpu, dstp->bits); +set_bit (cpu,cpumask_bits (dstp)); }static inline void cpumask_clear_cpu (int cpu,volatile struct cpumask *dstp) { -clear_bit (cpu, dstp->bits); +clear_bit (cpu,cpumask_bits (dstp)); }/* No static inline type checking - see Subtlety (1) above. */
@@ -207,130 +207,142 @@ static inline void cpumask_clear_cpu(intstatic inline int cpumask_test_and_set_cpu (int cpu,struct cpumask *addr) { -return test_and_set_bit (cpu, addr->bits); +return test_and_set_bit (cpu,cpumask_bits (addr)); }static inline void cpumask_setall (struct cpumask *dstp) { -bitmap_fill (dstp->bits, nr_cpumask_bits); +bitmap_fill (cpumask_bits (dstp), nr_cpumask_bits); }static inline void cpumask_clear (struct cpumask *dstp) { -bitmap_zero (dstp->bits, nr_cpumask_bits); +bitmap_zero (cpumask_bits (dstp), nr_cpumask_bits); }static inline void cpumask_and (struct cpumask *dstp,const struct cpumask *src1p,const struct cpumask *src2p) { -bitmap_and (dstp->bits, src1p->bits, src2p->bits, nr_cpumask_bits); +bitmap_and (cpumask_bits (dstp),cpumask_bits (src1p), +cpumask_bits (src2p), nr_cpumask_bits); }static inline void cpumask_or (struct cpumask *dstp,const struct cpumask *src1p,const struct cpumask *src2p) { -bitmap_or (dstp->bits, src1p->bits, src2p->bits, nr_cpumask_bits); +bitmap_or (cpumask_bits (dstp),cpumask_bits (src1p), +cpumask_bits (src2p), nr_cpumask_bits); }static inline void cpumask_xor (struct cpumask *dstp,const struct cpumask *src1p,const struct cpumask *src2p) { -bitmap_xor (dstp->bits, src1p->bits, src2p->bits, nr_cpumask_bits); +bitmap_xor (cpumask_bits (dstp),cpumask_bits (src1p), +cpumask_bits (src2p), nr_cpumask_bits); }static inline void cpumask_andnot (struct cpumask *dstp,const struct cpumask *src1p,const struct cpumask *src2p) { -bitmap_andnot (dstp->bits, src1p->bits, src2p->bits, nr_cpumask_bits); +bitmap_andnot (cpumask_bits (dstp),cpumask_bits (src1p), +cpumask_bits (src2p), nr_cpumask_bits); }static inline void cpumask_complement (struct cpumask *dstp,const struct cpumask *srcp) { -bitmap_complement (dstp->bits, srcp->bits, nr_cpumask_bits); +bitmap_complement (cpumask_bits (dstp),cpumask_bits (srcp), + nr_cpumask_bits); }static inline int cpumask_equal (const struct cpumask *src1p,const struct cpumask *src2p) { -return bitmap_equal (src1p->bits, src2p->bits, nr_cpumask_bits); +return bitmap_equal (cpumask_bits (src1p),cpumask_bits (src2p), + nr_cpumask_bits); }static inline int cpumask_intersects (const struct cpumask *src1p,const struct cpumask *src2p) { -return bitmap_intersects (src1p->bits, src2p->bits, nr_cpumask_bits); +return bitmap_intersects (cpumask_bits (src1p),cpumask_bits (src2p), + nr_cpumask_bits); }static inline int cpumask_subset (const struct cpumask *src1p,const struct cpumask *src2p) { -return bitmap_subset (src1p->bits, src2p->bits, nr_cpumask_bits); +return bitmap_subset (cpumask_bits (src1p),cpumask_bits (src2p), + nr_cpumask_bits); }static inline int cpumask_empty (const struct cpumask *srcp) { -return bitmap_empty (srcp->bits, nr_cpumask_bits); +return bitmap_empty (cpumask_bits (srcp), nr_cpumask_bits); }static inline int cpumask_full (const struct cpumask *srcp) { -return bitmap_full (srcp->bits, nr_cpumask_bits); +return bitmap_full (cpumask_bits (srcp), nr_cpumask_bits); }static inline int __cpus_weight (const cpumask_t *srcp,int nbits) { -return bitmap_weight (srcp->bits, nbits); +return bitmap_weight (cpumask_bits (srcp), nbits); }static inline int cpumask_weight (const struct cpumask *srcp) { -return bitmap_weight (srcp->bits, nr_cpumask_bits); +return bitmap_weight (cpumask_bits (srcp), nr_cpumask_bits); }static inline void cpumask_shift_right (struct cpumask *dstp,const struct cpumask *srcp,int n) { -bitmap_shift_right (dstp->bits, srcp->bits, n, nr_cpumask_bits); +bitmap_shift_right (cpumask_bits (dstp),cpumask_bits (srcp), n, + nr_cpumask_bits); }static inline void cpumask_shift_left (struct cpumask *dstp,const struct cpumask *srcp,int n) { -bitmap_shift_left (dstp->bits, srcp->bits, n, nr_cpumask_bits); +bitmap_shift_left (cpumask_bits (dstp),cpumask_bits (srcp), n, + nr_cpumask_bits); }static inline int cpumask_scnprintf (char *buf,int len,const struct cpumask *srcp) { -return bitmap_scnprintf (buf, len, srcp->bits, nr_cpumask_bits); +return bitmap_scnprintf (buf, len,cpumask_bits (srcp), nr_cpumask_bits); }static inline int cpumask_parse_user (const char __user *buf,int len,struct cpumask *dstp) { -return bitmap_parse_user (buf, len, dstp->bits, nr_cpumask_bits); +return bitmap_parse_user (buf, len,cpumask_bits (dstp), nr_cpumask_bits); }static inline int cpulist_scnprintf (char *buf,int len,const struct cpumask *srcp) { -return bitmap_scnlistprintf (buf, len, srcp->bits, nr_cpumask_bits); +return bitmap_scnlistprintf (buf, len,cpumask_bits (srcp), + nr_cpumask_bits); }static inline int cpulist_parse (const char *buf,struct cpumask *dstp) { -return bitmap_parselist (buf, dstp->bits, nr_cpumask_bits); +return bitmap_parselist (buf,cpumask_bits (dstp), nr_cpumask_bits); }static inline int cpumask_cpuremap (int oldbit,const struct cpumask *oldp,const struct cpumask *newp) { -return bitmap_bitremap (oldbit, oldp->bits, newp->bits, nr_cpumask_bits); +return bitmap_bitremap (oldbit,cpumask_bits (oldp),cpumask_bits (newp), + nr_cpumask_bits); } static inline void cpumask_remap(struct cpumask *dstp,
@@ -338,21 +350,23 @@ static inline void cpumask_remap(structconst struct cpumask *oldp, const struct cpumask *newp) { - bitmap_remap(dstp->bits, srcp->bits, oldp->bits, newp->bits, -nr_cpumask_bits ); +bitmap_remap (cpumask_bits (dstp ),cpumask_bits (srcp ), +cpumask_bits (oldp ),cpumask_bits (newp ),nr_cpumask_bits ); }static inline void cpumask_onto (struct cpumask *dstp,const struct cpumask *origp,const struct cpumask *relmapp) { -bitmap_onto (dstp->bits, origp->bits, relmapp->bits, nr_cpumask_bits); +bitmap_onto (cpumask_bits (dstp),cpumask_bits (origp), +cpumask_bits (relmapp), nr_cpumask_bits); }static inline void cpumask_fold (struct cpumask *dstp,const struct cpumask *origp,int sz) { -bitmap_fold (dstp->bits, origp->bits, sz, nr_cpumask_bits); +bitmap_fold (cpumask_bits (dstp),cpumask_bits (origp), sz, + nr_cpumask_bits); } static inline void cpumask_copy(struct cpumask *dstp,
include/linux/seq_file.h +1 -1
@@ -52,7 +52,7 @@ int seq_path_root(struct seq_file *m, stint seq_bitmap (struct seq_file *m,unsigned long *bits,unsigned int nr_bits);static inline int seq_cpumask (struct seq_file *m,cpumask_t *mask) { -return seq_bitmap (m, mask->bits, nr_cpu_ids); +return seq_bitmap (m,cpumask_bits (mask), nr_cpu_ids); }static inline int seq_nodemask (struct seq_file *m,nodemask_t *mask)
kernel/time/timer_list.c +2 -2
@@ -232,10 +232,10 @@ static void timer_list_show_tickdevices(#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST print_tickdevice (m,tick_get_broadcast_device (),-1 );SEQ_printf (m,"tick_broadcast_mask: %08lx\n" , -tick_get_broadcast_mask ()->bits[0 ]); +cpumask_bits (tick_get_broadcast_mask ())[0 ]);#ifdef CONFIG_TICK_ONESHOT SEQ_printf (m,"tick_broadcast_oneshot_mask: %08lx\n" , -tick_get_broadcast_oneshot_mask ()->bits[0 ]); +cpumask_bits (tick_get_broadcast_oneshot_mask ())[0 ]);#endif SEQ_printf (m,"\n" );#endif
lib/cpumask.c +2 -2
@@ -5,13 +5,13 @@int __first_cpu (const cpumask_t *srcp) { -return find_first_bit (srcp->bits, nr_cpumask_bits); +return find_first_bit (cpumask_bits (srcp), nr_cpumask_bits); }EXPORT_SYMBOL (__first_cpu);int __next_cpu (int n,const cpumask_t *srcp) { -return find_next_bit (srcp->bits, nr_cpumask_bits, n+1 ); +return find_next_bit (cpumask_bits (srcp), nr_cpumask_bits, n+1 ); }EXPORT_SYMBOL (__next_cpu);
PATCH 19/35 cpumask: cpumask_of(): cpumask_of_cpu() which returns a pointer. From: Rusty Russell <[email protected]>
In reply to Mike TravisThis deprecates cpumask_of_cpu(), which returns a cpumask_t (cpumask_of() returns a const pointer, instead).
--- include/linux/cpumask.h | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-)
include/linux/cpumask.h +4 -12
@@ -52,8 +52,7 @@* void cpumask_copy(dmask, smask) dmask = smask * * size_t cpumask_size() Length of cpumask in bytes. -* cpumask_t cpumask_of_cpu(cpu) Return cpumask with bit 'cpu' set -* (can be used as an lvalue) +* const struct cpumask *cpumask_of(cpu) Return cpumask with bit 'cpu' set * CPU_MASK_ALL Initializer - all bits set * CPU_MASK_NONE Initializer - no bits set * unsigned long *cpumask_bits(mask) Array of unsigned long's in mask
@@ -175,6 +174,7 @@ extern cpumask_t _unused_cpumask_arg_;#define next_cpu_nr (n, src) next_cpu(n, src)#define cpus_weight_nr (cpumask) cpus_weight(cpumask)#define for_each_cpu_mask_nr (cpu, mask) for_each_cpu_mask(cpu, mask) +#define cpumask_of_cpu (cpu) (*cpumask_of(cpu))/* End deprecated region. */ #if NR_CPUS >1
@@ -385,21 +385,13 @@ static inline void cpumask_copy(struct cextern const unsigned long cpu_bit_bitmap[BITS_PER_LONG +1 ][BITS_TO_LONGS (NR_CPUS )]; -static inline const cpumask_t *get_cpu_mask (unsigned int cpu) +static inline const struct cpumask *cpumask_of (unsigned int cpu) {const unsigned long *p = cpu_bit_bitmap[1 + cpu %BITS_PER_LONG ]; p -= cpu /BITS_PER_LONG ; -return (const cpumask_t *)p; +return (const struct cpumask *)p; } -/* -* In cases where we take the address of the cpumask immediately, -* gcc optimizes it out (it's a constant) and there's no huge stack -* variable created: -*/ -#define cpumask_of_cpu (cpu) (*get_cpu_mask(cpu)) - -#define CPU_MASK_LAST_WORD BITMAP_LAST_WORD_MASK(NR_CPUS)#if NR_CPUS <=BITS_PER_LONG
PATCH 20/35 cpumask: for_each_cpu(): for_each_cpu_mask which takes a pointer From: Rusty Russell <[email protected]>
In reply to Mike TravisWe want to wean people off handing around cpumask_t's, and have them pass by pointer instead. This does for_each_cpu_mask().
We immediately convert core files who were doing "for_each_cpu_mask(... *mask)" since this is clearer.
--- include/linux/cpumask.h | 25 ++++++++++++++----------- kernel/sched.c | 40 ++++++++++++++++++++-------------------- kernel/workqueue.c | 6 +++--- lib/cpumask.c | 2 +- mm/allocpercpu.c | 4 ++-- mm/vmstat.c | 4 ++-- 6 files changed, 42 insertions(+), 39 deletions(-)
include/linux/cpumask.h +14 -11
@@ -97,8 +97,8 @@* void cpumask_onto(dst, orig, relmap) *dst = orig relative to relmap * void cpumask_fold(dst, orig, sz) dst bits = orig bits mod sz * -* for_each_cpu_mask(cpu, mask) for-loop cpu over mask using nr_cpu_ids -* for_each_cpu_mask_and(cpu, mask, and) for-loop cpu over (mask & and). +* for_each_cpu(cpu, mask) for-loop cpu over mask, <= nr_cpu_ids +* for_each_cpu_and(cpu, mask, and) for-loop cpu over (mask & and). * * int num_online_cpus() Number of online CPUs * int num_possible_cpus() Number of all possible CPUs
@@ -175,6 +175,9 @@ extern cpumask_t _unused_cpumask_arg_;#define cpus_weight_nr (cpumask) cpus_weight(cpumask)#define for_each_cpu_mask_nr (cpu, mask) for_each_cpu_mask(cpu, mask)#define cpumask_of_cpu (cpu) (*cpumask_of(cpu)) +#define for_each_cpu_mask (cpu, mask) for_each_cpu(cpu, &(mask)) +#define for_each_cpu_mask_and (cpu, mask, and) \ + for_each_cpu_and(cpu, &(mask), &(and))/* End deprecated region. */ #if NR_CPUS >1
@@ -443,9 +446,9 @@ extern cpumask_t cpu_mask_all;#define cpumask_next_and (n, srcp, andp) ({ (void)(srcp), (void)(andp); 1; })#define any_online_cpu (mask) 0 -#define for_each_cpu_mask (cpu, mask) \ +#define for_each_cpu (cpu, mask) \ for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask) -#define for_each_cpu_mask_and (cpu, mask, and) \ +#define for_each_cpu_and (cpu, mask, and) \ for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask, (void)and)#else /* NR_CPUS > 1 */
@@ -459,13 +462,13 @@ int __any_online_cpu(const cpumask_t *ma#define next_cpu (n, src) __next_cpu((n), &(src))#define any_online_cpu (mask) __any_online_cpu(&(mask)) -#define for_each_cpu_mask (cpu, mask) \ +#define for_each_cpu (cpu, mask) \ for ((cpu) = -1; \ - (cpu) = next_cpu((cpu), (mask)), \ + (cpu) = __next_cpu((cpu), (mask)), \ (cpu) < nr_cpu_ids;) -#define for_each_cpu_mask_and (cpu, mask, and) \ +#define for_each_cpu_and (cpu, mask, and) \ for ((cpu) = -1; \ - (cpu) = cpumask_next_and((cpu), &(mask), &(and)), \ + (cpu) = cpumask_next_and((cpu), (mask), (and)), \ (cpu) < nr_cpu_ids;)#define num_online_cpus () cpus_weight(cpu_online_map)
@@ -597,8 +600,8 @@ extern cpumask_t cpu_active_map;#define cpu_is_offline (cpu) unlikely(!cpu_online(cpu)) -#define for_each_possible_cpu (cpu) for_each_cpu_mask((cpu), cpu_possible_map) -#define for_each_online_cpu (cpu) for_each_cpu_mask((cpu), cpu_online_map) -#define for_each_present_cpu (cpu) for_each_cpu_mask((cpu), cpu_present_map) +#define for_each_possible_cpu (cpu) for_each_cpu((cpu), &cpu_possible_map) +#define for_each_online_cpu (cpu) for_each_cpu((cpu), &cpu_online_map) +#define for_each_present_cpu (cpu) for_each_cpu((cpu), &cpu_present_map)#endif /* __LINUX_CPUMASK_H */
kernel/sched.c +20 -20
@@ -1523,7 +1523,7 @@ static int tg_shares_up(struct task_groustruct sched_domain *sd = data;int i; -for_each_cpu_mask (i, sd->span) { +for_each_cpu (i, &sd->span) { rq_weight += tg->cfs_rq[i]->load.weight; shares += tg->cfs_rq[i]->shares; }
@@ -1537,7 +1537,7 @@ static int tg_shares_up(struct task_grouif (!rq_weight) rq_weight =cpus_weight (sd->span) *NICE_0_LOAD ; -for_each_cpu_mask (i, sd->span) +for_each_cpu (i, &sd->span)update_group_shares_cpu (tg, i, shares, rq_weight);return 0 ;
@@ -2074,7 +2074,7 @@ find_idlest_group(struct sched_domain *s/* Tally up the load of all CPUs in the group */ avg_load =0 ; -for_each_cpu_mask_nr (i, group->cpumask) { +for_each_cpu (i, &group->cpumask) {/* Bias balancing toward cpus of our domain */ if (local_group) load =source_load (i, load_idx);
@@ -2116,7 +2116,7 @@ find_idlest_cpu(struct sched_group *grou/* Traverse only the allowed CPUs */ cpus_and (*tmp, group->cpumask, p->cpus_allowed); -for_each_cpu_mask_nr (i, *tmp) { +for_each_cpu (i, tmp) { load =weighted_cpuload (i);if (load < min_load || (load == min_load && i == this_cpu)) {
@@ -3134,7 +3134,7 @@ find_busiest_group(struct sched_domain * max_cpu_load =0 ; min_cpu_load = ~0UL ; -for_each_cpu_mask_nr (i, group->cpumask) { +for_each_cpu (i, &group->cpumask) {struct rq *rq;if (!cpu_isset (i, *cpus))
@@ -3413,7 +3413,7 @@ find_busiest_queue(struct sched_group *gunsigned long max_load =0 ;int i; -for_each_cpu_mask_nr (i, group->cpumask) { +for_each_cpu (i, &group->cpumask) {unsigned long wl;if (!cpu_isset (i, *cpus))
@@ -3955,7 +3955,7 @@ static void run_rebalance_domains(structint balance_cpu;cpu_clear (this_cpu, cpus); -for_each_cpu_mask_nr (balance_cpu, cpus) { +for_each_cpu (balance_cpu, &cpus) {/* * If this cpu gets work to do, stop the load balancing * work being done for other cpus. Next load
@@ -6935,7 +6935,7 @@ init_sched_build_groups(const cpumask_tcpus_clear (*covered); -for_each_cpu_mask_nr (i, *span) { +for_each_cpu (i, span) {struct sched_group *sg;int group =group_fn (i, cpu_map, &sg, tmpmask);int j;
@@ -6946,7 +6946,7 @@ init_sched_build_groups(const cpumask_tcpus_clear (sg->cpumask); sg->__cpu_power =0 ; -for_each_cpu_mask_nr (j, *span) { +for_each_cpu (j, span) {if (group_fn (j, cpu_map,NULL , tmpmask) != group)continue ;
@@ -7146,7 +7146,7 @@ static void init_numa_sched_groups_powerif (!sg)return ; do { - for_each_cpu_mask_nr(j, sg->cpumask) { + for_each_cpu(j, &sg->cpumask) { struct sched_domain *sd; sd = &per_cpu(phys_domains, j);
@@ -7171,7 +7171,7 @@ static void free_sched_groups(const cpum {int cpu, i; -for_each_cpu_mask_nr (cpu, *cpu_map) { +for_each_cpu (cpu, cpu_map) {struct sched_group **sched_group_nodes = sched_group_nodes_bycpu[cpu];
@@ -7418,7 +7418,7 @@ static int __build_sched_domains(const c/* * Set up domains for cpus specified by the cpu_map. */ -for_each_cpu_mask_nr (i, *cpu_map) { +for_each_cpu (i, cpu_map) {struct sched_domain *sd =NULL , *p;SCHED_CPUMASK_VAR (nodemask, allmasks);
@@ -7485,7 +7485,7 @@ static int __build_sched_domains(const c#ifdef CONFIG_SCHED_SMT /* Set up CPU (sibling) groups */ -for_each_cpu_mask_nr (i, *cpu_map) { +for_each_cpu (i, cpu_map) {SCHED_CPUMASK_VAR (this_sibling_map, allmasks);SCHED_CPUMASK_VAR (send_covered, allmasks);
@@ -7502,7 +7502,7 @@ static int __build_sched_domains(const c#ifdef CONFIG_SCHED_MC /* Set up multi-core groups */ -for_each_cpu_mask_nr (i, *cpu_map) { +for_each_cpu (i, cpu_map) {SCHED_CPUMASK_VAR (this_core_map, allmasks);SCHED_CPUMASK_VAR (send_covered, allmasks);
@@ -7569,7 +7569,7 @@ static int __build_sched_domains(const c goto error; } sched_group_nodes[i] = sg; -for_each_cpu_mask_nr (j, *nodemask) { +for_each_cpu (j, nodemask) {struct sched_domain *sd; sd = &per_cpu (node_domains, j);
@@ -7615,21 +7615,21 @@ static int __build_sched_domains(const c/* Calculate CPU power for physical packages and nodes */ #ifdef CONFIG_SCHED_SMT -for_each_cpu_mask_nr (i, *cpu_map) { +for_each_cpu (i, cpu_map) {struct sched_domain *sd = &per_cpu (cpu_domains, i);init_sched_groups_power (i, sd); }#endif #ifdef CONFIG_SCHED_MC -for_each_cpu_mask_nr (i, *cpu_map) { +for_each_cpu (i, cpu_map) {struct sched_domain *sd = &per_cpu (core_domains, i);init_sched_groups_power (i, sd); }#endif -for_each_cpu_mask_nr (i, *cpu_map) { +for_each_cpu (i, cpu_map) {struct sched_domain *sd = &per_cpu (phys_domains, i);init_sched_groups_power (i, sd);
@@ -7649,7 +7649,7 @@ static int __build_sched_domains(const c#endif /* Attach the domains */ -for_each_cpu_mask_nr (i, *cpu_map) { +for_each_cpu (i, cpu_map) {struct sched_domain *sd;#ifdef CONFIG_SCHED_SMT sd = &per_cpu (cpu_domains, i);
@@ -7732,7 +7732,7 @@ static void detach_destroy_domains(constunregister_sched_domain_sysctl (); -for_each_cpu_mask_nr (i, *cpu_map) +for_each_cpu (i, cpu_map)cpu_attach_domain (NULL , &def_root_domain, i);synchronize_sched ();arch_destroy_sched_domains (cpu_map, &tmpmask);
kernel/workqueue.c +3 -3
@@ -415,7 +415,7 @@ void flush_workqueue(struct workqueue_stmight_sleep ();lock_map_acquire (&wq->lockdep_map);lock_map_release (&wq->lockdep_map); -for_each_cpu_mask_nr (cpu, *cpu_map) +for_each_cpu (cpu, cpu_map)flush_cpu_workqueue (per_cpu_ptr (wq->cpu_wq, cpu)); }EXPORT_SYMBOL_GPL (flush_workqueue);
@@ -546,7 +546,7 @@ static void wait_on_work(struct work_str wq = cwq->wq; cpu_map =wq_cpu_map (wq); -for_each_cpu_mask_nr (cpu, *cpu_map) +for_each_cpu (cpu, cpu_map)wait_on_cpu_work (per_cpu_ptr (wq->cpu_wq, cpu), work); }
@@ -906,7 +906,7 @@ void destroy_workqueue(struct workqueue_list_del (&wq->list);spin_unlock (&workqueue_lock); -for_each_cpu_mask_nr (cpu, *cpu_map) +for_each_cpu (cpu, cpu_map)cleanup_workqueue_thread (per_cpu_ptr (wq->cpu_wq, cpu));cpu_maps_update_done ();
lib/cpumask.c +1 -1
@@ -28,7 +28,7 @@ int __any_online_cpu(const cpumask_t *ma {int cpu; -for_each_cpu_mask (cpu, *mask) { +for_each_cpu (cpu, mask) {if (cpu_online (cpu))break ; }
mm/allocpercpu.c +2 -2
@@ -34,7 +34,7 @@ static void percpu_depopulate(void *__pdstatic void __percpu_depopulate_mask (void *__pdata,cpumask_t *mask) {int cpu; -for_each_cpu_mask_nr (cpu, *mask) +for_each_cpu (cpu, mask)percpu_depopulate (__pdata, cpu); }
@@ -86,7 +86,7 @@ static int __percpu_populate_mask(void *int cpu;cpus_clear (populated); -for_each_cpu_mask_nr (cpu, *mask) +for_each_cpu (cpu, mask)if (unlikely (!percpu_populate (__pdata, size, gfp, cpu))) {__percpu_depopulate_mask (__pdata, &populated);return -ENOMEM ;
mm/vmstat.c +2 -2
@@ -20,14 +20,14 @@ DEFINE_PER_CPU(struct vm_event_state, vm_event_states) = {{0}};EXPORT_PER_CPU_SYMBOL (vm_event_states); -static void sum_vm_events (unsigned long *ret,cpumask_t *cpumask) +static void sum_vm_events (unsigned long *ret,const cpumask_t *cpumask) {int cpu;int i;memset (ret,0 ,NR_VM_EVENT_ITEMS *sizeof (unsigned long )); -for_each_cpu_mask_nr (cpu, *cpumask) { +for_each_cpu (cpu, cpumask) {struct vm_event_state *this = &per_cpu (vm_event_states, cpu);for (i =0 ; i <NR_VM_EVENT_ITEMS ; i++)
PATCH 21/35 cpumask: cpumask_first/cpumask_next From: Rusty Russell <[email protected]>
In reply to Mike TravisPointer-taking variants of first_cpu/next_cpu.
--- include/linux/cpumask.h | 18 +++++++++--------- lib/cpumask.c | 10 +++++----- 2 files changed, 14 insertions(+), 14 deletions(-)
include/linux/cpumask.h +9 -9
@@ -46,8 +46,8 @@* void cpumask_shift_right(dst, src, n) Shift right * void cpumask_shift_left(dst, src, n) Shift left * -* int first_cpu(mask) Number lowest set bit, or >= nr_cpu_ids -* int next_cpu(cpu, mask) Next cpu past 'cpu', or >= nr_cpu_ids +* int cpumask_first(mask) Number lowest set bit, or >= nr_cpu_ids +* int cpumask_next(cpu, mask) Next cpu past 'cpu', or >= nr_cpu_ids * * void cpumask_copy(dmask, smask) dmask = smask *
@@ -178,6 +178,8 @@ extern cpumask_t _unused_cpumask_arg_;#define for_each_cpu_mask (cpu, mask) for_each_cpu(cpu, &(mask))#define for_each_cpu_mask_and (cpu, mask, and) \ for_each_cpu_and(cpu, &(mask), &(and)) +#define first_cpu (src) cpumask_first(&(src)) +#define next_cpu (n, src) cpumask_next((n), &(src))/* End deprecated region. */ #if NR_CPUS >1
@@ -441,8 +443,8 @@ extern cpumask_t cpu_mask_all;#if NR_CPUS ==1 -#define first_cpu (src) ({ (void)(src); 0; }) -#define next_cpu (n, src) ({ (void)(src); 1; }) +#define cpumask_first (src) ({ (void)(src); 0; }) +#define cpumask_next (n, src) ({ (void)(src); 1; })#define cpumask_next_and (n, srcp, andp) ({ (void)(srcp), (void)(andp); 1; })#define any_online_cpu (mask) 0
@@ -453,18 +455,16 @@ extern cpumask_t cpu_mask_all;#else /* NR_CPUS > 1 */ -int __first_cpu (const cpumask_t *srcp); -int __next_cpu (int n,const cpumask_t *srcp); +int cpumask_first (const cpumask_t *srcp); +int cpumask_next (int n,const cpumask_t *srcp);int cpumask_next_and (int n,const cpumask_t *srcp,const cpumask_t *andp);int __any_online_cpu (const cpumask_t *mask); -#define first_cpu (src) __first_cpu(&(src)) -#define next_cpu (n, src) __next_cpu((n), &(src))#define any_online_cpu (mask) __any_online_cpu(&(mask))#define for_each_cpu (cpu, mask) \ for ((cpu) = -1; \ - (cpu) = __next_cpu((cpu), (mask)), \ + (cpu) = cpumask_next((cpu), (mask)), \ (cpu) < nr_cpu_ids;)#define for_each_cpu_and (cpu, mask, and) \ for ((cpu) = -1; \
lib/cpumask.c +5 -5
@@ -3,21 +3,21 @@#include <linux/cpumask.h> #include <linux/module.h> -int __first_cpu (const cpumask_t *srcp) +int cpumask_first (const cpumask_t *srcp) {return find_first_bit (cpumask_bits (srcp), nr_cpumask_bits); } -EXPORT_SYMBOL (__first_cpu); +EXPORT_SYMBOL (cpumask_first); -int __next_cpu (int n,const cpumask_t *srcp) +int cpumask_next (int n,const cpumask_t *srcp) {return find_next_bit (cpumask_bits (srcp), nr_cpumask_bits, n+1 ); } -EXPORT_SYMBOL (__next_cpu); +EXPORT_SYMBOL (cpumask_next);int cpumask_next_and (int n,const cpumask_t *srcp,const cpumask_t *andp) { -while ((n =next_cpu (n, *srcp)) < nr_cpu_ids) +while ((n =cpumask_next (n, srcp)) < nr_cpu_ids)if (cpumask_test_cpu (n, andp))break ;return n;
PATCH 22/35 cpumask: deprecate any_online_cpu() in favour of cpumask_any/cpumask_any_and From: Rusty Russell <[email protected]>
In reply to Mike Travisany_online_cpu() is a good name, but it takes a cpumask_t, not a pointer.
--- include/linux/cpumask.h | 11 ++++++----- lib/cpumask.c | 12 ------------ 2 files changed, 6 insertions(+), 17 deletions(-)
include/linux/cpumask.h +6 -5
@@ -108,7 +108,8 @@* int cpu_possible(cpu) Is some cpu possible? * int cpu_present(cpu) Is some cpu present (can schedule)? * -* int any_online_cpu(mask) First online cpu in mask +* int cpumask_any(mask) Any cpu in mask +* int cpumask_any_and(mask1,mask2) Any cpu in both masks * * for_each_possible_cpu(cpu) for-loop cpu over cpu_possible_map * for_each_online_cpu(cpu) for-loop cpu over cpu_online_map
@@ -180,6 +181,7 @@ extern cpumask_t _unused_cpumask_arg_; for_each_cpu_and(cpu, &(mask), &(and))#define first_cpu (src) cpumask_first(&(src))#define next_cpu (n, src) cpumask_next((n), &(src)) +#define any_online_cpu (mask) cpumask_any_and(&(mask), &cpu_online_map)/* End deprecated region. */ #if NR_CPUS >1
@@ -380,6 +382,9 @@ static inline void cpumask_copy(struct cbitmap_copy (cpumask_bits (dstp),cpumask_bits (srcp), nr_cpumask_bits); } +#define cpumask_any (srcp) cpumask_first(srcp) +#define cpumask_any_and (mask1, mask2) cpumask_first_and((mask1), (mask2)) +/* * Special-case data structure for "single bit set only" constant CPU masks. *
@@ -446,7 +451,6 @@ extern cpumask_t cpu_mask_all;#define cpumask_first (src) ({ (void)(src); 0; })#define cpumask_next (n, src) ({ (void)(src); 1; })#define cpumask_next_and (n, srcp, andp) ({ (void)(srcp), (void)(andp); 1; }) -#define any_online_cpu (mask) 0#define for_each_cpu (cpu, mask) \ for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
@@ -458,9 +462,6 @@ extern cpumask_t cpu_mask_all;int cpumask_first (const cpumask_t *srcp);int cpumask_next (int n,const cpumask_t *srcp);int cpumask_next_and (int n,const cpumask_t *srcp,const cpumask_t *andp); -int __any_online_cpu (const cpumask_t *mask); - -#define any_online_cpu (mask) __any_online_cpu(&(mask))#define for_each_cpu (cpu, mask) \ for ((cpu) = -1; \
lib/cpumask.c +0 -12
@@ -24,18 +24,6 @@ int cpumask_next_and(int n, const cpumas }EXPORT_SYMBOL (cpumask_next_and); -int __any_online_cpu (const cpumask_t *mask) -{ -int cpu; - -for_each_cpu (cpu, mask) { -if (cpu_online (cpu)) -break ; - } -return cpu; -} -EXPORT_SYMBOL (__any_online_cpu); -/* These are not inline because of header tangles. */ #ifdef CONFIG_CPUMASK_OFFSTACK bool alloc_cpumask_var (cpumask_var_t *mask,gfp_t flags)
Re: [PATCH 22/35] cpumask: deprecate any_online_cpu() in favour of cpumask_any/cpumask_any_and From: Rusty Russell <[email protected]>
Quoted 5 lines · Mike Travis
any_online_cpu()is a good name, but it takes acpumask_t, not a pointer.Signed-off-by Rusty Russell <[email protected]>Signed-off-by Mike Travis <[email protected]>
almost all the patches have a missing \n and thus wrong authorship...
Ingo
Re: [PATCH 22/35] cpumask: deprecate any_online_cpu() in favour of cpumask_any/cpumask_any_and From: Rusty Russell <[email protected]>
Quoted 10 lines · Ingo Molnar
Quoted 5 lines · Mike Travis
any_online_cpu()is a good name, but it takes acpumask_t, not a pointer.Signed-off-by Rusty Russell <[email protected]>Signed-off-by Mike Travis <[email protected]>almost all the patches have a missing \n and thus wrong authorship...
ok, i fixed them up.
Ingo
Re: [PATCH 22/35] cpumask: deprecate any_online_cpu() in favour of cpumask_any/cpumask_any_and From: Rusty Russell <[email protected]>
In reply to Ingo MolnarQuoted 11 lines · Ingo Molnar
Quoted 5 lines · Mike Travis
any_online_cpu()is a good name, but it takes acpumask_t, not a pointer.Signed-off-by Rusty Russell <[email protected]>Signed-off-by Mike Travis <[email protected]>almost all the patches have a missing \n and thus wrong authorship...
Ingo
Hmm, that's strange. It might be the way quilt mail gathers everything up into mbox format. I'll experiment a little bit to see what's causing it. (This is the first time I've used the From: line as well as subject lines w/o Subject: preceeding them.)
Thanks,
Mike
PATCH 23/35 cpumask: cpumask_any_but() From: Rusty Russell <[email protected]>
In reply to Mike TravisThere's a common case where we want any online cpu except a particular one. This creates a helper to do that, otherwise we need a temp var and cpumask_andnot().
--- include/linux/cpumask.h | 3 +++ lib/cpumask.c | 10 ++++++++++ 2 files changed, 13 insertions(+)
include/linux/cpumask.h +3 -0
@@ -110,6 +110,7 @@* * int cpumask_any(mask) Any cpu in mask * int cpumask_any_and(mask1,mask2) Any cpu in both masks +* int cpumask_any_but(mask,cpu) Any cpu in mask except cpu * * for_each_possible_cpu(cpu) for-loop cpu over cpu_possible_map * for_each_online_cpu(cpu) for-loop cpu over cpu_online_map
@@ -451,6 +452,7 @@ extern cpumask_t cpu_mask_all;#define cpumask_first (src) ({ (void)(src); 0; })#define cpumask_next (n, src) ({ (void)(src); 1; })#define cpumask_next_and (n, srcp, andp) ({ (void)(srcp), (void)(andp); 1; }) +#define cpumask_any_but (mask, cpu) ({ (void)(mask); (void)(cpu); 0; })#define for_each_cpu (cpu, mask) \ for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
@@ -462,6 +464,7 @@ extern cpumask_t cpu_mask_all;int cpumask_first (const cpumask_t *srcp);int cpumask_next (int n,const cpumask_t *srcp);int cpumask_next_and (int n,const cpumask_t *srcp,const cpumask_t *andp); +int cpumask_any_but (const struct cpumask *mask,unsigned int cpu);#define for_each_cpu (cpu, mask) \ for ((cpu) = -1; \
lib/cpumask.c +10 -0
@@ -24,6 +24,16 @@ int cpumask_next_and(int n, const cpumas }EXPORT_SYMBOL (cpumask_next_and); +int cpumask_any_but (const struct cpumask *mask,unsigned int cpu) +{ +unsigned int i; + +for_each_cpu (i, mask) +if (i != cpu) +break ; +return i; +} +/* These are not inline because of header tangles. */ #ifdef CONFIG_CPUMASK_OFFSTACK bool alloc_cpumask_var (cpumask_var_t *mask,gfp_t flags)
Re: [PATCH 23/35] cpumask: cpumask_any_but() From: Rusty Russell <[email protected]>
lib/cpumask.c int cpumask_next_and(int n, const cpumas · line 37
Quoted 11 lines · Mike Travis
lib/cpumask.c +10
-0+int cpumask_any_but (const struct cpumask *mask,unsigned int cpu) +{ +unsigned int i; + +for_each_cpu (i, mask) +if (i != cpu) +break ; +return i; +} +/* These are not inline because of header tangles. */
i've added a missing export here.
Ingo
PATCH 24/35 cpumask: Deprecate CPUMASK_ALLOC etc in favor of cpumask_var_t. From: Rusty Russell <[email protected]>
In reply to Mike TravisRemove CPUMASK_ALLOC() in favor of alloc_cpumask_var().
--- include/linux/cpumask.h | 46 ++++++++-------------------------------------- 1 file changed, 8 insertions(+), 38 deletions(-)
include/linux/cpumask.h +8 -38
@@ -57,35 +57,6 @@* CPU_MASK_NONE Initializer - no bits set * unsigned long *cpumask_bits(mask) Array of unsigned long's in mask * -* CPUMASK_ALLOC kmalloc's a structure that is a composite of many cpumask_t -* variables, and CPUMASK_PTR provides pointers to each field. -* -* The structure should be defined something like this: -* struct my_cpumasks { -* cpumask_t mask1; -* cpumask_t mask2; -* }; -* -* Usage is then: -* CPUMASK_ALLOC(my_cpumasks); -* CPUMASK_PTR(mask1, my_cpumasks); -* CPUMASK_PTR(mask2, my_cpumasks); -* -* --- DO NOT reference cpumask_t pointers until this check --- -* if (my_cpumasks == NULL) -* "kmalloc failed"... -* -* References are now pointers to the cpumask_t variables (*mask1, ...) -* -*if NR_CPUS > BITS_PER_LONG -* CPUMASK_ALLOC(m) Declares and allocates struct m *m = -* kmalloc(sizeof(*m), GFP_KERNEL) -* CPUMASK_FREE(m) Macro for kfree(m) -*else -* CPUMASK_ALLOC(m) Declares struct m _m, *m = &_m -* CPUMASK_FREE(m) Nop -*endif -* CPUMASK_PTR(v, m) Declares cpumask_t *v = &(m->v) * ------------------------------------------------------------------------ * * int cpumask_scnprintf(buf, len, mask) Format cpumask for printing
@@ -183,6 +154,14 @@ extern cpumask_t _unused_cpumask_arg_;#define first_cpu (src) cpumask_first(&(src))#define next_cpu (n, src) cpumask_next((n), &(src))#define any_online_cpu (mask) cpumask_any_and(&(mask), &cpu_online_map) +#if NR_CPUS >BITS_PER_LONG +#define CPUMASK_ALLOC (m) struct m *m = kmalloc(sizeof(*m), GFP_KERNEL) +#define CPUMASK_FREE (m) kfree(m) +#else +#define CPUMASK_ALLOC (m) struct m _m, *m = &_m +#define CPUMASK_FREE (m) +#endif +#define CPUMASK_PTR (v, m) cpumask_t *v = &(m->v)/* End deprecated region. */ #if NR_CPUS >1
@@ -438,15 +417,6 @@ extern cpumask_t cpu_mask_all; [0] = 1UL \ } } -#if NR_CPUS >BITS_PER_LONG -#define CPUMASK_ALLOC (m) struct m *m = kmalloc(sizeof(*m), GFP_KERNEL) -#define CPUMASK_FREE (m) kfree(m) -#else -#define CPUMASK_ALLOC (m) struct m _m, *m = &_m -#define CPUMASK_FREE (m) -#endif -#define CPUMASK_PTR (v, m) cpumask_t *v = &(m->v) -#if NR_CPUS ==1 #define cpumask_first (src) ({ (void)(src); 0; })
PATCH 25/35 cpumask: get rid of boutique sched.c allocations, use cpumask_var_t. From: Rusty Russell <[email protected]>
In reply to Mike TravisUsing lots of allocs rather than one big alloc is less efficient, but who cares for this setup function?
--- kernel/sched.c | 133 ++++++++++++++++++++++++--------------------------------- 1 file changed, 56 insertions(+), 77 deletions(-)
kernel/sched.c +56 -77
@@ -7292,40 +7292,6 @@ SD_INIT_FUNC(CPU) SD_INIT_FUNC(MC)#endif -/* -* To minimize stack usage kmalloc room for cpumasks and share the -* space as the usage in build_sched_domains() dictates. Used only -* if the amount of space is significant. -*/ -struct allmasks { -cpumask_t tmpmask;/* make this one first */ -union { -cpumask_t nodemask; -cpumask_t this_sibling_map; -cpumask_t this_core_map; - }; -cpumask_t send_covered; - -#ifdef CONFIG_NUMA -cpumask_t domainspan; -cpumask_t covered; -cpumask_t notcovered; -#endif -}; - -#if NR_CPUS >128 -#define SCHED_CPUMASK_ALLOC 1 -#define SCHED_CPUMASK_FREE (v) kfree(v) -#define SCHED_CPUMASK_DECLARE (v) struct allmasks *v -#else -#define SCHED_CPUMASK_ALLOC 0 -#define SCHED_CPUMASK_FREE (v) -#define SCHED_CPUMASK_DECLARE (v) struct allmasks _v, *v = &_v -#endif - -#define SCHED_CPUMASK_VAR (v, a) cpumask_t *v = (cpumask_t *) \ - ((unsigned long)(a) + offsetof(struct allmasks, v)) -static int default_relax_domain_level =-1 ;static int __init setup_relax_domain_level (char *str)
@@ -7368,14 +7334,35 @@ static void set_domain_attribute(structstatic int __build_sched_domains (const cpumask_t *cpu_map,struct sched_domain_attr *attr) { -int i; +int i, err = -ENOMEM ;struct root_domain *rd; -SCHED_CPUMASK_DECLARE (allmasks); -cpumask_t *tmpmask; +cpumask_var_t nodemask, this_sibling_map, this_core_map, send_covered, + tmpmask;#ifdef CONFIG_NUMA +cpumask_var_t domainspan, covered, notcovered;struct sched_group **sched_group_nodes =NULL ;int sd_allnodes =0 ; +if (!alloc_cpumask_var (&domainspan,GFP_KERNEL )) + goto out; +if (!alloc_cpumask_var (&covered,GFP_KERNEL )) + goto free_domainspan; +if (!alloc_cpumask_var (¬covered,GFP_KERNEL )) + goto free_covered; +#endif + +if (!alloc_cpumask_var (&nodemask,GFP_KERNEL )) + goto free_notcovered; +if (!alloc_cpumask_var (&this_sibling_map,GFP_KERNEL )) + goto free_nodemask; +if (!alloc_cpumask_var (&this_core_map,GFP_KERNEL )) + goto free_this_sibling_map; +if (!alloc_cpumask_var (&send_covered,GFP_KERNEL )) + goto free_this_core_map; +if (!alloc_cpumask_var (&tmpmask,GFP_KERNEL )) + goto free_send_covered; + +#ifdef CONFIG_NUMA /* * Allocate the per-node list of sched groups */
@@ -7383,34 +7370,16 @@ static int __build_sched_domains(const c GFP_KERNEL);if (!sched_group_nodes) {printk (KERN_WARNING "Can not alloc sched group node list\n" ); -return -ENOMEM ; + goto free_tmpmask; }#endif rd =alloc_rootdomain ();if (!rd) {printk (KERN_WARNING "Cannot alloc root domain\n" ); -#ifdef CONFIG_NUMA -kfree (sched_group_nodes); -#endif -return -ENOMEM ; + goto free_sched_groups; } -#if SCHED_CPUMASK_ALLOC -/* get space for all scratch cpumask variables */ - allmasks =kmalloc (sizeof (*allmasks),GFP_KERNEL ); -if (!allmasks) { -printk (KERN_WARNING "Cannot alloc cpumask array\n" ); -kfree (rd); -#ifdef CONFIG_NUMA -kfree (sched_group_nodes); -#endif -return -ENOMEM ; - } -#endif - tmpmask = (cpumask_t *)allmasks; - -#ifdef CONFIG_NUMA sched_group_nodes_bycpu[first_cpu (*cpu_map)] = sched_group_nodes;#endif
@@ -7420,7 +7389,6 @@ static int __build_sched_domains(const c*/ for_each_cpu (i, cpu_map) {struct sched_domain *sd =NULL , *p; -SCHED_CPUMASK_VAR (nodemask, allmasks); *nodemask =node_to_cpumask (cpu_to_node (i));cpus_and (*nodemask, *nodemask, *cpu_map);
@@ -7486,9 +7454,6 @@ static int __build_sched_domains(const c#ifdef CONFIG_SCHED_SMT /* Set up CPU (sibling) groups */ for_each_cpu (i, cpu_map) { -SCHED_CPUMASK_VAR (this_sibling_map, allmasks); -SCHED_CPUMASK_VAR (send_covered, allmasks); - *this_sibling_map =per_cpu (cpu_sibling_map, i);cpus_and (*this_sibling_map, *this_sibling_map, *cpu_map);if (i !=first_cpu (*this_sibling_map))
@@ -7503,9 +7468,6 @@ static int __build_sched_domains(const c#ifdef CONFIG_SCHED_MC /* Set up multi-core groups */ for_each_cpu (i, cpu_map) { -SCHED_CPUMASK_VAR (this_core_map, allmasks); -SCHED_CPUMASK_VAR (send_covered, allmasks); - *this_core_map =cpu_coregroup_map (i);cpus_and (*this_core_map, *this_core_map, *cpu_map);if (i !=first_cpu (*this_core_map))
@@ -7519,9 +7481,6 @@ static int __build_sched_domains(const c/* Set up physical groups */ for (i =0 ; i < nr_node_ids; i++) { -SCHED_CPUMASK_VAR (nodemask, allmasks); -SCHED_CPUMASK_VAR (send_covered, allmasks); - *nodemask =node_to_cpumask (i);cpus_and (*nodemask, *nodemask, *cpu_map);if (cpus_empty (*nodemask))
@@ -7535,8 +7494,6 @@ static int __build_sched_domains(const c#ifdef CONFIG_NUMA /* Set up node groups */ if (sd_allnodes) { -SCHED_CPUMASK_VAR (send_covered, allmasks); -init_sched_build_groups (cpu_map, cpu_map, &cpu_to_allnodes_group, send_covered, tmpmask);
@@ -7545,9 +7502,6 @@ static int __build_sched_domains(const cfor (i =0 ; i < nr_node_ids; i++) {/* Set up node groups */ struct sched_group *sg, *prev; -SCHED_CPUMASK_VAR (nodemask, allmasks); -SCHED_CPUMASK_VAR (domainspan, allmasks); -SCHED_CPUMASK_VAR (covered, allmasks);int j; *nodemask =node_to_cpumask (i);
@@ -7582,7 +7536,6 @@ static int __build_sched_domains(const c prev = sg;for (j =0 ; j < nr_node_ids; j++) { -SCHED_CPUMASK_VAR (notcovered, allmasks);int n = (i + j) % nr_node_ids;node_to_cpumask_ptr (pnodemask, n);
@@ -7661,14 +7614,40 @@ static int __build_sched_domains(const ccpu_attach_domain (sd, rd, i); } -SCHED_CPUMASK_FREE ((void *)allmasks); -return 0 ; + err =0 ; + +free_tmpmask: +free_cpumask_var (tmpmask); +free_send_covered: +free_cpumask_var (send_covered); +free_this_core_map: +free_cpumask_var (this_core_map); +free_this_sibling_map: +free_cpumask_var (this_sibling_map); +free_nodemask: +free_cpumask_var (nodemask); +free_notcovered: +#ifdef CONFIG_NUMA +free_cpumask_var (notcovered ); +free_covered: +free_cpumask_var (covered); +free_domainspan: +free_cpumask_var (domainspan); +out: +#endif +return err; + +free_sched_groups: +#ifdef CONFIG_NUMA +kfree (sched_group_nodes ); +#endif + goto free_tmpmask;#ifdef CONFIG_NUMA error:free_sched_groups (cpu_map, tmpmask); -SCHED_CPUMASK_FREE ((void *)allmasks); -return -ENOMEM ; +kfree (rd); + goto free_tmpmask;#endif }
PATCH 26/35 cpumask: to_cpumask() From: Rusty Russell <[email protected]>
In reply to Mike TravisThere are times when we really want a static cpumask. Yet we don't want to expose the struct cpumask definition, to avoid casual on-stack usage and assignment.
So this macro allows you to do DECLARE_BITMAP(map, CONFIG_NR_CPUS); then use to_cpumask() to turn it into a cpumask as needed.
Ugly? Yes, but as we move to fewer static cpumasks these calls vanish.
--- include/linux/cpumask.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
include/linux/cpumask.h +14 -0
@@ -57,6 +57,9 @@* CPU_MASK_NONE Initializer - no bits set * unsigned long *cpumask_bits(mask) Array of unsigned long's in mask * +* struct cpumask *to_cpumask(const unsigned long[]) +* Convert a bitmap to a cpumask. +* * ------------------------------------------------------------------------ * * int cpumask_scnprintf(buf, len, mask) Format cpumask for printing
@@ -365,6 +368,17 @@ static inline void cpumask_copy(struct c#define cpumask_any (srcp) cpumask_first(srcp)#define cpumask_any_and (mask1, mask2) cpumask_first_and((mask1), (mask2)) +/* Used for static bitmaps of CONFIG_NR_CPUS bits. Must be a constant to use +* as an initializer. */ +#define to_cpumask (bitmap) \ + ((struct cpumask *)(1 ? (bitmap) \ + : (void *)sizeof(__check_is_bitmap(bitmap)))) + +static inline int __check_is_bitmap (const unsigned long *bitmap) +{ +return 1 ; +} +/* * Special-case data structure for "single bit set only" constant CPU masks. *
PATCH 27/35 cpumask: accessors to manipulate possible/present/online/active maps From: Rusty Russell <[email protected]>
In reply to Mike TravisSince we are moving to const cpumask pointers for the maps, we need a way to legitimately access them. Simple accessors work well.
--- include/linux/cpumask.h | 9 +++++++++ kernel/cpu.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+)
include/linux/cpumask.h +9 -0
@@ -586,6 +586,15 @@ extern cpumask_t cpu_active_map;#define cpu_active (cpu) ((cpu) == 0)#endif +/* Wrappers to manipulate otherwise-constant masks. */ +void set_cpu_possible (unsigned int cpu,bool possible); +void set_cpu_present (unsigned int cpu,bool present); +void set_cpu_online (unsigned int cpu,bool online); +void set_cpu_active (unsigned int cpu,bool active); +void init_cpu_present (const struct cpumask *src); +void init_cpu_possible (const struct cpumask *src); +void init_cpu_online (const struct cpumask *src); +#define cpu_is_offline (cpu) unlikely(!cpu_online(cpu))#define for_each_possible_cpu (cpu) for_each_cpu((cpu), &cpu_possible_map)
kernel/cpu.c +41 -0
44 lines not on this page · raw message
Re: [PATCH 27/35] cpumask: accessors to manipulate possible/present/online/active maps From: Rusty Russell <[email protected]>
kernel/cpu.c const unsigned long cpu_bit_bitmap[BITS_ · line 512
Quoted 9 lines · Mike Travis
kernel/cpu.c +9
-0+void set_cpu_possible (unsigned int cpu,bool possible) +{ +if (possible) +cpumask_set_cpu (cpu, &cpu_possible_map); +else +cpumask_clear_cpu (cpu, &cpu_possible_map); +} +void set_cpu_present (unsigned int cpu,bool present) +{
i added the missing newlines between all the new function definitions.
Ingo
Re: [PATCH 27/35] cpumask: accessors to manipulate possible/present/online/active maps From: Rusty Russell <[email protected]>
Quoted 14 lines · Ingo Molnar
kernel/cpu.c const unsigned long cpu_bit_bitmap[BITS_ · line 512
Quoted 9 lines · Mike Travis
kernel/cpu.c +9
-0+void set_cpu_possible (unsigned int cpu,bool possible) +{ +if (possible) +cpumask_set_cpu (cpu, &cpu_possible_map); +else +cpumask_clear_cpu (cpu, &cpu_possible_map); +} +void set_cpu_present (unsigned int cpu,bool present) +{i added the missing newlines between all the new function definitions.
Quoted 1 line
Ingo
Thanks! I normally do this when spotting them.
PATCH 28/35 cpumask: CONFIG_BITS_ALL, CONFIG_BITS_NONE and CONFIG_BITS_CPU0 From: Rusty Russell <[email protected]>
In reply to Mike TravisSince we're now preferring raw bitmaps for (eventually rare) static cpumasks, we replace CPU_MASK_X with CPU_BITS_X.
--- include/linux/cpumask.h | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-)
include/linux/cpumask.h +24 -20
@@ -53,8 +53,9 @@* * size_t cpumask_size() Length of cpumask in bytes. * const struct cpumask *cpumask_of(cpu) Return cpumask with bit 'cpu' set -* CPU_MASK_ALL Initializer - all bits set -* CPU_MASK_NONE Initializer - no bits set +* CPU_BITS_ALL Initializer - all bits set +* CPU_BITS_NONE Initializer - no bits set +* CPU_BITS_CPU0 Initializer - first bit set * unsigned long *cpumask_bits(mask) Array of unsigned long's in mask * * struct cpumask *to_cpumask(const unsigned long[])
@@ -115,6 +116,9 @@ struct cpumask {typedef struct cpumask cpumask_t ;extern cpumask_t _unused_cpumask_arg_; +#define CPU_MASK_ALL ((cpumask_t){ CPU_BITS_ALL }) +#define CPU_MASK_NONE ((cpumask_t){ CPU_BITS_NONE }) +#define CPU_MASK_CPU0 ((cpumask_t){ CPU_BITS_CPU0 })#define cpu_set (cpu, dst) cpumask_set_cpu((cpu), &(dst))#define cpu_clear (cpu, dst) cpumask_clear_cpu((cpu), &(dst))#define cpu_test_and_set (cpu, mask) cpumask_test_and_set_cpu((cpu), &(mask))
@@ -400,20 +404,20 @@ static inline const struct cpumask *cpum#if NR_CPUS <=BITS_PER_LONG -#define CPU_MASK_ALL \ -(cpumask_t) { { \ - [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ -} } +#define CPU_BITS_ALL \ +{ \ + [BITS_TO_LONGS(CONFIG_NR_CPUS)-1] = CPU_MASK_LAST_WORD \ +}#define CPU_MASK_ALL_PTR (&CPU_MASK_ALL)#else -#define CPU_MASK_ALL \ -(cpumask_t) { { \ - [0 ... BITS_TO_LONGS(NR_CPUS)-2] = ~0UL, \ - [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ -} } +#define CPU_BITS_ALL \ +{ \ + [0 ... BITS_TO_LONGS(CONFIG_NR_CPUS)-2] = ~0UL, \ + [BITS_TO_LONGS(CONFIG_NR_CPUS)-1] = CPU_MASK_LAST_WORD \ +}/* cpu_mask_all is in init/main.c */ extern cpumask_t cpu_mask_all;
@@ -421,15 +425,15 @@ extern cpumask_t cpu_mask_all;#endif -#define CPU_MASK_NONE \ -(cpumask_t) { { \ - [0 ... BITS_TO_LONGS(NR_CPUS)-1] = 0UL \ -} } - -#define CPU_MASK_CPU0 \ -(cpumask_t) { { \ - [0] = 1UL \ -} } +#define CPU_BITS_NONE \ +{ \ + [0 ... BITS_TO_LONGS(CONFIG_NR_CPUS)-1] = 0UL \ +} + +#define CPU_BITS_CPU0 \ +{ \ + [0] = 1UL \ +}#if NR_CPUS ==1
PATCH 29/35 cpumask: switch over to cpu_online/possible/active/present_mask From: Rusty Russell <[email protected]>
In reply to Mike TravisIn order to hide the definition of struct cpumask, we need to expose only pointers. Plus, it fits the new API far better to have pointers.
This deprecates the old _map versions, and defines them in terms of the _mask versions. It also centralizes the definitions (finally!).
--- arch/alpha/kernel/smp.c | 5 -- arch/arm/kernel/smp.c | 10 ---- arch/cris/arch-v32/kernel/smp.c | 4 - arch/ia64/kernel/smpboot.c | 6 -- arch/m32r/kernel/smpboot.c | 6 -- arch/mips/kernel/smp.c | 2 arch/parisc/kernel/smp.c | 15 ------ arch/powerpc/kernel/smp.c | 4 - arch/s390/kernel/smp.c | 6 -- arch/sh/kernel/smp.c | 6 -- arch/sparc/kernel/sparc_ksyms.c | 2 include/linux/cpumask.h | 84 ++++++++++++++++++++---------------------------- kernel/cpu.c | 71 +++++++++++++++++++--------------------- 2 files changed, 70 insertions(+), 85 deletions(-)
include/linux/cpumask.h +36 -48
@@ -87,9 +87,9 @@* int cpumask_any_and(mask1,mask2) Any cpu in both masks * int cpumask_any_but(mask,cpu) Any cpu in mask except cpu * -* for_each_possible_cpu(cpu) for-loop cpu over cpu_possible_map -* for_each_online_cpu(cpu) for-loop cpu over cpu_online_map -* for_each_present_cpu(cpu) for-loop cpu over cpu_present_map +* for_each_possible_cpu(cpu) for-loop cpu over cpu_possible_mask +* for_each_online_cpu(cpu) for-loop cpu over cpu_online_mask +* for_each_present_cpu(cpu) for-loop cpu over cpu_present_mask * * Subtlety: * 1) The 'type-checked' form of cpu_isset() causes gcc (3.3.2, anyway)
@@ -160,7 +160,7 @@ extern cpumask_t _unused_cpumask_arg_; for_each_cpu_and(cpu, &(mask), &(and))#define first_cpu (src) cpumask_first(&(src))#define next_cpu (n, src) cpumask_next((n), &(src)) -#define any_online_cpu (mask) cpumask_any_and(&(mask), &cpu_online_map) +#define any_online_cpu (mask) cpumask_any_and(&(mask), cpu_online_mask)#if NR_CPUS >BITS_PER_LONG #define CPUMASK_ALLOC (m) struct m *m = kmalloc(sizeof(*m), GFP_KERNEL)#define CPUMASK_FREE (m) kfree(m)
@@ -169,6 +169,11 @@ extern cpumask_t _unused_cpumask_arg_;#define CPUMASK_FREE (m)#endif #define CPUMASK_PTR (v, m) cpumask_t *v = &(m->v) +/* These strip const, as traditionally they weren't const. */ +#define cpu_possible_map (*(cpumask_t *)cpu_possible_mask) +#define cpu_online_map (*(cpumask_t *)cpu_online_mask) +#define cpu_present_map (*(cpumask_t *)cpu_present_mask) +#define cpu_active_map (*(cpumask_t *)cpu_active_mask)/* End deprecated region. */ #if NR_CPUS >1
@@ -512,65 +517,48 @@ static inline void free_cpumask_var(cpum/* * The following particular system cpumasks and operations manage -* possible, present, active and online cpus. Each of them is a fixed size -* bitmap of size NR_CPUS. +* possible, present, active and online cpus. * -* #ifdef CONFIG_HOTPLUG_CPU -* cpu_possible_map - has bit 'cpu' set iff cpu is populatable -* cpu_present_map - has bit 'cpu' set iff cpu is populated -* cpu_online_map - has bit 'cpu' set iff cpu available to scheduler -* cpu_active_map - has bit 'cpu' set iff cpu available to migration -* #else -* cpu_possible_map - has bit 'cpu' set iff cpu is populated -* cpu_present_map - copy of cpu_possible_map -* cpu_online_map - has bit 'cpu' set iff cpu available to scheduler -* #endif -* -* In either case, NR_CPUS is fixed at compile time, as the static -* size of these bitmaps. The cpu_possible_map is fixed at boot -* time, as the set of CPU id's that it is possible might ever -* be plugged in at anytime during the life of that system boot. -* The cpu_present_map is dynamic(*), representing which CPUs -* are currently plugged in. And cpu_online_map is the dynamic -* subset of cpu_present_map, indicating those CPUs available -* for scheduling. +* cpu_possible_mask- has bit 'cpu' set iff cpu is populatable +* cpu_present_mask - has bit 'cpu' set iff cpu is populated +* cpu_online_mask - has bit 'cpu' set iff cpu available to scheduler +* cpu_active_mask - has bit 'cpu' set iff cpu available to migration +* +* If !CONFIG_HOTPLUG_CPU, present == possible, and active == online. +* +* The cpu_possible_mask is fixed at boot time, as the set of CPU id's +* that it is possible might ever be plugged in at anytime during the +* life of that system boot. The cpu_present_mask is dynamic(*), +* representing which CPUs are currently plugged in. And +* cpu_online_mask is the dynamic subset of cpu_present_mask, +* indicating those CPUs available for scheduling. * -* If HOTPLUG is enabled, then cpu_possible_map is forced to have +* If HOTPLUG is enabled, then cpu_possible_mask is forced to have * all NR_CPUS bits set, otherwise it is just the set of CPUs that * ACPI reports present at boot. * -* If HOTPLUG is enabled, then cpu_present_map varies dynamically, +* If HOTPLUG is enabled, then cpu_present_mask varies dynamically, * depending on what ACPI reports as currently plugged in, otherwise -* cpu_present_map is just a copy of cpu_possible_map. +* cpu_present_mask is just a copy of cpu_possible_mask. * -* (*) Well, cpu_present_map is dynamic in the hotplug case. If not -* hotplug, it's a copy of cpu_possible_map, hence fixed at boot. +* (*) Well, cpu_present_mask is dynamic in the hotplug case. If not +* hotplug, it's a copy of cpu_possible_mask, hence fixed at boot. * * Subtleties: * 1) UP arch's (NR_CPUS == 1, CONFIG_SMP not defined) hardcode * assumption that their single CPU is online. The UP -* cpu_{online,possible,present}_maps are placebos. Changing them +* cpu_{online,possible,present}_masks are placebos. Changing them * will have no useful affect on the following num_*_cpus() * and cpu_*() macros in the UP case. This ugliness is a UP * optimization - don't waste any instructions or memory references * asking if you're online or how many CPUs there are if there is * only one CPU. -* 2) Most SMP arch's #define some of these maps to be some -* other map specific to that arch. Therefore, the following -* must be #define macros, not inlines. To see why, examine -* the assembly code produced by the following. Note that -* set1() writes phys_x_map, but set2() writes x_map: -* int x_map, phys_x_map; -* #define set1(a) x_map = a -* inline void set2(int a) { x_map = a; } -* #define x_map phys_x_map -* main(){ set1(3); set2(5); } */ -extern cpumask_t cpu_possible_map; -extern cpumask_t cpu_online_map; -extern cpumask_t cpu_present_map; -extern cpumask_t cpu_active_map; +extern const struct cpumask *const cpu_possible_mask; +extern const struct cpumask *const cpu_online_mask; +extern const struct cpumask *const cpu_present_mask; +extern const struct cpumask *const cpu_active_mask;#if NR_CPUS >1 #define num_online_cpus () cpus_weight(cpu_online_map)
@@ -601,8 +589,8 @@ void init_cpu_online(const struct cpumas#define cpu_is_offline (cpu) unlikely(!cpu_online(cpu)) -#define for_each_possible_cpu (cpu) for_each_cpu((cpu), &cpu_possible_map) -#define for_each_online_cpu (cpu) for_each_cpu((cpu), &cpu_online_map) -#define for_each_present_cpu (cpu) for_each_cpu((cpu), &cpu_present_map) +#define for_each_possible_cpu (cpu) for_each_cpu((cpu), cpu_possible_mask) +#define for_each_online_cpu (cpu) for_each_cpu((cpu), cpu_online_mask) +#define for_each_present_cpu (cpu) for_each_cpu((cpu), cpu_present_mask)#endif /* __LINUX_CPUMASK_H */
kernel/cpu.c +34 -37
122 lines not on this page · raw message
Re: [PATCH 29/35] cpumask: switch over to cpu_online/possible/active/present_mask From: Rusty Russell <[email protected]>
--- linux-2.6.28.orig/include/linux/cpumask.h
+++ linux-2.6.28/include/linux/cpumask.h
...
+#define cpu_online_map (*(cpumask_t *)cpu_online_mask)
This bit seems to be the reason why linux-next isn't building for ia64 (tag next-20081029
and next-20081030). With this error:
Quoted 6 lines
CC
arch/ia64/kernel/asm-offsets.s
In file included frominclude/linux/smp.h:30,from include/linux/sched.h:68, from arch/ia64/kernel/asm-offsets.c:9:
arch/ia64/include/asm/smp.h:60: error: expected ')' before '*' tokenarch/ia64/include/asm/smp.h:60: error: expected ')' before 'cpu_online_mask'
Fix is trivial ... delete the declaration of cpu_online_map from arch/ia64/include/asm/smp.h
-Tony
PATCH 30/35 cpumask: cpu_all_mask and cpu_none_mask. From: Rusty Russell <[email protected]>
In reply to Mike TravisInstead of CPU_MASK_ALL_PTR and the SMP-only cpu_mask_all, this makes cpu_all_mask and cpu_none_mask which are const cpumask pointers which always exist.
--- include/linux/cpumask.h | 16 ++++++++++------ init/main.c | 7 +------ kernel/cpu.c | 3 +++ kernel/kmod.c | 2 +- kernel/kthread.c | 4 ++-- kernel/sched.c | 2 +- 6 files changed, 18 insertions(+), 16 deletions(-)
include/linux/cpumask.h +10 -6
@@ -116,6 +116,7 @@ struct cpumask {typedef struct cpumask cpumask_t ;extern cpumask_t _unused_cpumask_arg_; +#define CPU_MASK_ALL_PTR (cpu_all_mask)#define CPU_MASK_ALL ((cpumask_t){ CPU_BITS_ALL })#define CPU_MASK_NONE ((cpumask_t){ CPU_BITS_NONE })#define CPU_MASK_CPU0 ((cpumask_t){ CPU_BITS_CPU0 })
@@ -174,6 +175,7 @@ extern cpumask_t _unused_cpumask_arg_;#define cpu_online_map (*(cpumask_t *)cpu_online_mask)#define cpu_present_map (*(cpumask_t *)cpu_present_mask)#define cpu_active_map (*(cpumask_t *)cpu_active_mask) +#define cpu_mask_all (*(cpumask_t *)cpu_all_mask)/* End deprecated region. */ #if NR_CPUS >1
@@ -414,8 +416,6 @@ static inline const struct cpumask *cpum [BITS_TO_LONGS(CONFIG_NR_CPUS)-1] = CPU_MASK_LAST_WORD \ } -#define CPU_MASK_ALL_PTR (&CPU_MASK_ALL) -#else #define CPU_BITS_ALL \
@@ -424,10 +424,6 @@ static inline const struct cpumask *cpum [BITS_TO_LONGS(CONFIG_NR_CPUS)-1] = CPU_MASK_LAST_WORD \ } -/* cpu_mask_all is in init/main.c */ -extern cpumask_t cpu_mask_all; -#define CPU_MASK_ALL_PTR (&cpu_mask_all) -#endif #define CPU_BITS_NONE \
@@ -560,6 +556,14 @@ extern const struct cpumask *const cpu_oextern const struct cpumask *const cpu_present_mask;extern const struct cpumask *const cpu_active_mask; +/* It's common to want to use cpu_all_mask in struct member initializers, +* so it has to refer to an address rather than a pointer. */ +extern const DECLARE_BITMAP(cpu_all_bits, CONFIG_NR_CPUS); +#define cpu_all_mask to_cpumask(cpu_all_bits) + +/* First bits of cpu_bit_bitmap are in fact unset. */ +#define cpu_none_mask to_cpumask(cpu_bit_bitmap[0]) +#if NR_CPUS >1 #define num_online_cpus () cpus_weight(cpu_online_map)#define num_possible_cpus () cpus_weight(cpu_possible_map)
init/main.c +1 -6
@@ -368,11 +368,6 @@ static inline void smp_prepare_cpus(unsi#else -#if NR_CPUS >BITS_PER_LONG -cpumask_t cpu_mask_all__read_mostly =CPU_MASK_ALL ; -EXPORT_SYMBOL (cpu_mask_all); -#endif -/* Setup number of possible processor ids */ /* nr_cpu_ids is a real variable for SMP. */ #ifndef nr_cpu_ids
@@ -863,7 +858,7 @@ static int __init kernel_init(void * unu/* * init can run on any cpu. */ -set_cpus_allowed_ptr (current,CPU_MASK_ALL_PTR ); +set_cpus_allowed_ptr (current, cpu_all_mask);/* * Tell the world that we're going to be the grim * reaper of innocent orphaned children.
kernel/cpu.c +3 -0
@@ -498,6 +498,9 @@ static DECLARE_BITMAP(cpu_active_bits, Cconst struct cpumask *const cpu_active_mask =to_cpumask (cpu_active_bits);EXPORT_SYMBOL (cpu_active_mask); +const DECLARE_BITMAP(cpu_all_bits, CONFIG_NR_CPUS) = CPU_BITS_ALL; +EXPORT_SYMBOL (cpu_all_bits); +void set_cpu_possible (unsigned int cpu,bool possible) {if (possible)
kernel/kmod.c +1 -1
@@ -166,7 +166,7 @@ static int ____call_usermodehelper(void }/* We can run anywhere, unlike our parent keventd(). */ -set_cpus_allowed_ptr (current,CPU_MASK_ALL_PTR ); +set_cpus_allowed_ptr (current, cpu_all_mask);/* * Our parent is keventd, which runs with elevated scheduling priority.
kernel/kthread.c +2 -2
@@ -107,7 +107,7 @@ static void create_kthread(struct kthrea*/ sched_setscheduler (create->result,SCHED_NORMAL , ¶m);set_user_nice (create->result,KTHREAD_NICE_LEVEL ); -set_cpus_allowed_ptr (create->result,CPU_MASK_ALL_PTR ); +set_cpus_allowed_ptr (create->result, cpu_all_mask); }complete (&create->done); }
@@ -237,7 +237,7 @@ int kthreadd(void *unused)set_task_comm (tsk,"kthreadd" );ignore_signals (tsk);set_user_nice (tsk,KTHREAD_NICE_LEVEL ); -set_cpus_allowed_ptr (tsk,CPU_MASK_ALL_PTR ); +set_cpus_allowed_ptr (tsk, cpu_all_mask); current->flags |=PF_NOFREEZE |PF_FREEZER_NOSIG ;
kernel/sched.c +1 -1
@@ -6167,7 +6167,7 @@ static void move_task_off_dead_cpu(int d*/ static void migrate_nr_uninterruptible (struct rq *rq_src) { -struct rq *rq_dest =cpu_rq (any_online_cpu (*CPU_MASK_ALL_PTR )); +struct rq *rq_dest =cpu_rq (cpumask_any (cpu_online_mask));unsigned long flags;local_irq_save (flags);
PATCH 31/35 cpumask: reorder header to minimize separate #ifdefs From: Rusty Russell <[email protected]>
In reply to Mike Traviscpumask.h is pretty chaotic. Now we've replaced most of it, let's group things together a bit better.
--- include/linux/cpumask.h | 166 +++++++++++++++++++++--------------------------- 1 file changed, 76 insertions(+), 90 deletions(-)
include/linux/cpumask.h +76 -90
@@ -110,10 +110,82 @@ struct cpumask { };#define cpumask_bits (maskp) ((maskp)->bits) -#define cpumask_size () (BITS_TO_LONGS(nr_cpumask_bits) * sizeof(long)) +/* Deprecated: use struct cpumask *, or cpumask_var_t. */ +typedef struct cpumask cpumask_t ; + +#if CONFIG_NR_CPUS ==1 +/* Uniprocesor. */ +#define cpumask_first (src) ({ (void)(src); 0; }) +#define cpumask_next (n, src) ({ (void)(src); 1; }) +#define cpumask_next_and (n, srcp, andp) ({ (void)(srcp), (void)(andp); 1; }) +#define cpumask_any_but (mask, cpu) ({ (void)(mask); (void)(cpu); 0; }) + +#define for_each_cpu (cpu, mask) \ + for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask) +#define for_each_cpu_and (cpu, mask, and) \ + for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask, (void)and) + +#define num_online_cpus () 1 +#define num_possible_cpus () 1 +#define num_present_cpus () 1 +#define cpu_online (cpu) ((cpu) == 0) +#define cpu_possible (cpu) ((cpu) == 0) +#define cpu_present (cpu) ((cpu) == 0) +#define cpu_active (cpu) ((cpu) == 0) +#define nr_cpu_ids 1 +#else +/* SMP */ +extern int nr_cpu_ids; + +int cpumask_first (const cpumask_t *srcp); +int cpumask_next (int n,const cpumask_t *srcp); +int cpumask_next_and (int n,const cpumask_t *srcp,const cpumask_t *andp); +int cpumask_any_but (const struct cpumask *mask,unsigned int cpu); + +#define for_each_cpu (cpu, mask) \ + for ((cpu) = -1; \ + (cpu) = cpumask_next((cpu), (mask)), \ + (cpu) < nr_cpu_ids;) +#define for_each_cpu_and (cpu, mask, and) \ + for ((cpu) = -1; \ + (cpu) = cpumask_next_and((cpu), (mask), (and)), \ + (cpu) < nr_cpu_ids;) + +#define num_online_cpus () cpus_weight(cpu_online_map) +#define num_possible_cpus () cpus_weight(cpu_possible_map) +#define num_present_cpus () cpus_weight(cpu_present_map) +#define cpu_online (cpu) cpu_isset((cpu), cpu_online_map) +#define cpu_possible (cpu) cpu_isset((cpu), cpu_possible_map) +#define cpu_present (cpu) cpu_isset((cpu), cpu_present_map) +#define cpu_active (cpu) cpu_isset((cpu), cpu_active_map) +#endif /* SMP */ + +#if CONFIG_NR_CPUS <=BITS_PER_LONG +#define CPU_BITS_ALL \ +{ \ + [BITS_TO_LONGS(CONFIG_NR_CPUS)-1] = CPU_MASK_LAST_WORD \ +} + +/* This produces more efficient code. */ +#define nr_cpumask_bits NR_CPUS + +#else /* CONFIG_NR_CPUS > BITS_PER_LONG */ + +#define CPU_BITS_ALL \ +{ \ + [0 ... BITS_TO_LONGS(CONFIG_NR_CPUS)-2] = ~0UL, \ + [BITS_TO_LONGS(CONFIG_NR_CPUS)-1] = CPU_MASK_LAST_WORD \ +} + +#define nr_cpumask_bits nr_cpu_ids +#endif /* CONFIG_NR_CPUS > BITS_PER_LONG */ + +static inline size_t cpumask_size (void ) +{ +return BITS_TO_LONGS (nr_cpumask_bits) *sizeof (long ); +}/* Deprecated. */ -typedef struct cpumask cpumask_t ;extern cpumask_t _unused_cpumask_arg_;#define CPU_MASK_ALL_PTR (cpu_all_mask)
@@ -178,21 +250,7 @@ extern cpumask_t _unused_cpumask_arg_;#define cpu_mask_all (*(cpumask_t *)cpu_all_mask)/* End deprecated region. */ -#if NR_CPUS >1 -/* Starts at NR_CPUS until we know better. */ -extern int nr_cpu_ids; -#else -#define nr_cpu_ids NR_CPUS -#endif - -/* The number of bits to hand to the bitmask ops. */ -#if NR_CPUS <=BITS_PER_LONG -/* This produces more efficient code. */ -#define nr_cpumask_bits NR_CPUS -#else -#define nr_cpumask_bits nr_cpu_ids -#endif - +/* cpumask_* operators */ static inline void cpumask_set_cpu (int cpu,volatile struct cpumask *dstp) {set_bit (cpu,cpumask_bits (dstp));
@@ -407,24 +465,7 @@ static inline const struct cpumask *cpumreturn (const struct cpumask *)p; } -#define CPU_MASK_LAST_WORD BITMAP_LAST_WORD_MASK(NR_CPUS) - -#if NR_CPUS <=BITS_PER_LONG - -#define CPU_BITS_ALL \ -{ \ - [BITS_TO_LONGS(CONFIG_NR_CPUS)-1] = CPU_MASK_LAST_WORD \ -} - -#else - -#define CPU_BITS_ALL \ -{ \ - [0 ... BITS_TO_LONGS(CONFIG_NR_CPUS)-2] = ~0UL, \ - [BITS_TO_LONGS(CONFIG_NR_CPUS)-1] = CPU_MASK_LAST_WORD \ -} - -#endif +#define CPU_MASK_LAST_WORD BITMAP_LAST_WORD_MASK(CONFIG_NR_CPUS)#define CPU_BITS_NONE \ { \
@@ -436,43 +477,6 @@ static inline const struct cpumask *cpum [0] = 1UL \ } -#if NR_CPUS ==1 - -#define cpumask_first (src) ({ (void)(src); 0; }) -#define cpumask_next (n, src) ({ (void)(src); 1; }) -#define cpumask_next_and (n, srcp, andp) ({ (void)(srcp), (void)(andp); 1; }) -#define cpumask_any_but (mask, cpu) ({ (void)(mask); (void)(cpu); 0; }) - -#define for_each_cpu (cpu, mask) \ - for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask) -#define for_each_cpu_and (cpu, mask, and) \ - for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask, (void)and) - -#else /* NR_CPUS > 1 */ - -int cpumask_first (const cpumask_t *srcp); -int cpumask_next (int n,const cpumask_t *srcp); -int cpumask_next_and (int n,const cpumask_t *srcp,const cpumask_t *andp); -int cpumask_any_but (const struct cpumask *mask,unsigned int cpu); - -#define for_each_cpu (cpu, mask) \ - for ((cpu) = -1; \ - (cpu) = cpumask_next((cpu), (mask)), \ - (cpu) < nr_cpu_ids;) -#define for_each_cpu_and (cpu, mask, and) \ - for ((cpu) = -1; \ - (cpu) = cpumask_next_and((cpu), (mask), (and)), \ - (cpu) < nr_cpu_ids;) - -#define num_online_cpus () cpus_weight(cpu_online_map) -#define num_possible_cpus () cpus_weight(cpu_possible_map) -#define num_present_cpus () cpus_weight(cpu_present_map) -#define cpu_online (cpu) cpu_isset((cpu), cpu_online_map) -#define cpu_possible (cpu) cpu_isset((cpu), cpu_possible_map) -#define cpu_present (cpu) cpu_isset((cpu), cpu_present_map) -#define cpu_active (cpu) cpu_isset((cpu), cpu_active_map) -#endif /* NR_CPUS */ -#define cpumask_first_and (mask, and) cpumask_next_and(-1, (mask), (and))/*
@@ -564,24 +568,6 @@ extern const DECLARE_BITMAP(cpu_all_bits/* First bits of cpu_bit_bitmap are in fact unset. */ #define cpu_none_mask to_cpumask(cpu_bit_bitmap[0]) -#if NR_CPUS >1 -#define num_online_cpus () cpus_weight(cpu_online_map) -#define num_possible_cpus () cpus_weight(cpu_possible_map) -#define num_present_cpus () cpus_weight(cpu_present_map) -#define cpu_online (cpu) cpu_isset((cpu), cpu_online_map) -#define cpu_possible (cpu) cpu_isset((cpu), cpu_possible_map) -#define cpu_present (cpu) cpu_isset((cpu), cpu_present_map) -#define cpu_active (cpu) cpu_isset((cpu), cpu_active_map) -#else -#define num_online_cpus () 1 -#define num_possible_cpus () 1 -#define num_present_cpus () 1 -#define cpu_online (cpu) ((cpu) == 0) -#define cpu_possible (cpu) ((cpu) == 0) -#define cpu_present (cpu) ((cpu) == 0) -#define cpu_active (cpu) ((cpu) == 0) -#endif -/* Wrappers to manipulate otherwise-constant masks. */ void set_cpu_possible (unsigned int cpu,bool possible);void set_cpu_present (unsigned int cpu,bool present);
PATCH 32/35 cpumask: debug options for cpumasks From: Rusty Russell <[email protected]>
In reply to Mike TravisIt's useful to check that no one is accessing > nr_cpumask_bits for cpumasks. This also allows you to turn on CONFIG_CPUMASKS_OFFSTACK even for smaller CONFIG_NR_CPUS.
--- include/linux/cpumask.h | 23 +++++++++++++++++------ lib/Kconfig.debug | 6 ++++++ lib/cpumask.c | 3 +++ 3 files changed, 26 insertions(+), 6 deletions(-)
include/linux/cpumask.h +17 -6
@@ -250,23 +250,34 @@ extern cpumask_t _unused_cpumask_arg_;#define cpu_mask_all (*(cpumask_t *)cpu_all_mask)/* End deprecated region. */ +/* verify cpu argument to cpumask_* operators */ +static inline unsigned int cpumask_check (unsigned int cpu) +{ +#ifdef CONFIG_DEBUG_PER_CPU_MAPS +/* This breaks at runtime. */ +BUG_ON (cpu >= nr_cpumask_bits); +#endif /* CONFIG_DEBUG_PER_CPU_MAPS */ +return cpu; +} +/* cpumask_* operators */ static inline void cpumask_set_cpu (int cpu,volatile struct cpumask *dstp) { -set_bit (cpu,cpumask_bits (dstp)); +set_bit (cpumask_check (cpu),cpumask_bits (dstp)); }static inline void cpumask_clear_cpu (int cpu,volatile struct cpumask *dstp) { -clear_bit (cpu,cpumask_bits (dstp)); +clear_bit (cpumask_check (cpu),cpumask_bits (dstp)); }/* No static inline type checking - see Subtlety (1) above. */ -#define cpumask_test_cpu (cpu, cpumask) test_bit((cpu), (cpumask)->bits) +#define cpumask_test_cpu (cpu, cpumask) \ + test_bit(cpumask_check(cpu), (cpumask)->bits)static inline int cpumask_test_and_set_cpu (int cpu,struct cpumask *addr) { -return test_and_set_bit (cpu,cpumask_bits (addr)); +return test_and_set_bit (cpumask_check (cpu),cpumask_bits (addr)); }static inline void cpumask_setall (struct cpumask *dstp)
@@ -400,8 +411,8 @@ static inline int cpumask_cpuremap(int oconst struct cpumask *oldp, const struct cpumask *newp) { - return bitmap_bitremap(oldbit, cpumask_bits(oldp), cpumask_bits(newp), -nr_cpumask_bits ); + return bitmap_bitremap(cpumask_check(oldbit), cpumask_bits(oldp), +cpumask_bits (newp ),nr_cpumask_bits ); } static inline void cpumask_remap(struct cpumask *dstp,
lib/Kconfig.debug +6 -0
@@ -784,6 +784,12 @@ config SYSCTL_SYSCALL_CHECK to properly maintain and use. This enables checks that help you to keep things correct. +config DEBUG_PER_CPU_MAPS + bool "Cpumask debug checks" + ---help--- + Extra debugging for cpumasks. + eg. to make sure accesses to cpumasks are < nr_cpu_ids. + source kernel/trace/Kconfig config PROVIDE_OHCI1394_DMA_INIT
lib/cpumask.c +3 -0
@@ -11,6 +11,9 @@ EXPORT_SYMBOL(cpumask_first);int cpumask_next (int n,const cpumask_t *srcp) { +/* -1 is a legal arg here. */ +if (n !=-1 ) +cpumask_check (n);return find_next_bit (cpumask_bits (srcp), nr_cpumask_bits, n+1 ); }EXPORT_SYMBOL (cpumask_next);
PATCH 33/35 cpumask: smp_call_function_many() From: Rusty Russell <[email protected]>
In reply to Mike TravisTransition from cpumask_t-taking smp_call_function_mask() to a new smp_call_function_many() which takes a struct cpumask *.
(Naming is inspired by smp_call_function_single).
Note that the new one returns void: the old one couldn't fail either unless there was a logic bug.
--- arch/s390/include/asm/smp.h | 3 -- arch/s390/kernel/smp.c | 30 +++++++++++--------- include/linux/smp.h | 13 +++++++- kernel/smp.c | 66 ++++++++++++++++++++++++-------------------- 4 files changed, 64 insertions(+), 48 deletions(-)
arch/s390/include/asm/smp.h +0 -3
@@ -90,9 +90,6 @@ extern int __cpu_up (unsigned int cpu);extern struct mutex smp_cpu_state_mutex;extern int smp_cpu_polarization[]; - -extern int smp_call_function_mask (cpumask_t mask,void (*func)(void *), -void *info,int wait);#endif #ifndef CONFIG_SMP
arch/s390/kernel/smp.c +17 -13
@@ -103,7 +103,7 @@ static void do_call_function(void) }static void __smp_call_function_map (void (*func) (void *info),void *info, -int wait,cpumask_t map) +int wait,struct cpumask *map) {struct call_data_struct data;int cpu, local =0 ;
@@ -163,14 +163,16 @@ out:* You must not call this function with disabled interrupts, from a * hardware interrupt handler or from a bottom half. */ + +/* protected by call_lock */ +static DEFINE_BITMAP(smp_call_map, CONFIG_NR_CPUS); +int smp_call_function (void (*func) (void *info),void *info,int wait) { -cpumask_t map; -spin_lock (&call_lock); - map = cpu_online_map; -cpu_clear (smp_processor_id (), map); -__smp_call_function_map (func, info, wait, map); +cpumask_copy (to_cpumask (smp_call_map), cpu_online_mask); +cpumask_clear_cpu (smp_processor_id (),to_cpumask (smp_call_map)); +__smp_call_function_map (func, info, wait,to_cpumask (smp_call_map));spin_unlock (&call_lock);return 0 ; }
@@ -192,14 +194,15 @@ int smp_call_function_single(int cpu, vo int wait) {spin_lock (&call_lock); -__smp_call_function_map (func, info, wait,cpumask_of_cpu (cpu)); +cpumask_copy (to_cpumask (smp_call_map),cpumask_of (cpu)); +__smp_call_function_map (func, info, wait,cpumask_of (cpu));spin_unlock (&call_lock);return 0 ; }EXPORT_SYMBOL (smp_call_function_single);/** -* smp_call_function_mask(): Run a function on a set of other CPUs. +* smp_call_function_many(): Run a function on a set of other CPUs. * @mask: The set of cpus to run on. Must not include the current cpu. * @func: The function to run. This must be fast and non-blocking. * @info: An arbitrary pointer to pass to the function.
@@ -213,16 +216,17 @@ EXPORT_SYMBOL(smp_call_function_single);* You must not call this function with disabled interrupts or from a * hardware interrupt handler or from a bottom half handler. */ -int smp_call_function_mask (cpumask_t mask,void (*func)(void *),void *info, -int wait) +int smp_call_function_many (const struct cpumask *mask, +void (*func)(void *),void *info,bool wait) {spin_lock (&call_lock); -cpu_clear (smp_processor_id (), mask); -__smp_call_function_map (func, info, wait, mask); +cpumask_copy (to_cpumask (smp_call_map), cpu_online_mask); +cpumask_clear_cpu (smp_processor_id (),to_cpumask (smp_call_map)); +__smp_call_function_map (func, info, wait,to_cpumask (smp_call_map));spin_unlock (&call_lock);return 0 ; } -EXPORT_SYMBOL (smp_call_function_mask); +EXPORT_SYMBOL (smp_call_function_many);void smp_send_stop (void ) {
include/linux/smp.h +11 -2
@@ -64,12 +64,21 @@ extern void smp_cpus_done(unsigned int m* Call a function on all other processors */ int smp_call_function (void (*func)(void *info),void *info,int wait); -int smp_call_function_mask (cpumask_t mask,void (*func)(void *info),void *info, -int wait); +void smp_call_function_many (const struct cpumask *mask, +void (*func)(void *info),void *info,bool wait);int smp_call_function_single (int cpuid,void (*func) (void *info),void *info,int wait);void __smp_call_function_single (int cpuid,struct call_single_data *data); +/* Use smp_call_function_many, which takes a pointer to the mask. */ +static inline int __deprecated +smp_call_function_mask (cpumask_t mask,void (*func)(void *info),void *info, +int wait) +{ +smp_call_function_many (&mask, func, info, wait); +return 0 ; +} +/* * Generic and arch helpers */
kernel/smp.c +36 -30
166 lines not on this page · raw message
PATCH 34/35 cpumask: Use accessors code. From: Rusty Russell <[email protected]>
In reply to Mike TravisUse the accessors rather than frobbing bits directly. Most of this is in arch code I haven't even compiled, but it is mostly straightforward.
--- arch/alpha/kernel/process.c | 4 +-- arch/alpha/kernel/smp.c | 7 +++--- arch/arm/kernel/smp.c | 6 ++--- arch/arm/mach-realview/platsmp.c | 4 +-- arch/cris/arch-v32/kernel/smp.c | 10 ++++----- arch/ia64/kernel/acpi.c | 6 ++--- arch/ia64/kernel/setup.c | 2 - arch/ia64/kernel/smp.c | 2 - arch/ia64/kernel/smpboot.c | 30 +++++++++++---------------- arch/m32r/kernel/smp.c | 2 - arch/m32r/kernel/smpboot.c | 6 ++--- arch/mips/kernel/smp-cmp.c | 8 ++++--- arch/mips/kernel/smp-mt.c | 2 - arch/mips/kernel/smp.c | 10 ++++----- arch/mips/kernel/smtc.c | 6 ++--- arch/mips/pmc-sierra/yosemite/smp.c | 5 +--- arch/mips/sgi-ip27/ip27-smp.c | 2 - arch/mips/sibyte/bcm1480/smp.c | 5 +--- arch/mips/sibyte/sb1250/smp.c | 5 +--- arch/parisc/kernel/processor.c | 2 - arch/parisc/kernel/smp.c | 12 +++++----- arch/powerpc/kernel/setup-common.c | 6 ++--- arch/powerpc/kernel/smp.c | 6 ++--- arch/powerpc/platforms/powermac/setup.c | 2 - arch/powerpc/platforms/powermac/smp.c | 4 +-- arch/powerpc/platforms/pseries/hotplug-cpu.c | 6 ++--- arch/s390/kernel/smp.c | 19 ++++++++--------- arch/sh/kernel/cpu/sh4a/smp-shx3.c | 5 +--- arch/sh/kernel/smp.c | 10 ++++----- arch/sparc/kernel/smp.c | 8 +++---- arch/sparc/kernel/sun4d_smp.c | 2 - arch/sparc/kernel/sun4m_smp.c | 2 - arch/sparc64/kernel/mdesc.c | 4 +-- arch/sparc64/kernel/prom.c | 4 +-- arch/sparc64/kernel/smp.c | 6 ++--- arch/um/kernel/skas/process.c | 2 - arch/um/kernel/smp.c | 10 ++++----- arch/x86/kernel/acpi/boot.c | 2 - arch/x86/kernel/apic.c | 4 +-- arch/x86/kernel/smp.c | 2 - arch/x86/kernel/smpboot.c | 12 +++++----- arch/x86/mach-voyager/voyager_smp.c | 16 +++++++------- arch/x86/xen/smp.c | 8 +++---- init/main.c | 6 ++--- 44 files changed, 138 insertions(+), 144 deletions(-)
arch/alpha/kernel/process.c +2 -2
@@ -93,7 +93,7 @@ common_shutdown_1(void *generic_ptr)if (cpuid != boot_cpuid) { flags |=0x00040000UL ;/* "remain halted" */ *pflags = flags; -cpu_clear (cpuid, cpu_present_map); +set_cpu_present (cpuid, false);halt (); }#endif
@@ -119,7 +119,7 @@ common_shutdown_1(void *generic_ptr)#ifdef CONFIG_SMP /* Wait for the secondaries to halt. */ -cpu_clear (boot_cpuid, cpu_present_map); +set_cpu_present (boot_cpuid, false);while (cpus_weight (cpu_present_map))barrier ();#endif
arch/alpha/kernel/smp.c +4 -3
@@ -121,10 +121,11 @@ smp_callin(void) {int cpuid =hard_smp_processor_id (); -if (cpu_test_and_set (cpuid, cpu_online_map)) { +if (cpu_isset (cpuid, cpu_online_map)) {printk ("??, cpu 0x%x already present??\n" , cpuid);BUG (); } +set_cpu_online (cpuid, true);/* Turn on machine checks. */ wrmces (7 );
@@ -435,7 +436,7 @@ setup_smp(void) ((char *)cpubase + i*hwrpb->processor_size);if ((cpu->flags &0x1cc ) ==0x1cc ) { smp_num_probed++; -cpu_set (i, cpu_present_map); +set_cpu_present (i, true); cpu->pal_revision = boot_cpu_palrev; }
@@ -468,7 +469,7 @@ smp_prepare_cpus(unsigned int max_cpus)/* Nothing to do on a UP box, or when told not to. */ if (smp_num_probed ==1 || max_cpus ==0 ) { - cpu_present_map =cpumask_of_cpu (boot_cpuid); +init_cpu_present (cpumask_of (boot_cpuid));printk (KERN_INFO "SMP mode deactivated.\n" );return ; }
arch/arm/kernel/smp.c +3 -3
@@ -161,7 +161,7 @@ int __cpuexit __cpu_disable(void)* Take this CPU offline. Once we clear this, we can't return, * and we must not schedule until we're ready to give up the cpu. */ -cpu_clear (cpu, cpu_online_map); +set_cpu_online (cpu, false);/* * OK - migrate IRQs away from this CPU
@@ -283,7 +283,7 @@ asmlinkage void __cpuinit secondary_star/* * OK, now it's safe to let the boot CPU continue */ -cpu_set (cpu, cpu_online_map); +set_cpu_online (cpu, true);/* * OK, it's off to the idle thread for us
@@ -415,7 +415,7 @@ static void ipi_cpu_stop(unsigned int cpdump_stack ();spin_unlock (&stop_lock); -cpu_clear (cpu, cpu_online_map); +set_cpu_online (cpu, false);local_fiq_disable ();local_irq_disable ();
arch/arm/mach-realview/platsmp.c +2 -2
@@ -193,7 +193,7 @@ void __init smp_init_cpus(void)unsigned int i, ncores =get_core_count ();for (i =0 ; i < ncores; i++) -cpu_set (i, cpu_possible_map); +set_cpu_possible (i, true); }void __init smp_prepare_cpus (unsigned int max_cpus)
@@ -242,7 +242,7 @@ void __init smp_prepare_cpus(unsigned in* actually populated at the present time. */ for (i =0 ; i < max_cpus; i++) -cpu_set (i, cpu_present_map); +set_cpu_present (i, true);/* * Initialise the SCU if there are more than one CPU and let
arch/cris/arch-v32/kernel/smp.c +5 -5
@@ -98,9 +98,9 @@ void __devinit smp_prepare_boot_cpu(voidSUPP_BANK_SEL (2 );SUPP_REG_WR (RW_MM_TLB_PGD , pgd); -cpu_set (0 , cpu_online_map); +set_cpu_online (0 , true);cpu_set (0 , phys_cpu_present_map); -cpu_set (0 , cpu_possible_map); +set_cpu_possible (0 , true); }void __init smp_cpus_done (unsigned int max_cpus)
@@ -126,10 +126,10 @@ smp_boot_one_cpu(int cpuid) cpu_now_booting = cpuid;/* Kick it */ -cpu_set (cpuid, cpu_online_map); +set_cpu_online (cpuid, true);cpu_set (cpuid, cpu_mask);send_ipi (IPI_BOOT ,0 , cpu_mask); -cpu_clear (cpuid, cpu_online_map); +set_cpu_online (cpuid, false);/* Wait for CPU to come online */ for (timeout =0 ; timeout <10000 ; timeout++) {
@@ -177,7 +177,7 @@ void __init smp_callin(void)notify_cpu_starting (cpu);local_irq_enable (); -cpu_set (cpu, cpu_online_map); +set_cpu_online (cpu, true);cpu_idle (); }
arch/ia64/kernel/acpi.c +3 -3
@@ -845,7 +845,7 @@ __init void prefill_possible_map(void) possible, max((possible - available_cpus), 0));for (i =0 ; i < possible; i++) -cpu_set (i, cpu_possible_map); +set_cpu_possible (i, true); }int acpi_map_lsapic (acpi_handle handle,int *pcpu)
@@ -890,7 +890,7 @@ int acpi_map_lsapic(acpi_handle handle,acpi_map_cpu2node (handle, cpu, physid); -cpu_set (cpu, cpu_present_map); +set_cpu_present (cpu, true); ia64_cpu_to_sapicid[cpu] = physid; *pcpu = cpu;
@@ -902,7 +902,7 @@ EXPORT_SYMBOL(acpi_map_lsapic);int acpi_unmap_lsapic (int cpu) { ia64_cpu_to_sapicid[cpu] =-1 ; -cpu_clear (cpu, cpu_present_map); +set_cpu_present (cpu, false);#ifdef CONFIG_ACPI_NUMA /* NUMA specific cleanup's */
arch/ia64/kernel/setup.c +1 -1
@@ -466,7 +466,7 @@ mark_bsp_online (void) {#ifdef CONFIG_SMP /* If we register an early console, allow CPU 0 to printk */ -cpu_set (smp_processor_id (), cpu_online_map); +set_cpu_online (smp_processor_id (), true);#endif }
arch/ia64/kernel/smp.c +1 -1
@@ -76,7 +76,7 @@ stop_this_cpu(void)/* * Remove this CPU: */ -cpu_clear (smp_processor_id (), cpu_online_map); +set_cpu_online (smp_processor_id (), false);max_xtp ();local_irq_disable ();cpu_halt ();
arch/ia64/kernel/smpboot.c +13 -17
@@ -396,7 +396,7 @@ smp_callin (void)/* Setup the per cpu irq handling data structures */ __setup_vector_irq (cpuid);notify_cpu_starting (cpuid); -cpu_set (cpuid, cpu_online_map); +set_cpu_online (cpuid, true);per_cpu (cpu_state, cpuid) =CPU_ONLINE ;spin_unlock (&vector_lock);ipi_call_unlock_irq ();
@@ -550,7 +550,7 @@ do_rest:if (!cpu_isset (cpu, cpu_callin_map)) {printk (KERN_ERR "Processor 0x%x/0x%x is stuck.\n" , cpu, sapicid); ia64_cpu_to_sapicid[cpu] =-1 ; -cpu_clear (cpu, cpu_online_map);/* was set in smp_callin() */ +set_cpu_online (cpu, false);/* was set in smp_callin() */ return -EINVAL ; }return 0 ;
@@ -580,15 +580,14 @@ smp_build_cpu_map (void) } ia64_cpu_to_sapicid[0 ] = boot_cpu_id; -cpus_clear (cpu_present_map); -cpu_set (0 , cpu_present_map); -cpu_set (0 , cpu_possible_map); +init_cpu_present (cpumask_of (0 )); +set_cpu_possible (0 , true);for (cpu =1 , i =0 ; i < smp_boot_data.cpu_count; i++) { sapicid = smp_boot_data.cpu_phys_id[i];if (sapicid == boot_cpu_id)continue ; -cpu_set (cpu, cpu_present_map); -cpu_set (cpu, cpu_possible_map); +set_cpu_present (cpu, true); +set_cpu_possible (cpu, true); ia64_cpu_to_sapicid[cpu] = sapicid; cpu++; }
@@ -611,7 +610,7 @@ smp_prepare_cpus (unsigned int max_cpus)/* * We have the boot CPU online for sure. */ -cpu_set (0 , cpu_online_map); +set_cpu_online (0 , true);cpu_set (0 , cpu_callin_map); local_cpu_data->loops_per_jiffy = loops_per_jiffy;
@@ -626,19 +625,16 @@ smp_prepare_cpus (unsigned int max_cpus)*/ if (!max_cpus) {printk (KERN_INFO "SMP mode deactivated.\n" ); -cpus_clear (cpu_online_map); -cpus_clear (cpu_present_map); -cpus_clear (cpu_possible_map); -cpu_set (0 , cpu_online_map); -cpu_set (0 , cpu_present_map); -cpu_set (0 , cpu_possible_map); +init_cpu_online (cpumask_of (0 )); +init_cpu_present (cpumask_of (0 )); +init_cpu_possible (cpumask_of (0 ));return ; } }void __devinit smp_prepare_boot_cpu (void ) { -cpu_set (smp_processor_id (), cpu_online_map); +set_cpu_online (smp_processor_id (), true);cpu_set (smp_processor_id (), cpu_callin_map);per_cpu (cpu_state,smp_processor_id ()) =CPU_ONLINE ;paravirt_post_smp_prepare_boot_cpu ();
@@ -737,13 +733,13 @@ int __cpu_disable(void) }if (migrate_platform_irqs (cpu)) { -cpu_set (cpu, cpu_online_map); +set_cpu_online (cpu, true);return (-EBUSY ); }remove_siblinginfo (cpu);fixup_irqs (); -cpu_clear (cpu, cpu_online_map); +set_cpu_online (cpu, false);local_flush_tlb_all ();cpu_clear (cpu, cpu_callin_map);return 0 ;
arch/m32r/kernel/smp.c +1 -1
@@ -531,7 +531,7 @@ static void stop_this_cpu(void *dummy)/* * Remove this CPU: */ -cpu_clear (cpu_id, cpu_online_map); +set_cpu_online (cpu_id, false);/* * PSW IE = 1;
arch/m32r/kernel/smpboot.c +3 -3
@@ -135,7 +135,7 @@ void __devinit smp_prepare_boot_cpu(void { bsp_phys_id =hard_smp_processor_id ();physid_set (bsp_phys_id, phys_cpu_present_map); -cpu_set (0 , cpu_online_map);/* BSP's cpu_id == 0 */ +set_cpu_online (0 , true);/* BSP's cpu_id == 0 */ cpu_set (0 , cpu_callout_map);cpu_set (0 , cpu_callin_map);
@@ -178,7 +178,7 @@ void __init smp_prepare_cpus(unsigned infor (phys_id =0 ; phys_id < nr_cpu ; phys_id++)physid_set (phys_id, phys_cpu_present_map);#ifndef CONFIG_HOTPLUG_CPU - cpu_present_map = cpu_possible_map; +init_cpu_present (&cpu_possible_map);#endif show_mp_info (nr_cpu);
@@ -503,7 +503,7 @@ static void __init smp_online(void)/* Save our processor parameters */ smp_store_cpu_info (cpu_id); -cpu_set (cpu_id, cpu_online_map); +set_cpu_online (cpu_id, true); }/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
arch/mips/kernel/smp-cmp.c +5 -3
@@ -52,8 +52,10 @@ static int __init allowcpus(char *str)cpus_clear (cpu_allow_map);if (cpulist_parse (str, &cpu_allow_map) ==0 ) { -cpu_set (0 , cpu_allow_map); -cpus_and (cpu_possible_map, cpu_possible_map, cpu_allow_map); +unsigned int i; +for (i =1 ; i < nr_cpu_ids; i++) +if (!cpumask_test_cpu (i, cpu_allow_map)) +set_cpu_possible (i, false); len =cpulist_scnprintf (buf,sizeof (buf)-1 , &cpu_possible_map); buf[len] ='\0' ;pr_debug ("Allowable CPUs: %s\n" , buf);
@@ -226,7 +228,7 @@ void __init cmp_smp_setup(void)for (i =1 ; i < nr_cpu_ids; i++) {if (amon_cpu_avail (i)) { -cpu_set (i, cpu_possible_map); +set_cpu_possible (i, true); __cpu_number_map[i] = ++ncpu; __cpu_logical_map[ncpu] = i; }
arch/mips/kernel/smp-mt.c +1 -1
@@ -70,7 +70,7 @@ static unsigned int __init smvp_vpe_initwrite_vpe_c0_vpeconf0 (tmp);/* Record this as available CPU */ -cpu_set (tc, cpu_possible_map); +set_cpu_possible (tc, true); __cpu_number_map[tc] = ++ncpu; __cpu_logical_map[ncpu] = tc; }
arch/mips/kernel/smp.c +5 -5
@@ -157,7 +157,7 @@ static void stop_this_cpu(void *dummy)/* * Remove this CPU: */ -cpu_clear (smp_processor_id (), cpu_online_map); +set_cpu_online (smp_processor_id (), false);local_irq_enable ();/* May need to service _machine_restart IPI */ for (;;);/* Wait if available. */ }
@@ -181,7 +181,7 @@ void __init smp_prepare_cpus(unsigned in mp_ops->prepare_cpus (max_cpus);set_cpu_sibling_map (0 );#ifndef CONFIG_HOTPLUG_CPU - cpu_present_map = cpu_possible_map; +init_cpu_present (&cpu_possible_map);#endif }
@@ -194,8 +194,8 @@ void __devinit smp_prepare_boot_cpu(void*/ __cpu_number_map[0 ] =0 ; __cpu_logical_map[0 ] =0 ; -cpu_set (0 , cpu_possible_map); -cpu_set (0 , cpu_online_map); +set_cpu_possible (0 , true); +set_cpu_online (0 , true);cpu_set (0 , cpu_callin_map); }
@@ -225,7 +225,7 @@ int __cpuinit __cpu_up(unsigned int cpu)while (!cpu_isset (cpu, cpu_callin_map))udelay (100 ); -cpu_set (cpu, cpu_online_map); +set_cpu_online (cpu, true);return 0 ; }
arch/mips/kernel/smtc.c +3 -3
@@ -304,7 +304,7 @@ int __init smtc_build_cpu_map(int start_*/ ntcs = ((read_c0_mvpconf0 () &MVPCONF0_PTC ) >>MVPCONF0_PTC_SHIFT ) +1 ;for (i = start_cpu_slot; i < nr_cpu_ids && i < ntcs; i++) { -cpu_set (i, cpu_possible_map); +set_cpu_possible (i, true); __cpu_number_map[i] = i; __cpu_logical_map[i] = i; }
@@ -521,8 +521,8 @@ void smtc_prepare_cpus(int cpus)* Pull any physically present but unused TCs out of circulation. */ while (tc < (((val &MVPCONF0_PTC ) >>MVPCONF0_PTC_SHIFT ) +1 )) { -cpu_clear (tc, cpu_possible_map); -cpu_clear (tc, cpu_present_map); +set_cpu_possible (tc, false); +set_cpu_present (tc, false); tc++; }
arch/mips/pmc-sierra/yosemite/smp.c +2 -3
@@ -150,10 +150,9 @@ static void __init yos_smp_setup(void) {int i; -cpus_clear (cpu_possible_map); - +init_cpu_possible (cpumask_of (0 ));for (i =0 ; i <2 ; i++) { -cpu_set (i, cpu_possible_map); +set_cpu_possible (i, true); __cpu_number_map[i] = i; __cpu_logical_map[i] = i; }
arch/mips/sgi-ip27/ip27-smp.c +1 -1
@@ -76,7 +76,7 @@ static int do_cpumask(cnodeid_t cnode, n/* Only let it join in if it's marked enabled */ if ((acpu->cpu_info.flags &KLINFO_ENABLE ) && (tot_cpus_found !=NR_CPUS )) { -cpu_set (cpuid, cpu_possible_map); +set_cpu_possible (cpuid, true);alloc_cpupda (cpuid, tot_cpus_found); cpus_found++; tot_cpus_found++;
arch/mips/sibyte/bcm1480/smp.c +2 -3
@@ -145,14 +145,13 @@ static void __init bcm1480_smp_setup(voi {int i, num; -cpus_clear (cpu_possible_map); -cpu_set (0 , cpu_possible_map); +init_cpu_possible (cpumask_of (0 )); __cpu_number_map[0 ] =0 ; __cpu_logical_map[0 ] =0 ;for (i =1 , num =0 ; i < nr_cpu_ids; i++) {if (cfe_cpu_stop (i) ==0 ) { -cpu_set (i, cpu_possible_map); +set_cpu_possible (i, true); __cpu_number_map[i] = ++num; __cpu_logical_map[num] = i; }
arch/mips/sibyte/sb1250/smp.c +2 -3
@@ -133,14 +133,13 @@ static void __init sb1250_smp_setup(void {int i, num; -cpus_clear (cpu_possible_map); -cpu_set (0 , cpu_possible_map); +init_cpu_possible (cpumask_of (0 )); __cpu_number_map[0 ] =0 ; __cpu_logical_map[0 ] =0 ;for (i =1 , num =0 ; i < nr_cpu_ids; i++) {if (cfe_cpu_stop (i) ==0 ) { -cpu_set (i, cpu_possible_map); +set_cpu_possible (i, true); __cpu_number_map[i] = ++num; __cpu_logical_map[num] = i; }
arch/parisc/kernel/processor.c +1 -1
@@ -200,7 +200,7 @@ static int __cpuinit processor_probe(str*/ #ifdef CONFIG_SMP if (cpuid) { -cpu_set (cpuid, cpu_present_map); +set_cpu_present (cpuid, true);cpu_up (cpuid); }#endif
arch/parisc/kernel/smp.c +6 -6
@@ -112,7 +112,7 @@ halt_processor(void) {/* REVISIT : redirect I/O Interrupts to another CPU? */ /* REVISIT : does PM *know* this CPU isn't available? */ -cpu_clear (smp_processor_id (), cpu_online_map); +set_cpu_online (smp_processor_id (), false);local_irq_disable ();for (;;) ;
@@ -298,13 +298,14 @@ smp_cpu_init(int cpunum)mb ();/* Well, support 2.4 linux scheme as well. */ -if (cpu_test_and_set (cpunum, cpu_online_map)) +if (cpu_isset (cpunum, cpu_online_map)) {extern void machine_halt (void );/* arch/parisc.../process.c */ printk (KERN_CRIT "CPU#%d already initialized!\n" , cpunum);machine_halt (); } +set_cpu_online (cpunum, true);/* Initialise the idle task for this CPU */ atomic_inc (&init_mm.mm_count);
@@ -426,8 +427,8 @@ void __devinit smp_prepare_boot_cpu(void/* Setup BSP mappings */ printk ("SMP: bootstrap CPU ID is %d\n" ,bootstrap_processor); -cpu_set (bootstrap_processor, cpu_online_map); -cpu_set (bootstrap_processor, cpu_present_map); +set_cpu_online (bootstrap_processor, true); +set_cpu_present (bootstrap_processor, true); }
@@ -438,8 +439,7 @@ void __devinit smp_prepare_boot_cpu(void*/ void __init smp_prepare_cpus (unsigned int max_cpus) { -cpus_clear (cpu_present_map); -cpu_set (0 , cpu_present_map); +init_cpu_present (cpumask_of (0 )); parisc_max_cpus = max_cpus;if (!max_cpus)
arch/powerpc/kernel/setup-common.c +3 -3
@@ -424,9 +424,9 @@ void __init smp_setup_cpu_maps(void)for (j =0 ; j < nthreads && cpu < nr_cpu_ids; j++) {DBG (" thread %d -> cpu %d (hard id %d)\n" , j, cpu, intserv[j]); -cpu_set (cpu, cpu_present_map); +set_cpu_present (cpu, true);set_hard_smp_processor_id (cpu, intserv[j]); -cpu_set (cpu, cpu_possible_map); +set_cpu_possible (cpu, true); cpu++; } }
@@ -472,7 +472,7 @@ void __init smp_setup_cpu_maps(void) maxcpus);for (cpu =0 ; cpu < maxcpus; cpu++) -cpu_set (cpu, cpu_possible_map); +set_cpu_possible (cpu, true); out:of_node_put (dn); }
arch/powerpc/kernel/smp.c +3 -3
@@ -225,7 +225,7 @@ void __devinit smp_prepare_boot_cpu(void {BUG_ON (smp_processor_id () != boot_cpuid); -cpu_set (boot_cpuid, cpu_online_map); +set_cpu_online (boot_cpuid, true);cpu_set (boot_cpuid,per_cpu (cpu_sibling_map, boot_cpuid));cpu_set (boot_cpuid,per_cpu (cpu_core_map, boot_cpuid));#ifdef CONFIG_PPC64
@@ -245,7 +245,7 @@ int generic_cpu_disable(void)if (cpu == boot_cpuid)return -EBUSY ; -cpu_clear (cpu, cpu_online_map); +set_cpu_online (cpu, false);#ifdef CONFIG_PPC64 vdso_data->processorCount--;fixup_irqs (cpu_online_map);
@@ -299,7 +299,7 @@ void generic_mach_cpu_die(void)smp_wmb ();while (__get_cpu_var (cpu_state) !=CPU_UP_PREPARE )cpu_relax (); -cpu_set (cpu, cpu_online_map); +set_cpu_online (cpu, true); local_irq_enable(); }#endif
arch/powerpc/platforms/powermac/setup.c +1 -1
@@ -366,7 +366,7 @@ static void __init pmac_setup_arch(void)int cpu;for (cpu =1 ; cpu <4 && cpu < nr_cpu_ids; ++cpu) -cpu_set (cpu, cpu_possible_map); +set_cpu_possible (cpu, true); smp_ops = &psurge_smp_ops; }#endif
arch/powerpc/platforms/powermac/smp.c +2 -2
@@ -317,7 +317,7 @@ static int __init smp_psurge_probe(void)if (ncpus > nr_cpu_ids) ncpus = nr_cpu_ids;for (i =1 ; i < ncpus ; ++i) { -cpu_set (i, cpu_present_map); +set_cpu_present (i, true);set_hard_smp_processor_id (i, i); }
@@ -861,7 +861,7 @@ static void __devinit smp_core99_setup_cint smp_core99_cpu_disable (void ) { -cpu_clear (smp_processor_id (), cpu_online_map); +set_cpu_online (smp_processor_id (), false);/* XXX reset cpu affinity here */ mpic_cpu_set_priority (0xf );
arch/powerpc/platforms/pseries/hotplug-cpu.c +3 -3
@@ -94,7 +94,7 @@ static int pseries_cpu_disable(void) {int cpu =smp_processor_id (); -cpu_clear (cpu, cpu_online_map); +set_cpu_online (cpu, false); vdso_data->processorCount--;/*fix boot_cpuid here*/
@@ -185,7 +185,7 @@ static int pseries_add_processor(structfor_each_cpu_mask (cpu, tmp) {BUG_ON (cpu_isset (cpu, cpu_present_map)); -cpu_set (cpu, cpu_present_map); +set_cpu_present (cpu, true);set_hard_smp_processor_id (cpu, *intserv++); } err =0 ;
@@ -217,7 +217,7 @@ static void pseries_remove_processor(strif (get_hard_smp_processor_id (cpu) != intserv[i])continue ;BUG_ON (cpu_online (cpu)); -cpu_clear (cpu, cpu_present_map); +set_cpu_present (cpu, false);set_hard_smp_processor_id (cpu,-1 );break ; }
arch/s390/kernel/smp.c +9 -10
@@ -451,7 +451,7 @@ static int smp_rescan_cpus_sigp(cpumask_ smp_cpu_polarization[logical_cpu] =POLARIZATION_UNKNWN ;if (!cpu_stopped (logical_cpu))continue ; -cpu_set (logical_cpu, cpu_present_map); +set_cpu_present (logical_cpu, true); smp_cpu_state[logical_cpu] =CPU_STATE_CONFIGURED ; logical_cpu =next_cpu (logical_cpu, avail);if (logical_cpu >= nr_cpu_ids)
@@ -483,7 +483,7 @@ static int smp_rescan_cpus_sclp(cpumask_continue ; __cpu_logical_map[logical_cpu] = cpu_id; smp_cpu_polarization[logical_cpu] =POLARIZATION_UNKNWN ; -cpu_set (logical_cpu, cpu_present_map); +set_cpu_present (logical_cpu, true);if (cpu >= info->configured) smp_cpu_state[logical_cpu] =CPU_STATE_STANDBY ;else
@@ -587,7 +587,7 @@ int __cpuinit start_secondary(void *cpuvnotify_cpu_starting (smp_processor_id ());/* Mark this cpu as online */ spin_lock (&call_lock); -cpu_set (smp_processor_id (), cpu_online_map); +set_cpu_online (smp_processor_id (), true);spin_unlock (&call_lock);/* Switch on interrupts */ local_irq_enable ();
@@ -730,9 +730,8 @@ static int __init setup_possible_cpus(chint pcpus, cpu; pcpus =simple_strtoul (s,NULL ,0 ); - cpu_possible_map =cpumask_of_cpu (0 ); -for (cpu =1 ; cpu < pcpus && cpu < nr_cpu_ids; cpu++) -cpu_set (cpu, cpu_possible_map); +for (cpu =0 ; cpu < pcpus && cpu < nr_cpu_ids; cpu++) +set_cpu_possible (cpu, true);return 0 ; }early_param ("possible_cpus" , setup_possible_cpus);
@@ -744,7 +743,7 @@ int __cpu_disable(void)struct ec_creg_mask_parms cr_parms;int cpu =smp_processor_id (); -cpu_clear (cpu, cpu_online_map); +set_cpu_online (cpu, false);/* Disable pfault pseudo page faults on this cpu. */ pfault_fini ();
@@ -838,8 +837,8 @@ void __init smp_prepare_boot_cpu(void)BUG_ON (smp_processor_id () !=0 );current_thread_info ()->cpu =0 ; -cpu_set (0 , cpu_present_map); -cpu_set (0 , cpu_online_map); +set_cpu_present (0 , true); +set_cpu_online (0 , true); S390_lowcore.percpu_offset = __per_cpu_offset[0 ]; current_set[0 ] = current; smp_cpu_state[0 ] =CPU_STATE_CONFIGURED ;
@@ -1106,7 +1105,7 @@ int __ref smp_rescan_cpus(void)for_each_cpu_mask (cpu, newcpus) { rc =smp_add_present_cpu (cpu);if (rc) -cpu_clear (cpu, cpu_present_map); +set_cpu_present (cpu, false); } rc =0 ; out:
arch/sh/kernel/cpu/sh4a/smp-shx3.c +2 -3
@@ -35,8 +35,7 @@ void __init plat_smp_setup(void)unsigned int cpu =0 ;int i, num; -cpus_clear (cpu_possible_map); -cpu_set (cpu, cpu_possible_map); +init_cpu_possible (cpumask_of (cpu)); __cpu_number_map[0 ] =0 ; __cpu_logical_map[0 ] =0 ;
@@ -46,7 +45,7 @@ void __init plat_smp_setup(void)* for the total number of cores. */ for (i =1 , num =0 ; i <NR_CPUS ; i++) { -cpu_set (i, cpu_possible_map); +set_cpu_possible (i, true); __cpu_number_map[i] = ++num; __cpu_logical_map[num] = i; }
arch/sh/kernel/smp.c +5 -5
@@ -46,7 +46,7 @@ void __init smp_prepare_cpus(unsigned inplat_prepare_cpus (max_cpus);#ifndef CONFIG_HOTPLUG_CPU - cpu_present_map = cpu_possible_map; +init_cpu_present (&cpu_possible_map);#endif }
@@ -57,8 +57,8 @@ void __devinit smp_prepare_boot_cpu(void __cpu_number_map[0 ] = cpu; __cpu_logical_map[0 ] = cpu; -cpu_set (cpu, cpu_online_map); -cpu_set (cpu, cpu_possible_map); +set_cpu_online (cpu, true); +set_cpu_possible (cpu, true); } asmlinkage void __cpuinit start_secondary(void)
@@ -88,7 +88,7 @@ asmlinkage void __cpuinit start_secondarsmp_store_cpu_info (cpu); -cpu_set (cpu, cpu_online_map); +set_cpu_online (cpu, true);cpu_idle (); }
@@ -158,7 +158,7 @@ void smp_send_reschedule(int cpu)static void stop_this_cpu (void *unused) { -cpu_clear (smp_processor_id (), cpu_online_map); +set_cpu_online (smp_processor_id (), false);local_irq_disable ();for (;;)
arch/sparc/kernel/smp.c +4 -4
@@ -331,8 +331,8 @@ void __init smp_setup_cpu_possible_map(v instance =0 ;while (!cpu_find_by_instance (instance,NULL , &mid)) {if (mid <NR_CPUS ) { -cpu_set (mid, cpu_possible_map); -cpu_set (mid, cpu_present_map); +set_cpu_possible (mid, true); +set_cpu_present (mid, true); } instance++; }
@@ -350,8 +350,8 @@ void __init smp_prepare_boot_cpu(void)printk ("boot cpu id != 0, this could work but is untested\n" );current_thread_info ()->cpu = cpuid; -cpu_set (cpuid, cpu_online_map); -cpu_set (cpuid, cpu_possible_map); +set_cpu_online (cpuid, true); +set_cpu_possible (cpuid, true); }int __cpuinit __cpu_up (unsigned int cpu)
arch/sparc/kernel/sun4d_smp.c +1 -1
@@ -150,7 +150,7 @@ void __init smp4d_callin(void)spin_lock_irqsave (&sun4d_imsk_lock, flags);cc_set_imsk (cc_get_imsk () & ~0x4000 );/* Allow PIL 14 as well */ spin_unlock_irqrestore (&sun4d_imsk_lock, flags); -cpu_set (cpuid, cpu_online_map); +set_cpu_online (cpuid, true); }
arch/sparc/kernel/sun4m_smp.c +1 -1
@@ -112,7 +112,7 @@ void __cpuinit smp4m_callin(void)local_irq_enable (); -cpu_set (cpuid, cpu_online_map); +set_cpu_online (cpuid, true); }/*
arch/sparc64/kernel/mdesc.c +2 -2
@@ -566,7 +566,7 @@ static void __init report_platform_prope max_cpu = NR_CPUS; }for (i =0 ; i < max_cpu; i++) -cpu_set (i, cpu_possible_map); +set_cpu_possible (i, true); }#endif
@@ -826,7 +826,7 @@ void __cpuinit mdesc_fill_in_cpu_data(cp }#ifdef CONFIG_SMP -cpu_set (cpuid, cpu_present_map); +set_cpu_present (cpuid, true);#endif c->core_id =0 ;
arch/sparc64/kernel/prom.c +2 -2
@@ -1601,8 +1601,8 @@ static void __init of_fill_in_cpu_data(v }#ifdef CONFIG_SMP -cpu_set (cpuid, cpu_present_map); -cpu_set (cpuid, cpu_possible_map); +set_cpu_present (cpuid, true); +set_cpu_possible (cpuid, true);#endif }
arch/sparc64/kernel/smp.c +3 -3
@@ -119,7 +119,7 @@ void __cpuinit smp_callin(void)rmb ();ipi_call_lock (); -cpu_set (cpuid, cpu_online_map); +set_cpu_online (cpuid, true);ipi_call_unlock ();/* idle thread is expected to have preempt disabled */
@@ -1313,7 +1313,7 @@ int __cpu_disable(void)local_irq_disable ();ipi_call_lock (); -cpu_clear (cpu, cpu_online_map); +set_cpu_online (cpu, false);ipi_call_unlock ();return 0 ;
@@ -1339,7 +1339,7 @@ void __cpu_die(unsigned int cpu)do { hv_err =sun4v_cpu_stop (cpu);if (hv_err ==HV_EOK ) { -cpu_clear (cpu, cpu_present_map); +set_cpu_present (cpu, false);break ; } }while (--limit >0 );
arch/um/kernel/skas/process.c +1 -1
@@ -41,7 +41,7 @@ static int __init start_kernel_proc(void cpu_tasks[0 ].pid = pid; cpu_tasks[0 ].task = current;#ifdef CONFIG_SMP - cpu_online_map =cpumask_of_cpu (0 ); +init_cpu_online (cpumask_of (0 ));#endif start_kernel ();return 0 ;
arch/um/kernel/smp.c +5 -5
@@ -79,7 +79,7 @@ static int idle_proc(void *cpup)cpu_relax ();notify_cpu_starting (cpu); -cpu_set (cpu, cpu_online_map); +set_cpu_online (cpu, true);default_idle ();return 0 ; }
@@ -111,10 +111,10 @@ void smp_prepare_cpus(unsigned int maxcpint i;for (i =0 ; i < ncpus; ++i) -cpu_set (i, cpu_possible_map); +set_cpu_possible (i, true); -cpu_clear (me, cpu_online_map); -cpu_set (me, cpu_online_map); +set_cpu_online (me, false); +set_cpu_online (me, true);cpu_set (me, cpu_callin_map); err =os_pipe (cpu_data[me].ipi_pipe,1 ,1 );
@@ -141,7 +141,7 @@ void smp_prepare_cpus(unsigned int maxcpvoid smp_prepare_boot_cpu (void ) { -cpu_set (smp_processor_id (), cpu_online_map); +set_cpu_online (smp_processor_id (), true); }int __cpu_up (unsigned int cpu)
arch/x86/kernel/acpi/boot.c +1 -1
@@ -597,7 +597,7 @@ EXPORT_SYMBOL(acpi_map_lsapic);int acpi_unmap_lsapic (int cpu) {per_cpu (x86_cpu_to_apicid, cpu) =-1 ; -cpu_clear (cpu, cpu_present_map); +set_cpu_present (cpu, false); num_processors--;return (0 );
arch/x86/kernel/apic.c +2 -2
@@ -1903,8 +1903,8 @@ void __cpuinit generic_processor_info(in }#endif -cpu_set (cpu, cpu_possible_map); -cpu_set (cpu, cpu_present_map); +set_cpu_possible (cpu, true); +set_cpu_present (cpu, true); }#ifdef CONFIG_X86_64
arch/x86/kernel/smp.c +1 -1
@@ -146,7 +146,7 @@ static void stop_this_cpu(void *dummy)/* * Remove this CPU: */ -cpu_clear (smp_processor_id (), cpu_online_map); +set_cpu_online (smp_processor_id (), false);disable_local_APIC ();if (hlt_works (smp_processor_id ()))for (;;)halt ();
arch/x86/kernel/smpboot.c +6 -6
@@ -941,7 +941,7 @@ restore_state:numa_remove_cpu (cpu);/* was set by numa_add_cpu */ cpu_clear (cpu, cpu_callout_map);/* was set by do_boot_cpu() */ cpu_clear (cpu, cpu_initialized);/* was set by cpu_init() */ -cpu_clear (cpu, cpu_present_map); +set_cpu_present (cpu, false);per_cpu (x86_cpu_to_apicid, cpu) =BAD_APICID ; }
@@ -1030,8 +1030,8 @@ int __cpuinit native_cpu_up(unsigned int*/ static __init void disable_smp (void ) { - cpu_present_map =cpumask_of_cpu (0 ); - cpu_possible_map =cpumask_of_cpu (0 ); +init_cpu_present (cpumask_of (0 )); +init_cpu_possible (cpumask_of (0 ));smpboot_clear_io_apic_irqs ();if (smp_found_config)
@@ -1062,14 +1062,14 @@ static int __init smp_sanity_check(unsig nr =0 ;for_each_present_cpu (cpu) {if (nr >=8 ) -cpu_clear (cpu, cpu_present_map); +set_cpu_present (cpu, false); nr++; } nr =0 ;for_each_possible_cpu (cpu) {if (nr >=8 ) -cpu_clear (cpu, cpu_possible_map); +set_cpu_possible (cpu, false); nr++; }
@@ -1288,7 +1288,7 @@ __init void prefill_possible_map(void) possible, max_t(int, possible - num_processors, 0));for (i =0 ; i < possible; i++) -cpu_set (i, cpu_possible_map); +set_cpu_possible (i, true); nr_cpu_ids = possible; }
arch/x86/mach-voyager/voyager_smp.c +8 -8
@@ -371,7 +371,7 @@ void __init find_smp_config(void)cpus_addr (phys_cpu_present_map)[0 ] |=voyager_extended_cmos_read (VOYAGER_PROCESSOR_PRESENT_MASK +3 ) <<24 ; - cpu_possible_map = phys_cpu_present_map; +init_cpu_possible (&phys_cpu_present_map);printk ("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n" ,cpus_addr (phys_cpu_present_map)[0 ]);/* Here we set up the VIC to enable SMP */
@@ -471,7 +471,7 @@ static void __init start_secondary(voidlocal_flush_tlb (); -cpu_set (cpuid, cpu_online_map); +set_cpu_online (cpuid, true);wmb ();cpu_idle (); }
@@ -595,7 +595,7 @@ static void __init do_boot_cpu(__u8 cpu)print_cpu_info (&cpu_data (cpu));wmb ();cpu_set (cpu, cpu_callout_map); -cpu_set (cpu, cpu_present_map); +set_cpu_present (cpu, true); }else {printk ("CPU%d FAILED TO BOOT: " , cpu); if (*
@@ -656,7 +656,7 @@ void __init smp_boot_cpus(void)/* enable our own CPIs */ vic_enable_cpi (); -cpu_set (boot_cpu_id, cpu_online_map); +set_cpu_online (boot_cpu_id, true);cpu_set (boot_cpu_id, cpu_callout_map);/* loop over all the extended VIC CPUs and boot them. The
@@ -939,7 +939,7 @@ static void smp_enable_irq_interrupt(voistatic void smp_stop_cpu_function (void *dummy) {VDEBUG (("VOYAGER SMP: CPU%d is STOPPING\n" ,smp_processor_id ())); -cpu_clear (smp_processor_id (), cpu_online_map); +set_cpu_online (smp_processor_id (), false);local_irq_disable ();for (;;)halt ();
@@ -1740,10 +1740,10 @@ static void __cpuinit voyager_smp_preparinit_gdt (smp_processor_id ());switch_to_new_gdt (); -cpu_set (smp_processor_id (), cpu_online_map); +set_cpu_online (smp_processor_id (), true);cpu_set (smp_processor_id (), cpu_callout_map); -cpu_set (smp_processor_id (), cpu_possible_map); -cpu_set (smp_processor_id (), cpu_present_map); +set_cpu_possible (smp_processor_id (), true); +set_cpu_present (smp_processor_id (), true); }static int __cpuinit voyager_cpu_up (unsigned int cpu)
arch/x86/xen/smp.c +4 -4
@@ -77,7 +77,7 @@ static __cpuinit void cpu_bringup(void)xen_setup_cpu_clockevents (); -cpu_set (cpu, cpu_online_map); +set_cpu_online (cpu, true);x86_write_percpu (cpu_state,CPU_ONLINE );wmb ();
@@ -162,7 +162,7 @@ static void __init xen_fill_possible_map rc =HYPERVISOR_vcpu_op (VCPUOP_is_up, i,NULL );if (rc >=0 ) { num_processors++; -cpu_set (i, cpu_possible_map); +set_cpu_possible (i, true); } } }
@@ -198,7 +198,7 @@ static void __init xen_smp_prepare_cpus(while ((num_possible_cpus () >1 ) && (num_possible_cpus () > max_cpus)) {for (cpu = nr_cpu_ids -1 ; !cpu_possible (cpu); cpu--)continue ; -cpu_clear (cpu, cpu_possible_map); +set_cpu_possible (cpu, false); }for_each_possible_cpu (cpu) {
@@ -211,7 +211,7 @@ static void __init xen_smp_prepare_cpus(if (IS_ERR (idle))panic ("failed fork for CPU %d" , cpu); -cpu_set (cpu, cpu_present_map); +set_cpu_present (cpu, true); } }
init/main.c +3 -3
@@ -529,9 +529,9 @@ static void __init boot_cpu_init(void) {int cpu =smp_processor_id ();/* Mark the boot cpu "present", "online" etc for SMP and UP case */ -cpu_set (cpu, cpu_online_map); -cpu_set (cpu, cpu_present_map); -cpu_set (cpu, cpu_possible_map); +set_cpu_online (cpu, true); +set_cpu_present (cpu, true); +set_cpu_possible (cpu, true); }void __init __weak smp_setup_processor_id (void )
Re: [PATCH 34/35] cpumask: Use accessors code. From: Rusty Russell <[email protected]>
Quoted 2 lines · On Thursday 23 October 2008 13:09:00 Mike Travis wrote:
Use the accessors rather than frobbing bits directly. Most of this is in arch code I haven't even compiled, but it is mostly straightforward.
OK, FYI this one isn't for this merge window: I'll be splitting it and sending it via the various arch maintainers.
Also, I think a \n got lost, looking at the subject :)
Cheers,
Rusty.
PATCH 35/35 x86: clean up speedctep-centrino and reduce cpumask_t usage From: Rusty Russell <[email protected]>
In reply to Mike Travis1) The #ifdef CONFIG_HOTPLUG_CPU seems unnecessary these days.
2) The loop can simply skip over offline cpus, rather than creating a tmp mask.
3) set_mask is set to either a single cpu or all online cpus in a policy. Since it's just used for set_cpus_allowed(), any offline cpus in a policy don't matter, so we can just use cpumask_of_cpu() or the policy->cpus.
--- arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c | 51 ++++++++++------------- 1 file changed, 24 insertions(+), 27 deletions(-)
arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c +24 -27
@@ -552,9 +552,7 @@ static int centrino_verify (struct cpufr* Sets a new CPUFreq policy. */ struct allmasks { -cpumask_t online_policy_cpus;cpumask_t saved_mask; -cpumask_t set_mask;cpumask_t covered_cpus; };
@@ -568,9 +566,7 @@ static int centrino_target (struct cpufrint retval =0 ;unsigned int j, k, first_cpu, tmp;CPUMASK_ALLOC (allmasks); -CPUMASK_PTR (online_policy_cpus, allmasks);CPUMASK_PTR (saved_mask, allmasks); -CPUMASK_PTR (set_mask, allmasks);CPUMASK_PTR (covered_cpus, allmasks);if (unlikely (allmasks ==NULL ))
@@ -590,30 +586,28 @@ static int centrino_target (struct cpufr goto out; } -#ifdef CONFIG_HOTPLUG_CPU -/* cpufreq holds the hotplug lock, so we are safe from here on */ -cpus_and (*online_policy_cpus, cpu_online_map, policy->cpus); -#else - *online_policy_cpus = policy->cpus; -#endif - *saved_mask = current->cpus_allowed; first_cpu =1 ;cpus_clear (*covered_cpus); -for_each_cpu_mask_nr (j, *online_policy_cpus) { +for_each_cpu_mask_nr (j, policy->cpus) { +const cpumask_t *mask; + +/* cpufreq holds the hotplug lock, so we are safe here */ +if (!cpu_online (j)) +continue ; +/* * Support for SMP systems. * Make sure we are running on CPU that wants to change freq */ -cpus_clear (*set_mask);if (policy->shared_type ==CPUFREQ_SHARED_TYPE_ANY ) -cpus_or (*set_mask, *set_mask, *online_policy_cpus); + mask = &policy->cpus;else -cpu_set (j, *set_mask); + mask = &cpumask_of_cpu (j); -set_cpus_allowed_ptr (current, set_mask); +set_cpus_allowed_ptr (current, mask);preempt_disable (); -if (unlikely (!cpu_isset (smp_processor_id (), *set_mask))) { +if (unlikely (!cpu_isset (smp_processor_id (), *mask))) {dprintk ("couldn't limit to CPUs in this domain\n" ); retval = -EAGAIN ;if (first_cpu) {
@@ -641,7 +635,9 @@ static int centrino_target (struct cpufrdprintk ("target=%dkHz old=%d new=%d msr=%04x\n" , target_freq, freqs.old, freqs.new, msr); -for_each_cpu_mask_nr (k, *online_policy_cpus) { +for_each_cpu_mask_nr (k, policy->cpus) { +if (!cpu_online (k)) +continue ; freqs.cpu = k;cpufreq_notify_transition (&freqs,CPUFREQ_PRECHANGE );
@@ -664,7 +660,9 @@ static int centrino_target (struct cpufrpreempt_enable (); } -for_each_cpu_mask_nr (k, *online_policy_cpus) { +for_each_cpu_mask_nr (k, policy->cpus) { +if (!cpu_online (k)) +continue ; freqs.cpu = k;cpufreq_notify_transition (&freqs,CPUFREQ_POSTCHANGE ); }
@@ -677,18 +675,17 @@ static int centrino_target (struct cpufr* Best effort undo.. */ -if (!cpus_empty (*covered_cpus)) -for_each_cpu_mask_nr (j, *covered_cpus) { -set_cpus_allowed_ptr (current, - &cpumask_of_cpu (j)); -wrmsr (MSR_IA32_PERF_CTL , oldmsr, h); - } +for_each_cpu_mask_nr (j, *covered_cpus) { +set_cpus_allowed_ptr (current, &cpumask_of_cpu (j)); +wrmsr (MSR_IA32_PERF_CTL , oldmsr, h); + } tmp = freqs.new; freqs.new = freqs.old; freqs.old = tmp; -for_each_cpu_mask_nr (j, *online_policy_cpus) { - freqs.cpu = j; +for_each_cpu_mask_nr (j, policy->cpus) { +if (!cpu_online (j)) +continue ;cpufreq_notify_transition (&freqs,CPUFREQ_PRECHANGE );cpufreq_notify_transition (&freqs,CPUFREQ_POSTCHANGE ); }
Re: [PATCH 35/35] x86: clean up speedctep-centrino and reduce cpumask_t usage From: Rusty Russell <[email protected]>
Quoted 7 lines · On Thursday 23 October 2008 13:09:01 Mike Travis wrote:
1) The #ifdef
CONFIG_HOTPLUG_CPUseems unnecessary these days.
2) The loop can simply skip over offline cpus, rather than creating a tmp mask.
3)set_maskis set to either a single cpu or all online cpus in a policy. Since it's just used forset_cpus_allowed(), any offline cpus in a policy don't matter, so we can just usecpumask_of_cpu()or thepolicy->cpus.
Note that this cleanup stands alone; it's just that I read this code I couldn't help but tidy it up.
Ingo: do you just want to put this in your normal tree for sending to Linus?
Thanks,
Rusty.
Re: [PATCH 35/35] x86: clean up speedctep-centrino and reduce cpumask_t usage From: Rusty Russell <[email protected]>
Quoted 9 lines · Rusty Russell
Quoted 7 lines · On Thursday 23 October 2008 13:09:01 Mike Travis wrote:
1) The #ifdef
CONFIG_HOTPLUG_CPUseems unnecessary these days.
2) The loop can simply skip over offline cpus, rather than creating a tmp mask.
3)set_maskis set to either a single cpu or all online cpus in a policy. Since it's just used forset_cpus_allowed(), any offline cpus in a policy don't matter, so we can just usecpumask_of_cpu()or thepolicy->cpus.
Quoted 5 lines
Note that this cleanup stands alone; it's just that I read this code I couldn't help but tidy it up.
Ingo: do you just want to put this in your normal tree for sending to Linus?
hm, cpufreq stuff belongs into davej's tree.
i skipped #34 and #35 for now, we can live without them, correct?
Ingo
Re: [PATCH 35/35] x86: clean up speedctep-centrino and reduce cpumask_t usage From: Rusty Russell <[email protected]>
Quoted 13 lines · On Thursday 23 October 2008 23:04:44 Ingo Molnar wrote:
Quoted 12 lines · Rusty Russell
Quoted 7 lines · On Thursday 23 October 2008 13:09:01 Mike Travis wrote:
1) The #ifdef
CONFIG_HOTPLUG_CPUseems unnecessary these days.
2) The loop can simply skip over offline cpus, rather than creating a tmp mask.
3)set_maskis set to either a single cpu or all online cpus in a policy. Since it's just used forset_cpus_allowed(), any offline cpus in a policy don't matter, so we can just usecpumask_of_cpu()or thepolicy->cpus.Note that this cleanup stands alone; it's just that I read this code I couldn't help but tidy it up.
Quoted 6 lines
Quoted 2 lines
Ingo: do you just want to put this in your normal tree for sending to Linus?
hm, cpufreq stuff belongs into davej's tree.
i skipped #34 and #35 for now, we can live without them, correct?
Definitely, they were tacked on and don't belong with the others.
Cheers,
Rusty.
Re: [PATCH 35/35] x86: clean up speedctep-centrino and reduce cpumask_t usage From: Rusty Russell <[email protected]>
In reply to Ingo MolnarQuoted 15 lines · Ingo Molnar
Quoted 12 lines · Rusty Russell
Quoted 7 lines · On Thursday 23 October 2008 13:09:01 Mike Travis wrote:
1) The #ifdef
CONFIG_HOTPLUG_CPUseems unnecessary these days.
2) The loop can simply skip over offline cpus, rather than creating a tmp mask.
3)set_maskis set to either a single cpu or all online cpus in a policy. Since it's just used forset_cpus_allowed(), any offline cpus in a policy don't matter, so we can just usecpumask_of_cpu()or thepolicy->cpus.Note that this cleanup stands alone; it's just that I read this code I couldn't help but tidy it up.
Quoted 6 lines
Quoted 2 lines
Ingo: do you just want to put this in your normal tree for sending to Linus?
hm, cpufreq stuff belongs into davej's tree.
i skipped #34 and #35 for now, we can live without them, correct?
If those patches are dependant upon the others, I can live with them going through another tree. There's nothing pending for speedstep-centrino in cpufreq anyway.
Dave
Signature · 1 line
http://www.codemonkey.org.uk
Re: [PATCH 35/35] x86: clean up speedctep-centrino and reduce cpumask_t usage From: Rusty Russell <[email protected]>
Quoted 19 lines · Dave Jones
Quoted 18 lines · Ingo Molnar
Quoted 14 lines · Rusty Russell
Quoted 7 lines · On Thursday 23 October 2008 13:09:01 Mike Travis wrote:
1) The #ifdef
CONFIG_HOTPLUG_CPUseems unnecessary these days.
2) The loop can simply skip over offline cpus, rather than creating a tmp mask.
3)set_maskis set to either a single cpu or all online cpus in a policy. Since it's just used forset_cpus_allowed(), any offline cpus in a policy don't matter, so we can just usecpumask_of_cpu()or thepolicy->cpus.Note that this cleanup stands alone; it's just that I read this code I couldn't help but tidy it up.
Ingo: do you just want to put this in your normal tree for sending to Linus?
Quoted 7 lines
Quoted 3 lines
hm, cpufreq stuff belongs into davej's tree.
i skipped #34 and #35 for now, we can live without them, correct?
If those patches are dependant upon the others, I can live with them going through another tree. There's nothing pending for speedstep-centrino in cpufreq anyway.
ok - although the cleanups Rusty did look independent to me. We can just keep it in mind for the future, the whole topic is complex enough already as-is.
Ingo
Quoted 6 lines · Mike Travis
[Resubmit: cleanup and rebase on latest tip/master.]
Redesign cpumask API to explicitly declare struct cpumask pointers to the cpumask_* operators and add functions to make it easier to support struct cpumask pointers on the stack.
Quoted 8 lines
This patchset supplies the infrastructure going forward to implement this new struct cpumask API. Many more patches (currently 58) have been written and tested to verify the functionality of this API. These will be submitted as soon as they are thoroughly tested.
Compiled and tested on
x86_64.Based on tip/master @ v2.6.27-6973-ga90cd11
okay, i've picked up these patches into tip/cpus4096-v2 and started testing them.
I fixed the From: line oddities - please holler if they are wrong anywhere, we can still rebase this.
Note, i've merged this to _after_ the huge arch/x86/include/asm/ headers move which we sent a pull request for earlier today - this will simplify logistics.
( I also fixed up a handful of obvious style problems in various places
- please be more careful about comment structure, whitespaces, etc. - they just distract from general review and hurt the merits of your patches. )
I also added "Impact:" lines to every commit - a one-line summary of the expected outcome of the change. (Please double-check those impact lines
- if you see anything odd it means that i missed some detail in the commit - that will need to be fixed if it happens.)
I've just completed the first basic step of testing: i did 68 kernel builds to test bisectability: all 34 commit point builds fine on both 64-bit and 32-bit as well. (This took some time as almost every commit touches cpumask.h, forcing a full kernel rebuild.)
Ingo
Quoted 13 lines · Ingo Molnar
Quoted 11 lines · Mike Travis
[Resubmit: cleanup and rebase on latest tip/master.]
Redesign cpumask API to explicitly declare struct cpumask pointers to the cpumask_* operators and add functions to make it easier to support struct cpumask pointers on the stack.
This patchset supplies the infrastructure going forward to implement this new struct cpumask API. Many more patches (currently 58) have been written and tested to verify the functionality of this API. These will be submitted as soon as they are thoroughly tested.
Quoted 7 lines
Quoted 3 lines
Compiled and tested on
x86_64.Based on tip/master @ v2.6.27-6973-ga90cd11
okay, i've picked up these patches into tip/cpus4096-v2 and started testing them.
Thanks!
Quoted 2 lines
I fixed the From: line oddities - please holler if they are wrong anywhere, we can still rebase this.
I found two of them and had resubmitted them, but perhaps that didn't take either?
Quoted 9 lines
Note, i've merged this to _after_ the huge
arch/x86/include/asm/headers move which we sent a pull request for earlier today - this will simplify logistics.( I also fixed up a handful of obvious style problems in various places
- please be more careful about comment structure, whitespaces, etc. - they just distract from general review and hurt the merits of your patches. )
I ran all the patches through checkpatches, the only complaints were about unavoidable items (like we had to use NR_CPUS or we had to introduce two new typedefs). Everything else was error and warning free...?
Quoted 5 lines
I also added "Impact:" lines to every commit - a one-line summary of the expected outcome of the change. (Please double-check those impact lines
- if you see anything odd it means that i missed some detail in the commit - that will need to be fixed if it happens.)
Ok, thanks! I'll check them out.
Quoted 5 lines
I've just completed the first basic step of testing: i did 68 kernel builds to test bisectability: all 34 commit point builds fine on both 64-bit and 32-bit as well. (This took some time as almost every commit touches
cpumask.h, forcing a full kernel rebuild.)
Yes, my regression build for allyesconfig took about 11 hours.
Quoted 2 lines
Ingo
Thanks!
Mike
Quoted 5 lines · Mike Travis
Quoted 2 lines
I fixed the From: line oddities - please holler if they are wrong anywhere, we can still rebase this.
I found two of them and had resubmitted them, but perhaps that didn't take either?
i had to fix up about 20.
Ingo
Quoted 10 lines · Ingo Molnar
Quoted 4 lines · Mike Travis
Quoted 2 lines
I fixed the From: line oddities - please holler if they are wrong anywhere, we can still rebase this.
I found two of them and had resubmitted them, but perhaps that didn't take either?
i had to fix up about 20.
Ingo
Ok, thanks. I suspect quilt mail is handling things incorrectly (I am using a slightly older version (0.46 vs. 0.47) [the later removed "remove" which I found handier than "revert".] I'll put checking this out on my 'todo' list.
Thanks,
Mike
ok, the new cpumask code blew up in -tip testing, with various sorts of slab corruptions during scheduler init:
[ 0.544012] groups: 0-1 [ 0.546689] ============================================================================= [ 0.548000] BUG kmalloc-8: Wrong object count. Counter is 15 but counted were 50 [ 0.548000] ----------------------------------------------------------------------------- [ 0.548000] [ 0.548000] INFO: Slab 0xffffe200019d7ae0 objects=51 used=15 fp=0xffff88003f9cc4b0 flags=0x200000000000c3 [ 0.548000] Pid: 1, comm: swapper Not tainted 2.6.27-tip-07104-g5cf7b67-dirty #45066 [ 0.548000] Call Trace: [ 0.548000] [<ffffffff802cbcf0>] slab_err+0xa0/0xb0 [ 0.548000] [<ffffffff8026df2d>] ? trace_hardirqs_on+0xd/0x10 [ 0.548000] [<ffffffff8026deca>] ? trace_hardirqs_on_caller+0x15a/0x1b0 [ 0.548000] [<ffffffff8023d102>] ? cpu_attach_domain+0x172/0x6b0 [ 0.548000] [<ffffffff802cbf4d>] ? check_bytes_and_report+0x3d/0xe0 [ 0.548000] [<ffffffff802cd927>] on_freelist+0x197/0x240 [ 0.548000] [<ffffffff802ce926>] __slab_free+0x1a6/0x310 [ 0.548000] [<ffffffff80415009>] ? free_cpumask_var+0x9/0x10 [ 0.548000] [<ffffffff802ceb47>] kfree+0xb7/0x140 [ 0.548000] [<ffffffff80415009>] ? free_cpumask_var+0x9/0x10 [ 0.548000] [<ffffffff80415009>] free_cpumask_var+0x9/0x10 [ 0.548000] [<ffffffff8023dadc>] __build_sched_domains+0x49c/0xd30 [ 0.548000] [<ffffffff8026df2d>] ? trace_hardirqs_on+0xd/0x10 [ 0.548000] [<ffffffff816698fa>] sched_init_smp+0xba/0x2b0 [ 0.548000] [<ffffffff8026deca>] ? trace_hardirqs_on_caller+0x15a/0x1b0 [ 0.548000] [<ffffffff802cbf4d>] ? check_bytes_and_report+0x3d/0xe0 [ 0.548000] [<ffffffff802cdc08>] ? check_object+0x238/0x270 [ 0.548000] [<ffffffff802cc044>] ? init_object+0x54/0x90 [ 0.548000] [<ffffffff8026df2d>] ? trace_hardirqs_on+0xd/0x10 [ 0.548000] [<ffffffff8026deca>] ? trace_hardirqs_on_caller+0x15a/0x1b0 [ 0.548000] [<ffffffff8026df2d>] ? trace_hardirqs_on+0xd/0x10 [ 0.548000] [<ffffffff816622e4>] ? check_nmi_watchdog+0x204/0x260 [ 0.548000] [<ffffffff816622e4>] ? check_nmi_watchdog+0x204/0x260 [ 0.548000] [<ffffffff8165fad6>] ? native_smp_cpus_done+0x1a6/0x2b0 [ 0.548000] [<ffffffff81654f86>] kernel_init+0x176/0x240 [ 0.548000] [<ffffffff8020c9f9>] child_rip+0xa/0x11 [ 0.548000] [<ffffffff8020bf14>] ? restore_args+0x0/0x30 [ 0.548000] [<ffffffff81654e10>] ? kernel_init+0x0/0x240 [ 0.548000] [<ffffffff8020c9ef>] ? child_rip+0x0/0x11 [ 0.548000] FIX kmalloc-8: Object count adjusted. [ 0.548000] =============================================================================
i suspect it's due to:
01b8bd9: sched: cpumask: get rid of boutique sched.c allocations, use cpumask_va
note, CONFIG_MAXSMP is set in the .config, so this is with the dynamic cpumask_t.
Ingo
#
# Automatically generated make config: don't edit # Linux kernel version: 2.6.27
# Thu Oct 23 14:45:11 2008
#CONFIG_64BIT=y
# CONFIG_X86_32 is not setCONFIG_X86_64=yCONFIG_X86=y CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" CONFIG_GENERIC_TIME=yCONFIG_GENERIC_CMOS_UPDATE=y CONFIG_CLOCKSOURCE_WATCHDOG=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_HAVE_LATENCYTOP_SUPPORT=y CONFIG_FAST_CMPXCHG_LOCAL=yCONFIG_MMU=yCONFIG_ZONE_DMA=yCONFIG_GENERIC_ISA_DMA=yCONFIG_GENERIC_IOMAP=yCONFIG_GENERIC_BUG=yCONFIG_GENERIC_HWEIGHT=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_ARCH_HAS_CPU_RELAX=y CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_HAVE_SETUP_PER_CPU_AREA=y CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_ARCH_SUSPEND_POSSIBLE=yCONFIG_ZONE_DMA32=y CONFIG_ARCH_POPULATES_NODE_MAP=y CONFIG_AUDIT_ARCH=y CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_PENDING_IRQ=yCONFIG_X86_SMP=yCONFIG_X86_64_SMP=yCONFIG_X86_HT=yCONFIG_X86_BIOS_REBOOT=yCONFIG_X86_TRAMPOLINE=y
# CONFIG_KTIME_SCALAR is not set CONFIG_BOOTPARAM_SUPPORT_NOT_WANTED=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# General setup
#CONFIG_EXPERIMENTAL=yCONFIG_BROKEN_BOOT_ALLOWED4=yCONFIG_BROKEN_BOOT_ALLOWED3=y
# CONFIG_BROKEN_BOOT_ALLOWED2 is not setCONFIG_BROKEN_BOOT_EUROPE=yCONFIG_BROKEN_BOOT_TITAN=yCONFIG_LOCK_KERNEL=yCONFIG_INIT_ENV_ARG_LIMIT=32CONFIG_LOCALVERSION=""CONFIG_LOCALVERSION_AUTO=y
# CONFIG_SWAP is not set
# CONFIG_SYSVIPC is not setCONFIG_POSIX_MQUEUE=y
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not setCONFIG_AUDIT=yCONFIG_AUDITSYSCALL=yCONFIG_AUDIT_TREE=yCONFIG_IKCONFIG=mCONFIG_IKCONFIG_PROC=yCONFIG_LOG_BUF_SHIFT=21CONFIG_CGROUPS=yCONFIG_CGROUP_DEBUG=y
# CONFIG_CGROUP_NS is not setCONFIG_CGROUP_FREEZER=yCONFIG_CGROUP_DEVICE=yCONFIG_CPUSETS=yCONFIG_HAVE_UNSTABLE_SCHED_CLOCK=yCONFIG_GROUP_SCHED=yCONFIG_FAIR_GROUP_SCHED=yCONFIG_RT_GROUP_SCHED=yCONFIG_USER_SCHED=y
# CONFIG_CGROUP_SCHED is not set
# CONFIG_CGROUP_CPUACCT is not setCONFIG_RESOURCE_COUNTERS=y
# CONFIG_CGROUP_MEM_RES_CTLR is not setCONFIG_SYSFS_DEPRECATED=yCONFIG_SYSFS_DEPRECATED_V2=yCONFIG_PROC_PID_CPUSET=yCONFIG_RELAY=yCONFIG_NAMESPACES=yCONFIG_UTS_NS=y
# CONFIG_USER_NS is not setCONFIG_PID_NS=yCONFIG_BLK_DEV_INITRD=yCONFIG_INITRAMFS_SOURCE=""
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not setCONFIG_SYSCTL=yCONFIG_EMBEDDED=yCONFIG_UID16=yCONFIG_SYSCTL_SYSCALL=yCONFIG_KALLSYMS=yCONFIG_KALLSYMS_ALL=yCONFIG_KALLSYMS_EXTRA_PASS=yCONFIG_HOTPLUG=yCONFIG_PRINTK=yCONFIG_BUG=y
# CONFIG_ELF_CORE is not set
# CONFIG_PCSPKR_PLATFORM is not setCONFIG_COMPAT_BRK=yCONFIG_BASE_FULL=yCONFIG_FUTEX=yCONFIG_ANON_INODES=yCONFIG_EPOLL=yCONFIG_SIGNALFD=y
# CONFIG_TIMERFD is not setCONFIG_EVENTFD=y
# CONFIG_SHMEM is not setCONFIG_AIO=y
# CONFIG_VM_EVENT_COUNTERS is not setCONFIG_PCI_QUIRKS=yCONFIG_SLUB_DEBUG=y
# CONFIG_SLAB is not setCONFIG_SLUB=y
# CONFIG_SLOB is not setCONFIG_PROFILING=yCONFIG_TRACEPOINTS=yCONFIG_MARKERS=y
# CONFIG_OPROFILE is not setCONFIG_HAVE_OPROFILE=yCONFIG_KPROBES=yCONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=yCONFIG_KRETPROBES=yCONFIG_HAVE_IOREMAP_PROT=yCONFIG_HAVE_KPROBES=yCONFIG_HAVE_KRETPROBES=yCONFIG_HAVE_ARCH_TRACEHOOK=yCONFIG_USE_GENERIC_SMP_HELPERS=y
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not setCONFIG_SLABINFO=yCONFIG_RT_MUTEXES=yCONFIG_TINY_SHMEM=yCONFIG_BASE_SMALL=0CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not setCONFIG_MODULE_UNLOAD=yCONFIG_MODULE_FORCE_UNLOAD=yCONFIG_MODVERSIONS=yCONFIG_MODULE_SRCVERSION_ALL=yCONFIG_KMOD=yCONFIG_STOP_MACHINE=yCONFIG_BLOCK=yCONFIG_BLK_DEV_IO_TRACE=yCONFIG_BLK_DEV_BSG=yCONFIG_BLK_DEV_INTEGRITY=yCONFIG_BLOCK_COMPAT=y
#
# IO Schedulers
#CONFIG_IOSCHED_NOOP=yCONFIG_IOSCHED_AS=mCONFIG_IOSCHED_DEADLINE=mCONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not setCONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not setCONFIG_DEFAULT_IOSCHED="cfq"CONFIG_CLASSIC_RCU=yCONFIG_FREEZER=y
#
# Processor type and features
#
# CONFIG_NO_HZ is not set
# CONFIG_HIGH_RES_TIMERS is not set CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
# CONFIG_SMP_SUPPORT is not set CONFIG_X86_FIND_SMP_CONFIG=y CONFIG_X86_MPPARSE=y
# CONFIG_UP_WANTED_1 is not setCONFIG_SMP=yCONFIG_X86_PC=y
# CONFIG_X86_ELAN is not set
# CONFIG_X86_VOYAGER is not set
# CONFIG_X86_GENERICARCH is not set
# CONFIG_X86_VSMP is not set
# CONFIG_PARAVIRT_GUEST is not set
# CONFIG_MEMTEST is not set
# CONFIG_M386 is not set
# CONFIG_M486 is not set
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
# CONFIG_M586MMX is not set
# CONFIG_M686 is not set
# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not set
# CONFIG_MPENTIUMM is not set
# CONFIG_MPENTIUM4 is not set
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
# CONFIG_MCRUSOE is not set
# CONFIG_MEFFICEON is not set
# CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP3D is not set
# CONFIG_MGEODEGX1 is not set
# CONFIG_MGEODE_LX is not set
# CONFIG_MCYRIXIII is not set
# CONFIG_MVIAC3_2 is not set
# CONFIG_MVIAC7 is not set
# CONFIG_MPSC is not set
# CONFIG_MCORE2 is not setCONFIG_GENERIC_CPU=yCONFIG_X86_CPU=yCONFIG_X86_L1_CACHE_BYTES=128 CONFIG_X86_INTERNODE_CACHE_BYTES=128 CONFIG_X86_CMPXCHG=yCONFIG_X86_L1_CACHE_SHIFT=7 CONFIG_X86_WP_WORKS_OK=yCONFIG_X86_TSC=yCONFIG_X86_CMPXCHG64=yCONFIG_X86_CMOV=y CONFIG_X86_MINIMUM_CPU_FAMILY=64 CONFIG_X86_DEBUGCTLMSR=y CONFIG_PROCESSOR_SELECT=yCONFIG_CPU_SUP_INTEL=yCONFIG_CPU_SUP_AMD=yCONFIG_CPU_SUP_CENTAUR_64=y
# CONFIG_X86_DS is not set
# CONFIG_X86_PTRACE_BTS is not set CONFIG_HPET_TIMER=y
# CONFIG_DMI is not setCONFIG_GART_IOMMU=y
# CONFIG_CALGARY_IOMMU is not set CONFIG_SWIOTLB=yCONFIG_IOMMU_HELPER=yCONFIG_MAXSMP=yCONFIG_NR_CPUS=4096CONFIG_SCHED_SMT=y
# CONFIG_SCHED_MC is not set CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set CONFIG_CPUMASK_OFFSTACK=y CONFIG_X86_LOCAL_APIC=yCONFIG_X86_IO_APIC=y CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y CONFIG_X86_MCE=yCONFIG_X86_MCE_INTEL=y
# CONFIG_X86_MCE_AMD is not set
# CONFIG_I8K is not setCONFIG_MICROCODE=m
# CONFIG_MICROCODE_INTEL is not set
# CONFIG_MICROCODE_AMD is not set CONFIG_MICROCODE_OLD_INTERFACE=y CONFIG_X86_MSR=mCONFIG_X86_CPUID=m CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
# CONFIG_DIRECT_GBPAGES is not setCONFIG_NUMA=y
# CONFIG_K8_NUMA is not setCONFIG_NUMA_EMU=yCONFIG_NODES_SHIFT=9 CONFIG_ARCH_SPARSEMEM_DEFAULT=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ARCH_MEMORY_PROBE=y CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 CONFIG_SELECT_MEMORY_MODEL=y
# CONFIG_FLATMEM_MANUAL is not set
# CONFIG_DISCONTIGMEM_MANUAL is not set CONFIG_SPARSEMEM_MANUAL=yCONFIG_SPARSEMEM=yCONFIG_NEED_MULTIPLE_NODES=y CONFIG_HAVE_MEMORY_PRESENT=y CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_SPARSEMEM_VMEMMAP=y CONFIG_MEMORY_HOTPLUG=y CONFIG_MEMORY_HOTPLUG_SPARSE=y CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=4CONFIG_MIGRATION=yCONFIG_RESOURCES_64BIT=y CONFIG_PHYS_ADDR_T_64BIT=y CONFIG_ZONE_DMA_FLAG=1CONFIG_BOUNCE=yCONFIG_VIRT_TO_BUS=y
# CONFIG_UNEVICTABLE_LRU is not set CONFIG_X86_CHECK_BIOS_CORRUPTION=y
# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set # CONFIG_X86_RESERVE_LOW_64K is not set CONFIG_MTRR=yCONFIG_MTRR_SANITIZER=y CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0 CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 CONFIG_X86_PAT=y
# CONFIG_SECCOMP is not set CONFIG_CC_STACKPROTECTOR_ALL=y CONFIG_CC_STACKPROTECTOR=y
# CONFIG_HZ_100 is not setCONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not setCONFIG_HZ=250
# CONFIG_SCHED_HRTICK is not set
# CONFIG_KEXEC is not setCONFIG_CRASH_DUMP=y CONFIG_PHYSICAL_START=0x200000
# CONFIG_RELOCATABLE is not set CONFIG_PHYSICAL_ALIGN=0x200000 CONFIG_HOTPLUG_CPU=yCONFIG_COMPAT_VDSO=yCONFIG_CMDLINE_BOOL=yCONFIG_CMDLINE="" CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
#
# Power management options
#
# CONFIG_PM is not set
#
# CPU Frequency scaling
#CONFIG_CPU_FREQ=yCONFIG_CPU_FREQ_TABLE=m
# CONFIG_CPU_FREQ_DEBUG is not set CONFIG_CPU_FREQ_STAT=m CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
# CONFIG_CPU_FREQ_GOV_USERSPACE is not set CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
#
# CPUFreq processor drivers
#
# CONFIG_X86_POWERNOW_K8 is not setCONFIG_X86_P4_CLOCKMOD=m
#
# shared options # CONFIG_X86_SPEEDSTEP_LIB=m CONFIG_CPU_IDLE=y CONFIG_CPU_IDLE_GOV_LADDER=y
#
# Bus options (PCI etc.)
#CONFIG_PCI=yCONFIG_PCI_DIRECT=yCONFIG_PCI_DOMAINS=y
# CONFIG_PCIEPORTBUS is not setCONFIG_ARCH_SUPPORTS_MSI=yCONFIG_PCI_MSI=yCONFIG_PCI_LEGACY=y
# CONFIG_PCI_DEBUG is not setCONFIG_HT_IRQ=yCONFIG_ISA_DMA_API=yCONFIG_K8_NB=yCONFIG_PCCARD=m
# CONFIG_PCMCIA_DEBUG is not setCONFIG_PCMCIA=mCONFIG_PCMCIA_LOAD_CIS=yCONFIG_PCMCIA_IOCTL=y
# CONFIG_CARDBUS is not set
#
# PC-card bridges
#CONFIG_YENTA=mCONFIG_YENTA_O2=yCONFIG_YENTA_RICOH=yCONFIG_YENTA_TI=y
# CONFIG_YENTA_TOSHIBA is not setCONFIG_PD6729=m
# CONFIG_I82092 is not setCONFIG_PCCARD_NONSTATIC=m
# CONFIG_HOTPLUG_PCI is not set
#
# Executable file formats / Emulations
#CONFIG_BINFMT_ELF=yCONFIG_COMPAT_BINFMT_ELF=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
# CONFIG_HAVE_AOUT is not setCONFIG_BINFMT_MISC=yCONFIG_IA32_EMULATION=y
# CONFIG_IA32_AOUT is not setCONFIG_COMPAT=yCONFIG_COMPAT_FOR_U64_ALIGNMENT=yCONFIG_NET=y
#
# Networking options
#CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not setCONFIG_UNIX=yCONFIG_XFRM=y
# CONFIG_XFRM_USER is not set CONFIG_XFRM_SUB_POLICY=y CONFIG_XFRM_MIGRATE=y CONFIG_XFRM_STATISTICS=yCONFIG_XFRM_IPCOMP=yCONFIG_NET_KEY=yCONFIG_NET_KEY_MIGRATE=yCONFIG_INET=y
# CONFIG_IP_MULTICAST is not set CONFIG_IP_ADVANCED_ROUTER=y CONFIG_ASK_IP_FIB_HASH=y
# CONFIG_IP_FIB_TRIE is not set CONFIG_IP_FIB_HASH=y CONFIG_IP_MULTIPLE_TABLES=y CONFIG_IP_ROUTE_MULTIPATH=y CONFIG_IP_ROUTE_VERBOSE=yCONFIG_IP_PNP=yCONFIG_IP_PNP_DHCP=yCONFIG_IP_PNP_BOOTP=y
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set CONFIG_NET_IPGRE=y
# CONFIG_ARPD is not set
# CONFIG_SYN_COOKIES is not set CONFIG_INET_AH=y
# CONFIG_INET_ESP is not set CONFIG_INET_IPCOMP=y CONFIG_INET_XFRM_TUNNEL=y CONFIG_INET_TUNNEL=y
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set # CONFIG_INET_XFRM_MODE_TUNNEL is not set CONFIG_INET_XFRM_MODE_BEET=y CONFIG_INET_LRO=mCONFIG_INET_DIAG=mCONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not set CONFIG_TCP_CONG_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" CONFIG_TCP_MD5SIG=yCONFIG_IPV6=mCONFIG_IPV6_PRIVACY=y
# CONFIG_IPV6_ROUTER_PREF is not set CONFIG_IPV6_OPTIMISTIC_DAD=y CONFIG_INET6_AH=m
# CONFIG_INET6_ESP is not set CONFIG_INET6_IPCOMP=mCONFIG_IPV6_MIP6=mCONFIG_INET6_XFRM_TUNNEL=m CONFIG_INET6_TUNNEL=m
# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set # CONFIG_INET6_XFRM_MODE_TUNNEL is not set CONFIG_INET6_XFRM_MODE_BEET=m
# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set CONFIG_IPV6_SIT=m CONFIG_IPV6_NDISC_NODETYPE=y CONFIG_IPV6_TUNNEL=m
# CONFIG_IPV6_MULTIPLE_TABLES is not set CONFIG_IPV6_MROUTE=yCONFIG_IPV6_PIMSM_V2=yCONFIG_NETLABEL=yCONFIG_NETWORK_SECMARK=yCONFIG_NETFILTER=yCONFIG_NETFILTER_DEBUG=y CONFIG_NETFILTER_ADVANCED=y CONFIG_BRIDGE_NETFILTER=y
#
# Core Netfilter Configuration
#CONFIG_NETFILTER_NETLINK=yCONFIG_NETFILTER_NETLINK_QUEUE=yCONFIG_NETFILTER_NETLINK_LOG=yCONFIG_NF_CONNTRACK=mCONFIG_NF_CT_ACCT=yCONFIG_NF_CONNTRACK_MARK=yCONFIG_NF_CONNTRACK_SECMARK=yCONFIG_NF_CONNTRACK_EVENTS=y
# CONFIG_NF_CT_PROTO_DCCP is not set
# CONFIG_NF_CT_PROTO_SCTP is not setCONFIG_NF_CT_PROTO_UDPLITE=mCONFIG_NF_CONNTRACK_AMANDA=m
# CONFIG_NF_CONNTRACK_FTP is not setCONFIG_NF_CONNTRACK_H323=mCONFIG_NF_CONNTRACK_IRC=m
# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
# CONFIG_NF_CONNTRACK_PPTP is not set
# CONFIG_NF_CONNTRACK_SANE is not setCONFIG_NF_CONNTRACK_SIP=mCONFIG_NF_CONNTRACK_TFTP=mCONFIG_NF_CT_NETLINK=mCONFIG_NETFILTER_XTABLES=m
# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not setCONFIG_NETFILTER_XT_TARGET_CONNSECMARK=mCONFIG_NETFILTER_XT_TARGET_MARK=m
# CONFIG_NETFILTER_XT_TARGET_NFLOG is not setCONFIG_NETFILTER_XT_TARGET_NFQUEUE=mCONFIG_NETFILTER_XT_TARGET_RATEEST=mCONFIG_NETFILTER_XT_TARGET_SECMARK=mCONFIG_NETFILTER_XT_TARGET_TCPMSS=mCONFIG_NETFILTER_XT_MATCH_COMMENT=m
# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not setCONFIG_NETFILTER_XT_MATCH_CONNLIMIT=mCONFIG_NETFILTER_XT_MATCH_CONNMARK=m
# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not setCONFIG_NETFILTER_XT_MATCH_DCCP=mCONFIG_NETFILTER_XT_MATCH_DSCP=m
# CONFIG_NETFILTER_XT_MATCH_ESP is not set
# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
# CONFIG_NETFILTER_XT_MATCH_HELPER is not setCONFIG_NETFILTER_XT_MATCH_IPRANGE=mCONFIG_NETFILTER_XT_MATCH_LENGTH=mCONFIG_NETFILTER_XT_MATCH_LIMIT=mCONFIG_NETFILTER_XT_MATCH_MAC=m
# CONFIG_NETFILTER_XT_MATCH_MARK is not setCONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
# CONFIG_NETFILTER_XT_MATCH_OWNER is not setCONFIG_NETFILTER_XT_MATCH_POLICY=mCONFIG_NETFILTER_XT_MATCH_PHYSDEV=mCONFIG_NETFILTER_XT_MATCH_PKTTYPE=mCONFIG_NETFILTER_XT_MATCH_QUOTA=mCONFIG_NETFILTER_XT_MATCH_RATEEST=m
# CONFIG_NETFILTER_XT_MATCH_REALM is not setCONFIG_NETFILTER_XT_MATCH_RECENT=mCONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT=y
# CONFIG_NETFILTER_XT_MATCH_SCTP is not setCONFIG_NETFILTER_XT_MATCH_STATE=mCONFIG_NETFILTER_XT_MATCH_STATISTIC=mCONFIG_NETFILTER_XT_MATCH_STRING=mCONFIG_NETFILTER_XT_MATCH_TCPMSS=m
# CONFIG_NETFILTER_XT_MATCH_TIME is not setCONFIG_NETFILTER_XT_MATCH_U32=m
# CONFIG_IP_VS is not set
#
# IP: Netfilter Configuration
#
# CONFIG_NF_DEFRAG_IPV4 is not set
# CONFIG_NF_CONNTRACK_IPV4 is not setCONFIG_IP_NF_QUEUE=m
# CONFIG_IP_NF_IPTABLES is not setCONFIG_IP_NF_ARPTABLES=m
# CONFIG_IP_NF_ARPFILTER is not set
# CONFIG_IP_NF_ARP_MANGLE is not set
#
# IPv6: Netfilter Configuration
#
# CONFIG_NF_CONNTRACK_IPV6 is not set
# CONFIG_IP6_NF_QUEUE is not set
# CONFIG_IP6_NF_IPTABLES is not set
#
# DECnet: Netfilter Configuration
#
# CONFIG_DECNET_NF_GRABULATOR is not set
# CONFIG_BRIDGE_NF_EBTABLES is not set
# CONFIG_IP_DCCP is not setCONFIG_IP_SCTP=mCONFIG_SCTP_DBG_MSG=yCONFIG_SCTP_DBG_OBJCNT=y
# CONFIG_SCTP_HMAC_NONE is not set
# CONFIG_SCTP_HMAC_SHA1 is not setCONFIG_SCTP_HMAC_MD5=yCONFIG_TIPC=yCONFIG_TIPC_ADVANCED=yCONFIG_TIPC_ZONES=3CONFIG_TIPC_CLUSTERS=1CONFIG_TIPC_NODES=255CONFIG_TIPC_SLAVE_NODES=0CONFIG_TIPC_PORTS=8191CONFIG_TIPC_LOG=0CONFIG_TIPC_DEBUG=yCONFIG_ATM=y
# CONFIG_ATM_CLIP is not set
# CONFIG_ATM_LANE is not setCONFIG_ATM_BR2684=m
# CONFIG_ATM_BR2684_IPFILTER is not setCONFIG_STP=yCONFIG_BRIDGE=yCONFIG_NET_DSA=yCONFIG_NET_DSA_TAG_DSA=yCONFIG_NET_DSA_TAG_EDSA=yCONFIG_NET_DSA_TAG_TRAILER=yCONFIG_NET_DSA_MV88E6XXX=yCONFIG_NET_DSA_MV88E6060=yCONFIG_NET_DSA_MV88E6XXX_NEED_PPU=yCONFIG_NET_DSA_MV88E6131=yCONFIG_NET_DSA_MV88E6123_61_65=y
# CONFIG_VLAN_8021Q is not setCONFIG_DECNET=m
# CONFIG_DECNET_ROUTER is not setCONFIG_LLC=yCONFIG_LLC2=m
# CONFIG_IPX is not set
# CONFIG_ATALK is not setCONFIG_X25=y
# CONFIG_LAPB is not setCONFIG_ECONET=yCONFIG_ECONET_AUNUDP=y
# CONFIG_ECONET_NATIVE is not setCONFIG_WAN_ROUTER=mCONFIG_NET_SCHED=y
#
# Queueing/Scheduling
#CONFIG_NET_SCH_CBQ=mCONFIG_NET_SCH_HTB=mCONFIG_NET_SCH_HFSC=y
# CONFIG_NET_SCH_ATM is not setCONFIG_NET_SCH_PRIO=y
# CONFIG_NET_SCH_MULTIQ is not set
# CONFIG_NET_SCH_RED is not setCONFIG_NET_SCH_SFQ=yCONFIG_NET_SCH_TEQL=yCONFIG_NET_SCH_TBF=m
# CONFIG_NET_SCH_GRED is not setCONFIG_NET_SCH_DSMARK=m
# CONFIG_NET_SCH_NETEM is not set
#
# Classification
#CONFIG_NET_CLS=yCONFIG_NET_CLS_BASIC=y
# CONFIG_NET_CLS_TCINDEX is not setCONFIG_NET_CLS_ROUTE4=yCONFIG_NET_CLS_ROUTE=y
# CONFIG_NET_CLS_FW is not setCONFIG_NET_CLS_U32=mCONFIG_CLS_U32_PERF=y
# CONFIG_CLS_U32_MARK is not set
# CONFIG_NET_CLS_RSVP is not set
# CONFIG_NET_CLS_RSVP6 is not setCONFIG_NET_CLS_FLOW=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_CLS_ACT is not setCONFIG_NET_CLS_IND=yCONFIG_NET_SCH_FIFO=y
#
# Network testing
#CONFIG_NET_PKTGEN=mCONFIG_NET_TCPPROBE=mCONFIG_HAMRADIO=y
#
# Packet Radio protocols
#CONFIG_AX25=yCONFIG_AX25_DAMA_SLAVE=yCONFIG_NETROM=mCONFIG_ROSE=y
#
# AX.25 network device drivers
#
# CONFIG_MKISS is not setCONFIG_6PACK=y
# CONFIG_BPQETHER is not setCONFIG_BAYCOM_SER_FDX=mCONFIG_BAYCOM_SER_HDX=mCONFIG_YAM=y
# CONFIG_CAN is not setCONFIG_IRDA=m
#
# IrDA protocols
#
# CONFIG_IRLAN is not setCONFIG_IRNET=mCONFIG_IRCOMM=mCONFIG_IRDA_ULTRA=y
#
# IrDA options
#
# CONFIG_IRDA_CACHE_LAST_LSAP is not setCONFIG_IRDA_FAST_RR=y
# CONFIG_IRDA_DEBUG is not set
#
# Infrared-port device drivers
#
#
# SIR device drivers
#
# CONFIG_IRTTY_SIR is not set
#
# Dongle support
#
# CONFIG_KINGSUN_DONGLE is not setCONFIG_KSDAZZLE_DONGLE=mCONFIG_KS959_DONGLE=m
#
# FIR device drivers
#CONFIG_USB_IRDA=mCONFIG_SIGMATEL_FIR=mCONFIG_NSC_FIR=mCONFIG_WINBOND_FIR=mCONFIG_SMC_IRCC_FIR=mCONFIG_ALI_FIR=mCONFIG_VLSI_FIR=mCONFIG_VIA_FIR=mCONFIG_MCS_FIR=m
# CONFIG_BT is not setCONFIG_AF_RXRPC=mCONFIG_AF_RXRPC_DEBUG=yCONFIG_RXKAD=mCONFIG_PHONET=yCONFIG_FIB_RULES=yCONFIG_WIRELESS=yCONFIG_CFG80211=m
# CONFIG_NL80211 is not setCONFIG_WIRELESS_OLD_REGULATORY=yCONFIG_WIRELESS_EXT=yCONFIG_WIRELESS_EXT_SYSFS=y
# CONFIG_MAC80211 is not setCONFIG_IEEE80211=y
# CONFIG_IEEE80211_DEBUG is not setCONFIG_IEEE80211_CRYPT_WEP=yCONFIG_IEEE80211_CRYPT_CCMP=mCONFIG_IEEE80211_CRYPT_TKIP=y
# CONFIG_RFKILL is not set
#
# Device Drivers
#
#
# Generic Driver Options
#CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"CONFIG_STANDALONE=yCONFIG_PREVENT_FIRMWARE_BUILD=yCONFIG_FW_LOADER=yCONFIG_FIRMWARE_IN_KERNEL=yCONFIG_EXTRA_FIRMWARE=""CONFIG_DEBUG_DRIVER=yCONFIG_DEBUG_DEVRES=y
# CONFIG_SYS_HYPERVISOR is not setCONFIG_CONNECTOR=y
# CONFIG_PROC_EVENTS is not set
# CONFIG_PARPORT is not setCONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_FD is not setCONFIG_BLK_CPQ_DA=yCONFIG_BLK_CPQ_CISS_DA=yCONFIG_CISS_SCSI_TAPE=yCONFIG_BLK_DEV_DAC960=y
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not setCONFIG_BLK_DEV_LOOP=mCONFIG_BLK_DEV_CRYPTOLOOP=mCONFIG_BLK_DEV_NBD=m
# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not setCONFIG_CDROM_PKTCDVD=mCONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not setCONFIG_ATA_OVER_ETH=yCONFIG_BLK_DEV_HD=y
# CONFIG_MISC_DEVICES is not setCONFIG_TIFM_CORE=mCONFIG_HAVE_IDE=y
#
# SCSI device support
#CONFIG_RAID_ATTRS=mCONFIG_SCSI=yCONFIG_SCSI_DMA=y
# CONFIG_SCSI_TGT is not setCONFIG_SCSI_NETLINK=yCONFIG_SCSI_PROC_FS=y
#
# SCSI support type (disk, tape, CD-ROM)
#CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not setCONFIG_CHR_DEV_OSST=yCONFIG_BLK_DEV_SR=mCONFIG_BLK_DEV_SR_VENDOR=yCONFIG_CHR_DEV_SG=yCONFIG_CHR_DEV_SCH=y
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs #CONFIG_SCSI_MULTI_LUN=yCONFIG_SCSI_CONSTANTS=yCONFIG_SCSI_LOGGING=yCONFIG_SCSI_SCAN_ASYNC=yCONFIG_SCSI_WAIT_SCAN=m
#
# SCSI Transports
#CONFIG_SCSI_SPI_ATTRS=yCONFIG_SCSI_FC_ATTRS=yCONFIG_SCSI_ISCSI_ATTRS=m
# CONFIG_SCSI_SAS_ATTRS is not setCONFIG_SCSI_SRP_ATTRS=mCONFIG_SCSI_LOWLEVEL=yCONFIG_ISCSI_TCP=mCONFIG_BLK_DEV_3W_XXXX_RAID=mCONFIG_SCSI_3W_9XXX=mCONFIG_SCSI_ACARD=y
# CONFIG_SCSI_AACRAID is not setCONFIG_SCSI_AIC7XXX=yCONFIG_AIC7XXX_CMDS_PER_DEVICE=32CONFIG_AIC7XXX_RESET_DELAY_MS=5000CONFIG_AIC7XXX_DEBUG_ENABLE=yCONFIG_AIC7XXX_DEBUG_MASK=0CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not setCONFIG_SCSI_DPT_I2O=yCONFIG_SCSI_ADVANSYS=m
# CONFIG_SCSI_ARCMSR is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not setCONFIG_MEGARAID_SAS=yCONFIG_SCSI_HPTIOP=y
# CONFIG_SCSI_BUSLOGIC is not setCONFIG_SCSI_DMX3191D=m
# CONFIG_SCSI_EATA is not setCONFIG_SCSI_FUTURE_DOMAIN=yCONFIG_SCSI_GDTH=mCONFIG_SCSI_IPS=y
# CONFIG_SCSI_INITIO is not setCONFIG_SCSI_INIA100=yCONFIG_SCSI_STEX=yCONFIG_SCSI_SYM53C8XX_2=mCONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
# CONFIG_SCSI_SYM53C8XX_MMIO is not set
# CONFIG_SCSI_IPR is not setCONFIG_SCSI_QLOGIC_1280=y
# CONFIG_SCSI_QLA_FC is not setCONFIG_SCSI_QLA_ISCSI=mCONFIG_SCSI_LPFC=m
CONFIG_SCSI_DC395x=y
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_SRP is not set
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not setCONFIG_SCSI_DH=yCONFIG_SCSI_DH_RDAC=yCONFIG_SCSI_DH_HP_SW=m
# CONFIG_SCSI_DH_EMC is not set
# CONFIG_SCSI_DH_ALUA is not setCONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not setCONFIG_SATA_PMP=yCONFIG_SATA_AHCI=yCONFIG_SATA_SIL24=mCONFIG_ATA_SFF=yCONFIG_SATA_SVW=mCONFIG_ATA_PIIX=yCONFIG_SATA_MV=mCONFIG_SATA_NV=yCONFIG_PDC_ADMA=mCONFIG_SATA_QSTOR=y
# CONFIG_SATA_PROMISE is not setCONFIG_SATA_SX4=mCONFIG_SATA_SIL=yCONFIG_SATA_SIS=m
# CONFIG_SATA_ULI is not setCONFIG_SATA_VIA=m
# CONFIG_SATA_VITESSE is not set
# CONFIG_SATA_INIC162X is not setCONFIG_PATA_ALI=yCONFIG_PATA_AMD=yCONFIG_PATA_ARTOP=mCONFIG_PATA_ATIIXP=yCONFIG_PATA_CMD640_PCI=mCONFIG_PATA_CMD64X=yCONFIG_PATA_CS5520=yCONFIG_PATA_CS5530=mCONFIG_PATA_CYPRESS=mCONFIG_PATA_EFAR=yCONFIG_ATA_GENERIC=y
# CONFIG_PATA_HPT366 is not set
# CONFIG_PATA_HPT37X is not set
# CONFIG_PATA_HPT3X2N is not setCONFIG_PATA_HPT3X3=mCONFIG_PATA_HPT3X3_DMA=yCONFIG_PATA_IT821X=mCONFIG_PATA_IT8213=y
# CONFIG_PATA_JMICRON is not set
# CONFIG_PATA_TRIFLEX is not setCONFIG_PATA_MARVELL=mCONFIG_PATA_MPIIX=yCONFIG_PATA_OLDPIIX=y
# CONFIG_PATA_NETCELL is not setCONFIG_PATA_NINJA32=yCONFIG_PATA_NS87410=yCONFIG_PATA_NS87415=mCONFIG_PATA_OPTI=m
# CONFIG_PATA_OPTIDMA is not setCONFIG_PATA_PCMCIA=mCONFIG_PATA_PDC_OLD=yCONFIG_PATA_RADISYS=m
# CONFIG_PATA_RZ1000 is not setCONFIG_PATA_SC1200=yCONFIG_PATA_SERVERWORKS=yCONFIG_PATA_PDC2027X=mCONFIG_PATA_SIL680=yCONFIG_PATA_SIS=mCONFIG_PATA_VIA=m
# CONFIG_PATA_WINBOND is not setCONFIG_PATA_PLATFORM=mCONFIG_PATA_SCH=mCONFIG_MD=yCONFIG_BLK_DEV_MD=yCONFIG_MD_AUTODETECT=yCONFIG_MD_LINEAR=mCONFIG_MD_RAID0=y
# CONFIG_MD_RAID1 is not setCONFIG_MD_RAID10=yCONFIG_MD_RAID456=mCONFIG_MD_RAID5_RESHAPE=yCONFIG_MD_MULTIPATH=m
# CONFIG_MD_FAULTY is not setCONFIG_BLK_DEV_DM=m
# CONFIG_DM_DEBUG is not set
# CONFIG_DM_CRYPT is not setCONFIG_DM_SNAPSHOT=mCONFIG_DM_MIRROR=mCONFIG_DM_ZERO=mCONFIG_DM_MULTIPATH=mCONFIG_DM_DELAY=m
# CONFIG_DM_UEVENT is not set
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support
#
#
# Enable only one of the two stacks, unless you know what you are doing #CONFIG_FIREWIRE=mCONFIG_FIREWIRE_OHCI=mCONFIG_FIREWIRE_OHCI_DEBUG=y
# CONFIG_FIREWIRE_SBP2 is not setCONFIG_IEEE1394=m
# CONFIG_IEEE1394_OHCI1394 is not set
# CONFIG_IEEE1394_PCILYNX is not setCONFIG_IEEE1394_SBP2=m
# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y CONFIG_IEEE1394_ETH1394=mCONFIG_IEEE1394_RAWIO=mCONFIG_IEEE1394_VERBOSEDEBUG=yCONFIG_I2O=m
# CONFIG_I2O_LCT_NOTIFY_ON_CHANGES is not set CONFIG_I2O_EXT_ADAPTEC=y
# CONFIG_I2O_EXT_ADAPTEC_DMA64 is not setCONFIG_I2O_BUS=m
# CONFIG_I2O_BLOCK is not setCONFIG_I2O_SCSI=m
# CONFIG_I2O_PROC is not setCONFIG_MACINTOSH_DRIVERS=y
# CONFIG_MAC_EMUMOUSEBTN is not setCONFIG_NETDEVICES=yCONFIG_DUMMY=y
# CONFIG_BONDING is not set
# CONFIG_MACVLAN is not setCONFIG_EQUALIZER=yCONFIG_TUN=yCONFIG_VETH=m
# CONFIG_ARCNET is not setCONFIG_PHYLIB=y
#
# MII PHY device drivers
#
# CONFIG_MARVELL_PHY is not set CONFIG_DAVICOM_PHY=y
# CONFIG_QSEMI_PHY is not set CONFIG_LXT_PHY=yCONFIG_CICADA_PHY=yCONFIG_VITESSE_PHY=m
# CONFIG_SMSC_PHY is not set
# CONFIG_BROADCOM_PHY is not set
# CONFIG_ICPLUS_PHY is not set CONFIG_REALTEK_PHY=mCONFIG_FIXED_PHY=y
# CONFIG_MDIO_BITBANG is not set CONFIG_NET_ETHERNET=yCONFIG_MII=y
# CONFIG_HAPPYMEAL is not set CONFIG_SUNGEM=mCONFIG_CASSINI=y
# CONFIG_NET_VENDOR_3COM is not set CONFIG_VORTEX=yCONFIG_ENC28J60=y CONFIG_ENC28J60_WRITEVERIFY=y
# CONFIG_NET_TULIP is not set CONFIG_HP100=m
# CONFIG_IBM_NEW_EMAC_ZMII is not set
# CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set CONFIG_NET_PCI=yCONFIG_PCNET32=m
# CONFIG_AMD8111_ETH is not set CONFIG_ADAPTEC_STARFIRE=yCONFIG_B44=mCONFIG_B44_PCI_AUTOSELECT=y CONFIG_B44_PCICORE_AUTOSELECT=y CONFIG_B44_PCI=yCONFIG_FORCEDETH=yCONFIG_FORCEDETH_NAPI=yCONFIG_EEPRO100=yCONFIG_E100=yCONFIG_FEALNX=mCONFIG_NATSEMI=y
# CONFIG_NE2K_PCI is not set CONFIG_8139CP=yCONFIG_8139TOO=yCONFIG_8139TOO_PIO=y
# CONFIG_8139TOO_TUNE_TWISTER is not set CONFIG_8139TOO_8129=y CONFIG_8139_OLD_RX_RESET=yCONFIG_R6040=y
# CONFIG_SIS900 is not set CONFIG_EPIC100=mCONFIG_SUNDANCE=mCONFIG_SUNDANCE_MMIO=y
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_SC92031 is not set
# CONFIG_ATL2 is not set CONFIG_NETDEV_1000=yCONFIG_ACENIC=y CONFIG_ACENIC_OMIT_TIGON_I=yCONFIG_DL2K=yCONFIG_E1000=mCONFIG_E1000E=yCONFIG_IP1000=mCONFIG_IGB=mCONFIG_IGB_LRO=yCONFIG_NS83820=mCONFIG_HAMACHI=yCONFIG_YELLOWFIN=mCONFIG_R8169=y
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not setCONFIG_SKY2=yCONFIG_SKY2_DEBUG=y
# CONFIG_VIA_VELOCITY is not set CONFIG_TIGON3=yCONFIG_BNX2=mCONFIG_QLA3XXX=yCONFIG_ATL1=mCONFIG_ATL1E=mCONFIG_JME=m
# CONFIG_NETDEV_10000 is not set CONFIG_TR=yCONFIG_IBMOL=yCONFIG_3C359=yCONFIG_TMS380TR=mCONFIG_TMSPCI=mCONFIG_ABYSS=m
#
# Wireless LAN
#CONFIG_WLAN_PRE80211=yCONFIG_STRIP=yCONFIG_PCMCIA_WAVELAN=m
# CONFIG_PCMCIA_NETWAVE is not setCONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not setCONFIG_IPW2100=yCONFIG_IPW2100_MONITOR=yCONFIG_IPW2100_DEBUG=y
# CONFIG_IPW2200 is not setCONFIG_LIBERTAS=mCONFIG_LIBERTAS_USB=mCONFIG_LIBERTAS_CS=mCONFIG_LIBERTAS_SDIO=mCONFIG_LIBERTAS_DEBUG=y
# CONFIG_AIRO is not setCONFIG_HERMES=y
# CONFIG_PLX_HERMES is not set
# CONFIG_TMD_HERMES is not setCONFIG_NORTEL_HERMES=mCONFIG_PCI_HERMES=mCONFIG_PCMCIA_HERMES=m
# CONFIG_PCMCIA_SPECTRUM is not set
# CONFIG_ATMEL is not setCONFIG_AIRO_CS=mCONFIG_PCMCIA_WL3501=mCONFIG_PRISM54=y
# CONFIG_USB_ZD1201 is not setCONFIG_USB_NET_RNDIS_WLAN=y
# CONFIG_IWLWIFI_LEDS is not setCONFIG_HOSTAP=y
# CONFIG_HOSTAP_FIRMWARE is not set
# CONFIG_HOSTAP_PLX is not setCONFIG_HOSTAP_PCI=yCONFIG_HOSTAP_CS=m
#
# USB Network Adapters
#CONFIG_USB_CATC=y
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not setCONFIG_USB_RTL8150=yCONFIG_USB_USBNET=y
# CONFIG_USB_NET_AX8817X is not setCONFIG_USB_NET_CDCETHER=y
# CONFIG_USB_NET_DM9601 is not setCONFIG_USB_NET_SMSC95XX=mCONFIG_USB_NET_GL620A=yCONFIG_USB_NET_NET1080=yCONFIG_USB_NET_PLUSB=yCONFIG_USB_NET_MCS7830=mCONFIG_USB_NET_RNDIS_HOST=yCONFIG_USB_NET_CDC_SUBSET=mCONFIG_USB_ALI_M5632=y
# CONFIG_USB_AN2720 is not set
# CONFIG_USB_BELKIN is not set
# CONFIG_USB_ARMLINUX is not setCONFIG_USB_EPSON2888=yCONFIG_USB_KC2190=yCONFIG_USB_NET_ZAURUS=yCONFIG_NET_PCMCIA=yCONFIG_PCMCIA_3C589=m
# CONFIG_PCMCIA_3C574 is not set
# CONFIG_PCMCIA_FMVJ18X is not setCONFIG_PCMCIA_PCNET=m
# CONFIG_PCMCIA_NMCLAN is not setCONFIG_PCMCIA_SMC91C92=mCONFIG_PCMCIA_XIRC2PS=mCONFIG_PCMCIA_AXNET=mCONFIG_PCMCIA_IBMTR=mCONFIG_WAN=y
# CONFIG_HDLC is not setCONFIG_DLCI=yCONFIG_DLCI_MAX=8CONFIG_WAN_ROUTER_DRIVERS=mCONFIG_CYCLADES_SYNC=mCONFIG_CYCLOMX_X25=yCONFIG_SBNI=m
# CONFIG_SBNI_MULTILINE is not setCONFIG_ATM_DRIVERS=y
# CONFIG_ATM_DUMMY is not set
# CONFIG_ATM_TCP is not set
# CONFIG_ATM_LANAI is not setCONFIG_ATM_ENI=yCONFIG_ATM_ENI_DEBUG=yCONFIG_ATM_ENI_TUNE_BURST=yCONFIG_ATM_ENI_BURST_TX_16W=y
# CONFIG_ATM_ENI_BURST_TX_8W is not setCONFIG_ATM_ENI_BURST_TX_4W=yCONFIG_ATM_ENI_BURST_TX_2W=yCONFIG_ATM_ENI_BURST_RX_16W=yCONFIG_ATM_ENI_BURST_RX_8W=y
# CONFIG_ATM_ENI_BURST_RX_4W is not set
# CONFIG_ATM_ENI_BURST_RX_2W is not setCONFIG_ATM_FIRESTREAM=mCONFIG_ATM_ZATM=yCONFIG_ATM_ZATM_DEBUG=yCONFIG_ATM_IDT77252=mCONFIG_ATM_IDT77252_DEBUG=yCONFIG_ATM_IDT77252_RCV_ALL=yCONFIG_ATM_IDT77252_USE_SUNI=y
# CONFIG_ATM_AMBASSADOR is not set
# CONFIG_ATM_HORIZON is not setCONFIG_ATM_IA=yCONFIG_ATM_IA_DEBUG=yCONFIG_ATM_FORE200E=yCONFIG_ATM_FORE200E_USE_TASKLET=yCONFIG_ATM_FORE200E_TX_RETRY=16CONFIG_ATM_FORE200E_DEBUG=0CONFIG_ATM_HE=mCONFIG_ATM_HE_USE_SUNI=yCONFIG_FDDI=yCONFIG_DEFXX=y
# CONFIG_DEFXX_MMIO is not setCONFIG_SKFP=m
# CONFIG_HIPPI is not setCONFIG_PPP=m
# CONFIG_PPP_MULTILINK is not set
# CONFIG_PPP_FILTER is not setCONFIG_PPP_ASYNC=mCONFIG_PPP_SYNC_TTY=mCONFIG_PPP_DEFLATE=m
# CONFIG_PPP_BSDCOMP is not setCONFIG_PPP_MPPE=mCONFIG_PPPOE=mCONFIG_PPPOATM=m
# CONFIG_PPPOL2TP is not set
# CONFIG_SLIP is not setCONFIG_SLHC=mCONFIG_NET_FC=yCONFIG_NETCONSOLE=yCONFIG_NETCONSOLE_DYNAMIC=yCONFIG_NETPOLL=y
# CONFIG_NETPOLL_TRAP is not setCONFIG_NET_POLL_CONTROLLER=yCONFIG_ISDN=y
# CONFIG_ISDN_I4L is not setCONFIG_ISDN_CAPI=y
# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not setCONFIG_CAPI_TRACE=yCONFIG_ISDN_CAPI_MIDDLEWARE=yCONFIG_ISDN_CAPI_CAPI20=mCONFIG_ISDN_CAPI_CAPIFS_BOOL=yCONFIG_ISDN_CAPI_CAPIFS=m
#
# CAPI hardware drivers
#
# CONFIG_CAPI_AVM is not set
# CONFIG_CAPI_EICON is not setCONFIG_PHONE=y
#
# Input device support
#CONFIG_INPUT=yCONFIG_INPUT_FF_MEMLESS=yCONFIG_INPUT_POLLDEV=y
#
# Userland interfaces
#CONFIG_INPUT_MOUSEDEV=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not setCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set
#
# Input Device Drivers
#CONFIG_INPUT_KEYBOARD=yCONFIG_KEYBOARD_ATKBD=yCONFIG_KEYBOARD_SUNKBD=m
# CONFIG_KEYBOARD_LKKBD is not setCONFIG_KEYBOARD_XTKBD=yCONFIG_KEYBOARD_NEWTON=yCONFIG_KEYBOARD_STOWAWAY=yCONFIG_INPUT_MOUSE=yCONFIG_MOUSE_PS2=m
# CONFIG_MOUSE_PS2_ALPS is not setCONFIG_MOUSE_PS2_LOGIPS2PP=y
# CONFIG_MOUSE_PS2_SYNAPTICS is not setCONFIG_MOUSE_PS2_LIFEBOOK=y
# CONFIG_MOUSE_PS2_TRACKPOINT is not set
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_APPLETOUCH is not set
# CONFIG_MOUSE_BCM5974 is not set
# CONFIG_MOUSE_VSXXXAA is not setCONFIG_INPUT_JOYSTICK=yCONFIG_JOYSTICK_ANALOG=yCONFIG_JOYSTICK_A3D=mCONFIG_JOYSTICK_ADI=yCONFIG_JOYSTICK_COBRA=mCONFIG_JOYSTICK_GF2K=yCONFIG_JOYSTICK_GRIP=mCONFIG_JOYSTICK_GRIP_MP=mCONFIG_JOYSTICK_GUILLEMOT=m
# CONFIG_JOYSTICK_INTERACT is not set
# CONFIG_JOYSTICK_SIDEWINDER is not set
# CONFIG_JOYSTICK_TMDC is not setCONFIG_JOYSTICK_IFORCE=yCONFIG_JOYSTICK_IFORCE_USB=yCONFIG_JOYSTICK_IFORCE_232=yCONFIG_JOYSTICK_WARRIOR=y
# CONFIG_JOYSTICK_MAGELLAN is not setCONFIG_JOYSTICK_SPACEORB=mCONFIG_JOYSTICK_SPACEBALL=mCONFIG_JOYSTICK_STINGER=mCONFIG_JOYSTICK_TWIDJOY=yCONFIG_JOYSTICK_ZHENHUA=yCONFIG_JOYSTICK_JOYDUMP=y
# CONFIG_JOYSTICK_XPAD is not setCONFIG_INPUT_TABLET=yCONFIG_TABLET_USB_ACECAD=yCONFIG_TABLET_USB_AIPTEK=mCONFIG_TABLET_USB_GTCO=mCONFIG_TABLET_USB_KBTAB=mCONFIG_TABLET_USB_WACOM=mCONFIG_INPUT_TOUCHSCREEN=yCONFIG_TOUCHSCREEN_ADS7846=yCONFIG_TOUCHSCREEN_FUJITSU=yCONFIG_TOUCHSCREEN_GUNZE=yCONFIG_TOUCHSCREEN_ELO=mCONFIG_TOUCHSCREEN_MTOUCH=mCONFIG_TOUCHSCREEN_INEXIO=y
# CONFIG_TOUCHSCREEN_MK712 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not setCONFIG_TOUCHSCREEN_TOUCHRIGHT=m
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_WM97XX is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not setCONFIG_TOUCHSCREEN_TOUCHIT213=mCONFIG_INPUT_MISC=yCONFIG_INPUT_APANEL=mCONFIG_INPUT_ATI_REMOTE=mCONFIG_INPUT_ATI_REMOTE2=mCONFIG_INPUT_KEYSPAN_REMOTE=yCONFIG_INPUT_POWERMATE=mCONFIG_INPUT_YEALINK=mCONFIG_INPUT_CM109=m
# CONFIG_INPUT_UINPUT is not set
#
# Hardware I/O ports
#CONFIG_SERIO=yCONFIG_SERIO_I8042=yCONFIG_SERIO_SERPORT=mCONFIG_SERIO_CT82C710=mCONFIG_SERIO_PCIPS2=yCONFIG_SERIO_LIBPS2=yCONFIG_SERIO_RAW=mCONFIG_GAMEPORT=yCONFIG_GAMEPORT_NS558=m
# CONFIG_GAMEPORT_L4 is not setCONFIG_GAMEPORT_EMU10K1=m
# CONFIG_GAMEPORT_FM801 is not set
#
# Character devices
#CONFIG_VT=yCONFIG_CONSOLE_TRANSLATIONS=yCONFIG_VT_CONSOLE=yCONFIG_HW_CONSOLE=yCONFIG_VT_HW_CONSOLE_BINDING=y
# CONFIG_DEVKMEM is not setCONFIG_SERIAL_NONSTANDARD=yCONFIG_COMPUTONE=yCONFIG_ROCKETPORT=y
# CONFIG_CYCLADES is not set
# CONFIG_DIGIEPCA is not set
# CONFIG_MOXA_INTELLIO is not set
# CONFIG_MOXA_SMARTIO is not setCONFIG_ISI=mCONFIG_SYNCLINK=y
# CONFIG_SYNCLINKMP is not setCONFIG_SYNCLINK_GT=mCONFIG_N_HDLC=yCONFIG_RISCOM8=mCONFIG_SPECIALIX=mCONFIG_SX=mCONFIG_RIO=yCONFIG_RIO_OLDPCI=y
# CONFIG_STALDRV is not setCONFIG_NOZOMI=m
#
# Serial drivers
#CONFIG_SERIAL_8250=yCONFIG_SERIAL_8250_CONSOLE=yCONFIG_FIX_EARLYCON_MEM=yCONFIG_SERIAL_8250_PCI=mCONFIG_SERIAL_8250_CS=mCONFIG_SERIAL_8250_NR_UARTS=4CONFIG_SERIAL_8250_RUNTIME_UARTS=4
# CONFIG_SERIAL_8250_EXTENDED is not set
#
# Non-8250 serial port support
#CONFIG_SERIAL_CORE=yCONFIG_SERIAL_CORE_CONSOLE=yCONFIG_CONSOLE_POLL=yCONFIG_SERIAL_JSM=yCONFIG_UNIX98_PTYS=yCONFIG_LEGACY_PTYS=yCONFIG_LEGACY_PTY_COUNT=256CONFIG_IPMI_HANDLER=y
# CONFIG_IPMI_PANIC_EVENT is not setCONFIG_IPMI_DEVICE_INTERFACE=mCONFIG_IPMI_SI=mCONFIG_IPMI_WATCHDOG=y
# CONFIG_IPMI_POWEROFF is not setCONFIG_HW_RANDOM=mCONFIG_HW_RANDOM_INTEL=mCONFIG_HW_RANDOM_AMD=mCONFIG_NVRAM=mCONFIG_R3964=mCONFIG_APPLICOM=m
#
# PCMCIA character devices
#CONFIG_SYNCLINK_CS=mCONFIG_CARDMAN_4000=mCONFIG_CARDMAN_4040=mCONFIG_IPWIRELESS=m
# CONFIG_MWAVE is not set
# CONFIG_PC8736x_GPIO is not setCONFIG_RAW_DRIVER=yCONFIG_MAX_RAW_DEVS=256CONFIG_HANGCHECK_TIMER=yCONFIG_TCG_TPM=m
# CONFIG_TCG_NSC is not setCONFIG_TCG_ATMEL=m
# CONFIG_TELCLOCK is not setCONFIG_DEVPORT=yCONFIG_I2C=mCONFIG_I2C_BOARDINFO=yCONFIG_I2C_CHARDEV=mCONFIG_I2C_HELPER_AUTO=yCONFIG_I2C_ALGOBIT=mCONFIG_I2C_ALGOPCA=m
#
# I2C Hardware Bus support
#
#
# PC SMBus host controller drivers
#
# CONFIG_I2C_ALI1535 is not setCONFIG_I2C_ALI1563=mCONFIG_I2C_ALI15X3=m
# CONFIG_I2C_AMD756 is not setCONFIG_I2C_AMD8111=mCONFIG_I2C_I801=m
# CONFIG_I2C_ISCH is not set
# CONFIG_I2C_PIIX4 is not setCONFIG_I2C_NFORCE2=mCONFIG_I2C_SIS5595=mCONFIG_I2C_SIS630=m
# CONFIG_I2C_SIS96X is not set
# CONFIG_I2C_VIA is not set
# CONFIG_I2C_VIAPRO is not set
#
# I2C system bus drivers (mostly embedded / system-on-chip) #CONFIG_I2C_OCORES=mCONFIG_I2C_SIMTEC=m
#
# External I2C/SMBus adapter drivers
#CONFIG_I2C_PARPORT_LIGHT=mCONFIG_I2C_TAOS_EVM=m
# CONFIG_I2C_TINY_USB is not set
#
# Graphics adapter I2C/DDC channel drivers
#CONFIG_I2C_VOODOO3=m
#
# Other I2C/SMBus bus drivers
#CONFIG_I2C_PCA_PLATFORM=mCONFIG_I2C_STUB=m
#
# Miscellaneous I2C Chip support
#
# CONFIG_DS1682 is not setCONFIG_AT24=mCONFIG_SENSORS_EEPROM=mCONFIG_SENSORS_PCF8574=mCONFIG_PCF8575=m
# CONFIG_SENSORS_PCA9539 is not setCONFIG_SENSORS_PCF8591=mCONFIG_SENSORS_MAX6875=mCONFIG_SENSORS_TSL2550=mCONFIG_I2C_DEBUG_CORE=yCONFIG_I2C_DEBUG_ALGO=yCONFIG_I2C_DEBUG_BUS=yCONFIG_I2C_DEBUG_CHIP=yCONFIG_SPI=y
# CONFIG_SPI_DEBUG is not setCONFIG_SPI_MASTER=y
#
# SPI Master Controller Drivers
#CONFIG_SPI_BITBANG=y
#
# SPI Protocol Masters
#CONFIG_SPI_AT25=y
# CONFIG_SPI_SPIDEV is not setCONFIG_SPI_TLE62X0=yCONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
# CONFIG_GPIOLIB is not set
# CONFIG_W1 is not set
# CONFIG_POWER_SUPPLY is not setCONFIG_HWMON=yCONFIG_HWMON_VID=yCONFIG_SENSORS_ABITUGURU=y
# CONFIG_SENSORS_ABITUGURU3 is not setCONFIG_SENSORS_AD7414=mCONFIG_SENSORS_AD7418=m
# CONFIG_SENSORS_ADCXX is not setCONFIG_SENSORS_ADM1021=mCONFIG_SENSORS_ADM1025=mCONFIG_SENSORS_ADM1026=mCONFIG_SENSORS_ADM1029=mCONFIG_SENSORS_ADM1031=mCONFIG_SENSORS_ADM9240=mCONFIG_SENSORS_ADT7470=mCONFIG_SENSORS_ADT7473=m
# CONFIG_SENSORS_K8TEMP is not setCONFIG_SENSORS_ASB100=m
# CONFIG_SENSORS_ATXP1 is not setCONFIG_SENSORS_DS1621=m
# CONFIG_SENSORS_I5K_AMB is not set
# CONFIG_SENSORS_F71805F is not setCONFIG_SENSORS_F71882FG=yCONFIG_SENSORS_F75375S=mCONFIG_SENSORS_FSCHER=m
# CONFIG_SENSORS_FSCPOS is not setCONFIG_SENSORS_FSCHMD=mCONFIG_SENSORS_GL518SM=mCONFIG_SENSORS_GL520SM=mCONFIG_SENSORS_CORETEMP=mCONFIG_SENSORS_IBMAEM=m
# CONFIG_SENSORS_IBMPEX is not setCONFIG_SENSORS_IT87=y
# CONFIG_SENSORS_LM63 is not setCONFIG_SENSORS_LM70=mCONFIG_SENSORS_LM75=m
# CONFIG_SENSORS_LM77 is not setCONFIG_SENSORS_LM78=m
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not setCONFIG_SENSORS_LM85=mCONFIG_SENSORS_LM87=mCONFIG_SENSORS_LM90=m
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_LM93 is not setCONFIG_SENSORS_MAX1111=yCONFIG_SENSORS_MAX1619=m
# CONFIG_SENSORS_MAX6650 is not setCONFIG_SENSORS_PC87360=mCONFIG_SENSORS_PC87427=mCONFIG_SENSORS_SIS5595=mCONFIG_SENSORS_DME1737=m
# CONFIG_SENSORS_SMSC47M1 is not setCONFIG_SENSORS_SMSC47M192=mCONFIG_SENSORS_SMSC47B397=yCONFIG_SENSORS_ADS7828=mCONFIG_SENSORS_THMC50=mCONFIG_SENSORS_VIA686A=yCONFIG_SENSORS_VT1211=m
# CONFIG_SENSORS_VT8231 is not set
# CONFIG_SENSORS_W83781D is not setCONFIG_SENSORS_W83791D=mCONFIG_SENSORS_W83792D=m
# CONFIG_SENSORS_W83793 is not set
# CONFIG_SENSORS_W83L785TS is not setCONFIG_SENSORS_W83L786NG=mCONFIG_SENSORS_W83627HF=m
# CONFIG_SENSORS_W83627EHF is not setCONFIG_SENSORS_HDAPS=m
# CONFIG_SENSORS_APPLESMC is not set
# CONFIG_HWMON_DEBUG_CHIP is not setCONFIG_THERMAL=mCONFIG_THERMAL_HWMON=yCONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set
#
# Watchdog Device Drivers
#
# CONFIG_SOFT_WATCHDOG is not setCONFIG_ACQUIRE_WDT=yCONFIG_ADVANTECH_WDT=yCONFIG_ALIM1535_WDT=yCONFIG_ALIM7101_WDT=yCONFIG_SC520_WDT=m
# CONFIG_IB700_WDT is not setCONFIG_IBMASR=mCONFIG_WAFER_WDT=yCONFIG_I6300ESB_WDT=m
# CONFIG_ITCO_WDT is not set
# CONFIG_IT8712F_WDT is not set
# CONFIG_IT87_WDT is not setCONFIG_HP_WATCHDOG=m
# CONFIG_SC1200_WDT is not setCONFIG_PC87413_WDT=y
# CONFIG_60XX_WDT is not set
# CONFIG_SBC8360_WDT is not setCONFIG_CPU5_WDT=yCONFIG_SMSC37B787_WDT=mCONFIG_W83627HF_WDT=y
# CONFIG_W83697HF_WDT is not setCONFIG_W83697UG_WDT=m
# CONFIG_W83877F_WDT is not set
# CONFIG_W83977F_WDT is not setCONFIG_MACHZ_WDT=m
# CONFIG_SBC_EPX_C3_WATCHDOG is not set
#
# PCI-based Watchdog Cards
#
# CONFIG_PCIPCWATCHDOG is not setCONFIG_WDTPCI=yCONFIG_WDT_501_PCI=y
#
# USB-based Watchdog Cards
#CONFIG_USBPCWATCHDOG=m
#
# Sonics Silicon Backplane
#CONFIG_SSB_POSSIBLE=yCONFIG_SSB=mCONFIG_SSB_SPROM=yCONFIG_SSB_PCIHOST_POSSIBLE=yCONFIG_SSB_PCIHOST=y
# CONFIG_SSB_B43_PCI_BRIDGE is not setCONFIG_SSB_PCMCIAHOST_POSSIBLE=y
# CONFIG_SSB_PCMCIAHOST is not set
# CONFIG_SSB_SILENT is not setCONFIG_SSB_DEBUG=yCONFIG_SSB_DRIVER_PCICORE_POSSIBLE=yCONFIG_SSB_DRIVER_PCICORE=y
#
# Multifunction device drivers
#
# CONFIG_MFD_CORE is not setCONFIG_MFD_SM501=y
# CONFIG_HTC_PASIC3 is not set
# CONFIG_MFD_TMIO is not set
#
# Multimedia devices
#
#
# Multimedia core support
#CONFIG_VIDEO_DEV=yCONFIG_VIDEO_V4L2_COMMON=m
# CONFIG_VIDEO_ALLOW_V4L1 is not set
# CONFIG_VIDEO_V4L1_COMPAT is not set
# CONFIG_DVB_CORE is not setCONFIG_VIDEO_MEDIA=y
#
# Multimedia drivers
#CONFIG_MEDIA_ATTACH=yCONFIG_MEDIA_TUNER=m
# CONFIG_MEDIA_TUNER_CUSTOMIZE is not setCONFIG_MEDIA_TUNER_SIMPLE=mCONFIG_MEDIA_TUNER_TDA8290=mCONFIG_MEDIA_TUNER_TDA9887=mCONFIG_MEDIA_TUNER_TEA5761=mCONFIG_MEDIA_TUNER_TEA5767=mCONFIG_MEDIA_TUNER_MT20XX=mCONFIG_MEDIA_TUNER_XC2028=mCONFIG_MEDIA_TUNER_XC5000=mCONFIG_VIDEO_V4L2=mCONFIG_VIDEOBUF_GEN=mCONFIG_VIDEOBUF_DMA_SG=mCONFIG_VIDEOBUF_VMALLOC=mCONFIG_VIDEO_BTCX=mCONFIG_VIDEO_IR=mCONFIG_VIDEO_TVEEPROM=mCONFIG_VIDEO_TUNER=mCONFIG_VIDEO_CAPTURE_DRIVERS=y
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not setCONFIG_VIDEO_HELPER_CHIPS_AUTO=yCONFIG_VIDEO_IR_I2C=mCONFIG_VIDEO_TVAUDIO=mCONFIG_VIDEO_TDA7432=mCONFIG_VIDEO_TDA9875=mCONFIG_VIDEO_MSP3400=mCONFIG_VIDEO_CS53L32A=mCONFIG_VIDEO_WM8775=mCONFIG_VIDEO_OV7670=mCONFIG_VIDEO_SAA711X=mCONFIG_VIDEO_TVP5150=mCONFIG_VIDEO_CX25840=mCONFIG_VIDEO_CX2341X=mCONFIG_VIDEO_VIVI=mCONFIG_VIDEO_BT848=mCONFIG_VIDEO_SAA6588=m
# CONFIG_VIDEO_SAA5246A is not setCONFIG_VIDEO_SAA5249=mCONFIG_VIDEO_SAA7134=m
# CONFIG_VIDEO_SAA7134_ALSA is not set
# CONFIG_VIDEO_HEXIUM_ORION is not set
# CONFIG_VIDEO_HEXIUM_GEMINI is not setCONFIG_VIDEO_CAFE_CCIC=mCONFIG_SOC_CAMERA=mCONFIG_SOC_CAMERA_MT9M001=mCONFIG_SOC_CAMERA_MT9M111=m
# CONFIG_SOC_CAMERA_MT9V022 is not setCONFIG_SOC_CAMERA_PLATFORM=m
# CONFIG_VIDEO_SH_MOBILE_CEU is not setCONFIG_V4L_USB_DRIVERS=yCONFIG_USB_VIDEO_CLASS=mCONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=yCONFIG_USB_GSPCA=mCONFIG_USB_M5602=m
# CONFIG_USB_GSPCA_CONEX is not setCONFIG_USB_GSPCA_ETOMS=mCONFIG_USB_GSPCA_FINEPIX=mCONFIG_USB_GSPCA_MARS=mCONFIG_USB_GSPCA_OV519=m
# CONFIG_USB_GSPCA_PAC207 is not setCONFIG_USB_GSPCA_PAC7311=mCONFIG_USB_GSPCA_SONIXB=mCONFIG_USB_GSPCA_SONIXJ=mCONFIG_USB_GSPCA_SPCA500=mCONFIG_USB_GSPCA_SPCA501=mCONFIG_USB_GSPCA_SPCA505=m
# CONFIG_USB_GSPCA_SPCA506 is not setCONFIG_USB_GSPCA_SPCA508=mCONFIG_USB_GSPCA_SPCA561=m
# CONFIG_USB_GSPCA_STK014 is not setCONFIG_USB_GSPCA_SUNPLUS=mCONFIG_USB_GSPCA_T613=mCONFIG_USB_GSPCA_TV8532=m
# CONFIG_USB_GSPCA_VC032X is not set
# CONFIG_USB_GSPCA_ZC3XX is not setCONFIG_VIDEO_PVRUSB2=mCONFIG_VIDEO_PVRUSB2_SYSFS=yCONFIG_VIDEO_PVRUSB2_DEBUGIFC=yCONFIG_VIDEO_EM28XX=mCONFIG_VIDEO_EM28XX_ALSA=m
# CONFIG_VIDEO_USBVISION is not set
# CONFIG_USB_ET61X251 is not set
# CONFIG_USB_SN9C102 is not setCONFIG_USB_ZC0301=mCONFIG_USB_ZR364XX=mCONFIG_USB_STKWEBCAM=mCONFIG_USB_S2255=mCONFIG_RADIO_ADAPTERS=yCONFIG_RADIO_GEMTEK_PCI=mCONFIG_RADIO_MAXIRADIO=mCONFIG_RADIO_MAESTRO=mCONFIG_USB_DSBR=m
# CONFIG_USB_SI470X is not setCONFIG_USB_MR800=m
# CONFIG_DAB is not set
#
# Graphics support
#CONFIG_AGP=yCONFIG_AGP_AMD64=y
# CONFIG_AGP_INTEL is not set
# CONFIG_AGP_SIS is not setCONFIG_AGP_VIA=yCONFIG_DRM=mCONFIG_DRM_TDFX=m
# CONFIG_DRM_R128 is not setCONFIG_DRM_RADEON=mCONFIG_DRM_MGA=mCONFIG_DRM_SIS=mCONFIG_DRM_VIA=mCONFIG_DRM_SAVAGE=mCONFIG_VGASTATE=mCONFIG_VIDEO_OUTPUT_CONTROL=mCONFIG_FB=mCONFIG_FIRMWARE_EDID=yCONFIG_FB_DDC=mCONFIG_FB_BOOT_VESA_SUPPORT=yCONFIG_FB_CFB_FILLRECT=mCONFIG_FB_CFB_COPYAREA=mCONFIG_FB_CFB_IMAGEBLIT=m
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not setCONFIG_FB_SYS_FILLRECT=mCONFIG_FB_SYS_COPYAREA=mCONFIG_FB_SYS_IMAGEBLIT=m
# CONFIG_FB_FOREIGN_ENDIAN is not setCONFIG_FB_SYS_FOPS=mCONFIG_FB_DEFERRED_IO=yCONFIG_FB_HECUBA=mCONFIG_FB_SVGALIB=m
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not setCONFIG_FB_MODE_HELPERS=yCONFIG_FB_TILEBLITTING=y
#
# Frame buffer hardware drivers
#CONFIG_FB_PM2=mCONFIG_FB_PM2_FIFO_DISCONNECT=yCONFIG_FB_CYBER2000=mCONFIG_FB_ARC=mCONFIG_FB_UVESA=mCONFIG_FB_N411=mCONFIG_FB_HGA=mCONFIG_FB_HGA_ACCEL=yCONFIG_FB_S1D13XXX=mCONFIG_FB_NVIDIA=mCONFIG_FB_NVIDIA_I2C=yCONFIG_FB_NVIDIA_DEBUG=y
# CONFIG_FB_NVIDIA_BACKLIGHT is not setCONFIG_FB_RIVA=mCONFIG_FB_RIVA_I2C=y
# CONFIG_FB_RIVA_DEBUG is not set
# CONFIG_FB_RIVA_BACKLIGHT is not setCONFIG_FB_LE80578=mCONFIG_FB_CARILLO_RANCH=m
# CONFIG_FB_INTEL is not setCONFIG_FB_MATROX=mCONFIG_FB_MATROX_MILLENIUM=yCONFIG_FB_MATROX_MYSTIQUE=y
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX_MULTIHEAD is not set
# CONFIG_FB_ATY128 is not setCONFIG_FB_ATY=mCONFIG_FB_ATY_CT=yCONFIG_FB_ATY_GENERIC_LCD=yCONFIG_FB_ATY_GX=y
# CONFIG_FB_ATY_BACKLIGHT is not setCONFIG_FB_S3=m
# CONFIG_FB_SAVAGE is not setCONFIG_FB_SIS=mCONFIG_FB_SIS_300=y
# CONFIG_FB_SIS_315 is not setCONFIG_FB_VIA=m
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not setCONFIG_FB_VOODOO1=mCONFIG_FB_VT8623=m
# CONFIG_FB_TRIDENT is not setCONFIG_FB_ARK=mCONFIG_FB_PM3=mCONFIG_FB_CARMINE=mCONFIG_FB_CARMINE_DRAM_EVAL=y
# CONFIG_CARMINE_DRAM_CUSTOM is not setCONFIG_FB_GEODE=yCONFIG_FB_GEODE_LX=m
# CONFIG_FB_GEODE_GX is not setCONFIG_FB_GEODE_GX1=mCONFIG_FB_SM501=mCONFIG_FB_METRONOME=mCONFIG_BACKLIGHT_LCD_SUPPORT=yCONFIG_LCD_CLASS_DEVICE=y
# CONFIG_LCD_LTV350QV is not setCONFIG_LCD_ILI9320=yCONFIG_LCD_TDO24M=yCONFIG_LCD_VGG2432A4=yCONFIG_LCD_PLATFORM=mCONFIG_BACKLIGHT_CLASS_DEVICE=y
# CONFIG_BACKLIGHT_CORGI is not set
# CONFIG_BACKLIGHT_PROGEAR is not setCONFIG_BACKLIGHT_CARILLO_RANCH=m
# CONFIG_BACKLIGHT_MBP_NVIDIA is not set
#
# Display device support
#CONFIG_DISPLAY_SUPPORT=m
#
# Display hardware drivers
#
#
# Console display driver support
#CONFIG_VGA_CONSOLE=y
# CONFIG_VGACON_SOFT_SCROLLBACK is not setCONFIG_DUMMY_CONSOLE=yCONFIG_LOGO=yCONFIG_LOGO_LINUX_MONO=y
# CONFIG_LOGO_LINUX_VGA16 is not setCONFIG_LOGO_LINUX_CLUT224=yCONFIG_SOUND=yCONFIG_SOUND_OSS_CORE=yCONFIG_SND=mCONFIG_SND_TIMER=mCONFIG_SND_PCM=mCONFIG_SND_HWDEP=mCONFIG_SND_RAWMIDI=mCONFIG_SND_SEQUENCER=mCONFIG_SND_SEQ_DUMMY=mCONFIG_SND_OSSEMUL=yCONFIG_SND_MIXER_OSS=m
# CONFIG_SND_PCM_OSS is not setCONFIG_SND_SEQUENCER_OSS=yCONFIG_SND_DYNAMIC_MINORS=yCONFIG_SND_SUPPORT_OLD_API=yCONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not setCONFIG_SND_DEBUG=yCONFIG_SND_DEBUG_VERBOSE=yCONFIG_SND_PCM_XRUN_DEBUG=yCONFIG_SND_VMASTER=yCONFIG_SND_MPU401_UART=mCONFIG_SND_OPL3_LIB=mCONFIG_SND_VX_LIB=mCONFIG_SND_AC97_CODEC=m
# CONFIG_SND_DRIVERS is not setCONFIG_SND_SB_COMMON=mCONFIG_SND_SB16_DSP=mCONFIG_SND_PCI=yCONFIG_SND_AD1889=mCONFIG_SND_ALS300=mCONFIG_SND_ALS4000=mCONFIG_SND_ALI5451=m
# CONFIG_SND_ATIIXP is not setCONFIG_SND_ATIIXP_MODEM=mCONFIG_SND_AU8810=m
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not setCONFIG_SND_AW2=m
# CONFIG_SND_AZT3328 is not setCONFIG_SND_BT87X=mCONFIG_SND_BT87X_OVERCLOCK=y
# CONFIG_SND_CA0106 is not setCONFIG_SND_CMIPCI=mCONFIG_SND_OXYGEN_LIB=mCONFIG_SND_OXYGEN=mCONFIG_SND_CS4281=mCONFIG_SND_CS46XX=mCONFIG_SND_CS46XX_NEW_DSP=yCONFIG_SND_CS5530=mCONFIG_SND_DARLA20=m
# CONFIG_SND_GINA20 is not set
# CONFIG_SND_LAYLA20 is not set
# CONFIG_SND_DARLA24 is not setCONFIG_SND_GINA24=m
# CONFIG_SND_LAYLA24 is not setCONFIG_SND_MONA=mCONFIG_SND_MIA=mCONFIG_SND_ECHO3G=m
# CONFIG_SND_INDIGO is not setCONFIG_SND_INDIGOIO=mCONFIG_SND_INDIGODJ=m
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not setCONFIG_SND_ENS1370=m
# CONFIG_SND_ENS1371 is not setCONFIG_SND_ES1938=mCONFIG_SND_ES1968=mCONFIG_SND_FM801=m
# CONFIG_SND_HDA_INTEL is not setCONFIG_SND_HDSP=mCONFIG_SND_HDSPM=m
# CONFIG_SND_HIFIER is not set
# CONFIG_SND_ICE1712 is not setCONFIG_SND_ICE1724=mCONFIG_SND_INTEL8X0=m
# CONFIG_SND_INTEL8X0M is not setCONFIG_SND_KORG1212=mCONFIG_SND_MAESTRO3=mCONFIG_SND_MIXART=m
# CONFIG_SND_NM256 is not setCONFIG_SND_PCXHR=mCONFIG_SND_RIPTIDE=m
# CONFIG_SND_RME32 is not setCONFIG_SND_RME96=mCONFIG_SND_RME9652=m
# CONFIG_SND_SONICVIBES is not setCONFIG_SND_TRIDENT=mCONFIG_SND_VIA82XX=m
# CONFIG_SND_VIA82XX_MODEM is not setCONFIG_SND_VIRTUOSO=mCONFIG_SND_VX222=mCONFIG_SND_YMFPCI=m
# CONFIG_SND_SPI is not set
# CONFIG_SND_USB is not setCONFIG_SND_PCMCIA=yCONFIG_SND_VXPOCKET=mCONFIG_SND_PDAUDIOCF=m
# CONFIG_SND_SOC is not setCONFIG_SOUND_PRIME=mCONFIG_SOUND_OSS=m
# CONFIG_SOUND_TRACEINIT is not setCONFIG_SOUND_DMAP=yCONFIG_SOUND_SSCAPE=mCONFIG_SOUND_VMIDI=mCONFIG_SOUND_TRIX=m
# CONFIG_SOUND_MSS is not set
# CONFIG_SOUND_MPU401 is not set
# CONFIG_SOUND_PAS is not setCONFIG_SOUND_PSS=m
# CONFIG_PSS_MIXER is not setCONFIG_SOUND_SB=mCONFIG_SOUND_YM3812=mCONFIG_SOUND_UART6850=mCONFIG_SOUND_AEDSP16=mCONFIG_SC6600=y
# CONFIG_SC6600_JOY is not setCONFIG_SC6600_CDROM=4CONFIG_SC6600_CDROMBASE=0
# CONFIG_SOUND_KAHLUA is not setCONFIG_AC97_BUS=mCONFIG_HID_SUPPORT=yCONFIG_HID=mCONFIG_HID_DEBUG=y
# CONFIG_HIDRAW is not set
#
# USB Input Devices
#CONFIG_USB_HID=mCONFIG_HID_PID=yCONFIG_USB_HIDDEV=y
#
# USB HID Boot Protocol drivers
#CONFIG_USB_KBD=mCONFIG_USB_MOUSE=y
#
# Special HID drivers
#CONFIG_HID_COMPAT=yCONFIG_HID_A4TECH=mCONFIG_HID_APPLE=mCONFIG_HID_BELKIN=mCONFIG_HID_BRIGHT=mCONFIG_HID_CHERRY=mCONFIG_HID_CHICONY=mCONFIG_HID_CYPRESS=m
# CONFIG_HID_DELL is not setCONFIG_HID_EZKEY=mCONFIG_HID_GYRATION=m
# CONFIG_HID_LOGITECH is not set
# CONFIG_HID_MICROSOFT is not setCONFIG_HID_MONTEREY=mCONFIG_HID_PANTHERLORD=mCONFIG_PANTHERLORD_FF=y
# CONFIG_HID_PETALYNX is not set
# CONFIG_HID_SAMSUNG is not setCONFIG_HID_SONY=mCONFIG_HID_SUNPLUS=m
# CONFIG_THRUSTMASTER_FF is not setCONFIG_ZEROPLUS_FF=mCONFIG_USB_SUPPORT=yCONFIG_USB_ARCH_HAS_HCD=yCONFIG_USB_ARCH_HAS_OHCI=yCONFIG_USB_ARCH_HAS_EHCI=yCONFIG_USB=yCONFIG_USB_DEBUG=yCONFIG_USB_ANNOUNCE_NEW_DEVICES=y
#
# Miscellaneous USB options
#CONFIG_USB_DEVICEFS=yCONFIG_USB_DEVICE_CLASS=yCONFIG_USB_DYNAMIC_MINORS=y
# CONFIG_USB_OTG is not set
# CONFIG_USB_OTG_WHITELIST is not setCONFIG_USB_OTG_BLACKLIST_HUB=yCONFIG_USB_MON=y
#
# USB Host Controller Drivers
#CONFIG_USB_C67X00_HCD=yCONFIG_USB_EHCI_HCD=yCONFIG_USB_EHCI_ROOT_HUB_TT=yCONFIG_USB_EHCI_TT_NEWSCHED=y
# CONFIG_USB_ISP116X_HCD is not setCONFIG_USB_ISP1760_HCD=m
# CONFIG_USB_ISP1760_PCI is not setCONFIG_USB_OHCI_HCD=y
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not setCONFIG_USB_OHCI_LITTLE_ENDIAN=yCONFIG_USB_UHCI_HCD=y
# CONFIG_USB_U132_HCD is not set
# CONFIG_USB_SL811_HCD is not setCONFIG_USB_R8A66597_HCD=m
#
# USB Device Class drivers
#CONFIG_USB_ACM=yCONFIG_USB_PRINTER=mCONFIG_USB_WDM=mCONFIG_USB_TMC=m
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' #
#
# may also be needed; see USB_STORAGE Help for more information # CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE_DEBUG=y CONFIG_USB_STORAGE_DATAFAB=y CONFIG_USB_STORAGE_FREECOM=y # CONFIG_USB_STORAGE_ISD200 is not set CONFIG_USB_STORAGE_DPCM=y # CONFIG_USB_STORAGE_USBAT is not set # CONFIG_USB_STORAGE_SDDR09 is not set CONFIG_USB_STORAGE_SDDR55=y CONFIG_USB_STORAGE_JUMPSHOT=y # CONFIG_USB_STORAGE_ALAUDA is not set CONFIG_USB_STORAGE_ONETOUCH=y # CONFIG_USB_STORAGE_KARMA is not set CONFIG_USB_STORAGE_CYPRESS_ATACB=y # CONFIG_USB_LIBUSUAL is not set
#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set
#
# USB port drivers
#
# CONFIG_USB_SERIAL is not set
#
# USB Miscellaneous drivers
#
# CONFIG_USB_EMI62 is not setCONFIG_USB_EMI26=yCONFIG_USB_ADUTUX=y
# CONFIG_USB_SEVSEG is not setCONFIG_USB_RIO500=yCONFIG_USB_LEGOTOWER=yCONFIG_USB_LCD=y
# CONFIG_USB_BERRY_CHARGE is not set
# CONFIG_USB_LED is not setCONFIG_USB_CYPRESS_CY7C63=yCONFIG_USB_CYTHERM=y
# CONFIG_USB_PHIDGET is not set
# CONFIG_USB_IDMOUSE is not setCONFIG_USB_FTDI_ELAN=yCONFIG_USB_APPLEDISPLAY=mCONFIG_USB_SISUSBVGA=y
# CONFIG_USB_SISUSBVGA_CON is not set
# CONFIG_USB_LD is not setCONFIG_USB_TRANCEVIBRATOR=m
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
# CONFIG_USB_ISIGHTFW is not setCONFIG_USB_VST=mCONFIG_USB_ATM=mCONFIG_USB_SPEEDTOUCH=mCONFIG_USB_CXACRU=mCONFIG_USB_UEAGLEATM=mCONFIG_USB_XUSBATM=mCONFIG_MMC=mCONFIG_MMC_DEBUG=yCONFIG_MMC_UNSAFE_RESUME=y
#
# MMC/SD/SDIO Card Drivers
#CONFIG_MMC_BLOCK=m
# CONFIG_MMC_BLOCK_BOUNCE is not setCONFIG_SDIO_UART=mCONFIG_MMC_TEST=m
#
# MMC/SD/SDIO Host Controller Drivers
#CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_PCI is not setCONFIG_MMC_WBSD=mCONFIG_MMC_TIFM_SD=mCONFIG_MMC_SPI=mCONFIG_MMC_SDRICOH_CS=m
# CONFIG_MEMSTICK is not setCONFIG_NEW_LEDS=yCONFIG_LEDS_CLASS=m
#
# LED drivers
#CONFIG_LEDS_PCA9532=mCONFIG_LEDS_PCA955X=m
#
# LED Triggers
#CONFIG_LEDS_TRIGGERS=y
# CONFIG_LEDS_TRIGGER_TIMER is not setCONFIG_LEDS_TRIGGER_HEARTBEAT=y
# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
# CONFIG_ACCESSIBILITY is not set
# CONFIG_INFINIBAND is not setCONFIG_EDAC=y
#
# Reporting subsystems
#CONFIG_EDAC_DEBUG=y
# CONFIG_EDAC_MM_EDAC is not setCONFIG_RTC_LIB=mCONFIG_RTC_CLASS=m
#
# RTC interfaces
#CONFIG_RTC_INTF_SYSFS=y
# CONFIG_RTC_INTF_PROC is not set
# CONFIG_RTC_INTF_DEV is not setCONFIG_RTC_DRV_TEST=m
#
# I2C RTC drivers
#CONFIG_RTC_DRV_DS1307=m
# CONFIG_RTC_DRV_DS1374 is not setCONFIG_RTC_DRV_DS1672=mCONFIG_RTC_DRV_MAX6900=m
# CONFIG_RTC_DRV_RS5C372 is not setCONFIG_RTC_DRV_ISL1208=mCONFIG_RTC_DRV_X1205=mCONFIG_RTC_DRV_PCF8563=mCONFIG_RTC_DRV_PCF8583=mCONFIG_RTC_DRV_M41T80=m
# CONFIG_RTC_DRV_M41T80_WDT is not set
# CONFIG_RTC_DRV_S35390A is not setCONFIG_RTC_DRV_FM3130=m
#
# SPI RTC drivers
#CONFIG_RTC_DRV_M41T94=mCONFIG_RTC_DRV_DS1305=mCONFIG_RTC_DRV_MAX6902=mCONFIG_RTC_DRV_R9701=m
# CONFIG_RTC_DRV_RS5C348 is not setCONFIG_RTC_DRV_DS3234=m
#
# Platform RTC drivers
#
# CONFIG_RTC_DRV_CMOS is not set
# CONFIG_RTC_DRV_DS1286 is not setCONFIG_RTC_DRV_DS1511=mCONFIG_RTC_DRV_DS1553=mCONFIG_RTC_DRV_DS1742=mCONFIG_RTC_DRV_STK17TA8=mCONFIG_RTC_DRV_M48T86=m
# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not setCONFIG_RTC_DRV_BQ4802=mCONFIG_RTC_DRV_V3020=m
#
# on-CPU RTC drivers
#
# CONFIG_DMADEVICES is not set
# CONFIG_UIO is not set
#
# Firmware Drivers
#
# CONFIG_EDD is not setCONFIG_FIRMWARE_MEMMAP=y
# CONFIG_DELL_RBU is not setCONFIG_DCDBAS=mCONFIG_ISCSI_IBFT_FIND=yCONFIG_ISCSI_IBFT=m
#
# File systems
#CONFIG_EXT2_FS=mCONFIG_EXT2_FS_XATTR=yCONFIG_EXT2_FS_POSIX_ACL=yCONFIG_EXT2_FS_SECURITY=yCONFIG_EXT2_FS_XIP=yCONFIG_EXT3_FS=yCONFIG_EXT3_FS_XATTR=yCONFIG_EXT3_FS_POSIX_ACL=yCONFIG_EXT3_FS_SECURITY=yCONFIG_EXT4_FS=m
# CONFIG_EXT4DEV_COMPAT is not set
# CONFIG_EXT4_FS_XATTR is not setCONFIG_FS_XIP=yCONFIG_JBD=yCONFIG_JBD_DEBUG=yCONFIG_JBD2=m
# CONFIG_JBD2_DEBUG is not setCONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not setCONFIG_JFS_FS=yCONFIG_JFS_POSIX_ACL=yCONFIG_JFS_SECURITY=y
# CONFIG_JFS_DEBUG is not setCONFIG_JFS_STATISTICS=yCONFIG_FS_POSIX_ACL=yCONFIG_FILE_LOCKING=y
# CONFIG_XFS_FS is not setCONFIG_GFS2_FS=mCONFIG_GFS2_FS_LOCKING_DLM=mCONFIG_OCFS2_FS=mCONFIG_OCFS2_FS_O2CB=mCONFIG_OCFS2_FS_USERSPACE_CLUSTER=mCONFIG_OCFS2_FS_STATS=yCONFIG_OCFS2_DEBUG_MASKLOG=yCONFIG_OCFS2_DEBUG_FS=yCONFIG_OCFS2_COMPAT_JBD=y
# CONFIG_DNOTIFY is not setCONFIG_INOTIFY=yCONFIG_INOTIFY_USER=yCONFIG_QUOTA=y
# CONFIG_QUOTA_NETLINK_INTERFACE is not setCONFIG_PRINT_QUOTA_WARNING=yCONFIG_QFMT_V1=mCONFIG_QFMT_V2=mCONFIG_QUOTACTL=y
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not setCONFIG_FUSE_FS=m
#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#CONFIG_FAT_FS=y
# CONFIG_MSDOS_FS is not setCONFIG_VFAT_FS=yCONFIG_FAT_DEFAULT_CODEPAGE=437CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
#
# Pseudo filesystems
#CONFIG_PROC_FS=y
# CONFIG_PROC_KCORE is not setCONFIG_PROC_VMCORE=yCONFIG_PROC_SYSCTL=y
# CONFIG_PROC_PAGE_MONITOR is not setCONFIG_SYSFS=y
# CONFIG_TMPFS is not setCONFIG_HUGETLBFS=yCONFIG_HUGETLB_PAGE=yCONFIG_CONFIGFS_FS=y
#
# Miscellaneous filesystems
#CONFIG_ADFS_FS=mCONFIG_ADFS_FS_RW=yCONFIG_AFFS_FS=m
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not setCONFIG_BEFS_FS=y
# CONFIG_BEFS_DEBUG is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not setCONFIG_CRAMFS=mCONFIG_VXFS_FS=y
# CONFIG_MINIX_FS is not setCONFIG_OMFS_FS=mCONFIG_HPFS_FS=yCONFIG_QNX4FS_FS=y
# CONFIG_ROMFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not setCONFIG_NETWORK_FILESYSTEMS=yCONFIG_NFS_FS=yCONFIG_NFS_V3=yCONFIG_NFS_V3_ACL=y
# CONFIG_NFS_V4 is not set
# CONFIG_NFSD is not setCONFIG_LOCKD=yCONFIG_LOCKD_V4=yCONFIG_NFS_ACL_SUPPORT=yCONFIG_NFS_COMMON=yCONFIG_SUNRPC=yCONFIG_SUNRPC_REGISTER_V4=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not setCONFIG_SMB_FS=mCONFIG_SMB_NLS_DEFAULT=yCONFIG_SMB_NLS_REMOTE="cp437"
# CONFIG_CIFS is not setCONFIG_NCP_FS=mCONFIG_NCPFS_PACKET_SIGNING=yCONFIG_NCPFS_IOCTL_LOCKING=y
# CONFIG_NCPFS_STRONG is not set
# CONFIG_NCPFS_NFS_NS is not set
# CONFIG_NCPFS_OS2_NS is not setCONFIG_NCPFS_SMALLDOS=yCONFIG_NCPFS_NLS=y
# CONFIG_NCPFS_EXTRAS is not set
# CONFIG_CODA_FS is not setCONFIG_AFS_FS=mCONFIG_AFS_DEBUG=y
#
# Partition Types
#CONFIG_PARTITION_ADVANCED=yCONFIG_ACORN_PARTITION=yCONFIG_ACORN_PARTITION_CUMANA=y
# CONFIG_ACORN_PARTITION_EESOX is not setCONFIG_ACORN_PARTITION_ICS=yCONFIG_ACORN_PARTITION_ADFS=yCONFIG_ACORN_PARTITION_POWERTEC=y
# CONFIG_ACORN_PARTITION_RISCIX is not set
# CONFIG_OSF_PARTITION is not setCONFIG_AMIGA_PARTITION=yCONFIG_ATARI_PARTITION=yCONFIG_MAC_PARTITION=yCONFIG_MSDOS_PARTITION=yCONFIG_BSD_DISKLABEL=y
# CONFIG_MINIX_SUBPARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not setCONFIG_SGI_PARTITION=yCONFIG_ULTRIX_PARTITION=y
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not set
# CONFIG_EFI_PARTITION is not setCONFIG_SYSV68_PARTITION=yCONFIG_NLS=yCONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_CODEPAGE_437 is not set
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not setCONFIG_NLS_CODEPAGE_850=yCONFIG_NLS_CODEPAGE_852=mCONFIG_NLS_CODEPAGE_855=yCONFIG_NLS_CODEPAGE_857=y
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not setCONFIG_NLS_CODEPAGE_862=yCONFIG_NLS_CODEPAGE_863=mCONFIG_NLS_CODEPAGE_864=yCONFIG_NLS_CODEPAGE_865=mCONFIG_NLS_CODEPAGE_866=mCONFIG_NLS_CODEPAGE_869=yCONFIG_NLS_CODEPAGE_936=mCONFIG_NLS_CODEPAGE_950=mCONFIG_NLS_CODEPAGE_932=mCONFIG_NLS_CODEPAGE_949=yCONFIG_NLS_CODEPAGE_874=y
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not setCONFIG_NLS_ASCII=y
# CONFIG_NLS_ISO8859_1 is not setCONFIG_NLS_ISO8859_2=yCONFIG_NLS_ISO8859_3=y
# CONFIG_NLS_ISO8859_4 is not setCONFIG_NLS_ISO8859_5=yCONFIG_NLS_ISO8859_6=yCONFIG_NLS_ISO8859_7=y
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not setCONFIG_NLS_ISO8859_14=mCONFIG_NLS_ISO8859_15=m
# CONFIG_NLS_KOI8_R is not setCONFIG_NLS_KOI8_U=mCONFIG_NLS_UTF8=mCONFIG_DLM=m
# CONFIG_DLM_DEBUG is not set
#
# Kernel hacking
#CONFIG_TRACE_IRQFLAGS_SUPPORT=yCONFIG_PRINTK_TIME=yCONFIG_ALLOW_WARNINGS=yCONFIG_ENABLE_WARN_DEPRECATED=yCONFIG_ENABLE_MUST_CHECK=yCONFIG_FRAME_WARN=2048CONFIG_MAGIC_SYSRQ=y
# CONFIG_UNUSED_SYMBOLS is not setCONFIG_DEBUG_FS=yCONFIG_HEADERS_CHECK=yCONFIG_DEBUG_KERNEL=yCONFIG_DEBUG_SHIRQ=yCONFIG_DETECT_SOFTLOCKUP=yCONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=yCONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1CONFIG_SCHED_DEBUG=yCONFIG_SCHEDSTATS=y
# CONFIG_TIMER_STATS is not setCONFIG_DEBUG_OBJECTS=yCONFIG_DEBUG_OBJECTS_SELFTEST=yCONFIG_DEBUG_OBJECTS_FREE=yCONFIG_DEBUG_OBJECTS_TIMERS=yCONFIG_SLUB_DEBUG_ON=y
# CONFIG_SLUB_STATS is not set
# CONFIG_DEBUG_RT_MUTEXES is not setCONFIG_RT_MUTEX_TESTER=yCONFIG_DEBUG_SPINLOCK=yCONFIG_DEBUG_MUTEXES=yCONFIG_DEBUG_LOCK_ALLOC=yCONFIG_PROVE_LOCKING=yCONFIG_LOCKDEP=yCONFIG_LOCK_STAT=yCONFIG_DEBUG_LOCKDEP=yCONFIG_TRACE_IRQFLAGS=yCONFIG_DEBUG_SPINLOCK_SLEEP=y
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not setCONFIG_STACKTRACE=y
# CONFIG_DEBUG_BUGVERBOSE is not setCONFIG_DEBUG_VM=yCONFIG_DEBUG_VIRTUAL=yCONFIG_DEBUG_WRITECOUNT=yCONFIG_DEBUG_MEMORY_INIT=yCONFIG_DEBUG_LIST=y
# CONFIG_DEBUG_SG is not setCONFIG_DEBUG_NOTIFIERS=yCONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not setCONFIG_RCU_TORTURE_TEST=m
# CONFIG_RCU_CPU_STALL_DETECTOR is not setCONFIG_KPROBES_SANITY_TEST=yCONFIG_BACKTRACE_SELF_TEST=y
# CONFIG_LKDTM is not setCONFIG_FAULT_INJECTION=y
# CONFIG_FAILSLAB is not set
# CONFIG_FAIL_PAGE_ALLOC is not setCONFIG_FAIL_MAKE_REQUEST=yCONFIG_FAIL_IO_TIMEOUT=yCONFIG_FAULT_INJECTION_DEBUG_FS=y
# CONFIG_LATENCYTOP is not setCONFIG_SYSCTL_SYSCALL_CHECK=yCONFIG_DEBUG_PER_CPU_MAPS=yCONFIG_NOP_TRACER=yCONFIG_HAVE_FUNCTION_TRACER=yCONFIG_HAVE_DYNAMIC_FTRACE=yCONFIG_HAVE_FTRACE_MCOUNT_RECORD=yCONFIG_TRACER_MAX_TRACE=yCONFIG_RING_BUFFER=yCONFIG_TRACING=y
#
# Tracers
#CONFIG_FUNCTION_TRACER=y
# CONFIG_IRQSOFF_TRACER is not setCONFIG_SYSPROF_TRACER=yCONFIG_SCHED_TRACER=yCONFIG_CONTEXT_SWITCH_TRACER=y
# CONFIG_BOOT_TRACER is not setCONFIG_STACK_TRACER=yCONFIG_DYNAMIC_FTRACE=yCONFIG_FTRACE_MCOUNT_RECORD=yCONFIG_FTRACE_SELFTEST=yCONFIG_FTRACE_STARTUP_TEST=yCONFIG_PROVIDE_OHCI1394_DMA_INIT=yCONFIG_FIREWIRE_OHCI_REMOTE_DMA=y
# CONFIG_BUILD_DOCSRC is not setCONFIG_DYNAMIC_PRINTK_DEBUG=y
# CONFIG_SAMPLES is not setCONFIG_HAVE_ARCH_KGDB=yCONFIG_KGDB=yCONFIG_KGDB_SERIAL_CONSOLE=yCONFIG_KGDB_TESTS=y
# CONFIG_STRICT_DEVMEM is not setCONFIG_X86_VERBOSE_BOOTUP=yCONFIG_EARLY_PRINTK=yCONFIG_EARLY_PRINTK_DBGP=y
# CONFIG_DEBUG_STACKOVERFLOW is not set
# CONFIG_DEBUG_STACK_USAGE is not setCONFIG_DEBUG_PAGEALLOC=y
# CONFIG_X86_PTDUMP is not setCONFIG_DEBUG_RODATA=yCONFIG_DEBUG_RODATA_TEST=y
# CONFIG_DEBUG_NX_TEST is not set
# CONFIG_IOMMU_DEBUG is not setCONFIG_MMIOTRACE_HOOKS=yCONFIG_MMIOTRACE=y
# CONFIG_MMIOTRACE_TEST is not setCONFIG_IO_DELAY_TYPE_0X80=0CONFIG_IO_DELAY_TYPE_0XED=1CONFIG_IO_DELAY_TYPE_UDELAY=2CONFIG_IO_DELAY_TYPE_NONE=3CONFIG_IO_DELAY_0X80=y
# CONFIG_IO_DELAY_0XED is not set
# CONFIG_IO_DELAY_UDELAY is not set
# CONFIG_IO_DELAY_NONE is not setCONFIG_DEFAULT_IO_DELAY_TYPE=0CONFIG_DEBUG_BOOT_PARAMS=yCONFIG_CPA_DEBUG=yCONFIG_OPTIMIZE_INLINING=y
#
# Security options
#CONFIG_KEYS=yCONFIG_KEYS_DEBUG_PROC_KEYS=y CONFIG_SECURITY=yCONFIG_SECURITYFS=yCONFIG_SECURITY_NETWORK=y CONFIG_SECURITY_NETWORK_XFRM=y CONFIG_SECURITY_FILE_CAPABILITIES=y CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0 CONFIG_SECURITY_SELINUX=y
# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set CONFIG_SECURITY_SELINUX_DISABLE=y CONFIG_SECURITY_SELINUX_DEVELOP=y CONFIG_SECURITY_SELINUX_AVC_STATS=y CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX=y CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX_VALUE=19 CONFIG_XOR_BLOCKS=mCONFIG_ASYNC_CORE=mCONFIG_ASYNC_MEMCPY=mCONFIG_ASYNC_XOR=mCONFIG_CRYPTO=y
#
# Crypto core or helper
#
# CONFIG_CRYPTO_FIPS is not setCONFIG_CRYPTO_ALGAPI=yCONFIG_CRYPTO_AEAD=yCONFIG_CRYPTO_BLKCIPHER=yCONFIG_CRYPTO_HASH=yCONFIG_CRYPTO_RNG=yCONFIG_CRYPTO_MANAGER=yCONFIG_CRYPTO_GF128MUL=yCONFIG_CRYPTO_NULL=m
# CONFIG_CRYPTO_CRYPTD is not set
# CONFIG_CRYPTO_AUTHENC is not setCONFIG_CRYPTO_TEST=m
#
# Authenticated Encryption with Associated Data
#CONFIG_CRYPTO_CCM=yCONFIG_CRYPTO_GCM=yCONFIG_CRYPTO_SEQIV=y
#
# Block modes
#CONFIG_CRYPTO_CBC=yCONFIG_CRYPTO_CTR=yCONFIG_CRYPTO_CTS=yCONFIG_CRYPTO_ECB=yCONFIG_CRYPTO_LRW=yCONFIG_CRYPTO_PCBC=mCONFIG_CRYPTO_XTS=y
#
# Hash modes
#CONFIG_CRYPTO_HMAC=yCONFIG_CRYPTO_XCBC=m
#
# Digest
#CONFIG_CRYPTO_CRC32C=mCONFIG_CRYPTO_CRC32C_INTEL=mCONFIG_CRYPTO_MD4=yCONFIG_CRYPTO_MD5=yCONFIG_CRYPTO_MICHAEL_MIC=y
# CONFIG_CRYPTO_RMD128 is not setCONFIG_CRYPTO_RMD160=y
# CONFIG_CRYPTO_RMD256 is not setCONFIG_CRYPTO_RMD320=yCONFIG_CRYPTO_SHA1=yCONFIG_CRYPTO_SHA256=yCONFIG_CRYPTO_SHA512=mCONFIG_CRYPTO_TGR192=yCONFIG_CRYPTO_WP512=y
#
# Ciphers
#CONFIG_CRYPTO_AES=yCONFIG_CRYPTO_AES_X86_64=y
# CONFIG_CRYPTO_ANUBIS is not setCONFIG_CRYPTO_ARC4=yCONFIG_CRYPTO_BLOWFISH=m
# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_CAST5 is not setCONFIG_CRYPTO_CAST6=mCONFIG_CRYPTO_DES=yCONFIG_CRYPTO_FCRYPT=mCONFIG_CRYPTO_KHAZAD=yCONFIG_CRYPTO_SALSA20=y
# CONFIG_CRYPTO_SALSA20_X86_64 is not set
# CONFIG_CRYPTO_SEED is not setCONFIG_CRYPTO_SERPENT=yCONFIG_CRYPTO_TEA=m
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_TWOFISH_X86_64 is not set
#
# Compression
#CONFIG_CRYPTO_DEFLATE=yCONFIG_CRYPTO_LZO=m
#
# Random Number Generation
#
# CONFIG_CRYPTO_ANSI_CPRNG is not set
# CONFIG_CRYPTO_HW is not setCONFIG_HAVE_KVM=y
# CONFIG_VIRTUALIZATION is not set
#
# Library routines
#CONFIG_BITREVERSE=yCONFIG_GENERIC_FIND_FIRST_BIT=yCONFIG_GENERIC_FIND_NEXT_BIT=yCONFIG_CRC_CCITT=yCONFIG_CRC16=mCONFIG_CRC_T10DIF=yCONFIG_CRC_ITU_T=mCONFIG_CRC32=yCONFIG_CRC7=mCONFIG_LIBCRC32C=yCONFIG_ZLIB_INFLATE=yCONFIG_ZLIB_DEFLATE=yCONFIG_LZO_COMPRESS=mCONFIG_LZO_DECOMPRESS=mCONFIG_TEXTSEARCH=yCONFIG_TEXTSEARCH_KMP=mCONFIG_TEXTSEARCH_BM=mCONFIG_TEXTSEARCH_FSM=mCONFIG_PLIST=yCONFIG_HAS_IOMEM=yCONFIG_HAS_IOPORT=yCONFIG_HAS_DMA=yCONFIG_CHECK_SIGNATURE=yCONFIG_FORCE_SUCCESSFUL_BUILD=yCONFIG_FORCE_MINIMAL_CONFIG=yCONFIG_FORCE_MINIMAL_CONFIG_64=yCONFIG_FORCE_MINIMAL_CONFIG_PHYS=y
Quoted 2 lines · Ingo Molnar
ok, the new cpumask code blew up in -tip testing, with various sorts of slab corruptions during scheduler init:
another 64-bit testbox has similar problems - see the log attached below. Config attached as well. The bootup seems to have continued fine.
Ingo
------------>
checking TSC synchronization [CPU#0 -> CPU#1]: passed. Brought up 2 CPUs
Total of 2 processors activated (11732.92 BogoMIPS).
CPU0 attaching sched-domain:
domain 0: span 0-1 level CPU
groups: 0 1
CPU1 attaching sched-domain:
domain 0: span 0-1 level CPU
groups: 1 0
=============================================================================
BUG kmalloc-8: Wrong object count. Counter is 11 but counted were 50
-----------------------------------------------------------------------------
INFO: Slab 0xffffe200019cc2d8 objects=51 used=11 fp=0xffff88003f807370 flags=0x40000000000000c3
Pid: 1, comm: swapper Not tainted 2.6.27-tip-07104-g5cf7b67-dirty #1
Call Trace: [<ffffffff802cf110>] slab_err+0xa0/0xb0 [<ffffffff8052a57d>] ? _raw_spin_unlock+0x6d/0xd0 [<ffffffff80249762>] ? cpu_attach_domain+0x172/0x6b0 [<ffffffff802ce579>] ? check_bytes+0x9/0x30 [<ffffffff802d0ea8>] ? slab_pad_check+0xd8/0x160 [<ffffffff802cfa67>] on_freelist+0x197/0x240 [<ffffffff802d1877>] __slab_free+0x1c7/0x330 [<ffffffff80512929>] ? free_cpumask_var+0x9/0x10 [<ffffffff802d1a9b>] kfree+0xbb/0x120 [<ffffffff80512929>] ? free_cpumask_var+0x9/0x10 [<ffffffff80512929>] free_cpumask_var+0x9/0x10 [<ffffffff80249ec7>] __build_sched_domains+0x227/0x580 [<ffffffff819dd5f5>] sched_init_smp+0x95/0x280 [<ffffffff819d239a>] ? native_smp_cpus_done+0x1aa/0x2b0 [<ffffffff819c5fd0>] kernel_init+0x170/0x240 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff802134b9>] child_rip+0xa/0x11 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5e60>] ? kernel_init+0x0/0x240 [<ffffffff802134af>] ? child_rip+0x0/0x11
FIX kmalloc-8: Object count adjusted.
=============================================================================
BUG kmalloc-8: Redzone overwritten
-----------------------------------------------------------------------------
INFO: 0xffff88003f807328-0xffff88003f80732f. First byte 0x0 instead of 0xcc
INFO: Slab 0xffffe200019cc2d8 objects=51 used=50 fp=0xffff88003f807370 flags=0x40000000000000c3
INFO: Object 0xffff88003f807320 @offset=800 fp=0x0000000000000000
Bytes b4 0xffff88003f807310: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ Object 0xffff88003f807320: 00 00 00 00 00 00 00 00 ........ Redzone 0xffff88003f807328: 00 00 00 00 00 00 00 00 ........ Padding 0xffff88003f807368: 00 00 00 00 00 00 00 00 ........ Pid: 1, comm: swapper Not tainted 2.6.27-tip-07104-g5cf7b67-dirty #1 Call Trace: [<ffffffff802cf21c>] print_trailer+0xfc/0x160 [<ffffffff802cf3e8>] check_bytes_and_report+0xb8/0xe0 [<ffffffff802d092a>] check_object+0x6a/0x270 [<ffffffff802d18d9>] __slab_free+0x229/0x330 [<ffffffff80512929>] ? free_cpumask_var+0x9/0x10 [<ffffffff802d1a9b>] kfree+0xbb/0x120 [<ffffffff80512929>] ? free_cpumask_var+0x9/0x10 [<ffffffff80512929>] free_cpumask_var+0x9/0x10 [<ffffffff80249ec7>] __build_sched_domains+0x227/0x580 [<ffffffff819dd5f5>] sched_init_smp+0x95/0x280 [<ffffffff819d239a>] ? native_smp_cpus_done+0x1aa/0x2b0 [<ffffffff819c5fd0>] kernel_init+0x170/0x240 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff802134b9>] child_rip+0xa/0x11 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5e60>] ? kernel_init+0x0/0x240 [<ffffffff802134af>] ? child_rip+0x0/0x11
FIX kmalloc-8: Restoring 0xffff88003f807328-0xffff88003f80732f=0xcc
=============================================================================
BUG kmalloc-8: Redzone overwritten
-----------------------------------------------------------------------------
INFO: 0xffff88003f8072d8-0xffff88003f8072df. First byte 0x0 instead of 0xcc
INFO: Slab 0xffffe200019cc2d8 objects=51 used=50 fp=0xffff88003f807370 flags=0x40000000000000c3
INFO: Object 0xffff88003f8072d0 @offset=720 fp=0x0000000000000000
Bytes b4 0xffff88003f8072c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ Object 0xffff88003f8072d0: 03 00 00 00 00 00 00 00 ........ Redzone 0xffff88003f8072d8: 00 00 00 00 00 00 00 00 ........ Padding 0xffff88003f807318: 00 00 00 00 00 00 00 00 ........ Pid: 1, comm: swapper Not tainted 2.6.27-tip-07104-g5cf7b67-dirty #1 Call Trace: [<ffffffff802cf21c>] print_trailer+0xfc/0x160 [<ffffffff802cf3e8>] check_bytes_and_report+0xb8/0xe0 [<ffffffff802d092a>] check_object+0x6a/0x270 [<ffffffff802d18d9>] __slab_free+0x229/0x330 [<ffffffff80512929>] ? free_cpumask_var+0x9/0x10 [<ffffffff802d1a9b>] kfree+0xbb/0x120 [<ffffffff80512929>] ? free_cpumask_var+0x9/0x10 [<ffffffff80512929>] free_cpumask_var+0x9/0x10 [<ffffffff80249ed0>] __build_sched_domains+0x230/0x580 [<ffffffff819dd5f5>] sched_init_smp+0x95/0x280 [<ffffffff819d239a>] ? native_smp_cpus_done+0x1aa/0x2b0 [<ffffffff819c5fd0>] kernel_init+0x170/0x240 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff802134b9>] child_rip+0xa/0x11 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5e60>] ? kernel_init+0x0/0x240 [<ffffffff802134af>] ? child_rip+0x0/0x11
FIX kmalloc-8: Restoring 0xffff88003f8072d8-0xffff88003f8072df=0xcc
=============================================================================
BUG kmalloc-8: Redzone overwritten
-----------------------------------------------------------------------------
INFO: 0xffff88003f807288-0xffff88003f80728f. First byte 0x0 instead of 0xcc
INFO: Slab 0xffffe200019cc2d8 objects=51 used=50 fp=0xffff88003f807370 flags=0x40000000000000c3
INFO: Object 0xffff88003f807280 @offset=640 fp=0x0000000000000000
Bytes b4 0xffff88003f807270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ Object 0xffff88003f807280: 00 00 00 00 00 00 00 00 ........ Redzone 0xffff88003f807288: 00 00 00 00 00 00 00 00 ........ Padding 0xffff88003f8072c8: 00 00 00 00 00 00 00 00 ........ Pid: 1, comm: swapper Not tainted 2.6.27-tip-07104-g5cf7b67-dirty #1 Call Trace: [<ffffffff802cf21c>] print_trailer+0xfc/0x160 [<ffffffff802cf3e8>] check_bytes_and_report+0xb8/0xe0 [<ffffffff802d092a>] check_object+0x6a/0x270 [<ffffffff802d18d9>] __slab_free+0x229/0x330 [<ffffffff80512929>] ? free_cpumask_var+0x9/0x10 [<ffffffff802d1a9b>] kfree+0xbb/0x120 [<ffffffff80512929>] ? free_cpumask_var+0x9/0x10 [<ffffffff80512929>] free_cpumask_var+0x9/0x10 [<ffffffff80249d4d>] __build_sched_domains+0xad/0x580 [<ffffffff819dd5f5>] sched_init_smp+0x95/0x280 [<ffffffff819d239a>] ? native_smp_cpus_done+0x1aa/0x2b0 [<ffffffff819c5fd0>] kernel_init+0x170/0x240 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff802134b9>] child_rip+0xa/0x11 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5e60>] ? kernel_init+0x0/0x240 [<ffffffff802134af>] ? child_rip+0x0/0x11
FIX kmalloc-8: Restoring 0xffff88003f807288-0xffff88003f80728f=0xcc
=============================================================================
BUG kmalloc-8: Redzone overwritten
-----------------------------------------------------------------------------
INFO: 0xffff88003f807238-0xffff88003f80723f. First byte 0x0 instead of 0xcc
INFO: Slab 0xffffe200019cc2d8 objects=51 used=50 fp=0xffff88003f807370 flags=0x40000000000000c3
INFO: Object 0xffff88003f807230 @offset=560 fp=0x0000000000000000
Bytes b4 0xffff88003f807220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ Object 0xffff88003f807230: 00 00 00 00 00 00 00 00 ........ Redzone 0xffff88003f807238: 00 00 00 00 00 00 00 00 ........ Padding 0xffff88003f807278: 00 00 00 00 00 00 00 00 ........ Pid: 1, comm: swapper Not tainted 2.6.27-tip-07104-g5cf7b67-dirty #1 Call Trace: [<ffffffff802cf21c>] print_trailer+0xfc/0x160 [<ffffffff802cf3e8>] check_bytes_and_report+0xb8/0xe0 [<ffffffff802d092a>] check_object+0x6a/0x270 [<ffffffff802d18d9>] __slab_free+0x229/0x330 [<ffffffff80512929>] ? free_cpumask_var+0x9/0x10 [<ffffffff802d1a9b>] kfree+0xbb/0x120 [<ffffffff80512929>] ? free_cpumask_var+0x9/0x10 [<ffffffff80512929>] free_cpumask_var+0x9/0x10 [<ffffffff80249d2d>] __build_sched_domains+0x8d/0x580 [<ffffffff819dd5f5>] sched_init_smp+0x95/0x280 [<ffffffff819d239a>] ? native_smp_cpus_done+0x1aa/0x2b0 [<ffffffff819c5fd0>] kernel_init+0x170/0x240 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff802134b9>] child_rip+0xa/0x11 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5e60>] ? kernel_init+0x0/0x240 [<ffffffff802134af>] ? child_rip+0x0/0x11
FIX kmalloc-8: Restoring 0xffff88003f807238-0xffff88003f80723f=0xcc
=============================================================================
BUG kmalloc-8: Redzone overwritten
-----------------------------------------------------------------------------
INFO: 0xffff88003f8071e8-0xffff88003f8071ef. First byte 0x0 instead of 0xcc
INFO: Slab 0xffffe200019cc2d8 objects=51 used=50 fp=0xffff88003f807370 flags=0x40000000000000c3
INFO: Object 0xffff88003f8071e0 @offset=480 fp=0x0000000000000000
Bytes b4 0xffff88003f8071d0: 00 00 00 00 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ........ZZZZZZZZ Object 0xffff88003f8071e0: 03 00 00 00 00 00 00 00 ........ Redzone 0xffff88003f8071e8: 00 00 00 00 00 00 00 00 ........ Padding 0xffff88003f807228: 00 00 00 00 00 00 00 00 ........ Pid: 1, comm: swapper Not tainted 2.6.27-tip-07104-g5cf7b67-dirty #1 Call Trace: [<ffffffff802cf21c>] print_trailer+0xfc/0x160 [<ffffffff802cf3e8>] check_bytes_and_report+0xb8/0xe0 [<ffffffff802d092a>] check_object+0x6a/0x270 [<ffffffff802d18d9>] __slab_free+0x229/0x330 [<ffffffff80512929>] ? free_cpumask_var+0x9/0x10 [<ffffffff802d1a9b>] kfree+0xbb/0x120 [<ffffffff80512929>] ? free_cpumask_var+0x9/0x10 [<ffffffff80512929>] free_cpumask_var+0x9/0x10 [<ffffffff80249d0f>] __build_sched_domains+0x6f/0x580 [<ffffffff819dd5f5>] sched_init_smp+0x95/0x280 [<ffffffff819d239a>] ? native_smp_cpus_done+0x1aa/0x2b0 [<ffffffff819c5fd0>] kernel_init+0x170/0x240 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff802134b9>] child_rip+0xa/0x11 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5e60>] ? kernel_init+0x0/0x240 [<ffffffff802134af>] ? child_rip+0x0/0x11
FIX kmalloc-8: Restoring 0xffff88003f8071e8-0xffff88003f8071ef=0xcc
=============================================================================
BUG kmalloc-8: Redzone overwritten
-----------------------------------------------------------------------------
INFO: 0xffff88003f807378-0xffff88003f80737f. First byte 0x0 instead of 0xbb
INFO: Slab 0xffffe200019cc2d8 objects=51 used=50 fp=0xffff88003f807370 flags=0x40000000000000c3
INFO: Object 0xffff88003f807370 @offset=880 fp=0x0000000000000000
Bytes b4 0xffff88003f807360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ Object 0xffff88003f807370: 00 00 00 00 00 00 00 00 ........ Redzone 0xffff88003f807378: 00 00 00 00 00 00 00 00 ........ Padding 0xffff88003f8073b8: 00 00 00 00 00 00 00 00 ........ Pid: 1, comm: swapper Not tainted 2.6.27-tip-07104-g5cf7b67-dirty #1 Call Trace: [<ffffffff802cf21c>] print_trailer+0xfc/0x160 [<ffffffff802cf3e8>] check_bytes_and_report+0xb8/0xe0 [<ffffffff80246aee>] ? register_sched_domain_sysctl+0xce/0x470 [<ffffffff802d092a>] check_object+0x6a/0x270 [<ffffffff802d23df>] __slab_alloc+0x4df/0x590 [<ffffffff80246aee>] ? register_sched_domain_sysctl+0xce/0x470 [<ffffffff80246aee>] ? register_sched_domain_sysctl+0xce/0x470 [<ffffffff802d3c90>] __kmalloc_track_caller+0x100/0x110 [<ffffffff802b20f5>] kstrdup+0x45/0x120 [<ffffffff80246aee>] register_sched_domain_sysctl+0xce/0x470 [<ffffffff819dd5fa>] sched_init_smp+0x9a/0x280 [<ffffffff819d239a>] ? native_smp_cpus_done+0x1aa/0x2b0 [<ffffffff819c5fd0>] kernel_init+0x170/0x240 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff802134b9>] child_rip+0xa/0x11 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5140>] ? early_idt_handler+0x0/0x73 [<ffffffff819c5e60>] ? kernel_init+0x0/0x240 [<ffffffff802134af>] ? child_rip+0x0/0x11
FIX kmalloc-8: Restoring 0xffff88003f807378-0xffff88003f80737f=0xbb
FIX kmalloc-8: Marking all objects used
calling init_cpufreq_transition_notifier_list+0x0/0x20 @ 1 initcall init_cpufreq_transition_notifier_list+0x0/0x20 returned 0 after 0 usecs calling net_ns_init+0x0/0x180 @ 1net_namespace: 728 bytes
initcall net_ns_init+0x0/0x180 returned 0 after 3906 usecs
calling cpufreq_tsc+0x0/0x40 @ 1
initcall cpufreq_tsc+0x0/0x40 returned 0 after 0 usecs
calling init_smp_flush+0x0/0x80 @ 1
initcall init_smp_flush+0x0/0x80 returned 0 after 0 usecs
calling print_banner+0x0/0x10 @ 1
Booting paravirtualized kernel on bare hardware
initcall print_banner+0x0/0x10 returned 0 after 3906 usecs
calling sysctl_init+0x0/0x40 @ 1
initcall sysctl_init+0x0/0x40 returned 0 after 0 usecs
calling ksysfs_init+0x0/0xc0 @ 1
initcall ksysfs_init+0x0/0xc0 returned 0 after 0 usecs
calling init_jiffies_clocksource+0x0/0x20 @ 1
initcall init_jiffies_clocksource+0x0/0x20 returned 0 after 0 usecs calling pm_init+0x0/0x40 @ 1
initcall pm_init+0x0/0x40 returned 0 after 0 usecs
# head: 5cf7b67e
#
# Automatically generated make config: don't edit # Linux kernel version: 2.6.27
# Thu Oct 23 14:54:59 2008
#CONFIG_64BIT=y
# CONFIG_X86_32 is not setCONFIG_X86_64=yCONFIG_X86=y CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" CONFIG_GENERIC_TIME=yCONFIG_GENERIC_CMOS_UPDATE=y CONFIG_CLOCKSOURCE_WATCHDOG=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_HAVE_LATENCYTOP_SUPPORT=y CONFIG_FAST_CMPXCHG_LOCAL=yCONFIG_MMU=yCONFIG_ZONE_DMA=yCONFIG_GENERIC_ISA_DMA=yCONFIG_GENERIC_IOMAP=yCONFIG_GENERIC_BUG=yCONFIG_GENERIC_HWEIGHT=yCONFIG_GENERIC_GPIO=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_ARCH_HAS_CPU_RELAX=y CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_HAVE_SETUP_PER_CPU_AREA=y CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_ARCH_SUSPEND_POSSIBLE=yCONFIG_ZONE_DMA32=y CONFIG_ARCH_POPULATES_NODE_MAP=y CONFIG_AUDIT_ARCH=y CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_PENDING_IRQ=yCONFIG_X86_SMP=yCONFIG_X86_64_SMP=yCONFIG_X86_HT=yCONFIG_X86_BIOS_REBOOT=yCONFIG_X86_TRAMPOLINE=y
# CONFIG_KTIME_SCALAR is not set
# CONFIG_BOOTPARAM_SUPPORT is not set CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# General setup
#CONFIG_EXPERIMENTAL=y
# CONFIG_BROKEN_BOOT_ALLOWED4 is not set
# CONFIG_BROKEN_BOOT_EUROPE is not set
# CONFIG_BROKEN_BOOT_TITAN is not setCONFIG_LOCK_KERNEL=yCONFIG_INIT_ENV_ARG_LIMIT=32CONFIG_LOCALVERSION=""CONFIG_LOCALVERSION_AUTO=yCONFIG_SWAP=y
# CONFIG_SYSVIPC is not setCONFIG_POSIX_MQUEUE=yCONFIG_BSD_PROCESS_ACCT=yCONFIG_BSD_PROCESS_ACCT_V3=yCONFIG_TASKSTATS=yCONFIG_TASK_DELAY_ACCT=yCONFIG_TASK_XACCT=yCONFIG_TASK_IO_ACCOUNTING=y
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not setCONFIG_LOG_BUF_SHIFT=20CONFIG_CGROUPS=yCONFIG_CGROUP_DEBUG=y
# CONFIG_CGROUP_NS is not set
# CONFIG_CGROUP_FREEZER is not set
# CONFIG_CGROUP_DEVICE is not setCONFIG_CPUSETS=yCONFIG_HAVE_UNSTABLE_SCHED_CLOCK=yCONFIG_GROUP_SCHED=y
# CONFIG_FAIR_GROUP_SCHED is not setCONFIG_RT_GROUP_SCHED=yCONFIG_USER_SCHED=y
# CONFIG_CGROUP_SCHED is not set
# CONFIG_CGROUP_CPUACCT is not setCONFIG_RESOURCE_COUNTERS=y
# CONFIG_CGROUP_MEM_RES_CTLR is not setCONFIG_SYSFS_DEPRECATED=yCONFIG_SYSFS_DEPRECATED_V2=yCONFIG_PROC_PID_CPUSET=yCONFIG_RELAY=yCONFIG_NAMESPACES=yCONFIG_UTS_NS=yCONFIG_USER_NS=yCONFIG_PID_NS=yCONFIG_BLK_DEV_INITRD=yCONFIG_INITRAMFS_SOURCE=""
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not setCONFIG_SYSCTL=y
# CONFIG_EMBEDDED is not setCONFIG_UID16=yCONFIG_SYSCTL_SYSCALL=yCONFIG_KALLSYMS=yCONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_EXTRA_PASS is not setCONFIG_HOTPLUG=yCONFIG_PRINTK=yCONFIG_BUG=yCONFIG_ELF_CORE=yCONFIG_PCSPKR_PLATFORM=yCONFIG_COMPAT_BRK=yCONFIG_BASE_FULL=yCONFIG_FUTEX=yCONFIG_ANON_INODES=yCONFIG_EPOLL=yCONFIG_SIGNALFD=yCONFIG_TIMERFD=yCONFIG_EVENTFD=yCONFIG_SHMEM=yCONFIG_AIO=yCONFIG_VM_EVENT_COUNTERS=yCONFIG_PCI_QUIRKS=yCONFIG_SLUB_DEBUG=y
# CONFIG_SLAB is not setCONFIG_SLUB=y
# CONFIG_SLOB is not setCONFIG_PROFILING=yCONFIG_TRACEPOINTS=yCONFIG_MARKERS=yCONFIG_OPROFILE=y
# CONFIG_OPROFILE_IBS is not setCONFIG_HAVE_OPROFILE=yCONFIG_KPROBES=yCONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=yCONFIG_KRETPROBES=yCONFIG_HAVE_IOREMAP_PROT=yCONFIG_HAVE_KPROBES=yCONFIG_HAVE_KRETPROBES=yCONFIG_HAVE_ARCH_TRACEHOOK=yCONFIG_USE_GENERIC_SMP_HELPERS=y
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not setCONFIG_SLABINFO=yCONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not setCONFIG_BASE_SMALL=0CONFIG_MODULES=yCONFIG_MODULE_FORCE_LOAD=yCONFIG_MODULE_UNLOAD=yCONFIG_MODULE_FORCE_UNLOAD=yCONFIG_MODVERSIONS=yCONFIG_MODULE_SRCVERSION_ALL=yCONFIG_KMOD=yCONFIG_STOP_MACHINE=yCONFIG_BLOCK=y
# CONFIG_BLK_DEV_IO_TRACE is not setCONFIG_BLK_DEV_BSG=y
# CONFIG_BLK_DEV_INTEGRITY is not setCONFIG_BLOCK_COMPAT=y
#
# IO Schedulers
#CONFIG_IOSCHED_NOOP=y
# CONFIG_IOSCHED_AS is not setCONFIG_IOSCHED_DEADLINE=y
# CONFIG_IOSCHED_CFQ is not set
# CONFIG_DEFAULT_AS is not setCONFIG_DEFAULT_DEADLINE=y
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not setCONFIG_DEFAULT_IOSCHED="deadline"CONFIG_PREEMPT_NOTIFIERS=yCONFIG_CLASSIC_RCU=yCONFIG_FREEZER=y
#
# Processor type and features
#CONFIG_TICK_ONESHOT=y
# CONFIG_NO_HZ is not setCONFIG_HIGH_RES_TIMERS=yCONFIG_GENERIC_CLOCKEVENTS_BUILD=yCONFIG_SMP_SUPPORT=y
# CONFIG_X86_MPPARSE is not set
# CONFIG_UP_WANTED_1 is not setCONFIG_SMP=yCONFIG_X86_PC=y
# CONFIG_X86_ELAN is not set
# CONFIG_X86_VOYAGER is not set
# CONFIG_X86_GENERICARCH is not set
# CONFIG_X86_VSMP is not setCONFIG_PARAVIRT_GUEST=yCONFIG_XEN=yCONFIG_XEN_MAX_DOMAIN_MEMORY=32CONFIG_XEN_SAVE_RESTORE=y
# CONFIG_XEN_DEBUG_FS is not setCONFIG_KVM_CLOCK=yCONFIG_KVM_GUEST=yCONFIG_PARAVIRT=yCONFIG_PARAVIRT_CLOCK=yCONFIG_PARAVIRT_DEBUG=yCONFIG_MEMTEST=y
# CONFIG_M386 is not set
# CONFIG_M486 is not set
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
# CONFIG_M586MMX is not set
# CONFIG_M686 is not set
# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not set
# CONFIG_MPENTIUMM is not set
# CONFIG_MPENTIUM4 is not set
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
# CONFIG_MCRUSOE is not set
# CONFIG_MEFFICEON is not set
# CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP3D is not set
# CONFIG_MGEODEGX1 is not set
# CONFIG_MGEODE_LX is not set
# CONFIG_MCYRIXIII is not set
# CONFIG_MVIAC3_2 is not set
# CONFIG_MVIAC7 is not set
# CONFIG_MPSC is not set
# CONFIG_MCORE2 is not setCONFIG_GENERIC_CPU=yCONFIG_X86_CPU=yCONFIG_X86_L1_CACHE_BYTES=128CONFIG_X86_INTERNODE_CACHE_BYTES=128CONFIG_X86_CMPXCHG=yCONFIG_X86_L1_CACHE_SHIFT=7CONFIG_X86_WP_WORKS_OK=yCONFIG_X86_TSC=yCONFIG_X86_CMPXCHG64=yCONFIG_X86_CMOV=yCONFIG_X86_MINIMUM_CPU_FAMILY=64CONFIG_X86_DEBUGCTLMSR=yCONFIG_CPU_SUP_INTEL=yCONFIG_CPU_SUP_AMD=yCONFIG_CPU_SUP_CENTAUR_64=yCONFIG_X86_DS=yCONFIG_X86_PTRACE_BTS=yCONFIG_HPET_TIMER=yCONFIG_HPET_EMULATE_RTC=yCONFIG_DMI=yCONFIG_GART_IOMMU=yCONFIG_CALGARY_IOMMU=yCONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=yCONFIG_AMD_IOMMU=yCONFIG_SWIOTLB=yCONFIG_IOMMU_HELPER=yCONFIG_MAXSMP=yCONFIG_NR_CPUS=4096
# CONFIG_SCHED_SMT is not set
# CONFIG_SCHED_MC is not setCONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not setCONFIG_CPUMASK_OFFSTACK=yCONFIG_X86_LOCAL_APIC=yCONFIG_X86_IO_APIC=yCONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
# CONFIG_X86_MCE is not setCONFIG_I8K=yCONFIG_MICROCODE=m
# CONFIG_MICROCODE_INTEL is not set
# CONFIG_MICROCODE_AMD is not setCONFIG_MICROCODE_OLD_INTERFACE=yCONFIG_X86_MSR=yCONFIG_X86_CPUID=mCONFIG_ARCH_PHYS_ADDR_T_64BIT=yCONFIG_DIRECT_GBPAGES=y
# CONFIG_NUMA is not setCONFIG_ARCH_SPARSEMEM_DEFAULT=yCONFIG_ARCH_SPARSEMEM_ENABLE=yCONFIG_ARCH_SELECT_MEMORY_MODEL=yCONFIG_ARCH_MEMORY_PROBE=yCONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000CONFIG_SELECT_MEMORY_MODEL=y
# CONFIG_FLATMEM_MANUAL is not set
# CONFIG_DISCONTIGMEM_MANUAL is not setCONFIG_SPARSEMEM_MANUAL=yCONFIG_SPARSEMEM=yCONFIG_HAVE_MEMORY_PRESENT=yCONFIG_SPARSEMEM_EXTREME=yCONFIG_SPARSEMEM_VMEMMAP_ENABLE=yCONFIG_SPARSEMEM_VMEMMAP=yCONFIG_MEMORY_HOTPLUG=yCONFIG_MEMORY_HOTPLUG_SPARSE=yCONFIG_PAGEFLAGS_EXTENDED=yCONFIG_SPLIT_PTLOCK_CPUS=4CONFIG_RESOURCES_64BIT=yCONFIG_PHYS_ADDR_T_64BIT=yCONFIG_ZONE_DMA_FLAG=1CONFIG_BOUNCE=yCONFIG_VIRT_TO_BUS=yCONFIG_UNEVICTABLE_LRU=yCONFIG_MMU_NOTIFIER=y
# CONFIG_X86_CHECK_BIOS_CORRUPTION is not setCONFIG_X86_RESERVE_LOW_64K=yCONFIG_MTRR=y
# CONFIG_MTRR_SANITIZER is not setCONFIG_X86_PAT=y
# CONFIG_EFI is not set
# CONFIG_SECCOMP is not set
# CONFIG_CC_STACKPROTECTOR is not set
# CONFIG_HZ_100 is not setCONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not setCONFIG_HZ=250CONFIG_SCHED_HRTICK=y
# CONFIG_KEXEC is not set
# CONFIG_CRASH_DUMP is not setCONFIG_PHYSICAL_START=0x200000CONFIG_RELOCATABLE=yCONFIG_PHYSICAL_ALIGN=0x200000CONFIG_HOTPLUG_CPU=yCONFIG_COMPAT_VDSO=y
# CONFIG_CMDLINE_BOOL is not setCONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
#
# Power management options
#CONFIG_PM=yCONFIG_PM_DEBUG=yCONFIG_PM_VERBOSE=yCONFIG_CAN_PM_TRACE=yCONFIG_PM_TRACE=yCONFIG_PM_TRACE_RTC=yCONFIG_PM_SLEEP_SMP=yCONFIG_PM_SLEEP=y
# CONFIG_SUSPEND is not set
# CONFIG_HIBERNATION is not setCONFIG_ACPI=yCONFIG_ACPI_SLEEP=yCONFIG_ACPI_PROCFS=yCONFIG_ACPI_PROCFS_POWER=yCONFIG_ACPI_SYSFS_POWER=yCONFIG_ACPI_PROC_EVENT=y
# CONFIG_ACPI_AC is not set
# CONFIG_ACPI_BATTERY is not set
# CONFIG_ACPI_BUTTON is not setCONFIG_ACPI_VIDEO=mCONFIG_ACPI_FAN=yCONFIG_ACPI_DOCK=y
# CONFIG_ACPI_BAY is not setCONFIG_ACPI_PROCESSOR=mCONFIG_ACPI_HOTPLUG_CPU=yCONFIG_ACPI_THERMAL=mCONFIG_ACPI_WMI=y
# CONFIG_ACPI_ASUS is not setCONFIG_ACPI_TOSHIBA=y
# CONFIG_ACPI_CUSTOM_DSDT is not setCONFIG_ACPI_BLACKLIST_YEAR=0CONFIG_ACPI_DEBUG=yCONFIG_ACPI_DEBUG_FUNC_TRACE=yCONFIG_ACPI_EC=yCONFIG_ACPI_PCI_SLOT=yCONFIG_ACPI_POWER=yCONFIG_ACPI_SYSTEM=yCONFIG_X86_PM_TIMER=yCONFIG_ACPI_CONTAINER=mCONFIG_ACPI_HOTPLUG_MEMORY=mCONFIG_ACPI_SBS=y
#
# CPU Frequency scaling
#CONFIG_CPU_FREQ=yCONFIG_CPU_FREQ_TABLE=y
# CONFIG_CPU_FREQ_DEBUG is not set
# CONFIG_CPU_FREQ_STAT is not set CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_GOV_POWERSAVE=m
# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
#
# CPUFreq processor drivers
#
# CONFIG_X86_ACPI_CPUFREQ is not set
# CONFIG_X86_POWERNOW_K8 is not setCONFIG_X86_SPEEDSTEP_CENTRINO=mCONFIG_X86_P4_CLOCKMOD=y
#
# shared options # CONFIG_X86_SPEEDSTEP_LIB=y # CONFIG_CPU_IDLE is not set
#
# Bus options (PCI etc.)
#CONFIG_PCI=yCONFIG_PCI_DIRECT=yCONFIG_PCI_MMCONFIG=yCONFIG_PCI_DOMAINS=yCONFIG_DMAR=yCONFIG_DMAR_GFX_WA=yCONFIG_DMAR_FLOPPY_WA=yCONFIG_INTR_REMAP=yCONFIG_PCIEPORTBUS=yCONFIG_HOTPLUG_PCI_PCIE=mCONFIG_PCIEAER=yCONFIG_PCIEASPM=y
# CONFIG_PCIEASPM_DEBUG is not setCONFIG_ARCH_SUPPORTS_MSI=yCONFIG_PCI_MSI=y
# CONFIG_PCI_LEGACY is not setCONFIG_PCI_DEBUG=yCONFIG_HT_IRQ=yCONFIG_ISA_DMA_API=yCONFIG_K8_NB=yCONFIG_PCCARD=mCONFIG_PCMCIA_DEBUG=y
# CONFIG_PCMCIA is not setCONFIG_CARDBUS=y
#
# PC-card bridges
#CONFIG_YENTA=mCONFIG_YENTA_O2=yCONFIG_YENTA_RICOH=yCONFIG_YENTA_TI=yCONFIG_YENTA_ENE_TUNE=yCONFIG_YENTA_TOSHIBA=yCONFIG_PCCARD_NONSTATIC=mCONFIG_HOTPLUG_PCI=mCONFIG_HOTPLUG_PCI_FAKE=mCONFIG_HOTPLUG_PCI_ACPI=m
# CONFIG_HOTPLUG_PCI_ACPI_IBM is not setCONFIG_HOTPLUG_PCI_CPCI=y
# CONFIG_HOTPLUG_PCI_CPCI_ZT5550 is not setCONFIG_HOTPLUG_PCI_CPCI_GENERIC=mCONFIG_HOTPLUG_PCI_SHPC=m
#
# Executable file formats / Emulations
#CONFIG_BINFMT_ELF=yCONFIG_COMPAT_BINFMT_ELF=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
# CONFIG_HAVE_AOUT is not setCONFIG_BINFMT_MISC=yCONFIG_IA32_EMULATION=yCONFIG_IA32_AOUT=mCONFIG_COMPAT=yCONFIG_COMPAT_FOR_U64_ALIGNMENT=yCONFIG_NET=y
#
# Networking options
#CONFIG_PACKET=yCONFIG_PACKET_MMAP=yCONFIG_UNIX=yCONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
# CONFIG_XFRM_SUB_POLICY is not setCONFIG_XFRM_MIGRATE=y
# CONFIG_XFRM_STATISTICS is not setCONFIG_XFRM_IPCOMP=yCONFIG_NET_KEY=mCONFIG_NET_KEY_MIGRATE=yCONFIG_INET=y
# CONFIG_IP_MULTICAST is not setCONFIG_IP_ADVANCED_ROUTER=yCONFIG_ASK_IP_FIB_HASH=y
# CONFIG_IP_FIB_TRIE is not setCONFIG_IP_FIB_HASH=yCONFIG_IP_MULTIPLE_TABLES=yCONFIG_IP_ROUTE_MULTIPATH=y
# CONFIG_IP_ROUTE_VERBOSE is not setCONFIG_IP_PNP=yCONFIG_IP_PNP_DHCP=y
# CONFIG_IP_PNP_BOOTP is not setCONFIG_IP_PNP_RARP=y
# CONFIG_NET_IPIP is not setCONFIG_NET_IPGRE=mCONFIG_ARPD=yCONFIG_SYN_COOKIES=yCONFIG_INET_AH=mCONFIG_INET_ESP=mCONFIG_INET_IPCOMP=yCONFIG_INET_XFRM_TUNNEL=yCONFIG_INET_TUNNEL=y
# CONFIG_INET_XFRM_MODE_TRANSPORT is not setCONFIG_INET_XFRM_MODE_TUNNEL=yCONFIG_INET_XFRM_MODE_BEET=mCONFIG_INET_LRO=mCONFIG_INET_DIAG=mCONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not setCONFIG_TCP_CONG_CUBIC=yCONFIG_DEFAULT_TCP_CONG="cubic"CONFIG_TCP_MD5SIG=y
# CONFIG_IPV6 is not setCONFIG_NETLABEL=y
# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETFILTER is not setCONFIG_IP_DCCP=mCONFIG_INET_DCCP_DIAG=mCONFIG_IP_DCCP_ACKVEC=y
#
# DCCP CCIDs Configuration (EXPERIMENTAL)
#CONFIG_IP_DCCP_CCID2=m
# CONFIG_IP_DCCP_CCID2_DEBUG is not setCONFIG_IP_DCCP_CCID3=mCONFIG_IP_DCCP_CCID3_DEBUG=yCONFIG_IP_DCCP_CCID3_RTO=100CONFIG_IP_DCCP_TFRC_LIB=mCONFIG_IP_DCCP_TFRC_DEBUG=y
#
# DCCP Kernel Hacking
#
# CONFIG_IP_DCCP_DEBUG is not set
# CONFIG_NET_DCCPPROBE is not setCONFIG_IP_SCTP=yCONFIG_SCTP_DBG_MSG=yCONFIG_SCTP_DBG_OBJCNT=y
# CONFIG_SCTP_HMAC_NONE is not set
# CONFIG_SCTP_HMAC_SHA1 is not setCONFIG_SCTP_HMAC_MD5=y
# CONFIG_TIPC is not setCONFIG_ATM=yCONFIG_ATM_CLIP=m
# CONFIG_ATM_CLIP_NO_ICMP is not setCONFIG_ATM_LANE=mCONFIG_ATM_MPOA=yCONFIG_ATM_BR2684=yCONFIG_ATM_BR2684_IPFILTER=yCONFIG_STP=yCONFIG_BRIDGE=yCONFIG_NET_DSA=yCONFIG_NET_DSA_TAG_DSA=yCONFIG_NET_DSA_TAG_EDSA=yCONFIG_NET_DSA_TAG_TRAILER=yCONFIG_NET_DSA_MV88E6XXX=yCONFIG_NET_DSA_MV88E6060=yCONFIG_NET_DSA_MV88E6XXX_NEED_PPU=yCONFIG_NET_DSA_MV88E6131=yCONFIG_NET_DSA_MV88E6123_61_65=y
# CONFIG_VLAN_8021Q is not setCONFIG_DECNET=mCONFIG_DECNET_ROUTER=yCONFIG_LLC=yCONFIG_LLC2=mCONFIG_IPX=mCONFIG_IPX_INTERN=y
# CONFIG_ATALK is not set
# CONFIG_X25 is not setCONFIG_LAPB=yCONFIG_ECONET=yCONFIG_ECONET_AUNUDP=y
# CONFIG_ECONET_NATIVE is not set
# CONFIG_WAN_ROUTER is not setCONFIG_NET_SCHED=y
#
# Queueing/Scheduling
#CONFIG_NET_SCH_CBQ=mCONFIG_NET_SCH_HTB=yCONFIG_NET_SCH_HFSC=mCONFIG_NET_SCH_ATM=yCONFIG_NET_SCH_PRIO=y
# CONFIG_NET_SCH_MULTIQ is not set
# CONFIG_NET_SCH_RED is not setCONFIG_NET_SCH_SFQ=m
# CONFIG_NET_SCH_TEQL is not setCONFIG_NET_SCH_TBF=y
# CONFIG_NET_SCH_GRED is not setCONFIG_NET_SCH_DSMARK=mCONFIG_NET_SCH_NETEM=mCONFIG_NET_SCH_INGRESS=y
#
# Classification
#CONFIG_NET_CLS=yCONFIG_NET_CLS_BASIC=yCONFIG_NET_CLS_TCINDEX=yCONFIG_NET_CLS_ROUTE4=yCONFIG_NET_CLS_ROUTE=yCONFIG_NET_CLS_FW=m
# CONFIG_NET_CLS_U32 is not setCONFIG_NET_CLS_RSVP=mCONFIG_NET_CLS_RSVP6=y
# CONFIG_NET_CLS_FLOW is not set
# CONFIG_NET_EMATCH is not setCONFIG_NET_CLS_ACT=yCONFIG_NET_ACT_POLICE=yCONFIG_NET_ACT_GACT=yCONFIG_GACT_PROB=yCONFIG_NET_ACT_MIRRED=mCONFIG_NET_ACT_NAT=yCONFIG_NET_ACT_PEDIT=m
# CONFIG_NET_ACT_SIMP is not setCONFIG_NET_ACT_SKBEDIT=yCONFIG_NET_CLS_IND=yCONFIG_NET_SCH_FIFO=y
#
# Network testing
#CONFIG_NET_PKTGEN=yCONFIG_NET_TCPPROBE=y
# CONFIG_HAMRADIO is not setCONFIG_CAN=mCONFIG_CAN_RAW=mCONFIG_CAN_BCM=m
#
# CAN Device Drivers
#
# CONFIG_CAN_VCAN is not set
# CONFIG_CAN_DEBUG_DEVICES is not setCONFIG_IRDA=y
#
# IrDA protocols
#CONFIG_IRLAN=mCONFIG_IRNET=mCONFIG_IRCOMM=yCONFIG_IRDA_ULTRA=y
#
# IrDA options
#CONFIG_IRDA_CACHE_LAST_LSAP=y
# CONFIG_IRDA_FAST_RR is not setCONFIG_IRDA_DEBUG=y
#
# Infrared-port device drivers
#
#
# SIR device drivers
#CONFIG_IRTTY_SIR=m
#
# Dongle support
#CONFIG_DONGLE=yCONFIG_ESI_DONGLE=m
# CONFIG_ACTISYS_DONGLE is not setCONFIG_TEKRAM_DONGLE=mCONFIG_TOIM3232_DONGLE=mCONFIG_LITELINK_DONGLE=mCONFIG_MA600_DONGLE=mCONFIG_GIRBIL_DONGLE=mCONFIG_MCP2120_DONGLE=m
# CONFIG_OLD_BELKIN_DONGLE is not set
# CONFIG_ACT200L_DONGLE is not setCONFIG_KINGSUN_DONGLE=y
# CONFIG_KSDAZZLE_DONGLE is not set
# CONFIG_KS959_DONGLE is not set
#
# FIR device drivers
#CONFIG_USB_IRDA=yCONFIG_SIGMATEL_FIR=y
# CONFIG_NSC_FIR is not setCONFIG_WINBOND_FIR=mCONFIG_SMC_IRCC_FIR=y
# CONFIG_ALI_FIR is not setCONFIG_VLSI_FIR=yCONFIG_VIA_FIR=mCONFIG_MCS_FIR=yCONFIG_BT=yCONFIG_BT_L2CAP=mCONFIG_BT_SCO=mCONFIG_BT_RFCOMM=mCONFIG_BT_RFCOMM_TTY=yCONFIG_BT_BNEP=m
# CONFIG_BT_BNEP_MC_FILTER is not set
# CONFIG_BT_BNEP_PROTO_FILTER is not setCONFIG_BT_HIDP=m
#
# Bluetooth device drivers
#CONFIG_BT_HCIBTUSB=m
# CONFIG_BT_HCIBTSDIO is not set
# CONFIG_BT_HCIUART is not set
# CONFIG_BT_HCIBCM203X is not set
# CONFIG_BT_HCIBPA10X is not setCONFIG_BT_HCIBFUSB=y
# CONFIG_BT_HCIVHCI is not setCONFIG_AF_RXRPC=yCONFIG_AF_RXRPC_DEBUG=yCONFIG_RXKAD=y
# CONFIG_PHONET is not setCONFIG_FIB_RULES=yCONFIG_WIRELESS=y
# CONFIG_CFG80211 is not setCONFIG_WIRELESS_OLD_REGULATORY=yCONFIG_WIRELESS_EXT=yCONFIG_WIRELESS_EXT_SYSFS=y
# CONFIG_MAC80211 is not set
# CONFIG_IEEE80211 is not setCONFIG_RFKILL=yCONFIG_RFKILL_INPUT=y
#
# Device Drivers
#
#
# Generic Driver Options
#CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"CONFIG_STANDALONE=yCONFIG_PREVENT_FIRMWARE_BUILD=yCONFIG_FW_LOADER=yCONFIG_FIRMWARE_IN_KERNEL=yCONFIG_EXTRA_FIRMWARE=""
# CONFIG_DEBUG_DRIVER is not setCONFIG_DEBUG_DEVRES=y
# CONFIG_SYS_HYPERVISOR is not setCONFIG_CONNECTOR=mCONFIG_PARPORT=yCONFIG_PARPORT_PC=y
# CONFIG_PARPORT_SERIAL is not setCONFIG_PARPORT_PC_FIFO=y
# CONFIG_PARPORT_PC_SUPERIO is not set
# CONFIG_PARPORT_GSC is not setCONFIG_PARPORT_AX88796=y
# CONFIG_PARPORT_1284 is not setCONFIG_PARPORT_NOT_PC=yCONFIG_PNP=y
# CONFIG_PNP_DEBUG is not set
#
# Protocols
#CONFIG_PNPACPI=yCONFIG_BLK_DEV=yCONFIG_BLK_DEV_FD=yCONFIG_BLK_CPQ_DA=yCONFIG_BLK_CPQ_CISS_DA=mCONFIG_CISS_SCSI_TAPE=y
# CONFIG_BLK_DEV_DAC960 is not setCONFIG_BLK_DEV_UMEM=m
# CONFIG_BLK_DEV_COW_COMMON is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_SX8 is not setCONFIG_BLK_DEV_UB=m
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not setCONFIG_ATA_OVER_ETH=mCONFIG_XEN_BLKDEV_FRONTEND=mCONFIG_VIRTIO_BLK=m
# CONFIG_BLK_DEV_HD is not setCONFIG_MISC_DEVICES=yCONFIG_IBM_ASM=y
# CONFIG_PHANTOM is not setCONFIG_EEPROM_93CX6=mCONFIG_SGI_IOC4=mCONFIG_TIFM_CORE=yCONFIG_TIFM_7XX1=mCONFIG_ACER_WMI=yCONFIG_ASUS_LAPTOP=y
# CONFIG_FUJITSU_LAPTOP is not setCONFIG_HP_WMI=y
# CONFIG_MSI_LAPTOP is not setCONFIG_COMPAL_LAPTOP=m
# CONFIG_SONY_LAPTOP is not setCONFIG_THINKPAD_ACPI=yCONFIG_THINKPAD_ACPI_DEBUG=yCONFIG_THINKPAD_ACPI_BAY=yCONFIG_THINKPAD_ACPI_VIDEO=yCONFIG_THINKPAD_ACPI_HOTKEY_POLL=yCONFIG_INTEL_MENLOW=m
# CONFIG_EEEPC_LAPTOP is not setCONFIG_ENCLOSURE_SERVICES=y
# CONFIG_SGI_XP is not set
# CONFIG_HP_ILO is not setCONFIG_SGI_GRU=mCONFIG_SGI_GRU_DEBUG=yCONFIG_HAVE_IDE=y
#
# SCSI device support
#CONFIG_RAID_ATTRS=yCONFIG_SCSI=yCONFIG_SCSI_DMA=yCONFIG_SCSI_TGT=mCONFIG_SCSI_NETLINK=yCONFIG_SCSI_PROC_FS=y
#
# SCSI support type (disk, tape, CD-ROM)
#CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not setCONFIG_CHR_DEV_OSST=mCONFIG_BLK_DEV_SR=yCONFIG_BLK_DEV_SR_VENDOR=yCONFIG_CHR_DEV_SG=mCONFIG_CHR_DEV_SCH=y
# CONFIG_SCSI_ENCLOSURE is not set
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs #CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set CONFIG_SCSI_SCAN_ASYNC=yCONFIG_SCSI_WAIT_SCAN=m
#
# SCSI Transports
#CONFIG_SCSI_SPI_ATTRS=yCONFIG_SCSI_FC_ATTRS=yCONFIG_SCSI_ISCSI_ATTRS=yCONFIG_SCSI_SAS_ATTRS=mCONFIG_SCSI_SRP_ATTRS=yCONFIG_SCSI_LOWLEVEL=yCONFIG_ISCSI_TCP=yCONFIG_BLK_DEV_3W_XXXX_RAID=m
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not setCONFIG_SCSI_AACRAID=yCONFIG_SCSI_AIC7XXX=yCONFIG_AIC7XXX_CMDS_PER_DEVICE=32CONFIG_AIC7XXX_RESET_DELAY_MS=5000CONFIG_AIC7XXX_DEBUG_ENABLE=yCONFIG_AIC7XXX_DEBUG_MASK=0CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
# CONFIG_SCSI_AIC7XXX_OLD is not setCONFIG_SCSI_AIC79XX=mCONFIG_AIC79XX_CMDS_PER_DEVICE=32CONFIG_AIC79XX_RESET_DELAY_MS=5000CONFIG_AIC79XX_DEBUG_ENABLE=yCONFIG_AIC79XX_DEBUG_MASK=0CONFIG_AIC79XX_REG_PRETTY_PRINT=yCONFIG_SCSI_DPT_I2O=mCONFIG_SCSI_ADVANSYS=yCONFIG_SCSI_ARCMSR=mCONFIG_SCSI_ARCMSR_AER=yCONFIG_MEGARAID_NEWGEN=yCONFIG_MEGARAID_MM=mCONFIG_MEGARAID_MAILBOX=mCONFIG_MEGARAID_LEGACY=mCONFIG_MEGARAID_SAS=m
# CONFIG_SCSI_HPTIOP is not setCONFIG_SCSI_BUSLOGIC=mCONFIG_SCSI_DMX3191D=m
# CONFIG_SCSI_EATA is not setCONFIG_SCSI_FUTURE_DOMAIN=y
# CONFIG_SCSI_GDTH is not setCONFIG_SCSI_IPS=y
# CONFIG_SCSI_INITIO is not setCONFIG_SCSI_INIA100=yCONFIG_SCSI_PPA=m
# CONFIG_SCSI_IMM is not setCONFIG_SCSI_IZIP_EPP16=yCONFIG_SCSI_IZIP_SLOW_CTR=yCONFIG_SCSI_STEX=y
# CONFIG_SCSI_SYM53C8XX_2 is not setCONFIG_SCSI_IPR=yCONFIG_SCSI_IPR_TRACE=y
# CONFIG_SCSI_IPR_DUMP is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_QLA_FC is not setCONFIG_SCSI_QLA_ISCSI=yCONFIG_SCSI_LPFC=y
CONFIG_SCSI_DC395x=yCONFIG_SCSI_DC390T=yCONFIG_SCSI_SRP=mCONFIG_SCSI_DH=yCONFIG_SCSI_DH_RDAC=yCONFIG_SCSI_DH_HP_SW=yCONFIG_SCSI_DH_EMC=mCONFIG_SCSI_DH_ALUA=mCONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not setCONFIG_ATA_ACPI=y
# CONFIG_SATA_PMP is not setCONFIG_SATA_AHCI=yCONFIG_SATA_SIL24=mCONFIG_ATA_SFF=yCONFIG_SATA_SVW=yCONFIG_ATA_PIIX=y
# CONFIG_SATA_MV is not setCONFIG_SATA_NV=y
# CONFIG_PDC_ADMA is not setCONFIG_SATA_QSTOR=yCONFIG_SATA_PROMISE=yCONFIG_SATA_SX4=m
# CONFIG_SATA_SIL is not set
# CONFIG_SATA_SIS is not setCONFIG_SATA_ULI=mCONFIG_SATA_VIA=y
# CONFIG_SATA_VITESSE is not set
# CONFIG_SATA_INIC162X is not set
# CONFIG_PATA_ACPI is not setCONFIG_PATA_ALI=mCONFIG_PATA_AMD=y
# CONFIG_PATA_ARTOP is not setCONFIG_PATA_ATIIXP=yCONFIG_PATA_CMD640_PCI=yCONFIG_PATA_CMD64X=mCONFIG_PATA_CS5520=m
# CONFIG_PATA_CS5530 is not setCONFIG_PATA_CYPRESS=yCONFIG_PATA_EFAR=m
# CONFIG_ATA_GENERIC is not set
# CONFIG_PATA_HPT366 is not setCONFIG_PATA_HPT37X=yCONFIG_PATA_HPT3X2N=mCONFIG_PATA_HPT3X3=yCONFIG_PATA_HPT3X3_DMA=yCONFIG_PATA_IT821X=yCONFIG_PATA_IT8213=yCONFIG_PATA_JMICRON=mCONFIG_PATA_TRIFLEX=y
# CONFIG_PATA_MARVELL is not set
# CONFIG_PATA_MPIIX is not setCONFIG_PATA_OLDPIIX=y
# CONFIG_PATA_NETCELL is not set
# CONFIG_PATA_NINJA32 is not set
# CONFIG_PATA_NS87410 is not setCONFIG_PATA_NS87415=mCONFIG_PATA_OPTI=mCONFIG_PATA_OPTIDMA=mCONFIG_PATA_PDC_OLD=yCONFIG_PATA_RADISYS=mCONFIG_PATA_RZ1000=yCONFIG_PATA_SC1200=y
# CONFIG_PATA_SERVERWORKS is not setCONFIG_PATA_PDC2027X=yCONFIG_PATA_SIL680=yCONFIG_PATA_SIS=y
# CONFIG_PATA_VIA is not setCONFIG_PATA_WINBOND=mCONFIG_PATA_SCH=mCONFIG_MD=y
# CONFIG_BLK_DEV_MD is not setCONFIG_BLK_DEV_DM=mCONFIG_DM_DEBUG=yCONFIG_DM_CRYPT=mCONFIG_DM_SNAPSHOT=m
# CONFIG_DM_MIRROR is not setCONFIG_DM_ZERO=mCONFIG_DM_MULTIPATH=m
# CONFIG_DM_DELAY is not set
# CONFIG_DM_UEVENT is not setCONFIG_FUSION=y
# CONFIG_FUSION_SPI is not set
# CONFIG_FUSION_FC is not setCONFIG_FUSION_SAS=mCONFIG_FUSION_MAX_SGE=128CONFIG_FUSION_CTL=mCONFIG_FUSION_LOGGING=y
#
# IEEE 1394 (FireWire) support
#
#
# Enable only one of the two stacks, unless you know what you are doing #CONFIG_FIREWIRE=mCONFIG_FIREWIRE_OHCI=mCONFIG_FIREWIRE_OHCI_DEBUG=yCONFIG_FIREWIRE_SBP2=m
# CONFIG_IEEE1394 is not setCONFIG_I2O=mCONFIG_I2O_LCT_NOTIFY_ON_CHANGES=yCONFIG_I2O_EXT_ADAPTEC=y
# CONFIG_I2O_EXT_ADAPTEC_DMA64 is not setCONFIG_I2O_BUS=mCONFIG_I2O_BLOCK=m
# CONFIG_I2O_SCSI is not set
# CONFIG_I2O_PROC is not set
# CONFIG_MACINTOSH_DRIVERS is not setCONFIG_NETDEVICES=y
# CONFIG_IFB is not set
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_MACVLAN is not setCONFIG_EQUALIZER=mCONFIG_TUN=m
# CONFIG_VETH is not set
# CONFIG_NET_SB1000 is not setCONFIG_ARCNET=y
# CONFIG_ARCNET_1201 is not set
# CONFIG_ARCNET_1051 is not setCONFIG_ARCNET_RAW=mCONFIG_ARCNET_CAP=m
CONFIG_ARCNET_COM90xx=y
# CONFIG_ARCNET_COM90xxIO is not setCONFIG_ARCNET_RIM_I=yCONFIG_ARCNET_COM20020=mCONFIG_ARCNET_COM20020_PCI=mCONFIG_PHYLIB=y
#
# MII PHY device drivers
#CONFIG_MARVELL_PHY=y
# CONFIG_DAVICOM_PHY is not set CONFIG_QSEMI_PHY=yCONFIG_LXT_PHY=mCONFIG_CICADA_PHY=mCONFIG_VITESSE_PHY=yCONFIG_SMSC_PHY=yCONFIG_BROADCOM_PHY=mCONFIG_ICPLUS_PHY=m
# CONFIG_REALTEK_PHY is not set
# CONFIG_FIXED_PHY is not set CONFIG_MDIO_BITBANG=y CONFIG_NET_ETHERNET=yCONFIG_MII=yCONFIG_HAPPYMEAL=m
# CONFIG_SUNGEM is not set CONFIG_CASSINI=yCONFIG_NET_VENDOR_3COM=yCONFIG_VORTEX=y
# CONFIG_TYPHOON is not set
# CONFIG_NET_TULIP is not set CONFIG_HP100=y
# CONFIG_IBM_NEW_EMAC_ZMII is not set
# CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set CONFIG_NET_PCI=yCONFIG_PCNET32=y
# CONFIG_AMD8111_ETH is not set CONFIG_ADAPTEC_STARFIRE=y
# CONFIG_B44 is not setCONFIG_FORCEDETH=y
# CONFIG_FORCEDETH_NAPI is not set
# CONFIG_EEPRO100 is not setCONFIG_E100=yCONFIG_FEALNX=m
# CONFIG_NATSEMI is not set CONFIG_NE2K_PCI=m
# CONFIG_8139CP is not set CONFIG_8139TOO=yCONFIG_8139TOO_PIO=y CONFIG_8139TOO_TUNE_TWISTER=y CONFIG_8139TOO_8129=y CONFIG_8139_OLD_RX_RESET=y
# CONFIG_R6040 is not setCONFIG_SIS900=m
# CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_SC92031 is not set CONFIG_NET_POCKET=yCONFIG_ATP=y
# CONFIG_DE600 is not set
# CONFIG_DE620 is not set
# CONFIG_ATL2 is not set CONFIG_NETDEV_1000=y
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_E1000 is not setCONFIG_E1000E=yCONFIG_IP1000=yCONFIG_IGB=mCONFIG_IGB_LRO=y
# CONFIG_NS83820 is not set CONFIG_HAMACHI=yCONFIG_YELLOWFIN=mCONFIG_R8169=m
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
# CONFIG_VIA_VELOCITY is not set CONFIG_TIGON3=yCONFIG_BNX2=yCONFIG_QLA3XXX=m
# CONFIG_ATL1 is not setCONFIG_ATL1E=mCONFIG_JME=m
# CONFIG_NETDEV_10000 is not set
# CONFIG_TR is not set
#
# Wireless LAN
#CONFIG_WLAN_PRE80211=yCONFIG_STRIP=m
# CONFIG_WLAN_80211 is not set
# CONFIG_IWLWIFI_LEDS is not set
#
# USB Network Adapters
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not setCONFIG_USB_RTL8150=mCONFIG_USB_USBNET=m
# CONFIG_USB_NET_AX8817X is not setCONFIG_USB_NET_CDCETHER=mCONFIG_USB_NET_DM9601=m
# CONFIG_USB_NET_SMSC95XX is not setCONFIG_USB_NET_GL620A=mCONFIG_USB_NET_NET1080=m
# CONFIG_USB_NET_PLUSB is not setCONFIG_USB_NET_MCS7830=m
# CONFIG_USB_NET_RNDIS_HOST is not set
# CONFIG_USB_NET_CDC_SUBSET is not setCONFIG_USB_NET_ZAURUS=mCONFIG_USB_HSO=yCONFIG_WAN=y
# CONFIG_HDLC is not setCONFIG_DLCI=yCONFIG_DLCI_MAX=8CONFIG_SBNI=mCONFIG_SBNI_MULTILINE=yCONFIG_ATM_DRIVERS=yCONFIG_ATM_DUMMY=mCONFIG_ATM_TCP=yCONFIG_ATM_LANAI=yCONFIG_ATM_ENI=yCONFIG_ATM_ENI_DEBUG=yCONFIG_ATM_ENI_TUNE_BURST=yCONFIG_ATM_ENI_BURST_TX_16W=y
# CONFIG_ATM_ENI_BURST_TX_8W is not setCONFIG_ATM_ENI_BURST_TX_4W=yCONFIG_ATM_ENI_BURST_TX_2W=y
# CONFIG_ATM_ENI_BURST_RX_16W is not setCONFIG_ATM_ENI_BURST_RX_8W=yCONFIG_ATM_ENI_BURST_RX_4W=yCONFIG_ATM_ENI_BURST_RX_2W=yCONFIG_ATM_FIRESTREAM=yCONFIG_ATM_ZATM=m
# CONFIG_ATM_ZATM_DEBUG is not set
# CONFIG_ATM_IDT77252 is not setCONFIG_ATM_AMBASSADOR=yCONFIG_ATM_AMBASSADOR_DEBUG=yCONFIG_ATM_HORIZON=yCONFIG_ATM_HORIZON_DEBUG=yCONFIG_ATM_IA=m
# CONFIG_ATM_IA_DEBUG is not set
# CONFIG_ATM_FORE200E is not set
# CONFIG_ATM_HE is not setCONFIG_XEN_NETDEV_FRONTEND=y
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PLIP is not setCONFIG_PPP=mCONFIG_PPP_MULTILINK=y
# CONFIG_PPP_FILTER is not setCONFIG_PPP_ASYNC=mCONFIG_PPP_SYNC_TTY=m
# CONFIG_PPP_DEFLATE is not set
# CONFIG_PPP_BSDCOMP is not set
# CONFIG_PPP_MPPE is not setCONFIG_PPPOE=mCONFIG_PPPOATM=mCONFIG_PPPOL2TP=mCONFIG_SLIP=mCONFIG_SLIP_COMPRESSED=yCONFIG_SLHC=mCONFIG_SLIP_SMART=y
# CONFIG_SLIP_MODE_SLIP6 is not set
# CONFIG_NET_FC is not setCONFIG_NETCONSOLE=yCONFIG_NETCONSOLE_DYNAMIC=yCONFIG_NETPOLL=yCONFIG_NETPOLL_TRAP=yCONFIG_NET_POLL_CONTROLLER=yCONFIG_VIRTIO_NET=mCONFIG_ISDN=y
# CONFIG_ISDN_I4L is not set
# CONFIG_ISDN_CAPI is not setCONFIG_PHONE=m
#
# Input device support
#CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not setCONFIG_INPUT_POLLDEV=y
#
# Userland interfaces
#CONFIG_INPUT_MOUSEDEV=yCONFIG_INPUT_MOUSEDEV_PSAUX=yCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768CONFIG_INPUT_JOYDEV=m
# CONFIG_INPUT_EVDEV is not setCONFIG_INPUT_EVBUG=yCONFIG_XEN_KBDDEV_FRONTEND=m
#
# Input Device Drivers
#CONFIG_INPUT_KEYBOARD=yCONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not setCONFIG_KEYBOARD_XTKBD=yCONFIG_KEYBOARD_NEWTON=mCONFIG_KEYBOARD_STOWAWAY=m
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not setCONFIG_INPUT_MISC=y
# CONFIG_INPUT_PCSPKR is not setCONFIG_INPUT_APANEL=y
# CONFIG_INPUT_ATLAS_BTNS is not setCONFIG_INPUT_ATI_REMOTE=m
# CONFIG_INPUT_ATI_REMOTE2 is not setCONFIG_INPUT_KEYSPAN_REMOTE=yCONFIG_INPUT_POWERMATE=mCONFIG_INPUT_YEALINK=mCONFIG_INPUT_CM109=mCONFIG_INPUT_UINPUT=y
#
# Hardware I/O ports
#CONFIG_SERIO=yCONFIG_SERIO_I8042=yCONFIG_SERIO_SERPORT=m
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not setCONFIG_SERIO_PCIPS2=mCONFIG_SERIO_LIBPS2=yCONFIG_SERIO_RAW=yCONFIG_GAMEPORT=yCONFIG_GAMEPORT_NS558=yCONFIG_GAMEPORT_L4=yCONFIG_GAMEPORT_EMU10K1=mCONFIG_GAMEPORT_FM801=m
#
# Character devices
#CONFIG_VT=yCONFIG_CONSOLE_TRANSLATIONS=yCONFIG_VT_CONSOLE=yCONFIG_HW_CONSOLE=yCONFIG_VT_HW_CONSOLE_BINDING=yCONFIG_DEVKMEM=y
# CONFIG_SERIAL_NONSTANDARD is not setCONFIG_NOZOMI=y
#
# Serial drivers
#CONFIG_SERIAL_8250=yCONFIG_SERIAL_8250_CONSOLE=yCONFIG_FIX_EARLYCON_MEM=yCONFIG_SERIAL_8250_PCI=yCONFIG_SERIAL_8250_PNP=yCONFIG_SERIAL_8250_NR_UARTS=4CONFIG_SERIAL_8250_RUNTIME_UARTS=4CONFIG_SERIAL_8250_EXTENDED=yCONFIG_SERIAL_8250_MANY_PORTS=yCONFIG_SERIAL_8250_SHARE_IRQ=yCONFIG_SERIAL_8250_DETECT_IRQ=yCONFIG_SERIAL_8250_RSA=y
#
# Non-8250 serial port support
#CONFIG_SERIAL_CORE=yCONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not setCONFIG_UNIX98_PTYS=yCONFIG_LEGACY_PTYS=yCONFIG_LEGACY_PTY_COUNT=256
# CONFIG_PRINTER is not setCONFIG_PPDEV=mCONFIG_HVC_DRIVER=yCONFIG_HVC_IRQ=yCONFIG_HVC_XEN=yCONFIG_VIRTIO_CONSOLE=m
# CONFIG_IPMI_HANDLER is not setCONFIG_HW_RANDOM=yCONFIG_HW_RANDOM_INTEL=y
# CONFIG_HW_RANDOM_AMD is not set
# CONFIG_HW_RANDOM_VIRTIO is not setCONFIG_NVRAM=yCONFIG_RTC=mCONFIG_GEN_RTC=yCONFIG_GEN_RTC_X=y
# CONFIG_R3964 is not setCONFIG_APPLICOM=mCONFIG_MWAVE=m
CONFIG_PC8736x_GPIO=mCONFIG_NSC_GPIO=mCONFIG_RAW_DRIVER=yCONFIG_MAX_RAW_DEVS=256CONFIG_HPET=y
# CONFIG_HPET_MMAP is not set
# CONFIG_HANGCHECK_TIMER is not setCONFIG_TCG_TPM=y
# CONFIG_TCG_TIS is not set
# CONFIG_TCG_NSC is not setCONFIG_TCG_ATMEL=y
# CONFIG_TCG_INFINEON is not setCONFIG_TELCLOCK=yCONFIG_DEVPORT=yCONFIG_I2C=yCONFIG_I2C_BOARDINFO=yCONFIG_I2C_CHARDEV=mCONFIG_I2C_HELPER_AUTO=yCONFIG_I2C_ALGOBIT=y
#
# I2C Hardware Bus support
#
#
# PC SMBus host controller drivers
#CONFIG_I2C_ALI1535=yCONFIG_I2C_ALI1563=mCONFIG_I2C_ALI15X3=mCONFIG_I2C_AMD756=mCONFIG_I2C_AMD8111=yCONFIG_I2C_I801=mCONFIG_I2C_ISCH=yCONFIG_I2C_PIIX4=m
# CONFIG_I2C_NFORCE2 is not setCONFIG_I2C_SIS5595=m
# CONFIG_I2C_SIS630 is not set
# CONFIG_I2C_SIS96X is not setCONFIG_I2C_VIA=yCONFIG_I2C_VIAPRO=y
#
# I2C system bus drivers (mostly embedded / system-on-chip) #CONFIG_I2C_GPIO=yCONFIG_I2C_OCORES=yCONFIG_I2C_SIMTEC=m
#
# External I2C/SMBus adapter drivers
#
# CONFIG_I2C_PARPORT is not set
# CONFIG_I2C_PARPORT_LIGHT is not setCONFIG_I2C_TAOS_EVM=mCONFIG_I2C_TINY_USB=m
#
# Graphics adapter I2C/DDC channel drivers
#
# CONFIG_I2C_VOODOO3 is not set
#
# Other I2C/SMBus bus drivers
#
# CONFIG_I2C_PCA_PLATFORM is not setCONFIG_I2C_STUB=m
#
# Miscellaneous I2C Chip support
#CONFIG_DS1682=m
# CONFIG_AT24 is not set
# CONFIG_SENSORS_EEPROM is not setCONFIG_SENSORS_PCA9539=mCONFIG_SENSORS_PCF8591=m
# CONFIG_TPS65010 is not setCONFIG_SENSORS_MAX6875=yCONFIG_SENSORS_TSL2550=mCONFIG_I2C_DEBUG_CORE=y
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not setCONFIG_I2C_DEBUG_CHIP=y
# CONFIG_SPI is not setCONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=yCONFIG_GPIOLIB=y
# CONFIG_DEBUG_GPIO is not set
# CONFIG_GPIO_SYSFS is not set
#
# I2C GPIO expanders:
#CONFIG_GPIO_MAX732X=y
# CONFIG_GPIO_PCA953X is not setCONFIG_GPIO_PCF857X=m
#
# PCI GPIO expanders:
#
# CONFIG_GPIO_BT8XX is not set
#
# SPI GPIO expanders:
#CONFIG_W1=mCONFIG_W1_CON=y
#
# 1-wire Bus Masters
#CONFIG_W1_MASTER_MATROX=mCONFIG_W1_MASTER_DS2490=mCONFIG_W1_MASTER_DS2482=mCONFIG_W1_MASTER_GPIO=m
#
# 1-wire Slaves
#
# CONFIG_W1_SLAVE_THERM is not setCONFIG_W1_SLAVE_SMEM=m
# CONFIG_W1_SLAVE_DS2433 is not setCONFIG_W1_SLAVE_DS2760=mCONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not setCONFIG_PDA_POWER=mCONFIG_BATTERY_DS2760=m
CONFIG_BATTERY_BQ27x00=mCONFIG_HWMON=yCONFIG_HWMON_VID=yCONFIG_SENSORS_ABITUGURU=m
# CONFIG_SENSORS_ABITUGURU3 is not setCONFIG_SENSORS_AD7414=y
# CONFIG_SENSORS_AD7418 is not set
# CONFIG_SENSORS_ADM1021 is not setCONFIG_SENSORS_ADM1025=y
# CONFIG_SENSORS_ADM1026 is not setCONFIG_SENSORS_ADM1029=mCONFIG_SENSORS_ADM1031=mCONFIG_SENSORS_ADM9240=y
# CONFIG_SENSORS_ADT7470 is not set
# CONFIG_SENSORS_ADT7473 is not set
# CONFIG_SENSORS_K8TEMP is not setCONFIG_SENSORS_ASB100=yCONFIG_SENSORS_ATXP1=mCONFIG_SENSORS_DS1621=m
# CONFIG_SENSORS_I5K_AMB is not set
# CONFIG_SENSORS_F71805F is not set
# CONFIG_SENSORS_F71882FG is not set
# CONFIG_SENSORS_F75375S is not setCONFIG_SENSORS_FSCHER=yCONFIG_SENSORS_FSCPOS=y
# CONFIG_SENSORS_FSCHMD is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_CORETEMP is not set
# CONFIG_SENSORS_IT87 is not setCONFIG_SENSORS_LM63=m
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not setCONFIG_SENSORS_LM83=m
# CONFIG_SENSORS_LM85 is not setCONFIG_SENSORS_LM87=yCONFIG_SENSORS_LM90=yCONFIG_SENSORS_LM92=yCONFIG_SENSORS_LM93=y
# CONFIG_SENSORS_MAX1619 is not setCONFIG_SENSORS_MAX6650=y
# CONFIG_SENSORS_PC87360 is not setCONFIG_SENSORS_PC87427=m
# CONFIG_SENSORS_SIS5595 is not set
# CONFIG_SENSORS_DME1737 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47M192 is not setCONFIG_SENSORS_SMSC47B397=m
# CONFIG_SENSORS_ADS7828 is not setCONFIG_SENSORS_THMC50=yCONFIG_SENSORS_VIA686A=y
# CONFIG_SENSORS_VT1211 is not set
# CONFIG_SENSORS_VT8231 is not setCONFIG_SENSORS_W83781D=m
# CONFIG_SENSORS_W83791D is not setCONFIG_SENSORS_W83792D=m
# CONFIG_SENSORS_W83793 is not setCONFIG_SENSORS_W83L785TS=m
# CONFIG_SENSORS_W83L786NG is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not setCONFIG_SENSORS_HDAPS=yCONFIG_SENSORS_APPLESMC=yCONFIG_HWMON_DEBUG_CHIP=yCONFIG_THERMAL=yCONFIG_THERMAL_HWMON=yCONFIG_WATCHDOG=yCONFIG_WATCHDOG_NOWAYOUT=y
#
# Watchdog Device Drivers
#CONFIG_SOFT_WATCHDOG=m
# CONFIG_ACQUIRE_WDT is not setCONFIG_ADVANTECH_WDT=mCONFIG_ALIM1535_WDT=m
# CONFIG_ALIM7101_WDT is not set
# CONFIG_SC520_WDT is not setCONFIG_IB700_WDT=mCONFIG_IBMASR=m
# CONFIG_WAFER_WDT is not setCONFIG_I6300ESB_WDT=mCONFIG_ITCO_WDT=mCONFIG_ITCO_VENDOR_SUPPORT=yCONFIG_IT8712F_WDT=yCONFIG_IT87_WDT=m
# CONFIG_HP_WATCHDOG is not set
# CONFIG_SC1200_WDT is not set
# CONFIG_PC87413_WDT is not setCONFIG_60XX_WDT=mCONFIG_SBC8360_WDT=yCONFIG_CPU5_WDT=y
# CONFIG_SMSC37B787_WDT is not setCONFIG_W83627HF_WDT=m
# CONFIG_W83697HF_WDT is not set
# CONFIG_W83697UG_WDT is not setCONFIG_W83877F_WDT=m
# CONFIG_W83977F_WDT is not set
# CONFIG_MACHZ_WDT is not setCONFIG_SBC_EPX_C3_WATCHDOG=y
#
# PCI-based Watchdog Cards
#
# CONFIG_PCIPCWATCHDOG is not set
# CONFIG_WDTPCI is not set
#
# USB-based Watchdog Cards
#CONFIG_USBPCWATCHDOG=m
#
# Sonics Silicon Backplane
#CONFIG_SSB_POSSIBLE=yCONFIG_SSB=mCONFIG_SSB_SPROM=yCONFIG_SSB_PCIHOST_POSSIBLE=yCONFIG_SSB_PCIHOST=y
# CONFIG_SSB_B43_PCI_BRIDGE is not setCONFIG_SSB_DEBUG=yCONFIG_SSB_DRIVER_PCICORE_POSSIBLE=yCONFIG_SSB_DRIVER_PCICORE=y
#
# Multifunction device drivers
#
# CONFIG_MFD_CORE is not setCONFIG_MFD_SM501=mCONFIG_MFD_SM501_GPIO=yCONFIG_HTC_PASIC3=y
# CONFIG_MFD_TMIO is not set
#
# Multimedia devices
#
#
# Multimedia core support
#
# CONFIG_VIDEO_DEV is not set
# CONFIG_DVB_CORE is not set
# CONFIG_VIDEO_MEDIA is not set
#
# Multimedia drivers
#
# CONFIG_DAB is not set
#
# Graphics support
#CONFIG_AGP=yCONFIG_AGP_AMD64=yCONFIG_AGP_INTEL=mCONFIG_AGP_SIS=yCONFIG_AGP_VIA=mCONFIG_DRM=mCONFIG_DRM_TDFX=mCONFIG_DRM_R128=mCONFIG_DRM_RADEON=mCONFIG_DRM_I810=m
# CONFIG_DRM_I830 is not set
# CONFIG_DRM_I915 is not setCONFIG_DRM_MGA=m
# CONFIG_DRM_SIS is not setCONFIG_DRM_VIA=m
# CONFIG_DRM_SAVAGE is not setCONFIG_VGASTATE=mCONFIG_VIDEO_OUTPUT_CONTROL=yCONFIG_FB=m
# CONFIG_FIRMWARE_EDID is not setCONFIG_FB_DDC=mCONFIG_FB_BOOT_VESA_SUPPORT=yCONFIG_FB_CFB_FILLRECT=mCONFIG_FB_CFB_COPYAREA=mCONFIG_FB_CFB_IMAGEBLIT=m
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not setCONFIG_FB_SYS_FILLRECT=mCONFIG_FB_SYS_COPYAREA=mCONFIG_FB_SYS_IMAGEBLIT=m
# CONFIG_FB_FOREIGN_ENDIAN is not setCONFIG_FB_SYS_FOPS=mCONFIG_FB_DEFERRED_IO=yCONFIG_FB_HECUBA=mCONFIG_FB_SVGALIB=m
# CONFIG_FB_MACMODES is not setCONFIG_FB_BACKLIGHT=yCONFIG_FB_MODE_HELPERS=yCONFIG_FB_TILEBLITTING=y
#
# Frame buffer hardware drivers
#CONFIG_FB_PM2=mCONFIG_FB_PM2_FIFO_DISCONNECT=yCONFIG_FB_CYBER2000=mCONFIG_FB_ARC=mCONFIG_FB_UVESA=mCONFIG_FB_N411=mCONFIG_FB_HGA=m
# CONFIG_FB_HGA_ACCEL is not setCONFIG_FB_S1D13XXX=m
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not setCONFIG_FB_LE80578=mCONFIG_FB_CARILLO_RANCH=mCONFIG_FB_INTEL=mCONFIG_FB_INTEL_DEBUG=yCONFIG_FB_INTEL_I2C=yCONFIG_FB_MATROX=mCONFIG_FB_MATROX_MILLENIUM=yCONFIG_FB_MATROX_MYSTIQUE=yCONFIG_FB_MATROX_G=yCONFIG_FB_MATROX_I2C=mCONFIG_FB_MATROX_MAVEN=mCONFIG_FB_MATROX_MULTIHEAD=yCONFIG_FB_ATY128=m
# CONFIG_FB_ATY128_BACKLIGHT is not setCONFIG_FB_ATY=mCONFIG_FB_ATY_CT=y
# CONFIG_FB_ATY_GENERIC_LCD is not setCONFIG_FB_ATY_GX=yCONFIG_FB_ATY_BACKLIGHT=y
# CONFIG_FB_S3 is not setCONFIG_FB_SAVAGE=mCONFIG_FB_SAVAGE_I2C=y
# CONFIG_FB_SAVAGE_ACCEL is not setCONFIG_FB_SIS=mCONFIG_FB_SIS_300=y
# CONFIG_FB_SIS_315 is not set
# CONFIG_FB_VIA is not set
# CONFIG_FB_NEOMAGIC is not setCONFIG_FB_KYRO=m
# CONFIG_FB_3DFX is not setCONFIG_FB_VOODOO1=mCONFIG_FB_VT8623=mCONFIG_FB_TRIDENT=mCONFIG_FB_TRIDENT_ACCEL=y
# CONFIG_FB_ARK is not setCONFIG_FB_PM3=mCONFIG_FB_CARMINE=mCONFIG_FB_CARMINE_DRAM_EVAL=y
# CONFIG_CARMINE_DRAM_CUSTOM is not setCONFIG_FB_GEODE=y
# CONFIG_FB_GEODE_LX is not set
# CONFIG_FB_GEODE_GX is not set
# CONFIG_FB_GEODE_GX1 is not setCONFIG_FB_SM501=mCONFIG_XEN_FBDEV_FRONTEND=mCONFIG_FB_METRONOME=mCONFIG_BACKLIGHT_LCD_SUPPORT=yCONFIG_LCD_CLASS_DEVICE=m
# CONFIG_LCD_ILI9320 is not setCONFIG_LCD_PLATFORM=mCONFIG_BACKLIGHT_CLASS_DEVICE=yCONFIG_BACKLIGHT_CORGI=yCONFIG_BACKLIGHT_PROGEAR=y
# CONFIG_BACKLIGHT_CARILLO_RANCH is not setCONFIG_BACKLIGHT_MBP_NVIDIA=y
#
# Display device support
#CONFIG_DISPLAY_SUPPORT=m
#
# Display hardware drivers
#
#
# Console display driver support
#CONFIG_VGA_CONSOLE=yCONFIG_VGACON_SOFT_SCROLLBACK=yCONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64CONFIG_DUMMY_CONSOLE=y
CONFIG_FONT_8x16=y
# CONFIG_LOGO is not set
# CONFIG_SOUND is not setCONFIG_HID_SUPPORT=yCONFIG_HID=mCONFIG_HID_DEBUG=y
# CONFIG_HIDRAW is not set
#
# USB Input Devices
#
# CONFIG_USB_HID is not set
# CONFIG_HID_PID is not set
#
# USB HID Boot Protocol drivers
#CONFIG_USB_KBD=mCONFIG_USB_MOUSE=y
#
# Special HID drivers
#CONFIG_HID_COMPAT=yCONFIG_HID_APPLE=mCONFIG_USB_SUPPORT=yCONFIG_USB_ARCH_HAS_HCD=yCONFIG_USB_ARCH_HAS_OHCI=yCONFIG_USB_ARCH_HAS_EHCI=yCONFIG_USB=y
# CONFIG_USB_DEBUG is not setCONFIG_USB_ANNOUNCE_NEW_DEVICES=y
#
# Miscellaneous USB options
#CONFIG_USB_DEVICEFS=yCONFIG_USB_DEVICE_CLASS=yCONFIG_USB_DYNAMIC_MINORS=yCONFIG_USB_SUSPEND=y
# CONFIG_USB_OTG is not setCONFIG_USB_MON=y
#
# USB Host Controller Drivers
#
# CONFIG_USB_C67X00_HCD is not setCONFIG_USB_EHCI_HCD=yCONFIG_USB_EHCI_ROOT_HUB_TT=y
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
# CONFIG_USB_ISP116X_HCD is not setCONFIG_USB_ISP1760_HCD=y
# CONFIG_USB_ISP1760_PCI is not setCONFIG_USB_OHCI_HCD=y
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not setCONFIG_USB_OHCI_LITTLE_ENDIAN=yCONFIG_USB_UHCI_HCD=yCONFIG_USB_SL811_HCD=y
# CONFIG_USB_R8A66597_HCD is not set
#
# USB Device Class drivers
#CONFIG_USB_ACM=yCONFIG_USB_PRINTER=yCONFIG_USB_WDM=yCONFIG_USB_TMC=y
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' #
#
# may also be needed; see USB_STORAGE Help for more information # CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE_DEBUG=y CONFIG_USB_STORAGE_DATAFAB=y CONFIG_USB_STORAGE_FREECOM=y # CONFIG_USB_STORAGE_ISD200 is not set CONFIG_USB_STORAGE_DPCM=y CONFIG_USB_STORAGE_USBAT=y CONFIG_USB_STORAGE_SDDR09=y CONFIG_USB_STORAGE_SDDR55=y # CONFIG_USB_STORAGE_JUMPSHOT is not set # CONFIG_USB_STORAGE_ALAUDA is not set CONFIG_USB_STORAGE_ONETOUCH=y # CONFIG_USB_STORAGE_KARMA is not set CONFIG_USB_STORAGE_CYPRESS_ATACB=y # CONFIG_USB_LIBUSUAL is not set
#
# USB Imaging devices
#CONFIG_USB_MDC800=yCONFIG_USB_MICROTEK=m
#
# USB port drivers
#
# CONFIG_USB_USS720 is not setCONFIG_USB_SERIAL=mCONFIG_USB_EZUSB=yCONFIG_USB_SERIAL_GENERIC=yCONFIG_USB_SERIAL_AIRCABLE=mCONFIG_USB_SERIAL_ARK3116=mCONFIG_USB_SERIAL_BELKIN=mCONFIG_USB_SERIAL_CH341=mCONFIG_USB_SERIAL_WHITEHEAT=mCONFIG_USB_SERIAL_DIGI_ACCELEPORT=mCONFIG_USB_SERIAL_CP2101=mCONFIG_USB_SERIAL_CYPRESS_M8=mCONFIG_USB_SERIAL_EMPEG=mCONFIG_USB_SERIAL_FTDI_SIO=m
# CONFIG_USB_SERIAL_FUNSOFT is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_IPAQ is not setCONFIG_USB_SERIAL_IR=mCONFIG_USB_SERIAL_EDGEPORT=mCONFIG_USB_SERIAL_EDGEPORT_TI=mCONFIG_USB_SERIAL_GARMIN=m
# CONFIG_USB_SERIAL_IPW is not setCONFIG_USB_SERIAL_IUU=mCONFIG_USB_SERIAL_KEYSPAN_PDA=m
# CONFIG_USB_SERIAL_KEYSPAN is not setCONFIG_USB_SERIAL_KLSI=mCONFIG_USB_SERIAL_KOBIL_SCT=m
# CONFIG_USB_SERIAL_MCT_U232 is not setCONFIG_USB_SERIAL_MOS7720=mCONFIG_USB_SERIAL_MOS7840=mCONFIG_USB_SERIAL_MOTOROLA=mCONFIG_USB_SERIAL_NAVMAN=mCONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_OTI6858 is not set
# CONFIG_USB_SERIAL_SPCP8X5 is not setCONFIG_USB_SERIAL_HP4X=mCONFIG_USB_SERIAL_SAFE=mCONFIG_USB_SERIAL_SAFE_PADDED=yCONFIG_USB_SERIAL_SIERRAWIRELESS=mCONFIG_USB_SERIAL_TI=m
# CONFIG_USB_SERIAL_CYBERJACK is not setCONFIG_USB_SERIAL_XIRCOM=mCONFIG_USB_SERIAL_OPTION=m
# CONFIG_USB_SERIAL_OMNINET is not set
# CONFIG_USB_SERIAL_DEBUG is not set
#
# USB Miscellaneous drivers
#CONFIG_USB_EMI62=y
# CONFIG_USB_EMI26 is not setCONFIG_USB_ADUTUX=yCONFIG_USB_SEVSEG=yCONFIG_USB_RIO500=yCONFIG_USB_LEGOTOWER=mCONFIG_USB_LCD=y
# CONFIG_USB_BERRY_CHARGE is not set
# CONFIG_USB_LED is not setCONFIG_USB_CYPRESS_CY7C63=yCONFIG_USB_CYTHERM=yCONFIG_USB_PHIDGET=mCONFIG_USB_PHIDGETKIT=m
# CONFIG_USB_PHIDGETMOTORCONTROL is not setCONFIG_USB_PHIDGETSERVO=m
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_FTDI_ELAN is not set
# CONFIG_USB_APPLEDISPLAY is not setCONFIG_USB_SISUSBVGA=yCONFIG_USB_SISUSBVGA_CON=yCONFIG_USB_LD=yCONFIG_USB_TRANCEVIBRATOR=m
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not setCONFIG_USB_ISIGHTFW=mCONFIG_USB_VST=mCONFIG_USB_ATM=yCONFIG_USB_SPEEDTOUCH=yCONFIG_USB_CXACRU=mCONFIG_USB_UEAGLEATM=mCONFIG_USB_XUSBATM=mCONFIG_MMC=m
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
#
# MMC/SD/SDIO Card Drivers
#
# CONFIG_MMC_BLOCK is not setCONFIG_SDIO_UART=mCONFIG_MMC_TEST=m
#
# MMC/SD/SDIO Host Controller Drivers
#CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_PCI is not setCONFIG_MMC_WBSD=mCONFIG_MMC_TIFM_SD=mCONFIG_MEMSTICK=mCONFIG_MEMSTICK_DEBUG=y
#
# MemoryStick drivers
#CONFIG_MEMSTICK_UNSAFE_RESUME=yCONFIG_MSPRO_BLOCK=m
#
# MemoryStick Host Controller Drivers
#CONFIG_MEMSTICK_TIFM_MS=mCONFIG_MEMSTICK_JMICRON_38X=mCONFIG_NEW_LEDS=yCONFIG_LEDS_CLASS=y
#
# LED drivers
#CONFIG_LEDS_PCA9532=mCONFIG_LEDS_GPIO=mCONFIG_LEDS_CLEVO_MAIL=yCONFIG_LEDS_PCA955X=y
#
# LED Triggers
#
# CONFIG_LEDS_TRIGGERS is not setCONFIG_ACCESSIBILITY=y
# CONFIG_A11Y_BRAILLE_CONSOLE is not setCONFIG_INFINIBAND=m
# CONFIG_INFINIBAND_USER_MAD is not setCONFIG_INFINIBAND_USER_ACCESS=mCONFIG_INFINIBAND_USER_MEM=yCONFIG_INFINIBAND_ADDR_TRANS=yCONFIG_INFINIBAND_MTHCA=mCONFIG_INFINIBAND_MTHCA_DEBUG=y
# CONFIG_INFINIBAND_IPATH is not setCONFIG_INFINIBAND_AMSO1100=mCONFIG_INFINIBAND_AMSO1100_DEBUG=y
# CONFIG_MLX4_INFINIBAND is not setCONFIG_INFINIBAND_NES=mCONFIG_INFINIBAND_NES_DEBUG=y
# CONFIG_INFINIBAND_IPOIB is not setCONFIG_INFINIBAND_SRP=mCONFIG_INFINIBAND_ISER=mCONFIG_EDAC=y
#
# Reporting subsystems
#
# CONFIG_EDAC_DEBUG is not setCONFIG_EDAC_MM_EDAC=yCONFIG_EDAC_E752X=m
# CONFIG_EDAC_I82975X is not setCONFIG_EDAC_I3000=mCONFIG_EDAC_I5000=mCONFIG_EDAC_I5100=y
# CONFIG_RTC_CLASS is not set
# CONFIG_DMADEVICES is not setCONFIG_AUXDISPLAY=yCONFIG_KS0108=mCONFIG_KS0108_PORT=0x378CONFIG_KS0108_DELAY=2CONFIG_CFAG12864B=mCONFIG_CFAG12864B_RATE=20
# CONFIG_UIO is not setCONFIG_XEN_BALLOON=yCONFIG_XEN_SCRUB_PAGES=y
#
# Firmware Drivers
#CONFIG_EDD=mCONFIG_EDD_OFF=yCONFIG_FIRMWARE_MEMMAP=y
# CONFIG_DELL_RBU is not set
# CONFIG_DCDBAS is not setCONFIG_DMIID=yCONFIG_ISCSI_IBFT_FIND=yCONFIG_ISCSI_IBFT=m
#
# File systems
#CONFIG_EXT2_FS=yCONFIG_EXT2_FS_XATTR=yCONFIG_EXT2_FS_POSIX_ACL=yCONFIG_EXT2_FS_SECURITY=yCONFIG_EXT2_FS_XIP=yCONFIG_EXT3_FS=yCONFIG_EXT3_FS_XATTR=yCONFIG_EXT3_FS_POSIX_ACL=yCONFIG_EXT3_FS_SECURITY=yCONFIG_EXT4_FS=mCONFIG_EXT4DEV_COMPAT=y
# CONFIG_EXT4_FS_XATTR is not setCONFIG_FS_XIP=yCONFIG_JBD=y
# CONFIG_JBD_DEBUG is not setCONFIG_JBD2=yCONFIG_JBD2_DEBUG=yCONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not setCONFIG_JFS_FS=y
# CONFIG_JFS_POSIX_ACL is not setCONFIG_JFS_SECURITY=yCONFIG_JFS_DEBUG=yCONFIG_JFS_STATISTICS=yCONFIG_FS_POSIX_ACL=yCONFIG_FILE_LOCKING=yCONFIG_XFS_FS=y
# CONFIG_XFS_QUOTA is not set
# CONFIG_XFS_POSIX_ACL is not set
# CONFIG_XFS_RT is not setCONFIG_XFS_DEBUG=y
# CONFIG_GFS2_FS is not setCONFIG_OCFS2_FS=y
# CONFIG_OCFS2_FS_O2CB is not setCONFIG_OCFS2_FS_USERSPACE_CLUSTER=y
# CONFIG_OCFS2_FS_STATS is not set
# CONFIG_OCFS2_DEBUG_MASKLOG is not setCONFIG_OCFS2_DEBUG_FS=y
# CONFIG_OCFS2_COMPAT_JBD is not setCONFIG_DNOTIFY=yCONFIG_INOTIFY=yCONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not setCONFIG_AUTOFS_FS=yCONFIG_AUTOFS4_FS=yCONFIG_FUSE_FS=m
#
# CD-ROM/DVD Filesystems
#CONFIG_ISO9660_FS=mCONFIG_JOLIET=yCONFIG_ZISOFS=y
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#CONFIG_FAT_FS=mCONFIG_MSDOS_FS=m
# CONFIG_VFAT_FS is not setCONFIG_FAT_DEFAULT_CODEPAGE=437CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not setCONFIG_NTFS_RW=y
#
# Pseudo filesystems
#CONFIG_PROC_FS=yCONFIG_PROC_KCORE=yCONFIG_PROC_SYSCTL=yCONFIG_PROC_PAGE_MONITOR=yCONFIG_SYSFS=yCONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLBFS is not set
# CONFIG_HUGETLB_PAGE is not setCONFIG_CONFIGFS_FS=y
#
# Miscellaneous filesystems
#CONFIG_ADFS_FS=mCONFIG_ADFS_FS_RW=y
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not setCONFIG_HFSPLUS_FS=y
# CONFIG_BEFS_FS is not setCONFIG_BFS_FS=y
# CONFIG_EFS_FS is not setCONFIG_CRAMFS=m
# CONFIG_VXFS_FS is not setCONFIG_MINIX_FS=m
# CONFIG_OMFS_FS is not setCONFIG_HPFS_FS=m
# CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not setCONFIG_SYSV_FS=mCONFIG_UFS_FS=mCONFIG_UFS_FS_WRITE=y
# CONFIG_UFS_DEBUG is not setCONFIG_NETWORK_FILESYSTEMS=yCONFIG_NFS_FS=m
# CONFIG_NFS_V3 is not setCONFIG_NFS_V4=yCONFIG_NFSD=y
# CONFIG_NFSD_V3 is not set
# CONFIG_NFSD_V4 is not setCONFIG_LOCKD=yCONFIG_EXPORTFS=yCONFIG_NFS_COMMON=yCONFIG_SUNRPC=yCONFIG_SUNRPC_GSS=yCONFIG_SUNRPC_XPRT_RDMA=m
# CONFIG_SUNRPC_REGISTER_V4 is not setCONFIG_RPCSEC_GSS_KRB5=mCONFIG_RPCSEC_GSS_SPKM3=yCONFIG_SMB_FS=m
# CONFIG_SMB_NLS_DEFAULT is not setCONFIG_CIFS=y
# CONFIG_CIFS_STATS is not setCONFIG_CIFS_WEAK_PW_HASH=yCONFIG_CIFS_UPCALL=y
# CONFIG_CIFS_XATTR is not setCONFIG_CIFS_DEBUG2=yCONFIG_CIFS_EXPERIMENTAL=yCONFIG_CIFS_DFS_UPCALL=yCONFIG_NCP_FS=yCONFIG_NCPFS_PACKET_SIGNING=yCONFIG_NCPFS_IOCTL_LOCKING=yCONFIG_NCPFS_STRONG=yCONFIG_NCPFS_NFS_NS=yCONFIG_NCPFS_OS2_NS=yCONFIG_NCPFS_SMALLDOS=yCONFIG_NCPFS_NLS=yCONFIG_NCPFS_EXTRAS=y
# CONFIG_CODA_FS is not setCONFIG_AFS_FS=yCONFIG_AFS_DEBUG=y
#
# Partition Types
#CONFIG_PARTITION_ADVANCED=yCONFIG_ACORN_PARTITION=y
# CONFIG_ACORN_PARTITION_CUMANA is not setCONFIG_ACORN_PARTITION_EESOX=y
# CONFIG_ACORN_PARTITION_ICS is not setCONFIG_ACORN_PARTITION_ADFS=yCONFIG_ACORN_PARTITION_POWERTEC=y
# CONFIG_ACORN_PARTITION_RISCIX is not setCONFIG_OSF_PARTITION=yCONFIG_AMIGA_PARTITION=yCONFIG_ATARI_PARTITION=yCONFIG_MAC_PARTITION=yCONFIG_MSDOS_PARTITION=yCONFIG_BSD_DISKLABEL=yCONFIG_MINIX_SUBPARTITION=yCONFIG_SOLARIS_X86_PARTITION=yCONFIG_UNIXWARE_DISKLABEL=y
# CONFIG_LDM_PARTITION is not setCONFIG_SGI_PARTITION=yCONFIG_ULTRIX_PARTITION=yCONFIG_SUN_PARTITION=yCONFIG_KARMA_PARTITION=yCONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not setCONFIG_NLS=yCONFIG_NLS_DEFAULT="iso8859-1"CONFIG_NLS_CODEPAGE_437=m
# CONFIG_NLS_CODEPAGE_737 is not setCONFIG_NLS_CODEPAGE_775=y
# CONFIG_NLS_CODEPAGE_850 is not setCONFIG_NLS_CODEPAGE_852=yCONFIG_NLS_CODEPAGE_855=yCONFIG_NLS_CODEPAGE_857=yCONFIG_NLS_CODEPAGE_860=mCONFIG_NLS_CODEPAGE_861=mCONFIG_NLS_CODEPAGE_862=yCONFIG_NLS_CODEPAGE_863=yCONFIG_NLS_CODEPAGE_864=mCONFIG_NLS_CODEPAGE_865=m
# CONFIG_NLS_CODEPAGE_866 is not setCONFIG_NLS_CODEPAGE_869=mCONFIG_NLS_CODEPAGE_936=yCONFIG_NLS_CODEPAGE_950=y
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not setCONFIG_NLS_CODEPAGE_874=yCONFIG_NLS_ISO8859_8=mCONFIG_NLS_CODEPAGE_1250=yCONFIG_NLS_CODEPAGE_1251=m
# CONFIG_NLS_ASCII is not set
# CONFIG_NLS_ISO8859_1 is not set
# CONFIG_NLS_ISO8859_2 is not setCONFIG_NLS_ISO8859_3=mCONFIG_NLS_ISO8859_4=mCONFIG_NLS_ISO8859_5=m
# CONFIG_NLS_ISO8859_6 is not setCONFIG_NLS_ISO8859_7=mCONFIG_NLS_ISO8859_9=mCONFIG_NLS_ISO8859_13=yCONFIG_NLS_ISO8859_14=m
# CONFIG_NLS_ISO8859_15 is not setCONFIG_NLS_KOI8_R=mCONFIG_NLS_KOI8_U=mCONFIG_NLS_UTF8=yCONFIG_DLM=y
# CONFIG_DLM_DEBUG is not set
#
# Kernel hacking
#CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# CONFIG_PRINTK_TIME is not setCONFIG_ALLOW_WARNINGS=y
# CONFIG_ENABLE_WARN_DEPRECATED is not setCONFIG_ENABLE_MUST_CHECK=yCONFIG_FRAME_WARN=2048CONFIG_MAGIC_SYSRQ=yCONFIG_UNUSED_SYMBOLS=yCONFIG_DEBUG_FS=yCONFIG_HEADERS_CHECK=yCONFIG_DEBUG_KERNEL=yCONFIG_DEBUG_SHIRQ=y
# CONFIG_DETECT_SOFTLOCKUP is not setCONFIG_SCHED_DEBUG=yCONFIG_SCHEDSTATS=y
# CONFIG_TIMER_STATS is not setCONFIG_DEBUG_OBJECTS=yCONFIG_DEBUG_OBJECTS_SELFTEST=y
# CONFIG_DEBUG_OBJECTS_FREE is not setCONFIG_DEBUG_OBJECTS_TIMERS=yCONFIG_SLUB_DEBUG_ON=yCONFIG_SLUB_STATS=y
# CONFIG_DEBUG_RT_MUTEXES is not setCONFIG_RT_MUTEX_TESTER=yCONFIG_DEBUG_SPINLOCK=yCONFIG_DEBUG_MUTEXES=yCONFIG_DEBUG_LOCK_ALLOC=y
# CONFIG_PROVE_LOCKING is not setCONFIG_LOCKDEP=yCONFIG_LOCK_STAT=yCONFIG_DEBUG_LOCKDEP=yCONFIG_DEBUG_SPINLOCK_SLEEP=yCONFIG_DEBUG_LOCKING_API_SELFTESTS=yCONFIG_STACKTRACE=yCONFIG_DEBUG_BUGVERBOSE=yCONFIG_DEBUG_VM=y
# CONFIG_DEBUG_VIRTUAL is not setCONFIG_DEBUG_WRITECOUNT=yCONFIG_DEBUG_MEMORY_INIT=yCONFIG_DEBUG_LIST=yCONFIG_DEBUG_SG=yCONFIG_DEBUG_NOTIFIERS=yCONFIG_FRAME_POINTER=yCONFIG_BOOT_PRINTK_DELAY=yCONFIG_RCU_TORTURE_TEST=y
# CONFIG_RCU_TORTURE_TEST_RUNNABLE is not setCONFIG_RCU_CPU_STALL_DETECTOR=yCONFIG_KPROBES_SANITY_TEST=yCONFIG_BACKTRACE_SELF_TEST=y
# CONFIG_LKDTM is not setCONFIG_FAULT_INJECTION=y
# CONFIG_FAILSLAB is not set
# CONFIG_FAIL_PAGE_ALLOC is not set
# CONFIG_FAIL_MAKE_REQUEST is not set
# CONFIG_FAIL_IO_TIMEOUT is not set
# CONFIG_FAULT_INJECTION_DEBUG_FS is not setCONFIG_LATENCYTOP=yCONFIG_SYSCTL_SYSCALL_CHECK=y
# CONFIG_DEBUG_PER_CPU_MAPS is not setCONFIG_NOP_TRACER=yCONFIG_HAVE_FUNCTION_TRACER=yCONFIG_HAVE_DYNAMIC_FTRACE=yCONFIG_HAVE_FTRACE_MCOUNT_RECORD=yCONFIG_TRACER_MAX_TRACE=yCONFIG_RING_BUFFER=yCONFIG_TRACING=y
#
# Tracers
#CONFIG_FUNCTION_TRACER=y
# CONFIG_IRQSOFF_TRACER is not setCONFIG_SYSPROF_TRACER=yCONFIG_SCHED_TRACER=yCONFIG_CONTEXT_SWITCH_TRACER=yCONFIG_BOOT_TRACER=yCONFIG_STACK_TRACER=y
# CONFIG_DYNAMIC_FTRACE is not setCONFIG_PROVIDE_OHCI1394_DMA_INIT=yCONFIG_FIREWIRE_OHCI_REMOTE_DMA=yCONFIG_BUILD_DOCSRC=yCONFIG_DYNAMIC_PRINTK_DEBUG=yCONFIG_SAMPLES=yCONFIG_SAMPLE_MARKERS=m
# CONFIG_SAMPLE_TRACEPOINTS is not setCONFIG_SAMPLE_KOBJECT=yCONFIG_SAMPLE_KPROBES=mCONFIG_SAMPLE_KRETPROBES=mCONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not setCONFIG_STRICT_DEVMEM=yCONFIG_X86_VERBOSE_BOOTUP=yCONFIG_EARLY_PRINTK=yCONFIG_EARLY_PRINTK_DBGP=yCONFIG_DEBUG_STACKOVERFLOW=y
# CONFIG_DEBUG_STACK_USAGE is not setCONFIG_DEBUG_PAGEALLOC=yCONFIG_X86_PTDUMP=y
# CONFIG_DEBUG_RODATA is not setCONFIG_DEBUG_NX_TEST=mCONFIG_IOMMU_DEBUG=yCONFIG_IOMMU_LEAK=yCONFIG_MMIOTRACE_HOOKS=yCONFIG_MMIOTRACE=yCONFIG_MMIOTRACE_TEST=mCONFIG_IO_DELAY_TYPE_0X80=0CONFIG_IO_DELAY_TYPE_0XED=1CONFIG_IO_DELAY_TYPE_UDELAY=2CONFIG_IO_DELAY_TYPE_NONE=3CONFIG_IO_DELAY_0X80=y
# CONFIG_IO_DELAY_0XED is not set
# CONFIG_IO_DELAY_UDELAY is not set
# CONFIG_IO_DELAY_NONE is not setCONFIG_DEFAULT_IO_DELAY_TYPE=0CONFIG_DEBUG_BOOT_PARAMS=y
# CONFIG_CPA_DEBUG is not setCONFIG_OPTIMIZE_INLINING=y
#
# Security options
#CONFIG_KEYS=yCONFIG_KEYS_DEBUG_PROC_KEYS=yCONFIG_SECURITY=yCONFIG_SECURITYFS=yCONFIG_SECURITY_NETWORK=yCONFIG_SECURITY_NETWORK_XFRM=yCONFIG_SECURITY_FILE_CAPABILITIES=yCONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0CONFIG_CRYPTO=y
#
# Crypto core or helper
#CONFIG_CRYPTO_FIPS=yCONFIG_CRYPTO_ALGAPI=yCONFIG_CRYPTO_AEAD=yCONFIG_CRYPTO_BLKCIPHER=yCONFIG_CRYPTO_HASH=yCONFIG_CRYPTO_RNG=yCONFIG_CRYPTO_MANAGER=yCONFIG_CRYPTO_GF128MUL=yCONFIG_CRYPTO_NULL=m
# CONFIG_CRYPTO_CRYPTD is not setCONFIG_CRYPTO_AUTHENC=mCONFIG_CRYPTO_TEST=m
#
# Authenticated Encryption with Associated Data
#CONFIG_CRYPTO_CCM=m
# CONFIG_CRYPTO_GCM is not setCONFIG_CRYPTO_SEQIV=y
#
# Block modes
#CONFIG_CRYPTO_CBC=yCONFIG_CRYPTO_CTR=yCONFIG_CRYPTO_CTS=mCONFIG_CRYPTO_ECB=y
# CONFIG_CRYPTO_LRW is not setCONFIG_CRYPTO_PCBC=yCONFIG_CRYPTO_XTS=y
#
# Hash modes
#CONFIG_CRYPTO_HMAC=yCONFIG_CRYPTO_XCBC=m
#
# Digest
#CONFIG_CRYPTO_CRC32C=yCONFIG_CRYPTO_CRC32C_INTEL=yCONFIG_CRYPTO_MD4=yCONFIG_CRYPTO_MD5=yCONFIG_CRYPTO_MICHAEL_MIC=mCONFIG_CRYPTO_RMD128=y
# CONFIG_CRYPTO_RMD160 is not set
# CONFIG_CRYPTO_RMD256 is not setCONFIG_CRYPTO_RMD320=yCONFIG_CRYPTO_SHA1=yCONFIG_CRYPTO_SHA256=y
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_TGR192 is not setCONFIG_CRYPTO_WP512=y
#
# Ciphers
#CONFIG_CRYPTO_AES=mCONFIG_CRYPTO_AES_X86_64=m
# CONFIG_CRYPTO_ANUBIS is not setCONFIG_CRYPTO_ARC4=y
# CONFIG_CRYPTO_BLOWFISH is not setCONFIG_CRYPTO_CAMELLIA=yCONFIG_CRYPTO_CAST5=yCONFIG_CRYPTO_CAST6=mCONFIG_CRYPTO_DES=yCONFIG_CRYPTO_FCRYPT=yCONFIG_CRYPTO_KHAZAD=mCONFIG_CRYPTO_SALSA20=m
# CONFIG_CRYPTO_SALSA20_X86_64 is not setCONFIG_CRYPTO_SEED=mCONFIG_CRYPTO_SERPENT=mCONFIG_CRYPTO_TEA=mCONFIG_CRYPTO_TWOFISH=mCONFIG_CRYPTO_TWOFISH_COMMON=mCONFIG_CRYPTO_TWOFISH_X86_64=m
#
# Compression
#CONFIG_CRYPTO_DEFLATE=y
# CONFIG_CRYPTO_LZO is not set
#
# Random Number Generation
#
# CONFIG_CRYPTO_ANSI_CPRNG is not setCONFIG_CRYPTO_HW=y
# CONFIG_CRYPTO_DEV_HIFN_795X is not setCONFIG_HAVE_KVM=yCONFIG_VIRTUALIZATION=yCONFIG_KVM=mCONFIG_KVM_INTEL=m
# CONFIG_KVM_AMD is not set
# CONFIG_KVM_TRACE is not setCONFIG_VIRTIO=mCONFIG_VIRTIO_RING=mCONFIG_VIRTIO_PCI=mCONFIG_VIRTIO_BALLOON=m
#
# Library routines
#CONFIG_BITREVERSE=yCONFIG_GENERIC_FIND_FIRST_BIT=yCONFIG_GENERIC_FIND_NEXT_BIT=yCONFIG_CRC_CCITT=yCONFIG_CRC16=yCONFIG_CRC_T10DIF=mCONFIG_CRC_ITU_T=mCONFIG_CRC32=yCONFIG_CRC7=mCONFIG_LIBCRC32C=yCONFIG_ZLIB_INFLATE=yCONFIG_ZLIB_DEFLATE=yCONFIG_PLIST=yCONFIG_HAS_IOMEM=yCONFIG_HAS_IOPORT=yCONFIG_HAS_DMA=yCONFIG_CHECK_SIGNATURE=yCONFIG_FORCE_SUCCESSFUL_BUILD=yCONFIG_FORCE_MINIMAL_CONFIG=yCONFIG_FORCE_MINIMAL_CONFIG_64=yCONFIG_FORCE_MINIMAL_CONFIG_PHYS=y
Thanks! I'll check this out immediately...
Quoted 52 lines · Ingo Molnar
ok, the new cpumask code blew up in -tip testing, with various sorts of slab corruptions during scheduler init:
[ 0.544012] groups: 0-1 [ 0.546689] ============================================================================= [ 0.548000] BUG kmalloc-8: Wrong object count. Counter is 15 but counted were 50 [ 0.548000] ----------------------------------------------------------------------------- [ 0.548000] [ 0.548000] INFO: Slab 0xffffe200019d7ae0 objects=51 used=15 fp=0xffff88003f9cc4b0 flags=0x200000000000c3 [ 0.548000] Pid: 1, comm: swapper Not tainted 2.6.27-tip-07104-g5cf7b67-dirty #45066 [ 0.548000] Call Trace: [ 0.548000] [<ffffffff802cbcf0>] slab_err+0xa0/0xb0 [ 0.548000] [<ffffffff8026df2d>] ? trace_hardirqs_on+0xd/0x10 [ 0.548000] [<ffffffff8026deca>] ? trace_hardirqs_on_caller+0x15a/0x1b0 [ 0.548000] [<ffffffff8023d102>] ? cpu_attach_domain+0x172/0x6b0 [ 0.548000] [<ffffffff802cbf4d>] ? check_bytes_and_report+0x3d/0xe0 [ 0.548000] [<ffffffff802cd927>] on_freelist+0x197/0x240 [ 0.548000] [<ffffffff802ce926>] __slab_free+0x1a6/0x310 [ 0.548000] [<ffffffff80415009>] ? free_cpumask_var+0x9/0x10 [ 0.548000] [<ffffffff802ceb47>] kfree+0xb7/0x140 [ 0.548000] [<ffffffff80415009>] ? free_cpumask_var+0x9/0x10 [ 0.548000] [<ffffffff80415009>] free_cpumask_var+0x9/0x10 [ 0.548000] [<ffffffff8023dadc>] __build_sched_domains+0x49c/0xd30 [ 0.548000] [<ffffffff8026df2d>] ? trace_hardirqs_on+0xd/0x10 [ 0.548000] [<ffffffff816698fa>] sched_init_smp+0xba/0x2b0 [ 0.548000] [<ffffffff8026deca>] ? trace_hardirqs_on_caller+0x15a/0x1b0 [ 0.548000] [<ffffffff802cbf4d>] ? check_bytes_and_report+0x3d/0xe0 [ 0.548000] [<ffffffff802cdc08>] ? check_object+0x238/0x270 [ 0.548000] [<ffffffff802cc044>] ? init_object+0x54/0x90 [ 0.548000] [<ffffffff8026df2d>] ? trace_hardirqs_on+0xd/0x10 [ 0.548000] [<ffffffff8026deca>] ? trace_hardirqs_on_caller+0x15a/0x1b0 [ 0.548000] [<ffffffff8026df2d>] ? trace_hardirqs_on+0xd/0x10 [ 0.548000] [<ffffffff816622e4>] ? check_nmi_watchdog+0x204/0x260 [ 0.548000] [<ffffffff816622e4>] ? check_nmi_watchdog+0x204/0x260 [ 0.548000] [<ffffffff8165fad6>] ? native_smp_cpus_done+0x1a6/0x2b0 [ 0.548000] [<ffffffff81654f86>] kernel_init+0x176/0x240 [ 0.548000] [<ffffffff8020c9f9>] child_rip+0xa/0x11 [ 0.548000] [<ffffffff8020bf14>] ? restore_args+0x0/0x30 [ 0.548000] [<ffffffff81654e10>] ? kernel_init+0x0/0x240 [ 0.548000] [<ffffffff8020c9ef>] ? child_rip+0x0/0x11 [ 0.548000] FIX kmalloc-8: Object count adjusted. [ 0.548000] =============================================================================i suspect it's due to:
01b8bd9: sched: cpumask: get rid of boutique
sched.callocations, usecpumask_vanote,
CONFIG_MAXSMPis set in the .config, so this is with the dynamiccpumask_t.Ingo
Thomas has started a -tip cross-build test, and there's massive cross-build failures as well due to the cpumask changes:
http://www.tglx.de/autoqa-cgi/index?run=140&tree=8
Run 140: 11 of 19 OK
8 architecture configs out of 19 fail to build, 7 of which failures is this patchset's fault:
powerpc, ps3_defconfig:
http://www.tglx.de/autoqa-logs/000140-0008-0006.log
/home/tglx/work/kernel/autoqa/linux-2.6-tip/ arch/powerpc/platforms/cell/spu_base.c:117:
error: implicit declaration of function '__cpus_setall'
m32r defconfig:
http://www.tglx.de/autoqa-logs/000140-0008-0013.log
from /home/tglx/work/kernel/autoqa/linux-2.6-tip/arch/m32r/kernel/smp.c:18:
include2/asm/smp.h:66: error: expected ')' before '*' token include2/asm/smp.h:66: error: expected ')' before 'cpu_possible_mask' include2/asm/smp.h:67: error: expected ')' before '*' token include2/asm/smp.h:67: error: expected ')' before 'cpu_present_mask'
xtensa defconfig:
from /home/tglx/work/kernel/autoqa/linux-2.6-tip/arch/xtensa/k ernel/asm-offsets.c:20:
/home/tglx/work/kernel/autoqa/linux-2.6-tip/include/linux/cpumask.h:109:
error:
'CONFIG_NR_CPUS' undeclared here (not in a function)
powerpc mpc5200_defconfig:
http://www.tglx.de/autoqa-logs/000140-0008-0014.log
kernel/asm-offsets.c:22:
/home/tglx/work/kernel/autoqa/linux-2.6-tip/include/linux/mm.h:922:5:
warning: "CONFIG_NR_CPUS" is not defined
make[2]: *** [arch/powerpc/kernel/asm-offsets.s] Error 1 make[1]: *** [prepare0] Error 2
sparc32 defconfig:
http://www.tglx.de/autoqa-logs/000140-0008-0020.log
/home/tglx/work/kernel/autoqa/linux-2.6-tip/arch/sparc/kernel/asm-offsets.c:13:
/home/tglx/work/kernel/autoqa/linux-2.6-tip/include/linux/cpumask.h:109:
error: 'CONFIG_NR_CPUS' undeclared here (not in a function)
powerpc ppc64_defconfig:
http://www.tglx.de/autoqa-logs/000140-0008-0022.log
/home/tglx/work/kernel/autoqa/linux-2.6-tip/arch/powerpc/platforms/cell/spu_bas
e.c:117: error: implicit declaration of function '__cpus_setall'
make[3]: *** [arch/powerpc/platforms/cell/spu_base.o] Error 1
s390 defconfig:
http://www.tglx.de/autoqa-logs/000140-0008-0025.log
/home/tglx/work/kernel/autoqa/linux-2.6-tip/arch/s390/kernel/smp.c: In function '__smp_call_function_map':
/home/tglx/work/kernel/autoqa/linux-2.6-tip/arch/s390/kernel/smp.c:120:
error: request for member 'bits' in something not a structure or union
it seems to me that this commit is massively borked:
4a792c2: cpumask: make CONFIG_NR_CPUS always valid
but some of the others seems to be suspect as well - there's at least 3 different failure patterns.
Ingo
here's the full result:
--------------->
Run 140: 2008-10-23 15:52:45 .. 2008-10-23 16:19:09
Run 140: 11 of 19 operations OK
Run 140: 8 of 19 operations FAILED
http://www.tglx.de/autoqa-logs/000140-0008-0005.log
http://www.tglx.de/autoqa-logs/000140-0008-0006.log
http://www.tglx.de/autoqa-logs/000140-0008-0025.log
http://www.tglx.de/autoqa-logs/000140-0008-0013.log
http://www.tglx.de/autoqa-logs/000140-0008-0014.log
http://www.tglx.de/autoqa-logs/000140-0008-0015.log
http://www.tglx.de/autoqa-logs/000140-0008-0020.log
http://www.tglx.de/autoqa-logs/000140-0008-0022.log
Full results at: http://www.tglx.de/autoqa/index
Quoted 2 lines · On Friday 24 October 2008 01:20:25 Ingo Molnar wrote:
Thomas has started a -tip cross-build test, and there's massive cross-build failures as well due to the cpumask changes:
Yes. linux-next reported the same thing. I've backed out various arch changes for this reason.
Quoted 3 lines
it seems to me that this commit is massively borked:
4a792c2: cpumask: make
CONFIG_NR_CPUSalways valid
Yep. This is the big one I dropped. There are a few others; Mike is just porting the changes across to your tree now.
Cheers,
Rusty.
Quoted 9 lines · Rusty Russell
Quoted 2 lines · On Friday 24 October 2008 01:20:25 Ingo Molnar wrote:
Thomas has started a -tip cross-build test, and there's massive cross-build failures as well due to the cpumask changes:
Yes. linux-next reported the same thing. I've backed out various arch changes for this reason.
Quoted 2 lines
it seems to me that this commit is massively borked:
Quoted 7 lines
Quoted 1 line
4a792c2: cpumask: make
CONFIG_NR_CPUSalways validYep. This is the big one I dropped. There are a few others; Mike is just porting the changes across to your tree now.
Cheers,
Rusty.
Hi Ingo,
It would seem easier to back out previous patches and apply the replacements. Does this work for you?
Thanks,
Mike
Quoted 15 lines · Mike Travis
Quoted 14 lines · Rusty Russell
Quoted 2 lines · On Friday 24 October 2008 01:20:25 Ingo Molnar wrote:
Thomas has started a -tip cross-build test, and there's massive cross-build failures as well due to the cpumask changes:
Yes. linux-next reported the same thing. I've backed out various arch changes for this reason.
Quoted 3 lines
it seems to me that this commit is massively borked:
4a792c2: cpumask: make
CONFIG_NR_CPUSalways validYep. This is the big one I dropped. There are a few others; Mike is just porting the changes across to your tree now.
Quoted 7 lines
Quoted 2 lines
Cheers,
Rusty.Hi Ingo,
It would seem easier to back out previous patches and apply the replacements. Does this work for you?
no, it does not work fine. As i said, i reworked various small bits along the way of reviewing and integrating them, under the obvious assumption that you submitted the latest and greatest. I spent hours testing every single step as well. If you cannot get your workflow right then we cannot have this stuff in v2.6.28.
So ... please send append-only changes against tip/cpus4096-v2. We can squash/backmerge any bits to keep it all clean, but all changes have to be fully visible and fully reviewed from now on, because time is running short.
Ingo
Quoted 21 lines · On Friday 24 October 2008 03:09:59 Ingo Molnar wrote:
Quoted 20 lines · Mike Travis
Quoted 9 lines · Rusty Russell
Quoted 2 lines · On Friday 24 October 2008 01:20:25 Ingo Molnar wrote:
Thomas has started a -tip cross-build test, and there's massive cross-build failures as well due to the cpumask changes:
Yes. linux-next reported the same thing. I've backed out various arch changes for this reason.
Quoted 2 lines
it seems to me that this commit is massively borked:
Quoted 7 lines
Quoted 1 line
4a792c2: cpumask: make
CONFIG_NR_CPUSalways validYep. This is the big one I dropped. There are a few others; Mike is just porting the changes across to your tree now.
Cheers,
Rusty.Hi Ingo,
Quoted 8 lines
Quoted 2 lines
It would seem easier to back out previous patches and apply the replacements. Does this work for you?
no, it does not work fine. As i said, i reworked various small bits along the way of reviewing and integrating them, under the obvious assumption that you submitted the latest and greatest. I spent hours testing every single step as well. If you cannot get your workflow right then we cannot have this stuff in v2.6.28.
Indeed, though to be honest it's been easier to do the fixes in linux-next.
Here's the interdiff; it's not too bad (you already reverted the arch-destroying config changes).
Summary:
1) Alpha defines cpu_possible_map to cpu_present_map: this isn't possible under centralization, so just manipulate both together.
2) IA64, cris and m32r gratuitously re-declared cpu_possible_map; remove.
3) PowerPC Cell used __cpu_setall in a questionable way.
Arnd approved this version.
4) That also leads to weakening the BUG_ON() to WARN_ON_ONCE() for CONFIG_DEBUG_PER_CPU_MAPS; Arnd wants to be reminded, but only once :)
5) Revert most of S390 smp_call_function_mask->smp_call_function_many: it's safer to just do the minimal conversion.
6) Remove __deprecated from smp_call_function_mask: we're not pushing replacement patches yet so it's not appropriate, and it breaks sparc64 which compiles arch/sparc with -Werror.
7) Hack header to set CONFIG_NR_CPUS for UP on archs; safer than touching Kconfigs for them. Also update comment.
Thanks,
Rusty.
arch/alpha/include/asm/smp.h +0 -1
@@ -45,7 +45,6 @@ extern struct cpuinfo_alpha cpu_data[NR_CPUS];#define raw_smp_processor_id () (current_thread_info()->cpu)extern int smp_num_cpus; -#define cpu_possible_map cpu_present_mapextern void arch_send_call_function_single_ipi (int cpu);extern void arch_send_call_function_ipi (cpumask_t mask);
arch/alpha/kernel/process.c +2 -0
@@ -94,6 +94,7 @@ common_shutdown_1(void *generic_ptr) flags |=0x00040000UL ;/* "remain halted" */ *pflags = flags;cpu_clear (cpuid, cpu_present_map); +cpu_clear (cpuid, cpu_possible_map); halt(); }#endif
@@ -120,6 +121,7 @@ common_shutdown_1(void *generic_ptr)#ifdef CONFIG_SMP /* Wait for the secondaries to halt. */ cpu_clear (boot_cpuid, cpu_present_map); +cpu_clear (boot_cpuid, cpu_possible_map);while (cpus_weight (cpu_present_map))barrier ();#endif
arch/alpha/kernel/smp.c +2 -0
@@ -435,6 +435,7 @@ setup_smp(void) ((char *)cpubase + i*hwrpb->processor_size);if ((cpu->flags &0x1cc ) ==0x1cc ) { smp_num_probed++; +cpu_set (i, cpu_possible_map);cpu_set (i, cpu_present_map); cpu->pal_revision = boot_cpu_palrev; }
@@ -468,6 +469,7 @@ smp_prepare_cpus(unsigned int max_cpus)/* Nothing to do on a UP box, or when told not to. */ if (smp_num_probed ==1 || max_cpus ==0 ) { + cpu_possible_map =cpumask_of_cpu (boot_cpuid); cpu_present_map =cpumask_of_cpu (boot_cpuid);printk (KERN_INFO "SMP mode deactivated.\n" );return ;
arch/ia64/include/asm/smp.h +0 -1
@@ -57,7 +57,6 @@ extern struct smp_boot_data {extern char no_int_routing__devinitdata ; -extern cpumask_t cpu_online_map;extern cpumask_t cpu_core_map[NR_CPUS ];DECLARE_PER_CPU (cpumask_t, cpu_sibling_map);extern int smp_num_siblings;
arch/powerpc/platforms/cell/spu_base.c +3 -2
@@ -111,10 +111,11 @@ void spu_flush_all_slbs(struct mm_struct *mm)*/ static inline void mm_needs_global_tlbie (struct mm_struct *mm) { -int nr = (NR_CPUS >1 ) ?NR_CPUS :NR_CPUS +1 ; +cpumask_setall (&mm->cpu_vm_mask);/* Global TLBIE broadcast required with SPEs. */ -__cpus_setall (&mm->cpu_vm_mask, nr); +if (nr_cpu_ids ==1 ) +cpumask_set_cpu (1 , &mm->cpu_vm_mask); }void spu_associate_mm (struct spu *spu,struct mm_struct *mm)
arch/s390/kernel/smp.c +11 -14
@@ -103,7 +103,7 @@ static void do_call_function(void) }static void __smp_call_function_map (void (*func) (void *info),void *info, -int wait,struct cpumask *map) +int wait,cpumask_t map) {struct call_data_struct data;int cpu, local =0 ;
@@ -163,16 +163,14 @@ out:* You must not call this function with disabled interrupts, from a * hardware interrupt handler or from a bottom half. */ - -/* protected by call_lock */ -static DEFINE_BITMAP(smp_call_map, CONFIG_NR_CPUS); -int smp_call_function (void (*func) (void *info),void *info,int wait) { +cpumask_t map; +spin_lock (&call_lock); -cpumask_copy (to_cpumask (smp_call_map), cpu_online_mask); -cpumask_clear_cpu (smp_processor_id (),to_cpumask (smp_call_map)); -__smp_call_function_map (func, info, wait,to_cpumask (smp_call_map)); + map = cpu_online_map; +cpu_clear (smp_processor_id (), map); +__smp_call_function_map (func, info, wait, map);spin_unlock (&call_lock);return 0 ; }
@@ -194,8 +192,7 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info, int wait) {spin_lock (&call_lock); -cpumask_copy (to_cpumask (smp_call_map),cpumask_of (cpu)); -__smp_call_function_map (func, info, wait,cpumask_of (cpu)); +__smp_call_function_map (func, info, wait,cpumask_of_cpu (cpu));spin_unlock (&call_lock);return 0 ; }
@@ -216,13 +213,13 @@ EXPORT_SYMBOL(smp_call_function_single);* You must not call this function with disabled interrupts or from a * hardware interrupt handler or from a bottom half handler. */ -int smp_call_function_many (const struct cpumask *mask, +int smp_call_function_many (const struct cpumask *maskp,void (*func)(void *),void *info,bool wait) { +cpumask_t mask = *maskp;spin_lock (&call_lock); -cpumask_copy (to_cpumask (smp_call_map), cpu_online_mask); -cpumask_clear_cpu (smp_processor_id (),to_cpumask (smp_call_map)); -__smp_call_function_map (func, info, wait,to_cpumask (smp_call_map)); +cpu_clear (smp_processor_id (), mask); +__smp_call_function_map (func, info, wait, mask);spin_unlock (&call_lock);return 0 ; }
include/asm-cris/smp.h +0 -1
@@ -4,7 +4,6 @@#include <linux/cpumask.h> extern cpumask_t phys_cpu_present_map; -extern cpumask_t cpu_possible_map;#define raw_smp_processor_id () (current_thread_info()->cpu)
include/asm-m32r/smp.h +0 -2
@@ -63,8 +63,6 @@ extern volatile int cpu_2_physid[NR_CPUS];#define raw_smp_processor_id () (current_thread_info()->cpu)extern cpumask_t cpu_callout_map; -extern cpumask_t cpu_possible_map; -extern cpumask_t cpu_present_map;static __inline__int hard_smp_processor_id (void ) {
include/linux/cpumask.h +1 -2
@@ -254,8 +254,7 @@ extern cpumask_t _unused_cpumask_arg_;static inline unsigned int cpumask_check (unsigned int cpu) {#ifdef CONFIG_DEBUG_PER_CPU_MAPS -/* This breaks at runtime. */ -BUG_ON (cpu >= nr_cpumask_bits); +WARN_ON_ONCE (cpu >= nr_cpumask_bits);#endif /* CONFIG_DEBUG_PER_CPU_MAPS */ return cpu; }
include/linux/smp.h +1 -1
@@ -71,7 +71,7 @@ int smp_call_function_single(int cpuid, void (*func) (void *info), void *info,void __smp_call_function_single (int cpuid,struct call_single_data *data);/* Use smp_call_function_many, which takes a pointer to the mask. */ -static inline int __deprecated +static inline int smp_call_function_mask (cpumask_t mask,void (*func)(void *info),void *info,int wait) {
include/linux/threads.h +9 -8
@@ -8,17 +8,18 @@*/ /* -* Maximum supported processors that can run under SMP. This value is -* set via configure setting. The maximum is equal to the size of the -* bitmasks used on that platform, i.e. 32 or 64. Setting this smaller -* saves quite a bit of memory. +* Maximum supported processors that can run under SMP. Setting this smaller +* saves quite a bit of memory. Use nr_cpu_ids instead of this except for +* static bitmaps. */ -#ifdef CONFIG_SMP -#define NR_CPUS CONFIG_NR_CPUS -#else -#define NR_CPUS 1 +#ifndef CONFIG_NR_CPUS +/* FIXME: This should be fixed in the arch's Kconfig */ +#define CONFIG_NR_CPUS 1#endif +/* Places which use this should consider cpumask_var_t. */ +#define NR_CPUS CONFIG_NR_CPUS +#define MIN_THREADS_LEFT_FOR_ROOT 4/*
Quoted 7 lines · Rusty Russell
Quoted 2 lines · On Friday 24 October 2008 01:20:25 Ingo Molnar wrote:
Thomas has started a -tip cross-build test, and there's massive cross-build failures as well due to the cpumask changes:
Yes. linux-next reported the same thing. I've backed out various arch changes for this reason.
Quoted 6 lines
Quoted 3 lines
it seems to me that this commit is massively borked:
4a792c2: cpumask: make
CONFIG_NR_CPUSalways validYep. This is the big one I dropped. There are a few others; Mike is just porting the changes across to your tree now.
guys. I already spent hours integrating the "latest" of this stuff today and established baseline quality for it on x86. I've dropped 4a792c2 and pushed out a new tip/cpus4096-v2, please send append-only patches for the rest of the changes.
Ingo
Quoted 14 lines · Ingo Molnar
Quoted 11 lines · Rusty Russell
Quoted 2 lines · On Friday 24 October 2008 01:20:25 Ingo Molnar wrote:
Thomas has started a -tip cross-build test, and there's massive cross-build failures as well due to the cpumask changes:
Yes. linux-next reported the same thing. I've backed out various arch changes for this reason.
Quoted 3 lines
it seems to me that this commit is massively borked:
4a792c2: cpumask: make
CONFIG_NR_CPUSalways validYep. This is the big one I dropped. There are a few others; Mike is just porting the changes across to your tree now.
Quoted 6 lines
guys. I already spent hours integrating the "latest" of this stuff today and established baseline quality for it on x86. I've dropped 4a792c2 and pushed out a new tip/cpus4096-v2, please send append-only patches for the rest of the changes.
Ingo
Ok, no problem. I was integrating in the changes you already made so they would not be dropped. But I'll send "update" patches instead of "replacement" patches if you prefer.
Thanks,
Mike
Quoted 20 lines · Mike Travis
Quoted 19 lines · Ingo Molnar
Quoted 11 lines · Rusty Russell
Quoted 2 lines · On Friday 24 October 2008 01:20:25 Ingo Molnar wrote:
Thomas has started a -tip cross-build test, and there's massive cross-build failures as well due to the cpumask changes:
Yes. linux-next reported the same thing. I've backed out various arch changes for this reason.
Quoted 3 lines
it seems to me that this commit is massively borked:
4a792c2: cpumask: make
CONFIG_NR_CPUSalways validYep. This is the big one I dropped. There are a few others; Mike is just porting the changes across to your tree now.
guys. I already spent hours integrating the "latest" of this stuff today and established baseline quality for it on x86. I've dropped 4a792c2 and pushed out a new tip/cpus4096-v2, please send append-only patches for the rest of the changes.
Quoted 5 lines
Quoted 1 line
Ingo
Ok, no problem. I was integrating in the changes you already made so they would not be dropped. But I'll send "update" patches instead of "replacement" patches if you prefer.
how big are the deltas? You might send a single interdiff - it's supposed to be all small, right?
Ingo
Quoted 22 lines · Ingo Molnar
Quoted 20 lines · Mike Travis
Quoted 19 lines · Ingo Molnar
Quoted 11 lines · Rusty Russell
Quoted 2 lines · On Friday 24 October 2008 01:20:25 Ingo Molnar wrote:
Thomas has started a -tip cross-build test, and there's massive cross-build failures as well due to the cpumask changes:
Yes. linux-next reported the same thing. I've backed out various arch changes for this reason.
Quoted 3 lines
it seems to me that this commit is massively borked:
4a792c2: cpumask: make
CONFIG_NR_CPUSalways validYep. This is the big one I dropped. There are a few others; Mike is just porting the changes across to your tree now.
guys. I already spent hours integrating the "latest" of this stuff today and established baseline quality for it on x86. I've dropped 4a792c2 and pushed out a new tip/cpus4096-v2, please send append-only patches for the rest of the changes.
Ingo
Quoted 8 lines
Quoted 3 lines
Ok, no problem. I was integrating in the changes you already made so they would not be dropped. But I'll send "update" patches instead of "replacement" patches if you prefer.
how big are the deltas? You might send a single interdiff - it's supposed to be all small, right?
Ingo
It's pretty trivial, mostly removing things. The big problem is Rusty based his on Linus' tree (and he's offline now), so I need to apply his patches to that tree and then generate "diff" patches for your tree.
Btw, I'm still having trouble building a "baseline" config using the cpus4096-v2 branch that actually boots. (UP boots ok.) Is this the correct .git/config:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "linus"]
url = git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
fetch = +refs/heads/*:refs/remotes/linus/*
[remote "tip"]
url = git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git
fetch = +refs/heads/*:refs/remotes/tip/*
[branch "tip-latest"]
remote = tip
merge = refs/heads/master
[branch "cpus4096-v2"]
remote = tip
merge = refs/heads/cpus4096-v2
It won't let me do a:
mkdir linux-2.6.tip
cd linux-2.6.tip
git-init-db
git-remote add linus git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
git-remote add tip git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git
git-remote update
git-checkout -b cpus4096-v2 tip/cpus4096-v2
git checkout: updating paths is incompatible with switching branches/forcing Did you intend to checkout 'tip/cpus4906-v2' which can not be resolved as commit?
or:
git-checkout tip/cpus4906-v2
error: pathspec 'tip/cpus4906-v2' did not match any file(s) known to git. Did you forget to 'git add'?
Thanks,
Mike
Quoted 3 lines · Mike Travis
git-checkout -b cpus4096-v2 tip/cpus4096-v2
git checkout: updating paths is incompatible with switching branches/forcing Did you intend to checkout 'tip/cpus4906-v2' which can not be resolved as commit?
see the typo in the error message?
Quoted 6 lines
or:
git-checkout tip/cpus4906-v2
error: pathspec 'tip/cpus4906-v2' did not match any file(s) known to git. Did you forget to 'git add'?
the 4906/4096 typo in shown in this error message as well.
Ingo
Quoted 10 lines · Ingo Molnar
Quoted 3 lines · Mike Travis
git-checkout -b cpus4096-v2 tip/cpus4096-v2
git checkout: updating paths is incompatible with switching branches/forcing Did you intend to checkout 'tip/cpus4906-v2' which can not be resolved as commit?see the typo in the error message?
Quoted 2 lines
or:
Quoted 7 lines
Quoted 3 lines
git-checkout tip/cpus4906-v2
error: pathspec 'tip/cpus4906-v2' did not match any file(s) known to git. Did you forget to 'git add'?the 4906/4096 typo in shown in this error message as well.
Ingo
Sorry, that was a cut and paste error in this example. I've tried both these .git/config's and both hang during bootup:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "linus"]
url = git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
fetch = +refs/heads/*:refs/remotes/linus/*
[remote "tip"]
url = git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git
fetch = +refs/heads/*:refs/remotes/tip/*
[branch "cpus4096-v2"]
remote = tip
merge = refs/heads/cpus4096-v2
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "linus"]
url = git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
fetch = +refs/heads/*:refs/remotes/linus/*
[remote "tip"]
url = git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git
fetch = +refs/heads/*:refs/remotes/tip/*
[branch "tip-latest"]
remote = tip
merge = refs/heads/master
[branch "cpus4096-v2"]
remote = tip
merge = refs/heads/cpus4096-v2
PATCH 1/1 : cpumask: fix compiler errors/warnings
In reply to Ingo MolnarFrom: Rusty Russel <[email protected]>
Quoted 14 lines · Ingo Molnar
Quoted 11 lines · Rusty Russell
Quoted 2 lines · On Friday 24 October 2008 01:20:25 Ingo Molnar wrote:
Thomas has started a -tip cross-build test, and there's massive cross-build failures as well due to the cpumask changes:
Yes. linux-next reported the same thing. I've backed out various arch changes for this reason.
Quoted 3 lines
it seems to me that this commit is massively borked:
4a792c2: cpumask: make
CONFIG_NR_CPUSalways validYep. This is the big one I dropped. There are a few others; Mike is just porting the changes across to your tree now.
Quoted 6 lines
guys. I already spent hours integrating the "latest" of this stuff today and established baseline quality for it on x86. I've dropped 4a792c2 and pushed out a new tip/cpus4096-v2, please send append-only patches for the rest of the changes.
Ingo
Here are the only changes I could find from Rusty's last patches that apply to tip/cpus4096-v2.
* Fix NR_CPUS reference in arch/powerpc/platforms/cell/spu_base.c
* modify arch/x86/Kconfig so CONFIG_NR_CPUS is always defined. Also it does not prompt if MAXSMP is set.
* change include/linux/threads.h so CONFIG_NR_CPUS is defined for those arch's that do not define it.
---
Note I haven't been able test anything on this branch, patches or not. (Everything that has SMP set hangs during startup. I've tried a number of approaches to creating a source tree but all fail.)
--- arch/powerpc/platforms/cell/spu_base.c | 9 ++++++--- arch/x86/Kconfig | 2 +- include/linux/threads.h | 16 ++++++++-------- 3 files changed, 15 insertions(+), 12 deletions(-)
arch/powerpc/platforms/cell/spu_base.c +6 -3
@@ -111,10 +111,13 @@ void spu_flush_all_slbs(struct mm_struct*/ static inline void mm_needs_global_tlbie (struct mm_struct *mm) { -int nr = (NR_CPUS >1 ) ?NR_CPUS :NR_CPUS +1 ; -/* Global TLBIE broadcast required with SPEs. */ -__cpus_setall (&mm->cpu_vm_mask, nr); +if (NR_CPUS >1 ) +cpumask_setall (&mm->cpu_vm_mask); +else { +cpumask_set_cpu (0 , &mm->cpu_vm_mask); +cpumask_set_cpu (1 , &mm->cpu_vm_mask); + } }void spu_associate_mm (struct spu *spu,struct mm_struct *mm)
arch/x86/Kconfig +1 -1
@@ -585,9 +585,9 @@ config MAXSMP If unsure, say N. config NR_CPUS - depends on SMP int "Maximum number of CPUs" if SMP && !MAXSMP range 2 512 if SMP && !MAXSMP + default "1" if !SMP default "4096" if MAXSMP default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 default "8"
include/linux/threads.h +8 -8
@@ -8,17 +8,17 @@*/ /* -* Maximum supported processors that can run under SMP. This value is -* set via configure setting. The maximum is equal to the size of the -* bitmasks used on that platform, i.e. 32 or 64. Setting this smaller -* saves quite a bit of memory. +* Maximum supported processors. Setting this smaller saves quite a +* bit of memory. Use nr_cpu_ids instead of this except for static bitmaps. */ -#ifdef CONFIG_SMP -#define NR_CPUS CONFIG_NR_CPUS -#else -#define NR_CPUS 1 +#ifndef CONFIG_NR_CPUS +/* FIXME: This should be fixed in the arch's Kconfig */ +#define CONFIG_NR_CPUS 1#endif +/* Places which use this should consider cpumask_var_t. */ +#define NR_CPUS CONFIG_NR_CPUS +#define MIN_THREADS_LEFT_FOR_ROOT 4/*
Quoted 3 lines · Ingo Molnar
ok, the new cpumask code blew up in -tip testing, with various sorts of slab corruptions during scheduler init:
...
Curious thing happens here. I created the tree as you suggested (branch tip/cpus4096-v2) and copied in your .config file. Running it through "silentoldconfig" (choosing only the defaults), I get the following changes. This makes me suspect that I'm not testing the same thing as you are...? Perhaps my git setup was not correct?
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
+ git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git
+ branch tip/cpus4096-v2
-CONFIG_BOOTPARAM_SUPPORT_NOT_WANTED=y -CONFIG_BROKEN_BOOT_ALLOWED4=y -CONFIG_BROKEN_BOOT_ALLOWED3=y
-# CONFIG_BROKEN_BOOT_ALLOWED2 is not set -CONFIG_BROKEN_BOOT_EUROPE=y -CONFIG_BROKEN_BOOT_TITAN=y -CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION="-ingo-config-test-1023-1"
-# CONFIG_SMP_SUPPORT is not set
+CONFIG_SMP=y
-# CONFIG_UP_WANTED_1 is not set
-CONFIG_SMP=y
-# CONFIG_X86_PTRACE_BTS is not set -CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
-# CONFIG_DIRECT_GBPAGES is not set -CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 -CONFIG_CC_STACKPROTECTOR_ALL=y -CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CMDLINE_OVERRIDE is not set
+# CONFIG_NET_9P is not set
+# CONFIG_MTD is not set
+# CONFIG_IDE is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_MVSAS is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_I2O_CONFIG is not set
-CONFIG_VORTEX=y
+# CONFIG_MISDN is not set
+# CONFIG_PHONE_IXJ is not set
+# CONFIG_I2C_NFORCE2_S4985 is not set
+# CONFIG_EUROTECH_WDT is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_VIDEO_CX88 is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_VGA16 is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FRAMEBUFFER_CONSOLE is not set
+# CONFIG_USB_GADGET is not set
+# CONFIG_STAGING is not set
+# CONFIG_ECRYPT_FS is not set
+# CONFIG_ROOT_NFS is not set -CONFIG_ALLOW_WARNINGS=y
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_INFO is not set -CONFIG_DEBUG_NOTIFIERS=y
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set -CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FTRACE=y
-
-#
-# Tracers
-#
-CONFIG_FUNCTION_TRACER=y
+CONFIG_FTRACE=y
+# CONFIG_KGDB_TESTS_ON_BOOT is not set
+# CONFIG_DIRECT_GBPAGES is not set
+# CONFIG_SECURITY_ROOTPLUG is not set
+# CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT is not set +# CONFIG_SECURITY_SMACK is not set -CONFIG_FORCE_SUCCESSFUL_BUILD=y -CONFIG_FORCE_MINIMAL_CONFIG=y -CONFIG_FORCE_MINIMAL_CONFIG_64=y -CONFIG_FORCE_MINIMAL_CONFIG_PHYS=y
Quoted 10 lines
i suspect it's due to:
01b8bd9: sched: cpumask: get rid of boutique
sched.callocations, usecpumask_vanote,
CONFIG_MAXSMPis set in the .config, so this is with the dynamiccpumask_t.Ingo
Quoted 11 lines · Mike Travis
Quoted 3 lines · Ingo Molnar
ok, the new cpumask code blew up in -tip testing, with various sorts of slab corruptions during scheduler init:
...
Curious thing happens here. I created the tree as you suggested (branch tip/cpus4096-v2) and copied in your .config file. Running it through "silentoldconfig" (choosing only the defaults), I get the following changes. This makes me suspect that I'm not testing the same thing as you are...? Perhaps my git setup was not correct?
no - i have some extras that forces on SMP for example to make it more likely to trigger in random tests (it's far more interesting from a QA point of view than UP).
so as long as you select SMP you should get the same config. Lemme do a .config you can plug in.
Ingo