mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 08:38:45 +02:00 
			
		
		
		
	 cdd30ebb1b
			
		
	
	
		cdd30ebb1b
		
	
	
	
	
		
			
			Clean up the existing export namespace code along the same lines of
commit 33def8498f ("treewide: Convert macro and uses of __section(foo)
to __section("foo")") and for the same reason, it is not desired for the
namespace argument to be a macro expansion itself.
Scripted using
  git grep -l -e MODULE_IMPORT_NS -e EXPORT_SYMBOL_NS | while read file;
  do
    awk -i inplace '
      /^#define EXPORT_SYMBOL_NS/ {
        gsub(/__stringify\(ns\)/, "ns");
        print;
        next;
      }
      /^#define MODULE_IMPORT_NS/ {
        gsub(/__stringify\(ns\)/, "ns");
        print;
        next;
      }
      /MODULE_IMPORT_NS/ {
        $0 = gensub(/MODULE_IMPORT_NS\(([^)]*)\)/, "MODULE_IMPORT_NS(\"\\1\")", "g");
      }
      /EXPORT_SYMBOL_NS/ {
        if ($0 ~ /(EXPORT_SYMBOL_NS[^(]*)\(([^,]+),/) {
  	if ($0 !~ /(EXPORT_SYMBOL_NS[^(]*)\(([^,]+), ([^)]+)\)/ &&
  	    $0 !~ /(EXPORT_SYMBOL_NS[^(]*)\(\)/ &&
  	    $0 !~ /^my/) {
  	  getline line;
  	  gsub(/[[:space:]]*\\$/, "");
  	  gsub(/[[:space:]]/, "", line);
  	  $0 = $0 " " line;
  	}
  	$0 = gensub(/(EXPORT_SYMBOL_NS[^(]*)\(([^,]+), ([^)]+)\)/,
  		    "\\1(\\2, \"\\3\")", "g");
        }
      }
      { print }' $file;
  done
Requested-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://mail.google.com/mail/u/2/#inbox/FMfcgzQXKWgMmjdFwwdsfgxzKpVHWPlc
Acked-by: Greg KH <gregkh@linuxfoundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
	
			
		
			
				
	
	
		
			166 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0
 | |
| /*
 | |
|  * Copyright 2023 Linaro Limited
 | |
|  * Copyright 2023 Intel Corporation
 | |
|  *
 | |
|  * Library routines for retrieving trip point temperature values from the
 | |
|  * platform firmware via ACPI.
 | |
|  */
 | |
| #include <linux/acpi.h>
 | |
| #include <linux/units.h>
 | |
| #include <linux/thermal.h>
 | |
| #include "internal.h"
 | |
| 
 | |
| /*
 | |
|  * Minimum temperature for full military grade is 218°K (-55°C) and
 | |
|  * max temperature is 448°K (175°C). We can consider those values as
 | |
|  * the boundaries for the [trips] temperature returned by the
 | |
|  * firmware. Any values out of these boundaries may be considered
 | |
|  * bogus and we can assume the firmware has no data to provide.
 | |
|  */
 | |
| #define TEMP_MIN_DECIK	2180ULL
 | |
| #define TEMP_MAX_DECIK	4480ULL
 | |
| 
 | |
| static int acpi_trip_temp(struct acpi_device *adev, char *obj_name,
 | |
| 			  int *ret_temp)
 | |
| {
 | |
| 	unsigned long long temp;
 | |
| 	acpi_status status;
 | |
| 
 | |
| 	status = acpi_evaluate_integer(adev->handle, obj_name, NULL, &temp);
 | |
| 	if (ACPI_FAILURE(status)) {
 | |
| 		acpi_handle_debug(adev->handle, "%s evaluation failed\n", obj_name);
 | |
| 		return -ENODATA;
 | |
| 	}
 | |
| 
 | |
| 	if (temp >= TEMP_MIN_DECIK && temp <= TEMP_MAX_DECIK) {
 | |
| 		*ret_temp = temp;
 | |
| 	} else {
 | |
| 		acpi_handle_debug(adev->handle, "%s result %llu out of range\n",
 | |
| 				  obj_name, temp);
 | |
| 		*ret_temp = THERMAL_TEMP_INVALID;
 | |
| 	}
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int acpi_active_trip_temp(struct acpi_device *adev, int id, int *ret_temp)
 | |
| {
 | |
| 	char obj_name[] = {'_', 'A', 'C', '0' + id, '\0'};
 | |
| 
 | |
| 	if (id < 0 || id > 9)
 | |
| 		return -EINVAL;
 | |
| 
 | |
| 	return acpi_trip_temp(adev, obj_name, ret_temp);
 | |
| }
 | |
| EXPORT_SYMBOL_NS_GPL(acpi_active_trip_temp, "ACPI_THERMAL");
 | |
| 
 | |
| int acpi_passive_trip_temp(struct acpi_device *adev, int *ret_temp)
 | |
| {
 | |
| 	return acpi_trip_temp(adev, "_PSV", ret_temp);
 | |
| }
 | |
| EXPORT_SYMBOL_NS_GPL(acpi_passive_trip_temp, "ACPI_THERMAL");
 | |
| 
 | |
| int acpi_hot_trip_temp(struct acpi_device *adev, int *ret_temp)
 | |
| {
 | |
| 	return acpi_trip_temp(adev, "_HOT", ret_temp);
 | |
| }
 | |
| EXPORT_SYMBOL_NS_GPL(acpi_hot_trip_temp, "ACPI_THERMAL");
 | |
| 
 | |
| int acpi_critical_trip_temp(struct acpi_device *adev, int *ret_temp)
 | |
| {
 | |
| 	return acpi_trip_temp(adev, "_CRT", ret_temp);
 | |
| }
 | |
| EXPORT_SYMBOL_NS_GPL(acpi_critical_trip_temp, "ACPI_THERMAL");
 | |
| 
 | |
| static int thermal_temp(int error, int temp_decik, int *ret_temp)
 | |
| {
 | |
| 	if (error)
 | |
| 		return error;
 | |
| 
 | |
| 	if (temp_decik == THERMAL_TEMP_INVALID)
 | |
| 		*ret_temp = THERMAL_TEMP_INVALID;
 | |
| 	else
 | |
| 		*ret_temp = deci_kelvin_to_millicelsius(temp_decik);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * thermal_acpi_active_trip_temp - Retrieve active trip point temperature
 | |
|  * @adev: Target thermal zone ACPI device object.
 | |
|  * @id: Active cooling level (0 - 9).
 | |
|  * @ret_temp: Address to store the retrieved temperature value on success.
 | |
|  *
 | |
|  * Evaluate the _ACx object for the thermal zone represented by @adev to obtain
 | |
|  * the temperature of the active cooling trip point corresponding to the active
 | |
|  * cooling level given by @id.
 | |
|  *
 | |
|  * Return 0 on success or a negative error value on failure.
 | |
|  */
 | |
| int thermal_acpi_active_trip_temp(struct acpi_device *adev, int id, int *ret_temp)
 | |
| {
 | |
| 	int temp_decik = 0;
 | |
| 	int ret = acpi_active_trip_temp(adev, id, &temp_decik);
 | |
| 
 | |
| 	return thermal_temp(ret, temp_decik, ret_temp);
 | |
| }
 | |
| EXPORT_SYMBOL_GPL(thermal_acpi_active_trip_temp);
 | |
| 
 | |
| /**
 | |
|  * thermal_acpi_passive_trip_temp - Retrieve passive trip point temperature
 | |
|  * @adev: Target thermal zone ACPI device object.
 | |
|  * @ret_temp: Address to store the retrieved temperature value on success.
 | |
|  *
 | |
|  * Evaluate the _PSV object for the thermal zone represented by @adev to obtain
 | |
|  * the temperature of the passive cooling trip point.
 | |
|  *
 | |
|  * Return 0 on success or -ENODATA on failure.
 | |
|  */
 | |
| int thermal_acpi_passive_trip_temp(struct acpi_device *adev, int *ret_temp)
 | |
| {
 | |
| 	int temp_decik = 0;
 | |
| 	int ret = acpi_passive_trip_temp(adev, &temp_decik);
 | |
| 
 | |
| 	return thermal_temp(ret, temp_decik, ret_temp);
 | |
| }
 | |
| EXPORT_SYMBOL_GPL(thermal_acpi_passive_trip_temp);
 | |
| 
 | |
| /**
 | |
|  * thermal_acpi_hot_trip_temp - Retrieve hot trip point temperature
 | |
|  * @adev: Target thermal zone ACPI device object.
 | |
|  * @ret_temp: Address to store the retrieved temperature value on success.
 | |
|  *
 | |
|  * Evaluate the _HOT object for the thermal zone represented by @adev to obtain
 | |
|  * the temperature of the trip point at which the system is expected to be put
 | |
|  * into the S4 sleep state.
 | |
|  *
 | |
|  * Return 0 on success or -ENODATA on failure.
 | |
|  */
 | |
| int thermal_acpi_hot_trip_temp(struct acpi_device *adev, int *ret_temp)
 | |
| {
 | |
| 	int temp_decik = 0;
 | |
| 	int ret = acpi_hot_trip_temp(adev, &temp_decik);
 | |
| 
 | |
| 	return thermal_temp(ret, temp_decik, ret_temp);
 | |
| }
 | |
| EXPORT_SYMBOL_GPL(thermal_acpi_hot_trip_temp);
 | |
| 
 | |
| /**
 | |
|  * thermal_acpi_critical_trip_temp - Retrieve critical trip point temperature
 | |
|  * @adev: Target thermal zone ACPI device object.
 | |
|  * @ret_temp: Address to store the retrieved temperature value on success.
 | |
|  *
 | |
|  * Evaluate the _CRT object for the thermal zone represented by @adev to obtain
 | |
|  * the temperature of the critical cooling trip point.
 | |
|  *
 | |
|  * Return 0 on success or -ENODATA on failure.
 | |
|  */
 | |
| int thermal_acpi_critical_trip_temp(struct acpi_device *adev, int *ret_temp)
 | |
| {
 | |
| 	int temp_decik = 0;
 | |
| 	int ret = acpi_critical_trip_temp(adev, &temp_decik);
 | |
| 
 | |
| 	return thermal_temp(ret, temp_decik, ret_temp);
 | |
| }
 | |
| EXPORT_SYMBOL_GPL(thermal_acpi_critical_trip_temp);
 |