WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] 1/2: cpufreq/PowerNow! in Xen: Time and platform

To: Keir Fraser <keir@xxxxxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] 1/2: cpufreq/PowerNow! in Xen: Time and platform changes
From: Rik van Riel <riel@xxxxxxxxxx>
Date: Thu, 30 Aug 2007 14:23:28 -0400
Cc: "Tian, Kevin" <kevin.tian@xxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxx, "Langsdorf, Mark" <mark.langsdorf@xxxxxxx>
Delivery-date: Thu, 30 Aug 2007 11:24:10 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <C2FC9B0B.150B9%keir@xxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: Red Hat, Inc
References: <C2FC9B0B.150B9%keir@xxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 1.5.0.7 (X11/20061008)
Keir Fraser wrote:

It's a misleading simplification. For example, the ondemand governor will
build and run in a dom0 kernel but it's not actually going to do the right
thing, as it doesn't observe whole-machine load.

Here is the missing piece of the puzzle.   A platform
hypercall operation to get system wide idle time.

I believe Mark's changes, together with this little
patch, are the way we can get cpufreq working on
Xen with the minimal amount of code duplication.

Duplicating code anywhere, whether it be inside the
hypervisor or in some Xen-only userland package, will
only lead to bit rot and make Xen maintenance more
painful.

Signed-off-by: Rik van Riel <riel@xxxxxxxxxx>

--
Politics is the struggle between those who want to make their country
the best in the world, and those who believe it already is.  Each group
calls the other unpatriotic.
diff -r 81c9213b3d39 xen/include/public/platform.h
--- a/xen/include/public/platform.h     Tue Nov 28 18:41:42 2006 +0000
+++ b/xen/include/public/platform.h     Thu Aug 30 14:18:04 2007 -0400
@@ -114,6 +114,19 @@ typedef struct xenpf_platform_quirk xenp
 typedef struct xenpf_platform_quirk xenpf_platform_quirk_t;
 DEFINE_XEN_GUEST_HANDLE(xenpf_platform_quirk_t);
 
+typedef uint64_t cputime_t;
+DEFINE_XEN_GUEST_HANDLE(cputime_t);
+#define XENPF_getidletime         40
+struct xenpf_getidletime {
+    /* IN variables. */
+    uint32_t           max_cpus;
+    XEN_GUEST_HANDLE(uint64_t) buffer;
+    /* OUT variables. */
+    uint32_t           num_cpus;
+};
+typedef struct xenpf_getidletime xenpf_getidletime_t;
+DEFINE_XEN_GUEST_HANDLE(xenpf_getidletime_t);
+
 struct xen_platform_op {
     uint32_t cmd;
     uint32_t interface_version; /* XENPF_INTERFACE_VERSION */
@@ -124,6 +137,7 @@ struct xen_platform_op {
         struct xenpf_read_memtype      read_memtype;
         struct xenpf_microcode_update  microcode;
         struct xenpf_platform_quirk    platform_quirk;
+        struct xenpf_getidletime       getidletime;
         uint8_t                        pad[128];
     } u;
 };
diff -r 81c9213b3d39 xen/arch/x86/platform_hypercall.c
--- a/xen/arch/x86/platform_hypercall.c Tue Nov 28 18:41:42 2006 +0000
+++ b/xen/arch/x86/platform_hypercall.c Thu Aug 30 14:18:12 2007 -0400
@@ -138,6 +138,31 @@ long do_platform_op(XEN_GUEST_HANDLE(xen
     }
     break;
 
+    case XENPF_getidletime:
+    {
+        uint32_t cpu;
+        uint32_t max_cpus = op->u.getidletime.max_cpus;
+        uint64_t idletime;
+
+        for_each_online_cpu (cpu) {
+            if ( cpu >= max_cpus )
+                break;
+
+            idletime = idle_vcpu[cpu]->runstate.time[RUNSTATE_running];
+
+            if ( copy_to_guest_offset(op->u.getidletime.buffer, cpu, 
&idletime, 1) ) {
+                ret = -EFAULT;
+                break;
+            }
+        }
+
+        op->u.getidletime.num_cpus = cpu;
+
+        if ( copy_to_guest(u_xenpf_op, op, 1) )
+            ret = -EFAULT;
+    }
+    break;
+
     default:
         ret = -ENOSYS;
         break;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>