diff options
author | Alexander Aring <alex.aring@gmail.com> | 2014-10-26 09:37:03 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2014-10-26 17:24:02 +0100 |
commit | e89e45f22a382d14d5e2362cd4f4d12d77ee4935 (patch) | |
tree | d3ef421aeba8b49f75138d9359355e8f0bbd4b16 | |
parent | fe24371d6645b766c59ec664c59d0a9c310ad455 (diff) | |
download | op-kernel-dev-e89e45f22a382d14d5e2362cd4f4d12d77ee4935.zip op-kernel-dev-e89e45f22a382d14d5e2362cd4f4d12d77ee4935.tar.gz |
mac802154: tx: squash multiple dereferencing
This patch introduce some new stack variables to avoid multiple
dereferencing inside the xmit worker function.
Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
-rw-r--r-- | net/mac802154/tx.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/net/mac802154/tx.c b/net/mac802154/tx.c index 513e760..d0ceb46 100644 --- a/net/mac802154/tx.c +++ b/net/mac802154/tx.c @@ -48,37 +48,38 @@ static inline struct wpan_xmit_cb *wpan_xmit_cb(const struct sk_buff *skb) static void mac802154_xmit_worker(struct work_struct *work) { struct wpan_xmit_cb *cb = container_of(work, struct wpan_xmit_cb, work); + struct ieee802154_local *local = cb->local; struct ieee802154_sub_if_data *sdata; + struct sk_buff *skb = cb->skb; int res; - mutex_lock(&cb->local->phy->pib_lock); - if (cb->local->phy->current_channel != cb->chan || - cb->local->phy->current_page != cb->page) { - res = cb->local->ops->set_channel(&cb->local->hw, cb->page, - cb->chan); + mutex_lock(&local->phy->pib_lock); + if (local->phy->current_channel != cb->chan || + local->phy->current_page != cb->page) { + res = local->ops->set_channel(&local->hw, cb->page, cb->chan); if (res) { pr_debug("set_channel failed\n"); goto out; } - cb->local->phy->current_channel = cb->chan; - cb->local->phy->current_page = cb->page; + local->phy->current_channel = cb->chan; + local->phy->current_page = cb->page; } - res = cb->local->ops->xmit(&cb->local->hw, cb->skb); + res = local->ops->xmit(&local->hw, skb); if (res) pr_debug("transmission failed\n"); out: - mutex_unlock(&cb->local->phy->pib_lock); + mutex_unlock(&local->phy->pib_lock); /* Restart the netif queue on each sub_if_data object. */ rcu_read_lock(); - list_for_each_entry_rcu(sdata, &cb->local->interfaces, list) + list_for_each_entry_rcu(sdata, &local->interfaces, list) netif_wake_queue(sdata->dev); rcu_read_unlock(); - dev_kfree_skb(cb->skb); + dev_kfree_skb(skb); } static netdev_tx_t mac802154_tx(struct ieee802154_local *local, |