From: claudiu beznea <claudiu.beznea@tuxon.dev>
To: Prabhakar <prabhakar.csengg@gmail.com>,
"Claudiu Beznea" <claudiu.beznea.uj@bp.renesas.com>,
"Manivannan Sadhasivam" <mani@kernel.org>,
"Krzysztof Wilczyński" <kwilczynski@kernel.org>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Bjorn Helgaas" <bhelgaas@google.com>
Cc: linux-pci@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
linux-kernel@vger.kernel.org,
Prabhakar <prabhakar.csengg+renesas@gmail.com>,
Biju Das <biju.das.jz@bp.renesas.com>,
Fabrizio Castro <fabrizio.castro.jz@renesas.com>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>,
stable@vger.kernel.org
Subject: Re: [PATCH 3/3] PCI: rzg3s: Fix IRQ domain initialization error handling
Date: Thu, 23 Jul 2026 20:11:30 +0300 [thread overview]
Message-ID: <97f207cb-4ae5-4a48-a5da-fb4167f8d0d4@tuxon.dev> (raw)
In-Reply-To: <20260715223019.3002237-4-prabhakar.mahadev-lad.rj@bp.renesas.com>
Hi, Prabhakar,
On 7/16/26 01:30, Prabhakar wrote:
> From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
>
> rzg3s_pcie_init_irqdomain() installs chained handlers for the INTx
> parent interrupts before creating the INTx irqdomain and initializing
> MSI support.
>
> If any subsequent step fails, such as obtaining an INTx IRQ,
> creating the irqdomain, or initializing MSI, the error path returns
> without removing any chained handlers that were already installed.
> This leaves stale handler and data pointers attached to the parent
> interrupts.
>
> Fix the error path by unwinding the chained handler registration before
> returning. Also clear the chained handlers during
> rzg3s_pcie_teardown_irqdomain() so that teardown fully mirrors the
> initialization sequence.
>
> Fixes: 7ef502fb35b28 ("PCI: Add Renesas RZ/G3S host controller driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> ---
> drivers/pci/controller/pcie-rzg3s-host.c | 37 +++++++++++++++++-------
> 1 file changed, 27 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/controller/pcie-rzg3s-host.c
> index f51b5d7c1998..5aeb030d43c8 100644
> --- a/drivers/pci/controller/pcie-rzg3s-host.c
> +++ b/drivers/pci/controller/pcie-rzg3s-host.c
> @@ -1006,22 +1006,30 @@ static const struct irq_domain_ops rzg3s_pcie_intx_domain_ops = {
> .xlate = irq_domain_xlate_onetwocell,
> };
>
> +static void rzg3s_pcie_clear_intx_handlers(struct rzg3s_pcie_host *host, int count)
> +{
> + while (--count >= 0)
> + irq_set_chained_handler_and_data(host->intx_irqs[count], NULL, NULL);
> +}
On PCI subsystem lines are still wrapped at 80 chars length. Could you please
update it, adding also {} around multi-line blocks as the rest of the code in
this file is doing, e.g.:
static void rzg3s_pcie_clear_intx_handlers(struct rzg3s_pcie_host *host,
int count)
{
while (--count >= 0) {
irq_set_chained_handler_and_data(host->intx_irqs[count], NULL,
NULL);
}
}
> +
> static int rzg3s_pcie_init_irqdomain(struct rzg3s_pcie_host *host)
> {
> struct device *dev = host->dev;
> struct platform_device *pdev = to_platform_device(dev);
> + int i, ret;
>
> - for (int i = 0; i < PCI_NUM_INTX; i++) {
> + for (i = 0; i < PCI_NUM_INTX; i++) {
> char irq_name[5] = {0};
> int irq;
>
> scnprintf(irq_name, ARRAY_SIZE(irq_name), "int%c", 'a' + i);
>
> irq = platform_get_irq_byname(pdev, irq_name);
> - if (irq < 0)
> - return dev_err_probe(dev, irq,
> - "Failed to parse and map INT%c IRQ\n",
> - 'A' + i);
> + if (irq < 0) {
> + ret = irq;
> + dev_err_probe(dev, ret, "Failed to parse and map INT%c IRQ\n", 'A' + i);
> + goto err_cleanup_intx;
> + }
>
> host->intx_irqs[i] = irq;
> irq_set_chained_handler_and_data(irq,
> @@ -1033,21 +1041,28 @@ static int rzg3s_pcie_init_irqdomain(struct rzg3s_pcie_host *host)
> PCI_NUM_INTX,
> &rzg3s_pcie_intx_domain_ops,
> host);
> - if (!host->intx_domain)
> - return dev_err_probe(dev, -EINVAL,
> - "Failed to add irq domain for INTx IRQs\n");
> + if (!host->intx_domain) {
> + ret = -EINVAL;
> + dev_err_probe(dev, ret, "Failed to add irq domain for INTx IRQs\n");
> + goto err_cleanup_intx;
> + }
> irq_domain_update_bus_token(host->intx_domain, DOMAIN_BUS_WIRED);
>
> if (IS_ENABLED(CONFIG_PCI_MSI)) {
> - int ret = rzg3s_pcie_init_msi(host);
> + ret = rzg3s_pcie_init_msi(host);
>
> if (ret) {
> irq_domain_remove(host->intx_domain);
Could you please drop this ^ from here and (see below)...
> - return ret;
> + goto err_cleanup_intx;
> }
> }
>
> return 0;
> +
> +err_cleanup_intx:
Add it here? To have everything grouped together. I am also working on fixing
the hotplug support and having it like this would be useful. I can do it myself
in a separate patch, but I think, logically, it belongs to this patch.
Thank you,
Claudiu
> + rzg3s_pcie_clear_intx_handlers(host, i);
> +
> + return ret;
> }
>
> static void rzg3s_pcie_teardown_irqdomain(struct rzg3s_pcie_host *host)
> @@ -1055,6 +1070,8 @@ static void rzg3s_pcie_teardown_irqdomain(struct rzg3s_pcie_host *host)
> if (IS_ENABLED(CONFIG_PCI_MSI))
> rzg3s_pcie_teardown_msi(host);
>
> + rzg3s_pcie_clear_intx_handlers(host, PCI_NUM_INTX);
> +
> irq_domain_remove(host->intx_domain);
> }
>
next prev parent reply other threads:[~2026-07-23 17:11 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-15 22:30 [PATCH 0/3] PCI: rzg3s: Fix issues in cleanup paths Prabhakar
2026-07-15 22:30 ` [PATCH 1/3] PCI: rzg3s: Disable refclk on probe failure Prabhakar
2026-07-23 17:16 ` claudiu beznea
2026-07-15 22:30 ` [PATCH 2/3] PCI: rzg3s: Propagate platform_get_irq_byname() errors Prabhakar
2026-07-23 17:17 ` claudiu beznea
2026-07-15 22:30 ` [PATCH 3/3] PCI: rzg3s: Fix IRQ domain initialization error handling Prabhakar
2026-07-23 17:11 ` claudiu beznea [this message]
2026-07-27 9:08 ` Lad, Prabhakar
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=97f207cb-4ae5-4a48-a5da-fb4167f8d0d4@tuxon.dev \
--to=claudiu.beznea@tuxon.dev \
--cc=bhelgaas@google.com \
--cc=biju.das.jz@bp.renesas.com \
--cc=claudiu.beznea.uj@bp.renesas.com \
--cc=fabrizio.castro.jz@renesas.com \
--cc=kwilczynski@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=mani@kernel.org \
--cc=prabhakar.csengg+renesas@gmail.com \
--cc=prabhakar.csengg@gmail.com \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
--cc=robh@kernel.org \
--cc=stable@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 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®