lkml.org 
[lkml]   [2008]   [Aug]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: 2.6.26.3-rt3
    On Fri, Aug 22, 2008 at 11:39 PM, Steven Rostedt <rostedt@goodmis.org> wrote:
    > We are pleased to announce the 2.6.26.3-rt3 tree, which can be
    > downloaded from the location:
    >
    > http://rt.et.redhat.com/download/
    >
    > Information on the RT patch can be found at:
    >
    > http://rt.wiki.kernel.org/index.php/Main_Page
    >
    > Changes since 2.6.26-rt2
    >
    > - patch merge fix (Steven Rostedt)
    >
    > - fix net core sock locking (Chirag Jog)

    Actually Peter Zijlstra. (Chirag was just first in the email thread)

    >
    > - namespace lock fixes (Chirag Jog)
    >
    > - hrtimers stuck in waitqueue fix (Thomas Gleixner)
    >
    >
    > to build a 2.6.26.3-rt3 tree, the following patches should be applied:
    >
    > http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.bz2
    > http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.26.3.bz2
    > http://rt.et.redhat.com/download/patch-2.6.26.3-rt3.bz2
    >
    >
    >
    > And like always, my RT version of Matt Mackall's ketchup will get this
    > for you nicely:
    >
    > http://people.redhat.com/srostedt/rt/tools/ketchup-0.9.8-rt3
    >
    >
    > The broken out patches are also available.
    >

    One more patch that was missed - it was discussed here
    http://marc.info/?l=linux-rt-users&m=121846031913931&w=2

    I am resending it, please consider for -rt4.
    Without it I continue to get the following type of message.

    BUG: using smp_processor_id() in preemptible [00000000] code: firefox-bin/3912
    caller is __qdisc_run+0x160/0x1e9
    Pid: 3912, comm: firefox-bin Tainted: G W 2.6.26.3-rt2 #6

    Call Trace:
    [<ffffffff8033cc96>] debug_smp_processor_id+0xde/0xec
    [<ffffffff803f9a87>] __qdisc_run+0x160/0x1e9
    [<ffffffff803e8777>] dev_queue_xmit+0x1b3/0x2ee
    [<ffffffff8040df1e>] ip_finish_output+0x29b/0x2e4
    [<ffffffff8040e04a>] ip_output+0xe3/0xec
    [<ffffffff8040cf9c>] ip_local_out+0x25/0x29
    [<ffffffff8040d80e>] ip_queue_xmit+0x2ce/0x35e
    [<ffffffff804215a6>] ? __tcp_push_pending_frames+0x74a/0x860
    [<ffffffff804215a6>] ? __tcp_push_pending_frames+0x74a/0x860
    [<ffffffff8027f844>] ? trace_preempt_on+0x1f/0xf9
    [<ffffffff8041e9de>] ? tcp_transmit_skb+0x72a/0x78f
    [<ffffffff804215a6>] ? __tcp_push_pending_frames+0x74a/0x860
    [<ffffffff8041ea04>] tcp_transmit_skb+0x750/0x78f
    [<ffffffff802ac050>] ? kmem_cache_alloc_node+0x11e/0x145
    [<ffffffff804215a6>] __tcp_push_pending_frames+0x74a/0x860
    [<ffffffff803e2c55>] ? __alloc_skb+0x70/0x136
    [<ffffffff804158f1>] tcp_sendmsg+0x941/0xa5f
    [<ffffffff802c01f3>] ? __pollwait+0x0/0xe5
    [<ffffffff803dbd3e>] sock_sendmsg+0x102/0x125
    [<ffffffff8024c3b3>] ? autoremove_wake_function+0x0/0x3d
    [<ffffffff80281a97>] ? tracing_hist_preempt_stop+0x2cb/0x2f5
    [<ffffffff80272624>] ? __rcu_read_unlock+0x93/0xa7
    [<ffffffff802b250e>] ? fget_light+0x97/0xad
    [<ffffffff803dc8ee>] sys_sendto+0xe4/0x10c
    [<ffffffff8024c3b3>] ? autoremove_wake_function+0x0/0x3d
    [<ffffffff8021251c>] ? native_sched_clock+0x2a/0x72
    [<ffffffff803dc92a>] sys_send+0x14/0x16
    [<ffffffff803f7dbb>] compat_sys_socketcall+0xd2/0x16c
    [<ffffffff80224a17>] sysenter_do_call+0x8c/0x149
    [<ffffffff8045f4ec>] ? trace_hardirqs_on_thunk+0x3a/0x3c

    ---------------------------
    | preempt count: 00000001 ]
    | 1-level deep critical section nesting:
    ----------------------------------------
    .. [<ffffffff8033cc43>] .... debug_smp_processor_id+0x8b/0xec
    .....[<ffffffff803f9a87>] .. ( <= __qdisc_run+0x160/0x1e9)

    BUG: firefox-bin:3912 task might have lost a preemption check!
    Pid: 3912, comm: firefox-bin Tainted: G W 2.6.26.3-rt2 #6

    Call Trace:
    [<ffffffff80462e79>] ? sub_preempt_count+0xd1/0xe6
    [<ffffffff80233bb1>] preempt_enable_no_resched+0x5c/0x5e
    [<ffffffff8033cc9b>] debug_smp_processor_id+0xe3/0xec
    [<ffffffff803f9a87>] __qdisc_run+0x160/0x1e9
    [<ffffffff803e8777>] dev_queue_xmit+0x1b3/0x2ee
    [<ffffffff8040df1e>] ip_finish_output+0x29b/0x2e4
    [<ffffffff8040e04a>] ip_output+0xe3/0xec
    [<ffffffff8040cf9c>] ip_local_out+0x25/0x29
    [<ffffffff8040d80e>] ip_queue_xmit+0x2ce/0x35e
    [<ffffffff804215a6>] ? __tcp_push_pending_frames+0x74a/0x860
    [<ffffffff804215a6>] ? __tcp_push_pending_frames+0x74a/0x860
    [<ffffffff8027f844>] ? trace_preempt_on+0x1f/0xf9
    [<ffffffff8041e9de>] ? tcp_transmit_skb+0x72a/0x78f
    [<ffffffff804215a6>] ? __tcp_push_pending_frames+0x74a/0x860
    [<ffffffff8041ea04>] tcp_transmit_skb+0x750/0x78f
    [<ffffffff802ac050>] ? kmem_cache_alloc_node+0x11e/0x145
    [<ffffffff804215a6>] __tcp_push_pending_frames+0x74a/0x860
    [<ffffffff803e2c55>] ? __alloc_skb+0x70/0x136
    [<ffffffff804158f1>] tcp_sendmsg+0x941/0xa5f
    [<ffffffff802c01f3>] ? __pollwait+0x0/0xe5
    [<ffffffff803dbd3e>] sock_sendmsg+0x102/0x125
    [<ffffffff8024c3b3>] ? autoremove_wake_function+0x0/0x3d
    [<ffffffff80281a97>] ? tracing_hist_preempt_stop+0x2cb/0x2f5
    [<ffffffff80272624>] ? __rcu_read_unlock+0x93/0xa7
    [<ffffffff802b250e>] ? fget_light+0x97/0xad
    [<ffffffff803dc8ee>] sys_sendto+0xe4/0x10c
    [<ffffffff8024c3b3>] ? autoremove_wake_function+0x0/0x3d
    [<ffffffff8021251c>] ? native_sched_clock+0x2a/0x72
    [<ffffffff803dc92a>] sys_send+0x14/0x16
    [<ffffffff803f7dbb>] compat_sys_socketcall+0xd2/0x16c
    [<ffffffff80224a17>] sysenter_do_call+0x8c/0x149
    [<ffffffff8045f4ec>] ? trace_hardirqs_on_thunk+0x3a/0x3c

    ---------------------------
    | preempt count: 00000000 ]
    | 0-level deep critical section nesting:
    ----------------------------------------


    Thank You.
    Subject: fix for BUG: using smp_processor_id() in preemptible code

    Fixes using smp_processor_id() in preemptible code as seen when __qdisc_run
    calls qdisc_restart which calls handle_dev_cpu_collision

    This is fixed by disabling irqs (and preemption) around cpu_collision++
    in handle_dev_cpu_collision

    Signed-off-by: John Kacur <jkacur at gmail dot com>

    Index: linux-2.6.26.1-rt1.jk/net/sched/sch_generic.c
    ===================================================================
    --- linux-2.6.26.1-rt1.jk.orig/net/sched/sch_generic.c
    +++ linux-2.6.26.1-rt1.jk/net/sched/sch_generic.c
    @@ -94,6 +94,7 @@ static inline int handle_dev_cpu_collisi
    struct Qdisc *q)
    {
    int ret;
    + unsigned long flags;

    if (unlikely(dev->xmit_lock_owner == (void *)current)) {
    /*
    @@ -112,7 +113,9 @@ static inline int handle_dev_cpu_collisi
    * Another cpu is holding lock, requeue & delay xmits for
    * some time.
    */
    + local_irq_save(flags);
    __get_cpu_var(netdev_rx_stat).cpu_collision++;
    + local_irq_restore(flags);
    ret = dev_requeue_skb(skb, dev, q);
    }
    \
     
     \ /
      Last update: 2008-08-23 01:43    [W:0.045 / U:3.972 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site