Index: trunk/i386/libsaio/cpu.c =================================================================== --- trunk/i386/libsaio/cpu.c (revision 1196) +++ trunk/i386/libsaio/cpu.c (revision 1197) @@ -463,15 +463,19 @@ case 0x01: /* K10 */ msr = rdmsr64(K10_COFVID_STATUS); - //uint64_t mperf = measure_mperf_frequency(); - uint64_t aperf = measure_aperf_frequency(); + do_cpuid2(0x00000006, 0, p->CPU.CPUID[CPUID_6]); + if(bitfield(p->CPU.CPUID[CPUID_6][2], 0, 0) == 1) // EffFreq: effective frequency interface + { + //uint64_t mperf = measure_mperf_frequency(); + uint64_t aperf = measure_aperf_frequency(); + cpuFrequency = aperf; + } // NOTE: tsc runs at the maccoeff (non turbo) // *not* at the turbo frequency. maxcoef = bitfield(msr, 54, 49) / 2 + 4; currcoef = bitfield(msr, 5, 0) + 0x10; currdiv = 2 << bitfield(msr, 8, 6); - cpuFrequency = aperf; break; case 0x05: /* K14 */ Index: trunk/i386/libsaio/platform.h =================================================================== --- trunk/i386/libsaio/platform.h (revision 1196) +++ trunk/i386/libsaio/platform.h (revision 1197) @@ -23,10 +23,11 @@ #define CPUID_2 2 #define CPUID_3 3 #define CPUID_4 4 -#define CPUID_80 5 -#define CPUID_81 6 -#define CPUID_88 7 -#define CPUID_MAX 8 +#define CPUID_6 5 +#define CPUID_80 6 +#define CPUID_81 7 +#define CPUID_88 8 +#define CPUID_MAX 9 #define CPU_MODEL_YONAH 0x0E // Sossaman, Yonah #define CPU_MODEL_MEROM 0x0F // Allendale, Conroe, Kentsfield, Woodcrest, Clovertown, Tigerton, Merom