Received: by 2002:a05:7412:b995:b0:f9:9502:5bb8 with SMTP id it21csp7845553rdb; Thu, 4 Jan 2024 09:21:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IGI4BDlXRfaLZcsfXgPlcIL2PsNurcMvZprXupHSTSp4zVAGrXUGpWGTVGLRrBZ6K5d5k56 X-Received: by 2002:ac8:578d:0:b0:429:736f:26e0 with SMTP id v13-20020ac8578d000000b00429736f26e0mr665681qta.67.1704388867637; Thu, 04 Jan 2024 09:21:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704388867; cv=none; d=google.com; s=arc-20160816; b=OHcWNop7CdoBeEcNiXlNRekADdwJ/jMpvV8onF22RALEk7KWFvJT5DnzzimEZcxuOo jCZjjmWp6mk7NXBclgiuIyRm7cX0M88Un0gXBdeya6i4UNJY3vIm85NzYbXl8hyLHTv/ nneCaWQvZ6MdSSpE10wf1I8WVeZ9jG5Lhzt6zQVvDn5FhrgJjooBA8ELdd2pSyUlxSWc pjDHhZFj6TVAWEzWeoYa4wkdvyL2e6MiZjUr0rOA5UElBgIcGErzItfNhT5paJU+JoMb RijGVvqjcnpz5d32CHPn5fwX+hUPtNuNArYOeIFfBL7l6vKPrRuQbMAT/3sKbS2aeRy1 hAXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=Hee0AAJLr+gya8++cWdj24mnZcQ/akFdRw6pgIZIUn4=; fh=jF+j1UEDAwnYbShW3HmO1TshMsWh36Jt7pSLTP62NeE=; b=xNJ8f6IH2xJtJmT2mzz8Au18OeJJuUaSwggveRP6O4pDGPjZnN21ERJEeeiBa12+hP xw3SQFpFJbXXcj7VqKaLi3YOGDAVKSHMYugcYvONUFSsKvkFTla5LXQuL5Eaz5F8PQgt N3JD/4aarpGCQBfxunut7EJKdNJArtVrS7xdxITEixL4K9D2Ae/zcrTGnaH0xEYX/AN6 3ySVAXiTBueaF18YWz1heLLyimI3P/a9AHpkTC2dwwL07g3hqk9QxjTH3Vo+wFITCw7d E0yBQe4kq1RNWO/ahJnv5rvlAH3mq6VlYUNZMx16cjn/+XDSlkPD9s3IausfCoC96RxI liTA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-17021-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-17021-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id d5-20020a05622a15c500b00427fb56584asi16165526qty.683.2024.01.04.09.21.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jan 2024 09:21:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-17021-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-17021-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-17021-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 644411C220E1 for ; Thu, 4 Jan 2024 17:21:07 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 702152C854; Thu, 4 Jan 2024 17:15:39 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C0DCE32193; Thu, 4 Jan 2024 17:15:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com 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 22A881576; Thu, 4 Jan 2024 09:16:23 -0800 (PST) Received: from e129166.arm.com (unknown [10.57.88.128]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id AE9A03F64C; Thu, 4 Jan 2024 09:15:34 -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 v6 17/23] powercap/dtpm_devfreq: Use new Energy Model interface to get table Date: Thu, 4 Jan 2024 17:15:47 +0000 Message-Id: <20240104171553.2080674-18-lukasz.luba@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240104171553.2080674-1-lukasz.luba@arm.com> References: <20240104171553.2080674-1-lukasz.luba@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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