diff --unified --recursive --new-file linux-2.6.5/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c linux-2.6.5.speedstep/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c --- linux-2.6.5/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c 2004-06-07 20:49:36.000000000 +0000 +++ linux-2.6.5.speedstep/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c 2004-06-08 22:56:06.911397232 +0000 @@ -210,8 +210,17 @@ ebx = cpuid_ebx(0x00000001); ebx &= 0x000000FF; - dprintk(KERN_INFO "ebx value is %x, x86_mask is %x\n", ebx, c->86_mask); + dprintk(KERN_INFO "ebx value is %x\n", ebx); + dprintk(KERN_INFO "model_id is %s\n", c->x86_model_id); + + /* + * If the x86_model_id string contais "Mobile Intel(R) Pentium(R) 4" + * omit all other checks and treat the CPU as a M-P4-M + */ + if (strstr(c->x86_model_id,"Mobile Intel(R) Pentium(R) 4") != NULL) + return SPEEDSTEP_PROCESSOR_P4M; + switch (c->x86_mask) { case 4: /* @@ -248,6 +257,7 @@ * So, how to distinguish all those processors with * ebx=0xf? I don't know. Sort them out, and wait * for someone to complain. + * also, M-P4M HTs actually have ebx=0x8, too */ if (ebx == 0x0e) return SPEEDSTEP_PROCESSOR_P4M;