PCI: pciehp: Use PCI_POSSIBLE_ERROR() to check config reads
When config pci_ops.read() can detect failed PCI transactions, the data returned to the CPU is PCI_ERROR_RESPONSE (~0 or 0xffffffff). Obviously a successful PCI config read may *also* return that data if a config register happens to contain ~0, so it doesn't definitively indicate an error unless we know the register cannot contain ~0. Use PCI_POSSIBLE_ERROR() to check the response we get when we read data from hardware. This unifies PCI error response checking and makes error checks consistent and easier to find. Compile tested only. Link: https://lore.kernel.org/r/e185b052fbfd530df703a36dd31126cb870eed95.1637243717.git.naveennaidu479@gmail.com Signed-off-by: Naveen Naidu <naveennaidu479@gmail.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Lukas Wunner <lukas@wunner.de>
This commit is contained in:
parent
242f288e82
commit
a3b0f10db1
|
@ -89,7 +89,7 @@ static int pcie_poll_cmd(struct controller *ctrl, int timeout)
|
|||
|
||||
do {
|
||||
pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &slot_status);
|
||||
if (slot_status == (u16) ~0) {
|
||||
if (PCI_POSSIBLE_ERROR(slot_status)) {
|
||||
ctrl_info(ctrl, "%s: no response from device\n",
|
||||
__func__);
|
||||
return 0;
|
||||
|
@ -165,7 +165,7 @@ static void pcie_do_write_cmd(struct controller *ctrl, u16 cmd,
|
|||
pcie_wait_cmd(ctrl);
|
||||
|
||||
pcie_capability_read_word(pdev, PCI_EXP_SLTCTL, &slot_ctrl);
|
||||
if (slot_ctrl == (u16) ~0) {
|
||||
if (PCI_POSSIBLE_ERROR(slot_ctrl)) {
|
||||
ctrl_info(ctrl, "%s: no response from device\n", __func__);
|
||||
goto out;
|
||||
}
|
||||
|
@ -236,7 +236,7 @@ int pciehp_check_link_active(struct controller *ctrl)
|
|||
int ret;
|
||||
|
||||
ret = pcie_capability_read_word(pdev, PCI_EXP_LNKSTA, &lnk_status);
|
||||
if (ret == PCIBIOS_DEVICE_NOT_FOUND || lnk_status == (u16)~0)
|
||||
if (ret == PCIBIOS_DEVICE_NOT_FOUND || PCI_POSSIBLE_ERROR(lnk_status))
|
||||
return -ENODEV;
|
||||
|
||||
ret = !!(lnk_status & PCI_EXP_LNKSTA_DLLLA);
|
||||
|
@ -443,7 +443,7 @@ int pciehp_card_present(struct controller *ctrl)
|
|||
int ret;
|
||||
|
||||
ret = pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &slot_status);
|
||||
if (ret == PCIBIOS_DEVICE_NOT_FOUND || slot_status == (u16)~0)
|
||||
if (ret == PCIBIOS_DEVICE_NOT_FOUND || PCI_POSSIBLE_ERROR(slot_status))
|
||||
return -ENODEV;
|
||||
|
||||
return !!(slot_status & PCI_EXP_SLTSTA_PDS);
|
||||
|
@ -621,7 +621,7 @@ static irqreturn_t pciehp_isr(int irq, void *dev_id)
|
|||
|
||||
read_status:
|
||||
pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &status);
|
||||
if (status == (u16) ~0) {
|
||||
if (PCI_POSSIBLE_ERROR(status)) {
|
||||
ctrl_info(ctrl, "%s: no response from device\n", __func__);
|
||||
if (parent)
|
||||
pm_runtime_put(parent);
|
||||
|
|
Loading…
Reference in New Issue