Message ID | 1483707918-31480-3-git-send-email-sgruszka@redhat.com (mailing list archive) |
---|---|
State | Accepted |
Commit | cfe82fbd84239b7b65b380eba2f02cd5b12e99d7 |
Delegated to: | Kalle Valo |
Headers | show |
On 2017-01-06 14:05, Stanislaw Gruszka wrote: > When medium is busy or frames have to be resend, it takes time to send > the frames and get TX status from hardware. For some really bad medium > conditions it can take seconds. Patch change TX status timeout to give > HW more time to provide it, however 500ms is not enough for bad > conditions. In the future this timeout should be removed and replaced > with proper watchdog mechanism. > > Increase flush timeout accordingly as well. > > Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> By the way, to make tx status reporting more robust, I would suggest mapping tx fifo status to skb only for frames where IEEE80211_TX_CTL_REQ_TX_STATUS is set. For all other frames, set PID=0 and return the status using ieee80211_tx_status_noskb. I did the same in mt76 and it works quite well. - Felix
On Fri, Jan 06, 2017 at 04:15:40PM +0100, Felix Fietkau wrote: > On 2017-01-06 14:05, Stanislaw Gruszka wrote: > > When medium is busy or frames have to be resend, it takes time to send > > the frames and get TX status from hardware. For some really bad medium > > conditions it can take seconds. Patch change TX status timeout to give > > HW more time to provide it, however 500ms is not enough for bad > > conditions. In the future this timeout should be removed and replaced > > with proper watchdog mechanism. > > > > Increase flush timeout accordingly as well. > > > > Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> > By the way, to make tx status reporting more robust, I would suggest > mapping tx fifo status to skb only for frames where > IEEE80211_TX_CTL_REQ_TX_STATUS is set. For all other frames, set PID=0 > and return the status using ieee80211_tx_status_noskb. > I did the same in mt76 and it works quite well. Good idea, thanks! Stanislaw
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c index 8ec22c0..400f074 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c @@ -123,7 +123,7 @@ static inline bool rt2800usb_entry_txstatus_timeout(struct queue_entry *entry) if (!test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) return false; - tout = time_after(jiffies, entry->last_action + msecs_to_jiffies(100)); + tout = time_after(jiffies, entry->last_action + msecs_to_jiffies(500)); if (unlikely(tout)) rt2x00_dbg(entry->queue->rt2x00dev, "TX status timeout for entry %d in queue %d\n", diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00mmio.c b/drivers/net/wireless/ralink/rt2x00/rt2x00mmio.c index f0178fd..da38d25 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00mmio.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mmio.c @@ -101,7 +101,7 @@ void rt2x00mmio_flush_queue(struct data_queue *queue, bool drop) unsigned int i; for (i = 0; !rt2x00queue_empty(queue) && i < 10; i++) - msleep(10); + msleep(50); } EXPORT_SYMBOL_GPL(rt2x00mmio_flush_queue); diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c index 6005e14..838ca58 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c @@ -517,7 +517,7 @@ void rt2x00usb_flush_queue(struct data_queue *queue, bool drop) * Wait for a little while to give the driver * the oppurtunity to recover itself. */ - msleep(10); + msleep(50); } } EXPORT_SYMBOL_GPL(rt2x00usb_flush_queue);
When medium is busy or frames have to be resend, it takes time to send the frames and get TX status from hardware. For some really bad medium conditions it can take seconds. Patch change TX status timeout to give HW more time to provide it, however 500ms is not enough for bad conditions. In the future this timeout should be removed and replaced with proper watchdog mechanism. Increase flush timeout accordingly as well. Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> --- drivers/net/wireless/ralink/rt2x00/rt2800usb.c | 2 +- drivers/net/wireless/ralink/rt2x00/rt2x00mmio.c | 2 +- drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)