| .. | .. |
|---|
| 839 | 839 | *z1t = cpu_to_le16(new_z1); /* now send data */ |
|---|
| 840 | 840 | if (bch->tx_idx < bch->tx_skb->len) |
|---|
| 841 | 841 | return; |
|---|
| 842 | | - dev_kfree_skb(bch->tx_skb); |
|---|
| 842 | + dev_kfree_skb_any(bch->tx_skb); |
|---|
| 843 | 843 | if (get_next_bframe(bch)) |
|---|
| 844 | 844 | goto next_t_frame; |
|---|
| 845 | 845 | return; |
|---|
| .. | .. |
|---|
| 895 | 895 | } |
|---|
| 896 | 896 | bz->za[new_f1].z1 = cpu_to_le16(new_z1); /* for next buffer */ |
|---|
| 897 | 897 | bz->f1 = new_f1; /* next frame */ |
|---|
| 898 | | - dev_kfree_skb(bch->tx_skb); |
|---|
| 898 | + dev_kfree_skb_any(bch->tx_skb); |
|---|
| 899 | 899 | get_next_bframe(bch); |
|---|
| 900 | 900 | } |
|---|
| 901 | 901 | |
|---|
| .. | .. |
|---|
| 1119 | 1119 | if (bch->tx_skb && bch->tx_idx < bch->tx_skb->len) |
|---|
| 1120 | 1120 | hfcpci_fill_fifo(bch); |
|---|
| 1121 | 1121 | else { |
|---|
| 1122 | | - dev_kfree_skb(bch->tx_skb); |
|---|
| 1122 | + dev_kfree_skb_any(bch->tx_skb); |
|---|
| 1123 | 1123 | if (get_next_bframe(bch)) |
|---|
| 1124 | 1124 | hfcpci_fill_fifo(bch); |
|---|
| 1125 | 1125 | } |
|---|
| .. | .. |
|---|
| 1617 | 1617 | test_and_clear_bit(FLG_L2_ACTIVATED, &dch->Flags); |
|---|
| 1618 | 1618 | spin_lock_irqsave(&hc->lock, flags); |
|---|
| 1619 | 1619 | if (hc->hw.protocol == ISDN_P_NT_S0) { |
|---|
| 1620 | + struct sk_buff_head free_queue; |
|---|
| 1621 | + |
|---|
| 1622 | + __skb_queue_head_init(&free_queue); |
|---|
| 1620 | 1623 | /* prepare deactivation */ |
|---|
| 1621 | 1624 | Write_hfc(hc, HFCPCI_STATES, 0x40); |
|---|
| 1622 | | - skb_queue_purge(&dch->squeue); |
|---|
| 1625 | + skb_queue_splice_init(&dch->squeue, &free_queue); |
|---|
| 1623 | 1626 | if (dch->tx_skb) { |
|---|
| 1624 | | - dev_kfree_skb(dch->tx_skb); |
|---|
| 1627 | + __skb_queue_tail(&free_queue, dch->tx_skb); |
|---|
| 1625 | 1628 | dch->tx_skb = NULL; |
|---|
| 1626 | 1629 | } |
|---|
| 1627 | 1630 | dch->tx_idx = 0; |
|---|
| 1628 | 1631 | if (dch->rx_skb) { |
|---|
| 1629 | | - dev_kfree_skb(dch->rx_skb); |
|---|
| 1632 | + __skb_queue_tail(&free_queue, dch->rx_skb); |
|---|
| 1630 | 1633 | dch->rx_skb = NULL; |
|---|
| 1631 | 1634 | } |
|---|
| 1632 | 1635 | test_and_clear_bit(FLG_TX_BUSY, &dch->Flags); |
|---|
| .. | .. |
|---|
| 1639 | 1642 | hc->hw.mst_m &= ~HFCPCI_MASTER; |
|---|
| 1640 | 1643 | Write_hfc(hc, HFCPCI_MST_MODE, hc->hw.mst_m); |
|---|
| 1641 | 1644 | ret = 0; |
|---|
| 1645 | + spin_unlock_irqrestore(&hc->lock, flags); |
|---|
| 1646 | + __skb_queue_purge(&free_queue); |
|---|
| 1642 | 1647 | } else { |
|---|
| 1643 | 1648 | ret = l1_event(dch->l1, hh->prim); |
|---|
| 1649 | + spin_unlock_irqrestore(&hc->lock, flags); |
|---|
| 1644 | 1650 | } |
|---|
| 1645 | | - spin_unlock_irqrestore(&hc->lock, flags); |
|---|
| 1646 | 1651 | break; |
|---|
| 1647 | 1652 | } |
|---|
| 1648 | 1653 | if (!ret) |
|---|
| .. | .. |
|---|
| 2272 | 2277 | return 0; |
|---|
| 2273 | 2278 | |
|---|
| 2274 | 2279 | if (hc->hw.int_m2 & HFCPCI_IRQ_ENABLE) { |
|---|
| 2275 | | - spin_lock(&hc->lock); |
|---|
| 2280 | + spin_lock_irq(&hc->lock); |
|---|
| 2276 | 2281 | bch = Sel_BCS(hc, hc->hw.bswapped ? 2 : 1); |
|---|
| 2277 | 2282 | if (bch && bch->state == ISDN_P_B_RAW) { /* B1 rx&tx */ |
|---|
| 2278 | 2283 | main_rec_hfcpci(bch); |
|---|
| .. | .. |
|---|
| 2283 | 2288 | main_rec_hfcpci(bch); |
|---|
| 2284 | 2289 | tx_birq(bch); |
|---|
| 2285 | 2290 | } |
|---|
| 2286 | | - spin_unlock(&hc->lock); |
|---|
| 2291 | + spin_unlock_irq(&hc->lock); |
|---|
| 2287 | 2292 | } |
|---|
| 2288 | 2293 | return 0; |
|---|
| 2289 | 2294 | } |
|---|