2/7 Fix potential NULL pointer
PATCH 1/1 2/7 Fix potential NULL pointer
translation_table could be unintialised on machines other than NUMA-Q. You never see this, as the compiler happens to optimise it away, but it's still a Really Bad Idea (tm). Thanks to someone whose name I have unfortunately forgotten for pointing this out.
Has been tested in my tree for over two weeks on UP, SMP, and NUMA and compile tested against a variety of different configs.
arch/i386/kernel/mpparse.c +1 -1
@@ -110,7 +110,7 @@ void __init MP_processor_info (struct mpif (!(m->mpc_cpuflag &CPU_ENABLED ))return ; - apicid =mpc_apic_id (m, translation_table[mpc_record]->trans_quad); + apicid =mpc_apic_id (m, translation_table[mpc_record]);if (m->mpc_featureflag&(1 <<0 ))Dprintk (" Floating point unit present.\n" );
include/asm-i386/mach-bigsmp/mach_apic.h +2 -1
@@ -87,7 +87,8 @@ static inline int cpu_to_logical_apicid(return (int )cpu_2_logical_apicid[cpu]; } -static inline int mpc_apic_id (struct mpc_config_processor *m,int quad) +static inline int mpc_apic_id (struct mpc_config_processor *m, +struct mpc_config_translation *translation_record) { printk("Processor #%d %ld:%ld APIC version %d\n", m->mpc_apicid,
include/asm-i386/mach-default/mach_apic.h +2 -1
@@ -79,7 +79,8 @@ static inline unsigned long apicid_to_cpreturn (1ul << phys_apicid); } -static inline int mpc_apic_id (struct mpc_config_processor *m,int quad) +static inline int mpc_apic_id (struct mpc_config_processor *m, +struct mpc_config_translation *translation_record) { printk("Processor #%d %ld:%ld APIC version %d\n", m->mpc_apicid,
include/asm-i386/mach-numaq/mach_apic.h +3 -1
@@ -73,8 +73,10 @@ static inline unsigned long apicid_to_cpreturn ( (logical_apicid&0xf ) << (4 *apicid_to_node (logical_apicid)) ); } -static inline int mpc_apic_id (struct mpc_config_processor *m,int quad) +static inline int mpc_apic_id (struct mpc_config_processor *m, +struct mpc_config_translation *translation_record) { +int quad = translation_record->trans_quad;int logical_apicid =generate_logical_apicid (quad, m->mpc_apicid); printk("Processor #%d %ld:%ld APIC version %d (quad %d, apic %d)\n",
include/asm-i386/mach-summit/mach_apic.h +2 -1
@@ -90,7 +90,8 @@ static inline unsigned long apicid_to_cpreturn (1ul << apicid); } -static inline int mpc_apic_id (struct mpc_config_processor *m,int quad) +static inline int mpc_apic_id (struct mpc_config_processor *m, +struct mpc_config_translation *translation_record) { printk("Processor #%d %ld:%ld APIC version %d\n", m->mpc_apicid,