2022-12-27 21:09:51

by Sasha Levin

[permalink] [raw]
Subject: [PATCH AUTOSEL 4.14 3/4] powerpc/msi: Fix deassociation of MSI descriptors

From: Marc Zyngier <[email protected]>

[ Upstream commit 4545c6a3d6ba71747eaa984c338ddd745e56e23f ]

Since 2f2940d16823 ("genirq/msi: Remove filter from
msi_free_descs_free_range()"), the core MSI code relies on the
msi_desc->irq field to have been cleared before the descriptor
can be freed, as it indicates that there is no association with
a device anymore.

The irq domain code provides this guarantee, and so does s390,
which is one of the two architectures not using irq domains for
MSIs.

Powerpc, however, is missing this particular requirements,
leading in a splat and leaked MSI descriptors.

Adding the now required irq reset to the handful of powerpc backends
that implement MSIs fixes that particular problem.

Reported-by: Guenter Roeck <[email protected]>
Signed-off-by: Marc Zyngier <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Sasha Levin <[email protected]>
---
arch/powerpc/platforms/4xx/hsta_msi.c | 1 +
arch/powerpc/platforms/cell/axon_msi.c | 1 +
arch/powerpc/platforms/pasemi/msi.c | 1 +
arch/powerpc/sysdev/fsl_msi.c | 1 +
arch/powerpc/sysdev/mpic_u3msi.c | 1 +
5 files changed, 5 insertions(+)

diff --git a/arch/powerpc/platforms/4xx/hsta_msi.c b/arch/powerpc/platforms/4xx/hsta_msi.c
index 9926ad67af76..ac5fbb2492aa 100644
--- a/arch/powerpc/platforms/4xx/hsta_msi.c
+++ b/arch/powerpc/platforms/4xx/hsta_msi.c
@@ -121,6 +121,7 @@ static void hsta_teardown_msi_irqs(struct pci_dev *dev)
msi_bitmap_free_hwirqs(&ppc4xx_hsta_msi.bmp, irq, 1);
pr_debug("%s: Teardown IRQ %u (index %u)\n", __func__,
entry->irq, irq);
+ entry->irq = 0;
}
}

diff --git a/arch/powerpc/platforms/cell/axon_msi.c b/arch/powerpc/platforms/cell/axon_msi.c
index e98b61c06a81..1c889a9e1a4f 100644
--- a/arch/powerpc/platforms/cell/axon_msi.c
+++ b/arch/powerpc/platforms/cell/axon_msi.c
@@ -299,6 +299,7 @@ static void axon_msi_teardown_msi_irqs(struct pci_dev *dev)

irq_set_msi_desc(entry->irq, NULL);
irq_dispose_mapping(entry->irq);
+ entry->irq = 0;
}
}

diff --git a/arch/powerpc/platforms/pasemi/msi.c b/arch/powerpc/platforms/pasemi/msi.c
index d9cd510c8865..6e54377663db 100644
--- a/arch/powerpc/platforms/pasemi/msi.c
+++ b/arch/powerpc/platforms/pasemi/msi.c
@@ -74,6 +74,7 @@ static void pasemi_msi_teardown_msi_irqs(struct pci_dev *pdev)
hwirq = virq_to_hw(entry->irq);
irq_set_msi_desc(entry->irq, NULL);
irq_dispose_mapping(entry->irq);
+ entry->irq = 0;
msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap, hwirq, ALLOC_CHUNK);
}

diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c
index d43d3d1b27ed..83c6ea6a82e0 100644
--- a/arch/powerpc/sysdev/fsl_msi.c
+++ b/arch/powerpc/sysdev/fsl_msi.c
@@ -137,6 +137,7 @@ static void fsl_teardown_msi_irqs(struct pci_dev *pdev)
msi_data = irq_get_chip_data(entry->irq);
irq_set_msi_desc(entry->irq, NULL);
irq_dispose_mapping(entry->irq);
+ entry->irq = 0;
msi_bitmap_free_hwirqs(&msi_data->bitmap, hwirq, 1);
}

diff --git a/arch/powerpc/sysdev/mpic_u3msi.c b/arch/powerpc/sysdev/mpic_u3msi.c
index cfc1c57d760f..26db91c8feff 100644
--- a/arch/powerpc/sysdev/mpic_u3msi.c
+++ b/arch/powerpc/sysdev/mpic_u3msi.c
@@ -116,6 +116,7 @@ static void u3msi_teardown_msi_irqs(struct pci_dev *pdev)
hwirq = virq_to_hw(entry->irq);
irq_set_msi_desc(entry->irq, NULL);
irq_dispose_mapping(entry->irq);
+ entry->irq = 0;
msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap, hwirq, 1);
}

--
2.35.1


2022-12-28 11:20:32

by Marc Zyngier

[permalink] [raw]
Subject: Re: [PATCH AUTOSEL 4.14 3/4] powerpc/msi: Fix deassociation of MSI descriptors

On Tue, 27 Dec 2022 20:36:08 +0000,
Sasha Levin <[email protected]> wrote:
>
> From: Marc Zyngier <[email protected]>
>
> [ Upstream commit 4545c6a3d6ba71747eaa984c338ddd745e56e23f ]
>
> Since 2f2940d16823 ("genirq/msi: Remove filter from
> msi_free_descs_free_range()"), the core MSI code relies on the
> msi_desc->irq field to have been cleared before the descriptor
> can be freed, as it indicates that there is no association with
> a device anymore.
>
> The irq domain code provides this guarantee, and so does s390,
> which is one of the two architectures not using irq domains for
> MSIs.
>
> Powerpc, however, is missing this particular requirements,
> leading in a splat and leaked MSI descriptors.
>
> Adding the now required irq reset to the handful of powerpc backends
> that implement MSIs fixes that particular problem.
>
> Reported-by: Guenter Roeck <[email protected]>
> Signed-off-by: Marc Zyngier <[email protected]>
> Link: https://lore.kernel.org/r/[email protected]
> Signed-off-by: Sasha Levin <[email protected]>
> ---
> arch/powerpc/platforms/4xx/hsta_msi.c | 1 +
> arch/powerpc/platforms/cell/axon_msi.c | 1 +
> arch/powerpc/platforms/pasemi/msi.c | 1 +
> arch/powerpc/sysdev/fsl_msi.c | 1 +
> arch/powerpc/sysdev/mpic_u3msi.c | 1 +
> 5 files changed, 5 insertions(+)

Please drop this patch from all stable branches. It isn't needed
before 6.2, and doesn't fix anything on its own as nobody uses this
structure after this point.

M.

--
Without deviation from the norm, progress is not possible.