PCI: Warn if a running device is unaware of reset
authorKeith Busch <kbusch@kernel.org>
Fri, 25 Oct 2024 22:27:55 +0000 (15:27 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 13 Nov 2024 22:48:49 +0000 (16:48 -0600)
If a reset is issued to a running device with a driver that didn't register
the notification callbacks, the driver may be unaware of this event and
have an inconsistent view of the device's state. Log a warning of this
event because there's nothing else indicating the event occured, which
could be confusing when debugging such situations.

Link: https://lore.kernel.org/r/20241025222755.3756162-2-kbusch@meta.com
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Amey Narkhede <ameynarkhede03@gmail.com>
Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
drivers/pci/pci.c

index 338dfcd..bbf12d4 100644 (file)
@@ -5158,6 +5158,8 @@ static void pci_dev_save_and_disable(struct pci_dev *dev)
         */
        if (err_handler && err_handler->reset_prepare)
                err_handler->reset_prepare(dev);
+       else if (dev->driver)
+               pci_warn(dev, "resetting");
 
        /*
         * Wake-up device prior to save.  PM registers default to D0 after
@@ -5191,6 +5193,8 @@ static void pci_dev_restore(struct pci_dev *dev)
         */
        if (err_handler && err_handler->reset_done)
                err_handler->reset_done(dev);
+       else if (dev->driver)
+               pci_warn(dev, "reset done");
 }
 
 /* dev->reset_methods[] is a 0-terminated list of indices into this array */