RE: [PATCH iwl-net v2 4/5] ice: do not block on the aux device lock in ethtool set_channels
flat view
From: Loktionov, Aleksandr <hidden>
Date: 2026-10-23 14:56:44
Also in:
intel-wired-lan, linux-rt-devel, lkml
quoted hunk ↗ jump to hunk
-----Original Message----- From: Petr Oros <redacted> Sent: Friday, October 23, 2026 9:03 AM To: <redacted> Cc: Oros, Petr <redacted>; Nguyen, Anthony L [off-list ref]; Kitszel, Przemyslaw [off-list ref]; Andrew Lunn [off-list ref]; David S. Miller [off-list ref]; Eric Dumazet [off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni [off-list ref]; Sebastian Andrzej Siewior [off-list ref]; Clark Williams [off-list ref]; Steven Rostedt [off-list ref]; Ertman, David M [off-list ref]; Mateusz Palczewski [off-list ref]; Leon Romanovsky [off-list ref]; Rafal Rogalski [off-list ref]; Shiraz Saleem [off-list ref]; Loktionov, Aleksandr [off-list ref]; intel-wired-lan@lists.osuosl.org; linux-kernel@vger.kernel.org; linux-rt-devel@lists.linux.dev Subject: [PATCH iwl-net v2 4/5] ice: do not block on the aux device lock in ethtool set_channels ice_set_channels() takes the auxiliary device lock to test whether the RDMA driver is bound, and ethtool ops run with the RTNL lock held. This is the same inversion against the RDMA auxiliary probe as the one fixed in ice_send_event_to_aux(), reached through a different caller. Use device_trylock() and report the device as busy when it fails. The existing diagnostic is not reused, a contended lock does not mean the RDMA driver is bound. It is a netdev_dbg(), the condition is transient and userspace already learns about it from -EBUSY. Fixes: a6a0974aae42 ("ice: Prevent set_channel from changing queues while RDMA active") Signed-off-by: Petr Oros <redacted> --- v2: - rebased on the new patches 1 and 2, the trylock now sits inside the pointer test done under adev_mutex v1: https://lore.kernel.org/all/20261019065301.3983537-3- poros@redhat.com/ --- drivers/net/ethernet/intel/ice/ice_ethtool.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.cb/drivers/net/ethernet/intel/ice/ice_ethtool.c index 5482a64c81c95a..dbc662d6233957 100644--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c@@ -3947,7 +3947,11 @@ static int ice_set_channels(struct net_device*dev, struct ethtool_channels *ch) mutex_lock(&pf->adev_mutex); adev = pf->cdev_info->adev; if (adev) { - device_lock(&adev->dev); + if (!device_trylock(&adev->dev)) { + mutex_unlock(&pf->adev_mutex); + netdev_dbg(dev, "RDMA auxiliary device is busy, try again\n"); + return -EBUSY; + } locked = true; if (adev->dev.driver) { netdev_err(dev, "Cannot change channels when RDMA is active\n"); -- 2.56.0
Reviewed-by: Aleksandr Loktionov <redacted>