Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'msi-fixes-6.2-1' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms

Pull MSI fixes from Marc Zyngier:
"Thomas tasked me with sending out a few urgent fixes after the giant
MSI rework that landed in 6.2, as both s390 and powerpc ended-up
suffering from it (they do not use the full core code infrastructure,
leading to these previously undetected issues):

- Return MSI_XA_DOMAIN_SIZE as the maximum MSI index when the
architecture does not make use of irq domains instead of returning
0, which is pretty limiting.

- Check for the presence of an irq domain when validating the MSI
iterator, as s390/powerpc won't have one.

- Fix powerpc's MSI backends which fail to clear the descriptor's IRQ
field on teardown, leading to a splat and leaked descriptors"

* tag 'msi-fixes-6.2-1' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms:
powerpc/msi: Fix deassociation of MSI descriptors
genirq/msi: Return MSI_XA_DOMAIN_SIZE as the maximum MSI index when no domain is present
genirq/msi: Check for the presence of an irq domain when validating msi_ctrl

+9 -3
+1
arch/powerpc/platforms/4xx/hsta_msi.c
··· 115 115 msi_bitmap_free_hwirqs(&ppc4xx_hsta_msi.bmp, irq, 1); 116 116 pr_debug("%s: Teardown IRQ %u (index %u)\n", __func__, 117 117 entry->irq, irq); 118 + entry->irq = 0; 118 119 } 119 120 } 120 121
+1
arch/powerpc/platforms/cell/axon_msi.c
··· 289 289 msi_for_each_desc(entry, &dev->dev, MSI_DESC_ASSOCIATED) { 290 290 irq_set_msi_desc(entry->irq, NULL); 291 291 irq_dispose_mapping(entry->irq); 292 + entry->irq = 0; 292 293 } 293 294 } 294 295
+1
arch/powerpc/platforms/pasemi/msi.c
··· 66 66 hwirq = virq_to_hw(entry->irq); 67 67 irq_set_msi_desc(entry->irq, NULL); 68 68 irq_dispose_mapping(entry->irq); 69 + entry->irq = 0; 69 70 msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap, hwirq, ALLOC_CHUNK); 70 71 } 71 72 }
+1
arch/powerpc/sysdev/fsl_msi.c
··· 132 132 msi_data = irq_get_chip_data(entry->irq); 133 133 irq_set_msi_desc(entry->irq, NULL); 134 134 irq_dispose_mapping(entry->irq); 135 + entry->irq = 0; 135 136 msi_bitmap_free_hwirqs(&msi_data->bitmap, hwirq, 1); 136 137 } 137 138 }
+1
arch/powerpc/sysdev/mpic_u3msi.c
··· 108 108 hwirq = virq_to_hw(entry->irq); 109 109 irq_set_msi_desc(entry->irq, NULL); 110 110 irq_dispose_mapping(entry->irq); 111 + entry->irq = 0; 111 112 msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap, hwirq, 1); 112 113 } 113 114 }
+4 -3
kernel/irq/msi.c
··· 165 165 unsigned int hwsize; 166 166 167 167 if (WARN_ON_ONCE(ctrl->domid >= MSI_MAX_DEVICE_IRQDOMAINS || 168 - !dev->msi.data->__domains[ctrl->domid].domain)) 168 + (dev->msi.domain && 169 + !dev->msi.data->__domains[ctrl->domid].domain))) 169 170 return false; 170 171 171 172 hwsize = msi_domain_get_hwsize(dev, ctrl->domid); ··· 610 609 info = domain->host_data; 611 610 return info->hwsize; 612 611 } 613 - /* No domain, no size... */ 614 - return 0; 612 + /* No domain, default to MSI_XA_DOMAIN_SIZE */ 613 + return MSI_XA_DOMAIN_SIZE; 615 614 } 616 615 617 616 static inline void irq_chip_write_msi_msg(struct irq_data *data,