Message ID | 20230830151908.2149847-3-festevam@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | [v6,1/3] dt-bindings: thermal-zones: Document critical-action | expand |
On Wed, Aug 30, 2023 at 12:19 PM Fabio Estevam <festevam@gmail.com> wrote: > +static const char * const critical_actions[] = { > + [THERMAL_CRITICAL_ACTION_SHUTDOWN] = "shutdown", > + [THERMAL_CRITICAL_ACTION_REBOOT] = "reboot", > +}; Sorry, this should be removed. I will wait for some more feedback before sending a v7.
Hi Fabio, kernel test robot noticed the following build warnings: [auto build test WARNING on rafael-pm/thermal] [also build test WARNING on linus/master v6.5 next-20230831] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Fabio-Estevam/reboot-Introduce-hw_protection_reboot/20230831-034226 base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git thermal patch link: https://lore.kernel.org/r/20230830151908.2149847-3-festevam%40gmail.com patch subject: [PATCH v6 3/3] thermal: thermal_core: Allow rebooting after critical temp config: s390-randconfig-r025-20230831 (https://download.01.org/0day-ci/archive/20230831/202308311705.C7t4Vtwu-lkp@intel.com/config) compiler: clang version 15.0.7 (https://github.com/llvm/llvm-project.git 8dfdcc7b7bf66834a761bd8de445840ef68e4d1a) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230831/202308311705.C7t4Vtwu-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202308311705.C7t4Vtwu-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/thermal/thermal_of.c:221:27: warning: unused variable 'critical_actions' [-Wunused-const-variable] static const char * const critical_actions[] = { ^ 1 warning generated. vim +/critical_actions +221 drivers/thermal/thermal_of.c 220 > 221 static const char * const critical_actions[] = { 222 [THERMAL_CRITICAL_ACTION_SHUTDOWN] = "shutdown", 223 [THERMAL_CRITICAL_ACTION_REBOOT] = "reboot", 224 }; 225
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index a59700593d32..062114608667 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -320,11 +320,15 @@ void thermal_zone_device_critical(struct thermal_zone_device *tz) * Its a must for forced_emergency_poweroff_work to be scheduled. */ int poweroff_delay_ms = CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS; + static const char *msg = "Temperature too high"; dev_emerg(&tz->device, "%s: critical temperature reached, " "shutting down\n", tz->type); - hw_protection_shutdown("Temperature too high", poweroff_delay_ms); + if (tz->action == THERMAL_CRITICAL_ACTION_REBOOT) + hw_protection_reboot(msg, poweroff_delay_ms); + else + hw_protection_shutdown(msg, poweroff_delay_ms); } EXPORT_SYMBOL(thermal_zone_device_critical); diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c index 4ca905723429..a644a896a617 100644 --- a/drivers/thermal/thermal_of.c +++ b/drivers/thermal/thermal_of.c @@ -218,6 +218,25 @@ static struct device_node *of_thermal_zone_find(struct device_node *sensor, int return tz; } +static const char * const critical_actions[] = { + [THERMAL_CRITICAL_ACTION_SHUTDOWN] = "shutdown", + [THERMAL_CRITICAL_ACTION_REBOOT] = "reboot", +}; + +static void thermal_of_get_critical_action(struct device_node *np, + enum thermal_action *action) +{ + const char *action_string; + int ret; + + ret = of_property_read_string(np, "critical-action", &action_string); + if (ret < 0) + *action = THERMAL_CRITICAL_ACTION_SHUTDOWN; + + if (!strcasecmp(action_string, "reboot")) + *action = THERMAL_CRITICAL_ACTION_REBOOT; +} + static int thermal_of_monitor_init(struct device_node *np, int *delay, int *pdelay) { int ret; @@ -516,6 +535,8 @@ static struct thermal_zone_device *thermal_of_zone_register(struct device_node * goto out_kfree_trips; } + thermal_of_get_critical_action(np, &tz->action); + ret = thermal_zone_device_enable(tz); if (ret) { pr_err("Failed to enabled thermal zone '%s', id=%d: %d\n", diff --git a/include/linux/thermal.h b/include/linux/thermal.h index b449a46766f5..b68e5734823d 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h @@ -34,6 +34,11 @@ struct thermal_cooling_device; struct thermal_instance; struct thermal_attr; +enum thermal_action { + THERMAL_CRITICAL_ACTION_SHUTDOWN = 0, /* shutdown when crit temperature is reached */ + THERMAL_CRITICAL_ACTION_REBOOT, /* reboot when crit temperature is reached */ +}; + enum thermal_trend { THERMAL_TREND_STABLE, /* temperature is stable */ THERMAL_TREND_RAISING, /* temperature is raising */ @@ -187,6 +192,7 @@ struct thermal_zone_device { struct list_head node; struct delayed_work poll_queue; enum thermal_notify_event notify_event; + enum thermal_action action; }; /**