From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EF61EC433F5 for ; Wed, 11 May 2022 14:57:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245278AbiEKO5b (ORCPT ); Wed, 11 May 2022 10:57:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245243AbiEKO5W (ORCPT ); Wed, 11 May 2022 10:57:22 -0400 Received: from mail-lj1-x230.google.com (mail-lj1-x230.google.com [IPv6:2a00:1450:4864:20::230]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9432968F99 for ; Wed, 11 May 2022 07:57:21 -0700 (PDT) Received: by mail-lj1-x230.google.com with SMTP id q130so2955253ljb.5 for ; Wed, 11 May 2022 07:57:21 -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 :mime-version:content-transfer-encoding; bh=5o32wUvvQH//2mVRnrNn2QEStbroChjE5Xk/XzAuRBk=; b=dki0vUPuO6N2MH4IL3ZTgEaxHGtGP6p6K0m8Q72dfkfKBbFT0OwqRrUiuBrl3lXLgZ JFjAobUlKptUEqnzST5BCRTsTA/rZijsUSqp69imeyxWu9csCASx04zP2ecPcCxgtG29 SEmcuQQFzv+jHpS16Oml5yWyakl16G2yDbL598oH0xaLD25bYYNYmY35usC091wBaR97 d5YeKaCQ7WmbxTgul/MLdJgLW9GdTi2tlX77R14DOyZ7VpC+5Y0IiIgtn5XFhIrNNUS6 fdD2XyMqPjitot5O893/T4TZDMsiuEanmcy0qR0CybUhE0Bs2o3a9vnlxr12ytHgUslf DDaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5o32wUvvQH//2mVRnrNn2QEStbroChjE5Xk/XzAuRBk=; b=UpZZimiSMyddu5JEDOQ2e4yWP3vUkxpo5WMrIjtudw8lJC0uCNG3ntEgp+xqjGPEUe o6j+PxC8trSCtXXjsyYHVWMwOKV+K5rGFLw3kGEN+DBFhAueAsqxQXNa0aAjJwgm+aX7 N1UfeGdPriOeSxkUvkJl05Ix089BzsHYsX4gjr38Un2vuYV0uQGlhkIm98B/nYjCkLGG HZijqjmKMmj+GJST4zuaesorrDsNSae6wOEwVA5qo6WmTOjhJJd8z6il3nEtJY1KnndL AR1Tq7Y9iVAhuswN2tk7E92od31/V5Zf7wGpAUk6WKxGPB8/Hby8fXW+5EG8B0Ume5/6 SGaQ== X-Gm-Message-State: AOAM530WgDsKn0Rd/68BQyLnVaoBf/uByX4CPGO0oWYuw5R6uzDyfgmc 5+OUWnwl/Gzt3sqju2puol+ScQ== X-Google-Smtp-Source: ABdhPJxN7/QyIiPpFUbdwfUHavikSQxiBF96wJKrFR+5weGOmkPZiZowCNcAmTYK4Y2f75InPhl2lQ== X-Received: by 2002:a05:651c:b90:b0:250:7fa3:b234 with SMTP id bg16-20020a05651c0b9000b002507fa3b234mr17825253ljb.188.1652281039986; Wed, 11 May 2022 07:57:19 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:19 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 01/14] PM: domains: Add GENPD_FLAG_RPM_ALWAYS_ON for the always-on governor Date: Wed, 11 May 2022 16:56:51 +0200 Message-Id: <20220511145704.698189-2-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Rather than relying on the genpd provider to set the corresponding flag, GENPD_FLAG_RPM_ALWAYS_ON, when the always-on governor is being used, let's add it in pm_genpd_init(). In this way, it starts to benefits all genpd providers immediately. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 18cd7965e5d6..262bda9b56ef 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -2016,6 +2016,10 @@ int pm_genpd_init(struct generic_pm_domain *genpd, genpd->dev_ops.start =3D pm_clk_resume; } =20 + /* The always-on governor works better with the corresponding flag. */ + if (gov =3D=3D &pm_domain_always_on_gov) + genpd->flags |=3D GENPD_FLAG_RPM_ALWAYS_ON; + /* Always-on domains must be powered on at initialization. */ if ((genpd_is_always_on(genpd) || genpd_is_rpm_always_on(genpd)) && !genpd_status_on(genpd)) --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C391C433FE for ; Wed, 11 May 2022 14:57:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245378AbiEKO5o (ORCPT ); Wed, 11 May 2022 10:57:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34776 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235040AbiEKO5Z (ORCPT ); Wed, 11 May 2022 10:57:25 -0400 Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [IPv6:2a00:1450:4864:20::132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B43B26AA64 for ; Wed, 11 May 2022 07:57:23 -0700 (PDT) Received: by mail-lf1-x132.google.com with SMTP id t25so4031089lfg.7 for ; Wed, 11 May 2022 07:57:23 -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 :mime-version:content-transfer-encoding; bh=FiBV3RuZHkNt12iyxe5bJpydrAvajHAN4kw3wSlCMnc=; b=yvMYuV9LwZ+uQZR4bryt2mLHm4+REdWKBopwfobrmdHoVZRpOeQlWzVnFxuR51p5Gp A2avs/W7zovDB1xAgfvnpP7B+jKhQ8vdElzMdEqfYSUTezyG7/rzrf484HSk0HbDIoUQ dPAinQ6DnJUKkEUt59IpkWcrl3I6F/nEMEEEY5DUP0lKlBKIM1yUYwGUEWc2I/8pz6wD TUDFJ3JUIlfOljrZPAOWtbxFq5edGrPtbgQ/+XnxfJ/zZDDjPrdkGYAhq51eFm+jZ2Fx +k8b87NKJBCHykNviJdhUZnDwZ6imof1WiSUQvxcLsq5ZnJLJ0az6eU/GKxwxdLlCC5o DbzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FiBV3RuZHkNt12iyxe5bJpydrAvajHAN4kw3wSlCMnc=; b=LkWma0ssUea1M3zLFnZfc+IsU8sqLsiLIAbOLmD8JjSpixVXb4tSpK6KJcc+VcAvKO rWAZFpGYlCEmSS9mASMcCp9ndyKc4OnAAG8oBXzQF355P2aSr0auP1Lr6LJC5o48YNkR ZzK+mYjYzrmV+u1jaWQrAQ5YFSAO0vAHg/sTJ6d/huQVPWKHZ7cc+TqaMhUYsYqDvtwJ 7NZRJ6OCNPsw8YJ5NfxMuen5vQQI2L3Qh8M3T8yepIQRpG8MSs8KHejHbkyqT2k6BHXH dkrOkdKTZQcuCWakcXHzlyqmKMgZSLRTI/wKe9usZzfclDyXD3pEP8HFBmiHCehEgc1I lsKw== X-Gm-Message-State: AOAM530fjCksZZuOLBhB6H0qz1DRHO13CPewosLw3v+TqbkRx0qWWL0z C4Vui2W5IlKaZrO/sn36AbaSu1apqr1G3g== X-Google-Smtp-Source: ABdhPJw9fbJPMaUL49JJmqpdiItGez/51B1goqNb6N0vrbxzmmbTUFsFO8uPBWzeN9BwDLXMg82kaA== X-Received: by 2002:a05:6512:ad4:b0:473:b1a0:30de with SMTP id n20-20020a0565120ad400b00473b1a030demr20996097lfu.610.1652281042063; Wed, 11 May 2022 07:57:22 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:21 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 02/14] PM: domains: Drop redundant code for genpd always-on governor Date: Wed, 11 May 2022 16:56:52 +0200 Message-Id: <20220511145704.698189-3-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Due to recent changes, the always-on governor is always used with a genpd that has the GENPD_FLAG_RPM_ALWAYS_ON flag being set. This means genpd, doesn't invoke the governor's ->power_down_ok() callback, which makes the code in the governor redundant, so let's drop it. Signed-off-by: Ulf Hansson --- drivers/base/power/domain_governor.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/drivers/base/power/domain_governor.c b/drivers/base/power/doma= in_governor.c index cd08c5885190..c13e44823f16 100644 --- a/drivers/base/power/domain_governor.c +++ b/drivers/base/power/domain_governor.c @@ -327,11 +327,6 @@ static bool default_power_down_ok(struct dev_pm_domain= *pd) return _default_power_down_ok(pd, ktime_get()); } =20 -static bool always_on_power_down_ok(struct dev_pm_domain *domain) -{ - return false; -} - #ifdef CONFIG_CPU_IDLE static bool cpu_power_down_ok(struct dev_pm_domain *pd) { @@ -401,6 +396,5 @@ struct dev_power_governor simple_qos_governor =3D { * pm_genpd_gov_always_on - A governor implementing an always-on policy */ struct dev_power_governor pm_domain_always_on_gov =3D { - .power_down_ok =3D always_on_power_down_ok, .suspend_ok =3D default_suspend_ok, }; --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 54A06C433F5 for ; Wed, 11 May 2022 14:57:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231965AbiEKO5u (ORCPT ); Wed, 11 May 2022 10:57:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34874 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245272AbiEKO51 (ORCPT ); Wed, 11 May 2022 10:57:27 -0400 Received: from mail-lj1-x233.google.com (mail-lj1-x233.google.com [IPv6:2a00:1450:4864:20::233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 73074689BE for ; Wed, 11 May 2022 07:57:25 -0700 (PDT) Received: by mail-lj1-x233.google.com with SMTP id m23so3011461ljc.0 for ; Wed, 11 May 2022 07:57:25 -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 :mime-version:content-transfer-encoding; bh=6uWDDfHKgK8+yoOD+Pzrd9WOCbfsrsht1ynrIKudfso=; b=V/31BKjOnBuESidovgo43nJAiR5JKlgrJQNGaqAU7dLJYVdepjBNzq/lWLJ3slYo26 U4eIVgIrMQdYdFTd8FdkEY5FpiBtaZHls/kyWiY4fDVb0JxB7NO7CQFVZ3rPJ8NhoknG 6G2aHdMCUOccjL6eDyV6ug/xMELBa7zfwKIBY5Wd43/rILca53Mgbr+rswKI1vrZZoJ8 ZhICBFSbfyTRBMUbPxQPbyXM1xULVhx0BLriddMn2PKiS314ftTcApyCJO/ifMVpT+pK dT9d4+Y2h6DSBMQocdEQwMsVeWYsiPgXsENadyV/vcD9SUISHpTHg+EY80rl+Yerf+n3 RH2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6uWDDfHKgK8+yoOD+Pzrd9WOCbfsrsht1ynrIKudfso=; b=kuIXlTH7t591leyWMowHhNqtc1IYVduWwYUTQaY80GVc48Nm0IOsPejpsUvV2tUCPb FChyAh9nMRIClij9kbqTzOevG2aeIxX6gt1rAm17vilcU/Hq74demlUVsltoC/wRSQY3 xgLNnTlfMMeFIlhiytS+svjr+RWYtPy8T6W8Ur9GjG+Zy63FxDIHnc9oAkfpXZAePZou IZbpGTOG+RoO0ACnsKnLQP4LoIPOL4WXqdwXpX7w3dCR/4brOkb/Ahc7XFnReqX1KuGT 4TWNDWmwkmbtttEyTqEzy0/nvD/2Td+rj6OkPyJykT0ICndNox9ftpEl9zJRRVZydj5v o9kw== X-Gm-Message-State: AOAM532knmHypdfqOI0WIJWKg1XIchkijyzO96wNc9EzB3sbbJR3AZMv dYx1JeKLVOALUbSJ85AsskctTocjWXZjZg== X-Google-Smtp-Source: ABdhPJz1+tPV+8eDT+kPK5sJaKCDGNqX6EPItVfc9C6kKk4dAZILCFEIkrqbrtFC5Dyum/eekyW7+w== X-Received: by 2002:a2e:a30a:0:b0:24f:8e8:76a1 with SMTP id l10-20020a2ea30a000000b0024f08e876a1mr16880346lje.14.1652281043856; Wed, 11 May 2022 07:57:23 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:22 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 03/14] PM: domains: Don't check PM_QOS_FLAG_NO_POWER_OFF in genpd Date: Wed, 11 May 2022 16:56:53 +0200 Message-Id: <20220511145704.698189-4-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Back in the days when genpd supported intermediate power states of its devices, it made sense to check the PM_QOS_FLAG_NO_POWER_OFF in genpd_power_off(). This because the attached devices were all being put into low power state together when the PM domain was also being powered off. At this point, the flag PM_QOS_FLAG_NO_POWER_OFF is better checked by drivers from their ->runtime_suspend() callbacks, like in the usb_port_runtime_suspend(), for example. Or perhaps an even better option is to set the QoS resume latency constraint for the device to zero, which informs the runtime PM core to prevent the device from being runtime suspended. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 262bda9b56ef..5059c5d2e64a 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -648,12 +648,6 @@ static int genpd_power_off(struct generic_pm_domain *g= enpd, bool one_dev_on, } =20 list_for_each_entry(pdd, &genpd->dev_list, list_node) { - enum pm_qos_flags_status stat; - - stat =3D dev_pm_qos_flags(pdd->dev, PM_QOS_FLAG_NO_POWER_OFF); - if (stat > PM_QOS_FLAGS_NONE) - return -EBUSY; - /* * Do not allow PM domain to be powered off, when an IRQ safe * device is part of a non-IRQ safe domain. --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D7B83C433EF for ; Wed, 11 May 2022 14:58:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245255AbiEKO6C (ORCPT ); Wed, 11 May 2022 10:58:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35190 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245287AbiEKO5e (ORCPT ); Wed, 11 May 2022 10:57:34 -0400 Received: from mail-lj1-x230.google.com (mail-lj1-x230.google.com [IPv6:2a00:1450:4864:20::230]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BCED6B0B1 for ; Wed, 11 May 2022 07:57:26 -0700 (PDT) Received: by mail-lj1-x230.google.com with SMTP id q130so2955253ljb.5 for ; Wed, 11 May 2022 07:57:25 -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 :mime-version:content-transfer-encoding; bh=o0SVdNZTesTCt27Lh8nfNAnhtcZlgzCNi0eR/b6PWgs=; b=btWLqxTiISmaw5e1BljDRvBH2qafHAGi+/5/pMimaSVkt/0UTBLhs9SqsV0uEaLFt2 NLn2wz4Srkn2BZJWzNPD8D/xV9qv29WDGHyd4GTTH77GWOwL8X+5HeezMNr8KpbEXnJD EfUOJNVvwQetEL9xVC5VFP2V3XykQ+SV6lo4cXjoRhkSHwkCLhFrN4vG4mPGvGHoC/Dx MrPIXa+Re/2PPgzGTzW2iqBCM/4ex3tpxxlh+HTTyNyfWxFis6pD6197IP8JhpVVXsGw 3uzdXjzSPnP2uZ+PpprRuKT01aeOrPl/BcMZd3fN4wKMy5RWss1bpCc9q3pT0Cjpi3bF 7bQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=o0SVdNZTesTCt27Lh8nfNAnhtcZlgzCNi0eR/b6PWgs=; b=bTmys73FVUtxxbW5Gu9keR7F80yKmHtv4Hfgp2VTL7zKi0FJhRIM0j5L69o1Odrlo7 6510eR6YlK/IZy1NKaK7hrXnAvgQmlh0LGVdqOXnfawWDnce/KnPHL4aX1Cwpbi+Y5W6 kcuAdJ7Q15s7MdBN2Stt0gyRDMKtDqGVEwcDyF1uI3MR9rnsdiN56pFCZqoHRD+/4WBG iZoSl5X30tVUyMpA3HTkBNf885CxSvlNxdJM2HWCMBSnZQrh/stDjDeXIUbiwBoEWqWZ X6i/X/3aw4Sf4BMvXFAojgd2VsDgwhqGdcd67/tV6ihoSrAz/Tg009w7CeyHLiurqMdL DuOA== X-Gm-Message-State: AOAM532ASa5s3GxyFIykHIf/0rXF3uQJmeNbgXP4VRs79kWW6MkA6gFw oAnFp66UlcyKu70YnpWPFNlVVQ== X-Google-Smtp-Source: ABdhPJzGAxm2Ip0gBbvXZ4HIZMDDktzLw0NmQQSoajM67RWvgRmy7EZgRS/ywmFdRNSc6+KE8jk78g== X-Received: by 2002:a2e:8496:0:b0:24f:130d:e38b with SMTP id b22-20020a2e8496000000b0024f130de38bmr17242674ljh.498.1652281045536; Wed, 11 May 2022 07:57:25 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:24 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 04/14] PM: domains: Rename irq_safe_dev_in_no_sleep_domain() in genpd Date: Wed, 11 May 2022 16:56:54 +0200 Message-Id: <20220511145704.698189-5-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The name "irq_safe_dev_in_no_sleep_domain", doesn't really match the conditions that are being checked in the function, hence the code becomes a bit confusing to read. Let's clarify this by renaming it into "irq_safe_dev_in_sleep_domain" and let's also take the opportunity to clarify a corresponding comment in the code. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 5059c5d2e64a..269bfa3d2303 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -131,7 +131,7 @@ static const struct genpd_lock_ops genpd_spin_ops =3D { #define genpd_is_cpu_domain(genpd) (genpd->flags & GENPD_FLAG_CPU_DOMAIN) #define genpd_is_rpm_always_on(genpd) (genpd->flags & GENPD_FLAG_RPM_ALWAY= S_ON) =20 -static inline bool irq_safe_dev_in_no_sleep_domain(struct device *dev, +static inline bool irq_safe_dev_in_sleep_domain(struct device *dev, const struct generic_pm_domain *genpd) { bool ret; @@ -139,9 +139,9 @@ static inline bool irq_safe_dev_in_no_sleep_domain(stru= ct device *dev, ret =3D pm_runtime_is_irq_safe(dev) && !genpd_is_irq_safe(genpd); =20 /* - * Warn once if an IRQ safe device is attached to a no sleep domain, as - * to indicate a suboptimal configuration for PM. For an always on - * domain this isn't case, thus don't warn. + * Warn once if an IRQ safe device is attached to a domain, which + * callbacks are allowed to sleep. This indicates a suboptimal + * configuration for PM, but it doesn't matter for an always on domain. */ if (ret && !genpd_is_always_on(genpd)) dev_warn_once(dev, "PM domain %s will not be powered off\n", @@ -653,7 +653,7 @@ static int genpd_power_off(struct generic_pm_domain *ge= npd, bool one_dev_on, * device is part of a non-IRQ safe domain. */ if (!pm_runtime_suspended(pdd->dev) || - irq_safe_dev_in_no_sleep_domain(pdd->dev, genpd)) + irq_safe_dev_in_sleep_domain(pdd->dev, genpd)) not_suspended++; } =20 @@ -925,7 +925,7 @@ static int genpd_runtime_suspend(struct device *dev) * If power.irq_safe is set, this routine may be run with * IRQs disabled, so suspend only if the PM domain also is irq_safe. */ - if (irq_safe_dev_in_no_sleep_domain(dev, genpd)) + if (irq_safe_dev_in_sleep_domain(dev, genpd)) return 0; =20 genpd_lock(genpd); @@ -965,7 +965,7 @@ static int genpd_runtime_resume(struct device *dev) * As we don't power off a non IRQ safe domain, which holds * an IRQ safe device, we don't need to restore power to it. */ - if (irq_safe_dev_in_no_sleep_domain(dev, genpd)) { + if (irq_safe_dev_in_sleep_domain(dev, genpd)) { timed =3D false; goto out; } --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5DCB4C433F5 for ; Wed, 11 May 2022 14:57:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245382AbiEKO54 (ORCPT ); Wed, 11 May 2022 10:57:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35212 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245296AbiEKO5f (ORCPT ); Wed, 11 May 2022 10:57:35 -0400 Received: from mail-lj1-x22d.google.com (mail-lj1-x22d.google.com [IPv6:2a00:1450:4864:20::22d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BED35B0A66 for ; Wed, 11 May 2022 07:57:28 -0700 (PDT) Received: by mail-lj1-x22d.google.com with SMTP id b32so2979817ljf.1 for ; Wed, 11 May 2022 07:57:28 -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 :mime-version:content-transfer-encoding; bh=RuUBzy6pAOx/2fxGiEYKY7mFwWo2FzQU6CYeL4BrxxI=; b=o8hXsXE5c4ON8KPp7GEAdAY7YklOEikWfvH1aLWfMNAQdIh0iiqGBkKIFhthlyakHL 7iMkc1t8hCjnU5KZ/k/2Pjvd7nuwBBwUTWVcqUKRSndkGanMvz5PdQQf+7BNIBLodFnU 3CIvHG/A+8w9hDkAiyPlv2wklLcYep/B1g7U1AwOMeLrGT5CjJcHhZw5DhsNV86zQM4O aiyGLbiJg49JQJu6bBUbve6U2vwX0fs2qwBz9G3TyCInS3YQANG+SRXMeEdwNP90OVpz 8FABXu6lhlkN/bFxxngUlDaFLUUap8UdyRJfqhNiWVhXFNA2+GPcAYMYWs+s99miF1/P Nz7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RuUBzy6pAOx/2fxGiEYKY7mFwWo2FzQU6CYeL4BrxxI=; b=gFgqJtvUUaL+sUKLRzpUwNyd1jOHBzEA/bnuXp3Ro/PBXD7IVgx/BC4CIqygYZUCuJ PSLt++RC0nzXMuYAC/IxHPhykvtOzeRCqc/nClODpF9pq3lNoj37CjC1ymVCys9FJASW ziau+RbwQifI9W16etJXV7IXV+kA0W4sbBAD0Xmjil5w+7jFr9uQDB9Oo3JFpn+yZJTU ot2nDLGKKauATgMuy8v06TXAnei1TfM2fNApLxwTOe19A+ODRW2okDLfZrgWQozWBnOM KoAJR51/K6Omu/eFrAmRuZCOZP2bhKVytgh2mWTzMiClLwZqmxoM0Bd7ci5b5PwM8hPR 7Erg== X-Gm-Message-State: AOAM533e6MnWEaOx+bCCdScyhXpNKdcDLjwLxTSxWMT4MTFvy4iREvij mpyWCiQVUJJ0UcKuCUrpSD9GUA== X-Google-Smtp-Source: ABdhPJyyTYvDxXyb+HlvjzSp9j916LdDcMhVTFtP5yG1H1brnj3qB9maz/2b/ljY8PumXPuzwGd3JQ== X-Received: by 2002:a2e:97c7:0:b0:24f:5a7:f398 with SMTP id m7-20020a2e97c7000000b0024f05a7f398mr17163217ljj.231.1652281047104; Wed, 11 May 2022 07:57:27 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:26 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 05/14] PM: domains: Skip another warning in irq_safe_dev_in_sleep_domain() Date: Wed, 11 May 2022 16:56:55 +0200 Message-Id: <20220511145704.698189-6-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" In irq_safe_dev_in_sleep_domain() we correctly skip the dev_warn_once() if the corresponding genpd for the device, has the GENPD_FLAG_ALWAYS_ON flag being set. For the same reason (the genpd is always-on in runtime), let's also skip the warning if the GENPD_FLAG_RPM_ALWAYS_ON flag is set for the genpd. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 269bfa3d2303..a3e727c9a4fa 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -143,7 +143,10 @@ static inline bool irq_safe_dev_in_sleep_domain(struct= device *dev, * callbacks are allowed to sleep. This indicates a suboptimal * configuration for PM, but it doesn't matter for an always on domain. */ - if (ret && !genpd_is_always_on(genpd)) + if (genpd_is_always_on(genpd) || genpd_is_rpm_always_on(genpd)) + return ret; + + if (ret) dev_warn_once(dev, "PM domain %s will not be powered off\n", genpd->name); =20 --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 864F0C433FE for ; Wed, 11 May 2022 14:58:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245486AbiEKO6I (ORCPT ); Wed, 11 May 2022 10:58:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245305AbiEKO5h (ORCPT ); Wed, 11 May 2022 10:57:37 -0400 Received: from mail-lj1-x232.google.com (mail-lj1-x232.google.com [IPv6:2a00:1450:4864:20::232]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AAAB71AD5A3 for ; Wed, 11 May 2022 07:57:30 -0700 (PDT) Received: by mail-lj1-x232.google.com with SMTP id bx33so2927351ljb.12 for ; Wed, 11 May 2022 07:57:30 -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 :mime-version:content-transfer-encoding; bh=Bl8rpHW4c3CiFMsX2DAaPyQ7hRT28ZNH8vs9g1j1WIc=; b=gwNW8kn6F4StiafOJBEyuoeas2dplhxakMCkbmJ5pa779M+8mNuBYtJ8+wZrFuDEtD iL3gMOmPhwBVgwqJDa7RilmY+kZ674O5esZOGux0YHLjV2ZvCIXnIE4Qre/LI7yDlM+r dRHVPsHPPX5HnY0QUtkQT+dY43EAM+bZhkJKFi58PI+AKJjrZ0VSI912DRkze5Uuu7sv 1MZn7hyt+DjkWI0Fn115LCpIDoiOt4qLfJ0CFXIx2p2TqbZGq6OntoaBzjUHWoWmV8QH d+1/XOGpJot3pw7ai6NXha5jRaGfI9dhnxOLfKpNIcmx+B/xTYXprAXve7yQBgs2CwgZ c2Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Bl8rpHW4c3CiFMsX2DAaPyQ7hRT28ZNH8vs9g1j1WIc=; b=tHtvc4pZ8i9kaY9H3ikF90GmY7X8V3Lp8wGNZP1TtCxrEdItVsijPWGPxpGSAlDHdq 7yxJ+gZEgxR58bfd5fut21YAXQC5bgEcxYiYuzYzOrdcisCNerlnoFBupCQBt/s22mjH sHoCxZ13+KBXwjmHkmrDGlGrTnxoyUl2CJvEcJObDXF2mVrcoE8xE9UEkurh/kecHBUH f8DvkJ3ZtvKN8zfdQjB0niA7X4eQoxJ+Gi/obPX/6XNeWu2wAJY7EFPXRF3GAYSM8lgf Aj/3cKwQJRZiCKYl3xhnQbuWPAQf2MuqO5H4nZeIKJC1xT3JyGVHkWRyxmtf8kO3UMui TBNg== X-Gm-Message-State: AOAM530HyPo2HrQnJ47an+vLitMmjys8xpxlTCs6CiKgmVGEwkrylL10 P0sXdDZJ8B/Qs/SOnQ38q5Y50A== X-Google-Smtp-Source: ABdhPJxMcTq2eSQHDiwNWQsDX/A48wtxQ8/Nmme8fG3v2YBLDyaKJ7rAlDVk6lXwrPr1t7QCVrKRqw== X-Received: by 2002:a2e:964b:0:b0:24e:ee06:5b70 with SMTP id z11-20020a2e964b000000b0024eee065b70mr11174894ljh.126.1652281048825; Wed, 11 May 2022 07:57:28 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:27 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 06/14] PM: domains: Allocate gpd_timing_data dynamically based on governor Date: Wed, 11 May 2022 16:56:56 +0200 Message-Id: <20220511145704.698189-7-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" If a genpd doesn't have an associated governor assigned, there's really no point to allocate the per device gpd_timing_data, as the data isn't being used by a governor anyway. To avoid wasting memory, let's therefore convert the corresponding td variable in the struct generic_pm_domain_data into a pointer and manage the allocation of its data dynamically. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 48 +++++++++++++++++++--------- drivers/base/power/domain_governor.c | 9 ++++-- include/linux/pm_domain.h | 2 +- 3 files changed, 40 insertions(+), 19 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index a3e727c9a4fa..ca86fb3db901 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -773,13 +773,16 @@ static int genpd_dev_pm_qos_notifier(struct notifier_= block *nb, for (;;) { struct generic_pm_domain *genpd; struct pm_domain_data *pdd; + struct gpd_timing_data *td; =20 spin_lock_irq(&dev->power.lock); =20 pdd =3D dev->power.subsys_data ? dev->power.subsys_data->domain_data : NULL; if (pdd) { - to_gpd_data(pdd)->td.constraint_changed =3D true; + td =3D to_gpd_data(pdd)->td; + if (td) + td->constraint_changed =3D true; genpd =3D dev_to_genpd(dev); } else { genpd =3D ERR_PTR(-ENODATA); @@ -875,7 +878,7 @@ static int genpd_runtime_suspend(struct device *dev) struct generic_pm_domain *genpd; bool (*suspend_ok)(struct device *__dev); struct generic_pm_domain_data *gpd_data =3D dev_gpd_data(dev); - struct gpd_timing_data *td =3D &gpd_data->td; + struct gpd_timing_data *td =3D gpd_data->td; bool runtime_pm =3D pm_runtime_enabled(dev); ktime_t time_start; s64 elapsed_ns; @@ -915,7 +918,7 @@ static int genpd_runtime_suspend(struct device *dev) /* Update suspend latency value if the measured time exceeds it. */ if (runtime_pm) { elapsed_ns =3D ktime_to_ns(ktime_sub(ktime_get(), time_start)); - if (elapsed_ns > td->suspend_latency_ns) { + if (td && (elapsed_ns > td->suspend_latency_ns)) { td->suspend_latency_ns =3D elapsed_ns; dev_dbg(dev, "suspend latency exceeded, %lld ns\n", elapsed_ns); @@ -951,7 +954,7 @@ static int genpd_runtime_resume(struct device *dev) { struct generic_pm_domain *genpd; struct generic_pm_domain_data *gpd_data =3D dev_gpd_data(dev); - struct gpd_timing_data *td =3D &gpd_data->td; + struct gpd_timing_data *td =3D gpd_data->td; bool runtime_pm =3D pm_runtime_enabled(dev); ktime_t time_start; s64 elapsed_ns; @@ -999,7 +1002,7 @@ static int genpd_runtime_resume(struct device *dev) /* Update resume latency value if the measured time exceeds it. */ if (timed && runtime_pm) { elapsed_ns =3D ktime_to_ns(ktime_sub(ktime_get(), time_start)); - if (elapsed_ns > td->resume_latency_ns) { + if (td && (elapsed_ns > td->resume_latency_ns)) { td->resume_latency_ns =3D elapsed_ns; dev_dbg(dev, "resume latency exceeded, %lld ns\n", elapsed_ns); @@ -1496,9 +1499,11 @@ EXPORT_SYMBOL_GPL(dev_pm_genpd_resume); =20 #endif /* CONFIG_PM_SLEEP */ =20 -static struct generic_pm_domain_data *genpd_alloc_dev_data(struct device *= dev) +static struct generic_pm_domain_data *genpd_alloc_dev_data(struct device *= dev, + bool has_governor) { struct generic_pm_domain_data *gpd_data; + struct gpd_timing_data *td; int ret; =20 ret =3D dev_pm_get_subsys_data(dev); @@ -1512,26 +1517,38 @@ static struct generic_pm_domain_data *genpd_alloc_d= ev_data(struct device *dev) } =20 gpd_data->base.dev =3D dev; - gpd_data->td.constraint_changed =3D true; - gpd_data->td.effective_constraint_ns =3D PM_QOS_RESUME_LATENCY_NO_CONSTRA= INT_NS; gpd_data->nb.notifier_call =3D genpd_dev_pm_qos_notifier; gpd_data->next_wakeup =3D KTIME_MAX; =20 - spin_lock_irq(&dev->power.lock); + /* Allocate data used by a governor. */ + if (has_governor) { + td =3D kzalloc(sizeof(*td), GFP_KERNEL); + if (!td) { + ret =3D -ENOMEM; + goto err_free; + } =20 - if (dev->power.subsys_data->domain_data) { - ret =3D -EINVAL; - goto err_free; + td->constraint_changed =3D true; + td->effective_constraint_ns =3D PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS; + gpd_data->td =3D td; } =20 - dev->power.subsys_data->domain_data =3D &gpd_data->base; + spin_lock_irq(&dev->power.lock); + + if (dev->power.subsys_data->domain_data) + ret =3D -EINVAL; + else + dev->power.subsys_data->domain_data =3D &gpd_data->base; =20 spin_unlock_irq(&dev->power.lock); =20 + if (ret) + goto err_free; + return gpd_data; =20 err_free: - spin_unlock_irq(&dev->power.lock); + kfree(gpd_data->td); kfree(gpd_data); err_put: dev_pm_put_subsys_data(dev); @@ -1547,6 +1564,7 @@ static void genpd_free_dev_data(struct device *dev, =20 spin_unlock_irq(&dev->power.lock); =20 + kfree(gpd_data->td); kfree(gpd_data); dev_pm_put_subsys_data(dev); } @@ -1611,7 +1629,7 @@ static int genpd_add_device(struct generic_pm_domain = *genpd, struct device *dev, if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(dev)) return -EINVAL; =20 - gpd_data =3D genpd_alloc_dev_data(dev); + gpd_data =3D genpd_alloc_dev_data(dev, genpd->gov); if (IS_ERR(gpd_data)) return PTR_ERR(gpd_data); =20 diff --git a/drivers/base/power/domain_governor.c b/drivers/base/power/doma= in_governor.c index c13e44823f16..62be9b3f8c90 100644 --- a/drivers/base/power/domain_governor.c +++ b/drivers/base/power/domain_governor.c @@ -18,6 +18,8 @@ static int dev_update_qos_constraint(struct device *dev, = void *data) s64 constraint_ns; =20 if (dev->power.subsys_data && dev->power.subsys_data->domain_data) { + struct gpd_timing_data *td =3D dev_gpd_data(dev)->td; + /* * Only take suspend-time QoS constraints of devices into * account, because constraints updated after the device has @@ -25,7 +27,8 @@ static int dev_update_qos_constraint(struct device *dev, = void *data) * anyway. In order for them to take effect, the device has to * be resumed and suspended again. */ - constraint_ns =3D dev_gpd_data(dev)->td.effective_constraint_ns; + constraint_ns =3D td ? td->effective_constraint_ns : + PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS; } else { /* * The child is not in a domain and there's no info on its @@ -49,7 +52,7 @@ static int dev_update_qos_constraint(struct device *dev, = void *data) */ static bool default_suspend_ok(struct device *dev) { - struct gpd_timing_data *td =3D &dev_gpd_data(dev)->td; + struct gpd_timing_data *td =3D dev_gpd_data(dev)->td; unsigned long flags; s64 constraint_ns; =20 @@ -215,7 +218,7 @@ static bool __default_power_down_ok(struct dev_pm_domai= n *pd, * domain to turn off and on (that's how much time it will * have to wait worst case). */ - td =3D &to_gpd_data(pdd)->td; + td =3D to_gpd_data(pdd)->td; constraint_ns =3D td->effective_constraint_ns; /* * Zero means "no suspend at all" and this runs only when all diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index 043d48e4420a..126a4b9ab215 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -193,7 +193,7 @@ struct pm_domain_data { =20 struct generic_pm_domain_data { struct pm_domain_data base; - struct gpd_timing_data td; + struct gpd_timing_data *td; struct notifier_block nb; struct notifier_block *power_nb; int cpu; --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C5213C433EF for ; Wed, 11 May 2022 14:58:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245342AbiEKO6T (ORCPT ); Wed, 11 May 2022 10:58:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35398 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245324AbiEKO5i (ORCPT ); Wed, 11 May 2022 10:57:38 -0400 Received: from mail-lf1-x12d.google.com (mail-lf1-x12d.google.com [IPv6:2a00:1450:4864:20::12d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 59E421FD840 for ; Wed, 11 May 2022 07:57:32 -0700 (PDT) Received: by mail-lf1-x12d.google.com with SMTP id p26so4006409lfh.10 for ; Wed, 11 May 2022 07:57: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:in-reply-to:references :mime-version:content-transfer-encoding; bh=2gFFvwdN/Sbzb6gl/THgYR/bjpxtOmE1Z07RfTChlck=; b=AKMBOxosg+GEA7ZZLPUVvSF9Nz2ZhFwCheRbwlKRxf5eHcI/lcg2XZ/v0Q1fKU3Y8r PyEMzM0zsZpNRhjZ/q3kO6e+AS1vgy1HuYHmkxc3od8ILggFTkUv33Q7QR9m+ikgKhwt bK6jV3XkOGqKRwsa5Vr8Took8lIY9B7N75kQyHZBrbsJEXIsVreCgmzUbXHffQGKsaTE 4PFbREOn5I8aK2EUBC/48mzJHHMVl4buN8+wyF2G7ysE30SgmFl44/boOgrPx9ZhOnJI LkHXt1ItXHq8C6FaK0r/YlZjmFLmH8bfe58M/tZcC+H9vIiPtym5x8NqCC2FLyfh1h/B 4PpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2gFFvwdN/Sbzb6gl/THgYR/bjpxtOmE1Z07RfTChlck=; b=w9SieJwrfxD8N5R6qCHPdGtbhQxFVz0zooDZOU+A2BZ4r/v/G0h+z6r0tMlWJTswub Zh876bO6MKY+ghDQpKePHNqPG/A/1azQqjyOOE9WmLT83oSIEgtsSCtU0EM0fk84RbAZ DJ1FJ3KgCkVXn8e70OE5OrAdGr7QziXypFfuqW0svO2lzNhoNmlxcE7+qoMareInQkJq UdfNCNwRUCnV/sYi9oYliKVDkFX+HZ5ZWamTdCrTdjY6ySreP9f1zouufAdYQFq2oMJb J7tNna9bKjxyqQgHoemKflB35R45/enm/uwGlEJlV3i2OpJ+hru0S9ZHVz4sIpihEv5h VyAg== X-Gm-Message-State: AOAM530VmJ2HhxPVGKzW+a5CrpfgUmIfvGnaZgWi5cDWYTwq99WWhIFF d99E09YKMwYFXIKAukzbsKOn8A== X-Google-Smtp-Source: ABdhPJyKM/oX7q2GnhgQf0vJUOqTliTzVsmMWV8dFynsx6Tt6u0Zi82/g1j3o0k081btT4lf1QlnJQ== X-Received: by 2002:ac2:5456:0:b0:471:f9e6:7388 with SMTP id d22-20020ac25456000000b00471f9e67388mr19548791lfn.504.1652281051171; Wed, 11 May 2022 07:57:31 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:30 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 07/14] PM: domains: Move the next_wakeup variable into the struct gpd_timing_data Date: Wed, 11 May 2022 16:56:57 +0200 Message-Id: <20220511145704.698189-8-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" If the corresponding genpd for the device doesn't use a governor, the variable next_wakeup within the struct generic_pm_domain_data becomes superfluous. To avoid wasting memory, let's move it into the struct gpd_timing_data, which is already being allocated based upon if there is governor assigned. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 9 +++++---- drivers/base/power/domain_governor.c | 2 +- include/linux/pm_domain.h | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index ca86fb3db901..4c059a858957 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -478,15 +478,16 @@ EXPORT_SYMBOL_GPL(dev_pm_genpd_set_performance_state); */ void dev_pm_genpd_set_next_wakeup(struct device *dev, ktime_t next) { - struct generic_pm_domain_data *gpd_data; struct generic_pm_domain *genpd; + struct gpd_timing_data *td; =20 genpd =3D dev_to_genpd_safe(dev); if (!genpd) return; =20 - gpd_data =3D to_gpd_data(dev->power.subsys_data->domain_data); - gpd_data->next_wakeup =3D next; + td =3D to_gpd_data(dev->power.subsys_data->domain_data)->td; + if (td) + td->next_wakeup =3D next; } EXPORT_SYMBOL_GPL(dev_pm_genpd_set_next_wakeup); =20 @@ -1518,7 +1519,6 @@ static struct generic_pm_domain_data *genpd_alloc_dev= _data(struct device *dev, =20 gpd_data->base.dev =3D dev; gpd_data->nb.notifier_call =3D genpd_dev_pm_qos_notifier; - gpd_data->next_wakeup =3D KTIME_MAX; =20 /* Allocate data used by a governor. */ if (has_governor) { @@ -1530,6 +1530,7 @@ static struct generic_pm_domain_data *genpd_alloc_dev= _data(struct device *dev, =20 td->constraint_changed =3D true; td->effective_constraint_ns =3D PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS; + td->next_wakeup =3D KTIME_MAX; gpd_data->td =3D td; } =20 diff --git a/drivers/base/power/domain_governor.c b/drivers/base/power/doma= in_governor.c index 62be9b3f8c90..599b3909821c 100644 --- a/drivers/base/power/domain_governor.c +++ b/drivers/base/power/domain_governor.c @@ -139,7 +139,7 @@ static void update_domain_next_wakeup(struct generic_pm= _domain *genpd, ktime_t n * is able to enter its optimal idle state. */ list_for_each_entry(pdd, &genpd->dev_list, list_node) { - next_wakeup =3D to_gpd_data(pdd)->next_wakeup; + next_wakeup =3D to_gpd_data(pdd)->td->next_wakeup; if (next_wakeup !=3D KTIME_MAX && !ktime_before(next_wakeup, now)) if (ktime_before(next_wakeup, domain_wakeup)) domain_wakeup =3D next_wakeup; diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index 126a4b9ab215..1f370f074f30 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -182,6 +182,7 @@ struct gpd_timing_data { s64 suspend_latency_ns; s64 resume_latency_ns; s64 effective_constraint_ns; + ktime_t next_wakeup; bool constraint_changed; bool cached_suspend_ok; }; @@ -200,7 +201,6 @@ struct generic_pm_domain_data { unsigned int performance_state; unsigned int default_pstate; unsigned int rpm_pstate; - ktime_t next_wakeup; void *data; }; =20 --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 48875C433EF for ; Wed, 11 May 2022 14:58:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229638AbiEKO6b (ORCPT ); Wed, 11 May 2022 10:58:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35402 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245325AbiEKO5i (ORCPT ); Wed, 11 May 2022 10:57:38 -0400 Received: from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com [IPv6:2a00:1450:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A3691FD866 for ; Wed, 11 May 2022 07:57:33 -0700 (PDT) Received: by mail-lj1-x22c.google.com with SMTP id t25so2956004ljd.6 for ; Wed, 11 May 2022 07:57:33 -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 :mime-version:content-transfer-encoding; bh=1l+XmFy90zJUqh6uSXg8CIYQDjU5HDLCDj0R7eANRVs=; b=KSlADItncdzu7g/umHmQz3OtajEsfndFD+dkoDvvfzlZo2fREDqcLmV+CqiHDXFjMm oeO36+yXMVzEjqnEB2JFbNi5ovuCxSyQstqQU2zqnhch+RNOaLIGnOxPIXKl89dM76S+ y68pdPWTEqXeoAaGuijCxJDG5i+aAjNLrS7+pq0N/tFdq1UxdeIv5q7AHzIGl/o9yOKv z1bVdY1tDEp6mE2bbZK+lYRn8/t3SWLflT9lMDsxzLePFj+MH2abaHEn5gRurfe52+OU 78XUs9Pymg+1GL7aUV2ZHJ34OWGWNNZhOQCpodipAI1erTZBuSIzA4LoRF8t222NbymO kQ2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1l+XmFy90zJUqh6uSXg8CIYQDjU5HDLCDj0R7eANRVs=; b=jSJGCOMLy0MM/ruUSDFrKZcXC/BuVvmTwULSaChWt/rTTCN1GCvFzidQu7e1f75Aoi XjdcKcw3DWL6Y9UZ/Bo+/wOWQrFjDo9Dq8fdp7AZXPRlWBECLDre5ASc6pbrPLLtViLj 1GGHSX73YjCrc4BZR5FP9vh89+UYYk0OFE9lhDS4vYu1HmHW7d6/38YzN/bnIkeTWAoI a8ERj0MCVITh+s6f+zlszaNMq5tCsFID6P6HaUfAwvze0+r1JpW8NG/ml7yJtwoDObTK UFJ/5ClhYZgUnOZRLl77H3q4GMoxR3OuPcBBjazOR/uyDf/cKGsYC9upT966RKKIU1Mw Aabg== X-Gm-Message-State: AOAM531yz/VSsuBmFO6GaIvWjjpUBvzbUCl1WmeOYJKl6Kl+8DmCacmW uNfxGz+3Y5WOiKuJ9/ZXQyyhZA== X-Google-Smtp-Source: ABdhPJxXvTOm0cxB4sH4Yz2HTmmgnHipU4lVOgRNiD0Lw1H2QftanODBihzRGG0PhZdXh4L4C788JQ== X-Received: by 2002:a2e:3304:0:b0:250:9109:2e80 with SMTP id d4-20020a2e3304000000b0025091092e80mr17593469ljc.508.1652281052855; Wed, 11 May 2022 07:57:32 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:31 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 08/14] PM: domains: Measure suspend/resume latencies in genpd based on governor Date: Wed, 11 May 2022 16:56:58 +0200 Message-Id: <20220511145704.698189-9-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The QoS latency measurements for devices in genpd_runtime_suspend|resume() are superfluous, unless the corresponding genpd has a governor assigned to it, which would make use of the data. Therefore, let's improve the behaviour in genpd by making the measurements conditional, based upon if there's a governor assigned. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 4c059a858957..2cdfbe48dde0 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -881,7 +881,7 @@ static int genpd_runtime_suspend(struct device *dev) struct generic_pm_domain_data *gpd_data =3D dev_gpd_data(dev); struct gpd_timing_data *td =3D gpd_data->td; bool runtime_pm =3D pm_runtime_enabled(dev); - ktime_t time_start; + ktime_t time_start =3D 0; s64 elapsed_ns; int ret; =20 @@ -902,8 +902,7 @@ static int genpd_runtime_suspend(struct device *dev) return -EBUSY; =20 /* Measure suspend latency. */ - time_start =3D 0; - if (runtime_pm) + if (td && runtime_pm) time_start =3D ktime_get(); =20 ret =3D __genpd_runtime_suspend(dev); @@ -917,9 +916,9 @@ static int genpd_runtime_suspend(struct device *dev) } =20 /* Update suspend latency value if the measured time exceeds it. */ - if (runtime_pm) { + if (td && runtime_pm) { elapsed_ns =3D ktime_to_ns(ktime_sub(ktime_get(), time_start)); - if (td && (elapsed_ns > td->suspend_latency_ns)) { + if (elapsed_ns > td->suspend_latency_ns) { td->suspend_latency_ns =3D elapsed_ns; dev_dbg(dev, "suspend latency exceeded, %lld ns\n", elapsed_ns); @@ -956,11 +955,10 @@ static int genpd_runtime_resume(struct device *dev) struct generic_pm_domain *genpd; struct generic_pm_domain_data *gpd_data =3D dev_gpd_data(dev); struct gpd_timing_data *td =3D gpd_data->td; - bool runtime_pm =3D pm_runtime_enabled(dev); - ktime_t time_start; + bool timed =3D td && pm_runtime_enabled(dev); + ktime_t time_start =3D 0; s64 elapsed_ns; int ret; - bool timed =3D true; =20 dev_dbg(dev, "%s()\n", __func__); =20 @@ -988,8 +986,7 @@ static int genpd_runtime_resume(struct device *dev) =20 out: /* Measure resume latency. */ - time_start =3D 0; - if (timed && runtime_pm) + if (timed) time_start =3D ktime_get(); =20 ret =3D genpd_start_dev(genpd, dev); @@ -1001,9 +998,9 @@ static int genpd_runtime_resume(struct device *dev) goto err_stop; =20 /* Update resume latency value if the measured time exceeds it. */ - if (timed && runtime_pm) { + if (timed) { elapsed_ns =3D ktime_to_ns(ktime_sub(ktime_get(), time_start)); - if (td && (elapsed_ns > td->resume_latency_ns)) { + if (elapsed_ns > td->resume_latency_ns) { td->resume_latency_ns =3D elapsed_ns; dev_dbg(dev, "resume latency exceeded, %lld ns\n", elapsed_ns); --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8ADDBC433F5 for ; Wed, 11 May 2022 14:58:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245283AbiEKO6Z (ORCPT ); Wed, 11 May 2022 10:58:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35546 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245329AbiEKO5j (ORCPT ); Wed, 11 May 2022 10:57:39 -0400 Received: from mail-lj1-x22b.google.com (mail-lj1-x22b.google.com [IPv6:2a00:1450:4864:20::22b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 087AB67D3D for ; Wed, 11 May 2022 07:57:34 -0700 (PDT) Received: by mail-lj1-x22b.google.com with SMTP id g16so2976553lja.3 for ; Wed, 11 May 2022 07:57:34 -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 :mime-version:content-transfer-encoding; bh=L4Cgf9CCBKn83g7/KBEuaNwcj4g0FN5Zjd21HT3ZAg8=; b=hARKzpbiibT8wZ6cRWUlNHAwxXB5ahdvlALYyO4z7iYJ/yCSbhsYiJtQI0b061QvaB T0z3ZQBb4q5fHOnw2qdaT6iHhDbxL9q+Mfdv+7f5P3zo0BnrSW2LBdN/g4WTJCgC44qA JxLCfL9Ul1vPV6g2KIum0DMTwuxO+LzCHqvfATvnDhMZ92PnVR3U++ebLHY+eVrpB9zO /zmiXe6AH03O6DIUVtjYFgtNkPSZw0Pg1/L402McRSqNE3wzsKg1O81tG+7rDoCKFny9 DEMiwBxLQTU5nZEqNitXnECE0negcXRGO3zmI6Rd0kjVRyl/l4fGxzoQRl2xZAXdhlM6 30pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=L4Cgf9CCBKn83g7/KBEuaNwcj4g0FN5Zjd21HT3ZAg8=; b=Mfs/KStHXrkN8YFv8r8mrGMEdRdwtobZUEGhKs2UPSLggXKzWCYFEVl/yk4YokgKtu dUKL8G22q/7CBNs9NNh57Qg83vOLvroMdyPbu8dtXgJLKvsBmkTSJ/OoLPUtISQhZGP9 4hk1Y4UhCeNCXGQJyc4IMqRGVLoby63BVPZ+eBcActZSLxmt22VomVBbmoVjsEzgqXyw gBUycZ9rkEZDs9Z2323g4BBWnlhcA+RIEqPkxK0D3zR9r78v+F1xNI5XrLVbnwkNTonK zMn788+EzkgVPDHVhzSTmuRGAODKmgmiDRIz3myAqe7ojxouE9LDfIFb3tztD33V72cM 7PTw== X-Gm-Message-State: AOAM532SSeqDuqKKKfoAFDPRylJMJVtOpun2F2Ojhlf19+5a9Edut4uo fSaKSh8pKct40QniGuAxJu+cVw== X-Google-Smtp-Source: ABdhPJySa48Kx14B5FTFLVO2CgILH59wgRXZtob6dJ+mULnBA+aIcSCJKYUHN/PjPYbiMNiuK1hb+A== X-Received: by 2002:a2e:9ad2:0:b0:24f:435:19c5 with SMTP id p18-20020a2e9ad2000000b0024f043519c5mr16893662ljj.281.1652281054470; Wed, 11 May 2022 07:57:34 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:33 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 09/14] PM: domains: Fixup QoS latency measurements for IRQ safe devices in genpd Date: Wed, 11 May 2022 16:56:59 +0200 Message-Id: <20220511145704.698189-10-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" When an IRQ safe device is attached to a non-IRQ safe PM domain, genpd needs to prevent the PM domain from being powered off. However, genpd still allows the device to be runtime suspended/resumed, hence it's also reasonable to think that a governor may be used to validate the QoS latency constraints. Unfortunately, genpd_runtime_resume() treats the configuration above, as a reason to skip measuring the QoS resume latency for the device. This is a legacy behaviour that was earlier correct, but should have been changed when genpd was transformed into its current behaviour around how it manages IRQ safe devices. Luckily, there's no report about problems, so let's just fixup the behaviour. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 2cdfbe48dde0..48101232fcb9 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -970,10 +970,8 @@ static int genpd_runtime_resume(struct device *dev) * As we don't power off a non IRQ safe domain, which holds * an IRQ safe device, we don't need to restore power to it. */ - if (irq_safe_dev_in_sleep_domain(dev, genpd)) { - timed =3D false; + if (irq_safe_dev_in_sleep_domain(dev, genpd)) goto out; - } =20 genpd_lock(genpd); ret =3D genpd_power_on(genpd, 0); --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 15A23C433EF for ; Wed, 11 May 2022 14:59:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245514AbiEKO7O (ORCPT ); Wed, 11 May 2022 10:59:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35190 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245338AbiEKO5l (ORCPT ); Wed, 11 May 2022 10:57:41 -0400 Received: from mail-lj1-x235.google.com (mail-lj1-x235.google.com [IPv6:2a00:1450:4864:20::235]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5378920CDAE for ; Wed, 11 May 2022 07:57:37 -0700 (PDT) Received: by mail-lj1-x235.google.com with SMTP id o22so2055642ljp.8 for ; Wed, 11 May 2022 07:57:36 -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 :mime-version:content-transfer-encoding; bh=PO0ibnivlYlQHsSzGsoFDn9GSobE9qvHUHbEZcsOBy0=; b=eZKENx22PLLnXCK4/RWqmJUBzs4H+TVmExklvHsjsUlgPBN81qUOsWlzGDaoO3K+Cy b0UldU/sshvcS11Ya4efKtzTB/3qoymbAcHWQ5ohd1pUzs6mXaQplzOJP+RkZSg88zZi m04gMKBge8gTwQPBwn0ejNIEASf8HrdnnoaeYERmzOfXNw1F371WCYnYEr1wdgBpZj1M HESDDiz954jB4oZYQ2ekP/uznn5f5+8J+XIxmCv93rfH42upje90xP5wt++16rYvutpg Fqi+XGoRDLEndtES+TCdYJR3dCT9d1odLgs+1JnJ1Zr4PA1puOUi0U1pG9jr84+6Ihwf jPGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PO0ibnivlYlQHsSzGsoFDn9GSobE9qvHUHbEZcsOBy0=; b=jy9V3j7ZlX5HhUIwEjL9oIjUuSaQ2NUodg5QsA7Fv0l742O9agdw8Y8z3sHts1wsnc 422rEKbFbi90CEErwuYl/Qjm0Q31ZVTBwWfPBen1xpCNMLnd0ko5efMQxZ1pn1SiPCRo MtNaYAfIW6IFai+O4lZbaQVWIzwOWd2OwOj4ftu49Fbw36YeReQM7hwfzvAhqJk2A/tD opKGIbOWs9sjP7HtSddypR47c1Vc8wo8G7Vkcwudzs+AgEAUL+S8Cvf1aIpGEOM+sMv2 C7O+4nqA+ZGwp/mdSKuYco6On9uqou0SNR77s+mpuW8MPf8rMA45YvFzb1kTSzwpyM6j ynmQ== X-Gm-Message-State: AOAM531Kav4jagV/LMWPffbhCb2e4J5ubLup0NOSwfKEfm0t2C6hdiu4 UxRtY15ELo2cVHCIw94VKTRBYw== X-Google-Smtp-Source: ABdhPJxZphuNVJWtuCo9Ewl3xjNfgWKEwCNvRcPem+7IU9+w73SPhap+pUAL2jolkDfLctkvmSy/6Q== X-Received: by 2002:a05:651c:1994:b0:250:5b1c:69e7 with SMTP id bx20-20020a05651c199400b002505b1c69e7mr17054484ljb.192.1652281056576; Wed, 11 May 2022 07:57:36 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:35 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 10/14] PM: domains: Fix initialization of genpd's next_wakeup Date: Wed, 11 May 2022 16:57:00 +0200 Message-Id: <20220511145704.698189-11-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" In the genpd governor we walk the list of child-domains to take into account their next_wakeup. If the child-domain itself, doesn't have a governor assigned to it, we can end up using the next_wakeup value before it has been properly initialized. To prevent a possible incorrect behaviour in the governor, let's initialize next_wakeup to KTIME_MAX. Fixes: c79aa080fb0f ("PM: domains: use device's next wakeup to determine do= main idle state") Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 48101232fcb9..9922fd763739 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -2007,6 +2007,7 @@ int pm_genpd_init(struct generic_pm_domain *genpd, genpd->device_count =3D 0; genpd->max_off_time_ns =3D -1; genpd->max_off_time_changed =3D true; + genpd->next_wakeup =3D KTIME_MAX; genpd->provider =3D NULL; genpd->has_provider =3D false; genpd->accounting_time =3D ktime_get_mono_fast_ns(); --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1A8B3C433EF for ; Wed, 11 May 2022 14:59:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245276AbiEKO7J (ORCPT ); Wed, 11 May 2022 10:59:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35400 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245354AbiEKO5l (ORCPT ); Wed, 11 May 2022 10:57:41 -0400 Received: from mail-lj1-x231.google.com (mail-lj1-x231.google.com [IPv6:2a00:1450:4864:20::231]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2F231EABA0 for ; Wed, 11 May 2022 07:57:39 -0700 (PDT) Received: by mail-lj1-x231.google.com with SMTP id 16so2916673lju.13 for ; Wed, 11 May 2022 07:57:39 -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 :mime-version:content-transfer-encoding; bh=03vwMXkNSh1Yi/ACwjbmjbNGWKBFAPs5qBvgCoLQeEk=; b=AGjrrVJCLBarjIjTSR4m++R4rn4Nqfv0gx/0iKgijlo/HyHKY4TU9boFbkOMdNQr+v 0nh+AUV9zFAuU2hJpx8BbRRJ/RQWYTglsMMWiZZOOLd9UPYWZNziBgy8ui4Z0DaPTDlM ixVWOHtmkHmIVNkiuQ9p1dmc+TQK6GmJjoF4cDpmW4HKjKC3+mp09EE1HpSJ+QJpG1Sr rFgRKP4AKv+Wkilh1NaQRPxMSp1jPU/2PDoftAuQb5IxRJJTABh/XkcV/GcMD2F3dGst 6AuskXb4OOwjt5HaH4WwBhx/TTMtZz7gT0HB0+sJ+o8HJQA8yYlHSbGwaTN0zZdMJvvu sf8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=03vwMXkNSh1Yi/ACwjbmjbNGWKBFAPs5qBvgCoLQeEk=; b=sjfPhMgI0n9e0kD7TRtLWf+P9BJkyxP9jOTVK1LIkYibz1KRdGAl8OfjjsKOAG9Lkk FIdvlLCwZOZ6yTpNg220qyYqjHLhtIlqgxSlhNa4Jsbq8+/ypl3eM3KIJOh4s9ws42hH XipBxUSyb2AhDkcWnfOPXoyNas6Rvgra11g3cP+lTuPRkCUqic9BH6jbdWfLQgN35lEx nwZEH6vtJXMAnkQ52xh13TkJ0YGptAV9rVz3zBd2SIjmtdPy4/q0CoZUnuFMDpCO2Rjx 12ltGi2IjaJ5vgofLQbbOzr5Ii4tRwx9Ji0T4OlwkElA1zrjn1z5Nr1WgcCJYe46ESBT vNJg== X-Gm-Message-State: AOAM533J5XNS1b9/F26VNxJ0SCc7eud3xhGuAAXT2cc+8mcXzKQYbO65 8CpDa5Wl5H68Xhm91kSUdFxbKw== X-Google-Smtp-Source: ABdhPJwVzMZbFVWKNFxTrZgdyNeO0VWVLulqT/QD/hKAzX3rlaU1s0usPzyUT3MXIIuzEBhg1WmgVg== X-Received: by 2002:a05:651c:1792:b0:235:1df3:7b8e with SMTP id bn18-20020a05651c179200b002351df37b8emr17300088ljb.464.1652281058272; Wed, 11 May 2022 07:57:38 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:37 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 11/14] PM: domains: Clean up some code in pm_genpd_init() and genpd_remove() Date: Wed, 11 May 2022 16:57:01 +0200 Message-Id: <20220511145704.698189-12-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" To improve the readability of the code, let's move the parts that deals with allocation/freeing of data, into two separate functions. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 56 +++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 9922fd763739..ac1eb7d2470b 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -1968,6 +1968,37 @@ static int genpd_set_default_power_state(struct gene= ric_pm_domain *genpd) return 0; } =20 +static int genpd_alloc_data(struct generic_pm_domain *genpd) +{ + int ret; + + if (genpd_is_cpu_domain(genpd) && + !zalloc_cpumask_var(&genpd->cpus, GFP_KERNEL)) + return -ENOMEM; + + /* Use only one "off" state if there were no states declared */ + if (genpd->state_count =3D=3D 0) { + ret =3D genpd_set_default_power_state(genpd); + if (ret) + goto free; + } + + return 0; + +free: + if (genpd_is_cpu_domain(genpd)) + free_cpumask_var(genpd->cpus); + return ret; +} + +static void genpd_free_data(struct generic_pm_domain *genpd) +{ + if (genpd_is_cpu_domain(genpd)) + free_cpumask_var(genpd->cpus); + if (genpd->free_states) + genpd->free_states(genpd->states, genpd->state_count); +} + static void genpd_lock_init(struct generic_pm_domain *genpd) { if (genpd->flags & GENPD_FLAG_IRQ_SAFE) { @@ -2037,21 +2068,13 @@ int pm_genpd_init(struct generic_pm_domain *genpd, !genpd_status_on(genpd)) return -EINVAL; =20 - if (genpd_is_cpu_domain(genpd) && - !zalloc_cpumask_var(&genpd->cpus, GFP_KERNEL)) - return -ENOMEM; - - /* Use only one "off" state if there were no states declared */ - if (genpd->state_count =3D=3D 0) { - ret =3D genpd_set_default_power_state(genpd); - if (ret) { - if (genpd_is_cpu_domain(genpd)) - free_cpumask_var(genpd->cpus); - return ret; - } - } else if (!gov && genpd->state_count > 1) { + /* Multiple states but no governor doesn't make sense. */ + if (!gov && genpd->state_count > 1) pr_warn("%s: no governor for states\n", genpd->name); - } + + ret =3D genpd_alloc_data(genpd); + if (ret) + return ret; =20 device_initialize(&genpd->dev); dev_set_name(&genpd->dev, "%s", genpd->name); @@ -2096,10 +2119,7 @@ static int genpd_remove(struct generic_pm_domain *ge= npd) genpd_unlock(genpd); genpd_debug_remove(genpd); cancel_work_sync(&genpd->power_off_work); - if (genpd_is_cpu_domain(genpd)) - free_cpumask_var(genpd->cpus); - if (genpd->free_states) - genpd->free_states(genpd->states, genpd->state_count); + genpd_free_data(genpd); =20 pr_debug("%s: removed %s\n", __func__, genpd->name); =20 --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 743B7C433EF for ; Wed, 11 May 2022 14:58:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245459AbiEKO65 (ORCPT ); Wed, 11 May 2022 10:58:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36010 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245333AbiEKO5o (ORCPT ); Wed, 11 May 2022 10:57:44 -0400 Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9240B1DFDA9 for ; Wed, 11 May 2022 07:57:41 -0700 (PDT) Received: by mail-lf1-x135.google.com with SMTP id b18so4019789lfv.9 for ; Wed, 11 May 2022 07:57:41 -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 :mime-version:content-transfer-encoding; bh=XZcABCuQiJ6MV3J10Fqs7sUH1y0873Bga2K+vj5NK2g=; b=a8aVVIu4GI2HZ+KTvb82sbWY59cb67j97G3NWXOLaYJroaNA5JsNJn0Md34JPXDAgE yG7gLiWKP2qV9b3BY6lOmhwvIm5NvnRyMEY47/mFkmm74FWSukH9/GJGNYhfDSt534G4 F3FuiVxsPJQa/RwQb4ouwL5juVQNc+0Nwh48jj/5XrfDuy8Frc5dQeTgkZ8uc89eTCh6 vKV+7gMsV9xqgGBvDWNxv7JNgDi9h2KifKkMRKiO6VAbaBLScqdsR5joff7tKzgKO3vi NUpAqH+pkhQHnk+kSMNDhY6tkZaUkVTbf0EjR/gcxYGZjsrr8HnzX0v5wB6nVz0Ng5/c yFqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XZcABCuQiJ6MV3J10Fqs7sUH1y0873Bga2K+vj5NK2g=; b=qmLpuT5rzhmuyOFjv7Jq0LBhetCrYXbr4EofnRHuCYCoW1pr6+aZcBr4JunMSaGiBF dY0jTTo/7QlN+tZeolSnQmXjWTVEesRMZNgNq6sjg67e9N401BrEnrcA9ByKJD2J5nGa E982MjuuPg21pj57ZneoBL545uybkN2i4OJUnLPnG2nhCw6zVY9r8B3POTkAmNi+G3tL kF+GnZ+nILXAXjurJoEpyxD0aBO04AqqXiHgHs3qopnEMvgAqAjeD0Fh47GeIi3JPUM8 omJGj9wBwma4L/cnphMJZiqrehRLkSdmWJEQCylE/0LBkgJBlok+yMUHznmhp6OGrw15 Srqg== X-Gm-Message-State: AOAM5329lWiuvMHHB+yqBPgWoGq74lFx5gZaXsbElfUjDhb4TIl88By5 HUvSp9lzPSbxoy1r4799I3I7zA== X-Google-Smtp-Source: ABdhPJwK/WWDDR7g3gLg/wWX1aT1ggLMOyilHSAtiXCR1IUqZzkT/ITGPnKzorWCZhQXfylEZkn1PA== X-Received: by 2002:a05:6512:34cf:b0:474:44e4:83a5 with SMTP id w15-20020a05651234cf00b0047444e483a5mr2289351lfr.6.1652281059819; Wed, 11 May 2022 07:57:39 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:39 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 12/14] PM: domains: Allocate governor data dynamically based on a genpd governor Date: Wed, 11 May 2022 16:57:02 +0200 Message-Id: <20220511145704.698189-13-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" If a genpd doesn't have an associated governor assigned, several variables in the struct generic_pm_domain becomes superfluous. Rather than wasting memory in allocated genpds, let's move the variables from the struct generic_pm_domain into a new separate struct. In this way, we can instead dynamically decide when we need to allocate the corresponding data for it. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 49 +++++++++++++++++++--------- drivers/base/power/domain_governor.c | 48 +++++++++++++++------------ include/linux/pm_domain.h | 14 +++++--- 3 files changed, 70 insertions(+), 41 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index ac1eb7d2470b..a7de5fb8f073 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -527,7 +527,8 @@ static int _genpd_power_on(struct generic_pm_domain *ge= npd, bool timed) goto out; =20 genpd->states[state_idx].power_on_latency_ns =3D elapsed_ns; - genpd->max_off_time_changed =3D true; + if (genpd->gd) + genpd->gd->max_off_time_changed =3D true; pr_debug("%s: Power-%s latency exceeded, new value %lld ns\n", genpd->name, "on", elapsed_ns); =20 @@ -576,7 +577,8 @@ static int _genpd_power_off(struct generic_pm_domain *g= enpd, bool timed) goto out; =20 genpd->states[state_idx].power_off_latency_ns =3D elapsed_ns; - genpd->max_off_time_changed =3D true; + if (genpd->gd) + genpd->gd->max_off_time_changed =3D true; pr_debug("%s: Power-%s latency exceeded, new value %lld ns\n", genpd->name, "off", elapsed_ns); =20 @@ -772,7 +774,7 @@ static int genpd_dev_pm_qos_notifier(struct notifier_bl= ock *nb, dev =3D gpd_data->base.dev; =20 for (;;) { - struct generic_pm_domain *genpd; + struct generic_pm_domain *genpd =3D ERR_PTR(-ENODATA); struct pm_domain_data *pdd; struct gpd_timing_data *td; =20 @@ -782,18 +784,17 @@ static int genpd_dev_pm_qos_notifier(struct notifier_= block *nb, dev->power.subsys_data->domain_data : NULL; if (pdd) { td =3D to_gpd_data(pdd)->td; - if (td) + if (td) { td->constraint_changed =3D true; - genpd =3D dev_to_genpd(dev); - } else { - genpd =3D ERR_PTR(-ENODATA); + genpd =3D dev_to_genpd(dev); + } } =20 spin_unlock_irq(&dev->power.lock); =20 if (!IS_ERR(genpd)) { genpd_lock(genpd); - genpd->max_off_time_changed =3D true; + genpd->gd->max_off_time_changed =3D true; genpd_unlock(genpd); } =20 @@ -922,7 +923,7 @@ static int genpd_runtime_suspend(struct device *dev) td->suspend_latency_ns =3D elapsed_ns; dev_dbg(dev, "suspend latency exceeded, %lld ns\n", elapsed_ns); - genpd->max_off_time_changed =3D true; + genpd->gd->max_off_time_changed =3D true; td->constraint_changed =3D true; } } @@ -1002,7 +1003,7 @@ static int genpd_runtime_resume(struct device *dev) td->resume_latency_ns =3D elapsed_ns; dev_dbg(dev, "resume latency exceeded, %lld ns\n", elapsed_ns); - genpd->max_off_time_changed =3D true; + genpd->gd->max_off_time_changed =3D true; td->constraint_changed =3D true; } } @@ -1617,6 +1618,7 @@ static int genpd_get_cpu(struct generic_pm_domain *ge= npd, struct device *dev) static int genpd_add_device(struct generic_pm_domain *genpd, struct device= *dev, struct device *base_dev) { + struct genpd_governor_data *gd =3D genpd->gd; struct generic_pm_domain_data *gpd_data; int ret; =20 @@ -1625,7 +1627,7 @@ static int genpd_add_device(struct generic_pm_domain = *genpd, struct device *dev, if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(dev)) return -EINVAL; =20 - gpd_data =3D genpd_alloc_dev_data(dev, genpd->gov); + gpd_data =3D genpd_alloc_dev_data(dev, gd); if (IS_ERR(gpd_data)) return PTR_ERR(gpd_data); =20 @@ -1641,7 +1643,8 @@ static int genpd_add_device(struct generic_pm_domain = *genpd, struct device *dev, dev_pm_domain_set(dev, &genpd->domain); =20 genpd->device_count++; - genpd->max_off_time_changed =3D true; + if (gd) + gd->max_off_time_changed =3D true; =20 list_add_tail(&gpd_data->base.list_node, &genpd->dev_list); =20 @@ -1695,7 +1698,8 @@ static int genpd_remove_device(struct generic_pm_doma= in *genpd, } =20 genpd->device_count--; - genpd->max_off_time_changed =3D true; + if (genpd->gd) + genpd->gd->max_off_time_changed =3D true; =20 genpd_clear_cpumask(genpd, gpd_data->cpu); dev_pm_domain_set(dev, NULL); @@ -1970,12 +1974,25 @@ static int genpd_set_default_power_state(struct gen= eric_pm_domain *genpd) =20 static int genpd_alloc_data(struct generic_pm_domain *genpd) { + struct genpd_governor_data *gd =3D NULL; int ret; =20 if (genpd_is_cpu_domain(genpd) && !zalloc_cpumask_var(&genpd->cpus, GFP_KERNEL)) return -ENOMEM; =20 + if (genpd->gov) { + gd =3D kzalloc(sizeof(*gd), GFP_KERNEL); + if (!gd) { + ret =3D -ENOMEM; + goto free; + } + + gd->max_off_time_ns =3D -1; + gd->max_off_time_changed =3D true; + gd->next_wakeup =3D KTIME_MAX; + } + /* Use only one "off" state if there were no states declared */ if (genpd->state_count =3D=3D 0) { ret =3D genpd_set_default_power_state(genpd); @@ -1983,11 +2000,13 @@ static int genpd_alloc_data(struct generic_pm_domai= n *genpd) goto free; } =20 + genpd->gd =3D gd; return 0; =20 free: if (genpd_is_cpu_domain(genpd)) free_cpumask_var(genpd->cpus); + kfree(gd); return ret; } =20 @@ -1997,6 +2016,7 @@ static void genpd_free_data(struct generic_pm_domain = *genpd) free_cpumask_var(genpd->cpus); if (genpd->free_states) genpd->free_states(genpd->states, genpd->state_count); + kfree(genpd->gd); } =20 static void genpd_lock_init(struct generic_pm_domain *genpd) @@ -2036,9 +2056,6 @@ int pm_genpd_init(struct generic_pm_domain *genpd, atomic_set(&genpd->sd_count, 0); genpd->status =3D is_off ? GENPD_STATE_OFF : GENPD_STATE_ON; genpd->device_count =3D 0; - genpd->max_off_time_ns =3D -1; - genpd->max_off_time_changed =3D true; - genpd->next_wakeup =3D KTIME_MAX; genpd->provider =3D NULL; genpd->has_provider =3D false; genpd->accounting_time =3D ktime_get_mono_fast_ns(); diff --git a/drivers/base/power/domain_governor.c b/drivers/base/power/doma= in_governor.c index 599b3909821c..282a3a135827 100644 --- a/drivers/base/power/domain_governor.c +++ b/drivers/base/power/domain_governor.c @@ -146,19 +146,21 @@ static void update_domain_next_wakeup(struct generic_= pm_domain *genpd, ktime_t n } =20 list_for_each_entry(link, &genpd->parent_links, parent_node) { - next_wakeup =3D link->child->next_wakeup; + struct genpd_governor_data *cgd =3D link->child->gd; + + next_wakeup =3D cgd ? cgd->next_wakeup : KTIME_MAX; if (next_wakeup !=3D KTIME_MAX && !ktime_before(next_wakeup, now)) if (ktime_before(next_wakeup, domain_wakeup)) domain_wakeup =3D next_wakeup; } =20 - genpd->next_wakeup =3D domain_wakeup; + genpd->gd->next_wakeup =3D domain_wakeup; } =20 static bool next_wakeup_allows_state(struct generic_pm_domain *genpd, unsigned int state, ktime_t now) { - ktime_t domain_wakeup =3D genpd->next_wakeup; + ktime_t domain_wakeup =3D genpd->gd->next_wakeup; s64 idle_time_ns, min_sleep_ns; =20 min_sleep_ns =3D genpd->states[state].power_off_latency_ns + @@ -188,8 +190,9 @@ static bool __default_power_down_ok(struct dev_pm_domai= n *pd, * All subdomains have been powered off already at this point. */ list_for_each_entry(link, &genpd->parent_links, parent_node) { - struct generic_pm_domain *sd =3D link->child; - s64 sd_max_off_ns =3D sd->max_off_time_ns; + struct genpd_governor_data *cgd =3D link->child->gd; + + s64 sd_max_off_ns =3D cgd ? cgd->max_off_time_ns : -1; =20 if (sd_max_off_ns < 0) continue; @@ -247,7 +250,7 @@ static bool __default_power_down_ok(struct dev_pm_domai= n *pd, * time and the time needed to turn the domain on is the maximum * theoretical time this domain can spend in the "off" state. */ - genpd->max_off_time_ns =3D min_off_time_ns - + genpd->gd->max_off_time_ns =3D min_off_time_ns - genpd->states[state].power_on_latency_ns; return true; } @@ -262,6 +265,7 @@ static bool __default_power_down_ok(struct dev_pm_domai= n *pd, static bool _default_power_down_ok(struct dev_pm_domain *pd, ktime_t now) { struct generic_pm_domain *genpd =3D pd_to_genpd(pd); + struct genpd_governor_data *gd =3D genpd->gd; int state_idx =3D genpd->state_count - 1; struct gpd_link *link; =20 @@ -272,11 +276,11 @@ static bool _default_power_down_ok(struct dev_pm_doma= in *pd, ktime_t now) * cannot be met. */ update_domain_next_wakeup(genpd, now); - if ((genpd->flags & GENPD_FLAG_MIN_RESIDENCY) && (genpd->next_wakeup !=3D= KTIME_MAX)) { + if ((genpd->flags & GENPD_FLAG_MIN_RESIDENCY) && (gd->next_wakeup !=3D KT= IME_MAX)) { /* Let's find out the deepest domain idle state, the devices prefer */ while (state_idx >=3D 0) { if (next_wakeup_allows_state(genpd, state_idx, now)) { - genpd->max_off_time_changed =3D true; + gd->max_off_time_changed =3D true; break; } state_idx--; @@ -284,14 +288,14 @@ static bool _default_power_down_ok(struct dev_pm_doma= in *pd, ktime_t now) =20 if (state_idx < 0) { state_idx =3D 0; - genpd->cached_power_down_ok =3D false; + gd->cached_power_down_ok =3D false; goto done; } } =20 - if (!genpd->max_off_time_changed) { - genpd->state_idx =3D genpd->cached_power_down_state_idx; - return genpd->cached_power_down_ok; + if (!gd->max_off_time_changed) { + genpd->state_idx =3D gd->cached_power_down_state_idx; + return gd->cached_power_down_ok; } =20 /* @@ -300,12 +304,16 @@ static bool _default_power_down_ok(struct dev_pm_doma= in *pd, ktime_t now) * going to be called for any parent until this instance * returns. */ - list_for_each_entry(link, &genpd->child_links, child_node) - link->parent->max_off_time_changed =3D true; + list_for_each_entry(link, &genpd->child_links, child_node) { + struct genpd_governor_data *pgd =3D link->parent->gd; + + if (pgd) + pgd->max_off_time_changed =3D true; + } =20 - genpd->max_off_time_ns =3D -1; - genpd->max_off_time_changed =3D false; - genpd->cached_power_down_ok =3D true; + gd->max_off_time_ns =3D -1; + gd->max_off_time_changed =3D false; + gd->cached_power_down_ok =3D true; =20 /* * Find a state to power down to, starting from the state @@ -313,7 +321,7 @@ static bool _default_power_down_ok(struct dev_pm_domain= *pd, ktime_t now) */ while (!__default_power_down_ok(pd, state_idx)) { if (state_idx =3D=3D 0) { - genpd->cached_power_down_ok =3D false; + gd->cached_power_down_ok =3D false; break; } state_idx--; @@ -321,8 +329,8 @@ static bool _default_power_down_ok(struct dev_pm_domain= *pd, ktime_t now) =20 done: genpd->state_idx =3D state_idx; - genpd->cached_power_down_state_idx =3D genpd->state_idx; - return genpd->cached_power_down_ok; + gd->cached_power_down_state_idx =3D genpd->state_idx; + return gd->cached_power_down_ok; } =20 static bool default_power_down_ok(struct dev_pm_domain *pd) diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index 1f370f074f30..ebc351698090 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -91,6 +91,14 @@ struct gpd_dev_ops { int (*stop)(struct device *dev); }; =20 +struct genpd_governor_data { + s64 max_off_time_ns; + bool max_off_time_changed; + ktime_t next_wakeup; + bool cached_power_down_ok; + bool cached_power_down_state_idx; +}; + struct genpd_power_state { s64 power_off_latency_ns; s64 power_on_latency_ns; @@ -114,6 +122,7 @@ struct generic_pm_domain { struct list_head child_links; /* Links with PM domain as a child */ struct list_head dev_list; /* List of devices */ struct dev_power_governor *gov; + struct genpd_governor_data *gd; /* Data used by a genpd governor. */ struct work_struct power_off_work; struct fwnode_handle *provider; /* Identity of the domain provider */ bool has_provider; @@ -134,11 +143,6 @@ struct generic_pm_domain { int (*set_performance_state)(struct generic_pm_domain *genpd, unsigned int state); struct gpd_dev_ops dev_ops; - s64 max_off_time_ns; /* Maximum allowed "suspended" time. */ - ktime_t next_wakeup; /* Maintained by the domain governor */ - bool max_off_time_changed; - bool cached_power_down_ok; - bool cached_power_down_state_idx; int (*attach_dev)(struct generic_pm_domain *domain, struct device *dev); void (*detach_dev)(struct generic_pm_domain *domain, --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B4635C433EF for ; Wed, 11 May 2022 14:59:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245466AbiEKO7B (ORCPT ); Wed, 11 May 2022 10:59:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36024 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245377AbiEKO5o (ORCPT ); Wed, 11 May 2022 10:57:44 -0400 Received: from mail-lf1-x12d.google.com (mail-lf1-x12d.google.com [IPv6:2a00:1450:4864:20::12d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F2BB56AA54 for ; Wed, 11 May 2022 07:57:42 -0700 (PDT) Received: by mail-lf1-x12d.google.com with SMTP id j4so4030291lfh.8 for ; Wed, 11 May 2022 07:57:42 -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 :mime-version:content-transfer-encoding; bh=wm0nSY0tUggN6kcNzdaUXf+PYrABsccvOtQau2Ce9iQ=; b=WQtq5qfYkLwVtGKAcl9QF1e5Pr8UIw3GYZ58KZoTRibMv5wSoX0SUfJS+o3HfCsJPG tRK9mXg48ZI6JzeY0m2xpWbo6wBs/K/zoS49qwOnms03hOPGJd6OZzzCw2gMqWH5vqmY vRp+5a+S+CZh21KgW3Nw8LIauUwfaWNxkUlbe60XWltx7jandBZW4NAFt/W9v6brov39 YJ5j/9/l9ce0EzqirfhoEG07KESvaBVSgWo/j3QlYv1ezdxEZOw5cdKqz79VMY58eIhL h/wTSbaZRPoDwsbDMTyhdFzKXWZ6SZImJo6b59RjOql2MMjyH/QvTLvm7WtmGOQVeLoh BuMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wm0nSY0tUggN6kcNzdaUXf+PYrABsccvOtQau2Ce9iQ=; b=lwDXdXgoGFA+wEi58j0RtYcV+p5VJ0qolPp5AWqYEoQEnDKRQq1k4MeQBXdA4NnBZb i3XcW4beQW9FptkhPtUxSGOstW99b5YUae5PproP6Us+zX2Yuet7XmwrcKSPv6djA17I GemmAr2PSbO7jfoWkrbLLpXAqFKAOEmQ8L3+6/e83M+e5oObd4NTehkBBfCYbGb/S3+8 suUWpbWG8rXMYYtDAUcmhSOPjC0Tpiz6UprcMLHDnZiGWCIXxRGty21kJ8z37fToDSJt scqdhtz5g5Bg7WuZ5RB2YU/qLaY1jr5k9tV7s0QsBJWi0+aBB2cPZv6V/FTe8YtvIJXU QA2g== X-Gm-Message-State: AOAM532YXi87e3q5a/8zNWNVrTt4nXQYFteWYYWXNGPMg/rqp5AFej/Z R0ozdNOWN93mtVOYY0WtPLO26w== X-Google-Smtp-Source: ABdhPJwdyvaKZNp8WowmGL6vZ5f9jKJU+XH0dBAIFAYhbjyLPuTOl6U9uoiXJcg0+r2v8LKzMOg75w== X-Received: by 2002:a05:6512:1148:b0:448:39c8:89d with SMTP id m8-20020a056512114800b0044839c8089dmr20435225lfg.644.1652281061305; Wed, 11 May 2022 07:57:41 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:40 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 13/14] PM: domains: Measure power-on/off latencies in genpd based on a governor Date: Wed, 11 May 2022 16:57:03 +0200 Message-Id: <20220511145704.698189-14-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The measurements of the power-on|off latencies in genpd for a PM domain are superfluous, unless the corresponding genpd has a governor assigned to it, which would make use of the data. Therefore, let's improve the behaviour in genpd by making the measurements conditional, based upon if there's a governor assigned. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index a7de5fb8f073..83b073cdd0ed 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -509,6 +509,7 @@ static int _genpd_power_on(struct generic_pm_domain *ge= npd, bool timed) if (!genpd->power_on) goto out; =20 + timed =3D timed && genpd->gd; if (!timed) { ret =3D genpd->power_on(genpd); if (ret) @@ -527,8 +528,7 @@ static int _genpd_power_on(struct generic_pm_domain *ge= npd, bool timed) goto out; =20 genpd->states[state_idx].power_on_latency_ns =3D elapsed_ns; - if (genpd->gd) - genpd->gd->max_off_time_changed =3D true; + genpd->gd->max_off_time_changed =3D true; pr_debug("%s: Power-%s latency exceeded, new value %lld ns\n", genpd->name, "on", elapsed_ns); =20 @@ -559,6 +559,7 @@ static int _genpd_power_off(struct generic_pm_domain *g= enpd, bool timed) if (!genpd->power_off) goto out; =20 + timed =3D timed && genpd->gd; if (!timed) { ret =3D genpd->power_off(genpd); if (ret) @@ -577,8 +578,7 @@ static int _genpd_power_off(struct generic_pm_domain *g= enpd, bool timed) goto out; =20 genpd->states[state_idx].power_off_latency_ns =3D elapsed_ns; - if (genpd->gd) - genpd->gd->max_off_time_changed =3D true; + genpd->gd->max_off_time_changed =3D true; pr_debug("%s: Power-%s latency exceeded, new value %lld ns\n", genpd->name, "off", elapsed_ns); =20 --=20 2.25.1 From nobody Fri May 8 03:49:02 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92CD1C433EF for ; Wed, 11 May 2022 14:58:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235580AbiEKO6s (ORCPT ); Wed, 11 May 2022 10:58:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38084 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245304AbiEKO6D (ORCPT ); Wed, 11 May 2022 10:58:03 -0400 Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [IPv6:2a00:1450:4864:20::132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A09A320CDB6 for ; Wed, 11 May 2022 07:57:44 -0700 (PDT) Received: by mail-lf1-x132.google.com with SMTP id p10so3998974lfa.12 for ; Wed, 11 May 2022 07:57:44 -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 :mime-version:content-transfer-encoding; bh=wv5aQMBAxBfpngf2CFgjlzhePq/PDlQSq4BZ2y0GyjQ=; b=vwy2lOw+NliBdDqJ2qvuijVd49v40ghLG0Mvlzr8AaDDNcn+acXzxrly2p2jGKidRb oJcm24/fTEANOqm7ymPn+cKYJooUA+WDJPEZf7n8GnADoEzNClh+pTsXt9PHXDfIVYZ+ QiW+6KZBz4SDv2SHgW3aL8+wxCbcnNbqHJHiTZ18skfIbro7M5ac7TIFTxazdsTaxe4b 4hMr3VeW77m6LDyNoJyk+fhrRtx7cdRnGefI03hFpaiHCW+oJVIpMQwwaS/hbokGnmYN asu77j2ZURl1LVJltcjfCOgTwEBmuz12h6haXFBCI32qIV2xg0mNN7llwWH6mgo8Hm8X 9xIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wv5aQMBAxBfpngf2CFgjlzhePq/PDlQSq4BZ2y0GyjQ=; b=MdsQe7xhNat8BIeIeimz+OuikX7UPvg7OK50rAz9u5FvWIcGonNavX+duByHKsQKam 5NwUS4M8/pVLgbEjWPWylGWDbEIbg/XPeiY1Iyd0ubPGe/LNP1U+sz9z6csiVX1MfMRS KgntwcEFOAN3rXv3NSxbmq418uIPxpGG3E8x5sI8thwLFGWdXsUztXICPIG7KsBwOJsW R+KlDXGHYemkSVTbnb7vapNsfEAm7NDwLl+CQrnrjkAGDJjyvpUlKRFetLxlxtj7uOxC B2qxJhQN/iaAEevOEnB61qE+AYFpL1SV2UjN4LNXmQfHiSGYC5UAazUr5xHkPC+876Lu TncA== X-Gm-Message-State: AOAM5337MvPhlduymxQ4nb5h9L5/paC1U1lDCAyUzGZ/lP1A54qztX4m NOyL5vQG0/lobsTrhvg9Q+PqKg== X-Google-Smtp-Source: ABdhPJy/oJFXB8+xSdJ7QKJVgYpBHlpWxmBXHjr1zKTaRNPN1cMQ1B78Euzg49d3k6IqUBXHffHbGw== X-Received: by 2002:a05:6512:1086:b0:473:e8ad:c923 with SMTP id j6-20020a056512108600b00473e8adc923mr20855798lfg.463.1652281063022; Wed, 11 May 2022 07:57:43 -0700 (PDT) Received: from localhost.localdomain (h-98-128-181-154.NA.cust.bahnhof.se. [98.128.181.154]) by smtp.gmail.com with ESMTPSA id z26-20020a19f71a000000b0047255d210f3sm320793lfe.34.2022.05.11.07.57.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 May 2022 07:57:42 -0700 (PDT) From: Ulf Hansson To: "Rafael J . Wysocki" , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Geert Uytterhoeven , Maulik Shah , Gabriel Fernandez , Alexandre Torgue , Dmitry Osipenko , Kevin Hilman , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 14/14] PM: domains: Trust domain-idle-states from DT to be correct by genpd Date: Wed, 11 May 2022 16:57:04 +0200 Message-Id: <20220511145704.698189-15-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220511145704.698189-1-ulf.hansson@linaro.org> References: <20220511145704.698189-1-ulf.hansson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" If genpd has parsed the domain-idle-states from DT, it's reasonable to believe that the parsed data should be correct for the HW in question. Based upon this, it seem superfluous to let genpd measure the corresponding power-on/off latencies for these states. Therefore, let's improve the behaviour in genpd by avoiding the measurements for the domain-idle-states that have been parsed from DT. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 83b073cdd0ed..739e52cd4aba 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -509,7 +509,7 @@ static int _genpd_power_on(struct generic_pm_domain *ge= npd, bool timed) if (!genpd->power_on) goto out; =20 - timed =3D timed && genpd->gd; + timed =3D timed && genpd->gd && !genpd->states[state_idx].fwnode; if (!timed) { ret =3D genpd->power_on(genpd); if (ret) @@ -559,7 +559,7 @@ static int _genpd_power_off(struct generic_pm_domain *g= enpd, bool timed) if (!genpd->power_off) goto out; =20 - timed =3D timed && genpd->gd; + timed =3D timed && genpd->gd && !genpd->states[state_idx].fwnode; if (!timed) { ret =3D genpd->power_off(genpd); if (ret) --=20 2.25.1