[lkml]   [2004]   [Oct]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    SubjectRe: [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U8
    Ingo Molnar wrote:
    > disable_irq() should work fine though. (it doesnt disable local
    > interrupts, it only disables that particular irq line.) So something
    > else disabled interrupts - ah, netconsole.c itself. Does the patch below
    > fix things up for you?
    > Ingo
    > [patch snipped]

    That patch was not enough. The BUGs were still showing up the same as
    I tried to debug it myself. I've found an interesting thing in
    kernel/printk.c:release_console_sem(). There is the following sequence:

    spin_lock_irqsave(&logbuf_lock, flags);
    /* ... some code ... */

    I know very little about locking, but I didn't like this two-phased
    unlock. So I replaced it with a single spin_unlock_irqrestore. Patch
    I'm almost certain that there is a reason for the two-phased unlocking
    and that this patch will break something, but so far it works for me.
    netconsole now works without complaining.

    diff -Nurp linux-2.6.9-rc4-mm1-RT-U8/kernel/printk.c linux-2.6.9-rc4-mm1-RT-U8-m/kernel/printk.c
    --- linux-2.6.9-rc4-mm1-RT-U8/kernel/printk.c 2004-10-20 22:20:55.000000000 +0200
    +++ linux-2.6.9-rc4-mm1-RT-U8-m/kernel/printk.c 2004-10-20 22:24:40.000000000 +0200
    @@ -646,9 +646,8 @@ void release_console_sem(void)
    _con_start = con_start;
    _log_end = log_end;
    con_start = log_end; /* Flush */
    - spin_unlock(&logbuf_lock);
    + spin_unlock_irqrestore(&logbuf_lock, flags);
    call_console_drivers(_con_start, _log_end);
    - local_irq_restore(flags);
    console_locked = 0;
    console_may_schedule = 0;
     \ /
      Last update: 2005-03-22 14:07    [W:0.021 / U:4.148 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site