Skip to content

Commit

Permalink
PCI: fix AER capability check
Browse files Browse the repository at this point in the history
The 'use pci_find_ext_capability everywhere' cleanup brought a new bug,
which makes the AER stop working.  Fix it by actually using find_ext_cap
instead of just find_cap.  Drop the unused config space size define while
we're at it.

Signed-off-by: Yu Zhao <[email protected]>
Signed-off-by: Jesse Barnes <[email protected]>
  • Loading branch information
tylerzhao7684 authored and jbarnes993 committed Oct 20, 2008
1 parent 0927678 commit 270c66b
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 12 deletions.
11 changes: 3 additions & 8 deletions Documentation/PCI/pcieaer-howto.txt
Original file line number Diff line number Diff line change
Expand Up @@ -203,22 +203,17 @@ to mmio_enabled.

3.3 helper functions

3.3.1 int pci_find_aer_capability(struct pci_dev *dev);
pci_find_aer_capability locates the PCI Express AER capability
in the device configuration space. If the device doesn't support
PCI-Express AER, the function returns 0.

3.3.2 int pci_enable_pcie_error_reporting(struct pci_dev *dev);
3.3.1 int pci_enable_pcie_error_reporting(struct pci_dev *dev);
pci_enable_pcie_error_reporting enables the device to send error
messages to root port when an error is detected. Note that devices
don't enable the error reporting by default, so device drivers need
call this function to enable it.

3.3.3 int pci_disable_pcie_error_reporting(struct pci_dev *dev);
3.3.2 int pci_disable_pcie_error_reporting(struct pci_dev *dev);
pci_disable_pcie_error_reporting disables the device to send error
messages to root port when an error is detected.

3.3.4 int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev);
3.3.3 int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev);
pci_cleanup_aer_uncorrect_error_status cleanups the uncorrectable
error status register.

Expand Down
4 changes: 2 additions & 2 deletions drivers/pci/pcie/aer/aerdrv_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@ int pci_enable_pcie_error_reporting(struct pci_dev *dev)
u16 reg16 = 0;
int pos;

pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR);
if (!pos)
return -EIO;

pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR);
pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
if (!pos)
return -EIO;

Expand Down
1 change: 0 additions & 1 deletion drivers/pci/pcie/portdrv.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
#define PCIE_CAPABILITIES_REG 0x2
#define PCIE_SLOT_CAPABILITIES_REG 0x14
#define PCIE_PORT_DEVICE_MAXSERVICES 4
#define PCI_CFG_SPACE_SIZE 256

#define get_descriptor_id(type, service) (((type - 4) << 4) | service)

Expand Down
1 change: 0 additions & 1 deletion include/linux/aer.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
#if defined(CONFIG_PCIEAER)
/* pci-e port driver needs this function to enable aer */
extern int pci_enable_pcie_error_reporting(struct pci_dev *dev);
extern int pci_find_aer_capability(struct pci_dev *dev);
extern int pci_disable_pcie_error_reporting(struct pci_dev *dev);
extern int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev);
#else
Expand Down

0 comments on commit 270c66b

Please sign in to comment.