Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Xen: Changelog

[xen-unstable] x86/cpuidle: clean up statistics reporting to user mode

 

 

Xen changelog RSS feed   Index | Next | Previous | View Threaded


patchbot at xen

Aug 10, 2012, 5:11 PM

Post #1 of 1 (37 views)
Permalink
[xen-unstable] x86/cpuidle: clean up statistics reporting to user mode

# HG changeset patch
# User Jan Beulich <jbeulich [at] suse>
# 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 [at] suse>
Acked-by: Keir Fraser <keir [at] xen>
---


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 [at] lists
http://lists.xensource.com/xen-changelog

Xen changelog RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.