Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp8195651rwd; Tue, 20 Jun 2023 11:29:09 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7KSoX9UgiGrvQBXVxgPjHX4uF6PlNvxgznuL8eOqJexX8TopBHEMkG5cnxbOqMkpKB1okL X-Received: by 2002:a17:90a:7bc4:b0:25b:f396:c3bc with SMTP id d4-20020a17090a7bc400b0025bf396c3bcmr6766595pjl.48.1687285748697; Tue, 20 Jun 2023 11:29:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687285748; cv=none; d=google.com; s=arc-20160816; b=S8ii+ZpVeQEseMYFC/k8fU9ZIyQBI7RmbiNvYHjm3SJb9CkmXRKVITgQ2cHHKa06eO z5OIa0BBke0VcxG3EoqG4US6PutAWf0cRP8SBZPns4E7gpDSA3qiKYy3sFr7GI7FbVdv FqKTMW35doQ4mETxxY/C8pCagaoykzLdJUGP6RkapqaecAbaSalgRhHoRt81tPh395KA w8J1q7JRV4sFi+7gWXkcCbS7MyUj5VRARPFq/fpsbXyxBQg9Gj2IsrjZh9zMzGaG2RTa joA8+mWJJmxi1XvCBCHP79D2VkdmdTkbvCtvjXKL5lXIx4ugTTUXuPb5nzsf3D26P8gh eBTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version; bh=0fi6ppNcERqNO1yRdSBK9PuPWS4Dsw42+rs7kgDvriY=; b=IwSl8PHGmIwDKJnF/9dgxx65YrCJwq3Pe0/128OSINXwLHxTNlOuu/3bnuQqRVH84/ +PGWGFmndxiYhjmBol8+9j3ysZbOhZkZLkmKAic7+icByM7nOk02ml2LCaxl7zkJVQGF gzuabOSflQl5MSR8Kqbkukmu+HHGM1TP041qVRZwPFd+hEtx80EOr3Crf2bINVXApavH c7Gb1rd5emAHeSLjx0niafh0GO+hHpmG0pUBMmiIgqEdyF4W50dIQjEkIv2823OPYQOD cL+xue2IVJAh5tqShU8BPj3ljnIUrvZyrCOiRzWYtAs/Z5P1wdG9GC9BPL35VsfRJWMH md6Q== 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j11-20020a17090a694b00b002590bf12fedsi10181872pjm.181.2023.06.20.11.28.56; Tue, 20 Jun 2023 11:29:08 -0700 (PDT) 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230299AbjFTRR2 convert rfc822-to-8bit (ORCPT + 99 others); Tue, 20 Jun 2023 13:17:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54854 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230231AbjFTRRZ (ORCPT ); Tue, 20 Jun 2023 13:17:25 -0400 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1777E1710; Tue, 20 Jun 2023 10:17:22 -0700 (PDT) Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-987f13f8d21so106901966b.0; Tue, 20 Jun 2023 10:17:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687281440; x=1689873440; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kCU3E02m6ju/0TXJ6baw1sJty3puMTXr+sZagM9mSPU=; b=hA3s7NUXyX2T1a5g49xLCh6vkHJyqL9oK3UXSdVIXOQqcr8IxWR2qCgUO2Mi5qBsf0 m5zneaJkCSjPrL4c4fFb2FGCdb32UyuTekazzxEYhKcARX4uO1RnG1XI8C+fYEx+yzms GbqKo4HD4pxrU6UvP8DjwFJgVakfEMCQRM2ULZK7VVMnrUiSLpFMQjRfHCdct4wtebcT n3qItkGsuq+YMaOlz/cjLRSjX8PUT1j9anKLwuXxxFEb8hveaR1JcIwDhnKxXVD0NaPr N9gdwymS5llS720jMNdK9ci43WYSypdZksVaG9H2524e/AUCdL1z/2C9XqCFG58hAr2U f05g== X-Gm-Message-State: AC+VfDziUo+EKesPZ7jPLYq1hfbAvxU8W6ivbVOonR3igXTqZMWWQYQf 9nSMYW4T2UmkgcwA2UPDc8u27Ou7ZWnI4m8InAQ= X-Received: by 2002:a17:906:7a52:b0:988:9dea:ab9c with SMTP id i18-20020a1709067a5200b009889deaab9cmr4817988ejo.1.1687281440413; Tue, 20 Jun 2023 10:17:20 -0700 (PDT) MIME-Version: 1.0 References: <20230519032719.2581689-1-evalenti@kernel.org> <20230519032719.2581689-5-evalenti@kernel.org> In-Reply-To: <20230519032719.2581689-5-evalenti@kernel.org> From: "Rafael J. Wysocki" Date: Tue, 20 Jun 2023 19:17:09 +0200 Message-ID: Subject: Re: [PATCH 4/7] thermal: stats: introduce thermal zone stats/min_gradient To: Eduardo Valentin Cc: eduval@amazon.com, linux-pm@vger.kernel.org, "Rafael J. Wysocki" , Daniel Lezcano , Amit Kucheria , Zhang Rui , Jonathan Corbet , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT X-Spam-Status: No, score=-1.4 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no 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 On Fri, May 19, 2023 at 5:27 AM Eduardo Valentin wrote: > > From: Eduardo Valentin > > The patch adds a statistic to track > the minimum gradient (dT/dt) to the thermal zone > stats/ folder. > > Samples: > > $ echo 1000 > emul_temp > $ cat stats/min_gradient > 0 > $ echo 2000 > emul_temp > $ echo 1000 > emul_temp > $ cat stats/min_gradient > -3460 > > Cc: "Rafael J. Wysocki" (supporter:THERMAL) > Cc: Daniel Lezcano (supporter:THERMAL) > Cc: Amit Kucheria (reviewer:THERMAL) > Cc: Zhang Rui (reviewer:THERMAL) > Cc: Jonathan Corbet (maintainer:DOCUMENTATION) > Cc: linux-pm@vger.kernel.org (open list:THERMAL) > Cc: linux-doc@vger.kernel.org (open list:DOCUMENTATION) > Cc: linux-kernel@vger.kernel.org (open list) > > Signed-off-by: Eduardo Valentin This can be easily folded into the previous patch IMO. > --- > .../driver-api/thermal/sysfs-api.rst | 1 + > drivers/thermal/thermal_sysfs.c | 23 +++++++++++++++++++ > 2 files changed, 24 insertions(+) > > diff --git a/Documentation/driver-api/thermal/sysfs-api.rst b/Documentation/driver-api/thermal/sysfs-api.rst > index 18140dbb1ce1..ed5e6ba4e0d7 100644 > --- a/Documentation/driver-api/thermal/sysfs-api.rst > +++ b/Documentation/driver-api/thermal/sysfs-api.rst > @@ -358,6 +358,7 @@ Thermal zone device sys I/F, created once it's registered:: > |---stats: Directory containing thermal zone device's stats > |---stats/reset_tz_stats: Writes to this file resets the statistics. > |---stats/max_gradient: The maximum recorded dT/dt in uC/ms. > + |---stats/min_gradient: The minimum recorded dT/dt in uC/ms. > > Thermal cooling device sys I/F, created once it's registered:: > > diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c > index aa28c1cae916..f89ec9a7e8c8 100644 > --- a/drivers/thermal/thermal_sysfs.c > +++ b/drivers/thermal/thermal_sysfs.c > @@ -542,6 +542,7 @@ static void destroy_trip_attrs(struct thermal_zone_device *tz) > struct thermal_zone_device_stats { > spinlock_t lock; /* protects this struct */ > s64 max_gradient; > + s64 min_gradient; > ktime_t last_time; > }; > > @@ -569,6 +570,10 @@ static void temperature_stats_update(struct thermal_zone_device *tz) > /* update fastest temperature rise from our perspective */ > if (cur_gradient > stats->max_gradient) > stats->max_gradient = cur_gradient; > + > + /* update fastest temperature decay from our perspective */ > + if (cur_gradient < stats->min_gradient) > + stats->min_gradient = cur_gradient; > } > > void thermal_zone_device_stats_update(struct thermal_zone_device *tz) > @@ -595,6 +600,21 @@ static ssize_t max_gradient_show(struct device *dev, > return ret; > } > > +static ssize_t min_gradient_show(struct device *dev, > + struct device_attribute *attr, char *buf) > +{ > + struct thermal_zone_device *tz = to_thermal_zone(dev); > + struct thermal_zone_device_stats *stats = tz->stats; > + int ret; > + > + spin_lock(&stats->lock); > + temperature_stats_update(tz); > + ret = snprintf(buf, PAGE_SIZE, "%lld\n", stats->min_gradient); > + spin_unlock(&stats->lock); > + > + return ret; > +} > + > static ssize_t > reset_tz_stats_store(struct device *dev, struct device_attribute *attr, > const char *buf, size_t count) > @@ -604,6 +624,7 @@ reset_tz_stats_store(struct device *dev, struct device_attribute *attr, > > spin_lock(&stats->lock); > > + stats->min_gradient = 0; > stats->max_gradient = 0; > stats->last_time = ktime_get(); > > @@ -612,10 +633,12 @@ reset_tz_stats_store(struct device *dev, struct device_attribute *attr, > return count; > } > > +static DEVICE_ATTR_RO(min_gradient); > static DEVICE_ATTR_RO(max_gradient); > static DEVICE_ATTR_WO(reset_tz_stats); > > static struct attribute *thermal_zone_device_stats_attrs[] = { > + &dev_attr_min_gradient.attr, > &dev_attr_max_gradient.attr, > &dev_attr_reset_tz_stats.attr, > NULL > -- > 2.34.1 >