From patchwork Thu Apr 21 10:34:02 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 66356 Delivered-To: patches@linaro.org Received: by 10.140.93.198 with SMTP id d64csp58835qge; Thu, 21 Apr 2016 03:34:33 -0700 (PDT) X-Received: by 10.112.200.41 with SMTP id jp9mr5956372lbc.65.1461234873082; Thu, 21 Apr 2016 03:34:33 -0700 (PDT) Return-Path: Received: from mail-lf0-x235.google.com (mail-lf0-x235.google.com. [2a00:1450:4010:c07::235]) by mx.google.com with ESMTPS id o5si1189683lfe.188.2016.04.21.03.34.32 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 21 Apr 2016 03:34:32 -0700 (PDT) Received-SPF: pass (google.com: domain of ulf.hansson@linaro.org designates 2a00:1450:4010:c07::235 as permitted sender) client-ip=2a00:1450:4010:c07::235; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: domain of ulf.hansson@linaro.org designates 2a00:1450:4010:c07::235 as permitted sender) smtp.mailfrom=ulf.hansson@linaro.org; dmarc=pass (p=NONE dis=NONE) header.from=linaro.org Received: by mail-lf0-x235.google.com with SMTP id g184so57844406lfb.3 for ; Thu, 21 Apr 2016 03:34:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=KWE/Ygav/5h73kfctIGSM0mc2N6EzIOQdr+2cb7bD6w=; b=UmHz1lnZVNoPBe4qg6wirCGf6LLQaybBOeL8B6cC0qSiDiX+ZJpUSlKA1dxOUNLK2X 8IfqpvxCHJOmdVSDLaVSz82dNONG8gRasQSVne42NfW0e4gkaREXlcSNif3ytMec2BQ0 +t9hjwHSNJ18ClrP3PfuaIe38YUsKHZPCSPsY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=KWE/Ygav/5h73kfctIGSM0mc2N6EzIOQdr+2cb7bD6w=; b=Y6o7OIe1ijUJV167Kdw5hydFD0RugEDvI9Fi7lMHDJdg+cztinX3w9QEO3EOORWaix oisNq6V80uL6XL6QA4xNikTaa838Yp9NI2zbdEIXpaAamdGMdE5NO39jAvs2c9EKDo8/ 1+3Q9ZpFWNGuC6HwfYQl/H0lymMZ3a5GOVQJ+mCSEBKSVLhTPUhZZaTx33Jyc+x7fmxI bdnB2UjlF44NyrA7PPOegWhXhmSnZXW3Jx2BkYvoDgAxNxhbrLKl23xwN/Q5xQYITTOo JhPclgiTPoqIzWxBRVt8kh+lJ3GG9McdbByKGjRN3cAmcXu7pbAP5xiISxr35c10jbvh IY2g== X-Gm-Message-State: AOPr4FV6RtAajRZ/R0XpKQp53Y0S5ju3SrjvLp8k6BdxLsffIDp55QUrW5QLp94tBq3aDYyQqtQ= X-Received: by 10.25.87.19 with SMTP id l19mr5152153lfb.27.1461234872103; Thu, 21 Apr 2016 03:34:32 -0700 (PDT) Return-Path: Received: from uffe-Latitude-E6430s.ideon.se ([85.235.10.227]) by smtp.gmail.com with ESMTPSA id hw7sm406095lbb.40.2016.04.21.03.34.30 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 21 Apr 2016 03:34:30 -0700 (PDT) From: Ulf Hansson To: "Rafael J. Wysocki" , linux-pm@vger.kernel.org Cc: Alan Stern , Kevin Hilman , Len Brown , Pavel Machek , Laurent Pinchart , Lina Iyer , Andy Gross , Linus Walleij , Sergei Shtylyov , linux-arm-kernel@lists.infradead.org, Ulf Hansson Subject: [PATCH] PM / Runtime: Defer resuming of the device in pm_runtime_force_resume() Date: Thu, 21 Apr 2016 12:34:02 +0200 Message-Id: <1461234842-22820-1-git-send-email-ulf.hansson@linaro.org> X-Mailer: git-send-email 1.9.1 When the pm_runtime_force_suspend|resume() helpers were invented, we still had CONFIG_PM_RUNTIME and CONFIG_PM_SLEEP as separate Kconfig options. To make sure these helpers worked for all combinations and without introducing too much of complexity, the device was always resumed in pm_runtime_force_resume(). More precisely, when CONFIG_PM_SLEEP was set and CONFIG_PM_RUNTIME was unset, we needed to resume the device as the subsystem/driver couldn't rely on using runtime PM to do it. As the CONFIG_PM_RUNTIME option was merged into CONFIG_PM a while ago, it removed this combination, of using CONFIG_PM_SLEEP without the earlier CONFIG_PM_RUNTIME. For this reason we can now rely on the subsystem/driver to use runtime PM to resume the device, instead of forcing that to be done in all cases. In other words, let's defer this to a later point when it's actually needed. Signed-off-by: Ulf Hansson --- Note, this patch is based upon another not yet queued patch [1]. The reason is simply because that [1] is a more important patch as it fixes a problem. It was posted to linux-pm April 8th and I expect it (or a new revision of it) to be applied before $subject patch. [1] https://patchwork.kernel.org/patch/8782851 --- drivers/base/power/runtime.c | 11 +++++++++++ 1 file changed, 11 insertions(+) -- 1.9.1 diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index b746904..a190ca0 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c @@ -1506,6 +1506,17 @@ int pm_runtime_force_resume(struct device *dev) goto out; } + /* + * The PM core increases the runtime PM usage count in the system PM + * prepare phase. If the count is greather than 1 at this point, someone + * else has also increased it. In such case, let's make sure to runtime + * resume the device as that is likely what is expected. In other case + * we trust the subsystem/driver to runtime resume the device when it's + * actually needed. + */ + if (atomic_read(&dev->power.usage_count) < 2) + goto out; + ret = pm_runtime_set_active(dev); if (ret) goto out;