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 <[EMAIL PROTECTED]>
> 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 [EMAIL PROTECTED]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
ibm-acpi-devel mailing list
ibm-acpi-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ibm-acpi-devel

Reply via email to