From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: Chunfeng Yun <chunfeng.yun@mediatek.com>
Cc: Mika Westerberg <westeri@kernel.org>,
Andreas Noever <andreas.noever@gmail.com>,
Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>,
Sven Peter <sven@kernel.org>,
Yehezkel Bernat <YehezkelShB@gmail.com>,
Matthias Brugger <matthias.bgg@gmail.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org
Subject: Re: [PATCH v2 7/7] thunderbolt: prevent pcie tunnel activation/teardown warnings
Date: Tue, 10 Nov 2026 15:50:04 +0100 [thread overview]
Message-ID: <20261110145004.GF259790@black.igk.intel.com> (raw)
In-Reply-To: <20261110114925.722014-8-chunfeng.yun@mediatek.com>
On Tue, Nov 10, 2026 at 07:48:55PM +0800, Chunfeng Yun wrote:
> When usb4 enter sleep mode, echo 1 to authorized of sysfile,
> will wakeup usb4 driver, but fail to create pcie tunnel, cause
> the warning due to a race condition between router disconnect
> during resume and user authorization
This is hard to understand.
Also PCIe, USB4 and so on.
>
> [ 278.831186] usb4_hi NVDA8100:00: 0:1: is unplugged (state: 7), retrying...
> [ 278.943031] usb4_hi NVDA8100:00: 0:1: failed to reach state TB_PORT_UP. Ignoring port...
> [ 278.951125] usb4_hi NVDA8100:00: 0:1: lost during suspend, disconnecting
> ...
> [ 279.013763] usb4_hi NVDA8100:00: 0:7 <-> 1:9 (PCI): activating
> [ 279.019587] usb4_hi NVDA8100:00: activating PCIe Down path from 0:7 to 1:9
> [ 279.026468] usb4_hi NVDA8100:00: 1:1: Writing hop 1
> [ 279.031335] usb4_hi NVDA8100:00: 1:1: In HopID: 8 => Out port: 9 Out HopID: 8
> [ 279.038546] usb4_hi NVDA8100:00: 1:1: Weight: 1 Priority: 3 Credits: 32 Drop: 0 PM: 0
> [ 279.046536] usb4_hi NVDA8100:00: 1:1: Counter enabled: 0 Counter index: 2047
> [ 279.053834] usb4_hi NVDA8100:00: 1:1: Flow Control (In/Eg): 1/0 Shared Buffer (In/Eg): 0/0
> [ 279.062259] usb4_hi NVDA8100:00: 1:1: Unknown1: 0x0 Unknown2: 0x0 Unknown3: 0x0
> [ 279.069730] ------------[ cut here ]------------
> [ 279.074335] usb4_hi NVDA8100:00: PCIe Down path activation failed
> [ 279.080426] WARNING: CPU: 5 PID: 2433 at drivers/thunderbolt/path.c:587 tb_path_activate+0x1a4/0x5b0
> ...
> [ 279.220285] Call trace:
> [ 279.222722] tb_path_activate+0x1a4/0x5b0 (P)
> [ 279.227068] tb_tunnel_activate+0x140/0x498
> [ 279.231241] tb_tunnel_pci+0x180/0x490
> [ 279.234980] tb_domain_approve_switch+0x74/0xb0
> [ 279.239500] authorized_store+0x214/0x270
> [ 279.243498] dev_attr_store+0x20/0x70
> ...
> [ 279.288888] ---[ end trace 0000000000000000 ]---
> [ 279.293497] usb4_hi NVDA8100:00: 0:7 <-> 1:9 (PCI): activation failed
>
> When usb4 enter sleep mode, echo 0 to authorized of sysfile,
> will wakeup usb4 driver, but fail to disconnect pcie due to
> the PCIe tunnel had already been torn down and freed if the port
> is fail to resume,
Please put the steps like:
1) Boot the system, nothing connected.
2) Once booted up, connected device.
3) Authorize PCIe tunnel via echo 1 > ..
...
So that we can see what are the steps you reproduce this. The above is
really hard to follow at least to me.
>
> [ 545.887822] usb4_hi NVDA8100:00: 0:1: is unplugged (state: 7), retrying...
> [ 545.998689] usb4_hi NVDA8100:00: 0:1: failed to reach state TB_PORT_UP. Ignoring port...
> [ 546.006778] usb4_hi NVDA8100:00: 0:1: lost during suspend, disconnecting
> [ 546.013474] usb4_hi NVDA8100:00: 0:4 <-> 1:16 (USB3): deactivating
> [ 546.020449] usb4_hi NVDA8100:00: deactivating USB3 Down path from 0:4 to 1:16
> [ 546.027959] usb4_hi NVDA8100:00: deactivating USB3 Up path from 1:16 to 0:4
> [ 546.035649] usb4_hi NVDA8100:00: 0:7 <-> 1:9 (PCI): deactivating
> [ 546.042463] usb4_hi NVDA8100:00: deactivating PCIe Down path from 0:7 to 1:9
> [ 546.050320] usb4_hi NVDA8100:00: deactivating PCIe Up path from 1:9 to 0:7
> [ 546.057790] usb4_hi NVDA8100:00: 0: TMU: mode change off -> bi-directional, HiFi requested
> [ 546.067910] usb4_hi NVDA8100:00: 0: TMU: mode set to: bi-directional, HiFi
> [ 546.076120] usb4_hi NVDA8100:00: 0:1: total credits changed 66 -> 66
> [ 546.082844] usb4_hi NVDA8100:00: 1: link width set to symmetric, dual lanes
> [ 546.089815] ------------[ cut here ]------------
> [ 546.094420] WARNING: CPU: 7 PID: 2433 at drivers/thunderbolt/tb.c:2245 tb_disconnect_pci+0x108/0x120
> ...
> [ 546.238810] Call trace:
> [ 546.241246] tb_disconnect_pci+0x108/0x120 (P)
> [ 546.245680] tb_domain_disapprove_switch+0x24/0x60
> [ 546.250464] disapprove_switch+0xbc/0xe8
> [ 546.254378] authorized_store+0x19c/0x270
> [ 546.258378] dev_attr_store+0x20/0x70
> ...
> [ 546.303767] ---[ end trace 0000000000000000 ]---
>
> The check prevents a redundant lookup and eliminates the warning
>
> Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
> ---
> v2: no changes
> ---
> drivers/thunderbolt/switch.c | 5 +++++
> drivers/thunderbolt/tb.c | 7 +++++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c
> index e12546bfb869..6e9f439ebf3f 100644
> --- a/drivers/thunderbolt/switch.c
> +++ b/drivers/thunderbolt/switch.c
> @@ -1850,6 +1850,11 @@ static int tb_switch_set_authorized(struct tb_switch *sw, unsigned int val)
> if (!!sw->authorized == !!val)
> goto unlock;
>
> + if (sw->is_unplugged) {
> + ret = -ENODEV;
> + goto unlock;
> + }
> +
> switch (val) {
> /* Disapprove switch */
> case 0:
> diff --git a/drivers/thunderbolt/tb.c b/drivers/thunderbolt/tb.c
> index 57c11ba13459..69310622d786 100644
> --- a/drivers/thunderbolt/tb.c
> +++ b/drivers/thunderbolt/tb.c
> @@ -2266,6 +2266,10 @@ static int tb_disconnect_pci(struct tb *tb, struct tb_switch *sw)
> struct tb_tunnel *tunnel;
> struct tb_port *up;
>
> + /* If the switch has already been unplugged, tunnels are already freed */
router
everywhere
> + if (sw->is_unplugged)
> + return 0;
> +
Actually I'm thinking that we can just get rid of the WARN_ON()s instead.
If the router is gone we cannot find the upstream port nor the tunnel and
that's fine so just return error instead.
> up = tb_switch_find_port(sw, TB_TYPE_PCIE_UP);
> if (WARN_ON(!up))
> return -ENODEV;
> @@ -2288,6 +2292,9 @@ static int tb_tunnel_pci(struct tb *tb, struct tb_switch *sw)
> struct tb_cm *tcm = tb_priv(tb);
> struct tb_tunnel *tunnel;
>
> + if (sw->is_unplugged)
> + return -ENODEV;
> +
> up = tb_switch_find_port(sw, TB_TYPE_PCIE_UP);
> if (!up)
> return 0;
> --
> 2.45.2
prev parent reply other threads:[~2026-11-10 14:50 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-10 11:48 [PATCH 0/7] thunderbolt: Add support platform NHI driver Chunfeng Yun
2026-11-10 11:48 ` [PATCH v2 1/7] thunderbolt: Prefix NHI core functions with tb_ and tb_ring_ Chunfeng Yun
2026-11-10 12:42 ` Konrad Dybcio
2026-11-10 11:48 ` [PATCH v2 2/7] thunderbolt: Move ICM mailbox functions to icm.c and internalize interrupt work Chunfeng Yun
2026-11-10 14:24 ` Mika Westerberg
2026-11-10 11:48 ` [PATCH v2 3/7] thunderbolt: Make PCIe NHI support opt-in Chunfeng Yun
2026-11-10 11:48 ` [PATCH v2 4/7] thunderbolt: add platform NHI driver Chunfeng Yun
2026-11-10 12:43 ` Konrad Dybcio
2026-11-10 14:37 ` Mika Westerberg
2026-11-10 11:48 ` [PATCH v2 5/7] thunderbolt: increase the lane adapter link-up timeout value Chunfeng Yun
2026-11-10 14:39 ` Mika Westerberg
2026-11-10 11:48 ` [PATCH v2 6/7] thunderbolt: decouple the waiting time of TB_PORT_UNPLUGGED and TB_PORT_UP Chunfeng Yun
2026-11-10 14:40 ` Mika Westerberg
2026-11-10 11:48 ` [PATCH v2 7/7] thunderbolt: prevent pcie tunnel activation/teardown warnings Chunfeng Yun
2026-11-10 14:50 ` Mika Westerberg [this message]
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=20261110145004.GF259790@black.igk.intel.com \
--to=mika.westerberg@linux.intel.com \
--cc=YehezkelShB@gmail.com \
--cc=andreas.noever@gmail.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=chunfeng.yun@mediatek.com \
--cc=gregkh@linuxfoundation.org \
--cc=konrad.dybcio@oss.qualcomm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-usb@vger.kernel.org \
--cc=matthias.bgg@gmail.com \
--cc=sven@kernel.org \
--cc=westeri@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®