aboutsummaryrefslogtreecommitdiff
path: root/rust/macros/zeroable.rs
diff options
context:
space:
mode:
authorShin'ichiro Kawasaki <[email protected]>2024-01-08 15:20:58 +0900
committerHans de Goede <[email protected]>2024-01-22 11:37:27 +0100
commit5913320eb0b3ec88158cfcb0fa5e996bf4ef681b (patch)
tree6a4f6ebf2ac1e8ecd65440c0ed2d7877a123a3b5 /rust/macros/zeroable.rs
parent416de0246f35f43d871a57939671fe814f4455ee (diff)
platform/x86: p2sb: Allow p2sb_bar() calls during PCI device probe
p2sb_bar() unhides P2SB device to get resources from the device. It guards the operation by locking pci_rescan_remove_lock so that parallel rescans do not find the P2SB device. However, this lock causes deadlock when PCI bus rescan is triggered by /sys/bus/pci/rescan. The rescan locks pci_rescan_remove_lock and probes PCI devices. When PCI devices call p2sb_bar() during probe, it locks pci_rescan_remove_lock again. Hence the deadlock. To avoid the deadlock, do not lock pci_rescan_remove_lock in p2sb_bar(). Instead, do the lock at fs_initcall. Introduce p2sb_cache_resources() for fs_initcall which gets and caches the P2SB resources. At p2sb_bar(), refer the cache and return to the caller. Before operating the device at P2SB DEVFN for resource cache, check that its device class is PCI_CLASS_MEMORY_OTHER 0x0580 that PCH specifications define. This avoids unexpected operation to other devices at the same DEVFN. Link: https://lore.kernel.org/linux-pci/6xb24fjmptxxn5js2fjrrddjae6twex5bjaftwqsuawuqqqydx@7cl3uik5ef6j/ Fixes: 9745fb07474f ("platform/x86/intel: Add Primary to Sideband (P2SB) bridge support") Cc: [email protected] Suggested-by: Andy Shevchenko <[email protected]> Signed-off-by: Shin'ichiro Kawasaki <[email protected]> Link: https://lore.kernel.org/r/[email protected] Reviewed-by: Andy Shevchenko <[email protected]> Reviewed-by: Ilpo Järvinen <[email protected]> Tested-by Klara Modin <[email protected]> Reviewed-by: Hans de Goede <[email protected]> Signed-off-by: Hans de Goede <[email protected]>
Diffstat (limited to 'rust/macros/zeroable.rs')
0 files changed, 0 insertions, 0 deletions