aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-09-22 01:44:08 -0400
committerDavid S. Miller <davem@davemloft.net>2008-09-22 01:44:08 -0400
commit8fc5387cb837f9e44a0be2d7e297bbbcab36a292 (patch)
tree7dfb18b09275d115137084c263de480801d76b69 /drivers/bluetooth
parente9bb8fb0b6d61a822201537b25206a0ca34b9d1d (diff)
bluetooth: hci_bcsp: Use SKB list interfaces instead of home-grown stuff.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/bluetooth')
-rw-r--r--drivers/bluetooth/hci_bcsp.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/bluetooth/hci_bcsp.c b/drivers/bluetooth/hci_bcsp.c
index 4d37bb312ee..7938062c1cc 100644
--- a/drivers/bluetooth/hci_bcsp.c
+++ b/drivers/bluetooth/hci_bcsp.c
@@ -352,14 +352,14 @@ static int bcsp_flush(struct hci_uart *hu)
352/* Remove ack'ed packets */ 352/* Remove ack'ed packets */
353static void bcsp_pkt_cull(struct bcsp_struct *bcsp) 353static void bcsp_pkt_cull(struct bcsp_struct *bcsp)
354{ 354{
355 struct sk_buff *skb, *tmp;
355 unsigned long flags; 356 unsigned long flags;
356 struct sk_buff *skb;
357 int i, pkts_to_be_removed; 357 int i, pkts_to_be_removed;
358 u8 seqno; 358 u8 seqno;
359 359
360 spin_lock_irqsave(&bcsp->unack.lock, flags); 360 spin_lock_irqsave(&bcsp->unack.lock, flags);
361 361
362 pkts_to_be_removed = bcsp->unack.qlen; 362 pkts_to_be_removed = skb_queue_len(&bcsp->unack);
363 seqno = bcsp->msgq_txseq; 363 seqno = bcsp->msgq_txseq;
364 364
365 while (pkts_to_be_removed) { 365 while (pkts_to_be_removed) {
@@ -373,19 +373,19 @@ static void bcsp_pkt_cull(struct bcsp_struct *bcsp)
373 BT_ERR("Peer acked invalid packet"); 373 BT_ERR("Peer acked invalid packet");
374 374
375 BT_DBG("Removing %u pkts out of %u, up to seqno %u", 375 BT_DBG("Removing %u pkts out of %u, up to seqno %u",
376 pkts_to_be_removed, bcsp->unack.qlen, (seqno - 1) & 0x07); 376 pkts_to_be_removed, skb_queue_len(&bcsp->unack),
377 (seqno - 1) & 0x07);
377 378
378 for (i = 0, skb = ((struct sk_buff *) &bcsp->unack)->next; i < pkts_to_be_removed 379 i = 0;
379 && skb != (struct sk_buff *) &bcsp->unack; i++) { 380 skb_queue_walk_safe(&bcsp->unack, skb, tmp) {
380 struct sk_buff *nskb; 381 if (i++ >= pkts_to_be_removed)
382 break;
381 383
382 nskb = skb->next;
383 __skb_unlink(skb, &bcsp->unack); 384 __skb_unlink(skb, &bcsp->unack);
384 kfree_skb(skb); 385 kfree_skb(skb);
385 skb = nskb;
386 } 386 }
387 387
388 if (bcsp->unack.qlen == 0) 388 if (skb_queue_empty(&bcsp->unack))
389 del_timer(&bcsp->tbcsp); 389 del_timer(&bcsp->tbcsp);
390 390
391 spin_unlock_irqrestore(&bcsp->unack.lock, flags); 391 spin_unlock_irqrestore(&bcsp->unack.lock, flags);