mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 01:11:14 +00:00
797d46c34d
Move stmmac backport fix patches from ipq806x to generic backport directory as they got merged upstream and they fix wide performance regression. This will eventually cause performance increase on any user of the stmmac driver. Generic patch automatically refreshed with make target/linux/refresh. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
97 lines
3.2 KiB
Diff
97 lines
3.2 KiB
Diff
From 7f3eb2174512fe6c9c0f062e96eccb0d3cc6d5cd Mon Sep 17 00:00:00 2001
|
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
Date: Wed, 18 Oct 2023 14:35:47 +0200
|
|
Subject: [PATCH] net: introduce napi_is_scheduled helper
|
|
|
|
We currently have napi_if_scheduled_mark_missed that can be used to
|
|
check if napi is scheduled but that does more thing than simply checking
|
|
it and return a bool. Some driver already implement custom function to
|
|
check if napi is scheduled.
|
|
|
|
Drop these custom function and introduce napi_is_scheduled that simply
|
|
check if napi is scheduled atomically.
|
|
|
|
Update any driver and code that implement a similar check and instead
|
|
use this new helper.
|
|
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|
---
|
|
drivers/net/ethernet/chelsio/cxgb3/sge.c | 8 --------
|
|
drivers/net/wireless/realtek/rtw89/core.c | 2 +-
|
|
include/linux/netdevice.h | 23 +++++++++++++++++++++++
|
|
net/core/dev.c | 2 +-
|
|
4 files changed, 25 insertions(+), 10 deletions(-)
|
|
|
|
--- a/drivers/net/ethernet/chelsio/cxgb3/sge.c
|
|
+++ b/drivers/net/ethernet/chelsio/cxgb3/sge.c
|
|
@@ -2507,14 +2507,6 @@ static int napi_rx_handler(struct napi_s
|
|
return work_done;
|
|
}
|
|
|
|
-/*
|
|
- * Returns true if the device is already scheduled for polling.
|
|
- */
|
|
-static inline int napi_is_scheduled(struct napi_struct *napi)
|
|
-{
|
|
- return test_bit(NAPI_STATE_SCHED, &napi->state);
|
|
-}
|
|
-
|
|
/**
|
|
* process_pure_responses - process pure responses from a response queue
|
|
* @adap: the adapter
|
|
--- a/drivers/net/wireless/realtek/rtw89/core.c
|
|
+++ b/drivers/net/wireless/realtek/rtw89/core.c
|
|
@@ -1479,7 +1479,7 @@ static void rtw89_core_rx_to_mac80211(st
|
|
struct napi_struct *napi = &rtwdev->napi;
|
|
|
|
/* In low power mode, napi isn't scheduled. Receive it to netif. */
|
|
- if (unlikely(!test_bit(NAPI_STATE_SCHED, &napi->state)))
|
|
+ if (unlikely(!napi_is_scheduled(napi)))
|
|
napi = NULL;
|
|
|
|
rtw89_core_hw_to_sband_rate(rx_status);
|
|
--- a/include/linux/netdevice.h
|
|
+++ b/include/linux/netdevice.h
|
|
@@ -468,6 +468,29 @@ static inline bool napi_prefer_busy_poll
|
|
return test_bit(NAPI_STATE_PREFER_BUSY_POLL, &n->state);
|
|
}
|
|
|
|
+/**
|
|
+ * napi_is_scheduled - test if NAPI is scheduled
|
|
+ * @n: NAPI context
|
|
+ *
|
|
+ * This check is "best-effort". With no locking implemented,
|
|
+ * a NAPI can be scheduled or terminate right after this check
|
|
+ * and produce not precise results.
|
|
+ *
|
|
+ * NAPI_STATE_SCHED is an internal state, napi_is_scheduled
|
|
+ * should not be used normally and napi_schedule should be
|
|
+ * used instead.
|
|
+ *
|
|
+ * Use only if the driver really needs to check if a NAPI
|
|
+ * is scheduled for example in the context of delayed timer
|
|
+ * that can be skipped if a NAPI is already scheduled.
|
|
+ *
|
|
+ * Return True if NAPI is scheduled, False otherwise.
|
|
+ */
|
|
+static inline bool napi_is_scheduled(struct napi_struct *n)
|
|
+{
|
|
+ return test_bit(NAPI_STATE_SCHED, &n->state);
|
|
+}
|
|
+
|
|
bool napi_schedule_prep(struct napi_struct *n);
|
|
|
|
/**
|
|
--- a/net/core/dev.c
|
|
+++ b/net/core/dev.c
|
|
@@ -6533,7 +6533,7 @@ static int __napi_poll(struct napi_struc
|
|
* accidentally calling ->poll() when NAPI is not scheduled.
|
|
*/
|
|
work = 0;
|
|
- if (test_bit(NAPI_STATE_SCHED, &n->state)) {
|
|
+ if (napi_is_scheduled(n)) {
|
|
work = n->poll(n, weight);
|
|
trace_napi_poll(n, work, weight);
|
|
}
|