Skip to content

Commit

Permalink
mac80211: fix TX warning
Browse files Browse the repository at this point in the history
Emmanuel reported that my previous patches to enable
handing all fragments to drivers at once triggered
the warning that the SKB queue wasn't empty. This is
happening when we actually queue up some frames and
don't hand them to the driver (queues are stopped).

The reason for it is that my code that splices the
frame(s) over to the pending queue didn't re-init
the local queue, so skb_queue_empty() was false. Fix
this by using the _init versions of the splicing.

Also, convert the warning to WARN_ON_ONCE.

Reported-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Tested-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Johannes Berg authored and John W. Linville committed Nov 28, 2011
1 parent 4883993 commit 4db4e0a
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions net/mac80211/tx.c
Original file line number Diff line number Diff line change
Expand Up @@ -1227,9 +1227,10 @@ static bool ieee80211_tx_frags(struct ieee80211_local *local,
* queue is woken again.
*/
if (txpending)
skb_queue_splice(skbs, &local->pending[q]);
skb_queue_splice_init(skbs, &local->pending[q]);
else
skb_queue_splice_tail(skbs, &local->pending[q]);
skb_queue_splice_tail_init(skbs,
&local->pending[q]);

spin_unlock_irqrestore(&local->queue_stop_reason_lock,
flags);
Expand Down Expand Up @@ -1301,7 +1302,7 @@ static bool __ieee80211_tx(struct ieee80211_local *local,
ieee80211_tpt_led_trig_tx(local, fc, led_len);
ieee80211_led_tx(local, 1);

WARN_ON(!skb_queue_empty(skbs));
WARN_ON_ONCE(!skb_queue_empty(skbs));

return result;
}
Expand Down

0 comments on commit 4db4e0a

Please sign in to comment.