[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


  • To: xen-changelog@xxxxxxxxxxxxxxxxxxx
  • From: Xen patchbot-unstable <patchbot@xxxxxxx>
  • Date: Sat, 11 Aug 2012 00:11:08 +0000
  • Delivery-date: Sat, 11 Aug 2012 00:11:31 +0000
  • List-id: "Change log for Mercurial \(receive only\)" <xen-changelog.lists.xen.org>

# 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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.