]> git.hungrycats.org Git - linux/commitdiff
[PATCH] Fix potential NULL pointer
authorMartin J. Bligh <mbligh@aracnet.com>
Fri, 28 Feb 2003 07:02:21 +0000 (23:02 -0800)
committerLinus Torvalds <torvalds@home.transmeta.com>
Fri, 28 Feb 2003 07:02:21 +0000 (23:02 -0800)
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
include/asm-i386/mach-bigsmp/mach_apic.h
include/asm-i386/mach-default/mach_apic.h
include/asm-i386/mach-numaq/mach_apic.h
include/asm-i386/mach-summit/mach_apic.h

index c7164ac8d3749a8c4735704c176ca1d3fa094288..33a11551c5815e24425cf0a62024294a99387c32 100644 (file)
@@ -110,7 +110,7 @@ void __init MP_processor_info (struct mpc_config_processor *m)
        if (!(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");
index 1572455d35f7f72e1338c9244acf7aa1fb48ef85..d5f799de14ef461dffb02515cd82a847d1fda120 100644 (file)
@@ -87,7 +87,8 @@ static inline int cpu_to_logical_apicid(int cpu)
        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,
index 0f2c11b413d5241851e8ab23850aa7c3f70fc60f..eb0b126c5b3c5ba1470ddd089f72ddd23fcdad76 100644 (file)
@@ -79,7 +79,8 @@ static inline unsigned long apicid_to_cpu_present(int phys_apicid)
        return (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,
index 84b36fe4ee7c1ffaa3f885841de45d5e71436033..bb63a26b3eb220c6678d8e7fa76a71486f4ca0d6 100644 (file)
@@ -73,8 +73,10 @@ static inline unsigned long apicid_to_cpu_present(int logical_apicid)
        return ( (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",
index ac24bc91723de27fa8125f6fe3fd25198ce6edd6..6ac0d6b9e861b29e55a36ee9409553f5591c751d 100644 (file)
@@ -90,7 +90,8 @@ static inline unsigned long apicid_to_cpu_present(int apicid)
                return (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,