diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2022-02-13 14:54:05 +0100 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2022-02-21 08:26:53 +0100 |
commit | ba1366f3d039e7c3ca1fc29ed00ce3ed2b8fd32f (patch) | |
tree | 56b8930e3abb9a6f6a68db970ccd3a126c00f48e /Documentation/arm/interrupts.rst | |
parent | Linux 5.17-rc5 (diff) | |
download | linux-ba1366f3d039e7c3ca1fc29ed00ce3ed2b8fd32f.tar.xz linux-ba1366f3d039e7c3ca1fc29ed00ce3ed2b8fd32f.zip |
PCI: vmd: Prevent recursive locking on interrupt allocation
Tejas reported the following recursive locking issue:
swapper/0/1 is trying to acquire lock:
ffff8881074fd0a0 (&md->mutex){+.+.}-{3:3}, at: msi_get_virq+0x30/0xc0
but task is already holding lock:
ffff8881017cd6a0 (&md->mutex){+.+.}-{3:3}, at: __pci_enable_msi_range+0xf2/0x290
stack backtrace:
__mutex_lock+0x9d/0x920
msi_get_virq+0x30/0xc0
pci_irq_vector+0x26/0x30
vmd_msi_init+0xcc/0x210
msi_domain_alloc+0xbf/0x150
msi_domain_alloc_irqs_descs_locked+0x3e/0xb0
__pci_enable_msi_range+0x155/0x290
pci_alloc_irq_vectors_affinity+0xba/0x100
pcie_port_device_register+0x307/0x550
pcie_portdrv_probe+0x3c/0xd0
pci_device_probe+0x95/0x110
This is caused by the VMD MSI code which does a lookup of the Linux
interrupt number for an VMD managed MSI[X] vector. The lookup function
tries to acquire the already held mutex.
Avoid that by caching the Linux interrupt number at initialization time
instead of looking it up over and over.
Fixes: 82ff8e6b78fc ("PCI/MSI: Use msi_get_virq() in pci_get_vector()")
Reported-by: "Surendrakumar Upadhyay, TejaskumarX" <tejaskumarx.surendrakumar.upadhyay@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: "Surendrakumar Upadhyay, TejaskumarX" <tejaskumarx.surendrakumar.upadhyay@intel.com>
Cc: linux-pci@vger.kernel.org
Link: https://lore.kernel.org/r/87a6euub2a.ffs@tglx
Diffstat (limited to 'Documentation/arm/interrupts.rst')
0 files changed, 0 insertions, 0 deletions