lkml.org 
[lkml]   [2006]   [Sep]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch] genirq/MSI: restore __do_IRQ() compat logic temporarily

    * Eric W. Biederman <ebiederm@xmission.com> wrote:

    > Ok. Looking at it I almost certain the problem is that
    > we lost the hunk of code removed in: 266f0566761cf88906d634727b3d9fc2556f5cbd
    > i386: Fix stack switching in do_IRQ
    >
    > - if (!irq_desc[irq].handle_irq) {
    > - __do_IRQ(irq, regs);
    > - goto out_exit;
    > - }
    >
    > The msi code does not yet set desc->handle_irq. So when we attempt to
    > call it we get a NULL pointer dereference.

    indeed ... We thought the MSI cleanup went all the way with the irqchips
    conversion, that's we suggested to Andrew to drop this chunk in -mm too.

    > Except for adding that hunk back in and breaking 4K stacks I don't
    > have an immediate fix.

    i've attached a bandaid patch for -mm below. Brandon, does this solve
    the crash you are seeing?

    > I do have a pending cleanup that should result in us setting
    > handle_irq in all cases. I will see if I can advance that shortly.

    yeah, that's the right solution.

    Ingo

    ------------------>
    Subject: [patch] genirq/MSI: restore __do_IRQ() compat logic temporarily
    From: Ingo Molnar <mingo@elte.hu>

    restore the __do_IRQ() compat logic temporarily, until the MSI
    genirq conversion has been completed.

    disable 4KSTACKS temporarily too.

    Signed-off-by: Ingo Molnar <mingo@elte.hu>

    ---
    arch/i386/Kconfig.debug | 4 ++++
    arch/i386/kernel/irq.c | 5 +++++
    2 files changed, 9 insertions(+)

    Index: linux-2.6.18-rc6-mm1/arch/i386/Kconfig.debug
    ===================================================================
    --- linux-2.6.18-rc6-mm1.orig/arch/i386/Kconfig.debug
    +++ linux-2.6.18-rc6-mm1/arch/i386/Kconfig.debug
    @@ -56,8 +56,12 @@ config DEBUG_RODATA
    portion of the kernel code won't be covered by a 2MB TLB anymore.
    If in doubt, say "N".

    +#
    +# FIXME: Disabled temporarily until the MSI genirq conversion is done!
    +#
    config 4KSTACKS
    bool "Use 4Kb + 4Kb for kernel stacks instead of 8Kb" if DEBUG_KERNEL
    + depends on n
    default y
    help
    If you say Y here the kernel will use a 4Kb stacksize for the
    Index: linux-2.6.18-rc6-mm1/arch/i386/kernel/irq.c
    ===================================================================
    --- linux-2.6.18-rc6-mm1.orig/arch/i386/kernel/irq.c
    +++ linux-2.6.18-rc6-mm1/arch/i386/kernel/irq.c
    @@ -83,6 +83,10 @@ fastcall unsigned int do_IRQ(struct pt_r
    }
    #endif

    + if (!irq_desc[irq].handle_irq) {
    + __do_IRQ(irq, regs);
    + goto out_exit;
    + }
    #ifdef CONFIG_4KSTACKS

    curctx = (union irq_ctx *) current_thread_info();
    @@ -123,6 +127,7 @@ fastcall unsigned int do_IRQ(struct pt_r
    #endif
    desc->handle_irq(irq, desc, regs);

    +out_exit:
    irq_exit();

    return 1;
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-09-12 19:19    [W:0.045 / U:0.292 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site