* [PATCH 1/2] net: thunderbolt: Call tbnet_stop() upon shutdown @ 2026-04-27 8:16 Mika Westerberg 2026-04-27 8:16 ` [PATCH 2/2] net: thunderbolt: Fix lockdep issue during tunnel tear down Mika Westerberg 2026-04-29 1:12 ` [PATCH 1/2] net: thunderbolt: Call tbnet_stop() upon shutdown Jakub Kicinski 0 siblings, 2 replies; 9+ messages in thread From: Mika Westerberg @ 2026-04-27 8:16 UTC (permalink / raw) To: netdev Cc: Yehezkel Bernat, Andrew Lunn, David S . Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Mika Westerberg Stopping the rings is not enough for the core driver. It expected that the service drivers release them as well. For this reason call tbnet_stop() if the interface has been brought up upon shutdown. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> --- drivers/net/thunderbolt/main.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/thunderbolt/main.c b/drivers/net/thunderbolt/main.c index 7aae5d915a1e..631af237998d 100644 --- a/drivers/net/thunderbolt/main.c +++ b/drivers/net/thunderbolt/main.c @@ -1417,7 +1417,10 @@ static void tbnet_remove(struct tb_service *svc) static void tbnet_shutdown(struct tb_service *svc) { - tbnet_tear_down(tb_service_get_drvdata(svc), true); + struct tbnet *net = tb_service_get_drvdata(svc); + + if (netif_running(net->dev)) + tbnet_stop(net->dev); } static int tbnet_suspend(struct device *dev) -- 2.50.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/2] net: thunderbolt: Fix lockdep issue during tunnel tear down 2026-04-27 8:16 [PATCH 1/2] net: thunderbolt: Call tbnet_stop() upon shutdown Mika Westerberg @ 2026-04-27 8:16 ` Mika Westerberg 2026-04-29 1:12 ` Jakub Kicinski 2026-04-29 1:12 ` Jakub Kicinski 2026-04-29 1:12 ` [PATCH 1/2] net: thunderbolt: Call tbnet_stop() upon shutdown Jakub Kicinski 1 sibling, 2 replies; 9+ messages in thread From: Mika Westerberg @ 2026-04-27 8:16 UTC (permalink / raw) To: netdev Cc: Yehezkel Bernat, Andrew Lunn, David S . Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Mika Westerberg When unplugging cable with lockdep enabled it triggers following: ====================================================== WARNING: possible circular locking dependency detected 6.18.0-rc4+ #1636 Tainted: G S ------------------------------------------------------ kworker/u56:2/416 is trying to acquire lock: ffff88818642c8a8 ((work_completion)(&ring->work)){+.+.}-{0:0}, at: __flush_work+0x562/0xde0 but task is already holding lock: ffff888184b30fa8 (&net->connection_lock){+.+.}-{4:4}, at: tbnet_tear_down+0x110/0x6f0 [thunderbolt_net] We actually don't need to net->hold the connection_lock any more than necessary to figure out if the connection is up or not, and can return early if it is not. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> --- drivers/net/thunderbolt/main.c | 59 +++++++++++++++++----------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/drivers/net/thunderbolt/main.c b/drivers/net/thunderbolt/main.c index 631af237998d..d8fcf18fc55c 100644 --- a/drivers/net/thunderbolt/main.c +++ b/drivers/net/thunderbolt/main.c @@ -372,48 +372,47 @@ static void tbnet_free_buffers(struct tbnet_ring *ring) static void tbnet_tear_down(struct tbnet *net, bool send_logout) { + int ret, retries = TBNET_LOGOUT_RETRIES; + netif_carrier_off(net->dev); netif_stop_queue(net->dev); stop_login(net); mutex_lock(&net->connection_lock); + if (!net->login_sent || !net->login_received) { + mutex_unlock(&net->connection_lock); + return; + } + net->login_sent = false; + net->login_received = false; + mutex_unlock(&net->connection_lock); - if (net->login_sent && net->login_received) { - int ret, retries = TBNET_LOGOUT_RETRIES; + while (send_logout && retries-- > 0) { + netdev_dbg(net->dev, "sending logout request %u\n", + retries); + ret = tbnet_logout_request(net); + if (ret != -ETIMEDOUT) + break; + } - while (send_logout && retries-- > 0) { - netdev_dbg(net->dev, "sending logout request %u\n", - retries); - ret = tbnet_logout_request(net); - if (ret != -ETIMEDOUT) - break; - } + tb_ring_stop(net->rx_ring.ring); + tb_ring_stop(net->tx_ring.ring); + tbnet_free_buffers(&net->rx_ring); + tbnet_free_buffers(&net->tx_ring); - tb_ring_stop(net->rx_ring.ring); - tb_ring_stop(net->tx_ring.ring); - tbnet_free_buffers(&net->rx_ring); - tbnet_free_buffers(&net->tx_ring); - - ret = tb_xdomain_disable_paths(net->xd, - net->local_transmit_path, - net->tx_ring.ring->hop, - net->remote_transmit_path, - net->rx_ring.ring->hop); - if (ret) - netdev_warn(net->dev, "failed to disable DMA paths\n"); - - tb_xdomain_release_in_hopid(net->xd, net->remote_transmit_path); - net->remote_transmit_path = 0; - } + ret = tb_xdomain_disable_paths(net->xd, + net->local_transmit_path, + net->tx_ring.ring->hop, + net->remote_transmit_path, + net->rx_ring.ring->hop); + if (ret) + netdev_warn(net->dev, "failed to disable DMA paths\n"); - net->login_retries = 0; - net->login_sent = false; - net->login_received = false; + tb_xdomain_release_in_hopid(net->xd, net->remote_transmit_path); + net->remote_transmit_path = 0; netdev_dbg(net->dev, "network traffic stopped\n"); - - mutex_unlock(&net->connection_lock); } static int tbnet_handle_packet(const void *buf, size_t size, void *data) -- 2.50.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] net: thunderbolt: Fix lockdep issue during tunnel tear down 2026-04-27 8:16 ` [PATCH 2/2] net: thunderbolt: Fix lockdep issue during tunnel tear down Mika Westerberg @ 2026-04-29 1:12 ` Jakub Kicinski 2026-04-29 1:12 ` Jakub Kicinski 1 sibling, 0 replies; 9+ messages in thread From: Jakub Kicinski @ 2026-04-29 1:12 UTC (permalink / raw) To: Mika Westerberg Cc: netdev, Yehezkel Bernat, Andrew Lunn, David S . Miller, Eric Dumazet, Paolo Abeni On Mon, 27 Apr 2026 10:16:23 +0200 Mika Westerberg wrote: > When unplugging cable with lockdep enabled it triggers following: Sounds like a fix, should it have a Fixes tag? I'll also send out the AI review but on a quick look not sure if any of it is worth addressing. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] net: thunderbolt: Fix lockdep issue during tunnel tear down 2026-04-27 8:16 ` [PATCH 2/2] net: thunderbolt: Fix lockdep issue during tunnel tear down Mika Westerberg 2026-04-29 1:12 ` Jakub Kicinski @ 2026-04-29 1:12 ` Jakub Kicinski 2026-04-29 4:47 ` Mika Westerberg 1 sibling, 1 reply; 9+ messages in thread From: Jakub Kicinski @ 2026-04-29 1:12 UTC (permalink / raw) To: mika.westerberg Cc: Jakub Kicinski, netdev, YehezkelShB, andrew+netdev, davem, edumazet, pabeni This is an AI-generated review of your patch. The human sending this email has considered the AI review valid, or at least plausible. --- net: thunderbolt: Fix lockdep issue during tunnel tear down This commit attempts to fix a circular locking dependency warning in tbnet_tear_down() by dropping the connection lock earlier and returning if the connection isn't fully established. > diff --git a/drivers/net/thunderbolt/main.c b/drivers/net/thunderbolt/main.c > index 631af237998d..d8fcf18fc55c 100644 > --- a/drivers/net/thunderbolt/main.c > +++ b/drivers/net/thunderbolt/main.c [ ... ] > @@ -372,48 +372,47 @@ static void tbnet_free_buffers(struct tbnet_ring *ring) > > static void tbnet_tear_down(struct tbnet *net, bool send_logout) > { > + int ret, retries = TBNET_LOGOUT_RETRIES; > + > netif_carrier_off(net->dev); > netif_stop_queue(net->dev); > > stop_login(net); > > mutex_lock(&net->connection_lock); > + if (!net->login_sent || !net->login_received) { > + mutex_unlock(&net->connection_lock); > + return; > + } If the connection is in a partially established state (e.g. login_sent is true, but login_received is false), this early return skips clearing the connection states. Could this stall the connection if a new TBIP_LOGIN arrives later? tbnet_handle_packet() would see net->login_sent as true and might fail to queue the login_work to reply. > + net->login_sent = false; > + net->login_received = false; > + mutex_unlock(&net->connection_lock); By releasing net->connection_lock here, the rest of the teardown process runs without mutual exclusion. Since the network interface is still running, is it possible for tbnet_handle_packet() to receive a new TBIP_LOGIN request right after this lock is dropped? If tbnet_handle_packet() acquires the lock, updates net->remote_transmit_path and brings up a new connection concurrently: CPU1 tbnet_tear_down() mutex_unlock(&net->connection_lock); CPU2 tbnet_handle_packet() mutex_lock(&net->connection_lock); net->remote_transmit_path = pkg->transmit_path; mutex_unlock(&net->connection_lock); CPU1 tb_xdomain_release_in_hopid(net->xd, net->remote_transmit_path); Would CPU1 then erroneously release the newly established connection's hopid and free active buffers? > > - if (net->login_sent && net->login_received) { > - int ret, retries = TBNET_LOGOUT_RETRIES; [ ... ] > - tb_xdomain_release_in_hopid(net->xd, net->remote_transmit_path); > - net->remote_transmit_path = 0; > - } > + tb_xdomain_release_in_hopid(net->xd, net->remote_transmit_path); > + net->remote_transmit_path = 0; > > - net->login_retries = 0; With the unconditional clearing of net->login_retries removed, does the login_retries counter keep accumulating if tbnet_tear_down() returns early above? If it exceeds TBNET_LOGIN_RETRIES, could it permanently prevent new connections until the module is reloaded? > - net->login_sent = false; > - net->login_received = false; > > netdev_dbg(net->dev, "network traffic stopped\n"); > - > - mutex_unlock(&net->connection_lock); > } ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] net: thunderbolt: Fix lockdep issue during tunnel tear down 2026-04-29 1:12 ` Jakub Kicinski @ 2026-04-29 4:47 ` Mika Westerberg 0 siblings, 0 replies; 9+ messages in thread From: Mika Westerberg @ 2026-04-29 4:47 UTC (permalink / raw) To: Jakub Kicinski Cc: netdev, YehezkelShB, andrew+netdev, davem, edumazet, pabeni On Tue, Apr 28, 2026 at 06:12:26PM -0700, Jakub Kicinski wrote: > This is an AI-generated review of your patch. The human sending this > email has considered the AI review valid, or at least plausible. > --- > net: thunderbolt: Fix lockdep issue during tunnel tear down > > This commit attempts to fix a circular locking dependency warning in > tbnet_tear_down() by dropping the connection lock earlier and returning if the > connection isn't fully established. > > > diff --git a/drivers/net/thunderbolt/main.c b/drivers/net/thunderbolt/main.c > > index 631af237998d..d8fcf18fc55c 100644 > > --- a/drivers/net/thunderbolt/main.c > > +++ b/drivers/net/thunderbolt/main.c > [ ... ] > > @@ -372,48 +372,47 @@ static void tbnet_free_buffers(struct tbnet_ring *ring) > > > > static void tbnet_tear_down(struct tbnet *net, bool send_logout) > > { > > + int ret, retries = TBNET_LOGOUT_RETRIES; > > + > > netif_carrier_off(net->dev); > > netif_stop_queue(net->dev); > > > > stop_login(net); > > > > mutex_lock(&net->connection_lock); > > + if (!net->login_sent || !net->login_received) { > > + mutex_unlock(&net->connection_lock); > > + return; > > + } > > If the connection is in a partially established state (e.g. login_sent is > true, but login_received is false), this early return skips clearing the > connection states. > > Could this stall the connection if a new TBIP_LOGIN arrives later? > tbnet_handle_packet() would see net->login_sent as true and might fail to > queue the login_work to reply. I don't think that matters because tbnet_tear_down() is actually tearing down the connection so after this we do not expect the connection to be established until start_login() is called again (this happens when the interface is brought up again or on resume). > > + net->login_sent = false; > > + net->login_received = false; > > + mutex_unlock(&net->connection_lock); > > By releasing net->connection_lock here, the rest of the teardown process runs > without mutual exclusion. Since the network interface is still running, is it > possible for tbnet_handle_packet() to receive a new TBIP_LOGIN request right > after this lock is dropped? > > If tbnet_handle_packet() acquires the lock, updates net->remote_transmit_path > and brings up a new connection concurrently: > > CPU1 > tbnet_tear_down() > mutex_unlock(&net->connection_lock); > > CPU2 > tbnet_handle_packet() > mutex_lock(&net->connection_lock); > net->remote_transmit_path = pkg->transmit_path; > mutex_unlock(&net->connection_lock); > > CPU1 > tb_xdomain_release_in_hopid(net->xd, net->remote_transmit_path); > > Would CPU1 then erroneously release the newly established connection's hopid > and free active buffers? Oh, this one definitely can happen. > > > > - if (net->login_sent && net->login_received) { > > - int ret, retries = TBNET_LOGOUT_RETRIES; > [ ... ] > > - tb_xdomain_release_in_hopid(net->xd, net->remote_transmit_path); > > - net->remote_transmit_path = 0; > > - } > > + tb_xdomain_release_in_hopid(net->xd, net->remote_transmit_path); > > + net->remote_transmit_path = 0; > > > > - net->login_retries = 0; > > With the unconditional clearing of net->login_retries removed, does the > login_retries counter keep accumulating if tbnet_tear_down() returns early > above? > > If it exceeds TBNET_LOGIN_RETRIES, could it permanently prevent new > connections until the module is reloaded? Indeed, that's an accidental removal. Okay let me try to figure out better fix for this lockdep issue. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] net: thunderbolt: Call tbnet_stop() upon shutdown 2026-04-27 8:16 [PATCH 1/2] net: thunderbolt: Call tbnet_stop() upon shutdown Mika Westerberg 2026-04-27 8:16 ` [PATCH 2/2] net: thunderbolt: Fix lockdep issue during tunnel tear down Mika Westerberg @ 2026-04-29 1:12 ` Jakub Kicinski 2026-04-29 5:30 ` Mika Westerberg 1 sibling, 1 reply; 9+ messages in thread From: Jakub Kicinski @ 2026-04-29 1:12 UTC (permalink / raw) To: mika.westerberg Cc: Jakub Kicinski, netdev, YehezkelShB, andrew+netdev, davem, edumazet, pabeni This is an AI-generated review of your patch. The human sending this email has considered the AI review valid, or at least plausible. --- net: thunderbolt: Call tbnet_stop() upon shutdown This commit updates the shutdown callback for the Thunderbolt network service driver to call tbnet_stop() if the interface is running. This ensures the service drivers release the rings upon shutdown. > diff --git a/drivers/net/thunderbolt/main.c b/drivers/net/thunderbolt/main.c > index 7aae5d915a1e..631af237998d 100644 > --- a/drivers/net/thunderbolt/main.c > +++ b/drivers/net/thunderbolt/main.c > @@ -1417,7 +1417,10 @@ static void tbnet_remove(struct tb_service *svc) > > static void tbnet_shutdown(struct tb_service *svc) > { > - tbnet_tear_down(tb_service_get_drvdata(svc), true); > + struct tbnet *net = tb_service_get_drvdata(svc); > + > + if (netif_running(net->dev)) > + tbnet_stop(net->dev); Does calling tbnet_stop() directly bypass the network stack teardown sequence? tbnet_stop() appears to be the driver's ndo_stop callback. By bypassing dev_close(), netif_tx_disable() is not called and the device's transmit queues remain active. tbnet_stop() destroys the DMA rings and explicitly sets net->tx_ring.ring to NULL: drivers/net/thunderbolt/main.c:tbnet_stop() { ... tb_ring_free(net->tx_ring.ring); net->tx_ring.ring = NULL; ... } If a concurrent transmission occurs, will tbnet_start_xmit() access the null pointer and cause a crash? Additionally, since this does not hold the rtnl_lock(), could this race with concurrent administrative state changes (like 'ip link set dev down') and lead to a double-execution of tbnet_stop()? > } > > static int tbnet_suspend(struct device *dev) -- pw-bot: cr ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] net: thunderbolt: Call tbnet_stop() upon shutdown 2026-04-29 1:12 ` [PATCH 1/2] net: thunderbolt: Call tbnet_stop() upon shutdown Jakub Kicinski @ 2026-04-29 5:30 ` Mika Westerberg 2026-04-29 13:31 ` Andrew Lunn 0 siblings, 1 reply; 9+ messages in thread From: Mika Westerberg @ 2026-04-29 5:30 UTC (permalink / raw) To: Jakub Kicinski Cc: netdev, YehezkelShB, andrew+netdev, davem, edumazet, pabeni On Tue, Apr 28, 2026 at 06:12:24PM -0700, Jakub Kicinski wrote: > This is an AI-generated review of your patch. The human sending this > email has considered the AI review valid, or at least plausible. > --- > net: thunderbolt: Call tbnet_stop() upon shutdown > > This commit updates the shutdown callback for the Thunderbolt network service > driver to call tbnet_stop() if the interface is running. This ensures the > service drivers release the rings upon shutdown. > > > diff --git a/drivers/net/thunderbolt/main.c b/drivers/net/thunderbolt/main.c > > index 7aae5d915a1e..631af237998d 100644 > > --- a/drivers/net/thunderbolt/main.c > > +++ b/drivers/net/thunderbolt/main.c > > @@ -1417,7 +1417,10 @@ static void tbnet_remove(struct tb_service *svc) > > > > static void tbnet_shutdown(struct tb_service *svc) > > { > > - tbnet_tear_down(tb_service_get_drvdata(svc), true); > > + struct tbnet *net = tb_service_get_drvdata(svc); > > + > > + if (netif_running(net->dev)) > > + tbnet_stop(net->dev); > > Does calling tbnet_stop() directly bypass the network stack teardown sequence? This is called when the machine is rebooted or shut down to quiesce the device. I don't think the network stack has anything similar? > tbnet_stop() appears to be the driver's ndo_stop callback. By bypassing > dev_close(), netif_tx_disable() is not called and the device's transmit queues > remain active. tbnet_stop() calls tbnet_tear_down() that calls netif_stop_queue() which should stop the queue. > tbnet_stop() destroys the DMA rings and explicitly sets net->tx_ring.ring > to NULL: > > drivers/net/thunderbolt/main.c:tbnet_stop() { > ... > tb_ring_free(net->tx_ring.ring); > net->tx_ring.ring = NULL; > ... > } > > If a concurrent transmission occurs, will tbnet_start_xmit() access the null > pointer and cause a crash? It should not happen see above. > Additionally, since this does not hold the rtnl_lock(), could this race > with concurrent administrative state changes (like 'ip link set dev down') > and lead to a double-execution of tbnet_stop()? As far as I can tell no because when these hooks are called userspace is not running anymore (we are rebooting or shutting down). ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] net: thunderbolt: Call tbnet_stop() upon shutdown 2026-04-29 5:30 ` Mika Westerberg @ 2026-04-29 13:31 ` Andrew Lunn 2026-04-29 16:57 ` Mika Westerberg 0 siblings, 1 reply; 9+ messages in thread From: Andrew Lunn @ 2026-04-29 13:31 UTC (permalink / raw) To: Mika Westerberg Cc: Jakub Kicinski, netdev, YehezkelShB, andrew+netdev, davem, edumazet, pabeni On Wed, Apr 29, 2026 at 07:30:46AM +0200, Mika Westerberg wrote: > On Tue, Apr 28, 2026 at 06:12:24PM -0700, Jakub Kicinski wrote: > > This is an AI-generated review of your patch. The human sending this > > email has considered the AI review valid, or at least plausible. > > --- > > net: thunderbolt: Call tbnet_stop() upon shutdown > > > > This commit updates the shutdown callback for the Thunderbolt network service > > driver to call tbnet_stop() if the interface is running. This ensures the > > service drivers release the rings upon shutdown. > > > > > diff --git a/drivers/net/thunderbolt/main.c b/drivers/net/thunderbolt/main.c > > > index 7aae5d915a1e..631af237998d 100644 > > > --- a/drivers/net/thunderbolt/main.c > > > +++ b/drivers/net/thunderbolt/main.c > > > @@ -1417,7 +1417,10 @@ static void tbnet_remove(struct tb_service *svc) > > > > > > static void tbnet_shutdown(struct tb_service *svc) > > > { > > > - tbnet_tear_down(tb_service_get_drvdata(svc), true); > > > + struct tbnet *net = tb_service_get_drvdata(svc); > > > + > > > + if (netif_running(net->dev)) > > > + tbnet_stop(net->dev); > > > > Does calling tbnet_stop() directly bypass the network stack teardown sequence? > > This is called when the machine is rebooted or shut down to quiesce the > device. I don't think the network stack has anything similar? You mean that network interfaces are left running while the machine reboots, potentially DMAing receive packets over the bootloader or freshly loaded kernel? Does that seem reasonable? Don't you think the core will somehow call the .close function? I cannot point to the code doing that without a bit if searching, but i think it probably exists. Andrew ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] net: thunderbolt: Call tbnet_stop() upon shutdown 2026-04-29 13:31 ` Andrew Lunn @ 2026-04-29 16:57 ` Mika Westerberg 0 siblings, 0 replies; 9+ messages in thread From: Mika Westerberg @ 2026-04-29 16:57 UTC (permalink / raw) To: Andrew Lunn Cc: Jakub Kicinski, netdev, YehezkelShB, andrew+netdev, davem, edumazet, pabeni On Wed, Apr 29, 2026 at 03:31:43PM +0200, Andrew Lunn wrote: > On Wed, Apr 29, 2026 at 07:30:46AM +0200, Mika Westerberg wrote: > > On Tue, Apr 28, 2026 at 06:12:24PM -0700, Jakub Kicinski wrote: > > > This is an AI-generated review of your patch. The human sending this > > > email has considered the AI review valid, or at least plausible. > > > --- > > > net: thunderbolt: Call tbnet_stop() upon shutdown > > > > > > This commit updates the shutdown callback for the Thunderbolt network service > > > driver to call tbnet_stop() if the interface is running. This ensures the > > > service drivers release the rings upon shutdown. > > > > > > > diff --git a/drivers/net/thunderbolt/main.c b/drivers/net/thunderbolt/main.c > > > > index 7aae5d915a1e..631af237998d 100644 > > > > --- a/drivers/net/thunderbolt/main.c > > > > +++ b/drivers/net/thunderbolt/main.c > > > > @@ -1417,7 +1417,10 @@ static void tbnet_remove(struct tb_service *svc) > > > > > > > > static void tbnet_shutdown(struct tb_service *svc) > > > > { > > > > - tbnet_tear_down(tb_service_get_drvdata(svc), true); > > > > + struct tbnet *net = tb_service_get_drvdata(svc); > > > > + > > > > + if (netif_running(net->dev)) > > > > + tbnet_stop(net->dev); > > > > > > Does calling tbnet_stop() directly bypass the network stack teardown sequence? > > > > This is called when the machine is rebooted or shut down to quiesce the > > device. I don't think the network stack has anything similar? > > You mean that network interfaces are left running while the machine > reboots, potentially DMAing receive packets over the bootloader or > freshly loaded kernel? Does that seem reasonable? Hey! 20+ years ago I spent quite amount of time to investigate an issue exactly like that where ramdisk randomly corrupted. Not fun. > Don't you think the core will somehow call the .close function? I cannot > point to the code doing that without a bit if searching, but i think it > probably exists. If I do 'reboot -f' .ndo_stop (I think that's what you mean by .close) is not called. If I do just 'reboot' it is called. I suspect based on my added WARN_ON() that it is done by userspace shutdown scripts. ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-04-29 16:57 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-04-27 8:16 [PATCH 1/2] net: thunderbolt: Call tbnet_stop() upon shutdown Mika Westerberg 2026-04-27 8:16 ` [PATCH 2/2] net: thunderbolt: Fix lockdep issue during tunnel tear down Mika Westerberg 2026-04-29 1:12 ` Jakub Kicinski 2026-04-29 1:12 ` Jakub Kicinski 2026-04-29 4:47 ` Mika Westerberg 2026-04-29 1:12 ` [PATCH 1/2] net: thunderbolt: Call tbnet_stop() upon shutdown Jakub Kicinski 2026-04-29 5:30 ` Mika Westerberg 2026-04-29 13:31 ` Andrew Lunn 2026-04-29 16:57 ` Mika Westerberg
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox