PCI/AER: Refactor error injection fallbacks
authorKeith Busch <keith.busch@intel.com>
Thu, 11 Oct 2018 18:34:12 +0000 (12:34 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 19 Oct 2018 00:43:19 +0000 (19:43 -0500)
Move the bus ops fallback into separate functions.  No functional change
here.

Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pcie/aer_inject.c

index 726987f..95d4759 100644 (file)
@@ -176,14 +176,48 @@ static u32 *find_pci_config_dword(struct aer_error *err, int where,
        return target;
 }
 
+static int aer_inj_read(struct pci_bus *bus, unsigned int devfn, int where,
+                       int size, u32 *val)
+{
+       struct pci_ops *ops, *my_ops;
+       int rv;
+
+       ops = __find_pci_bus_ops(bus);
+       if (!ops)
+               return -1;
+
+       my_ops = bus->ops;
+       bus->ops = ops;
+       rv = ops->read(bus, devfn, where, size, val);
+       bus->ops = my_ops;
+
+       return rv;
+}
+
+static int aer_inj_write(struct pci_bus *bus, unsigned int devfn, int where,
+                        int size, u32 val)
+{
+       struct pci_ops *ops, *my_ops;
+       int rv;
+
+       ops = __find_pci_bus_ops(bus);
+       if (!ops)
+               return -1;
+
+       my_ops = bus->ops;
+       bus->ops = ops;
+       rv = ops->write(bus, devfn, where, size, val);
+       bus->ops = my_ops;
+
+       return rv;
+}
+
 static int aer_inj_read_config(struct pci_bus *bus, unsigned int devfn,
                               int where, int size, u32 *val)
 {
        u32 *sim;
        struct aer_error *err;
        unsigned long flags;
-       struct pci_ops *ops;
-       struct pci_ops *my_ops;
        int domain;
        int rv;
 
@@ -204,18 +238,7 @@ static int aer_inj_read_config(struct pci_bus *bus, unsigned int devfn,
                return 0;
        }
 out:
-       ops = __find_pci_bus_ops(bus);
-       /*
-        * pci_lock must already be held, so we can directly
-        * manipulate bus->ops.  Many config access functions,
-        * including pci_generic_config_read() require the original
-        * bus->ops be installed to function, so temporarily put them
-        * back.
-        */
-       my_ops = bus->ops;
-       bus->ops = ops;
-       rv = ops->read(bus, devfn, where, size, val);
-       bus->ops = my_ops;
+       rv = aer_inj_read(bus, devfn, where, size, val);
        spin_unlock_irqrestore(&inject_lock, flags);
        return rv;
 }
@@ -227,8 +250,6 @@ static int aer_inj_write_config(struct pci_bus *bus, unsigned int devfn,
        struct aer_error *err;
        unsigned long flags;
        int rw1cs;
-       struct pci_ops *ops;
-       struct pci_ops *my_ops;
        int domain;
        int rv;
 
@@ -252,18 +273,7 @@ static int aer_inj_write_config(struct pci_bus *bus, unsigned int devfn,
                return 0;
        }
 out:
-       ops = __find_pci_bus_ops(bus);
-       /*
-        * pci_lock must already be held, so we can directly
-        * manipulate bus->ops.  Many config access functions,
-        * including pci_generic_config_write() require the original
-        * bus->ops be installed to function, so temporarily put them
-        * back.
-        */
-       my_ops = bus->ops;
-       bus->ops = ops;
-       rv = ops->write(bus, devfn, where, size, val);
-       bus->ops = my_ops;
+       rv = aer_inj_write(bus, devfn, where, size, val);
        spin_unlock_irqrestore(&inject_lock, flags);
        return rv;
 }