mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-18 04:34:36 +00:00
Power management fix for v4.15-rc4
This fixes an issue in two recent commits that may cause pm_runtime_enable() to be called for too many times for some devices during the "thaw" transition belonging to hibernation. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJaMyQRAAoJEILEb/54YlRx8C0P/j4/LO0dLY4bNPVfeMDpZrcz iXozHkIg2wKztuO7j+A3sRhShzu90wGjYsN9t3rrEsdqQn5GlB98vU+uak6heyRI kY/yLPYMnzyZbJ7Rlix6BtZgykhs7w20qxTMuy2ZV7AbeZwODVlm9swDswLcpI1D tZwbbj+g47I0uC2cuhc0GlcFWcTEyBp9RjsdRKbrFnrDPDOBhJg2MkQwPZ1deG0a q5PmTI0uskrqJif5ovEhMgQ24pE4C6t88HZj5Dg8JO3H4vaeNrTgHSFE8UjID3fM PH2DspE9vyTa0irxEcLQmq6rzHSZZkqdirzPn5HP8gz6zQVBMeAe277r6P2DrxxJ vygiG0pnDsntiA3ygfVMkVr/pL35Y6TPy2kJpKN1+LUDC5If4iObW91qu0CN5pWJ QxUS76TIGXTEIPhHLiy+OKPFTAYAADSeZAaedhdHLE2a3iPGB6TxT4RlPU0h3txD 4+aQ4cbi2cyGTbPD83jaoKbzL5oRUxnnZYGJEXu/Opbay8LDTSHaTTYxAohTMUj5 46eBEJ+hX8SDqVeAlX1UL37Wjx0zHYPyJSjYFIm5Imr/JovftG6X7lCDlFBA86VN DKw5Swc12QmaGmC9vQPMUwtn/QN2R0WCBm6Hisi/3OIu2/+pY/xqtBI2eEgExsgZ PYVvmIwqAl2+M6HcweqJ =0D8g -----END PGP SIGNATURE----- Merge tag 'pm-4.15-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm Pull power management fix from Rafael Wysocki: "This fixes an issue in two recent commits that may cause pm_runtime_enable() to be called for too many times for some devices during the "thaw" transition belonging to hibernation" * tag 'pm-4.15-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: PM / sleep: Avoid excess pm_runtime_enable() calls in device_resume()
This commit is contained in:
commit
032b4cc8ff
4 changed files with 18 additions and 2 deletions
|
@ -1138,7 +1138,7 @@ int acpi_subsys_thaw_noirq(struct device *dev)
|
||||||
* skip all of the subsequent "thaw" callbacks for the device.
|
* skip all of the subsequent "thaw" callbacks for the device.
|
||||||
*/
|
*/
|
||||||
if (dev_pm_smart_suspend_and_suspended(dev)) {
|
if (dev_pm_smart_suspend_and_suspended(dev)) {
|
||||||
dev->power.direct_complete = true;
|
dev_pm_skip_next_resume_phases(dev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -525,6 +525,21 @@ static void dpm_watchdog_clear(struct dpm_watchdog *wd)
|
||||||
|
|
||||||
/*------------------------- Resume routines -------------------------*/
|
/*------------------------- Resume routines -------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dev_pm_skip_next_resume_phases - Skip next system resume phases for device.
|
||||||
|
* @dev: Target device.
|
||||||
|
*
|
||||||
|
* Make the core skip the "early resume" and "resume" phases for @dev.
|
||||||
|
*
|
||||||
|
* This function can be called by middle-layer code during the "noirq" phase of
|
||||||
|
* system resume if necessary, but not by device drivers.
|
||||||
|
*/
|
||||||
|
void dev_pm_skip_next_resume_phases(struct device *dev)
|
||||||
|
{
|
||||||
|
dev->power.is_late_suspended = false;
|
||||||
|
dev->power.is_suspended = false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* device_resume_noirq - Execute a "noirq resume" callback for given device.
|
* device_resume_noirq - Execute a "noirq resume" callback for given device.
|
||||||
* @dev: Device to handle.
|
* @dev: Device to handle.
|
||||||
|
|
|
@ -999,7 +999,7 @@ static int pci_pm_thaw_noirq(struct device *dev)
|
||||||
* the subsequent "thaw" callbacks for the device.
|
* the subsequent "thaw" callbacks for the device.
|
||||||
*/
|
*/
|
||||||
if (dev_pm_smart_suspend_and_suspended(dev)) {
|
if (dev_pm_smart_suspend_and_suspended(dev)) {
|
||||||
dev->power.direct_complete = true;
|
dev_pm_skip_next_resume_phases(dev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -765,6 +765,7 @@ extern int pm_generic_poweroff_late(struct device *dev);
|
||||||
extern int pm_generic_poweroff(struct device *dev);
|
extern int pm_generic_poweroff(struct device *dev);
|
||||||
extern void pm_generic_complete(struct device *dev);
|
extern void pm_generic_complete(struct device *dev);
|
||||||
|
|
||||||
|
extern void dev_pm_skip_next_resume_phases(struct device *dev);
|
||||||
extern bool dev_pm_smart_suspend_and_suspended(struct device *dev);
|
extern bool dev_pm_smart_suspend_and_suspended(struct device *dev);
|
||||||
|
|
||||||
#else /* !CONFIG_PM_SLEEP */
|
#else /* !CONFIG_PM_SLEEP */
|
||||||
|
|
Loading…
Add table
Reference in a new issue