From: Cédric Le Goater <clg@kaod.org> Date: 2021-09-30 11:01:35
The IPR drivers tests for MSI support at probe time with MSI vector 0
and when done, frees the IRQ with free_irq(). This test was introduced
by 95fecd90397e ("ipr: add test for MSI interrupt support") as an
improvement of commit 5a9ef25b14d3 ("[SCSI] ipr: add MSI support")
because a boot failure was reported on a Bimini PowerPC system :
https://x-lore.kernel.org/all/1242926159.3007.5.camel@localhost.localdomain/
It was finally decided to remove MSI support on Bimini systems in
6eb0ac03899a ("powerpc/maple: Add a quirk to disable MSI for IPR on
Bimini").
Linux 5.15-rc1 added MSI domain support to the pseries machine and
when free_irq is called() in the driver, msi_domain_deactivate() also
is. This resets the MSI table entry of the associate vector by calling
__pci_write_msi_msg() with an empty message and breaks any further
activation of the same vector. In the case of the IPR driver, it
breaks the initialization sequence of the IOA.
Introduce an empty irq_write_msi_msg() handler in the MSI domain of
the pseries machine to avoid clearing the MSI vector entry. Updating
the entry is not strictly necessary since it is initialized by the
underlying hypervisor, PowerVM or QEMU/KVM.
Cc: Wen Xiong <redacted>
Cc: Douglas Miller <redacted>
Cc: Brian King <redacted>
Fixes: a5f3d2c17b07 ("powerpc/pseries/pci: Add MSI domains")
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
We could also revert commit 95fecd90397e ("ipr: add test for MSI
interrupt support") which doesn't seem very useful nowdays. Or
rewrite the test to improve how MSI vectors are used.
Please advise !
Thanks,
arch/powerpc/platforms/pseries/msi.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
@@ -507,12 +507,27 @@ static void pseries_msi_unmask(struct irq_data *d)irq_chip_unmask_parent(d);}+staticvoidpseries_msi_write_msg(structirq_data*data,structmsi_msg*msg)+{+structmsi_desc*entry=irq_data_get_msi_desc(data);++/* Do not update the MSIx vector table. This is not strictly+*necessarysincethetableisinitializedbytheunderlying+*hypervisor,PowerVMorQEMU/KVM.However,iftheMSIx+*vectorentryiscleared,anyfurtheractivationwillfail.+*Thiscanhappeninsomedrivers(IPR)whichdeactivatethe+*IRQusedfortestingMSIsupport.+*/+entry->msg=*msg;+}+staticstructirq_chippseries_pci_msi_irq_chip={.name="pSeries-PCI-MSI",.irq_shutdown=pseries_msi_shutdown,.irq_mask=pseries_msi_mask,.irq_unmask=pseries_msi_unmask,.irq_eoi=irq_chip_eoi_parent,+.irq_write_msi_msg=pseries_msi_write_msg,};staticstructmsi_domain_infopseries_msi_domain_info={
From: Cédric Le Goater <clg@kaod.org> Date: 2021-09-30 12:56:26
On 9/30/21 12:25, Cédric Le Goater wrote:
The IPR drivers tests for MSI support at probe time with MSI vector 0
and when done, frees the IRQ with free_irq(). This test was introduced
by 95fecd90397e ("ipr: add test for MSI interrupt support") as an
improvement of commit 5a9ef25b14d3 ("[SCSI] ipr: add MSI support")
because a boot failure was reported on a Bimini PowerPC system :
https://x-lore.kernel.org/all/1242926159.3007.5.camel@localhost.localdomain/
It was finally decided to remove MSI support on Bimini systems in
6eb0ac03899a ("powerpc/maple: Add a quirk to disable MSI for IPR on
Bimini").
Linux 5.15-rc1 added MSI domain support to the pseries machine and
when free_irq is called() in the driver, msi_domain_deactivate() also
is. This resets the MSI table entry of the associate vector by calling
__pci_write_msi_msg() with an empty message and breaks any further
activation of the same vector. In the case of the IPR driver, it
breaks the initialization sequence of the IOA.
Introduce an empty irq_write_msi_msg() handler in the MSI domain of
the pseries machine to avoid clearing the MSI vector entry. Updating
the entry is not strictly necessary since it is initialized by the
underlying hypervisor, PowerVM or QEMU/KVM.
Cc: Wen Xiong <redacted>
Cc: Douglas Miller <redacted>
Cc: Brian King <redacted>
Fixes: a5f3d2c17b07 ("powerpc/pseries/pci: Add MSI domains")
Signed-off-by: Cédric Le Goater <clg@kaod.org>
This is missing :
Reported-by: Abdul Haleem <redacted>
Thanks,
C.
quoted hunk
---
We could also revert commit 95fecd90397e ("ipr: add test for MSI
interrupt support") which doesn't seem very useful nowdays. Or
rewrite the test to improve how MSI vectors are used.
Please advise !
Thanks,
arch/powerpc/platforms/pseries/msi.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
@@ -507,12 +507,27 @@ static void pseries_msi_unmask(struct irq_data *d)irq_chip_unmask_parent(d);}+staticvoidpseries_msi_write_msg(structirq_data*data,structmsi_msg*msg)+{+structmsi_desc*entry=irq_data_get_msi_desc(data);++/* Do not update the MSIx vector table. This is not strictly+*necessarysincethetableisinitializedbytheunderlying+*hypervisor,PowerVMorQEMU/KVM.However,iftheMSIx+*vectorentryiscleared,anyfurtheractivationwillfail.+*Thiscanhappeninsomedrivers(IPR)whichdeactivatethe+*IRQusedfortestingMSIsupport.+*/+entry->msg=*msg;+}+staticstructirq_chippseries_pci_msi_irq_chip={.name="pSeries-PCI-MSI",.irq_shutdown=pseries_msi_shutdown,.irq_mask=pseries_msi_mask,.irq_unmask=pseries_msi_unmask,.irq_eoi=irq_chip_eoi_parent,+.irq_write_msi_msg=pseries_msi_write_msg,};staticstructmsi_domain_infopseries_msi_domain_info={
On 2021-09-30 12:25:35 Thu, Cédric Le Goater wrote:
The IPR drivers tests for MSI support at probe time with MSI vector 0
and when done, frees the IRQ with free_irq(). This test was introduced
by 95fecd90397e ("ipr: add test for MSI interrupt support") as an
improvement of commit 5a9ef25b14d3 ("[SCSI] ipr: add MSI support")
because a boot failure was reported on a Bimini PowerPC system :
https://x-lore.kernel.org/all/1242926159.3007.5.camel@localhost.localdomain/
It was finally decided to remove MSI support on Bimini systems in
6eb0ac03899a ("powerpc/maple: Add a quirk to disable MSI for IPR on
Bimini").
Linux 5.15-rc1 added MSI domain support to the pseries machine and
when free_irq is called() in the driver, msi_domain_deactivate() also
is. This resets the MSI table entry of the associate vector by calling
__pci_write_msi_msg() with an empty message and breaks any further
activation of the same vector. In the case of the IPR driver, it
breaks the initialization sequence of the IOA.
Introduce an empty irq_write_msi_msg() handler in the MSI domain of
the pseries machine to avoid clearing the MSI vector entry. Updating
the entry is not strictly necessary since it is initialized by the
underlying hypervisor, PowerVM or QEMU/KVM.
Cc: Wen Xiong <redacted>
Cc: Douglas Miller <redacted>
Cc: Brian King <redacted>
Fixes: a5f3d2c17b07 ("powerpc/pseries/pci: Add MSI domains")
Signed-off-by: Cédric Le Goater <clg@kaod.org>
From: Michael Ellerman <hidden> Date: 2021-10-08 13:25:19
On Thu, 30 Sep 2021 12:25:35 +0200, Cédric Le Goater wrote:
The IPR drivers tests for MSI support at probe time with MSI vector 0
and when done, frees the IRQ with free_irq(). This test was introduced
by 95fecd90397e ("ipr: add test for MSI interrupt support") as an
improvement of commit 5a9ef25b14d3 ("[SCSI] ipr: add MSI support")
because a boot failure was reported on a Bimini PowerPC system :
https://x-lore.kernel.org/all/1242926159.3007.5.camel@localhost.localdomain/
[...]