[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86/cpuidle: clean up statistics reporting to user mode
# HG changeset patch # User Jan Beulich <jbeulich@xxxxxxxx> # Date 1344602477 -7200 # Node ID dc4970af48a0a2d7a3e54233bc1aa5e0da0fe44a # Parent 47080c96593702acd4145c5a1175b7d7f8f0679d x86/cpuidle: clean up statistics reporting to user mode First of all, when no ACPI Cx data was reported, make sure the usage count passed back to user mode is not random. Besides that, fold a lot of redundant code. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Keir Fraser <keir@xxxxxxx> --- diff -r 47080c965937 -r dc4970af48a0 xen/arch/x86/acpi/cpu_idle.c --- a/xen/arch/x86/acpi/cpu_idle.c Fri Aug 10 09:51:01 2012 +0200 +++ b/xen/arch/x86/acpi/cpu_idle.c Fri Aug 10 14:41:17 2012 +0200 @@ -1100,36 +1100,23 @@ int pmstat_get_cx_stat(uint32_t cpuid, s } stat->last = power->last_state ? power->last_state->idx : 0; - stat->nr = power->count; stat->idle_time = get_cpu_idle_time(cpuid); /* mimic the stat when detail info hasn't been registered by dom0 */ if ( pm_idle_save == NULL ) { - /* C1 */ - usage[1] = 1; - res[1] = stat->idle_time; + stat->nr = 2; - /* C0 */ - res[0] = NOW() - res[1]; + usage[1] = idle_usage = 1; + res[1] = idle_res = stat->idle_time; - if ( copy_to_guest_offset(stat->triggers, 0, &usage[0], 2) || - copy_to_guest_offset(stat->residencies, 0, &res[0], 2) ) - return -EFAULT; + memset(&hw_res, 0, sizeof(hw_res)); + } + else + { + stat->nr = power->count; - stat->pc2 = 0; - stat->pc3 = 0; - stat->pc6 = 0; - stat->pc7 = 0; - stat->cc3 = 0; - stat->cc6 = 0; - stat->cc7 = 0; - return 0; - } - - for ( i = power->count - 1; i >= 0; i-- ) - { - if ( i != 0 ) + for ( i = 1; i < power->count; i++ ) { spin_lock_irq(&power->stat_lock); usage[i] = power->states[i].usage; @@ -1139,19 +1126,17 @@ int pmstat_get_cx_stat(uint32_t cpuid, s idle_usage += usage[i]; idle_res += res[i]; } - else - { - usage[i] = idle_usage; - res[i] = NOW() - idle_res; - } + + get_hw_residencies(cpuid, &hw_res); } - if ( copy_to_guest_offset(stat->triggers, 0, &usage[0], power->count) || - copy_to_guest_offset(stat->residencies, 0, &res[0], power->count) ) + usage[0] = idle_usage; + res[0] = NOW() - idle_res; + + if ( copy_to_guest(stat->triggers, usage, stat->nr) || + copy_to_guest(stat->residencies, res, stat->nr) ) return -EFAULT; - get_hw_residencies(cpuid, &hw_res); - stat->pc2 = hw_res.pc2; stat->pc3 = hw_res.pc3; stat->pc6 = hw_res.pc6; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |