From: Dominik Brodowski <linux@brodo.de>
To: davej@codemonkey.org.uk, cpufreq@www.linux.org.uk
Subject: [PATCH][BUG #1422] avoid hang with speedstep-smi on Dell Latitude C600
Date: Wed, 12 Nov 2003 18:58:49 +0100 [thread overview]
Message-ID: <20031112175849.GA5946@brodo.de> (raw)
[ http://bugme.osdl.org/show_bug.cgi?id=1422 ]
The speedstep_smi_get_freqs call caused a hang on a Dell C600. On
some other systems, the speedstep_smi_get_freqs call fails even though
this cpufreq driver works fine otherwise. All these systems have one
thing in common: ist_info.event is either 0x00000000 or 0x00ff0000. So,
don't call speedstep_smi_get_freqs on these systems.
diff -ruN linux-original/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c linux/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
--- linux-original/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c 2003-11-11 22:32:49.847042344 +0100
+++ linux/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c 2003-11-11 22:38:01.990589312 +0100
@@ -86,6 +86,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)
{
@@ -226,17 +229,23 @@
result = speedstep_smi_ownership();
- if (result)
+ if (result) {
dprintk(KERN_INFO "cpufreq: fails an aquiring ownership of a SMI interface.\n");
+ return -EINVAL;
+ }
/* detect low and high frequency */
- result = speedstep_smi_get_freqs(&speedstep_freqs[SPEEDSTEP_LOW].frequency,
+ if (ist_info.event & 0xFFFF) {
+ result = speedstep_smi_get_freqs(&speedstep_freqs[SPEEDSTEP_LOW].frequency,
&speedstep_freqs[SPEEDSTEP_HIGH].frequency);
- if (result) {
+ if (result) {
+ dprintk(KERN_INFO PFX "could not detect low and high frequencies by SMI call.\n");
+ }
+ }
+ if ((result) || !(ist_info.event & 0xFFFF)) {
/* fall back to speedstep_lib.c dection mechanism: try both states out */
unsigned int speedstep_processor = speedstep_detect_processor();
- dprintk(KERN_INFO PFX "could not detect low and high frequencies by SMI call.\n");
if (!speedstep_processor)
return -ENODEV;
@@ -248,8 +257,7 @@
if (result) {
dprintk(KERN_INFO PFX "could not detect two different speeds -- aborting.\n");
return result;
- } else
- dprintk(KERN_INFO PFX "workaround worked.\n");
+ }
}
/* get current speed setting */
reply other threads:[~2003-11-12 17:58 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20031112175849.GA5946@brodo.de \
--to=linux@brodo.de \
--cc=cpufreq@www.linux.org.uk \
--cc=davej@codemonkey.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.