Hi! > PCI devices without drivers are not disabled during suspend and > hibernation, but they are enabled during resume, with the help of > pci_reenable_device(), so there is an unbalanced execution of > pcibios_enable_device() in the resume code path. > > To correct this introduce function pci_disable_enabled_device() > that will disable the argument device, if it is enabled when the > function is being run, without updating the device's pci_dev > structure and use it in the suspend code path to balance the > pci_reenable_device() executed during resume. > +/** > + * pci_disable_enabled_device - Disable device without updating enable_cnt > + * @dev: PCI device to disable > + * > + * NOTE: This function is a backend of PCI power management routines and is > + * not supposed to be called drivers. "by drivers"? > @@ -441,7 +455,10 @@ static int pci_pm_suspend(struct device > } > } else if (pci_has_legacy_pm_support(pci_dev)) { > error = pci_legacy_suspend(dev, PMSG_SUSPEND); > + } else { > + pci_default_pm_suspend_early(pci_dev); > } > + > pci_fixup_device(pci_fixup_suspend, pci_dev); > > return error; So tre fixup runs on the disabled device? Acked-by: Pavel Machek <Pavel@xxxxxxx> -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm