1. 27 9月, 2018 1 次提交
  2. 21 9月, 2018 2 次提交
  3. 20 7月, 2018 6 次提交
  4. 11 6月, 2018 1 次提交
  5. 03 6月, 2018 2 次提交
    • O
      PCI/DPC: Use the generic pcie_do_fatal_recovery() path · b09803b5
      Oza Pawandeep 提交于
      Our goal is to handle ERR_FATAL errors similarly, whether they are reported
      via AER or via DPC.  A previous commit changed AER so it handles ERR_FATAL
      by calling driver .remove() methods and resetting the Link.  DPC already
      does that (although the Link reset is done automatically by hardware and
      happens before we call the driver .remove() methods).
      
      Restructure the DPC code so it calls the same pcie_do_fatal_recovery()
      interface used by AER.  This makes it clearer that we want to use the same
      path.
      
      Implement the .reset_link() method used by pcie_do_fatal_recovery().  For
      DPC, the actual reset is done automatically by hardware, so we really only
      have to wait for the Link to be inactive, then release the Port from DPC.
      Signed-off-by: NOza Pawandeep <poza@codeaurora.org>
      [bhelgaas: changelog, DPC_FATAL is not a bitfield, can be sequential]
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      b09803b5
    • O
      PCI/DPC: Disable ERR_NONFATAL handling by DPC · 6927868e
      Oza Pawandeep 提交于
      PCIe ERR_NONFATAL errors mean a particular transaction is unreliable but
      the Link is otherwise fully functional (PCIe r4.0, sec 6.2.2).
      
      The AER driver handles these by logging the error details and calling
      driver-supplied pci_error_handlers callbacks.  It does not reset downstream
      devices, does not remove them from the PCI subsystem, does not re-enumerate
      them, and does not call their driver .remove() or .probe() methods.
      
      But DPC driver previously enabled DPC on ERR_NONFATAL, so if the hardware
      supports DPC, these errors caused a Link reset (performed automatically by
      the hardware), followed by the DPC driver removing affected devices (which
      calls their .remove() methods), bringing the Link back up, and
      re-enumerating (which calls driver .probe() methods).
      
      Disable ERR_NONFATAL DPC triggering so these errors will only be handled by
      AER.  This means drivers won't have to deal with different usage of their
      pci_error_handlers callbacks and .probe() and .remove() methods based on
      whether the platform has DPC support.
      Signed-off-by: NOza Pawandeep <poza@codeaurora.org>
      [bhelgaas: changelog]
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      6927868e
  6. 18 5月, 2018 1 次提交
  7. 17 5月, 2018 1 次提交
    • O
      PCI/DPC: Clear interrupt status in interrupt handler top half · 56abbf8a
      Oza Pawandeep 提交于
      The generic IRQ handling code ensures that an interrupt handler runs with
      its interrupt masked or disabled.  If the interrupt is level-triggered, the
      interrupt handler must tell its device to stop asserting the interrupt
      before returning.  If it doesn't, we will immediately take the interrupt
      again when the handler returns and the generic code unmasks the interrupt.
      
      The driver doesn't know whether its interrupt is edge- or level-triggered,
      so it must clear its interrupt source directly in its interrupt handler.
      
      Previously we cleared the DPC interrupt status in the bottom half, i.e., in
      deferred work, which can cause an interrupt storm if the DPC interrupt
      happens to be level-triggered, e.g., if we're using INTx instead of MSI.
      
      Clear the DPC interrupt status bit in the interrupt handler, not in the
      deferred work.
      Signed-off-by: NOza Pawandeep <poza@codeaurora.org>
      [bhelgaas: changelog]
      Signed-off-by: NBjorn Helgaas <helgaas@kernel.org>
      Reviewed-by: NKeith Busch <keith.busch@intel.com>
      56abbf8a
  8. 01 4月, 2018 1 次提交
  9. 10 3月, 2018 1 次提交
  10. 23 2月, 2018 1 次提交
  11. 31 1月, 2018 12 次提交
  12. 29 1月, 2018 1 次提交
  13. 27 1月, 2018 3 次提交
  14. 11 1月, 2018 1 次提交
    • A
      PCI/DPC: Fix shared interrupt handling · aa6ca5a9
      Alex Williamson 提交于
      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: NAlex Williamson <alex.williamson@redhat.com>
      Signed-off-by: NBjorn Helgaas <helgaas@kernel.org>
      Reviewed-by: NKeith Busch <keith.busch@intel.com>
      aa6ca5a9
  15. 25 8月, 2017 2 次提交
  16. 23 5月, 2017 2 次提交
  17. 30 3月, 2017 1 次提交
  18. 11 2月, 2017 1 次提交