On 10/21/26 1:22 PM, Loktionov, Aleksandr wrote:


-----Original Message-----
From: Petr Oros <[email protected]>
Sent: Monday, October 19, 2026 8:53 AM
To: [email protected]
Cc: Oros, Petr <[email protected]>; Nguyen, Anthony L
<[email protected]>; Kitszel, Przemyslaw
<[email protected]>; Andrew Lunn <[email protected]>;
David S . Miller <[email protected]>; Eric Dumazet
<[email protected]>; Jakub Kicinski <[email protected]>; Paolo Abeni
<[email protected]>; Ertman, David M <[email protected]>; Shiraz
Saleem <[email protected]>; Leon Romanovsky <[email protected]>;
Maziarz, Kamil <[email protected]>; Rafal Rogalski
<[email protected]>; Loktionov, Aleksandr
<[email protected]>; Schmidt, Michal <[email protected]>;
[email protected]; [email protected]; linux-
[email protected]; [email protected]; Sebastian Andrzej
Siewior <[email protected]>; Clark Williams <[email protected]>;
Steven Rostedt <[email protected]>; Mateusz Palczewski
<[email protected]>; [email protected]
Subject: [PATCH iwl-net 3/3] ice: do not block on the aux device lock in
ndo_setup_tc

The TC_SETUP_QDISC_MQPRIO path of ice_setup_tc() takes the auxiliary
device lock to test whether the RDMA driver is bound, and ndo_setup_tc()
runs with the RTNL lock held. This closes the same cycle against the
RDMA auxiliary probe as the two preceding patches.

Use device_trylock() and report the device as busy when it fails, with a
distinct message for the same reason as in the previous patch.

Fixes: 4b31fd4d77ff ("ice: Fix RDMA VSI removal during queue rebuild")
Cc: [email protected]
Signed-off-by: Petr Oros <[email protected]>
---
  drivers/net/ethernet/intel/ice/ice_main.c | 6 +++++-
  1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_main.c
b/drivers/net/ethernet/intel/ice/ice_main.c
index edb62606d2aae3..7b251136149615 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -9448,7 +9448,11 @@ ice_setup_tc(struct net_device *netdev, enum
tc_setup_type type,
                cdev = pf->cdev_info;
                if (cdev && cdev->adev) {
                        mutex_lock(&pf->adev_mutex);
-                       device_lock(&cdev->adev->dev);
+                       if (!device_trylock(&cdev->adev->dev)) {
+                               mutex_unlock(&pf->adev_mutex);
+                               netdev_dbg(netdev, "RDMA auxiliary device is
busy, try again\n");
+                               return -EBUSY;
You return error here, but it looks like being silently dropped in 
mqprio_disable_offload() isn't it ?

Yes, mqprio_disable_offload() ignores it, the same as it ignores the
existing -EBUSY for a bound RDMA driver. Blocking there brings the
deadlock back and skipping the lock races with the probe, so v2 keeps
the refusal and warns about it instead of netdev_dbg().


+                       }
                        locked = true;
                        if (cdev->adev->dev.driver) {
                                netdev_err(netdev, "Cannot change qdisc when
RDMA is active\n");
--
2.56.0


Reply via email to