Skip to contentSkip to conversation

speedstep-smi: disable smi_detect_freqs() on buggy systems (bug #1422)

PATCH In review Dominik Brodowski 1 participant 1 message Nov 19, 2003

lore
Share & tools
lore
#0 lore raw

PATCH 1/8 speedstep-smi: disable smi_detect_freqs() on buggy systems (bug #1422)

The SMI call in speedstep_smi_get_freqs causes hangs on certain notebooks. A failure of the function itself is non-critical, as a workaround exists.

 arch/i386/kernel/cpu/cpufreq/speedstep-smi.c |    6 ++++++
 1 files changed, 6 insertions(+)
arch/i386/kernel/cpu/cpufreq/speedstep-smi.c +6 -0
diff -ruN linux-original/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c linux/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
@@ -85,6 +85,9 @@
 
 /**
  * speedstep_smi_get_freqs - get SpeedStep preferred & current freq.
+ * Only available on later SpeedStep-enabled systems, returns false results or
+ * even hangs [cf. bugme.osdl.org # 1422] on earlier systems. Empirical testing
+ * shows that the latter occurs if !(ist_info.event & 0xFFFF).
  *
  */
 static int speedstep_smi_get_freqs (unsigned int *low, unsigned int *high)
@@ -93,6 +96,9 @@
 	u32 state=0;
 	u32 function = GET_SPEEDSTEP_FREQS;
 
+	if (!(ist_info.event & 0xFFFF))
+		return -ENODEV;
+
 	command = (smi_sig & 0xffffff00) | (smi_cmd & 0xff);
 
 	__asm__ __volatile__("movl $0, %%edi\n"