From: sashiko-bot@kernel.org
To: "Koichiro Den" <den@valinux.co.jp>
Cc: linux-pci@vger.kernel.org, devicetree@vger.kernel.org,
robh@kernel.org, conor+dt@kernel.org,
wsa+renesas@sang-engineering.com
Subject: Re: [PATCH v4 10/18] PCI: dwc: Free the MSI domain after the host .deinit() callback
Date: Thu, 15 Oct 2026 03:44:13 +0000 [thread overview]
Message-ID: <sashiko-outbox-172221@kernel.org> (raw)
In-Reply-To: <20261015033103.3076869-11-den@valinux.co.jp>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] pci: dwc: missing synchronize_irq() after removing chained MSI handlers
--
commit 5f29144f527d9dfd0c8c7686f0d2791d38c14098
Author: Koichiro Den <den@valinux.co.jp>
PCI: dwc: Free the MSI domain after the host .deinit() callback
dw_pcie_host_deinit() frees the iMSI-RX domain before calling the host
.deinit() callback. For a core-owned parent interrupt,
dw_pcie_free_msi() removes the chained handler right before the domain.
> diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
> index 63b38532d069a..774e1936d9991 100644
> --- a/drivers/pci/controller/dwc/pcie-designware-host.c
> +++ b/drivers/pci/controller/dwc/pcie-designware-host.c
> @@ -228,7 +228,7 @@ int dw_pcie_allocate_domains(struct dw_pcie_rp *pp)
> }
> EXPORT_SYMBOL_GPL(dw_pcie_allocate_domains);
>
> -void dw_pcie_free_msi(struct dw_pcie_rp *pp)
> +static void dw_pcie_remove_msi_handlers(struct dw_pcie_rp *pp)
> {
> u32 ctrl;
>
> @@ -236,8 +236,18 @@ void dw_pcie_free_msi(struct dw_pcie_rp *pp)
> if (pp->msi_irq[ctrl] > 0)
> irq_set_chained_handler_and_data(pp->msi_irq[ctrl], NULL, NULL);
> }
> +}
[Severity: High]
Does this code need a call to synchronize_irq() here?
irq_set_chained_handler_and_data() uninstalls the handler but does not wait
for concurrent executions to finish. This means an interrupt handler like
dw_chained_msi_isr() could still be executing on another CPU.
[ ... ]
> @@ -718,11 +730,14 @@ void dw_pcie_host_deinit(struct dw_pcie_rp *pp)
> dw_pcie_edma_remove(pci);
>
> if (pp->use_imsi_rx)
> - dw_pcie_free_msi(pp);
> + dw_pcie_remove_msi_handlers(pp);
>
> if (pp->ops->deinit)
> pp->ops->deinit(pp);
[Severity: High]
Could the lack of interrupt synchronization cause a regression here?
If the unsynchronized interrupt handler is still in flight, pp->ops->deinit(pp)
might power down the controller out from under it.
If the in-flight handler proceeds to call dw_handle_msi_irq(), it will read
PCIE_MSI_INTR0_STATUS from the powered-down hardware, potentially resulting in
an asynchronous SError (bus crash) or use-after-free.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261015033103.3076869-1-den@valinux.co.jp?part=10
next prev parent reply other threads:[~2026-10-15 3:44 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-15 3:30 [PATCH v4 00/18] PCI: rcar-gen4: Recover from link down and route Root Port interrupts Koichiro Den
2026-10-15 3:30 ` [PATCH v4 01/18] PCI: dwc: Add Renesas to the RAS DES VSEC list Koichiro Den
2026-10-15 3:30 ` [PATCH v4 02/18] PCI: dwc: Factor out the PORT_LINK_DEBUG1 link-up check Koichiro Den
2026-10-15 3:48 ` Shawn Lin
2026-10-15 3:30 ` [PATCH v4 03/18] PCI: rcar-gen4: Check live link status in link_up() Koichiro Den
2026-10-15 3:30 ` [PATCH v4 04/18] dt-bindings: PCI: rcar-gen4: Add optional "aer" interrupt for R-Car Gen4 SoCs Koichiro Den
2026-10-15 3:30 ` [PATCH v4 05/18] PCI: dwc: Export dw_handle_msi_irq() Koichiro Den
2026-10-15 3:49 ` Shawn Lin
2026-10-15 3:30 ` [PATCH v4 06/18] PCI: rcar-gen4: Move deinitialization helpers before SoC initialization Koichiro Den
2026-10-15 3:30 ` [PATCH v4 07/18] PCI: rcar-gen4: Assert resets when Gen5 SoC PHY initialization fails Koichiro Den
2026-10-15 3:30 ` [PATCH v4 08/18] PCI: rcar-gen4: Separate hardware setup from resource acquisition Koichiro Den
2026-10-15 3:30 ` [PATCH v4 09/18] PCI: rcar-gen4: Add Root Port reset support Koichiro Den
2026-10-15 3:44 ` sashiko-bot
2026-10-15 3:30 ` [PATCH v4 10/18] PCI: dwc: Free the MSI domain after the host .deinit() callback Koichiro Den
2026-10-15 3:44 ` sashiko-bot [this message]
2026-10-15 3:30 ` [PATCH v4 11/18] PCI: rcar-gen4: Take over the iMSI-RX interrupt Koichiro Den
2026-10-15 3:43 ` sashiko-bot
2026-10-15 3:30 ` [PATCH v4 12/18] PCI: rcar-gen4: Recover the Root Port on link down Koichiro Den
2026-10-15 3:30 ` [PATCH v4 13/18] PCI: dwc: Let glue drivers hide the Root Port MSI capabilities Koichiro Den
2026-10-15 4:11 ` Shawn Lin
2026-10-15 7:17 ` Koichiro Den
2026-10-15 3:30 ` [PATCH v4 14/18] PCI: rcar-gen4: Route Root Port AER to a virtual Root Port IRQ Koichiro Den
2026-10-15 3:31 ` [PATCH v4 15/18] PCI: rcar-gen4: Route Root Port PME and bandwidth notifications Koichiro Den
2026-10-15 3:31 ` [PATCH v4 16/18] arm64: dts: renesas: r8a779f0: Describe the PCIe AER interrupts Koichiro Den
2026-10-15 3:31 ` [PATCH v4 17/18] arm64: dts: renesas: r8a779g0: " Koichiro Den
2026-10-15 3:31 ` [PATCH v4 18/18] arm64: dts: renesas: r8a779h0: Describe the PCIe AER interrupt Koichiro Den
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=sashiko-outbox-172221@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=den@valinux.co.jp \
--cc=devicetree@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=wsa+renesas@sang-engineering.com \
/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