Re: Locking issue when running out of credits in 6lowpan connection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/17/2014 08:37 AM, Jukka Rissanen wrote:
> Hi,
> 
> I have seen the deadlock warnings from lockdep when pushing lot of data
> through a 6lowpan link. I was converting the read/write locks in 6lowpan
> to use RCU and it helped the situation slightly as I see the lockdep
> warning less now. I will send these patches soon to ml.
> 
> I noticed that if I add huge amount of credits for the connection, then
> the issue is not seen. So when the credits are exhausted in receiving
> end, the l2cap sends message to other end, see the backtrace below
> (l2cap_recv_frame() followed by l2cap_do_send()).
> 
> At the same time a lot of data is pushed through the 6lowpan link. These
> operations then conflict as seen in the log below.
> 
> One way to reproduce the issue is like this:
> 
> host1# nc -6 -l 9999 > /dev/null
> 
> host2# nc -6 fe80::21e:abff:fe4c:5257%bt0 9999 < /dev/urandom
> 
> 
> Any ideas how to solve this?

The spin_lock() in hci_queue_acl() still needs to be spin_lock_bh().

Regards,
Peter Hurley

> Is there a bug in l2cap/hci layers or am I doing something wrong with
> 6lowpan connection?
> 
> 
>  =================================
>  [ INFO: inconsistent lock state ]
>  3.17.0-rc1-bt6lowpan #1 Not tainted
>  ---------------------------------
>  inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
>  kworker/u3:1/384 [HC0[0]:SC0[0]:HE1:SE1] takes:
>   (&(&list->lock)->rlock#6){+.?...}, at: [<f831dd4c>] hci_send_acl
> +0xac/0x290 [bluetooth]
>  {IN-SOFTIRQ-W} state was registered at:
>    [<c10915a3>] __lock_acquire+0x6d3/0x1d20
>    [<c109325d>] lock_acquire+0x9d/0x140
>    [<c1889c25>] _raw_spin_lock+0x45/0x80
>    [<f831dd4c>] hci_send_acl+0xac/0x290 [bluetooth]
>    [<f833efe0>] l2cap_do_send+0x60/0x100 [bluetooth]
>    [<f8342bb0>] l2cap_chan_send+0x7f0/0x10e0 [bluetooth]
>    [<f88dc8ee>] send_pkt+0x4e/0xa0 [bluetooth_6lowpan]
>    [<f88dcd6e>] bt_xmit+0x42e/0x890 [bluetooth_6lowpan]
>    [<c17742f4>] dev_hard_start_xmit+0x344/0x670
>    [<c17749ad>] __dev_queue_xmit+0x38d/0x680
>    [<c1774caf>] dev_queue_xmit+0xf/0x20
>    [<c177b8b0>] neigh_connected_output+0x130/0x1a0
>    [<c1812a63>] ip6_finish_output2+0x173/0x8c0
>    [<c18182db>] ip6_finish_output+0x7b/0x1b0
>    [<c18184a7>] ip6_output+0x97/0x2a0
>    [<c183a46b>] mld_sendpack+0x5eb/0x650
>    [<c183acc1>] mld_ifc_timer_expire+0x191/0x2f0
>    [<c10ac385>] call_timer_fn+0x85/0x1c0
>    [<c10acb72>] run_timer_softirq+0x192/0x280
>    [<c104fd84>] __do_softirq+0xd4/0x300
>    [<c10049fc>] do_softirq_own_stack+0x2c/0x40
>    [<c1050136>] irq_exit+0x86/0xb0
>    [<c188bd98>] smp_apic_timer_interrupt+0x38/0x50
>    [<c188b6ce>] apic_timer_interrupt+0x32/0x38
>  irq event stamp: 17003
>  hardirqs last  enabled at (17003): [<c188a065>]
> _raw_spin_unlock_irqrestore+0x55/0x70
>  hardirqs last disabled at (17002): [<c1889e03>] _raw_spin_lock_irqsave
> +0x23/0x90
>  softirqs last  enabled at (6648): [<c104ff5c>] __do_softirq+0x2ac/0x300
>  softirqs last disabled at (6619): [<c10049fc>] do_softirq_own_stack
> +0x2c/0x40
>  
>  other info that might help us debug this:
>   Possible unsafe locking scenario:
>  
>         CPU0
>         ----
>    lock(&(&list->lock)->rlock#6);
>    <Interrupt>
>      lock(&(&list->lock)->rlock#6);
>  
>   *** DEADLOCK ***
>  
>  3 locks held by kworker/u3:1/384:
>   #0:  ("%s"hdev->name#2){.+.+.+}, at: [<c10622c3>] process_one_work
> +0x113/0x4a0
>   #1:  ((&hdev->rx_work)){+.+.+.}, at: [<c10622c3>] process_one_work
> +0x113/0x4a0
>   #2:  (&chan->lock){+.+.+.}, at: [<f833e569>] l2cap_get_chan_by_dcid
> +0x89/0x90 [bluetooth]
>  
>  stack backtrace:
>  CPU: 0 PID: 384 Comm: kworker/u3:1 Not tainted 3.17.0-rc1-bt6lowpan #1
>  Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox
> 12/01/2006
>  Workqueue: hci0 hci_rx_work [bluetooth]
>   f4700000 00000000 f466bb90 c18821c1 c2344320 f466bbb0 c1880a94
> c1ad9264
>   c1ad9201 c1ad95f8 f4700614 00000006 c108e0c0 f466bbe0 c108ea8c
> 00000006
>   f4700000 f466bffc 323ca8b2 0000002a 00000004 f4700000 f4700618
> 00000003
>  Call Trace:
>   [<c18821c1>] dump_stack+0x4b/0x75
>   [<c1880a94>] print_usage_bug.part.36+0x209/0x213
>   [<c108e0c0>] ? check_usage_forwards+0x110/0x110
>   [<c108ea8c>] mark_lock+0x11c/0x6e0
>   [<c10915e4>] __lock_acquire+0x714/0x1d20
>   [<c1004b6f>] ? dump_trace+0xcf/0x1f0
>   [<c100a5f8>] ? sched_clock+0x8/0x10
>   [<c1075da9>] ? sched_clock_local+0x49/0x180
>   [<c109325d>] lock_acquire+0x9d/0x140
>   [<f831dd4c>] ? hci_send_acl+0xac/0x290 [bluetooth]
>   [<c1889c25>] _raw_spin_lock+0x45/0x80
>   [<f831dd4c>] ? hci_send_acl+0xac/0x290 [bluetooth]
>   [<f831dd4c>] hci_send_acl+0xac/0x290 [bluetooth]
>   [<c108f0b4>] ? mark_held_locks+0x64/0x90
>   [<c188a065>] ? _raw_spin_unlock_irqrestore+0x55/0x70
>   [<f833efe0>] l2cap_do_send+0x60/0x100 [bluetooth]
>   [<c108f32b>] ? trace_hardirqs_on+0xb/0x10
>   [<c188a051>] ? _raw_spin_unlock_irqrestore+0x41/0x70
>   [<c1763125>] ? skb_dequeue+0x45/0x60
>   [<f8349785>] l2cap_recv_frame+0x23e5/0x2dc0 [bluetooth]
>   [<c1075da9>] ? sched_clock_local+0x49/0x180
>   [<c100a5f8>] ? sched_clock+0x8/0x10
>   [<c1075da9>] ? sched_clock_local+0x49/0x180
>   [<c10761ef>] ? sched_clock_cpu+0x10f/0x160
>   [<c107183b>] ? get_parent_ip+0xb/0x40
>   [<c10718bb>] ? preempt_count_add+0x4b/0xa0
>   [<c13d09e2>] ? debug_smp_processor_id+0x12/0x20
>   [<c108cc04>] ? get_lock_stats+0x24/0x40
>   [<c108f0b4>] ? mark_held_locks+0x64/0x90
>   [<c188716d>] ? __mutex_unlock_slowpath+0xcd/0x1b0
>   [<c13d09ff>] ? __this_cpu_preempt_check+0xf/0x20
>   [<c108f1d4>] ? trace_hardirqs_on_caller+0xf4/0x240
>   [<c108c9a6>] ? trace_hardirqs_off_caller+0xb6/0x160
>   [<f834b6a9>] l2cap_recv_acldata+0x2f9/0x340 [bluetooth]
>   [<f8316a13>] ? hci_rx_work+0x113/0x4a0 [bluetooth]
>   [<f8316c69>] hci_rx_work+0x369/0x4a0 [bluetooth]
>   [<f8316a13>] ? hci_rx_work+0x113/0x4a0 [bluetooth]
>   [<c106234a>] process_one_work+0x19a/0x4a0
>   [<c10622c3>] ? process_one_work+0x113/0x4a0
>   [<c10629e9>] worker_thread+0x39/0x440
>   [<c10629b0>] ? init_pwq+0xc0/0xc0
>   [<c1066dc8>] kthread+0xa8/0xc0
>   [<c108f32b>] ? trace_hardirqs_on+0xb/0x10
>   [<c188ad01>] ret_from_kernel_thread+0x21/0x30
>   [<c1066d20>] ? kthread_create_on_node+0x160/0x160


--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux