1. 21 4月, 2008 1 次提交
    • B
      [ROSE]: Fix soft lockup wrt. rose_node_list_lock · 047f7617
      Bernard Pidoux 提交于
      [ INFO: possible recursive locking detected ]
      2.6.25 #3
      ---------------------------------------------
      ax25ipd/3811 is trying to acquire lock:
        (rose_node_list_lock){-+..}, at: [<f8d31f1a>] rose_get_neigh+0x1a/0xa0 
      [rose]
      
      but task is already holding lock:
        (rose_node_list_lock){-+..}, at: [<f8d31fed>] 
      rose_route_frame+0x4d/0x620 [rose]
      
      other info that might help us debug this:
      6 locks held by ax25ipd/3811:
        #0:  (&tty->atomic_write_lock){--..}, at: [<c0259a1c>] 
      tty_write_lock+0x1c/0x50
        #1:  (rcu_read_lock){..--}, at: [<c02aea36>] net_rx_action+0x96/0x230
        #2:  (rcu_read_lock){..--}, at: [<c02ac5c0>] netif_receive_skb+0x100/0x2f0
        #3:  (rose_node_list_lock){-+..}, at: [<f8d31fed>] 
      rose_route_frame+0x4d/0x620 [rose]
        #4:  (rose_neigh_list_lock){-+..}, at: [<f8d31ff7>] 
      rose_route_frame+0x57/0x620 [rose]
        #5:  (rose_route_list_lock){-+..}, at: [<f8d32001>] 
      rose_route_frame+0x61/0x620 [rose]
      
      stack backtrace:
      Pid: 3811, comm: ax25ipd Not tainted 2.6.25 #3
        [<c0147e27>] print_deadlock_bug+0xc7/0xd0
        [<c0147eca>] check_deadlock+0x9a/0xb0
        [<c0149cd2>] validate_chain+0x1e2/0x310
        [<c0149b95>] ? validate_chain+0xa5/0x310
        [<c010a7d8>] ? native_sched_clock+0x88/0xc0
        [<c0149fa1>] __lock_acquire+0x1a1/0x750
        [<c014a5d1>] lock_acquire+0x81/0xa0
        [<f8d31f1a>] ? rose_get_neigh+0x1a/0xa0 [rose]
        [<c03201a3>] _spin_lock_bh+0x33/0x60
        [<f8d31f1a>] ? rose_get_neigh+0x1a/0xa0 [rose]
        [<f8d31f1a>] rose_get_neigh+0x1a/0xa0 [rose]
        [<f8d32404>] rose_route_frame+0x464/0x620 [rose]
        [<c031ffdd>] ? _read_unlock+0x1d/0x20
        [<f8d31fa0>] ? rose_route_frame+0x0/0x620 [rose]
        [<f8d1c396>] ax25_rx_iframe+0x66/0x3b0 [ax25]
        [<f8d1f42f>] ? ax25_start_t3timer+0x1f/0x40 [ax25]
        [<f8d1e65b>] ax25_std_frame_in+0x7fb/0x890 [ax25]
        [<c0320005>] ? _spin_unlock_bh+0x25/0x30
        [<f8d1bdf6>] ax25_kiss_rcv+0x2c6/0x800 [ax25]
        [<c02a4769>] ? sock_def_readable+0x59/0x80
        [<c014a8a7>] ? __lock_release+0x47/0x70
        [<c02a4769>] ? sock_def_readable+0x59/0x80
        [<c031ffdd>] ? _read_unlock+0x1d/0x20
        [<c02a4769>] ? sock_def_readable+0x59/0x80
        [<c02a4d3a>] ? sock_queue_rcv_skb+0x13a/0x1d0
        [<c02a4c45>] ? sock_queue_rcv_skb+0x45/0x1d0
        [<f8d1bb30>] ? ax25_kiss_rcv+0x0/0x800 [ax25]
        [<c02ac715>] netif_receive_skb+0x255/0x2f0
        [<c02ac5c0>] ? netif_receive_skb+0x100/0x2f0
        [<c02af05c>] process_backlog+0x7c/0xf0
        [<c02aeb0c>] net_rx_action+0x16c/0x230
        [<c02aea36>] ? net_rx_action+0x96/0x230
        [<c012bd53>] __do_softirq+0x93/0x120
        [<f8d2a68a>] ? mkiss_receive_buf+0x33a/0x3f0 [mkiss]
        [<c012be37>] do_softirq+0x57/0x60
        [<c012c265>] local_bh_enable_ip+0xa5/0xe0
        [<c0320005>] _spin_unlock_bh+0x25/0x30
        [<f8d2a68a>] mkiss_receive_buf+0x33a/0x3f0 [mkiss]
        [<c025ea37>] pty_write+0x47/0x60
        [<c025c620>] write_chan+0x1b0/0x220
        [<c0259a1c>] ? tty_write_lock+0x1c/0x50
        [<c011fec0>] ? default_wake_function+0x0/0x10
        [<c0259bea>] tty_write+0x12a/0x1c0
        [<c025c470>] ? write_chan+0x0/0x220
        [<c018bbc6>] vfs_write+0x96/0x130
        [<c0259ac0>] ? tty_write+0x0/0x1c0
        [<c018c24d>] sys_write+0x3d/0x70
        [<c0104d1e>] sysenter_past_esp+0x5f/0xa5
        =======================
      BUG: soft lockup - CPU#0 stuck for 61s! [ax25ipd:3811]
      
      Pid: 3811, comm: ax25ipd Not tainted (2.6.25 #3)
      EIP: 0060:[<c010a9db>] EFLAGS: 00000246 CPU: 0
      EIP is at native_read_tsc+0xb/0x20
      EAX: b404aa2c EBX: b404a9c9 ECX: 017f1000 EDX: 0000076b
      ESI: 00000001 EDI: 00000000 EBP: ecc83afc ESP: ecc83afc
        DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
      CR0: 8005003b CR2: b7f5f000 CR3: 2cd8e000 CR4: 000006f0
      DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
      DR6: ffff0ff0 DR7: 00000400
        [<c0204937>] delay_tsc+0x17/0x30
        [<c02048e9>] __delay+0x9/0x10
        [<c02127f6>] __spin_lock_debug+0x76/0xf0
        [<c0212618>] ? spin_bug+0x18/0x100
        [<c0147923>] ? __lock_contended+0xa3/0x110
        [<c0212998>] _raw_spin_lock+0x68/0x90
        [<c03201bf>] _spin_lock_bh+0x4f/0x60
        [<f8d31f1a>] ? rose_get_neigh+0x1a/0xa0 [rose]
        [<f8d31f1a>] rose_get_neigh+0x1a/0xa0 [rose]
        [<f8d32404>] rose_route_frame+0x464/0x620 [rose]
        [<c031ffdd>] ? _read_unlock+0x1d/0x20
        [<f8d31fa0>] ? rose_route_frame+0x0/0x620 [rose]
        [<f8d1c396>] ax25_rx_iframe+0x66/0x3b0 [ax25]
        [<f8d1f42f>] ? ax25_start_t3timer+0x1f/0x40 [ax25]
        [<f8d1e65b>] ax25_std_frame_in+0x7fb/0x890 [ax25]
        [<c0320005>] ? _spin_unlock_bh+0x25/0x30
        [<f8d1bdf6>] ax25_kiss_rcv+0x2c6/0x800 [ax25]
        [<c02a4769>] ? sock_def_readable+0x59/0x80
        [<c014a8a7>] ? __lock_release+0x47/0x70
        [<c02a4769>] ? sock_def_readable+0x59/0x80
        [<c031ffdd>] ? _read_unlock+0x1d/0x20
        [<c02a4769>] ? sock_def_readable+0x59/0x80
        [<c02a4d3a>] ? sock_queue_rcv_skb+0x13a/0x1d0
        [<c02a4c45>] ? sock_queue_rcv_skb+0x45/0x1d0
        [<f8d1bb30>] ? ax25_kiss_rcv+0x0/0x800 [ax25]
        [<c02ac715>] netif_receive_skb+0x255/0x2f0
        [<c02ac5c0>] ? netif_receive_skb+0x100/0x2f0
        [<c02af05c>] process_backlog+0x7c/0xf0
        [<c02aeb0c>] net_rx_action+0x16c/0x230
        [<c02aea36>] ? net_rx_action+0x96/0x230
        [<c012bd53>] __do_softirq+0x93/0x120
        [<f8d2a68a>] ? mkiss_receive_buf+0x33a/0x3f0 [mkiss]
        [<c012be37>] do_softirq+0x57/0x60
        [<c012c265>] local_bh_enable_ip+0xa5/0xe0
        [<c0320005>] _spin_unlock_bh+0x25/0x30
        [<f8d2a68a>] mkiss_receive_buf+0x33a/0x3f0 [mkiss]
        [<c025ea37>] pty_write+0x47/0x60
        [<c025c620>] write_chan+0x1b0/0x220
        [<c0259a1c>] ? tty_write_lock+0x1c/0x50
        [<c011fec0>] ? default_wake_function+0x0/0x10
        [<c0259bea>] tty_write+0x12a/0x1c0
        [<c025c470>] ? write_chan+0x0/0x220
        [<c018bbc6>] vfs_write+0x96/0x130
        [<c0259ac0>] ? tty_write+0x0/0x1c0
        [<c018c24d>] sys_write+0x3d/0x70
        [<c0104d1e>] sysenter_past_esp+0x5f/0xa5
        =======================
      
      Since rose_route_frame() does not use rose_node_list we can safely
      remove rose_node_list_lock spin lock here and let it be free for
      rose_get_neigh().
      Signed-off-by: NBernard Pidoux <f6bvp@amsat.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      047f7617
  2. 20 4月, 2008 10 次提交
  3. 19 4月, 2008 29 次提交