Merge branch 'pci/aer'
authorBjorn Helgaas <bhelgaas@google.com>
Wed, 15 Aug 2018 19:58:45 +0000 (14:58 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 15 Aug 2018 19:58:45 +0000 (14:58 -0500)
  - Decode AER errors with names similar to "lspci" (Tyler Baicar)

  - Expose AER statistics in sysfs (Rajat Jain)

  - Clear AER status bits selectively based on the type of recovery (Oza
    Pawandeep)

  - Honor "pcie_ports=native" even if HEST sets FIRMWARE_FIRST (Alexandru
    Gagniuc)

  - Don't clear AER status bits if we're using the "Firmware-First"
    strategy where firmware owns the registers (Alexandru Gagniuc)

* pci/aer:
  PCI/AER: Don't clear AER bits if error handling is Firmware-First
  PCI/AER: Remove duplicate PCI_EXP_AER_FLAGS definition
  PCI/portdrv: Remove pcie_portdrv_err_handler.slot_reset
  PCI/AER: Clear device status bits during ERR_COR handling
  PCI/AER: Clear device status bits during ERR_FATAL and ERR_NONFATAL
  PCI/AER: Remove ERR_FATAL code from ERR_NONFATAL path
  PCI/AER: Factor out ERR_NONFATAL status bit clearing
  PCI/AER: Clear only ERR_NONFATAL bits during non-fatal recovery
  PCI/AER: Clear only ERR_FATAL status bits during fatal recovery
  PCI/AER: Honor "pcie_ports=native" even if HEST sets FIRMWARE_FIRST
  PCI/AER: Add sysfs attributes for rootport cumulative stats
  PCI/AER: Add sysfs attributes to provide AER stats and breakdown
  PCI/AER: Define aer_stats structure for AER capable devices
  PCI/AER: Move internal declarations to drivers/pci/pci.h
  PCI/AER: Adopt lspci names for AER error decoding
  PCI/AER: Expose internal API for obtaining AER information

# Conflicts:
# drivers/pci/pci.h

1  2 
drivers/pci/pci.h
drivers/pci/pcie/err.c
drivers/pci/probe.c
include/linux/pci.h

index 08817253c8a2fa4851330dac05d5eb9c3f8e37d4,138a2b66f620e98025ca4ba9d12ee06b5c9343f0..3ac0d99afe67154ed4e2c6f499cc7d596fbf65f8
@@@ -301,16 -300,34 +301,44 @@@ static inline bool pci_dev_is_disconnec
        return test_bit(PCI_DEV_DISCONNECTED, &dev->priv_flags);
  }
  
 +static inline void pci_dev_assign_added(struct pci_dev *dev, bool added)
 +{
 +      assign_bit(PCI_DEV_ADDED, &dev->priv_flags, added);
 +}
 +
 +static inline bool pci_dev_is_added(const struct pci_dev *dev)
 +{
 +      return test_bit(PCI_DEV_ADDED, &dev->priv_flags);
 +}
 +
+ #ifdef CONFIG_PCIEAER
+ #include <linux/aer.h>
+ #define AER_MAX_MULTI_ERR_DEVICES     5       /* Not likely to have more */
+ struct aer_err_info {
+       struct pci_dev *dev[AER_MAX_MULTI_ERR_DEVICES];
+       int error_dev_num;
+       unsigned int id:16;
+       unsigned int severity:2;        /* 0:NONFATAL | 1:FATAL | 2:COR */
+       unsigned int __pad1:5;
+       unsigned int multi_error_valid:1;
+       unsigned int first_error:5;
+       unsigned int __pad2:2;
+       unsigned int tlp_header_valid:1;
+       unsigned int status;            /* COR/UNCOR Error Status */
+       unsigned int mask;              /* COR/UNCOR Error Mask */
+       struct aer_header_log_regs tlp; /* TLP Header */
+ };
+ int aer_get_device_error_info(struct pci_dev *dev, struct aer_err_info *info);
+ void aer_print_error(struct pci_dev *dev, struct aer_err_info *info);
+ #endif        /* CONFIG_PCIEAER */
  #ifdef CONFIG_PCI_ATS
  void pci_restore_ats_state(struct pci_dev *dev);
  #else
Simple merge
Simple merge
Simple merge