aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorHeiner Kallweit <hkallweit1@gmail.com>2024-10-16 22:05:57 +0200
committerAndrew Lunn <andrew@lunn.ch>2024-10-20 10:20:42 -0500
commitac48430368c1a4f4e6c2fa92243b4b93fd25bee4 (patch)
treed3b5305ecf6635efd863b307ac465d633a3e8454
parenteth: fbnic: add CONFIG_PTP_1588_CLOCK_OPTIONAL dependency (diff)
downloadwireguard-linux-ac48430368c1a4f4e6c2fa92243b4b93fd25bee4.tar.xz
wireguard-linux-ac48430368c1a4f4e6c2fa92243b4b93fd25bee4.zip
r8169: don't take RTNL lock in rtl_task()
There's not really a benefit here in taking the RTNL lock. The task handler does exception handling only, so we're in trouble anyway when we come here, and there's no need to protect against e.g. a parallel ethtool call. A benefit of removing the RTNL lock here is that we now can synchronously cancel the workqueue from a context holding the RTNL mutex. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: Andrew Lunn <andrew@lunn.ch>
-rw-r--r--drivers/net/ethernet/realtek/r8169_main.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index c3678c442022..cd0d9ecca5c9 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -4799,10 +4799,8 @@ static void rtl_task(struct work_struct *work)
container_of(work, struct rtl8169_private, wk.work);
int ret;
- rtnl_lock();
-
if (!test_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags))
- goto out_unlock;
+ return;
if (test_and_clear_bit(RTL_FLAG_TASK_TX_TIMEOUT, tp->wk.flags)) {
/* if chip isn't accessible, reset bus to revive it */
@@ -4811,7 +4809,7 @@ static void rtl_task(struct work_struct *work)
if (ret < 0) {
netdev_err(tp->dev, "Can't reset secondary PCI bus, detach NIC\n");
netif_device_detach(tp->dev);
- goto out_unlock;
+ return;
}
}
@@ -4830,8 +4828,6 @@ reset:
} else if (test_and_clear_bit(RTL_FLAG_TASK_RESET_NO_QUEUE_WAKE, tp->wk.flags)) {
rtl_reset_work(tp);
}
-out_unlock:
- rtnl_unlock();
}
static int rtl8169_poll(struct napi_struct *napi, int budget)