diff mbox series

powerpc: pci-ioda: Fix the stale irq chip reference

Message ID 178716225364.1437.6201568081502251835.stgit@linux.ibm.com (mailing list archive)
State Under Review
Headers show
Series powerpc: pci-ioda: Fix the stale irq chip reference | expand

Commit Message

Shivaprasad G Bhat Aug. 19, 2026, 5:58 p.m. UTC
The commit f0ac60e6e311 ("powerpc/powernv/pci: Switch to use
msi_create_parent_irq_domain()") removed the legacy MSI irq chip
pnv_pci_msi_irq_chip but left behind the static definition of it and
its reference in is_pnv_opal_msi().

The KVM IRQ bypass for vfio devices is broken because the
comparision in is_pnv_opal_msi() fails on the comparision with
stale unused variable showing the below errors in dmesg.

 kvmppc_set_passthru_irq_hv: Could not assign IRQ map for (X,Y)
 kvmppc_set_passthru_irq (irq X, gsi Y) fails: -2
 vfio-pci A:B:C.D irq bypass producer (eventfd Z) registration fails: -2

The patch removes the stale variable definition and fixes the
is_pnv_opal_msi() by comparing against the chip name prefix.

Fixes: f0ac60e6e311 ("powerpc/powernv/pci: Switch to use msi_create_parent_irq_domain()")
Cc: stable@kernel.org
Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
---
 arch/powerpc/platforms/powernv/pci-ioda.c |    6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

Comments

Gautam Menghani Aug. 24, 2026, 6:49 p.m. UTC | #1
On Wed, Aug 19, 2026 at 05:58:22PM +0000, Shivaprasad G Bhat wrote:
> The commit f0ac60e6e311 ("powerpc/powernv/pci: Switch to use
> msi_create_parent_irq_domain()") removed the legacy MSI irq chip
> pnv_pci_msi_irq_chip but left behind the static definition of it and
> its reference in is_pnv_opal_msi().
> 
> The KVM IRQ bypass for vfio devices is broken because the
> comparision in is_pnv_opal_msi() fails on the comparision with
> stale unused variable showing the below errors in dmesg.
> 
>  kvmppc_set_passthru_irq_hv: Could not assign IRQ map for (X,Y)
>  kvmppc_set_passthru_irq (irq X, gsi Y) fails: -2
>  vfio-pci A:B:C.D irq bypass producer (eventfd Z) registration fails: -2
> 
> The patch removes the stale variable definition and fixes the
> is_pnv_opal_msi() by comparing against the chip name prefix.
> 
> Fixes: f0ac60e6e311 ("powerpc/powernv/pci: Switch to use msi_create_parent_irq_domain()")
> Cc: stable@kernel.org
> Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
> ---
>  arch/powerpc/platforms/powernv/pci-ioda.c |    6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
> index 32ecbc46e74b..728a5610d167 100644
> --- a/arch/powerpc/platforms/powernv/pci-ioda.c
> +++ b/arch/powerpc/platforms/powernv/pci-ioda.c
> @@ -1623,15 +1623,13 @@ int64_t pnv_opal_pci_msi_eoi(struct irq_data *d)
>  	return opal_pci_msi_eoi(phb->opal_id, d->parent_data->hwirq);
>  }
>  
> -static struct irq_chip pnv_pci_msi_irq_chip;
> -
>  /*
>   * Returns true iff chip is something that we could call
>   * pnv_opal_pci_msi_eoi for.
>   */
>  bool is_pnv_opal_msi(struct irq_chip *chip)
>  {
> -	return chip == &pnv_pci_msi_irq_chip;
> +	return chip && chip->name && str_has_prefix(chip->name, "PNV-");
>  }
>  EXPORT_SYMBOL_GPL(is_pnv_opal_msi);
>  
> @@ -1728,7 +1726,7 @@ static const struct msi_parent_ops pnv_msi_parent_ops = {
>  	.chip_flags		= MSI_CHIP_FLAG_SET_EOI,
>  	.bus_select_token	= DOMAIN_BUS_NEXUS,
>  	.bus_select_mask	= MATCH_PCI_MSI,
> -	.prefix			= "PNV-",
> +	.prefix			= "PNV-", /* Note: is_pnv_opal_msi() uses this */
>  	.init_dev_msi_info	= pnv_init_dev_msi_info,
>  };
>  

I boot tested this patch on KVM on PowerNV (P9) and KVM on LPAR (P10),
with the USB controller passed through to the guest.
The warnings are not observed.

Tested-by: Gautam Menghani <gautam@linux.ibm.com>
diff mbox series

Patch

diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 32ecbc46e74b..728a5610d167 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -1623,15 +1623,13 @@  int64_t pnv_opal_pci_msi_eoi(struct irq_data *d)
 	return opal_pci_msi_eoi(phb->opal_id, d->parent_data->hwirq);
 }
 
-static struct irq_chip pnv_pci_msi_irq_chip;
-
 /*
  * Returns true iff chip is something that we could call
  * pnv_opal_pci_msi_eoi for.
  */
 bool is_pnv_opal_msi(struct irq_chip *chip)
 {
-	return chip == &pnv_pci_msi_irq_chip;
+	return chip && chip->name && str_has_prefix(chip->name, "PNV-");
 }
 EXPORT_SYMBOL_GPL(is_pnv_opal_msi);
 
@@ -1728,7 +1726,7 @@  static const struct msi_parent_ops pnv_msi_parent_ops = {
 	.chip_flags		= MSI_CHIP_FLAG_SET_EOI,
 	.bus_select_token	= DOMAIN_BUS_NEXUS,
 	.bus_select_mask	= MATCH_PCI_MSI,
-	.prefix			= "PNV-",
+	.prefix			= "PNV-", /* Note: is_pnv_opal_msi() uses this */
 	.init_dev_msi_info	= pnv_init_dev_msi_info,
 };