wimax/i2400m: fix i2400m->wake_tx_skb handling
authorTejun Heo <tj@kernel.org>
Sat, 22 Dec 2012 01:57:10 +0000 (17:57 -0800)
committerTejun Heo <tj@kernel.org>
Sat, 9 Feb 2013 19:34:19 +0000 (11:34 -0800)
commit23663c873154f01220ef679558e1ca110c4c4ca4
tree5d142c7485c667e4ff7553267f38893a65b482ef
parentad72b3bea744b4db01c89af0f86f3e8920d354df
wimax/i2400m: fix i2400m->wake_tx_skb handling

i2400m_net_wake_tx() sets ->wake_tx_skb with the given skb if
->wake_tx_ws is not pending; however, i2400m_wake_tx_work() could have
just started execution and haven't fetched -><wake_tx_skb yet.  The
previous packet will be leaked.

Update ->wake_tx_skb handling.

* i2400m_net_wake_tx() now tests whether the previous ->wake_tx_skb
  has been consumed by ->wake_tx_ws instead of testing work_pending().

* i2400m_net_wake_stop() is simplified similarly.  It always puts
  ->wake_tx_skb if non-NULL.

* Spurious ->wake_tx_skb dereference outside critical section dropped
  from i2400m_wake_tx_work().

Only compile tested.

Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Dan Williams <dcbw@redhat.com>
Cc: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
Cc: linux-wimax@intel.com
Cc: wimax@linuxwimax.org
drivers/net/wimax/i2400m/netdev.c