Re: Avoid critical temp shutdowns on specific ThinkPad T4x(p) and R50p

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2008-07-30 at 15:56 +0200, Thomas Renninger wrote:
> This came in in OpenSUSE 10.3. When we still had overriden thermal polling
> frequency (what we probably will do again soon). It has been tested that
> specific ThinkPads do not throw a thermal event when exceeding the passive
> trip point. Even thermal polling was not enough...
> As no other solution has been found meanwhile and it seems Windows is also
> using a virtual passive trip point:
> [Bug 10658] thermal shutdown - Dell Precision M20, Latitude D610
> http://bugzilla.kernel.org/show_bug.cgi?id=10658
> it would be great to get this integrated into the mainline kernel.
> 
> BTW, the patch from Matthew in above bug, will this in some way be
> integerated mainline? Otherwise we'll have to maintain this one ourself.

Matthew has a new patch series which implement this in the generic
thermal sysfs driver, which looks good IMO.
http://marc.info/?l=linux-acpi&m=121320356423139&w=2

will you review them?

thanks,
rui

> 
> From: Thomas Renninger <trenn@xxxxxxx>
> Subject: Avoid critical temp shutdowns on specific ThinkPad T4x(p) and R50p
> References: https://bugzilla.novell.com/show_bug.cgi?id=333043
> 
> ---
>  drivers/acpi/thermal.c |   73 +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 73 insertions(+)
> 
> Index: linux-2.6.25-SL110_BRANCH/drivers/acpi/thermal.c
> ===================================================================
> --- linux-2.6.25-SL110_BRANCH.orig/drivers/acpi/thermal.c
> +++ linux-2.6.25-SL110_BRANCH/drivers/acpi/thermal.c
> @@ -42,6 +42,7 @@
>  #include <linux/kmod.h>
>  #include <linux/seq_file.h>
>  #include <linux/reboot.h>
> +#include <linux/dmi.h>
>  #include <asm/uaccess.h>
>  #include <linux/thermal.h>
>  #include <acpi/acpi_bus.h>
> @@ -1576,6 +1577,66 @@ static int acpi_thermal_get_info(struct
>  	return 0;
>  }
>  
> +static struct dmi_system_id thermal_psv_dmi_table[] = {
> +	{
> +		.ident = "IBM ThinkPad T41",
> +		.matches = {
> +			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
> +			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad T41"),
> +		},
> +	},
> +	{
> +		.ident = "IBM ThinkPad T42",
> +		.matches = {
> +			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
> +			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad T42"),
> +		},
> +	},
> +	{
> +		.ident = "IBM ThinkPad T43",
> +		.matches = {
> +			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
> +			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad T43"),
> +		},
> +	},
> +	{
> +		.ident = "IBM ThinkPad T41p",
> +		.matches = {
> +			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
> +			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad T41p"),
> +		},
> +	},
> +	{
> +		.ident = "IBM ThinkPad T42p",
> +		.matches = {
> +			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
> +			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad T42p"),
> +		},
> +	},
> +	{
> +		.ident = "IBM ThinkPad T43p",
> +		.matches = {
> +			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
> +			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad T43p"),
> +		},
> +	},
> +	{
> +		.ident = "IBM ThinkPad R40",
> +		.matches = {
> +			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
> +			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad R40"),
> +		},
> +	},
> +	{
> +		.ident = "IBM ThinkPad R50p",
> +		.matches = {
> +			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
> +			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad R50p"),
> +		},
> +	},
> +	{},
> +};
> +
>  static int acpi_thermal_add(struct acpi_device *device)
>  {
>  	int result = 0;
> @@ -1606,6 +1667,18 @@ static int acpi_thermal_add(struct acpi_
>  	if (result)
>  		goto free_memory;
>  
> +	if (dmi_check_system(thermal_psv_dmi_table)) {
> +		if (tz->trips.passive.flags.valid &&
> +		    tz->trips.passive.temperature > CELSIUS_TO_KELVIN(85)) {
> +			printk (KERN_INFO "Adjust passive trip point from %lu"
> +				" to %lu\n",
> +				KELVIN_TO_CELSIUS(tz->trips.passive.temperature),
> +				KELVIN_TO_CELSIUS(tz->trips.passive.temperature - 150));
> +			tz->trips.passive.temperature -= 150;
> +			acpi_thermal_set_polling(tz, 5);
> +		}
> +	}
> +
>  	result = acpi_thermal_add_fs(device);
>  	if (result)
>  		goto unregister_thermal_zone;
> --
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux