mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-26 17:01:14 +00:00
36530ba72a
Imported from patchwork, patches marked with '=' have already been in our tree: [v3,1/4] cfg80211: add ratelimited variants of err and warn [v3,2/4] rt2x00: use ratelimited variants dev_warn/dev_err [v3,3/4] rt2x00: check number of EPROTO errors =[v3,4/4] rt2x00: do not print error when queue is full Signed-off-by: Daniel Golle <daniel@makrotopia.org>
62 lines
2.2 KiB
Diff
62 lines
2.2 KiB
Diff
From f6a9618198e190a2ba09ce3f0aa8e9ee1763bd38 Mon Sep 17 00:00:00 2001
|
|
From: Stanislaw Gruszka <sgruszka@redhat.com>
|
|
Date: Sat, 9 Feb 2019 12:08:34 +0100
|
|
X-Patchwork-Submitter: Stanislaw Gruszka <sgruszka@redhat.com>
|
|
X-Patchwork-Id: 10804443
|
|
X-Patchwork-Delegate: kvalo@adurom.com
|
|
Subject: [PATCH 24/28] rt2800mmio: fetch tx status changes
|
|
|
|
Prepare to use rt2800mmio_fetch_txstatus() in concurrent manner and drop
|
|
return value since is not longer needed.
|
|
|
|
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
|
---
|
|
drivers/net/wireless/ralink/rt2x00/rt2800mmio.c | 17 +++++++++--------
|
|
1 file changed, 9 insertions(+), 8 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
|
|
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
|
|
@@ -255,12 +255,12 @@ void rt2800mmio_autowake_tasklet(unsigne
|
|
}
|
|
EXPORT_SYMBOL_GPL(rt2800mmio_autowake_tasklet);
|
|
|
|
-static bool rt2800mmio_fetch_txstatus(struct rt2x00_dev *rt2x00dev)
|
|
+static void rt2800mmio_fetch_txstatus(struct rt2x00_dev *rt2x00dev)
|
|
{
|
|
u32 status;
|
|
- bool more = false;
|
|
+ unsigned long flags;
|
|
|
|
- /* FIXEME: rewrite this comment
|
|
+ /*
|
|
* The TX_FIFO_STATUS interrupt needs special care. We should
|
|
* read TX_STA_FIFO but we should do it immediately as otherwise
|
|
* the register can overflow and we would lose status reports.
|
|
@@ -271,20 +271,21 @@ static bool rt2800mmio_fetch_txstatus(st
|
|
* because we can schedule the tasklet multiple times (when the
|
|
* interrupt fires again during tx status processing).
|
|
*
|
|
- * txstatus tasklet is called with INT_SOURCE_CSR_TX_FIFO_STATUS
|
|
- * disabled so have only one producer and one consumer - we don't
|
|
- * need to lock the kfifo.
|
|
+ * We also read statuses from tx status timeout timer, use
|
|
+ * lock to prevent concurent writes to fifo.
|
|
*/
|
|
+
|
|
+ spin_lock_irqsave(&rt2x00dev->irqmask_lock, flags);
|
|
+
|
|
while (!kfifo_is_full(&rt2x00dev->txstatus_fifo)) {
|
|
status = rt2x00mmio_register_read(rt2x00dev, TX_STA_FIFO);
|
|
if (!rt2x00_get_field32(status, TX_STA_FIFO_VALID))
|
|
break;
|
|
|
|
kfifo_put(&rt2x00dev->txstatus_fifo, status);
|
|
- more = true;
|
|
}
|
|
|
|
- return more;
|
|
+ spin_unlock_irqrestore(&rt2x00dev->irqmask_lock, flags);
|
|
}
|
|
|
|
void rt2800mmio_txstatus_tasklet(unsigned long data)
|