diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2006-12-06 23:36:59 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 11:39:34 -0500 |
commit | f89d75f224dc530f1c173d9093f75865345840a1 (patch) | |
tree | ebcc6269556dda7e70c29d1cccfa2e5b2925e57d | |
parent | 9774a1f54f173ad18e816496c8979f1bf8ef666a (diff) |
[PATCH] lockdep: annotate bcsp driver
=============================================
[ INFO: possible recursive locking detected ]
2.6.18-1.2699.fc6 #1
---------------------------------------------
swapper/0 is trying to acquire lock:
(&list->lock#3){+...}, at: [<c05ad307>] skb_dequeue+0x12/0x43
but task is already holding lock:
(&list->lock#3){+...}, at: [<df98cd79>] bcsp_dequeue+0x6a/0x11e [hci_uart]
Two different list locks nest, annotate so.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | drivers/bluetooth/hci_bcsp.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/bluetooth/hci_bcsp.c b/drivers/bluetooth/hci_bcsp.c index d0cface535fb..5e2c31882003 100644 --- a/drivers/bluetooth/hci_bcsp.c +++ b/drivers/bluetooth/hci_bcsp.c | |||
@@ -330,7 +330,7 @@ static struct sk_buff *bcsp_dequeue(struct hci_uart *hu) | |||
330 | reliable packet if the number of packets sent but not yet ack'ed | 330 | reliable packet if the number of packets sent but not yet ack'ed |
331 | is < than the winsize */ | 331 | is < than the winsize */ |
332 | 332 | ||
333 | spin_lock_irqsave(&bcsp->unack.lock, flags); | 333 | spin_lock_irqsave_nested(&bcsp->unack.lock, flags, SINGLE_DEPTH_NESTING); |
334 | 334 | ||
335 | if (bcsp->unack.qlen < BCSP_TXWINSIZE && (skb = skb_dequeue(&bcsp->rel)) != NULL) { | 335 | if (bcsp->unack.qlen < BCSP_TXWINSIZE && (skb = skb_dequeue(&bcsp->rel)) != NULL) { |
336 | struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len, bt_cb(skb)->pkt_type); | 336 | struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len, bt_cb(skb)->pkt_type); |
@@ -696,7 +696,7 @@ static void bcsp_timed_event(unsigned long arg) | |||
696 | 696 | ||
697 | BT_DBG("hu %p retransmitting %u pkts", hu, bcsp->unack.qlen); | 697 | BT_DBG("hu %p retransmitting %u pkts", hu, bcsp->unack.qlen); |
698 | 698 | ||
699 | spin_lock_irqsave(&bcsp->unack.lock, flags); | 699 | spin_lock_irqsave_nested(&bcsp->unack.lock, flags, SINGLE_DEPTH_NESTING); |
700 | 700 | ||
701 | while ((skb = __skb_dequeue_tail(&bcsp->unack)) != NULL) { | 701 | while ((skb = __skb_dequeue_tail(&bcsp->unack)) != NULL) { |
702 | bcsp->msgq_txseq = (bcsp->msgq_txseq - 1) & 0x07; | 702 | bcsp->msgq_txseq = (bcsp->msgq_txseq - 1) & 0x07; |