From: Ulf Hansson <ulf.hansson@linaro.org> To: Wolfram Sang <wsa@the-dreams.de>, "Rafael J . Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org Cc: Kevin Hilman <khilman@kernel.org>, Jarkko Nikula <jarkko.nikula@linux.intel.com>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Mika Westerberg <mika.westerberg@linux.intel.com>, Jisheng Zhang <jszhang@marvell.com>, John Stultz <john.stultz@linaro.org>, Guodong Xu <guodong.xu@linaro.org>, Sumit Semwal <sumit.semwal@linaro.org>, Haojian Zhuang <haojian.zhuang@linaro.org>, linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org, Ulf Hansson <ulf.hansson@linaro.org> Subject: [PATCH v2 3/9] PM / ACPI: Split code validating need for runtime resume in ->prepare() Date: Wed, 23 Aug 2017 16:42:03 +0200 [thread overview] Message-ID: <1503499329-28834-4-git-send-email-ulf.hansson@linaro.org> (raw) In-Reply-To: <1503499329-28834-1-git-send-email-ulf.hansson@linaro.org> Move the code dealing with validation of whether runtime resuming the device is needed during system suspend. In this way it becomes more clear for what circumstances ACPI is prevented from trying the direct_complete path. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> --- Changes in v2: - Updated return expression for acpi_dev_needs_resume(). --- drivers/acpi/device_pm.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c index 632f214..5181057 100644 --- a/drivers/acpi/device_pm.c +++ b/drivers/acpi/device_pm.c @@ -989,6 +989,27 @@ int acpi_dev_resume_early(struct device *dev) } EXPORT_SYMBOL_GPL(acpi_dev_resume_early); +static bool acpi_dev_needs_resume(struct device *dev, struct acpi_device *adev) +{ + u32 sys_target = acpi_target_system_state(); + int ret, state; + + if (device_may_wakeup(dev) != !!adev->wakeup.prepare_count) + return true; + + if (sys_target == ACPI_STATE_S0) + return false; + + if (adev->power.flags.dsw_present) + return true; + + ret = acpi_dev_pm_get_state(dev, adev, sys_target, NULL, &state); + if (ret) + return true; + + return state != adev->power.state; +} + /** * acpi_subsys_prepare - Prepare device for system transition to a sleep state. * @dev: Device to prepare. @@ -996,26 +1017,16 @@ EXPORT_SYMBOL_GPL(acpi_dev_resume_early); int acpi_subsys_prepare(struct device *dev) { struct acpi_device *adev = ACPI_COMPANION(dev); - u32 sys_target; - int ret, state; + int ret; ret = pm_generic_prepare(dev); if (ret < 0) return ret; - if (!adev || !pm_runtime_suspended(dev) - || device_may_wakeup(dev) != !!adev->wakeup.prepare_count) - return 0; - - sys_target = acpi_target_system_state(); - if (sys_target == ACPI_STATE_S0) - return 1; - - if (adev->power.flags.dsw_present) + if (!adev || !pm_runtime_suspended(dev)) return 0; - ret = acpi_dev_pm_get_state(dev, adev, sys_target, NULL, &state); - return !ret && state == adev->power.state; + return !acpi_dev_needs_resume(dev, adev); } EXPORT_SYMBOL_GPL(acpi_subsys_prepare); -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: ulf.hansson@linaro.org (Ulf Hansson) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 3/9] PM / ACPI: Split code validating need for runtime resume in ->prepare() Date: Wed, 23 Aug 2017 16:42:03 +0200 [thread overview] Message-ID: <1503499329-28834-4-git-send-email-ulf.hansson@linaro.org> (raw) In-Reply-To: <1503499329-28834-1-git-send-email-ulf.hansson@linaro.org> Move the code dealing with validation of whether runtime resuming the device is needed during system suspend. In this way it becomes more clear for what circumstances ACPI is prevented from trying the direct_complete path. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> --- Changes in v2: - Updated return expression for acpi_dev_needs_resume(). --- drivers/acpi/device_pm.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c index 632f214..5181057 100644 --- a/drivers/acpi/device_pm.c +++ b/drivers/acpi/device_pm.c @@ -989,6 +989,27 @@ int acpi_dev_resume_early(struct device *dev) } EXPORT_SYMBOL_GPL(acpi_dev_resume_early); +static bool acpi_dev_needs_resume(struct device *dev, struct acpi_device *adev) +{ + u32 sys_target = acpi_target_system_state(); + int ret, state; + + if (device_may_wakeup(dev) != !!adev->wakeup.prepare_count) + return true; + + if (sys_target == ACPI_STATE_S0) + return false; + + if (adev->power.flags.dsw_present) + return true; + + ret = acpi_dev_pm_get_state(dev, adev, sys_target, NULL, &state); + if (ret) + return true; + + return state != adev->power.state; +} + /** * acpi_subsys_prepare - Prepare device for system transition to a sleep state. * @dev: Device to prepare. @@ -996,26 +1017,16 @@ EXPORT_SYMBOL_GPL(acpi_dev_resume_early); int acpi_subsys_prepare(struct device *dev) { struct acpi_device *adev = ACPI_COMPANION(dev); - u32 sys_target; - int ret, state; + int ret; ret = pm_generic_prepare(dev); if (ret < 0) return ret; - if (!adev || !pm_runtime_suspended(dev) - || device_may_wakeup(dev) != !!adev->wakeup.prepare_count) - return 0; - - sys_target = acpi_target_system_state(); - if (sys_target == ACPI_STATE_S0) - return 1; - - if (adev->power.flags.dsw_present) + if (!adev || !pm_runtime_suspended(dev)) return 0; - ret = acpi_dev_pm_get_state(dev, adev, sys_target, NULL, &state); - return !ret && state == adev->power.state; + return !acpi_dev_needs_resume(dev, adev); } EXPORT_SYMBOL_GPL(acpi_subsys_prepare); -- 2.7.4
next prev parent reply other threads:[~2017-08-23 14:42 UTC|newest] Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-08-23 14:42 [PATCH v2 0/9] PM / ACPI / i2c: Deploy runtime PM centric path for system sleep Ulf Hansson 2017-08-23 14:42 ` Ulf Hansson 2017-08-23 14:42 ` [PATCH v2 1/9] PM / ACPI: Restore acpi_subsys_complete() Ulf Hansson 2017-08-23 14:42 ` Ulf Hansson 2017-08-23 22:41 ` Rafael J. Wysocki 2017-08-23 22:41 ` Rafael J. Wysocki 2017-08-23 14:42 ` [PATCH v2 2/9] PM / Sleep: Remove pm_complete_with_resume_check() Ulf Hansson 2017-08-23 14:42 ` Ulf Hansson 2017-08-23 14:42 ` Ulf Hansson [this message] 2017-08-23 14:42 ` [PATCH v2 3/9] PM / ACPI: Split code validating need for runtime resume in ->prepare() Ulf Hansson 2017-08-23 14:42 ` [PATCH v2 4/9] PM / ACPI: Split acpi_lpss_suspend_late|resume_early() Ulf Hansson 2017-08-23 14:42 ` Ulf Hansson 2017-08-23 14:42 ` [PATCH v2 5/9] PM / ACPI: Provide option to disable direct_complete for ACPI devices Ulf Hansson 2017-08-23 14:42 ` Ulf Hansson 2017-08-23 23:39 ` Rafael J. Wysocki 2017-08-23 23:39 ` Rafael J. Wysocki 2017-08-24 0:13 ` Rafael J. Wysocki 2017-08-24 0:13 ` Rafael J. Wysocki 2017-08-24 0:20 ` Rafael J. Wysocki 2017-08-24 0:20 ` Rafael J. Wysocki 2017-08-24 1:03 ` Rafael J. Wysocki 2017-08-24 1:03 ` Rafael J. Wysocki 2017-08-24 9:15 ` Ulf Hansson 2017-08-24 9:15 ` Ulf Hansson 2017-08-24 16:35 ` Rafael J. Wysocki 2017-08-24 16:35 ` Rafael J. Wysocki 2017-08-24 21:50 ` Rafael J. Wysocki 2017-08-24 21:50 ` Rafael J. Wysocki 2017-08-25 13:42 ` Rafael J. Wysocki 2017-08-25 13:42 ` Rafael J. Wysocki 2017-08-28 1:30 ` Rafael J. Wysocki 2017-08-28 1:30 ` Rafael J. Wysocki 2017-08-28 8:31 ` Ulf Hansson 2017-08-28 8:31 ` Ulf Hansson 2017-08-28 12:39 ` Rafael J. Wysocki 2017-08-28 12:39 ` Rafael J. Wysocki 2017-08-28 12:54 ` Ulf Hansson 2017-08-28 12:54 ` Ulf Hansson 2017-08-28 13:40 ` Rafael J. Wysocki 2017-08-28 13:40 ` Rafael J. Wysocki 2017-08-28 14:24 ` Ulf Hansson 2017-08-28 14:24 ` Ulf Hansson 2017-08-28 21:14 ` Rafael J. Wysocki 2017-08-28 21:14 ` Rafael J. Wysocki 2017-08-25 9:28 ` Ulf Hansson 2017-08-25 9:28 ` Ulf Hansson 2017-08-25 12:23 ` Rafael J. Wysocki 2017-08-25 12:23 ` Rafael J. Wysocki 2017-08-24 8:19 ` Ulf Hansson 2017-08-24 8:19 ` Ulf Hansson 2017-08-24 14:57 ` Rafael J. Wysocki 2017-08-24 14:57 ` Rafael J. Wysocki 2017-08-25 9:04 ` Ulf Hansson 2017-08-25 9:04 ` Ulf Hansson 2017-08-23 14:42 ` [PATCH v2 6/9] PM / ACPI: Enable the runtime PM centric approach for system sleep Ulf Hansson 2017-08-23 14:42 ` Ulf Hansson 2017-08-23 14:42 ` [PATCH v2 7/9] PM / ACPI: Avoid runtime resuming device in acpi_subsys_suspend|freeze() Ulf Hansson 2017-08-23 14:42 ` Ulf Hansson 2017-08-23 14:42 ` [PATCH v2 8/9] i2c: designware: Don't resume device in the ->complete() callback Ulf Hansson 2017-08-23 14:42 ` Ulf Hansson 2017-08-23 14:42 ` [PATCH v2 9/9] i2c: designware: Deploy the runtime PM centric approach for system sleep Ulf Hansson 2017-08-23 14:42 ` Ulf Hansson 2017-08-25 14:10 ` [PATCH v2 0/9] PM / ACPI / i2c: Deploy runtime PM centric path " Jarkko Nikula 2017-08-25 14:10 ` Jarkko Nikula 2017-08-29 0:18 ` [PATCH 0/3] PM / ACPI / i2c: Runtime PM aware system sleep handling Rafael J. Wysocki 2017-08-29 0:18 ` Rafael J. Wysocki 2017-08-29 0:20 ` [PATCH 1/3] PM / core: Add SAFE_SUSPEND driver flag Rafael J. Wysocki 2017-08-29 0:20 ` Rafael J. Wysocki 2017-08-29 14:57 ` Ulf Hansson 2017-08-29 14:57 ` Ulf Hansson 2017-08-29 15:02 ` Rafael J. Wysocki 2017-08-29 15:02 ` Rafael J. Wysocki 2017-08-29 0:59 ` [PATCH 2/3] PM / ACPI: Use SAFE_SUSPEND in the generic ACPI PM domain Rafael J. Wysocki 2017-08-29 0:59 ` Rafael J. Wysocki 2017-08-29 0:59 ` [PATCH 3/3] PM: i2c-designware-platdrv: System sleep handling rework Rafael J. Wysocki 2017-08-29 0:59 ` Rafael J. Wysocki 2017-08-29 16:38 ` Rafael J. Wysocki 2017-08-29 16:38 ` Rafael J. Wysocki 2017-08-29 16:40 ` Rafael J. Wysocki 2017-08-29 16:40 ` Rafael J. Wysocki 2017-08-29 10:29 ` [PATCH 0/3] PM / ACPI / i2c: Runtime PM aware system sleep handling Johannes Stezenbach 2017-08-29 10:29 ` Johannes Stezenbach 2017-08-29 11:44 ` Ulf Hansson 2017-08-29 11:44 ` Ulf Hansson 2017-08-29 13:53 ` Johannes Stezenbach 2017-08-29 13:53 ` Johannes Stezenbach 2017-08-29 14:43 ` Rafael J. Wysocki 2017-08-29 14:43 ` Rafael J. Wysocki 2017-08-29 15:05 ` Ulf Hansson 2017-08-29 15:05 ` Ulf Hansson 2017-08-29 16:44 ` Rafael J. Wysocki 2017-08-29 16:44 ` Rafael J. Wysocki 2017-08-29 14:49 ` Rafael J. Wysocki 2017-08-29 14:49 ` Rafael J. Wysocki
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1503499329-28834-4-git-send-email-ulf.hansson@linaro.org \ --to=ulf.hansson@linaro.org \ --cc=andriy.shevchenko@linux.intel.com \ --cc=guodong.xu@linaro.org \ --cc=haojian.zhuang@linaro.org \ --cc=jarkko.nikula@linux.intel.com \ --cc=john.stultz@linaro.org \ --cc=jszhang@marvell.com \ --cc=khilman@kernel.org \ --cc=lenb@kernel.org \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-i2c@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=mika.westerberg@linux.intel.com \ --cc=rjw@rjwysocki.net \ --cc=sumit.semwal@linaro.org \ --cc=wsa@the-dreams.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.