b980a8c
Polling TX statuses too frequently has two negative effects. First is
b980a8c
randomly peek CPU usage, causing overall system functioning delays.
b980a8c
Second bad effect is that device is not able to fill TX statuses in
b980a8c
H/W register on some workloads and we get lot of timeouts like below:
b980a8c
b980a8c
ieee80211 phy4: rt2800usb_entry_txstatus_timeout: Warning - TX status timeout for entry 7 in queue 2
b980a8c
ieee80211 phy4: rt2800usb_entry_txstatus_timeout: Warning - TX status timeout for entry 7 in queue 2
b980a8c
ieee80211 phy4: rt2800usb_txdone: Warning - Got TX status for an empty queue 2, dropping
b980a8c
b980a8c
This not only cause flood of messages in dmesg, but also bad throughput,
b980a8c
since rate scaling algorithm can not work optimally.
b980a8c
b980a8c
In the future, we should probably make polling interval be adjusted
b980a8c
automatically, but for now just increase values, this make mentioned
b980a8c
problems gone.
b980a8c
b980a8c
Resolve:
b980a8c
https://bugzilla.kernel.org/show_bug.cgi?id=62781
b980a8c
b980a8c
Cc: stable@vger.kernel.org
b980a8c
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
b980a8c
---
b980a8c
 drivers/net/wireless/rt2x00/rt2800usb.c | 8 ++++----
b980a8c
 1 file changed, 4 insertions(+), 4 deletions(-)
b980a8c
b980a8c
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
b980a8c
index 96677ce5..e095e61 100644
b980a8c
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
b980a8c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
b980a8c
@@ -176,8 +176,8 @@ static bool rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev,
b980a8c
 		queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work);
b980a8c
 
b980a8c
 	if (rt2800usb_txstatus_pending(rt2x00dev)) {
b980a8c
-		/* Read register after 250 us */
b980a8c
-		hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 250000),
b980a8c
+		/* Read register after 1 ms */
b980a8c
+		hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 1000000),
b980a8c
 			      HRTIMER_MODE_REL);
b980a8c
 		return false;
b980a8c
 	}
b980a8c
@@ -202,8 +202,8 @@ static void rt2800usb_async_read_tx_status(struct rt2x00_dev *rt2x00dev)
b980a8c
 	if (test_and_set_bit(TX_STATUS_READING, &rt2x00dev->flags))
b980a8c
 		return;
b980a8c
 
b980a8c
-	/* Read TX_STA_FIFO register after 500 us */
b980a8c
-	hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 500000),
b980a8c
+	/* Read TX_STA_FIFO register after 2 ms */
b980a8c
+	hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 2000000),
b980a8c
 		      HRTIMER_MODE_REL);
b980a8c
 }
b980a8c
 
b980a8c
-- 
b980a8c
1.8.3.1