From patchwork Wed Dec 6 11:31:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Luba X-Patchwork-Id: 174521 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp4039902vqy; Wed, 6 Dec 2023 03:31:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IHRhFBPigyx/5cbj4krK7tgYP4c9adqd7qJjnU7GMUyuJ1U96gTzRy71cL0KKBUHF1s1GdB X-Received: by 2002:a17:902:c38c:b0:1cf:c376:6d7f with SMTP id g12-20020a170902c38c00b001cfc3766d7fmr715315plg.42.1701862267469; Wed, 06 Dec 2023 03:31:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701862267; cv=none; d=google.com; s=arc-20160816; b=Ea520GbNGQDvcAB9QYtcuqIS7bSU3XU/E52X1xdn/f2dUjVoFfZEz28FeUM4Rc/rTQ i26RZslQC5LQR+qsf9poLox4huzKc3MuF8R5XnsSyz7JfUu6ou7LHq0DCA8xRMOTu4fQ VG+NA+Kh6ctERjkCnk2Y9DpPz7BIw6up5AdYOfOFUwgrub4BN8ATR5Ifo+jj1Bu6kQZA mXH+JEy61XJaSYYheQ+C6ZtybHLZrSi23t1f9TcBeTR0fV6Ya+vXgZMA7vd2XHlrUdq/ bFMuDYnupt70lcjznB1RHwQMIZe0/exyUbtns5REAP9F0NCPeaKqK8Ei7QU+1K5fOWdF z+cQ== 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=6SQVp2ey+rT0aZntaXd93NUQv+c9/BZMbrjSeJR4NVY=; fh=8IgpUQ2T6XGOjA/qDosxdUSIIBz0a6nQ23NA8pgv1Tg=; b=F9DaFamlEw7xH5JobU/h4viSSm4GXohhVv1WB8Lyc2RlLIhXx7le2/iPdu/oiv6Fg2 DJk2/QceLq7binAUqizsoIDMumzQ2cHIaiLzv7si2YrFXfBmevV3vnhQTE23iHbQ7jFB 0+tli5+Y+nyBgOXf4+3CT6THSV0Kd6oi66fvSxLNpUR2fOdbc54T1cA+ZW2lnz2O0bE7 WAZLZdUdWrLle2rf6vtfs7pwADvUYc3ul4GsmHxWRQRMU3+Y18z/AbXCsv5KsEMyNC3D E3x2SccvdujavRU6LdA8eyjtQmrIRysSwJQk/G0cgUE9ywau6UBti3H7q5pj9wMrwyOU S5pA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 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 pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id w10-20020a170902a70a00b001d0050e2466si10933099plq.23.2023.12.06.03.31.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Dec 2023 03:31:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 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 pete.vger.email (Postfix) with ESMTP id 5E73581A8A86; Wed, 6 Dec 2023 03:31:01 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377618AbjLFLat (ORCPT + 99 others); Wed, 6 Dec 2023 06:30:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54712 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377687AbjLFLam (ORCPT ); Wed, 6 Dec 2023 06:30:42 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id D96DADE; Wed, 6 Dec 2023 03:30:45 -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 B8044150C; Wed, 6 Dec 2023 03:31:31 -0800 (PST) Received: from e129166.arm.com (unknown [10.57.1.114]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 762793F5A1; Wed, 6 Dec 2023 03:30:44 -0800 (PST) From: Lukasz Luba To: linux-kernel@vger.kernel.org, daniel.lezcano@linaro.org, rafael@kernel.org Cc: linux-pm@vger.kernel.org, rui.zhang@intel.com, lukasz.luba@arm.com Subject: [PATCH 1/5] thermal: core: Add callback for governors with cooling instances change Date: Wed, 6 Dec 2023 11:31:34 +0000 Message-Id: <20231206113138.3576492-2-lukasz.luba@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231206113138.3576492-1-lukasz.luba@arm.com> References: <20231206113138.3576492-1-lukasz.luba@arm.com> MIME-Version: 1.0 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 pete.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 (pete.vger.email [0.0.0.0]); Wed, 06 Dec 2023 03:31:01 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784531929072777147 X-GMAIL-MSGID: 1784531929072777147 Allow governors to react to the changes in the cooling instances list. That makes possible to move memory allocations related to the number of cooling instances out of the throttle() callback. The throttle() callback is called much more often thus the cost of managing allocations there is an extra overhead. The list of cooling instances is not changed that often and it can be handled in dedicated callback. That will save CPU cycles in the throttle() code path. Both callbacks code paths are protected with the same thermal zone lock, which guaranties the list of cooling instances is consistent. Signed-off-by: Lukasz Luba --- drivers/thermal/thermal_core.c | 14 ++++++++++++++ include/linux/thermal.h | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index 625ba07cbe2f..c993b86f7fb5 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -314,6 +314,15 @@ static void handle_non_critical_trips(struct thermal_zone_device *tz, def_governor->throttle(tz, trip); } +static void handle_instances_list_update(struct thermal_zone_device *tz) +{ + + if (!tz->governor || !tz->governor->instances_update) + return; + + tz->governor->instances_update(tz); +} + void thermal_zone_device_critical(struct thermal_zone_device *tz) { /* @@ -723,6 +732,8 @@ int thermal_bind_cdev_to_trip(struct thermal_zone_device *tz, list_add_tail(&dev->tz_node, &tz->thermal_instances); list_add_tail(&dev->cdev_node, &cdev->thermal_instances); atomic_set(&tz->need_update, 1); + + handle_instances_list_update(tz); } mutex_unlock(&cdev->lock); mutex_unlock(&tz->lock); @@ -781,6 +792,9 @@ int thermal_unbind_cdev_from_trip(struct thermal_zone_device *tz, if (pos->tz == tz && pos->trip == trip && pos->cdev == cdev) { list_del(&pos->tz_node); list_del(&pos->cdev_node); + + handle_instances_list_update(tz); + mutex_unlock(&cdev->lock); mutex_unlock(&tz->lock); goto unbind; diff --git a/include/linux/thermal.h b/include/linux/thermal.h index c7190e2dfcb4..e7b2a1f4bab0 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h @@ -195,6 +195,9 @@ struct thermal_zone_device { * thermal zone. * @throttle: callback called for every trip point even if temperature is * below the trip point temperature + * @instances_update: callback called when thermal zone instances list + * i has changed (e.g. added new or removed), which + * may help to offload work for governor like allocations * @governor_list: node in thermal_governor_list (in thermal_core.c) */ struct thermal_governor { @@ -203,6 +206,7 @@ struct thermal_governor { void (*unbind_from_tz)(struct thermal_zone_device *tz); int (*throttle)(struct thermal_zone_device *tz, const struct thermal_trip *trip); + void (*instances_update)(struct thermal_zone_device *tz); struct list_head governor_list; }; From patchwork Wed Dec 6 11:31:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Luba X-Patchwork-Id: 174520 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp4039896vqy; Wed, 6 Dec 2023 03:31:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IEybNqmkNJwK68DOgqbHvEs5UpXfbhxtbhvO8WhfsvtInhgGiJh/PrEaIkpZzzIgcBLibvX X-Received: by 2002:a17:90b:1d86:b0:285:b08a:780d with SMTP id pf6-20020a17090b1d8600b00285b08a780dmr562741pjb.23.1701862266925; Wed, 06 Dec 2023 03:31:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701862266; cv=none; d=google.com; s=arc-20160816; b=OwWK3pyYMeNWC5Y33FzVy2lGW9SIsj3jhIeowvRAD5bOHV3Ew6lHTMZmtBkaqnUf1+ ydMnhG7U0JHahqDgFU0datNFnZevN8Dl1ABdlYCNNvZ0hvm15R8fA+MiQujlQNV+HlX8 gHOx9Z5S/MuKj7Ll01W0Ga/8vLitNIpmK9HiKfHidj8I1xRWskRWT8uL1KBlb82R8YpY nNBaRL8/gUEtM2azmxTI9DMdhLR3uTMOX7PHCC+AAocEsMZLNuR+AgPWkBK7XYF3Fw0h PgFDC07jJ+Hk0pcxIDXqiKEIIGet5JNVDlcGUF9fZfnjn/yiNTMIHc9uLSKZk/S2LOoa PraQ== 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=R0DMEV4+cUrAwHbGcteLj/PvnMGmiVqdVIaAxECQnII=; fh=8IgpUQ2T6XGOjA/qDosxdUSIIBz0a6nQ23NA8pgv1Tg=; b=Iux+DtwZOJglWxJfXyqcj32nRNQfMaax6rpwwarruQ03WpO1t+J6+fcyYn4I9Uol2Q DBUnMYwwCigo4gINUa6WI+Vaw74ixlRhzlxZPlGLE1wIrku9EPoZ0rezmkSOFBSGpQRx nyE9K2mzOA/SiVhT7CSrX7fGsT5zjgl/G4YmPVWfpZqxQUaFEZsdk5T1gtFyxFIEfXMD x1yxVvMWJHDs93YkCOSw51hRJTkBGFCOHfgFv7/Xgm8s5Yifpf0jdjk2sYvS1sHOv3x4 JgiaO8QaTpuaJUdsVh6BQSuAUlWWn8/pq8dlkm3YnPcMCo0H57iGrnnf3YrUN6Or3dxB 8jeA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 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 lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id i5-20020a17090a974500b00286b27599desi618672pjw.15.2023.12.06.03.31.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Dec 2023 03:31:06 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 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 lipwig.vger.email (Postfix) with ESMTP id CB04D802EEE1; Wed, 6 Dec 2023 03:31:01 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377684AbjLFLaw (ORCPT + 99 others); Wed, 6 Dec 2023 06:30:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54744 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377692AbjLFLam (ORCPT ); Wed, 6 Dec 2023 06:30:42 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 5E21ED4B; Wed, 6 Dec 2023 03:30: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 38AEF153B; Wed, 6 Dec 2023 03:31:33 -0800 (PST) Received: from e129166.arm.com (unknown [10.57.1.114]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id ECCE13F5A1; Wed, 6 Dec 2023 03:30:45 -0800 (PST) From: Lukasz Luba To: linux-kernel@vger.kernel.org, daniel.lezcano@linaro.org, rafael@kernel.org Cc: linux-pm@vger.kernel.org, rui.zhang@intel.com, lukasz.luba@arm.com Subject: [PATCH 2/5] thermal: gov_power_allocator: Refactor check_power_actors() Date: Wed, 6 Dec 2023 11:31:35 +0000 Message-Id: <20231206113138.3576492-3-lukasz.luba@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231206113138.3576492-1-lukasz.luba@arm.com> References: <20231206113138.3576492-1-lukasz.luba@arm.com> MIME-Version: 1.0 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 lipwig.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 (lipwig.vger.email [0.0.0.0]); Wed, 06 Dec 2023 03:31:02 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784531928705561116 X-GMAIL-MSGID: 1784531928705561116 Refactor check_power_actors() to make it possible for re-use in the upcoming new callback. No intentional functional impact. Signed-off-by: Lukasz Luba --- drivers/thermal/gov_power_allocator.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c index 785fff14223d..38e1e89ba10c 100644 --- a/drivers/thermal/gov_power_allocator.c +++ b/drivers/thermal/gov_power_allocator.c @@ -581,8 +581,9 @@ static void allow_maximum_power(struct thermal_zone_device *tz, bool update) * power actor API. The warning should help to investigate the issue, which * could be e.g. lack of Energy Model for a given device. * - * Return: 0 on success, -EINVAL if any cooling device does not implement - * the power actor API. + * Return number of cooling devices or -EINVAL if any cooling device does not + * implement the power actor API. Return value 0 is also valid since cooling + * devices might be attached later. */ static int check_power_actors(struct thermal_zone_device *tz, struct power_allocator_params *params) @@ -597,8 +598,9 @@ static int check_power_actors(struct thermal_zone_device *tz, if (!cdev_is_power_actor(instance->cdev)) { dev_warn(&tz->device, "power_allocator: %s is not a power actor\n", instance->cdev->type); - ret = -EINVAL; + return -EINVAL; } + ret++; } return ret; @@ -631,7 +633,7 @@ static int power_allocator_bind(struct thermal_zone_device *tz) } ret = check_power_actors(tz, params); - if (ret) { + if (ret < 0) { dev_warn(&tz->device, "power_allocator: binding failed\n"); kfree(params); return ret; From patchwork Wed Dec 6 11:31:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Luba X-Patchwork-Id: 174523 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp4040041vqy; Wed, 6 Dec 2023 03:31:22 -0800 (PST) X-Google-Smtp-Source: AGHT+IHPoAxFHHzM5R8YovQ3Qg5Qwf944u98E2yHFTaXYyP+wyYV9YBZgVQU4AB3llUhPfg7UT9D X-Received: by 2002:a17:903:32c5:b0:1d0:7535:8bc2 with SMTP id i5-20020a17090332c500b001d075358bc2mr766991plr.105.1701862282520; Wed, 06 Dec 2023 03:31:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701862282; cv=none; d=google.com; s=arc-20160816; b=R9O2JGGbJdGXGRS87+HyfE2q1q7zwNyet7HGBOYQ27sTrm/1SG3Ax/tN9kkN7WJ6v3 5uYtZukgELWeETl/sIeZMbY1nVkyq4d8XkiC8dM0wtqXIJpgUUzK+aiboWMZnlTda7RC hMkgFKebJL8DpqzNlzRRyqMbBA5VKXgHIgLs3gZ+ULGmiqwCJHRsvTn1IoBPs7gw2ujB sKQRdSNLdxJbJCSyDaXkCO+4PvH41htqFLmGOFSxEqsuljWyTScvv8QFWljWWYC6McMS yw+F6V0ZE0qmRhccYsaRUtjmhhmNYJd1+nlUqm6NmL1r7ErSQbG2PEw6V65D8u4d75R2 s2dg== 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=FXKFwXOaHOf8YaqCis3djT8PoMlfzODHreb2BePrpWY=; fh=8IgpUQ2T6XGOjA/qDosxdUSIIBz0a6nQ23NA8pgv1Tg=; b=0IZbTBem2tQSiIcYubZ1L207rXyjkvXd/60p7aNoOt/6JEXMymuWm/G4DttZeENbq4 C8DnL9pvRPhv+fUzH/mrRcVLGwlYnrmMoT4hNFbDQtFk0FonAqmzaAAsXkjf0K0hFCmD Ebqeq+KMqhaJCJcttdnn5cSC3sw8spf+GSDvbcx281jRGZ+osPvU2voq7fuCKyNG7OVb 7E7VzmIrxVKEkutIInXlQn8ZrlhyPlyJzB7rApY/YDoG5hhHtPbmrQku8zN6RlKCV0Oz l/tbqewtBXNIEMn5Lxx9l9yiC8kb1jvoi6HOoR9cTJBxAiTYt8GUe613u/7Oe9dLFiQW VtTQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 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 snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id d5-20020a170903230500b001cffd427123si11336242plh.311.2023.12.06.03.31.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Dec 2023 03:31:22 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 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 snail.vger.email (Postfix) with ESMTP id EEA6E802A875; Wed, 6 Dec 2023 03:31:06 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377694AbjLFLay (ORCPT + 99 others); Wed, 6 Dec 2023 06:30:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37622 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377577AbjLFLan (ORCPT ); Wed, 6 Dec 2023 06:30:43 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id CF0DCD3; Wed, 6 Dec 2023 03:30:48 -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 ABB1D1570; Wed, 6 Dec 2023 03:31:34 -0800 (PST) Received: from e129166.arm.com (unknown [10.57.1.114]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 6BE953F5A1; Wed, 6 Dec 2023 03:30:47 -0800 (PST) From: Lukasz Luba To: linux-kernel@vger.kernel.org, daniel.lezcano@linaro.org, rafael@kernel.org Cc: linux-pm@vger.kernel.org, rui.zhang@intel.com, lukasz.luba@arm.com Subject: [PATCH 3/5] thermal: gov_power_allocator: Move memory allocation out of throttle() Date: Wed, 6 Dec 2023 11:31:36 +0000 Message-Id: <20231206113138.3576492-4-lukasz.luba@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231206113138.3576492-1-lukasz.luba@arm.com> References: <20231206113138.3576492-1-lukasz.luba@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net 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 (snail.vger.email [0.0.0.0]); Wed, 06 Dec 2023 03:31:07 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784531944828010805 X-GMAIL-MSGID: 1784531944828010805 The new thermal callback allows to react to the change of cooling instances in the thermal zone. Move the memory allocation to that new callback and save CPU cycles in the throttle() code path. Signed-off-by: Lukasz Luba --- drivers/thermal/gov_power_allocator.c | 137 ++++++++++++++++++++------ 1 file changed, 106 insertions(+), 31 deletions(-) diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c index 38e1e89ba10c..1b55d00fc12b 100644 --- a/drivers/thermal/gov_power_allocator.c +++ b/drivers/thermal/gov_power_allocator.c @@ -61,6 +61,13 @@ static inline s64 div_frac(s64 x, s64 y) * @trip_switch_on should be NULL. * @trip_max: last passive trip point of the thermal zone. The * temperature we are controlling for. + * @num_actors: number of cooling devices supporting IPA callbacks + * @buffer_size: IPA internal buffer size + * @req_power: IPA buffer for requested power + * @max_power: IPA buffer for max allocatable power + * @granted_power: IPA buffer for granted power + * @extra_actor_power: IPA buffer for extra power + * @weighted_req_power: IPA buffer for weighted requested power */ struct power_allocator_params { bool allocated_tzp; @@ -69,6 +76,13 @@ struct power_allocator_params { u32 sustainable_power; const struct thermal_trip *trip_switch_on; const struct thermal_trip *trip_max; + int num_actors; + int buffer_size; + u32 *req_power; + u32 *max_power; + u32 *granted_power; + u32 *extra_actor_power; + u32 *weighted_req_power; }; /** @@ -387,39 +401,24 @@ static int allocate_power(struct thermal_zone_device *tz, int control_temp) u32 *weighted_req_power; u32 power_range, weight; int total_weight = 0; - int num_actors = 0; int i = 0; - list_for_each_entry(instance, &tz->thermal_instances, tz_node) { + if (!params->num_actors) + return -ENODEV; + + list_for_each_entry(instance, &tz->thermal_instances, tz_node) if ((instance->trip == params->trip_max) && - cdev_is_power_actor(instance->cdev)) { - num_actors++; + cdev_is_power_actor(instance->cdev)) total_weight += instance->weight; - } - } - - if (!num_actors) - return -ENODEV; - /* - * We need to allocate five arrays of the same size: - * req_power, max_power, granted_power, extra_actor_power and - * weighted_req_power. They are going to be needed until this - * function returns. Allocate them all in one go to simplify - * the allocation and deallocation logic. - */ - BUILD_BUG_ON(sizeof(*req_power) != sizeof(*max_power)); - BUILD_BUG_ON(sizeof(*req_power) != sizeof(*granted_power)); - BUILD_BUG_ON(sizeof(*req_power) != sizeof(*extra_actor_power)); - BUILD_BUG_ON(sizeof(*req_power) != sizeof(*weighted_req_power)); - req_power = kcalloc(num_actors * 5, sizeof(*req_power), GFP_KERNEL); - if (!req_power) - return -ENOMEM; + /* Clean all buffers for new power estimations */ + memset(params->req_power, 0, params->buffer_size); - max_power = &req_power[num_actors]; - granted_power = &req_power[2 * num_actors]; - extra_actor_power = &req_power[3 * num_actors]; - weighted_req_power = &req_power[4 * num_actors]; + req_power = params->req_power; + max_power = params->max_power; + granted_power = params->granted_power; + extra_actor_power = params->extra_actor_power; + weighted_req_power = params->weighted_req_power; list_for_each_entry(instance, &tz->thermal_instances, tz_node) { cdev = instance->cdev; @@ -453,7 +452,7 @@ static int allocate_power(struct thermal_zone_device *tz, int control_temp) power_range = pid_controller(tz, control_temp, max_allocatable_power); - divvy_up_power(weighted_req_power, max_power, num_actors, + divvy_up_power(weighted_req_power, max_power, params->num_actors, total_weighted_req_power, power_range, granted_power, extra_actor_power); @@ -474,12 +473,10 @@ static int allocate_power(struct thermal_zone_device *tz, int control_temp) trace_thermal_power_allocator(tz, req_power, total_req_power, granted_power, total_granted_power, - num_actors, power_range, + params->num_actors, power_range, max_allocatable_power, tz->temperature, control_temp - tz->temperature); - kfree(req_power); - return 0; } @@ -606,6 +603,74 @@ static int check_power_actors(struct thermal_zone_device *tz, return ret; } +static void _power_buffers_init(struct power_allocator_params *params, + u32 *req_power, u32 *max_power, + u32 *granted_power, u32 *extra_actor_power, + u32 *weighted_req_power) + +{ + /* Setup internal buffers for power calculations. */ + params->req_power = req_power; + params->max_power = max_power; + params->granted_power = granted_power; + params->extra_actor_power = extra_actor_power; + params->weighted_req_power = weighted_req_power; +} + +static int allocate_actors_buffer(struct power_allocator_params *params, + int num_actors) +{ + u32 *req_power; + int ret; + + kfree(params->req_power); + + /* There might be no cooling devices yet. */ + if (!num_actors) { + ret = -EINVAL; + goto clean_buffers; + } + + req_power = kcalloc(num_actors * 5, sizeof(u32), GFP_KERNEL); + if (!req_power) { + ret = -ENOMEM; + goto clean_buffers; + } + + params->num_actors = num_actors; + params->buffer_size = num_actors * 5 * sizeof(u32); + + _power_buffers_init(params, req_power, &req_power[params->num_actors], + &req_power[2 * params->num_actors], + &req_power[3 * params->num_actors], + &req_power[4 * params->num_actors]); + + return 0; + +clean_buffers: + params->num_actors = -EINVAL; + params->buffer_size = 0; + _power_buffers_init(params, NULL, NULL, NULL, NULL, NULL); + return ret; +} + +static void power_allocator_instances_update(struct thermal_zone_device *tz) +{ + struct power_allocator_params *params = tz->governor_data; + struct thermal_instance *instance; + int num_actors = 0; + + list_for_each_entry(instance, &tz->thermal_instances, tz_node) + if ((instance->trip == params->trip_max) && + cdev_is_power_actor(instance->cdev)) + num_actors++; + + if (num_actors == params->num_actors) + return; + + allocate_actors_buffer(params, num_actors); +} + /** * power_allocator_bind() - bind the power_allocator governor to a thermal zone * @tz: thermal zone to bind it to @@ -639,6 +704,13 @@ static int power_allocator_bind(struct thermal_zone_device *tz) return ret; } + ret = allocate_actors_buffer(params, ret); + if (ret) { + dev_warn(&tz->device, "power_allocator: allocation failed\n"); + kfree(params); + return ret; + } + if (!tz->tzp) { tz->tzp = kzalloc(sizeof(*tz->tzp), GFP_KERNEL); if (!tz->tzp) { @@ -663,6 +735,7 @@ static int power_allocator_bind(struct thermal_zone_device *tz) return 0; free_params: + kfree(params->req_power); kfree(params); return ret; @@ -679,6 +752,7 @@ static void power_allocator_unbind(struct thermal_zone_device *tz) tz->tzp = NULL; } + kfree(params->req_power); kfree(tz->governor_data); tz->governor_data = NULL; } @@ -717,5 +791,6 @@ static struct thermal_governor thermal_gov_power_allocator = { .bind_to_tz = power_allocator_bind, .unbind_from_tz = power_allocator_unbind, .throttle = power_allocator_throttle, + .instances_update = power_allocator_instances_update, }; THERMAL_GOVERNOR_DECLARE(thermal_gov_power_allocator); From patchwork Wed Dec 6 11:31:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Luba X-Patchwork-Id: 174522 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp4039980vqy; Wed, 6 Dec 2023 03:31:17 -0800 (PST) X-Google-Smtp-Source: AGHT+IGZ5hNAEvTJtMr7psdzTFrJeXL9URWSU+bKCvTVQzZXKT6abTvBPMMVKczkU1ouLUCQSPO+ X-Received: by 2002:a17:90a:c690:b0:286:9734:ba98 with SMTP id n16-20020a17090ac69000b002869734ba98mr471634pjt.53.1701862276923; Wed, 06 Dec 2023 03:31:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701862276; cv=none; d=google.com; s=arc-20160816; b=yLIzGEZsbTXyRUvHSiSYGgXkLQvZ64gu30edcrHYmi1Yhum6cyAnhlz74xXCEtMciq 3hWPKCPUfOnhDVIXx5TWQ8M62JnQyZPE4bFxuySvIC353eTr8dkEJuQbkMC2DsQxpj/t WzQm/Rv+yrvmbP9tQvVLoVZdEqtAEkCSAxYMMmarsQ7tDiL07YvCL3plF9ZBeRspUFQb XaBsT4wceFe+IFDM+WepNY4HlGYT4uhzMXxmfCbMuKrkyFUX5cvddW3DLkVof9gEN2nr nHyliUz5LIWW56tlXY0q9DPxBEWeR9SYbZFLE01wCxTgI0fatMun//Dc/0DpXybFU+eP ZRSA== 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=LsN4aPG3Pf89eb6LgMAFkb+QZnSDjkYbzk/bHRl+RW4=; fh=8IgpUQ2T6XGOjA/qDosxdUSIIBz0a6nQ23NA8pgv1Tg=; b=dO49vIVQJzUpUoNp9lqGp8XCl0V0ftXvKmPgOApv4j57IbWytJ4QuHcHbN62knh+Ql C7EbJ1SC8ANteJQrmBT7zHsgAIRH5bG9XfoznupMPD8nFWV6kCemhW+nj7DvnxHSSmch sVnSKuogE9SEIzHGaJNfnn3SXWxfkXJa6Igl4dvMH/NZhkMAxzXi4Y4h+SXvVJnLRJco BozHywUYUXRbxncMvTRiFEfqAAnIVkjoQEAaWiPx6L5H9mb9Wc5b4XnJaTwDaZ+D5QrB R8pfj/IU3uYuz7lZEs/u0BMPIIABL80BbVuWQTu0inJTLB7V+vE5mBykVr5TWjuRLdYp NAwA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 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 pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id l18-20020a170903245200b001d0d312bc13si1735121pls.401.2023.12.06.03.31.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Dec 2023 03:31:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 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 pete.vger.email (Postfix) with ESMTP id 8C49A81A8A9B; Wed, 6 Dec 2023 03:31:12 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377705AbjLFLa5 (ORCPT + 99 others); Wed, 6 Dec 2023 06:30:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54776 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377585AbjLFLao (ORCPT ); Wed, 6 Dec 2023 06:30:44 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 62AE7D42; Wed, 6 Dec 2023 03:30:50 -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 2B402C15; Wed, 6 Dec 2023 03:31:36 -0800 (PST) Received: from e129166.arm.com (unknown [10.57.1.114]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id E01B03F5A1; Wed, 6 Dec 2023 03:30:48 -0800 (PST) From: Lukasz Luba To: linux-kernel@vger.kernel.org, daniel.lezcano@linaro.org, rafael@kernel.org Cc: linux-pm@vger.kernel.org, rui.zhang@intel.com, lukasz.luba@arm.com Subject: [PATCH 4/5] thermal: gov_power_allocator: Simplify checks for valid power actor Date: Wed, 6 Dec 2023 11:31:37 +0000 Message-Id: <20231206113138.3576492-5-lukasz.luba@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231206113138.3576492-1-lukasz.luba@arm.com> References: <20231206113138.3576492-1-lukasz.luba@arm.com> MIME-Version: 1.0 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 pete.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 (pete.vger.email [0.0.0.0]); Wed, 06 Dec 2023 03:31:12 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784531938733053880 X-GMAIL-MSGID: 1784531938733053880 There is a need to check if the cooling device in the thermal zone supports IPA callback and is set for control trip point. Refactor the code which validates the power actor capabilities and make it more consistent in all places. No intentional functional impact. Signed-off-by: Lukasz Luba --- drivers/thermal/gov_power_allocator.c | 41 +++++++++++---------------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c index 1b55d00fc12b..8f2d2ee3def0 100644 --- a/drivers/thermal/gov_power_allocator.c +++ b/drivers/thermal/gov_power_allocator.c @@ -85,6 +85,13 @@ struct power_allocator_params { u32 *weighted_req_power; }; +static bool power_actor_is_valid(struct power_allocator_params *params, + struct thermal_instance *instance) +{ + return ((instance->trip == params->trip_max) && + cdev_is_power_actor(instance->cdev)); +} + /** * estimate_sustainable_power() - Estimate the sustainable power of a thermal zone * @tz: thermal zone we are operating in @@ -105,14 +112,10 @@ static u32 estimate_sustainable_power(struct thermal_zone_device *tz) u32 min_power; list_for_each_entry(instance, &tz->thermal_instances, tz_node) { - cdev = instance->cdev; - - if (instance->trip != params->trip_max) - continue; - - if (!cdev_is_power_actor(cdev)) + if (!power_actor_is_valid(params, instance)) continue; + cdev = instance->cdev; if (cdev->ops->state2power(cdev, instance->upper, &min_power)) continue; @@ -407,8 +410,7 @@ static int allocate_power(struct thermal_zone_device *tz, int control_temp) return -ENODEV; list_for_each_entry(instance, &tz->thermal_instances, tz_node) - if ((instance->trip == params->trip_max) && - cdev_is_power_actor(instance->cdev)) + if (power_actor_is_valid(params, instance)) total_weight += instance->weight; /* Clean all buffers for new power estimations */ @@ -421,14 +423,10 @@ static int allocate_power(struct thermal_zone_device *tz, int control_temp) weighted_req_power = params->weighted_req_power; list_for_each_entry(instance, &tz->thermal_instances, tz_node) { - cdev = instance->cdev; - - if (instance->trip != params->trip_max) - continue; - - if (!cdev_is_power_actor(cdev)) + if (!power_actor_is_valid(params, instance)) continue; + cdev = instance->cdev; if (cdev->ops->get_requested_power(cdev, &req_power[i])) continue; @@ -458,10 +456,7 @@ static int allocate_power(struct thermal_zone_device *tz, int control_temp) i = 0; list_for_each_entry(instance, &tz->thermal_instances, tz_node) { - if (instance->trip != params->trip_max) - continue; - - if (!cdev_is_power_actor(instance->cdev)) + if (!power_actor_is_valid(params, instance)) continue; power_actor_set_power(instance->cdev, instance, @@ -546,12 +541,11 @@ static void allow_maximum_power(struct thermal_zone_device *tz, bool update) u32 req_power; list_for_each_entry(instance, &tz->thermal_instances, tz_node) { - cdev = instance->cdev; - - if (instance->trip != params->trip_max || - !cdev_is_power_actor(instance->cdev)) + if (!power_actor_is_valid(params, instance)) continue; + cdev = instance->cdev; + instance->target = 0; mutex_lock(&cdev->lock); /* @@ -661,8 +655,7 @@ static void power_allocator_instances_update(struct thermal_zone_device *tz) int num_actors = 0; list_for_each_entry(instance, &tz->thermal_instances, tz_node) - if ((instance->trip == params->trip_max) && - cdev_is_power_actor(instance->cdev)) + if (power_actor_is_valid(params, instance)) num_actors++; if (num_actors == params->num_actors) From patchwork Wed Dec 6 11:31:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukasz Luba X-Patchwork-Id: 174524 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp4040048vqy; Wed, 6 Dec 2023 03:31:23 -0800 (PST) X-Google-Smtp-Source: AGHT+IHTgQoyw1KneWYb4zhQ4i71r2ssIaPIUoGqQysRHpCQWff7WaN3StLKadUfd3Q8Df8aALtw X-Received: by 2002:a05:6a20:be9c:b0:18f:97c:5ba5 with SMTP id gf28-20020a056a20be9c00b0018f097c5ba5mr275101pzb.115.1701862282855; Wed, 06 Dec 2023 03:31:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701862282; cv=none; d=google.com; s=arc-20160816; b=TjFimejeFEzQ4W+qzXLWtMKh9NtovZ80r9QB6hWRPDtNsIh6T4iYO9z+mkmyG2c/HY ul2aMphZHxPj2Ne6PhiCNKjUghHSd3eY0Pa1Z7B8HxmzGUPE+AgOS60G/8G/17UHwLhy 04E3koXNjmUQkl68yUU+zpDiP3Dsgbu9UHCJUUL6qfJZwSQSgaU/9bXeu3HMngh3AFh8 i8b85cZju+jmweFjtiNcKSacV+GXgGDb2DHrFiYoGI46+4RfjHavrXlZRaTFBvJodP6C H8yelujhzo9gLr7AIxjIL6QfJsRtfesWsMEJyEgRkAEndLqJp8If+XDWaBpFVnEDgUVN b/ig== 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=sUr6/8rEIdXpDQf4IxS7mLSkdX6OFLK5rvdOCU9eSmM=; fh=8IgpUQ2T6XGOjA/qDosxdUSIIBz0a6nQ23NA8pgv1Tg=; b=M1WND3VulhRWVSfgjQXroRi8F8x9kd4XUN8/scfpi6Pv6SXIFTUzeXmXHj/dh0QJC+ v9QcrsdyDmwmUeWxkEvqyqjYxcvmJLDEKUgUzuNHQIuCGCDLTHkJ8FiQyVLuKQyqAXbl i1s60OYgv9C53EoNiwvVDw15Aux+Jhwkwyg1c9bmraQMPZQmbPtdGsBrtKhNs/kc9TMP nz2EXPSPNkKBaP0kjLVfLg6zn31bIGQKW+kaCb0mTDJhYLf+ys8o8CCgLICwml4JgIFX a1QNXvm4vYwtle+Jk9VJiE4enjcKRsOkOVCVhXKi5Q1MeJ3Lc4TMjVl8WroKwZ8NdYRT BKog== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 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 snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id u18-20020a170902e5d200b001d0087bbf19si3748819plf.440.2023.12.06.03.31.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Dec 2023 03:31:22 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 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 snail.vger.email (Postfix) with ESMTP id CD0B0802A819; Wed, 6 Dec 2023 03:31:12 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377722AbjLFLbA (ORCPT + 99 others); Wed, 6 Dec 2023 06:31:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54776 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377613AbjLFLap (ORCPT ); Wed, 6 Dec 2023 06:30:45 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id CD59E137; Wed, 6 Dec 2023 03:30:51 -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 9EC1B150C; Wed, 6 Dec 2023 03:31:37 -0800 (PST) Received: from e129166.arm.com (unknown [10.57.1.114]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 5E7873F5A1; Wed, 6 Dec 2023 03:30:50 -0800 (PST) From: Lukasz Luba To: linux-kernel@vger.kernel.org, daniel.lezcano@linaro.org, rafael@kernel.org Cc: linux-pm@vger.kernel.org, rui.zhang@intel.com, lukasz.luba@arm.com Subject: [PATCH 5/5] thermal: gov_power_allocator: Refactor checks in divvy_up_power() Date: Wed, 6 Dec 2023 11:31:38 +0000 Message-Id: <20231206113138.3576492-6-lukasz.luba@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231206113138.3576492-1-lukasz.luba@arm.com> References: <20231206113138.3576492-1-lukasz.luba@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net 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 (snail.vger.email [0.0.0.0]); Wed, 06 Dec 2023 03:31:12 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784531945504685700 X-GMAIL-MSGID: 1784531945504685700 Simplify the code and remove one extra 'if' block. No intentional functional impact. Signed-off-by: Lukasz Luba --- drivers/thermal/gov_power_allocator.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c index 8f2d2ee3def0..350a39c23ac4 100644 --- a/drivers/thermal/gov_power_allocator.c +++ b/drivers/thermal/gov_power_allocator.c @@ -349,7 +349,8 @@ static void divvy_up_power(u32 *req_power, u32 *max_power, int num_actors, u32 total_req_power, u32 power_range, u32 *granted_power, u32 *extra_actor_power) { - u32 extra_power, capped_extra_power; + u32 capped_extra_power = 0; + u32 extra_power = 0; int i; /* @@ -358,8 +359,6 @@ static void divvy_up_power(u32 *req_power, u32 *max_power, int num_actors, if (!total_req_power) total_req_power = 1; - capped_extra_power = 0; - extra_power = 0; for (i = 0; i < num_actors; i++) { u64 req_range = (u64)req_power[i] * power_range; @@ -375,7 +374,7 @@ static void divvy_up_power(u32 *req_power, u32 *max_power, int num_actors, capped_extra_power += extra_actor_power[i]; } - if (!extra_power) + if (!extra_power || !capped_extra_power) return; /* @@ -383,12 +382,13 @@ static void divvy_up_power(u32 *req_power, u32 *max_power, int num_actors, * how far they are from the max */ extra_power = min(extra_power, capped_extra_power); - if (capped_extra_power > 0) - for (i = 0; i < num_actors; i++) { - u64 extra_range = (u64)extra_actor_power[i] * extra_power; - granted_power[i] += DIV_ROUND_CLOSEST_ULL(extra_range, - capped_extra_power); - } + + for (i = 0; i < num_actors; i++) { + u64 extra_range = (u64)extra_actor_power[i] * extra_power; + + granted_power[i] += DIV_ROUND_CLOSEST_ULL(extra_range, + capped_extra_power); + } } static int allocate_power(struct thermal_zone_device *tz, int control_temp)