linux_dsm_epyc7002/drivers/pci
Thomas Gleixner 6706140e2c PCI/MSI: Protect msi_desc::masked for multi-MSI
commit 77e89afc25f30abd56e76a809ee2884d7c1b63ce upstream.

Multi-MSI uses a single MSI descriptor and there is a single mask register
when the device supports per vector masking. To avoid reading back the mask
register the value is cached in the MSI descriptor and updates are done by
clearing and setting bits in the cache and writing it to the device.

But nothing protects msi_desc::masked and the mask register from being
modified concurrently on two different CPUs for two different Linux
interrupts which belong to the same multi-MSI descriptor.

Add a lock to struct device and protect any operation on the mask and the
mask register with it.

This makes the update of msi_desc::masked unconditional, but there is no
place which requires a modification of the hardware register without
updating the masked cache.

msi_mask_irq() is now an empty wrapper which will be cleaned up in follow
up changes.

The problem goes way back to the initial support of multi-MSI, but picking
the commit which introduced the mask cache is a valid cut off point
(2.6.30).

Fixes: f2440d9acb ("PCI MSI: Refactor interrupt masking code")
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20210729222542.726833414@linutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-07-05 18:54:41 +02:00
..
controller init: add dsm gpl source 2024-07-05 18:00:04 +02:00
endpoint PCI: endpoint: Fix missing destroy_workqueue() 2021-05-19 10:13:02 +02:00
hotplug PCI: pciehp: Ignore Link Down/Up caused by DPC 2021-07-20 16:05:47 +02:00
pcie PCI: pciehp: Ignore Link Down/Up caused by DPC 2021-07-20 16:05:47 +02:00
switch PCI: switchtec: Add missing __iomem tag to fix sparse warnings 2020-07-31 11:23:45 -05:00
access.c Merge branch 'pci/misc' 2020-08-05 18:24:16 -05:00
ats.c Merge branch 'pci/doc' 2020-08-05 18:24:22 -05:00
bus.c PCI: Add device even if driver attach failed 2020-07-07 17:33:41 -05:00
ecam.c PCI/ACPI: Add Ampere Altra SOC MCFG quirk 2020-09-17 12:27:43 -05:00
host-bridge.c
iov.c PCI/IOV: Mark VFs as not implementing PCI_COMMAND_MEMORY 2020-09-21 14:42:11 -06:00
irq.c PCI: Remove unused pci_lost_interrupt() 2020-07-29 14:25:18 -05:00
Kconfig pci-v5.10-changes 2020-10-22 12:41:00 -07:00
Makefile
mmap.c
msi.c PCI/MSI: Protect msi_desc::masked for multi-MSI 2024-07-05 18:54:41 +02:00
of.c Merge branch 'pci/doc' 2020-08-05 18:24:22 -05:00
p2pdma.c PCI/P2PDMA: Avoid pci_get_slot(), which may sleep 2021-07-20 16:05:47 +02:00
pci-acpi.c PM: ACPI: PCI: Drop acpi_pm_set_bridge_wakeup() 2020-12-30 11:54:05 +01:00
pci-bridge-emul.c PCI: pci-bridge-emul: Fix array overruns, improve safety 2021-03-04 11:38:15 +01:00
pci-bridge-emul.h
pci-driver.c pci-v5.10-changes 2020-10-22 12:41:00 -07:00
pci-label.c PCI/sysfs: Fix dsm_label_utf16s_to_utf8s() buffer overrun 2021-07-20 16:05:50 +02:00
pci-mid.c
pci-pf-stub.c PCI/IOV: Simplify pci-pf-stub with module_pci_driver() 2020-09-17 12:40:20 -05:00
pci-stub.c
pci-sysfs.c Merge branch 'pci/misc' 2020-10-21 09:58:36 -05:00
pci.c Revert "PCI: PM: Do not read power state in pci_enable_device_flags()" 2021-06-30 08:47:17 -04:00
pci.h PCI: pciehp: Ignore Link Down/Up caused by DPC 2021-07-20 16:05:47 +02:00
probe.c init: add dsm gpl source 2024-07-05 18:00:04 +02:00
proc.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
quirks.c init: add dsm gpl source 2024-07-05 18:00:04 +02:00
remove.c PCI: Fix pci_host_bridge struct device release/free handling 2020-05-14 16:36:35 -05:00
rom.c
search.c
setup-bus.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
setup-irq.c
setup-res.c PCI: Decline to resize resources if boot config must be preserved 2021-03-04 11:37:18 +01:00
slot.c PCI: Fix pci_slot_release() NULL pointer dereference 2020-12-30 11:54:28 +01:00
syscall.c PCI: Align checking of syscall user config accessors 2021-03-04 11:38:12 +01:00
vc.c PCI: Fix kerneldoc warnings 2020-08-05 18:23:14 -05:00
vpd.c PCI: Allow VPD access for QLogic ISP2722 2021-05-14 09:49:57 +02:00
xen-pcifront.c dma-mapping: split <linux/dma-mapping.h> 2020-10-06 07:07:03 +02:00