summaryrefslogtreecommitdiff
path: root/net/sched
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2026-06-02 18:28:37 -0700
committerJakub Kicinski <kuba@kernel.org>2026-06-04 14:04:56 -0700
commite50f6245be53e612dc3296b53c890a0d4a2d806a (patch)
treed3f6e8503ef5b9e546672d6c3c02be6dc98b4ce0 /net/sched
parent20398c41d0014ba08363c8e7ad98006e6e28747f (diff)
net: sched: don't recurse on the netdev ops lock in qdiscs
cbs_set_port_rate() and taprio_set_picos_per_byte() are reached from two paths and both already hold the device's ops lock: *_change(), via tc_modify_qdisc() which calls netdev_lock_ops(dev) before dispatching to the qdisc ops. *_dev_notifier() on NETDEV_UP / NETDEV_CHANGE, where caller holds the ops lock across the notifier chain. Switch to netif_get_link_ksettings() to avoid deadlock once __ethtool_get_link_ksettings() starts taking the netdev lock. Link: https://patch.msgid.link/20260603012840.2254293-9-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/sched')
-rw-r--r--net/sched/sch_cbs.c2
-rw-r--r--net/sched/sch_taprio.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/net/sched/sch_cbs.c b/net/sched/sch_cbs.c
index b952353ec2a5..85b41ffc63ff 100644
--- a/net/sched/sch_cbs.c
+++ b/net/sched/sch_cbs.c
@@ -327,7 +327,7 @@ static void cbs_set_port_rate(struct net_device *dev, struct cbs_sched_data *q)
s64 port_rate;
int err;
- err = __ethtool_get_link_ksettings(dev, &ecmd);
+ err = netif_get_link_ksettings(dev, &ecmd);
if (err < 0)
goto skip;
diff --git a/net/sched/sch_taprio.c b/net/sched/sch_taprio.c
index d6b981e5df11..e83cbce62a54 100644
--- a/net/sched/sch_taprio.c
+++ b/net/sched/sch_taprio.c
@@ -1299,7 +1299,7 @@ static void taprio_set_picos_per_byte(struct net_device *dev,
int picos_per_byte;
int err;
- err = __ethtool_get_link_ksettings(dev, &ecmd);
+ err = netif_get_link_ksettings(dev, &ecmd);
if (err < 0)
goto skip;