Loading drivers/pci/pcie/aer_inject.c +38 −28 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; } Loading @@ -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; Loading @@ -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; } Loading Loading
drivers/pci/pcie/aer_inject.c +38 −28 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; } Loading @@ -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; Loading @@ -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; } Loading