Received: by 2002:a05:6a10:2785:0:0:0:0 with SMTP id ia5csp3418426pxb; Tue, 12 Jan 2021 14:18:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJwWj8Vfrdem2Rhjh5Xan8PbKV4dH5E5ZNmptZ0BtDcGupSlmsFTeCCp9Uq3jDDBLXM9nc5/ X-Received: by 2002:a05:6402:1b91:: with SMTP id cc17mr1055001edb.259.1610489883053; Tue, 12 Jan 2021 14:18:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1610489883; cv=none; d=google.com; s=arc-20160816; b=D28qV+ws/3zVwpLCw2g8OztUbiTD+7v8l/3YLG9/pTVcZUb5XAn/pDXuxnZE9HWV7X 7H9PwbvFr0/iwx1rzWGiQFpIR/2yj59YmzVy1ABcdOC6mDE+EwaKWHJUEgPJ6UA8EAgc TNSpZKcsRR3fwKBj77S0CkCpf6mflbuiSxr0GTbVE6q8CICzTSwiyTuiHFDKjz32BzW9 njf/Z0Deyl8QPSWOQ5t7iCem5tLPDQ9HUqfgCsZJtfwwGZbjGJfWmvPdzV38ahKzh25B wu5rRdfjy7ZbR7moV7RuMFzUMDbGsBMgUsvC2zEIipOgmgIq/AeFYbcAzxnGLS1/7vMl ursQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature; bh=rrRq5mHSq4NB5JLwy/mYqVFr8iEMeG5LcRfheBfLpZk=; b=hJbP+AwJuMpKR4GUWE5oshh5iwkaubS/XyDscbUfFL8OqY8gvLYskUvX2xp7WnPzrL kgFkAouoyXpDrOplQi+4hOjzpgHHV6hy9gfXh1FvPWc8C34kdQyS4OFd3q3FLXhHzjFs 4Jlj7c0LD2FTNdXiSMOcuyU4hi1N0LqFuwLF8chNN4LxnVSfCKezOiMxAI06+kJ593z3 1UKo09//OcCV9+6QVV5Cjf1sYqvxQ2OUrtY69SsATitoHLQeLpm2InbSUwgSvci5skuR BrVrlJenuxqNZLb0mkX6MzPv/pZrXgE2Xpoc72AuzLs+d+I8mI60y47MT28s5j9cKazr /6SA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ceLOYbpl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w8si30583ejv.263.2021.01.12.14.17.39; Tue, 12 Jan 2021 14:18:03 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ceLOYbpl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404638AbhALAY5 (ORCPT + 99 others); Mon, 11 Jan 2021 19:24:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37830 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2403929AbhAKXOQ (ORCPT ); Mon, 11 Jan 2021 18:14:16 -0500 Received: from mail-il1-x12f.google.com (mail-il1-x12f.google.com [IPv6:2607:f8b0:4864:20::12f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BB4C0C061795 for ; Mon, 11 Jan 2021 15:13:35 -0800 (PST) Received: by mail-il1-x12f.google.com with SMTP id q1so1021631ilt.6 for ; Mon, 11 Jan 2021 15:13:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=rrRq5mHSq4NB5JLwy/mYqVFr8iEMeG5LcRfheBfLpZk=; b=ceLOYbplpX8PK8IkU4hodjUkUzzbeQ4iQnbP1dGKtgMR0T23ZDmuTHVbrLybQSpWWQ LhggthDyaxieWogbXE1qAiDh9SBFcR6Nel0lifbe5wG7nU/dS0OgRujyo0rUyU728WoP TDCV8Q4s3AyjyRQBI2bSyEiL88J0kExw0iBWEX3QrxlKa/DMTGedbHZdgUd7D7RHEYJL 2mHVXaWjNwhPFvqHl1ZEt0Euc4PC0dVrgdhDebc7wP2BEkCKUdI94q6wlC6EhHwpUcQ3 a7s8Gu3NKPIbV38FeEMmCvUMazx26AE917vOKjmWnRrEeeD/3IM0ylTvGQC1G9znqLb9 OJ6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=rrRq5mHSq4NB5JLwy/mYqVFr8iEMeG5LcRfheBfLpZk=; b=joR/Dk3gprvQCAtI8139krKDNpj/rOAguOJgxmILAOEurD7+68wZVpP8/8MzwiwWAK j87qoDRiP+HL2/8ltf8rVpYMUkUk+YBAVaQ/LoHhbY+Ed7StxgtcTG3jpLWeII8ccLV1 J2yAc0TNr/h0Pney6Bb64rgq2WYJMevokGtIn1WB+Qypv5qBIV/NTi1AYN4j4a1NrbME QlrBGj0vhwDW5of4tdVgd4lc5WBn2KqARssKItPkxkHhBkCKV9ZFpLk+/2NLuMoS6/wb Xazg+VdfN7HFraSaYfVxQgPYLv8YakvlVcJzCeX2oKmETgVz/McgcyUxwYnMqDoG3iwW oA/w== X-Gm-Message-State: AOAM530MGlfIGT9mMfjBrOqC/Bg/KZfq6ru0uEARRo+dotLonwKIf5As dO2dQJYni3vYePtADXVr2Yr8dw== X-Received: by 2002:a05:6e02:5d0:: with SMTP id l16mr1343949ils.90.1610406814979; Mon, 11 Jan 2021 15:13:34 -0800 (PST) Received: from [192.168.1.93] (pool-71-163-245-5.washdc.fios.verizon.net. [71.163.245.5]) by smtp.gmail.com with ESMTPSA id r3sm756226ilt.76.2021.01.11.15.13.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 11 Jan 2021 15:13:32 -0800 (PST) Subject: Re: [PATCH 1/6] thermal/core: Remove the 'forced_passive' option To: Daniel Lezcano , rui.zhang@intel.com Cc: mjg59@codon.org.uk, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, amitk@kernel.org, Jonathan Corbet , Viresh Kumar , "open list:DOCUMENTATION" References: <20201214233811.485669-1-daniel.lezcano@linaro.org> From: Thara Gopinath Message-ID: <314b70a1-8c39-bd2c-cba8-937657658930@linaro.org> Date: Mon, 11 Jan 2021 18:13:29 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20201214233811.485669-1-daniel.lezcano@linaro.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12/14/20 6:38 PM, Daniel Lezcano wrote: > The code was reorganized in 2012 with the commit 0c01ebbfd3caf1. > > The main change is a loop on the trip points array and a unconditional > call to the throttle() ops of the governors for each of them even if > the trip temperature is not reached yet. > > With this change, the 'forced_passive' is no longer checked in the > thermal_zone_device_update() function but in the step wise governor's > throttle() callback. > > As the force_passive does no belong to the trip point array, the > thermal_zone_device_update() can not compare with the specified > passive temperature, thus does not detect the passive limit has been > crossed. Consequently, throttle() is never called and the > 'forced_passive' branch is unreached. > > In addition, the default processor cooling device is not automatically > bound to the thermal zone if there is not passive trip point, thus the > 'forced_passive' can not operate. > > If there is an active trip point, then the throttle function will be > called to mitigate at this temperature and the 'forced_passive' will > override the mitigation of the active trip point in this case but with > the default cooling device bound to the thermal zone, so usually a > fan, and that is not a passive cooling effect. > > Given the regression exists since more than 8 years, nobody complained > and at the best of my knowledge there is no bug open in > https://bugzilla.kernel.org, it is reasonable to say it is unused. > > Remove the 'forced_passive' related code. > > Signed-off-by: Daniel Lezcano Reviewed-by: Thara Gopinath > --- > .../driver-api/thermal/sysfs-api.rst | 13 --- > drivers/thermal/gov_step_wise.c | 14 +--- > drivers/thermal/thermal_sysfs.c | 80 ------------------- > include/linux/thermal.h | 4 - > 4 files changed, 3 insertions(+), 108 deletions(-) > > diff --git a/Documentation/driver-api/thermal/sysfs-api.rst b/Documentation/driver-api/thermal/sysfs-api.rst > index e7520cb439ac..a4969c474cc3 100644 > --- a/Documentation/driver-api/thermal/sysfs-api.rst > +++ b/Documentation/driver-api/thermal/sysfs-api.rst > @@ -520,19 +520,6 @@ available_policies > > RW, Optional > > -passive > - Attribute is only present for zones in which the passive cooling > - policy is not supported by native thermal driver. Default is zero > - and can be set to a temperature (in millidegrees) to enable a > - passive trip point for the zone. Activation is done by polling with > - an interval of 1 second. > - > - Unit: millidegrees Celsius > - > - Valid values: 0 (disabled) or greater than 1000 > - > - RW, Optional > - > emul_temp > Interface to set the emulated temperature method in thermal zone > (sensor). After setting this temperature, the thermal zone may pass > diff --git a/drivers/thermal/gov_step_wise.c b/drivers/thermal/gov_step_wise.c > index 2ae7198d3067..12acb12aac50 100644 > --- a/drivers/thermal/gov_step_wise.c > +++ b/drivers/thermal/gov_step_wise.c > @@ -109,7 +109,7 @@ static void update_passive_instance(struct thermal_zone_device *tz, > * If value is +1, activate a passive instance. > * If value is -1, deactivate a passive instance. > */ > - if (type == THERMAL_TRIP_PASSIVE || type == THERMAL_TRIPS_NONE) > + if (type == THERMAL_TRIP_PASSIVE) > tz->passive += value; > } > > @@ -122,13 +122,8 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip) > bool throttle = false; > int old_target; > > - if (trip == THERMAL_TRIPS_NONE) { > - trip_temp = tz->forced_passive; > - trip_type = THERMAL_TRIPS_NONE; > - } else { > - tz->ops->get_trip_temp(tz, trip, &trip_temp); > - tz->ops->get_trip_type(tz, trip, &trip_type); > - } > + tz->ops->get_trip_temp(tz, trip, &trip_temp); > + tz->ops->get_trip_type(tz, trip, &trip_type); > > trend = get_tz_trend(tz, trip); > > @@ -189,9 +184,6 @@ static int step_wise_throttle(struct thermal_zone_device *tz, int trip) > > thermal_zone_trip_update(tz, trip); > > - if (tz->forced_passive) > - thermal_zone_trip_update(tz, THERMAL_TRIPS_NONE); > - > mutex_lock(&tz->lock); > > list_for_each_entry(instance, &tz->thermal_instances, tz_node) > diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c > index 0866e949339b..4e7f9e880d76 100644 > --- a/drivers/thermal/thermal_sysfs.c > +++ b/drivers/thermal/thermal_sysfs.c > @@ -216,49 +216,6 @@ trip_point_hyst_show(struct device *dev, struct device_attribute *attr, > return ret ? ret : sprintf(buf, "%d\n", temperature); > } > > -static ssize_t > -passive_store(struct device *dev, struct device_attribute *attr, > - const char *buf, size_t count) > -{ > - struct thermal_zone_device *tz = to_thermal_zone(dev); > - int state; > - > - if (sscanf(buf, "%d\n", &state) != 1) > - return -EINVAL; > - > - /* sanity check: values below 1000 millicelcius don't make sense > - * and can cause the system to go into a thermal heart attack > - */ > - if (state && state < 1000) > - return -EINVAL; > - > - if (state && !tz->forced_passive) { > - if (!tz->passive_delay) > - tz->passive_delay = 1000; > - thermal_zone_device_rebind_exception(tz, "Processor", > - sizeof("Processor")); > - } else if (!state && tz->forced_passive) { > - tz->passive_delay = 0; > - thermal_zone_device_unbind_exception(tz, "Processor", > - sizeof("Processor")); > - } > - > - tz->forced_passive = state; > - > - thermal_zone_device_update(tz, THERMAL_EVENT_UNSPECIFIED); > - > - return count; > -} > - > -static ssize_t > -passive_show(struct device *dev, struct device_attribute *attr, > - char *buf) > -{ > - struct thermal_zone_device *tz = to_thermal_zone(dev); > - > - return sprintf(buf, "%d\n", tz->forced_passive); > -} > - > static ssize_t > policy_store(struct device *dev, struct device_attribute *attr, > const char *buf, size_t count) > @@ -403,7 +360,6 @@ static DEVICE_ATTR_RW(sustainable_power); > > /* These thermal zone device attributes are created based on conditions */ > static DEVICE_ATTR_RW(mode); > -static DEVICE_ATTR_RW(passive); > > /* These attributes are unconditionally added to a thermal zone */ > static struct attribute *thermal_zone_dev_attrs[] = { > @@ -438,45 +394,9 @@ static const struct attribute_group thermal_zone_mode_attribute_group = { > .attrs = thermal_zone_mode_attrs, > }; > > -/* We expose passive only if passive trips are present */ > -static struct attribute *thermal_zone_passive_attrs[] = { > - &dev_attr_passive.attr, > - NULL, > -}; > - > -static umode_t thermal_zone_passive_is_visible(struct kobject *kobj, > - struct attribute *attr, > - int attrno) > -{ > - struct device *dev = kobj_to_dev(kobj); > - struct thermal_zone_device *tz; > - enum thermal_trip_type trip_type; > - int count, passive = 0; > - > - tz = container_of(dev, struct thermal_zone_device, device); > - > - for (count = 0; count < tz->trips && !passive; count++) { > - tz->ops->get_trip_type(tz, count, &trip_type); > - > - if (trip_type == THERMAL_TRIP_PASSIVE) > - passive = 1; > - } > - > - if (!passive) > - return attr->mode; > - > - return 0; > -} > - > -static const struct attribute_group thermal_zone_passive_attribute_group = { > - .attrs = thermal_zone_passive_attrs, > - .is_visible = thermal_zone_passive_is_visible, > -}; > - > static const struct attribute_group *thermal_zone_attribute_groups[] = { > &thermal_zone_attribute_group, > &thermal_zone_mode_attribute_group, > - &thermal_zone_passive_attribute_group, > /* This is not NULL terminated as we create the group dynamically */ > }; > > diff --git a/include/linux/thermal.h b/include/linux/thermal.h > index c80032322158..a57232a9a6f9 100644 > --- a/include/linux/thermal.h > +++ b/include/linux/thermal.h > @@ -131,9 +131,6 @@ struct thermal_cooling_device { > trip point. > * @prev_high_trip: the above current temperature if you've crossed a > passive trip point. > - * @forced_passive: If > 0, temperature at which to switch on all ACPI > - * processor cooling devices. Currently only used by the > - * step-wise governor. > * @need_update: if equals 1, thermal_zone_device_update needs to be invoked. > * @ops: operations this &thermal_zone_device supports > * @tzp: thermal zone parameters > @@ -167,7 +164,6 @@ struct thermal_zone_device { > int passive; > int prev_low_trip; > int prev_high_trip; > - unsigned int forced_passive; > atomic_t need_update; > struct thermal_zone_device_ops *ops; > struct thermal_zone_params *tzp; > -- Warm Regards Thara