From: Tony Nguyen <anthony.l.nguyen@intel.com>
To: Aleksandr Loktionov <aleksandr.loktionov@intel.com>,
<intel-wired-lan@lists.osuosl.org>,
Alexander Lobakin <aleksander.lobakin@intel.com>
Cc: netdev@vger.kernel.org,
Konstantin Ilichev <konstantin.ilichev@intel.com>
Subject: Re: [Intel-wired-lan] [PATCH net] ice: fix netdev bring-up and bring-down in self-test
Date: Wed, 8 Apr 2026 14:12:28 -0700 [thread overview]
Message-ID: <c5f6796a-66de-40df-9f12-2bc7ff04be34@intel.com> (raw)
In-Reply-To: <20260327072332.130320-7-aleksandr.loktionov@intel.com>
On 3/27/2026 12:23 AM, Aleksandr Loktionov wrote:
> From: Konstantin Ilichev <konstantin.ilichev@intel.com>
>
> When an offline self-test is initiated with ethtool -t, any ongoing
> traffic could get stuck because ice_stop() and ice_open() are called
> without letting the OS know about state transitions. In most cases
> a write() system call would block.
>
> Fix this by calling dev_change_flags() to bring the netdev up and
> down, which ensures ndo_open()/ndo_stop() are called and all watchers
> are notified correctly.
+ Olek
AI review reports:
The ethtool core acquires the per-netdev mutex via netdev_lock_ops(dev)
before invoking the driver's .self_test callback. dev_change_flags() is
an exported API that explicitly re-acquires this exact same lock:
net/core/dev_api.c:dev_change_flags() {
...
netdev_lock_ops(dev);
ret = netif_change_flags(dev, flags, extack);
netdev_unlock_ops(dev);
...
}
Because dev->lock is a standard, non-recursive mutex, this will result
in a hard deadlock for any driver that opts into request_ops_lock. While
ice might not currently set this flag, introducing nested lock
acquisitions of the same mutex guarantees a deadlock as the subsystem
migrates toward per-netdev locking.
With ice netdev lock changes in progress [1], this would soon become an
issue.
Thanks,
Tony
[1]
https://lore.kernel.org/netdev/20260325200644.2528726-4-anthony.l.nguyen@intel.com/
> Fixes: 0e674aeb0b77 ("ice: Add handler for ethtool selftest")
> Cc: stable@vger.kernel.org
> Co-developed-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
> Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
> Signed-off-by: Konstantin Ilichev <konstantin.ilichev@intel.com>
> Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> ---
>
> drivers/net/ethernet/intel/ice/ice_ethtool.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> index 96d95af..2a4f06f 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> @@ -1416,7 +1416,7 @@ ice_self_test(struct net_device *netdev, struct ethtool_test *eth_test,
> /* If the device is online then take it offline */
> if (if_running)
> /* indicate we're in test mode */
> - ice_stop(netdev);
> + dev_change_flags(netdev, netdev->flags & ~IFF_UP, NULL);
>
> data[ICE_ETH_TEST_LINK] = ice_link_test(netdev);
> data[ICE_ETH_TEST_EEPROM] = ice_eeprom_test(netdev);
> @@ -1434,10 +1434,12 @@ ice_self_test(struct net_device *netdev, struct ethtool_test *eth_test,
> clear_bit(ICE_TESTING, pf->state);
>
> if (if_running) {
> - int status = ice_open(netdev);
> + int status = dev_change_flags(netdev,
> + netdev->flags | IFF_UP,
> + NULL);
>
> if (status) {
> - dev_err(dev, "Could not open device %s, err %d\n",
> + dev_err(dev, "Could not bring up device %s, err %d\n",
> pf->int_name, status);
> }
> }
WARNING: multiple messages have this Message-ID (diff)
From: Tony Nguyen <anthony.l.nguyen@intel.com>
To: Aleksandr Loktionov <aleksandr.loktionov@intel.com>,
<intel-wired-lan@lists.osuosl.org>,
Alexander Lobakin <aleksander.lobakin@intel.com>
Cc: <netdev@vger.kernel.org>,
Konstantin Ilichev <konstantin.ilichev@intel.com>,
Grzegorz Nitka <grzegorz.nitka@intel.com>
Subject: Re: [PATCH net] ice: fix netdev bring-up and bring-down in self-test
Date: Wed, 8 Apr 2026 14:12:28 -0700 [thread overview]
Message-ID: <c5f6796a-66de-40df-9f12-2bc7ff04be34@intel.com> (raw)
In-Reply-To: <20260327072332.130320-7-aleksandr.loktionov@intel.com>
On 3/27/2026 12:23 AM, Aleksandr Loktionov wrote:
> From: Konstantin Ilichev <konstantin.ilichev@intel.com>
>
> When an offline self-test is initiated with ethtool -t, any ongoing
> traffic could get stuck because ice_stop() and ice_open() are called
> without letting the OS know about state transitions. In most cases
> a write() system call would block.
>
> Fix this by calling dev_change_flags() to bring the netdev up and
> down, which ensures ndo_open()/ndo_stop() are called and all watchers
> are notified correctly.
+ Olek
AI review reports:
The ethtool core acquires the per-netdev mutex via netdev_lock_ops(dev)
before invoking the driver's .self_test callback. dev_change_flags() is
an exported API that explicitly re-acquires this exact same lock:
net/core/dev_api.c:dev_change_flags() {
...
netdev_lock_ops(dev);
ret = netif_change_flags(dev, flags, extack);
netdev_unlock_ops(dev);
...
}
Because dev->lock is a standard, non-recursive mutex, this will result
in a hard deadlock for any driver that opts into request_ops_lock. While
ice might not currently set this flag, introducing nested lock
acquisitions of the same mutex guarantees a deadlock as the subsystem
migrates toward per-netdev locking.
With ice netdev lock changes in progress [1], this would soon become an
issue.
Thanks,
Tony
[1]
https://lore.kernel.org/netdev/20260325200644.2528726-4-anthony.l.nguyen@intel.com/
> Fixes: 0e674aeb0b77 ("ice: Add handler for ethtool selftest")
> Cc: stable@vger.kernel.org
> Co-developed-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
> Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
> Signed-off-by: Konstantin Ilichev <konstantin.ilichev@intel.com>
> Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> ---
>
> drivers/net/ethernet/intel/ice/ice_ethtool.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> index 96d95af..2a4f06f 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> @@ -1416,7 +1416,7 @@ ice_self_test(struct net_device *netdev, struct ethtool_test *eth_test,
> /* If the device is online then take it offline */
> if (if_running)
> /* indicate we're in test mode */
> - ice_stop(netdev);
> + dev_change_flags(netdev, netdev->flags & ~IFF_UP, NULL);
>
> data[ICE_ETH_TEST_LINK] = ice_link_test(netdev);
> data[ICE_ETH_TEST_EEPROM] = ice_eeprom_test(netdev);
> @@ -1434,10 +1434,12 @@ ice_self_test(struct net_device *netdev, struct ethtool_test *eth_test,
> clear_bit(ICE_TESTING, pf->state);
>
> if (if_running) {
> - int status = ice_open(netdev);
> + int status = dev_change_flags(netdev,
> + netdev->flags | IFF_UP,
> + NULL);
>
> if (status) {
> - dev_err(dev, "Could not open device %s, err %d\n",
> + dev_err(dev, "Could not bring up device %s, err %d\n",
> pf->int_name, status);
> }
> }
next prev parent reply other threads:[~2026-04-08 21:12 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-27 7:23 [Intel-wired-lan] [PATCH net] ice: fix null-ptr dereference on false-positive tx timeout Aleksandr Loktionov
2026-03-27 7:23 ` Aleksandr Loktionov
2026-03-27 7:23 ` [Intel-wired-lan] [PATCH net] ice: fix locking around wait_event_interruptible_locked_irq Aleksandr Loktionov
2026-03-27 7:23 ` Aleksandr Loktionov
2026-04-03 9:11 ` [Intel-wired-lan] " Simon Horman
2026-04-03 9:11 ` Simon Horman
2026-05-08 7:01 ` [Intel-wired-lan] " Rinitha, SX
2026-05-08 7:01 ` Rinitha, SX
2026-03-27 7:23 ` [Intel-wired-lan] [PATCH net] ice: fix PTP Call Trace during PTP release Aleksandr Loktionov
2026-03-27 7:23 ` Aleksandr Loktionov
2026-04-03 9:05 ` [Intel-wired-lan] " Simon Horman
2026-04-03 9:05 ` Simon Horman
2026-03-27 7:23 ` [Intel-wired-lan] [PATCH net] ice: fix PTP hang for E825C devices Aleksandr Loktionov
2026-03-27 7:23 ` Aleksandr Loktionov
2026-04-03 12:31 ` [Intel-wired-lan] " Simon Horman
2026-04-03 12:31 ` Simon Horman
2026-05-04 12:11 ` [Intel-wired-lan] " Rinitha, SX
2026-05-04 12:11 ` Rinitha, SX
2026-03-27 7:23 ` [Intel-wired-lan] [PATCH net] ice: fix setting promisc mode while adding VID filter Aleksandr Loktionov
2026-03-27 7:23 ` Aleksandr Loktionov
2026-04-03 12:28 ` [Intel-wired-lan] " Simon Horman
2026-04-03 12:28 ` Simon Horman
2026-05-05 5:01 ` [Intel-wired-lan] " Rinitha, SX
2026-05-05 5:01 ` Rinitha, SX
2026-03-27 7:23 ` [Intel-wired-lan] [PATCH net] ice: fix ice_init_link() error return preventing probe Aleksandr Loktionov
2026-03-27 7:23 ` Aleksandr Loktionov
2026-04-03 12:36 ` [Intel-wired-lan] " Simon Horman
2026-04-03 12:36 ` Simon Horman
2026-04-03 12:38 ` [Intel-wired-lan] " Simon Horman
2026-04-03 12:38 ` Simon Horman
2026-03-27 7:23 ` [Intel-wired-lan] [PATCH net] ice: fix netdev bring-up and bring-down in self-test Aleksandr Loktionov
2026-03-27 7:23 ` Aleksandr Loktionov
2026-04-08 21:12 ` Tony Nguyen [this message]
2026-04-08 21:12 ` Tony Nguyen
2026-04-10 9:42 ` [Intel-wired-lan] " Alexander Lobakin
2026-04-10 9:42 ` Alexander Lobakin
2026-03-27 7:23 ` [Intel-wired-lan] [PATCH net] ice: stop DCBNL requests during driver unload Aleksandr Loktionov
2026-03-27 7:23 ` Aleksandr Loktionov
2026-04-03 13:06 ` [Intel-wired-lan] " Simon Horman
2026-04-03 13:06 ` Simon Horman
2026-04-08 21:08 ` [Intel-wired-lan] " Tony Nguyen
2026-04-08 21:08 ` Tony Nguyen
2026-03-27 7:23 ` [Intel-wired-lan] [PATCH net] ice: use READ_ONCE() to access cached PHC time Aleksandr Loktionov
2026-03-27 7:23 ` Aleksandr Loktionov
2026-04-03 12:55 ` [Intel-wired-lan] " Simon Horman
2026-04-03 12:55 ` Simon Horman
2026-05-14 5:42 ` [Intel-wired-lan] " Rinitha, SX
2026-05-14 5:42 ` Rinitha, SX
2026-05-05 5:08 ` [Intel-wired-lan] [PATCH net] ice: fix null-ptr dereference on false-positive tx timeout Rinitha, SX
2026-05-05 5:08 ` Rinitha, SX
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c5f6796a-66de-40df-9f12-2bc7ff04be34@intel.com \
--to=anthony.l.nguyen@intel.com \
--cc=aleksander.lobakin@intel.com \
--cc=aleksandr.loktionov@intel.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=konstantin.ilichev@intel.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.