projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
b603c03
)
rt2x00: rt2800usb: schedule txdone work on timeout
author
Stanislaw Gruszka
<
[email protected]
>
Mon, 19 Mar 2012 08:39:45 +0000
(09:39 +0100)
committer
John W. Linville
<
[email protected]
>
Mon, 26 Mar 2012 19:07:27 +0000
(15:07 -0400)
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 <
[email protected]
>
Signed-off-by: Stanislaw Gruszka <
[email protected]
>
Acked-by: Gertjan van Wingerde <
[email protected]
>
Signed-off-by: John W. Linville <
[email protected]
>
drivers/net/wireless/rt2x00/rt2800usb.c
patch
|
blob
|
history
diff --git
a/drivers/net/wireless/rt2x00/rt2800usb.c
b/drivers/net/wireless/rt2x00/rt2800usb.c
index cd490abced9159347cf875b9ea9349192c899dd3..f97f84606f56f04f33f58c039bfc8859a59350ef 100644
(file)
--- 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);