Message ID | 87leznqx2a.ffs@tglx (mailing list archive) |
---|---|
State | Accepted |
Commit | 74a5257a0c175810d620b5e631c4e7554955ac25 |
Headers | show |
Series | genirq/msi: Populate sysfs entry only once | expand |
On Mon, Jan 10, 2022 at 07:12:45PM +0100, Thomas Gleixner wrote: > The MSI entries for multi-MSI are populated en bloc for the MSI descriptor, > but the current code invokes the population inside the per interrupt loop > which triggers a warning in the sysfs code and causes the interrupt > allocation to fail. > > Move it outside of the loop so it works correctly for single and multi-MSI. > > Fixes: bf5e758f02fc ("genirq/msi: Simplify sysfs handling") > Reported-by: Borislav Petkov <bp@alien8.de> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > --- > kernel/irq/msi.c | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > --- a/kernel/irq/msi.c > +++ b/kernel/irq/msi.c > @@ -887,12 +887,11 @@ int __msi_domain_alloc_irqs(struct irq_d > ret = msi_init_virq(domain, virq + i, vflags); > if (ret) > return ret; > - > - if (info->flags & MSI_FLAG_DEV_SYSFS) { > - ret = msi_sysfs_populate_desc(dev, desc); > - if (ret) > - return ret; > - } > + } > + if (info->flags & MSI_FLAG_DEV_SYSFS) { > + ret = msi_sysfs_populate_desc(dev, desc); > + if (ret) > + return ret; > } > allocated++; > } Yap, works. Tested-by: Borislav Petkov <bp@suse.de>
On Mon, Jan 10, 2022 at 07:12:45PM +0100, Thomas Gleixner wrote: > The MSI entries for multi-MSI are populated en bloc for the MSI descriptor, > but the current code invokes the population inside the per interrupt loop > which triggers a warning in the sysfs code and causes the interrupt > allocation to fail. > > Move it outside of the loop so it works correctly for single and multi-MSI. > > Fixes: bf5e758f02fc ("genirq/msi: Simplify sysfs handling") > Reported-by: Borislav Petkov <bp@alien8.de> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > --- > kernel/irq/msi.c | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
On 1/10/22 19:12, Thomas Gleixner wrote: > The MSI entries for multi-MSI are populated en bloc for the MSI descriptor, > but the current code invokes the population inside the per interrupt loop > which triggers a warning in the sysfs code and causes the interrupt > allocation to fail. > > Move it outside of the loop so it works correctly for single and multi-MSI. > > Fixes: bf5e758f02fc ("genirq/msi: Simplify sysfs handling") > Reported-by: Borislav Petkov <bp@alien8.de> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Cédric Le Goater <clg@kaod.org> Thanks, C. > --- > kernel/irq/msi.c | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > --- a/kernel/irq/msi.c > +++ b/kernel/irq/msi.c > @@ -887,12 +887,11 @@ int __msi_domain_alloc_irqs(struct irq_d > ret = msi_init_virq(domain, virq + i, vflags); > if (ret) > return ret; > - > - if (info->flags & MSI_FLAG_DEV_SYSFS) { > - ret = msi_sysfs_populate_desc(dev, desc); > - if (ret) > - return ret; > - } > + } > + if (info->flags & MSI_FLAG_DEV_SYSFS) { > + ret = msi_sysfs_populate_desc(dev, desc); > + if (ret) > + return ret; > } > allocated++; > } >
Hi Thomas, Is this fix the same as below? https://marc.info/?l=linux-kernel&m=164061119923119&w=2 On 2022/01/11 3:12, Thomas Gleixner wrote: > The MSI entries for multi-MSI are populated en bloc for the MSI > descriptor, > but the current code invokes the population inside the per interrupt loop > which triggers a warning in the sysfs code and causes the interrupt > allocation to fail. > > Move it outside of the loop so it works correctly for single and > multi-MSI. > > Fixes: bf5e758f02fc ("genirq/msi: Simplify sysfs handling") > Reported-by: Borislav Petkov <bp@alien8.de> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > --- > kernel/irq/msi.c | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > --- a/kernel/irq/msi.c > +++ b/kernel/irq/msi.c > @@ -887,12 +887,11 @@ int __msi_domain_alloc_irqs(struct irq_d > ret = msi_init_virq(domain, virq + i, vflags); > if (ret) > return ret; > - > - if (info->flags & MSI_FLAG_DEV_SYSFS) { > - ret = msi_sysfs_populate_desc(dev, desc); > - if (ret) > - return ret; > - } > + } > + if (info->flags & MSI_FLAG_DEV_SYSFS) { > + ret = msi_sysfs_populate_desc(dev, desc); > + if (ret) > + return ret; > } > allocated++; > } > --- Best Regards Kunihiko Hayashi
Kunihiko, On Wed, Jan 12 2022 at 09:05, Kunihiko Hayashi wrote: > Is this fix the same as below? > https://marc.info/?l=linux-kernel&m=164061119923119&w=2 pretty much the same, but I missed that patch. I was off for 2+ weeks and on return Boris poked me about this issue and I fixed it. Then I went ahead and marked all vacation mail read as I always do :) So sorry for not noticing that patch. Thanks, Thomas
Hi Thomas, On 2022/01/19 8:59, Thomas Gleixner wrote: > Kunihiko, > > On Wed, Jan 12 2022 at 09:05, Kunihiko Hayashi wrote: >> Is this fix the same as below? >> https://marc.info/?l=linux-kernel&m=164061119923119&w=2 > > pretty much the same, but I missed that patch. I was off for 2+ weeks > and on return Boris poked me about this issue and I fixed it. Then I > went ahead and marked all vacation mail read as I always do :) > > So sorry for not noticing that patch. No problem. If this issue wansn't resolved, the PCIe controller wouldn't work properly, so I'm relieved to solve the issue and get your response. Thank you, --- Best Regards Kunihiko Hayashi
--- a/kernel/irq/msi.c +++ b/kernel/irq/msi.c @@ -887,12 +887,11 @@ int __msi_domain_alloc_irqs(struct irq_d ret = msi_init_virq(domain, virq + i, vflags); if (ret) return ret; - - if (info->flags & MSI_FLAG_DEV_SYSFS) { - ret = msi_sysfs_populate_desc(dev, desc); - if (ret) - return ret; - } + } + if (info->flags & MSI_FLAG_DEV_SYSFS) { + ret = msi_sysfs_populate_desc(dev, desc); + if (ret) + return ret; } allocated++; }
The MSI entries for multi-MSI are populated en bloc for the MSI descriptor, but the current code invokes the population inside the per interrupt loop which triggers a warning in the sysfs code and causes the interrupt allocation to fail. Move it outside of the loop so it works correctly for single and multi-MSI. Fixes: bf5e758f02fc ("genirq/msi: Simplify sysfs handling") Reported-by: Borislav Petkov <bp@alien8.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- kernel/irq/msi.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)