From patchwork Wed Aug 23 14:42:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 9917543 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 091AD60327 for ; Wed, 23 Aug 2017 14:45:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ED92326CFF for ; Wed, 23 Aug 2017 14:45:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E1F612861B; Wed, 23 Aug 2017 14:45:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_LOW autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7BA9826CFF for ; Wed, 23 Aug 2017 14:45:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=MRvuO8lsDduKgiEV/5D/pHcjxPR/BDzB2aBHmB/kcic=; b=JuGqF8c3ug3C7J44hS6zo+0161 +Uq8fGtTdqKrjldZKdwv0j9t2vj0TG+ns/sNIVG8/JigtC9j0QKe61DKH0PWSmgqytrEY5hy6Ordy IZeNRt98qFa1X8zcDMmeBbzJWtkhh1kAMyNUDqz2ALeOUxg6B+Cjnu2PWp5nuX1gXh3LHcxrCfJ3A Gwl562iaAYTJxljmrdjAMo6vcxBlSRb01VkpHLMjJ9yOHlGrUP0Ax/0KLMYQ7x5J9zlnGssGF/RLI IKfaWS4J0eJdKvQLFRapeMevr0YxhGSNMQQiLglojdaU17ltUSFVT3i54oL61GnJFRKjbUORnT5Tz pjsONwJA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1dkWuH-00054E-3S; Wed, 23 Aug 2017 14:45:21 +0000 Received: from mail-lf0-x22d.google.com ([2a00:1450:4010:c07::22d]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dkWri-0001Nd-NH for linux-arm-kernel@lists.infradead.org; Wed, 23 Aug 2017 14:42:46 +0000 Received: by mail-lf0-x22d.google.com with SMTP id d17so1564582lfe.0 for ; Wed, 23 Aug 2017 07:42:22 -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:in-reply-to:references; bh=4/W6OZ+A4Rz4hctfwlJI6a5jCkwwM43qZi+T3IcWlFs=; b=ZP9/pZzS1cSGSh0OxQT/y//rYdQFqMhJnodSRjERdabwOYiHF+l5+pIlecIH1rvGZ0 acN36gN9gjDpKNj9iz+AuGX3sYaDSRFCcePu2y6v0rWTMSrN3KMRKoJUiJxRU5532Iav Wbeqe4RLX+C94NB3ecq3D5/g7IxPN6PnbbHqs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=4/W6OZ+A4Rz4hctfwlJI6a5jCkwwM43qZi+T3IcWlFs=; b=M5xjg+TuI/GoJ6yzzMmsSb9A53DsMg92LsGDphurMNmdzYDNCh4vd95Uky27ax4y8r Khcef3+3ze2TSkXR9GazvAcJRGa/hFqp790I2yU+AY/5MKP2//uXUXd8J3fOCbqZWcUy hTUzDVDLgYBYVzdj3PBOhVz4aWS/FKpPnhVcSdG1+NSjxeOjIjULsmDVLo2xjwT/UBvA j98my18gQNVtsdYjU1/qyeuiIfaesKPPgtbcR06RziMzQQBigig7XRWe89/MnPNR+Tl4 mP61r5VR53bRqoxzflCvJ3TpAZkxK9GKU7cQGn/6+pmf9j0ZvriDP7Lu/NU9dX5f8BsE 4x7Q== X-Gm-Message-State: AHYfb5gfF7KTlkngUEoNRYbI2CGm0VG3VJIGrb9BbkhdPvfDbiTiE6k/ 0DjWeLMSHfn2BD5s X-Received: by 10.46.9.65 with SMTP id 62mr1166862ljj.177.1503499340683; Wed, 23 Aug 2017 07:42:20 -0700 (PDT) Received: from localhost.localdomain (h-158-174-22-67.NA.cust.bahnhof.se. [158.174.22.67]) by smtp.gmail.com with ESMTPSA id c89sm287593lfb.78.2017.08.23.07.42.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 23 Aug 2017 07:42:20 -0700 (PDT) From: Ulf Hansson To: Wolfram Sang , "Rafael J . Wysocki" , Len Brown , linux-acpi@vger.kernel.org, linux-pm@vger.kernel.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 Message-Id: <1503499329-28834-4-git-send-email-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1503499329-28834-1-git-send-email-ulf.hansson@linaro.org> References: <1503499329-28834-1-git-send-email-ulf.hansson@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170823_074243_033152_222E1D6C X-CRM114-Status: GOOD ( 12.48 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jisheng Zhang , Ulf Hansson , Guodong Xu , Kevin Hilman , Jarkko Nikula , Haojian Zhuang , John Stultz , Andy Shevchenko , Mika Westerberg , Sumit Semwal , linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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 --- 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);