[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <86bac48f-c22f-4e58-84cf-58d6df14ccee@linux.ibm.com>
Date: Tue, 20 Jan 2026 11:50:45 -0800
From: Farhan Ali <alifm@...ux.ibm.com>
To: Niklas Schnelle <schnelle@...ux.ibm.com>, linux-s390@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-pci@...r.kernel.org
Cc: helgaas@...nel.org, lukas@...ner.de, alex@...zbot.org, clg@...hat.com,
stable@...r.kernel.org, mjrosato@...ux.ibm.com
Subject: Re: [PATCH v7 3/9] PCI: Avoid saving config space state if
inaccessible
On 1/19/2026 1:23 PM, Niklas Schnelle wrote:
> On Wed, 2026-01-07 at 10:32 -0800, Farhan Ali wrote:
>> The current reset process saves the device's config space state before reset
>> and restores it afterward. However errors may occur unexpectedly and it may
>> then be impossible to save config space because the device may be inaccessible
>> (e.g. DPC) or config space may be corrupted. This results in saving corrupted
>> values that get written back to the device during state restoration.
>>
>> With a reset we want to recover/restore the device into a functional
>> state. So avoid saving the state of the config space when the device config
>> space is inaccessible.
>>
>> Signed-off-by: Farhan Ali<alifm@...ux.ibm.com>
>> ---
>> drivers/pci/pci.c | 7 +++++++
>> 1 file changed, 7 insertions(+)
>>
>> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
>> index c105e285cff8..74d21c97654d 100644
>> --- a/drivers/pci/pci.c
>> +++ b/drivers/pci/pci.c
>> @@ -4960,6 +4960,7 @@ EXPORT_SYMBOL_GPL(pci_dev_unlock);
>>
>> static void pci_dev_save_and_disable(struct pci_dev *dev)
>> {
>> + u32 val;
>> const struct pci_error_handlers *err_handler =
>> dev->driver ? dev->driver->err_handler : NULL;
>>
>> @@ -4980,6 +4981,12 @@ static void pci_dev_save_and_disable(struct pci_dev *dev)
>> */
>> pci_set_power_state(dev, PCI_D0);
>>
>> + pci_read_config_dword(dev, PCI_COMMAND, &val);
> Since the PCI_COMMAND field is only 16 bits I think it warrants a
> comment that you're reading both PCI_COMMAND and PCI_STATUS and that
> both together should never be 0xffffffff and why. I think at least
> PCI_STATUS_PARITY should never be set in a config space we want to
> restore.
Makes sense will add a comment. Note this is the mechanism used to check
device config accessibility in pci_dev_wait() (for some context
discussed here
https://lore.kernel.org/all/cd1fa387-df80-4756-a2dc-5acdd0f09697@linux.ibm.com/).
Thanks
Farhan
Powered by blists - more mailing lists