| .. | .. |
|---|
| 326 | 326 | test_and_clear_bit(FLG_L2_ACTIVATED, &dch->Flags); |
|---|
| 327 | 327 | |
|---|
| 328 | 328 | if (hw->protocol == ISDN_P_NT_S0) { |
|---|
| 329 | + struct sk_buff_head free_queue; |
|---|
| 330 | + |
|---|
| 331 | + __skb_queue_head_init(&free_queue); |
|---|
| 329 | 332 | hfcsusb_ph_command(hw, HFC_L1_DEACTIVATE_NT); |
|---|
| 330 | 333 | spin_lock_irqsave(&hw->lock, flags); |
|---|
| 331 | | - skb_queue_purge(&dch->squeue); |
|---|
| 334 | + skb_queue_splice_init(&dch->squeue, &free_queue); |
|---|
| 332 | 335 | if (dch->tx_skb) { |
|---|
| 333 | | - dev_kfree_skb(dch->tx_skb); |
|---|
| 336 | + __skb_queue_tail(&free_queue, dch->tx_skb); |
|---|
| 334 | 337 | dch->tx_skb = NULL; |
|---|
| 335 | 338 | } |
|---|
| 336 | 339 | dch->tx_idx = 0; |
|---|
| 337 | 340 | if (dch->rx_skb) { |
|---|
| 338 | | - dev_kfree_skb(dch->rx_skb); |
|---|
| 341 | + __skb_queue_tail(&free_queue, dch->rx_skb); |
|---|
| 339 | 342 | dch->rx_skb = NULL; |
|---|
| 340 | 343 | } |
|---|
| 341 | 344 | test_and_clear_bit(FLG_TX_BUSY, &dch->Flags); |
|---|
| 342 | 345 | spin_unlock_irqrestore(&hw->lock, flags); |
|---|
| 346 | + __skb_queue_purge(&free_queue); |
|---|
| 343 | 347 | #ifdef FIXME |
|---|
| 344 | 348 | if (test_and_clear_bit(FLG_L1_BUSY, &dch->Flags)) |
|---|
| 345 | 349 | dchannel_sched_event(&hc->dch, D_CLEARBUSY); |
|---|
| .. | .. |
|---|
| 1330 | 1334 | printk("\n"); |
|---|
| 1331 | 1335 | } |
|---|
| 1332 | 1336 | |
|---|
| 1333 | | - dev_kfree_skb(tx_skb); |
|---|
| 1337 | + dev_consume_skb_irq(tx_skb); |
|---|
| 1334 | 1338 | tx_skb = NULL; |
|---|
| 1335 | 1339 | if (fifo->dch && get_next_dframe(fifo->dch)) |
|---|
| 1336 | 1340 | tx_skb = fifo->dch->tx_skb; |
|---|