Received: by 10.192.165.156 with SMTP id m28csp1831044imm; Thu, 12 Apr 2018 04:23:28 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/Wl4rFNQ0FFrocRL77Eoo91pB5GlSptL1vjdcs2lzIad3SuvSSxYQGeofkoiLkE3l/JH7s X-Received: by 10.98.202.212 with SMTP id y81mr7319889pfk.227.1523532208749; Thu, 12 Apr 2018 04:23:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523532208; cv=none; d=google.com; s=arc-20160816; b=PIp7lQEf+ZtOaHqP7MElYgFMascEj67Yfvp1qd4ueD8u3BWzZMJjtwNesJXA0MO/T0 IjxwSYQn4Lm4fOsF6imfCeVjmALrN54csPKZ/i415AjsSt+cV0VWwSV3nlhIdvQD/jvP HgDq7CBzz8nOriqwTUzAznRLcoyhnnxubP+AbgELA60PvCxrm4Z1jQSLPEwoDd0Ptw4X DuqMF6IV+Zy63bLNkpRKPEIriHl3UTc/5yLJ1KNkXLyK+L6gxTm4ps1n1Gvxl+xKO6if aj6DBDPNTGfa2tI8WqYHj98FX5IWQSSw3zQqK8iGQLivD5Kyqr99/MpUP8VtpHEN5cN+ J5Dw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=3/F6tv2h3FNcd/Gi/Phy9kHc/BZznWra5waqp09Zxaw=; b=JJGGN0rXVW2U6B2QS0kB4MBOANDRN2keiIveUc/G8h74YFh9zJv06ia2V+6rGxLpW1 tIV53PLRT+jBqFu2pToR+H5S5z34R3kQklwZZAQDHAYIeDe1VfBaIUTNXVXqBN58e2NK gZ8GChHwTjFG3fzS4GbIiOJm7axO4/0WiGmaSvc5QI6CTqq82TkFUcYP40yTU8BUxVpE QagBOwMKYk+Tli/BvGUatLdtaSG44s4OuyAMdd0Pm6OgzFijf4/vRIh4sXGGerrxjfNd njDO2TicDylJ0yhBMLMCl6atD1M35gqo+tRDxoRPABY+dfRA+sGqnhB9LpouDhZkdGgO D28g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=OPzMN2wB; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b24si2436100pfd.391.2018.04.12.04.22.52; Thu, 12 Apr 2018 04:23:28 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=OPzMN2wB; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753143AbeDLLPC (ORCPT + 99 others); Thu, 12 Apr 2018 07:15:02 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:36898 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753099AbeDLLOz (ORCPT ); Thu, 12 Apr 2018 07:14:55 -0400 Received: by mail-lf0-f68.google.com with SMTP id m200-v6so7117446lfm.4 for ; Thu, 12 Apr 2018 04:14:54 -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=3/F6tv2h3FNcd/Gi/Phy9kHc/BZznWra5waqp09Zxaw=; b=OPzMN2wBKjEx5I4b4BZ5k9aBPrH3R56Ykx0mfQuR5qkhFXuPfX32xINdUNDszDnPZe 65TbgkpZXh430TxYbVGPsHzZXfEK7+o8BtmTRSbBwN+NQKVsNBhhYgFX7OD50O5crA98 3MVCdFTowyPX4TnFX9G/O/THvITArB2on3BOY= 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=3/F6tv2h3FNcd/Gi/Phy9kHc/BZznWra5waqp09Zxaw=; b=MQ6nxVGGkchnqcIh1G/T1njPGioaLM4ZQKj4/rWd8Xfi/BXXlVt6oWYkqcE8c1rmjg WqTZD8GPc5O/QGPUnG5VmZeeDwK6XI0cvud5mH/YWXIqNYovTTql+e2N2zNZGprFsNE/ 2sbbe4QTX9O4xBxz4waKR6azISe6kvA0O+7G0qsRI09blr5Iv+W13rLsxWS8WXO4mIOT QGgws9aT0+azJEfsbi/glVqi+l+PGdHCxcS/NGyN7mEptBghhgbiYLlFWm+i62PBnXpw vBcLb+wbVXsBVs80Sq+F1svFemydzB6Nw1mwV5Tyn6LACahBuuCYyA0erqUDm58mtHOw 9X8g== X-Gm-Message-State: ALQs6tB5i1w82R95u7HfkrDrWqL9vwDOfdyZxrY9722tbmS0GZkrZJKf mxU95zZOiEQpX00TzygkESMhAw== X-Received: by 2002:a19:1a86:: with SMTP id a128-v6mr5476616lfa.80.1523531694189; Thu, 12 Apr 2018 04:14:54 -0700 (PDT) Received: from localhost.localdomain (h-158-174-22-210.NA.cust.bahnhof.se. [158.174.22.210]) by smtp.gmail.com with ESMTPSA id r29sm543187lje.72.2018.04.12.04.14.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 12 Apr 2018 04:14:53 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , Sudeep Holla , Lorenzo Pieralisi , Mark Rutland , linux-pm@vger.kernel.org Cc: Kevin Hilman , Lina Iyer , Lina Iyer , Ulf Hansson , Rob Herring , Daniel Lezcano , Thomas Gleixner , Vincent Guittot , Stephen Boyd , Juri Lelli , Geert Uytterhoeven , linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 09/26] kernel/cpu_pm: Manage runtime PM in the idle path for CPUs Date: Thu, 12 Apr 2018 13:14:14 +0200 Message-Id: <1523531671-27491-10-git-send-email-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1523531671-27491-1-git-send-email-ulf.hansson@linaro.org> References: <1523531671-27491-1-git-send-email-ulf.hansson@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org To allow CPUs being power managed by PM domains, let's deploy support for runtime PM for the CPU's corresponding struct device. More precisely, at the point when the CPU is about to enter an idle state, decrease the runtime PM usage count for its corresponding struct device, via calling pm_runtime_put_sync_suspend(). Then, at the point when the CPU resumes from idle, let's increase the runtime PM usage count, via calling pm_runtime_get_sync(). Cc: Lina Iyer Co-developed-by: Lina Iyer Signed-off-by: Ulf Hansson --- kernel/cpu_pm.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/kernel/cpu_pm.c b/kernel/cpu_pm.c index 67b02e1..492d4a8 100644 --- a/kernel/cpu_pm.c +++ b/kernel/cpu_pm.c @@ -16,9 +16,11 @@ */ #include +#include #include #include #include +#include #include #include @@ -91,6 +93,7 @@ int cpu_pm_enter(void) { int nr_calls; int ret = 0; + struct device *dev = get_cpu_device(smp_processor_id()); ret = cpu_pm_notify(CPU_PM_ENTER, -1, &nr_calls); if (ret) @@ -100,6 +103,9 @@ int cpu_pm_enter(void) */ cpu_pm_notify(CPU_PM_ENTER_FAILED, nr_calls - 1, NULL); + if (!ret && dev && dev->pm_domain) + pm_runtime_put_sync_suspend(dev); + return ret; } EXPORT_SYMBOL_GPL(cpu_pm_enter); @@ -118,6 +124,11 @@ EXPORT_SYMBOL_GPL(cpu_pm_enter); */ int cpu_pm_exit(void) { + struct device *dev = get_cpu_device(smp_processor_id()); + + if (dev && dev->pm_domain) + pm_runtime_get_sync(dev); + return cpu_pm_notify(CPU_PM_EXIT, -1, NULL); } EXPORT_SYMBOL_GPL(cpu_pm_exit); -- 2.7.4