On Monday 05 January 2009, Pavel Machek wrote: > 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"? Yes, thanks. > > @@ -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? Yes, but the device's config space is still available at this point. > Acked-by: Pavel Machek <Pavel@xxxxxxx> Thanks, Rafael _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm