On Sat, Apr 10, 2021 at 02:28:45PM +0200, Pali Rohár wrote: > I see that more PCI service drivers in their interrupt handlers are > accessing PCI config space. > > E.g. in PCIe Hot Plug interrupt handler pciehp_isr handler is called > pcie_capability_read_word() function. > > It is correct? Because these capability functions are protected by > pci_lock_config() / pci_unlock_config() calls. Looks fine to me. That's a raw_spin_lock, which is allowed to be taken in interrupt context. > And what would happen when during execution of reading or writing to > PCIe config space (e.g. via pcie_capability_read_word()) is triggered > PCIe HP interrupt? Would not enter interrupt handler function in > deadlock (waiting for unlocking config space)? The interrupt handler would spin until the lock is released. raw_spin_locks are not supposed to be held for a prolonged period of time. The interrupt is masked when it triggers and until it's been handled, so the interrupt handler never runs multiple times concurrently. See e.g. handle_level_irq() in kernel/irq/chip.c. Thanks, Lukas