PCI/DPC: Use PCI_POSSIBLE_ERROR() to check config reads
authorNaveen Naidu <naveennaidu479@gmail.com>
Thu, 18 Nov 2021 14:03:29 +0000 (19:33 +0530)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 18 Nov 2021 20:13:18 +0000 (14:13 -0600)
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/9b0632f1f183432149f495cf12bdd5a72cc597a4.1637243717.git.naveennaidu479@gmail.com
Signed-off-by: Naveen Naidu <naveennaidu479@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pcie/dpc.c

index c556e7beafe38d8e26c59906df74f371a13cf6a9..3e9afee02e8d1616bd4ab5278bc2e10e95f42a6b 100644 (file)
@@ -79,7 +79,7 @@ static bool dpc_completed(struct pci_dev *pdev)
        u16 status;
 
        pci_read_config_word(pdev, pdev->dpc_cap + PCI_EXP_DPC_STATUS, &status);
-       if ((status != 0xffff) && (status & PCI_EXP_DPC_STATUS_TRIGGER))
+       if ((!PCI_POSSIBLE_ERROR(status)) && (status & PCI_EXP_DPC_STATUS_TRIGGER))
                return false;
 
        if (test_bit(PCI_DPC_RECOVERING, &pdev->priv_flags))
@@ -312,7 +312,7 @@ static irqreturn_t dpc_irq(int irq, void *context)
 
        pci_read_config_word(pdev, cap + PCI_EXP_DPC_STATUS, &status);
 
-       if (!(status & PCI_EXP_DPC_STATUS_INTERRUPT) || status == (u16)(~0))
+       if (!(status & PCI_EXP_DPC_STATUS_INTERRUPT) || PCI_POSSIBLE_ERROR(status))
                return IRQ_NONE;
 
        pci_write_config_word(pdev, cap + PCI_EXP_DPC_STATUS,