|
30 | 30 | #include "ieee802154_i.h" |
31 | 31 | #include "driver-ops.h" |
32 | 32 |
|
33 | | -/* IEEE 802.15.4 transceivers can sleep during the xmit session, so process |
34 | | - * packets through the workqueue. |
35 | | - */ |
36 | | -struct ieee802154_xmit_cb { |
37 | | - struct sk_buff *skb; |
38 | | - struct work_struct work; |
39 | | - struct ieee802154_local *local; |
40 | | -}; |
41 | | - |
42 | | -static struct ieee802154_xmit_cb ieee802154_xmit_cb; |
43 | | - |
44 | | -static void ieee802154_xmit_worker(struct work_struct *work) |
| 33 | +void ieee802154_xmit_worker(struct work_struct *work) |
45 | 34 | { |
46 | | - struct ieee802154_xmit_cb *cb = |
47 | | - container_of(work, struct ieee802154_xmit_cb, work); |
48 | | - struct ieee802154_local *local = cb->local; |
49 | | - struct sk_buff *skb = cb->skb; |
| 35 | + struct ieee802154_local *local = |
| 36 | + container_of(work, struct ieee802154_local, tx_work); |
| 37 | + struct sk_buff *skb = local->tx_skb; |
50 | 38 | struct net_device *dev = skb->dev; |
51 | 39 | int res; |
52 | 40 |
|
@@ -106,11 +94,8 @@ ieee802154_tx(struct ieee802154_local *local, struct sk_buff *skb) |
106 | 94 | dev->stats.tx_packets++; |
107 | 95 | dev->stats.tx_bytes += skb->len; |
108 | 96 | } else { |
109 | | - INIT_WORK(&ieee802154_xmit_cb.work, ieee802154_xmit_worker); |
110 | | - ieee802154_xmit_cb.skb = skb; |
111 | | - ieee802154_xmit_cb.local = local; |
112 | | - |
113 | | - queue_work(local->workqueue, &ieee802154_xmit_cb.work); |
| 97 | + local->tx_skb = skb; |
| 98 | + queue_work(local->workqueue, &local->tx_work); |
114 | 99 | } |
115 | 100 |
|
116 | 101 | return NETDEV_TX_OK; |
|
0 commit comments