Re: [BUG] next-20081216 - WARNING: at kernel/smp.c:333 smp_call_function_mask

Yinghai Lu
2008-12-27T21:10:19Z

On Sat, Dec 27, 2008 at 7:29 AM, Kamalesh Babulal
<kamalesh@linux.vnet.ibm.com> wrote:
> * Ingo Molnar <mingo@elte.hu> [2008-12-27 13:26:32]:
>
>>
>> * Kamalesh Babulal <kamalesh@linux.vnet.ibm.com> wrote:
>>
>> > > yes, indeed - updated patch below.
>> > >
>> > > Ingo
>> > >
>> >
>> > Hi Ingo,
>> >
>> > Sorry, for not mentioning that the previous kernel trace, was
>> > after adding the return statement to the arch_init_chip_data().
>>
>> ah, i missed that detail. There was a stupid typo in one of the conflict
>> resolutions i had to do - could you check the updated patch below?
>>
>> Thanks,
>>
>> Ingo
>>
>
>
> Hi Ingo,
>
> kernel still crashes, with the updated patch.
>
>
>> ----------->
>> From 13a0c3c269b223f60abfac8a9811d77111a8b4ba Mon Sep 17 00:00:00 2001
>> From: Yinghai Lu <yinghai@kernel.org>
>> Date: Fri, 26 Dec 2008 02:05:47 -0800
>> Subject: [PATCH] sparseirq: work around compiler optimizing away __weak functions
>>
>> Impact: fix panic on null pointer with sparseirq
>>
>> Some GCC versions seem to inline the weak global function,
>> when that function is empty.
>>
>> Work it around, by making the functions return a (dummy) integer.
>>
>> Signed-off-by: Yinghai <yinghai@kernel.org>
>> Signed-off-by: Ingo Molnar <mingo@elte.hu>
>> ---
>> arch/x86/kernel/io_apic.c | 8 ++++++--
>> include/linux/irq.h | 6 +++---
>> init/main.c | 7 ++++---
>> kernel/irq/handle.c | 7 ++++---
>> 4 files changed, 17 insertions(+), 11 deletions(-)
>>
>> diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c
>> index 2fe543f..9760393 100644
>> --- a/arch/x86/kernel/io_apic.c
>> +++ b/arch/x86/kernel/io_apic.c
>> @@ -170,7 +170,7 @@ static struct irq_cfg irq_cfgx[NR_IRQS] = {
>> [15] = { .domain = CPU_MASK_ALL, .vector = IRQ15_VECTOR, },
>> };
>>
>> -void __init arch_early_irq_init(void)
>> +int __init arch_early_irq_init(void)
>> {
>> struct irq_cfg *cfg;
>> struct irq_desc *desc;
>> @@ -184,6 +184,8 @@ void __init arch_early_irq_init(void)
>> desc = irq_to_desc(i);
>> desc->chip_data = &cfg[i];
>> }
>> +
>> + return 0;

can you try current tip/master?

current there are several blank __weak, and __weak + return 0..in the
whole tree.

it seems there three solution:
1. use printk?
2. not use __weak with blank function any more, and use #ifdef and
inline functions instead
3. blacklist that gcc 4.1.1 complier..

YH