aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pcie/portdrv_core.c
diff options
context:
space:
mode:
authorAlex Williamson <alex.williamson@redhat.com>2017-12-14 08:20:18 -0700
committerBjorn Helgaas <helgaas@kernel.org>2018-01-10 15:44:16 -0600
commitaa6ca5a9d7d08bc151f9de6101fe466fae4255c0 (patch)
tree6fed6408edeeb17b5d4c264368b4c4fb8c672562 /drivers/pci/pcie/portdrv_core.c
parentLinux 4.15-rc4 (diff)
downloadlinux-dev-aa6ca5a9d7d08bc151f9de6101fe466fae4255c0.tar.xz
linux-dev-aa6ca5a9d7d08bc151f9de6101fe466fae4255c0.zip
PCI/DPC: Fix shared interrupt handling
DPC supports shared interrupts, but it plays very loosely with testing whether the interrupt is generated by DPC before generating spurious log messages, such as: dpc 0000:10:01.2:pcie010: DPC containment event, status:0x1f00 source:0x0000 Testing the status register for zero or -1 is not sufficient when the device supports the RP PIO First Error Pointer register. Change this to test whether the interrupt is enabled in the control register, retaining the device present test, and that the status reports the interrupt as signaled and DPC is triggered, clearing as a spurious interrupt otherwise. Additionally, since the interrupt is actually serviced by a workqueue, disable the interrupt in the control register until that completes or else we may never see it execute due to further incoming interrupts. A software generated DPC floods the system otherwise. Signed-off-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Bjorn Helgaas <helgaas@kernel.org> Reviewed-by: Keith Busch <keith.busch@intel.com>
Diffstat (limited to 'drivers/pci/pcie/portdrv_core.c')
0 files changed, 0 insertions, 0 deletions