On 03/19/12 09:39, Stanislaw Gruszka wrote: > This is fix for my current commit > ed61e2b02027935520d1be884fac0b2ffce8379a > "rt2x00: rt2800usb: rework txdone code" > > We should schedule txdone work on timeout, otherwise if newer get > tx status from hardware, we will never report tx status to mac80211 > and eventually never wakeup tx queue. > > Reported-by: Jakub Kicinski <moorray@xxxxx> > Signed-off-by: Stanislaw Gruszka <sgruszka@xxxxxxxxxx> Acked-by: Gertjan van Wingerde <gwingerde@xxxxxxxxx> > --- > drivers/net/wireless/rt2x00/rt2800usb.c | 8 +++++++- > 1 files changed, 7 insertions(+), 1 deletions(-) > > diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c > index cd490ab..f97f846 100644 > --- a/drivers/net/wireless/rt2x00/rt2800usb.c > +++ b/drivers/net/wireless/rt2x00/rt2800usb.c > @@ -163,7 +163,13 @@ static bool rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev, > > /* Reschedule urb to read TX status again instantly */ > return true; > - } else if (rt2800usb_txstatus_pending(rt2x00dev)) { > + } > + > + /* Check if there is any entry that timedout waiting on TX status */ > + if (rt2800usb_txstatus_timeout(rt2x00dev)) > + queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work); > + > + if (rt2800usb_txstatus_pending(rt2x00dev)) { > /* Read register after 250 us */ > hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 250000), > HRTIMER_MODE_REL); -- --- Gertjan -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html