Re: [PATCH v3 02/25] PCI: Set error response in config access defines when ops->read() fails
On Thursday 21 October 2021 20:37:27 Naveen Naidu wrote: > Make PCI_OP_READ and PCI_USER_READ_CONFIG set the data value with error > response (~0), when the PCI device read by a host controller fails. > > This ensures that the controller drivers no longer need to fabricate > (~0) value when they detect error. It also gurantees that the error > response (~0) is always set when the controller drivers fails to read a > config register from a device. > > This makes error response fabrication consistent and helps in removal of > a lot of repeated code. > > Suggested-by: Rob Herring > Reviewed-by: Rob Herring > Signed-off-by: Naveen Naidu Reviewed-by: Pali Rohár > --- > drivers/pci/access.c | 10 -- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/pci/access.c b/drivers/pci/access.c > index 46935695cfb9..0f732ba2f71a 100644 > --- a/drivers/pci/access.c > +++ b/drivers/pci/access.c > @@ -42,7 +42,10 @@ int noinline pci_bus_read_config_##size \ > if (PCI_##size##_BAD) return PCIBIOS_BAD_REGISTER_NUMBER; \ > pci_lock_config(flags); \ > res = bus->ops->read(bus, devfn, pos, len, ); \ > - *value = (type)data;\ > + if (res)\ > + SET_PCI_ERROR_RESPONSE(value); \ > + else\ > + *value = (type)data;\ > pci_unlock_config(flags); \ > return res; \ > } > @@ -228,7 +231,10 @@ int pci_user_read_config_##size > \ > ret = dev->bus->ops->read(dev->bus, dev->devfn, \ > pos, sizeof(type), ); \ > raw_spin_unlock_irq(_lock); \ > - *val = (type)data; \ > + if (ret)\ > + SET_PCI_ERROR_RESPONSE(val);\ > + else\ > + *val = (type)data; \ > return pcibios_err_to_errno(ret); \ > }\ > EXPORT_SYMBOL_GPL(pci_user_read_config_##size); > -- > 2.25.1 >
[PATCH v3 02/25] PCI: Set error response in config access defines when ops->read() fails
Make PCI_OP_READ and PCI_USER_READ_CONFIG set the data value with error response (~0), when the PCI device read by a host controller fails. This ensures that the controller drivers no longer need to fabricate (~0) value when they detect error. It also gurantees that the error response (~0) is always set when the controller drivers fails to read a config register from a device. This makes error response fabrication consistent and helps in removal of a lot of repeated code. Suggested-by: Rob Herring Reviewed-by: Rob Herring Signed-off-by: Naveen Naidu --- drivers/pci/access.c | 10 -- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/pci/access.c b/drivers/pci/access.c index 46935695cfb9..0f732ba2f71a 100644 --- a/drivers/pci/access.c +++ b/drivers/pci/access.c @@ -42,7 +42,10 @@ int noinline pci_bus_read_config_##size \ if (PCI_##size##_BAD) return PCIBIOS_BAD_REGISTER_NUMBER; \ pci_lock_config(flags); \ res = bus->ops->read(bus, devfn, pos, len, ); \ - *value = (type)data;\ + if (res)\ + SET_PCI_ERROR_RESPONSE(value); \ + else\ + *value = (type)data;\ pci_unlock_config(flags); \ return res; \ } @@ -228,7 +231,10 @@ int pci_user_read_config_##size \ ret = dev->bus->ops->read(dev->bus, dev->devfn, \ pos, sizeof(type), ); \ raw_spin_unlock_irq(_lock); \ - *val = (type)data; \ + if (ret)\ + SET_PCI_ERROR_RESPONSE(val);\ + else\ + *val = (type)data; \ return pcibios_err_to_errno(ret); \ } \ EXPORT_SYMBOL_GPL(pci_user_read_config_##size); -- 2.25.1