On Friday, September 09, 2011 10:27 PM, Dan Carpenter wrote: > On Fri, Sep 09, 2011 at 03:41:28PM -0700, H Hartley Sweeten wrote: >> I'm not really sure what the DEFINE_PER_CPU macro expands to so I'm not >> sure if the 'static' in front is actually getting used or if sparse is just >> confused. >> >> Is this an actual problem in the linux kernel or is sparse just getting >> tripped up by the DEFINE_PER_CPU macro? >> > > I don't have a kernel git archive handy, but probably sparse is > correct. Do a "make arch/x86/kernel/cpu/mcheck/mce_intel.i" and run > sparse on the .i file to find the line number that complains. Dan, The DEFINE_PER_CPU line in that file gets expanded from: static DEFINE_PER_CPU(mce_banks_t, mce_banks_owned); To (line breaks added for readability): static __attribute__((section(".discard"), unused)) char __pcpu_scope_mce_banks_owned; extern __attribute__((section(".discard"), unused)) char __pcpu_unique_mce_banks_owned; __attribute__((section(".discard"), unused)) char __pcpu_unique_mce_banks_owned; __attribute__((section(".data..percpu" ""))) __attribute__((weak)) __typeof__(mce_banks_t) mce_banks_owned; It looks like the static tag is getting correctly applied to the first variable, __pcpu_scope_mce_banks_owned. The second one, __pcpu_unique_mce_banks_owned, is getting tagged extern by the macro so the next __pcpu_unique_mce_banks_owned is ok. The last variable, mce_banks_owned, seems to be the problem. mce_banks_owned appears to be the only variable actually used in the file. I'm not sure what the other three are used for. I think the only way to fix this is by creating a new DEFINE_PER_CPU macro (DEFINE_PER_CPU_STATIC or DEFINE_STATIC_PER_CPU?) that automatically adds the static tags correctly. Regards, Hartley-- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html