lkml.org 
[lkml]   [2008]   [Dec]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [BUG] next-20081216 - WARNING: at kernel/smp.c:333 smp_call_function_mask
    * Ingo Molnar <mingo@elte.hu> [2008-12-27 12:24:50]:

    >
    > * Kamalesh Babulal <kamalesh@linux.vnet.ibm.com> wrote:
    >
    > > * Ingo Molnar <mingo@elte.hu> [2008-12-27 09:39:36]:
    > >
    > > >
    > > > * Ingo Molnar <mingo@elte.hu> wrote:
    > > >
    > > > > * Yinghai Lu <yinghai@kernel.org> wrote:
    > > > >
    > > > > > +extern int arch_init_chip_data(struct irq_desc *desc, int cpu);
    > > > >
    > > > > when you change a function declaration's return type, you _must_ double
    > > > > check whether you properly updated all instances of that function. In
    > > > > this case you forgot about the io_apic.c instance.
    > > >
    > > > the corrected patch is below.
    > > >
    > > > Ingo
    > > >
    > >
    > > > --------------->
    > > > From d353c528bbb29be434f7688cba9b59781e9151e3 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 | 6 ++++--
    > > > include/linux/irq.h | 6 +++---
    > > > init/main.c | 7 ++++---
    > > > kernel/irq/handle.c | 7 ++++---
    > > > 4 files changed, 15 insertions(+), 11 deletions(-)
    > > >
    > > > diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c
    > > > index 2fe543f..e4d4d19 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;
    > > > }
    > > >
    > > > #ifdef CONFIG_SPARSE_IRQ
    > > > @@ -212,7 +214,7 @@ static struct irq_cfg *get_one_free_irq_cfg(int cpu)
    > > > return cfg;
    > > > }
    > > >
    > > > -void arch_init_chip_data(struct irq_desc *desc, int cpu)
    > > > +int arch_init_chip_data(struct irq_desc *desc, int cpu)
    > > > {
    > > > struct irq_cfg *cfg;
    > >
    > > the return statement is missing in the patch.
    >
    > 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().

    > --------------->
    > From 03f20b9c3b659c191684cb93de66a20386711df4 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;
    > }
    >
    > #ifdef CONFIG_SPARSE_IRQ
    > @@ -212,7 +214,7 @@ static struct irq_cfg *get_one_free_irq_cfg(int cpu)
    > return cfg;
    > }
    >
    > -void arch_init_chip_data(struct irq_desc *desc, int cpu)
    > +int arch_init_chip_data(struct irq_desc *desc, int cpu)
    > {
    > struct irq_cfg *cfg;
    >
    > @@ -224,6 +226,8 @@ void arch_init_chip_data(struct irq_desc *desc, int cpu)
    > BUG_ON(1);
    > }
    > }
    > +
    > + return 0;
    > }
    >
    > #ifdef CONFIG_NUMA_MIGRATE_IRQ_DESC
    > diff --git a/include/linux/irq.h b/include/linux/irq.h
    > index 69da275..0e40af4 100644
    > --- a/include/linux/irq.h
    > +++ b/include/linux/irq.h
    > @@ -193,9 +193,9 @@ struct irq_desc {
    > const char *name;
    > } ____cacheline_internodealigned_in_smp;
    >
    > -extern void early_irq_init(void);
    > -extern void arch_early_irq_init(void);
    > -extern void arch_init_chip_data(struct irq_desc *desc, int cpu);
    > +extern int early_irq_init(void);
    > +extern int arch_early_irq_init(void);
    > +extern int arch_init_chip_data(struct irq_desc *desc, int cpu);
    > extern void arch_init_copy_chip_data(struct irq_desc *old_desc,
    > struct irq_desc *desc, int cpu);
    > extern void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc);
    > diff --git a/init/main.c b/init/main.c
    > index c1f999a..b541c9a 100644
    > --- a/init/main.c
    > +++ b/init/main.c
    > @@ -539,13 +539,14 @@ void __init __weak thread_info_cache_init(void)
    > {
    > }
    >
    > -void __init __weak arch_early_irq_init(void)
    > +int __init __weak arch_early_irq_init(void)
    > {
    > + return 0;
    > }
    >
    > -void __init __weak early_irq_init(void)
    > +int __init __weak early_irq_init(void)
    > {
    > - arch_early_irq_init();
    > + return 0;
    > }
    >
    > asmlinkage void __init start_kernel(void)
    > diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
    > index 893da67..0bef3ec 100644
    > --- a/kernel/irq/handle.c
    > +++ b/kernel/irq/handle.c
    > @@ -86,8 +86,9 @@ void init_kstat_irqs(struct irq_desc *desc, int cpu, int nr)
    > desc->kstat_irqs = (unsigned int *)ptr;
    > }
    >
    > -void __attribute__((weak)) arch_init_chip_data(struct irq_desc *desc, int cpu)
    > +int __weak arch_init_chip_data(struct irq_desc *desc, int cpu)
    > {
    > + return 0;
    > }
    >
    > static void init_one_irq_desc(int irq, struct irq_desc *desc, int cpu)
    > @@ -132,7 +133,7 @@ static struct irq_desc irq_desc_legacy[NR_IRQS_LEGACY] __cacheline_aligned_in_sm
    > /* FIXME: use bootmem alloc ...*/
    > static unsigned int kstat_irqs_legacy[NR_IRQS_LEGACY][NR_CPUS];
    >
    > -void __init early_irq_init(void)
    > +int __init early_irq_init(void)
    > {
    > struct irq_desc *desc;
    > int legacy_count;
    > @@ -151,7 +152,7 @@ void __init early_irq_init(void)
    > for (i = legacy_count; i < NR_IRQS; i++)
    > irq_desc_ptrs[i] = NULL;
    >
    > - arch_early_irq_init();
    > + return arch_early_irq_init();
    > }
    >
    > struct irq_desc *irq_to_desc(unsigned int irq)
    > --
    > To unsubscribe from this list: send the line "unsubscribe linux-next" in
    > the body of a message to majordomo@vger.kernel.org
    > More majordomo info at http://vger.kernel.org/majordomo-info.html

    --
    Thanks & Regards,
    Kamalesh Babulal,
    Linux Technology Center,
    IBM, ISTL.


    \
     
     \ /
      Last update: 2008-12-27 12:59    [W:0.040 / U:0.304 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site