[PATCH iwl-net 3/3] ice: do not block on the aux device lock in ndo_setup_tc
From: Petr Oros
Date: Mon Oct 19 2026 - 02:58:22 EST
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: stable@xxxxxxxxxxxxxxx
Signed-off-by: Petr Oros <poros@xxxxxxxxxx>
---
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;
+ }
locked = true;
if (cdev->adev->dev.driver) {
netdev_err(netdev, "Cannot change qdisc when RDMA is active\n");
--
2.56.0