PCI/AER: Abstract AER interrupt handling
authorKeith Busch <keith.busch@intel.com>
Thu, 11 Oct 2018 18:34:11 +0000 (12:34 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 19 Oct 2018 00:43:09 +0000 (19:43 -0500)
commit390e2db8248075ae2f31a7046a88eda0f9784310
treef99fd4dd81976702e38e7d7b0261f907a3a84d50
parent0e98db259fd8760fde556e640b447dadeceefc96
PCI/AER: Abstract AER interrupt handling

The aer_inject module was directly calling aer_irq().  This required the
AER driver export its private IRQ handler for no other reason than to
support error injection.  A driver should not have to expose its private
interfaces, so use the IRQ subsystem to route injection to the AER driver,
and make aer_irq() a private interface.

This provides additional benefits:

First, directly calling the IRQ handler bypassed the IRQ subsytem so the
injection wasn't really synthesizing what happens if a shared AER interrupt
occurs.

The error injection had to provide the callback data directly, which may be
racing with a removal that is freeing that structure.  The IRQ subsystem
can handle that race.

Finally, using the IRQ subsystem automatically reacts to threaded IRQs,
keeping the error injection abstracted from that implementation detail.

Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pcie/aer.c
drivers/pci/pcie/aer_inject.c
drivers/pci/pcie/portdrv.h