mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
PCI/PM: Set up runtime PM even for devices without PCI PM
4d4c10f763("PCI: Explicitly put devices into D0 when initializing") intended to put PCI devices into D0, but in doing so unintentionally changed runtime PM initialization not to occur on devices that don't support PCI PM. This caused a regression in vfio-pci due to an imbalance with its use. Adjust the logic in pci_pm_init() so that even if PCI PM isn't supported runtime PM is still initialized. Fixes:4d4c10f763("PCI: Explicitly put devices into D0 when initializing") Reported-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Closes: https://lore.kernel.org/linux-pci/20250424043232.1848107-1-superm1@kernel.org/T/#m7e8929d6421690dc8bd6dc639d86c2b4db27cbc4 Reported-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Closes: https://lore.kernel.org/linux-pci/20250424043232.1848107-1-superm1@kernel.org/T/#m40d277dcdb9be64a1609a82412d1aa906263e201 Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Tested-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Tested-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com> Acked-by: Rafael J. Wysocki <rafael@kernel.org> Cc: Alex Williamson <alex.williamson@redhat.com> Link: https://patch.msgid.link/20250611233117.61810-1-superm1@kernel.org
This commit is contained in:
parent
19272b37aa
commit
907a7a2e5b
|
|
@ -3217,14 +3217,14 @@ void pci_pm_init(struct pci_dev *dev)
|
|||
/* find PCI PM capability in list */
|
||||
pm = pci_find_capability(dev, PCI_CAP_ID_PM);
|
||||
if (!pm)
|
||||
return;
|
||||
goto poweron;
|
||||
/* Check device's ability to generate PME# */
|
||||
pci_read_config_word(dev, pm + PCI_PM_PMC, &pmc);
|
||||
|
||||
if ((pmc & PCI_PM_CAP_VER_MASK) > 3) {
|
||||
pci_err(dev, "unsupported PM cap regs version (%u)\n",
|
||||
pmc & PCI_PM_CAP_VER_MASK);
|
||||
return;
|
||||
goto poweron;
|
||||
}
|
||||
|
||||
dev->pm_cap = pm;
|
||||
|
|
@ -3269,6 +3269,7 @@ void pci_pm_init(struct pci_dev *dev)
|
|||
pci_read_config_word(dev, PCI_STATUS, &status);
|
||||
if (status & PCI_STATUS_IMM_READY)
|
||||
dev->imm_ready = 1;
|
||||
poweron:
|
||||
pci_pm_power_up_and_verify_state(dev);
|
||||
pm_runtime_forbid(&dev->dev);
|
||||
pm_runtime_set_active(&dev->dev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user