From patchwork Fri Oct 11 09:23:40 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 20955 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ob0-f200.google.com (mail-ob0-f200.google.com [209.85.214.200]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 722532611D for ; Fri, 11 Oct 2013 09:23:59 +0000 (UTC) Received: by mail-ob0-f200.google.com with SMTP id wo20sf16043759obc.3 for ; Fri, 11 Oct 2013 02:23:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=mime-version:x-gm-message-state:delivered-to:from:to:cc:subject :date:message-id:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-unsubscribe; bh=WJg4EPom9sQzGOHIHLi25v5c2b0Y/7L0ROvthDXdt4g=; b=Nj9OEf+nv7GkdWT97q8yXs7UpnAdprtYJ+ryF3cQyz62NIobd7MGGf1WT8acA48rww JkcFEhcxOyhBEDGsx5sNf2V3GB6h10LuJHWdM/hNJ5ZvQMB5/cN2VVCo1/TwInXSMNRG J5JOCswNQMA3aOO6cJ6LzANfHr3JdHMaxIR++D1l8xxXde6eH90mpgpGq5pvVv/cnvlR i66oTaKZoAJA02kcZSP9e5spCiz70Q9aASRGo6Atj9exmdWR5s5zhslsLgwp0RfdzH+W CapfXXxWdc1DMt2leakc4YtnYT7e1gL0iEGnkmZz5ZZtRzIdWscD9w58Z/Shd60XoMUI Vs5A== X-Received: by 10.42.238.208 with SMTP id kt16mr8486807icb.10.1381483438471; Fri, 11 Oct 2013 02:23:58 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.49.60.68 with SMTP id f4ls1424146qer.72.gmail; Fri, 11 Oct 2013 02:23:58 -0700 (PDT) X-Received: by 10.221.6.195 with SMTP id ol3mr465389vcb.34.1381483438363; Fri, 11 Oct 2013 02:23:58 -0700 (PDT) Received: from mail-vc0-f180.google.com (mail-vc0-f180.google.com [209.85.220.180]) by mx.google.com with ESMTPS id y6si9058203vct.70.1969.12.31.16.00.00 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 11 Oct 2013 02:23:58 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.220.180 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) client-ip=209.85.220.180; Received: by mail-vc0-f180.google.com with SMTP id ld13so2534422vcb.25 for ; Fri, 11 Oct 2013 02:23:58 -0700 (PDT) X-Gm-Message-State: ALoCoQmcNiQE72Sdyk5r49ZtYxY2Q8kAemVWDvD2Zt95ggJ/D/2VBTsKn30K4HuhgJI61+FYsgRF X-Received: by 10.221.27.73 with SMTP id rp9mr651971vcb.29.1381483438158; Fri, 11 Oct 2013 02:23:58 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patches@linaro.org Received: by 10.220.174.196 with SMTP id u4csp22922vcz; Fri, 11 Oct 2013 02:23:57 -0700 (PDT) X-Received: by 10.152.36.98 with SMTP id p2mr15457110laj.14.1381483436870; Fri, 11 Oct 2013 02:23:56 -0700 (PDT) Received: from mail-la0-f52.google.com (mail-la0-f52.google.com [209.85.215.52]) by mx.google.com with ESMTPS id uf8si21960762lbc.120.1969.12.31.16.00.00 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 11 Oct 2013 02:23:56 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.215.52 is neither permitted nor denied by best guess record for domain of ulf.hansson@linaro.org) client-ip=209.85.215.52; Received: by mail-la0-f52.google.com with SMTP id ev20so3088026lab.39 for ; Fri, 11 Oct 2013 02:23:56 -0700 (PDT) X-Received: by 10.152.8.51 with SMTP id o19mr537323laa.42.1381483436160; Fri, 11 Oct 2013 02:23:56 -0700 (PDT) Received: from linaro-ulf.lan (90-231-160-185-no158.tbcn.telia.com. [90.231.160.185]) by mx.google.com with ESMTPSA id k6sm44329685lae.9.1969.12.31.16.00.00 (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 11 Oct 2013 02:23:54 -0700 (PDT) From: Ulf Hansson To: "Rafael J. Wysocki" , Len Brown , Pavel Machek , linux-pm@vger.kernel.org Cc: Ulf Hansson , Alan Stern , Mika Westerberg , Kevin Hilman , Rob Landley , Chris Ball , linux-mmc@vger.kernel.org Subject: [PATCH] PM / Runtime: Respect autosuspend when idle triggers suspend Date: Fri, 11 Oct 2013 11:23:40 +0200 Message-Id: <1381483420-18864-1-git-send-email-ulf.hansson@linaro.org> X-Mailer: git-send-email 1.7.9.5 X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: ulf.hansson@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.220.180 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Precedence: list Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org List-ID: X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , For devices which don't have a .runtime_idle callback or if it returns 0, rpm_idle will end up in triggering a call to rpm_suspend, thus trying to carry out a runtime_suspend directly from runtime_idle. In the above situation we want to respect devices which has enabled autosuspend, we therfore append the flag sent to rpm_suspend with RPM_AUTO. Do note that driver's still needs to update the device last busy mark, to control the delay for this circumstance. Updated runtime PM documentation accordingly. Cc: Alan Stern Cc: Mika Westerberg Cc: Kevin Hilman Cc: Rob Landley Cc: Chris Ball Cc: linux-mmc@vger.kernel.org Signed-off-by: Ulf Hansson --- Documentation/power/runtime_pm.txt | 9 ++++----- drivers/base/power/runtime.c | 6 ++++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Documentation/power/runtime_pm.txt b/Documentation/power/runtime_pm.txt index 71d8fe4..80df87a 100644 --- a/Documentation/power/runtime_pm.txt +++ b/Documentation/power/runtime_pm.txt @@ -145,11 +145,10 @@ The action performed by the idle callback is totally dependent on the subsystem if the device can be suspended (i.e. if all of the conditions necessary for suspending the device are satisfied) and to queue up a suspend request for the device in that case. If there is no idle callback, or if the callback returns -0, then the PM core will attempt to carry out a runtime suspend of the device; -in essence, it will call pm_runtime_suspend() directly. To prevent this (for -example, if the callback routine has started a delayed suspend), the routine -should return a non-zero value. Negative error return codes are ignored by the -PM core. +0, then the PM core will attempt to carry out a runtime suspend of the device, +also respecting devices configured for autosuspend. In essence it means a call +to pm_runtime_autosuspend(). To prevent this, the routine must return a non-zero +value. Negative error return codes are ignored by the PM core. The helper functions provided by the PM core, described in Section 4, guarantee that the following constraints are met with respect to runtime PM callbacks for diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index 268a350..4edb2a0 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c @@ -258,7 +258,9 @@ static int __rpm_callback(int (*cb)(struct device *), struct device *dev) * Check if the device's runtime PM status allows it to be suspended. If * another idle notification has been started earlier, return immediately. If * the RPM_ASYNC flag is set then queue an idle-notification request; otherwise - * run the ->runtime_idle() callback directly. + * run the ->runtime_idle() callback directly. If the ->runtime_idle callback + * does'nt exist or if it returns 0, run rpm_suspend with RPM_AUTO flag to + * respect drivers using autosuspend. * * This function must be called under dev->power.lock with interrupts disabled. */ @@ -331,7 +333,7 @@ static int rpm_idle(struct device *dev, int rpmflags) out: trace_rpm_return_int(dev, _THIS_IP_, retval); - return retval ? retval : rpm_suspend(dev, rpmflags); + return retval ? retval : rpm_suspend(dev, rpmflags | RPM_AUTO); } /**