Skip to contentSkip to conversation

ondemand governor and passive cooling broken?

DISCUSSION Thomas Renninger 2 participants 3 messages Aug 3, 2005 – Aug 21, 2005

lore
Share & tools
lore
#0 lore raw

Machine is a Thinkpad with a Pentium M ~1700MHz running with the speedstep-centrino module.

Something seems to be wrong with the cooling system and the CPU temp goes up from 50 C to 90 C in about a minute.

With the userspace governor the machine stays at 1200 MHz on full load and bounces around 80C (passive trip point), that's how it should be.

However, passive cooling seems to be broken with current kernels and ondemand governor?
Machine stays at 1700 MHz until critical shutdown (94 C).

Is passive cooling supposed to work with the ondemand governor? If yes, can someone confirm seeing it working with old kernels and the speedstep-centrino module?

Thanks,

Thomas

#1 lore raw

Hi,

With which kernel do you see this behaviour? Can you re-test with 2.6.12.x, please?

Thanks,
Dominik

#2 lore raw

Hi,

This makes ondemand governor aware of thermal limits.
The policy was buffered and new policy values never reached the governor.

I just used the cpufreq_get_policy call every time the load is checked, maybe the new policy should be made available via notifier as it is done for the cur_freq in the userspace governor?
If this sounds reasonable I can come up with a bigger patch on Monday.

However, thermal cooling still does not always work right:

- Sometimes the limit is not decreased correctly in polling frequency time (I saw it at max for more than 20 secs, polling freq 5 secs, passive tp exceeded). Strange enough, that seems to happen only in rare cases.
- I also saw the limit stuck at lowest frequency even after getting back in normal temperature zones.
- And once you entered passive cooling you always see the "cooling: passive" flag set in /proc/acpi/thermal_zone/*/cooling_mode

Thomas

cpufreq/cpufreq_ondemand.c 2005-08-20 19:28:04.000000000 -0600 renamed from cpufreq/cpufreq_ondemand.c.orig 2005-08-20 19:26:18.000000000 -0600 +4 -0
@@ -254,6 +254,10 @@
        if (!this_dbs_info->enable)
                return;
 
+       int ret = cpufreq_get_policy(this_dbs_info->cur_policy, cpu);
+       if (ret)
+               return;
+
        policy = this_dbs_info->cur_policy;
        /*
         * Every sampling_rate, we check, if current idle time is less