diff --git a/powertop-2.9-intel-cpu-check-aperf.patch b/powertop-2.9-intel-cpu-check-aperf.patch new file mode 100644 index 0000000..4793685 --- /dev/null +++ b/powertop-2.9-intel-cpu-check-aperf.patch @@ -0,0 +1,66 @@ +diff --git a/src/cpu/cpu.cpp b/src/cpu/cpu.cpp +index f3711f5..019d922 100644 +--- a/src/cpu/cpu.cpp ++++ b/src/cpu/cpu.cpp +@@ -68,7 +68,7 @@ static class abstract_cpu * new_package(int package, int cpu, char * vendor, int + char packagename[128]; + if (strcmp(vendor, "GenuineIntel") == 0) + if (family == 6) +- if (is_supported_intel_cpu(model)) ++ if (is_supported_intel_cpu(model, cpu)) + ret = new class nhm_package(model); + + if (!ret) +@@ -105,7 +105,7 @@ static class abstract_cpu * new_core(int core, int cpu, char * vendor, int famil + + if (strcmp(vendor, "GenuineIntel") == 0) + if (family == 6) +- if (is_supported_intel_cpu(model)) ++ if (is_supported_intel_cpu(model, cpu)) + ret = new class nhm_core(model); + + if (!ret) +@@ -134,7 +134,7 @@ static class abstract_cpu * new_cpu(int number, char * vendor, int family, int m + + if (strcmp(vendor, "GenuineIntel") == 0) + if (family == 6) +- if (is_supported_intel_cpu(model)) ++ if (is_supported_intel_cpu(model, number)) + ret = new class nhm_cpu; + + if (!ret) +diff --git a/src/cpu/intel_cpus.cpp b/src/cpu/intel_cpus.cpp +index 4c7b315..0030dba 100644 +--- a/src/cpu/intel_cpus.cpp ++++ b/src/cpu/intel_cpus.cpp +@@ -77,13 +77,15 @@ static int intel_cpu_models[] = { + + static int intel_pstate_driver_loaded = -1; + +-int is_supported_intel_cpu(int model) ++int is_supported_intel_cpu(int model, int cpu) + { + int i; ++ uint64_t msr; + + for (i = 0; intel_cpu_models[i] != 0; i++) + if (model == intel_cpu_models[i]) +- return 1; ++ if (cpu < 0 || read_msr(cpu, MSR_APERF, &msr) >= 0) ++ return 1; + + return 0; + } +diff --git a/src/cpu/intel_cpus.h b/src/cpu/intel_cpus.h +index d20db9a..79afb98 100644 +--- a/src/cpu/intel_cpus.h ++++ b/src/cpu/intel_cpus.h +@@ -172,7 +172,7 @@ public: + + }; + +-int is_supported_intel_cpu(int model); ++int is_supported_intel_cpu(int model, int cpu); + int byt_has_ahci(); + + int is_intel_pstate_driver_loaded();