From patchwork Thu Mar 9 13:55:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Di Shen X-Patchwork-Id: 66873 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp307592wrd; Thu, 9 Mar 2023 06:05:36 -0800 (PST) X-Google-Smtp-Source: AK7set+FfFGFwBpxxW15+pUGN0ap4oSFtUPhAczD/LJfd7q7djWUO05neKIo2OpFxibFuuYMoM+G X-Received: by 2002:a17:90b:3b51:b0:237:e1d2:c662 with SMTP id ot17-20020a17090b3b5100b00237e1d2c662mr22812760pjb.14.1678370736402; Thu, 09 Mar 2023 06:05:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678370736; cv=none; d=google.com; s=arc-20160816; b=F07C7rcw935QEB6jAEoWEd/I7bUg7NAvWXUxVeK0VqzKzLddm8psKV+viyPNABY5zD f9+24ShjPVF0Tj+wifmh0Ugny4KeHh0cZHarittJRN9KDqGZn9L+eR22omtsRc0pRYC+ a1Wu08TsEySWsWpc4nP6JLD/KNTI9yJEZjYURnfKCef1acyxHLhyplEo/M0Kf0HFf0y9 tI9rHy8PJDcYp8Z5TyZAd8e5TNpA1i8PPK1euJyruiUxLCiLDsVyp6feA6oT9GP628ib m4kdz60YM4/PeROlfOIEC2Hl4s34QGhdqfVkAyP7Jp95DRUdidOlSU+FVjVHgE7CwR2h EbHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from; bh=nceUrTYYT5dLAjK+A7jIl+9tq3CrO5yx5UYdExAPLQY=; b=SVI9LN2ePmpnfg9NbID9KZRO03AvAlsERl1ORxfM1w04ygGlgHUbW6+qO02hX6j2h+ gMQgojplk7LCtR9FkAs1oVPCe8OHfZj/acxtaq37mYXZTT+6CRGYg4sWPSxEH9U2bZpM VFepYt6AdH5Hlo0PT6AvkP+KjoGya5skSZSoofNvzytqra/AZfNPLDiB/2uS9zuZ6f1y WeRxdfS9tQ2f0NHsiGBjR1N5rL2m4dcKXFDj3OWlHRkUtnHCZMN6Ak/5Qn5nmsYrhwnC 5QBN/wsp0Hfmhfmrfak2zGoz/QKDOilfZn1/ZwhyTCC+cwZiFOI3ryY7hr1k7iXXDJ9n QkMw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 8-20020a631548000000b0050362fc5348si17213256pgv.192.2023.03.09.06.05.23; Thu, 09 Mar 2023 06:05:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231389AbjCIN7Y (ORCPT + 99 others); Thu, 9 Mar 2023 08:59:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46738 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231438AbjCIN5V (ORCPT ); Thu, 9 Mar 2023 08:57:21 -0500 Received: from SHSQR01.spreadtrum.com (unknown [222.66.158.135]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 40DC115CBE; Thu, 9 Mar 2023 05:55:44 -0800 (PST) Received: from SHSend.spreadtrum.com (bjmbx01.spreadtrum.com [10.0.64.7]) by SHSQR01.spreadtrum.com with ESMTP id 329DtK86091946; Thu, 9 Mar 2023 21:55:20 +0800 (+08) (envelope-from Di.Shen@unisoc.com) Received: from bj10906pcu1.spreadtrum.com (10.0.74.67) by BJMBX01.spreadtrum.com (10.0.64.7) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Thu, 9 Mar 2023 21:55:19 +0800 From: Di Shen To: , CC: , , , , , Subject: [PATCH] thermal/core/power_allocator: avoid cdev->state can not be reset Date: Thu, 9 Mar 2023 21:55:15 +0800 Message-ID: <20230309135515.1232-1-di.shen@unisoc.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 X-Originating-IP: [10.0.74.67] X-ClientProxiedBy: SHCAS03.spreadtrum.com (10.0.1.207) To BJMBX01.spreadtrum.com (10.0.64.7) X-MAIL: SHSQR01.spreadtrum.com 329DtK86091946 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759899273083380863?= X-GMAIL-MSGID: =?utf-8?q?1759899273083380863?= Commit 0952177f2a1f (thermal/core/power_allocator: Update once cooling devices when temp is low) add a update flag to update cooling device only once when temp is low. But when the switch_on_temp is set to be a higher value, the cooling device state may not be reset to max, because the last_temp is smaller than the switch_on_temp. For example: First: swicth_on_temp=70 control_temp=85; Then userspace change the trip_temp: swicth_on_temp=45 control_temp=55 cur_temp=54 Then userspace reset the trip_temp: swicth_on_temp=70 control_temp=85 cur_temp=57 last_temp=54 At this time, the cooling device state should be reset to be max. However, because cur_temp(57) < switch_on_temp(70) last_temp(54) < swicth_on_temp(70) --> update = false When update is false, the cooling device state can not be reset. So delete the update condition, so that the cooling device state could be reset. Fixes: 0952177f2a1f (thermal/core/power_allocator: Update once cooling devices when temp is low) Signed-off-by: Di Shen --- drivers/thermal/gov_power_allocator.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c index 0eaf1527d3e3..153bf528b98c 100644 --- a/drivers/thermal/gov_power_allocator.c +++ b/drivers/thermal/gov_power_allocator.c @@ -560,7 +560,7 @@ static void reset_pid_controller(struct power_allocator_params *params) params->prev_err = 0; } -static void allow_maximum_power(struct thermal_zone_device *tz, bool update) +static void allow_maximum_power(struct thermal_zone_device *tz) { struct thermal_instance *instance; struct power_allocator_params *params = tz->governor_data; @@ -582,8 +582,7 @@ static void allow_maximum_power(struct thermal_zone_device *tz, bool update) */ cdev->ops->get_requested_power(cdev, &req_power); - if (update) - __thermal_cdev_update(instance->cdev); + __thermal_cdev_update(instance->cdev); mutex_unlock(&instance->cdev->lock); } @@ -697,7 +696,6 @@ static int power_allocator_throttle(struct thermal_zone_device *tz, int trip_id) struct power_allocator_params *params = tz->governor_data; struct thermal_trip trip; int ret; - bool update; lockdep_assert_held(&tz->lock); @@ -710,10 +708,9 @@ static int power_allocator_throttle(struct thermal_zone_device *tz, int trip_id) ret = __thermal_zone_get_trip(tz, params->trip_switch_on, &trip); if (!ret && (tz->temperature < trip.temperature)) { - update = (tz->last_temperature >= trip.temperature); tz->passive = 0; reset_pid_controller(params); - allow_maximum_power(tz, update); + allow_maximum_power(tz); return 0; }