From: sashiko-bot@kernel.org
To: "Sven Peter" <sven@kernel.org>
Cc: conor+dt@kernel.org, devicetree@vger.kernel.org, robh@kernel.org
Subject: Re: [PATCH 08/19] thunderbolt: Allocate ring HopID before requesting the ring interrupt
Date: Sun, 30 Aug 2026 20:32:58 +0000 [thread overview]
Message-ID: <20260830203258.D77391F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260830-b4-apple-soc-tbt-v1-8-44bc9348683c@kernel.org>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] The teardown order in tb_ring_free() was not updated to match the new reversed initialization order in tb_ring_alloc(), introducing a race condition where a hop ID is freed before its associated IRQ is released.
--
commit ed19fe4c2978aaf176d934b42ef25a517be4cd98
Author: Sven Peter <sven@kernel.org>
thunderbolt: Allocate ring HopID before requesting the ring interrupt
This commit changes the setup order in tb_ring_alloc() to allocate the
HopID before requesting the ring interrupt. This is necessary because
the Apple NHI picks the interrupt based on the HopID.
> diff --git a/drivers/thunderbolt/nhi.c b/drivers/thunderbolt/nhi.c
> index 5809809f64d42..6a97dcd57deb2 100644
> --- a/drivers/thunderbolt/nhi.c
> +++ b/drivers/thunderbolt/nhi.c
[ ... ]
> @@ -581,19 +591,18 @@ static struct tb_ring *tb_ring_alloc(struct tb_nhi *nhi, u32 hop, int size,
> if (!ring->descriptors)
> goto err_free_ring;
>
> + if (nhi_alloc_hop(nhi, ring))
> + goto err_free_descs;
> +
> if (!(flags & RING_FLAG_NO_INTERRUPT) && nhi->ops->request_ring_irq) {
> if (nhi->ops->request_ring_irq(ring, flags & RING_FLAG_NO_SUSPEND))
> - goto err_free_descs;
> + goto err_free_hop;
> }
>
> - if (nhi_alloc_hop(nhi, ring))
> - goto err_release_msix;
[Severity: High]
Since the allocation order in tb_ring_alloc() is reversed here so the hop ID
is allocated before the IRQ, does the teardown order in tb_ring_free() also
need to be updated to match?
Looking at tb_ring_free(), it clears the hop ID from the nhi arrays and drops
the lock before releasing the IRQ:
drivers/thunderbolt/nhi.c:tb_ring_free() {
...
if (ring->is_tx)
ring->nhi->tx_rings[ring->hop] = NULL;
else
ring->nhi->rx_rings[ring->hop] = NULL;
...
spin_unlock_irq(&ring->nhi->lock);
if (nhi->ops->release_ring_irq)
nhi->ops->release_ring_irq(ring);
...
}
Could this leave a window during concurrent hotplug, stream/network
initialization, or teardown of multiple devices where another thread calling
tb_ring_alloc() dynamically reallocates this same, newly-available hop ID?
If that happens, especially on Apple NHI where the IRQ is determined directly
by the hop ID, the new thread might attempt to request an IRQ that is still
registered to the old ring. Would this cause devm_request_irq() to fail
with an unexpected -EBUSY?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260830-b4-apple-soc-tbt-v1-0-44bc9348683c@kernel.org?part=8
next prev parent reply other threads:[~2026-08-30 20:32 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-30 20:19 [PATCH 00/19] Initial USB4/Thunderbolt support for Apple M1/M2/M3 SoCs Sven Peter
2026-08-30 20:19 ` [PATCH 01/19] dt-bindings: usb: Add thunderbolt-switch property Sven Peter
2026-08-30 20:19 ` [PATCH 02/19] usb: typec: Add thunderbolt switch Sven Peter
2026-08-30 20:30 ` sashiko-bot
2026-09-01 11:17 ` Heikki Krogerus
2026-09-01 18:53 ` Sven Peter
2026-08-30 20:19 ` [PATCH 03/19] usb: typec: tipd: Hook up Thunderbolt switch for CD321x Sven Peter
2026-08-30 20:36 ` sashiko-bot
2026-08-30 20:19 ` [PATCH 04/19] dt-bindings: thunderbolt: Add Apple USB4/Thunderbolt NHI Sven Peter
2026-08-30 20:19 ` [PATCH 05/19] dt-bindings: thunderbolt: Add Apple USB4/Thunderbolt ACIO block Sven Peter
2026-08-30 20:31 ` sashiko-bot
2026-08-30 20:19 ` [PATCH 06/19] thunderbolt: Try reading host DROM from device tree first Sven Peter
2026-08-30 20:33 ` sashiko-bot
2026-09-01 8:48 ` Mika Westerberg
2026-08-30 20:19 ` [PATCH 07/19] thunderbolt: Don't read the UID if we already know it Sven Peter
2026-08-30 20:19 ` [PATCH 08/19] thunderbolt: Allocate ring HopID before requesting the ring interrupt Sven Peter
2026-08-30 20:32 ` sashiko-bot [this message]
2026-08-30 20:19 ` [PATCH 09/19] thunderbolt: Add ring_interrupt_active to tb_nhi_ops Sven Peter
2026-08-30 20:19 ` [PATCH 10/19] thunderbolt: Make the ring register layout configurable Sven Peter
2026-09-01 8:58 ` Mika Westerberg
2026-09-01 18:56 ` Sven Peter
2026-08-30 20:19 ` [PATCH 11/19] thunderbolt: Add ring_interrupt_mask to tb_nhi_ops Sven Peter
2026-08-30 20:19 ` [PATCH 12/19] thunderbolt: Add ring_configure " Sven Peter
2026-08-30 20:28 ` sashiko-bot
2026-08-30 20:19 ` [PATCH 13/19] thunderbolt: Add QUIRK_NO_DMA_PORT Sven Peter
2026-09-01 9:04 ` Mika Westerberg
2026-09-01 17:06 ` Sven Peter
2026-08-30 20:19 ` [PATCH 14/19] thunderbolt: Add QUIRK_NO_USB3_BW_ALLOC Sven Peter
2026-09-01 9:12 ` Mika Westerberg
2026-08-30 20:19 ` [PATCH 15/19] thunderbolt: Export symbols required by the Apple Silicon driver Sven Peter
2026-08-30 20:19 ` [PATCH 16/19] thunderbolt: Add Apple Silicon support Sven Peter
2026-08-30 20:39 ` sashiko-bot
2026-09-01 10:09 ` Mika Westerberg
2026-09-01 19:06 ` Sven Peter
2026-08-30 20:19 ` [PATCH 17/19] arm64: dts: apple: t8103: Add USB4 ACIO and NHI Sven Peter
2026-09-01 10:20 ` Mika Westerberg
2026-08-30 20:19 ` [PATCH 18/19] arm64: dts: apple: t8112: " Sven Peter
2026-08-30 20:39 ` sashiko-bot
2026-08-30 20:19 ` [PATCH 19/19] arm64: dts: apple: t60xx: " Sven Peter
2026-08-31 17:44 ` [PATCH 00/19] Initial USB4/Thunderbolt support for Apple M1/M2/M3 SoCs Joshua Peisach
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=20260830203258.D77391F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=sven@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.