From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.2 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1909FC433FE for ; Thu, 10 Dec 2020 13:38:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C0A282311A for ; Thu, 10 Dec 2020 13:38:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389577AbgLJNif (ORCPT ); Thu, 10 Dec 2020 08:38:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52682 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389576AbgLJNiK (ORCPT ); Thu, 10 Dec 2020 08:38:10 -0500 Received: from mail-wr1-x444.google.com (mail-wr1-x444.google.com [IPv6:2a00:1450:4864:20::444]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3532FC0613D6 for ; Thu, 10 Dec 2020 05:37:30 -0800 (PST) Received: by mail-wr1-x444.google.com with SMTP id t16so5513229wra.3 for ; Thu, 10 Dec 2020 05:37:30 -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=oRtoQvl6MRwwbBwu+OqoR6Ch7qCnEu5Xnq7MBfAyxbo=; b=cfiQdQ57fyFjf+aeE5qdCw7XNDFrO5g6gYq+9m4593bVy09IxHbnfPqbmaboucXXF5 gVWFQ0psB4TU8rwIgphClPaUu1c1W2G2eHgmsfeeYjJKiJe6BWaZ/9NhIc43QCEdNJAk NU4NX/qrUnwWtnJTTasf3wpxSQfg51ZTuvH/ys+sKpxrHTh0p3/AcZk+dQDrUkv9nGEf eA9hi5BfIYeWW2cfrpLzVcVoFyHJUmdLyuN+3P7hNRE9YzI36hp3B69gtWr09OZaJcR1 nS+7wPbdlm05JL8d8ehe13RcTCobIxyCLMfdP05bq9AGdRYvD+s5/ACANmLjW9YwAjDv /UiQ== 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=oRtoQvl6MRwwbBwu+OqoR6Ch7qCnEu5Xnq7MBfAyxbo=; b=mpKLTK9Ht7zjv+9htzytzui9mZx+gnuVC0OmvDvDhwbR/gj2u57glwxC3aX56ozCgV DKmATZfw4shMh1p8kdaCj9gY0xE7zpS5TEXFagWfySVKwQIwN/fJDTjWvHny5s38kMDy sxKY4fOEa/poUlxp6snYglC2F1+YSDHxEg9B6sjog9MHajPijPa7ljG25aSY5gFxXtX0 63How4gst3yuVxdeweZdaiQ/RvhjTfDzZnS2lcl4aQJlXyrMG4u0aHidEQbv/60RaRe2 itrVIhu5KiQeQzJuOP79BnLRZe94o3BU4ErOu5mIvN30CMHEdozTrcrFSyLfRomwYERY QjVg== X-Gm-Message-State: AOAM533CDzPaa1CuxXwcg1MJkhzSdzIIAa4Z20L7JER6wOtQObBM8dQQ ynWDeL1uApJfKvFTdvyEuWmgFg== X-Google-Smtp-Source: ABdhPJwCCzpOMSIxWJQznXzFX6b1+JYQPsqyyFO/88xv27PsxliFuoQMvIjIx6fpO6qMgtHZVN9t0A== X-Received: by 2002:a5d:5604:: with SMTP id l4mr8256266wrv.127.1607607448711; Thu, 10 Dec 2020 05:37:28 -0800 (PST) Received: from ?IPv6:2a01:e34:ed2f:f020:4ea:d408:1aec:e109? ([2a01:e34:ed2f:f020:4ea:d408:1aec:e109]) by smtp.googlemail.com with ESMTPSA id n123sm9591223wmn.7.2020.12.10.05.37.27 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 10 Dec 2020 05:37:28 -0800 (PST) Subject: Re: [PATCH 2/5] thermal/core: Add critical and hot ops To: Lukasz Luba , rui.zhang@intel.com Cc: kai.heng.feng@canonical.com, srinivas.pandruvada@linux.intel.com, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Amit Kucheria References: <20201210121514.25760-1-daniel.lezcano@linaro.org> <20201210121514.25760-2-daniel.lezcano@linaro.org> From: Daniel Lezcano Message-ID: <565c354e-0850-47f3-ad58-ee28fdedcfb2@linaro.org> Date: Thu, 10 Dec 2020 14:37:27 +0100 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: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/12/2020 13:44, Lukasz Luba wrote: > > > On 12/10/20 12:15 PM, Daniel Lezcano wrote: >> Currently there is no way to the sensors to directly call an ops in >> interrupt mode without calling thermal_zone_device_update assuming all >> the trip points are defined. >> >> A sensor may want to do something special if a trip point is hot or >> critical. >> >> This patch adds the critical and hot ops to the thermal zone device, >> so a sensor can directly invoke them or let the thermal framework to >> call the sensor specific ones. >> >> Tested-by: Kai-Heng Feng >> Signed-off-by: Daniel Lezcano >> --- >>   drivers/thermal/thermal_core.c | 43 +++++++++++++++++++++------------- >>   include/linux/thermal.h        |  3 +++ >>   2 files changed, 30 insertions(+), 16 deletions(-) >> >> diff --git a/drivers/thermal/thermal_core.c >> b/drivers/thermal/thermal_core.c >> index e6771e5aeedb..cee0b31b5cd7 100644 >> --- a/drivers/thermal/thermal_core.c >> +++ b/drivers/thermal/thermal_core.c >> @@ -375,6 +375,25 @@ static void thermal_emergency_poweroff(void) >>                     msecs_to_jiffies(poweroff_delay_ms)); >>   } >>   +void thermal_zone_device_critical(struct thermal_zone_device *tz) >> +{ >> +    dev_emerg(&tz->device, "%s: critical temperature reached, " >> +          "shutting down\n", tz->type); >> + >> +    mutex_lock(&poweroff_lock); >> +    if (!power_off_triggered) { >> +        /* >> +         * Queue a backup emergency shutdown in the event of >> +         * orderly_poweroff failure >> +         */ >> +        thermal_emergency_poweroff(); >> +        orderly_poweroff(true); >> +        power_off_triggered = true; >> +    } >> +    mutex_unlock(&poweroff_lock); >> +} >> +EXPORT_SYMBOL(thermal_zone_device_critical); >> + >>   static void handle_critical_trips(struct thermal_zone_device *tz, >>                     int trip, enum thermal_trip_type trip_type) >>   { >> @@ -391,22 +410,10 @@ static void handle_critical_trips(struct >> thermal_zone_device *tz, >>       if (tz->ops->notify) >>           tz->ops->notify(tz, trip, trip_type); >>   -    if (trip_type == THERMAL_TRIP_CRITICAL) { >> -        dev_emerg(&tz->device, >> -              "critical temperature reached (%d C), shutting down\n", >> -              tz->temperature / 1000); >> -        mutex_lock(&poweroff_lock); >> -        if (!power_off_triggered) { >> -            /* >> -             * Queue a backup emergency shutdown in the event of >> -             * orderly_poweroff failure >> -             */ >> -            thermal_emergency_poweroff(); >> -            orderly_poweroff(true); >> -            power_off_triggered = true; >> -        } >> -        mutex_unlock(&poweroff_lock); >> -    } >> +    if (trip_type == THERMAL_TRIP_HOT && tz->ops->hot) >> +        tz->ops->hot(tz); >> +    else if (trip_type == THERMAL_TRIP_CRITICAL) >> +        tz->ops->critical(tz); > > I can see that in the patch 3/5 there driver .critical() callback > calls framework thermal_zone_device_critical() at the end. > I wonder if we could always call this framework function. It is actually done on purpose, we want to let the driver to handle the critical routine which may not end up with an emergency shutdown. [ ... ] >>   #else >>   static inline struct thermal_zone_device *thermal_zone_device_register( >>       const char *type, int trips, int mask, void *devdata, >> > > I am just concerned about drivers which provide own .critical() callback > but forgot to call thermal_zone_device_critical() at the end and > framework could skip it. > > Or we can make sure during the review that it's not an issue (and ignore > out of tree drivers)? Yes, the framework guarantees if the critical trip point is crossed we call the emergency shutdown by default. If the driver choose to override it, it takes responsibility of the change. -- Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog