PS mode STA trigger driver bug

Joe Parks jphstap at roinet.com
Sat Apr 17 19:31:38 EDT 2004


On Thu, 8 Apr 2004 21:46:04 -0700
Jouni Malinen <jkmaline at cc.hut.fi> wrote:

> On Thu, Apr 08, 2004 at 03:01:15PM -0400, Joe Parks wrote:
> 
> > When a STA with Power Saving mode enabled connects to one of my hostap boxes (firmware revisions 1.3.6 through 1.7.4 tested with driver revisions 0.1.1 through current CVS) it will *eventually* trigger the following:
> > 
> > wlan1: driver bug - prism2_transmit() called when previous TX was pending
> 
> It looks like the FIX comment in pspoll_send_buffered() (hostap_ap.c) of
> development branch is quite valid.. The driver is trying skip the
> possible TX queue when sending a buffered frame after a PS poll from the
> station. This bypasses some locking in the kernel and prism2_tx_80211()
> ends up being called concurrently by the next "normal" data frame.
> 
> I need to take a bit closer look at this at some point, but if you are
> interested in experimental changed, you could try to modify that
> pspoll_send_buffered() function. One trivial change would be to change
> the call to use kernel queue:
> 
>         if (skb->dev->hard_start_xmit(skb, skb->dev)) {
> 		PDEBUG(DEBUG_AP, "%s: TX failed for buffered frame (PS Poll)"
> 		       "\n", skb->dev->name);
> 		dev_kfree_skb(skb);
> 	}
> 
> into
> 
> 	dev_queue_xmit(skb);
> 
> another alternative would be to change this into
> 
>         spin_lock_bh(&skb->dev->xmit_lock);
>         if (skb->dev->hard_start_xmit(skb, skb->dev)) {
> 		spin_unlock_bh(&skb->dev->xmit_lock);
> 		PDEBUG(DEBUG_AP, "%s: TX failed for buffered frame (PS Poll)"
> 		       "\n", skb->dev->name);
> 		dev_kfree_skb(skb);
>         }
>         spin_unlock_bh(&skb->dev->xmit_lock);
> 
> this would at least try to send the frame faster (which would be useful
> for this PS Poll case)
> 
> 
> I haven't tried these, so if you happen to test them, I'm certainly
> interested in hearing whether they helped with this issue.

I've now tried both of these changes.

The first one ( dev_queue_xmit(skb); ) appears to work perfectly.  After 24 hours of testing on several devices with PS STAs associated, not a single "driver bug" has been observed. 

The second one seemed to reduce the problem (although that may have just been perception on my part) but it certainly didn't eliminate it.  I tested that one first because it looked somehow more attractive to me.



More information about the HostAP mailing list