On Mon, Apr 14, 2025 at 03:18:23PM -0600, Alex Williamson wrote: > This reverts commit 479380efe1625e251008d24b2810283db60d6fcd. > > The reset_method attribute on a PCI device is only intended to manage > the availability of function scoped resets for a device. It was never > intended to restrict resets targeting the bus or slot. > > In introducing a restriction that each device must support function > level reset by testing pci_reset_supported(), we essentially create a > catch-22, that a device must have a function scope reset in order to > support bus/slot reset, when we use bus/slot reset to effect a reset > of a device that does not support a function scoped reset, especially > multi-function devices. > > This breaks the majority of uses cases where vfio-pci uses bus/slot > resets to manage multifunction devices that do not support function > scoped resets. > > Fixes: 479380efe162 ("PCI: Avoid reset when disabled via sysfs") > Reported-by: Cal Peake <cp@xxxxxxxxxxxxxxxxxxx> > Link: https://lore.kernel.org/all/808e1111-27b7-f35b-6d5c-5b275e73677b@xxxxxxxxxxxxxxxxxxx > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Alex Williamson <alex.williamson@xxxxxxxxxx> Applied with Kevin's reviewed-by to pci/for-linus for v6.15, thanks, and sorry for the breakage. > --- > drivers/pci/pci.c | 4 ---- > 1 file changed, 4 deletions(-) > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index 4d7c9f64ea24..e77d5b53c0ce 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -5429,8 +5429,6 @@ static bool pci_bus_resettable(struct pci_bus *bus) > return false; > > list_for_each_entry(dev, &bus->devices, bus_list) { > - if (!pci_reset_supported(dev)) > - return false; > if (dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET || > (dev->subordinate && !pci_bus_resettable(dev->subordinate))) > return false; > @@ -5507,8 +5505,6 @@ static bool pci_slot_resettable(struct pci_slot *slot) > list_for_each_entry(dev, &slot->bus->devices, bus_list) { > if (!dev->slot || dev->slot != slot) > continue; > - if (!pci_reset_supported(dev)) > - return false; > if (dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET || > (dev->subordinate && !pci_bus_resettable(dev->subordinate))) > return false; > -- > 2.48.1 >