Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp4496327rdh; Wed, 29 Nov 2023 03:12:57 -0800 (PST) X-Google-Smtp-Source: AGHT+IGAkIIfJfDI9CrctuA8y0/LQmxngyo+KC3lgKTbz/Hbqg4llwP87N6XBXCdNWp5LPOsG1Sr X-Received: by 2002:a05:6808:1898:b0:3b8:983f:4469 with SMTP id bi24-20020a056808189800b003b8983f4469mr1172636oib.8.1701256376931; Wed, 29 Nov 2023 03:12:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701256376; cv=none; d=google.com; s=arc-20160816; b=Oakj2caZsCjVlMQHrqFgTc+E7O5T24/2Wm+9qjdrdUutbhW8t+brjxcIyaqnTDDnqX c/0zNm02Yw//FHjZeMDfxTWIF9L2wK09eH1m22qoY03nQguwkA+yJolafYhq9Vf67V6V 1g8NmZ88DfeG5J9T1rfOxaNbPuSOHmVlq7cDZ19amblFfblHkzAY13hEkYZyJkrUGQZ3 AfCjK+LcgmVVvx0Il3VSI4o5GTgnNXpbjg3HpA4mk5zqgZYktwKle3RJed6WYJqho1c7 e5uvHuqGIJyVDfpHCLHAuvUJpTgOiVUCuNjOkIaSpsw/Lh6OjR+zNlmxRC8yZN94GeAm ImVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=Hee0AAJLr+gya8++cWdj24mnZcQ/akFdRw6pgIZIUn4=; fh=jF+j1UEDAwnYbShW3HmO1TshMsWh36Jt7pSLTP62NeE=; b=m5Ej2VKhC+BOMrmGxLWQM/H1+wb0SUK9lmBFeaqI09g4fzx0NGCf3QDUZbCG6ml+Og IbVnXl8mFrpXkrdQUcHjfb/e963vNDi+NcgXMwPEVZ1U8HBtWoWseAW2H/K5dRYwnKZ9 sa17KvNfGJbLCnYlKmCQBHxy+EaNdu/g2y4TJjBdzaHMSsvML9qRw4lRG5w60PV2S5wp 6LQt5WrtOZ7K3ROV0lweVsx99TcZ6K0tEYR7W2Rm7eU5JYfDd0Xet7XksZmJYUQeMzxS auSrduItdTcMHUzL3OgwFMKnDrCNo2M82B97yUrznMtDPyrzjvM06VPY5U80ILj6PtGB PL1Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id ka9-20020a056a00938900b00690bc2ac50asi14314252pfb.246.2023.11.29.03.12.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Nov 2023 03:12:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 65D87807F4B0; Wed, 29 Nov 2023 03:11:06 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231891AbjK2LKP (ORCPT + 99 others); Wed, 29 Nov 2023 06:10:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56046 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231875AbjK2LJf (ORCPT ); Wed, 29 Nov 2023 06:09:35 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id C52AA1BF9; Wed, 29 Nov 2023 03:08:47 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A1B982F4; Wed, 29 Nov 2023 03:09:34 -0800 (PST) Received: from e129166.arm.com (unknown [10.57.4.241]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 14FD73F5A1; Wed, 29 Nov 2023 03:08:44 -0800 (PST) From: Lukasz Luba To: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, rafael@kernel.org Cc: lukasz.luba@arm.com, dietmar.eggemann@arm.com, rui.zhang@intel.com, amit.kucheria@verdurent.com, amit.kachhap@gmail.com, daniel.lezcano@linaro.org, viresh.kumar@linaro.org, len.brown@intel.com, pavel@ucw.cz, mhiramat@kernel.org, qyousef@layalina.io, wvw@google.com Subject: [PATCH v5 17/23] powercap/dtpm_devfreq: Use new Energy Model interface to get table Date: Wed, 29 Nov 2023 11:08:47 +0000 Message-Id: <20231129110853.94344-18-lukasz.luba@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231129110853.94344-1-lukasz.luba@arm.com> References: <20231129110853.94344-1-lukasz.luba@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Wed, 29 Nov 2023 03:11:06 -0800 (PST) Energy Model framework support modifications at runtime of the power values. Use the new EM table API which is protected with RCU. Align the code so that this RCU read section is short. This change is not expected to alter the general functionality. Signed-off-by: Lukasz Luba --- drivers/powercap/dtpm_devfreq.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/drivers/powercap/dtpm_devfreq.c b/drivers/powercap/dtpm_devfreq.c index 612c3b59dd5b..514aa0d9d9c2 100644 --- a/drivers/powercap/dtpm_devfreq.c +++ b/drivers/powercap/dtpm_devfreq.c @@ -37,11 +37,15 @@ static int update_pd_power_uw(struct dtpm *dtpm) struct devfreq *devfreq = dtpm_devfreq->devfreq; struct device *dev = devfreq->dev.parent; struct em_perf_domain *pd = em_pd_get(dev); + struct em_perf_state *table; - dtpm->power_min = pd->table[0].power; + table = em_get_table(pd); - dtpm->power_max = pd->table[pd->nr_perf_states - 1].power; + dtpm->power_min = table[0].power; + dtpm->power_max = table[pd->nr_perf_states - 1].power; + + em_put_table(); return 0; } @@ -51,20 +55,22 @@ static u64 set_pd_power_limit(struct dtpm *dtpm, u64 power_limit) struct devfreq *devfreq = dtpm_devfreq->devfreq; struct device *dev = devfreq->dev.parent; struct em_perf_domain *pd = em_pd_get(dev); + struct em_perf_state *table; unsigned long freq; int i; + table = em_get_table(pd); for (i = 0; i < pd->nr_perf_states; i++) { - if (pd->table[i].power > power_limit) + if (table[i].power > power_limit) break; } - freq = pd->table[i - 1].frequency; + freq = table[i - 1].frequency; + power_limit = table[i - 1].power; + em_put_table(); dev_pm_qos_update_request(&dtpm_devfreq->qos_req, freq); - power_limit = pd->table[i - 1].power; - return power_limit; } @@ -89,8 +95,9 @@ static u64 get_pd_power_uw(struct dtpm *dtpm) struct device *dev = devfreq->dev.parent; struct em_perf_domain *pd = em_pd_get(dev); struct devfreq_dev_status status; + struct em_perf_state *table; unsigned long freq; - u64 power; + u64 power = 0; int i; mutex_lock(&devfreq->lock); @@ -100,19 +107,21 @@ static u64 get_pd_power_uw(struct dtpm *dtpm) freq = DIV_ROUND_UP(status.current_frequency, HZ_PER_KHZ); _normalize_load(&status); + table = em_get_table(pd); for (i = 0; i < pd->nr_perf_states; i++) { - if (pd->table[i].frequency < freq) + if (table[i].frequency < freq) continue; - power = pd->table[i].power; + power = table[i].power; power *= status.busy_time; power >>= 10; - return power; + break; } + em_put_table(); - return 0; + return power; } static void pd_release(struct dtpm *dtpm) -- 2.25.1