hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/isdn/hardware/mISDN/hfcsusb.c
....@@ -326,20 +326,24 @@
326326 test_and_clear_bit(FLG_L2_ACTIVATED, &dch->Flags);
327327
328328 if (hw->protocol == ISDN_P_NT_S0) {
329
+ struct sk_buff_head free_queue;
330
+
331
+ __skb_queue_head_init(&free_queue);
329332 hfcsusb_ph_command(hw, HFC_L1_DEACTIVATE_NT);
330333 spin_lock_irqsave(&hw->lock, flags);
331
- skb_queue_purge(&dch->squeue);
334
+ skb_queue_splice_init(&dch->squeue, &free_queue);
332335 if (dch->tx_skb) {
333
- dev_kfree_skb(dch->tx_skb);
336
+ __skb_queue_tail(&free_queue, dch->tx_skb);
334337 dch->tx_skb = NULL;
335338 }
336339 dch->tx_idx = 0;
337340 if (dch->rx_skb) {
338
- dev_kfree_skb(dch->rx_skb);
341
+ __skb_queue_tail(&free_queue, dch->rx_skb);
339342 dch->rx_skb = NULL;
340343 }
341344 test_and_clear_bit(FLG_TX_BUSY, &dch->Flags);
342345 spin_unlock_irqrestore(&hw->lock, flags);
346
+ __skb_queue_purge(&free_queue);
343347 #ifdef FIXME
344348 if (test_and_clear_bit(FLG_L1_BUSY, &dch->Flags))
345349 dchannel_sched_event(&hc->dch, D_CLEARBUSY);
....@@ -1330,7 +1334,7 @@
13301334 printk("\n");
13311335 }
13321336
1333
- dev_kfree_skb(tx_skb);
1337
+ dev_consume_skb_irq(tx_skb);
13341338 tx_skb = NULL;
13351339 if (fifo->dch && get_next_dframe(fifo->dch))
13361340 tx_skb = fifo->dch->tx_skb;