PCI: cpqphp: Use PCI_POSSIBLE_ERROR() to check config reads
authorNaveen Naidu <naveennaidu479@gmail.com>
Thu, 18 Nov 2021 14:03:31 +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.

Link: https://lore.kernel.org/r/b12005c0d57bb9d4c8b486724d078b7bd92f8321.1637243717.git.naveennaidu479@gmail.com
Signed-off-by: Naveen Naidu <naveennaidu479@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/hotplug/cpqphp_ctrl.c

index ed7b58eb64d26f3568939da72af75e73fa207d01..93fd2a621822ca0c64eb5f0440315447c07329a2 100644 (file)
@@ -2273,7 +2273,7 @@ static u32 configure_new_device(struct controller  *ctrl, struct pci_func  *func
                while ((function < max_functions) && (!stop_it)) {
                        pci_bus_read_config_dword(ctrl->pci_bus, PCI_DEVFN(func->device, function), 0x00, &ID);
 
-                       if (ID == 0xFFFFFFFF) {
+                       if (PCI_POSSIBLE_ERROR(ID)) {
                                function++;
                        } else {
                                /* Setup slot structure. */
@@ -2517,7 +2517,7 @@ static int configure_new_function(struct controller *ctrl, struct pci_func *func
                        pci_bus_read_config_dword(pci_bus, PCI_DEVFN(device, 0), 0x00, &ID);
                        pci_bus->number = func->bus;
 
-                       if (ID != 0xFFFFFFFF) {   /*  device present */
+                       if (!PCI_POSSIBLE_ERROR(ID)) {    /*  device present */
                                /* Setup slot structure. */
                                new_slot = cpqhp_slot_create(hold_bus_node->base);