From 29f42b5b30a8841d449dc825cf41f2d8ee956517 Mon Sep 17 00:00:00 2001 From: Chris E Ferron Date: Wed, 14 Nov 2012 08:56:10 -0800 Subject: fixed issues with p-state reported CPU frequencies (actually, uninitialized values ) extended from fix for i965 monitoring. Also found UI titles missing, so repleaced them. --- src/cpu/cpu_core.cpp | 10 ++++++++++ src/cpu/cpu_linux.cpp | 10 ++++++++++ src/cpu/cpu_package.cpp | 13 ++++++++++++- src/cpu/intel_cpus.cpp | 18 +++++++++++++++++- 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/cpu/cpu_core.cpp b/src/cpu/cpu_core.cpp index 593d5f6..b0dd4da 100644 --- a/src/cpu/cpu_core.cpp +++ b/src/cpu/cpu_core.cpp @@ -42,6 +42,11 @@ char * cpu_core::fill_cstate_line(int line_nr, char *buffer, const char *separat unsigned int i; buffer[0] = 0; + if (line_nr == LEVEL_HEADER) { + sprintf(buffer,_(" Core")); + return buffer; + } + for (i = 0; i < cstates.size(); i++) { if (cstates[i]->line_level != line_nr) continue; @@ -181,6 +186,11 @@ char * cpu_core::fill_pstate_line(int line_nr, char *buffer) total_stamp = 1; } + if (line_nr == LEVEL_HEADER) { + sprintf(buffer,_(" Core")); + return buffer; + } + if (line_nr >= (int)pstates.size() || line_nr < 0) return buffer; diff --git a/src/cpu/cpu_linux.cpp b/src/cpu/cpu_linux.cpp index f5e269e..d6caf45 100644 --- a/src/cpu/cpu_linux.cpp +++ b/src/cpu/cpu_linux.cpp @@ -227,6 +227,11 @@ char * cpu_linux::fill_cstate_line(int line_nr, char *buffer, const char *separa unsigned int i; buffer[0] = 0; + if (line_nr == LEVEL_HEADER) { + sprintf(buffer,_(" CPU %i"), number); + return buffer; + } + for (i = 0; i < cstates.size(); i++) { if (cstates[i]->line_level != line_nr) continue; @@ -321,6 +326,11 @@ char * cpu_linux::fill_pstate_line(int line_nr, char *buffer) total_stamp = 1; } + if (line_nr == LEVEL_HEADER) { + sprintf(buffer,_(" CPU %i"), number); + return buffer; + } + if (line_nr >= (int)pstates.size() || line_nr < 0) return buffer; diff --git a/src/cpu/cpu_package.cpp b/src/cpu/cpu_package.cpp index 2e2e8a3..b9d4c19 100644 --- a/src/cpu/cpu_package.cpp +++ b/src/cpu/cpu_package.cpp @@ -42,6 +42,11 @@ char * cpu_package::fill_cstate_line(int line_nr, char *buffer, const char *sepa unsigned int i; buffer[0] = 0; + if (line_nr == LEVEL_HEADER) { + sprintf(buffer,_("Package")); + return buffer; + } + for (i = 0; i < cstates.size(); i++) { if (cstates[i]->line_level != line_nr) continue; @@ -94,6 +99,12 @@ char * cpu_package::fill_pstate_line(int line_nr, char *buffer) total_stamp = 1; } + + if (line_nr == LEVEL_HEADER) { + sprintf(buffer,_(" Package")); + return buffer; + } + if (line_nr >= (int)pstates.size() || line_nr < 0) return buffer; @@ -149,7 +160,7 @@ void cpu_package::calculate_freq(uint64_t time) /* calculate the maximum frequency of all children */ for (i = 0; i < children.size(); i++) - if (children[i]) { + if (children[i] && children[i]->has_pstates()) { uint64_t f = 0; if (!children[i]->idle) { f = children[i]->current_frequency; diff --git a/src/cpu/intel_cpus.cpp b/src/cpu/intel_cpus.cpp index 24465a0..f7b86bc 100644 --- a/src/cpu/intel_cpus.cpp +++ b/src/cpu/intel_cpus.cpp @@ -292,6 +292,11 @@ char * nhm_core::fill_pstate_line(int line_nr, char *buffer) total_stamp = 1; } + if (line_nr == LEVEL_HEADER) { + sprintf(buffer,_(" Core")); + return buffer; + } + if (line_nr >= (int)pstates.size() || line_nr < 0) return buffer; @@ -311,6 +316,12 @@ char * nhm_package::fill_pstate_line(int line_nr, char *buffer) total_stamp = 1; } + + if (line_nr == LEVEL_HEADER) { + sprintf(buffer,_(" Package")); + return buffer; + } + if (line_nr >= (int)pstates.size() || line_nr < 0) return buffer; @@ -460,7 +471,7 @@ void nhm_package::calculate_freq(uint64_t time) /* calculate the maximum frequency of all children */ for (i = 0; i < children.size(); i++) - if (children[i]) { + if (children[i] && children[i]->has_pstates()) { uint64_t f = 0; if (!children[i]->idle) { f = children[i]->current_frequency; @@ -588,6 +599,11 @@ char * nhm_cpu::fill_pstate_line(int line_nr, char *buffer) total_stamp = 1; } + if (line_nr == LEVEL_HEADER) { + sprintf(buffer,_(" CPU %i"), number); + return buffer; + } + if (line_nr == LEVEL_C0) { double F; F = 1.0 * (tsc_after - tsc_before) * (aperf_after - aperf_before) / (mperf_after - mperf_before) / time_factor * 1000; -- cgit v1.2.3