lkml.org 
[lkml]   [2004]   [May]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    Subjectscheduler: IRQs disabled over context switches
    Hi,

    The 2.6.6 scheduler disables IRQs across context switches, which is
    bad news for IRQ latency on ARM - to the point where 16550A FIFO
    UARTs to overrun.

    I'm considering defining prepare_arch_switch & co as follows on ARM,
    so that we release IRQs over the call to context_switch().

    #define prepare_arch_switch(rq,next) \
    do { \
    spin_lock(&(next)->switch_lock); \
    spin_unlock_irq(&(rq)->lock); \
    } while (0)
    #define finish_arch_switch(rq,prev) \
    spin_unlock(&(prev)->switch_lock)
    #define task_running(rq,p) \
    ((rq)->curr == (p) || spin_is_locked(&(p)->switch_lock))

    The question is... why are we keeping IRQs disabled over context_switch()
    in the first case? Looking at the code, the only thing which is touched
    outside of the two tasks is rq->prev_mm. Since runqueues are CPU-
    specific and we're holding at least one spinlock, I think the above
    is preempt safe and SMP safe.

    However, I'd like to find out from someone who knows this code why
    IRQs are disabled by default here.

    --
    Russell King
    Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
    maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
    2.6 Serial core
    -
    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: 2005-03-22 14:03    [W:0.019 / U:21.700 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site