[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] More getcpuinfo sysctl cleanup.



# HG changeset patch
# User Keir Fraser <keir@xxxxxxxxxxxxx>
# Date 1182977023 -3600
# Node ID 3362de397f1e78d43edc0888d4500b4ae21b7af4
# Parent  806dc0aca7475fafc79824e8366274ef1efb5051
More getcpuinfo sysctl cleanup.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 tools/libxc/xc_misc.c       |   41 +++++++++++++++++++++++------------------
 tools/libxc/xenctrl.h       |    4 +++-
 xen/common/sysctl.c         |   14 +++++++-------
 xen/include/public/sysctl.h |   27 +++++++++++++++------------
 4 files changed, 48 insertions(+), 38 deletions(-)

diff -r 806dc0aca747 -r 3362de397f1e tools/libxc/xc_misc.c
--- a/tools/libxc/xc_misc.c     Wed Jun 27 21:28:19 2007 +0100
+++ b/tools/libxc/xc_misc.c     Wed Jun 27 21:43:43 2007 +0100
@@ -101,30 +101,35 @@ int xc_perfc_control(int xc_handle,
 
     rc = do_sysctl(xc_handle, &sysctl);
 
-    if (nbr_desc)
+    if ( nbr_desc )
         *nbr_desc = sysctl.u.perfc_op.nr_counters;
-    if (nbr_val)
+    if ( nbr_val )
         *nbr_val = sysctl.u.perfc_op.nr_vals;
 
     return rc;
 }
 
-int xc_cpuinfo(int xc_handle, int max_cpus, uint64_t *info, int *nr_cpus)
-{
-    int ret;
-    DECLARE_SYSCTL;
-
-    sysctl.cmd = XEN_SYSCTL_cpuinfo;
-    sysctl.u.cpuinfo.max_cpus = max_cpus; 
-    set_xen_guest_handle(sysctl.u.cpuinfo.buffer, info); 
-
-    if ( (ret = do_sysctl(xc_handle, &sysctl)) != 0 )
-        return ret;
-
-    if(nr_cpus) 
-        *nr_cpus = sysctl.u.cpuinfo.nr_cpus; 
-
-    return 0;
+int xc_getcpuinfo(int xc_handle, int max_cpus,
+                  xc_cpuinfo_t *info, int *nr_cpus)
+{
+    int rc;
+    DECLARE_SYSCTL;
+
+    sysctl.cmd = XEN_SYSCTL_getcpuinfo;
+    sysctl.u.getcpuinfo.max_cpus = max_cpus; 
+    set_xen_guest_handle(sysctl.u.getcpuinfo.info, info); 
+
+    if ( (rc = lock_pages(info, max_cpus*sizeof(*info))) != 0 )
+        return rc;
+
+    rc = do_sysctl(xc_handle, &sysctl);
+
+    unlock_pages(info, max_cpus*sizeof(*info));
+
+    if ( nr_cpus )
+        *nr_cpus = sysctl.u.getcpuinfo.nr_cpus; 
+
+    return rc;
 }
 
 
diff -r 806dc0aca747 -r 3362de397f1e tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h     Wed Jun 27 21:28:19 2007 +0100
+++ b/tools/libxc/xenctrl.h     Wed Jun 27 21:43:43 2007 +0100
@@ -479,7 +479,9 @@ int xc_sched_id(int xc_handle,
 int xc_sched_id(int xc_handle,
                 int *sched_id);
 
-int xc_cpuinfo(int xc_handle, int max_cpus, uint64_t *info, int *nr_cpus); 
+typedef xen_sysctl_cpuinfo_t xc_cpuinfo_t;
+int xc_getcpuinfo(int xc_handle, int max_cpus,
+                  xc_cpuinfo_t *info, int *nr_cpus); 
 
 int xc_domain_setmaxmem(int xc_handle,
                         uint32_t domid,
diff -r 806dc0aca747 -r 3362de397f1e xen/common/sysctl.c
--- a/xen/common/sysctl.c       Wed Jun 27 21:28:19 2007 +0100
+++ b/xen/common/sysctl.c       Wed Jun 27 21:43:43 2007 +0100
@@ -136,13 +136,13 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysc
     }
     break;
 
-    case XEN_SYSCTL_cpuinfo:
+    case XEN_SYSCTL_getcpuinfo:
     {
         uint32_t i, nr_cpus;
-        uint64_t idletime;
+        struct xen_sysctl_cpuinfo cpuinfo;
         struct vcpu *v;
 
-        nr_cpus = min_t(uint32_t, op->u.cpuinfo.max_cpus, NR_CPUS);
+        nr_cpus = min_t(uint32_t, op->u.getcpuinfo.max_cpus, NR_CPUS);
 
         for ( i = 0; i < nr_cpus; i++ )
         {
@@ -150,18 +150,18 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysc
             if ( (v = idle_vcpu[i]) == NULL )
                 break;
 
-            idletime = v->runstate.time[RUNSTATE_running];
+            cpuinfo.idletime = v->runstate.time[RUNSTATE_running];
             if ( v->is_running )
-                idletime += NOW() - v->runstate.state_entry_time;
+                cpuinfo.idletime += NOW() - v->runstate.state_entry_time;
 
-            if ( copy_to_guest_offset(op->u.cpuinfo.buffer, i, &idletime, 1) )
+            if ( copy_to_guest_offset(op->u.getcpuinfo.info, i, &cpuinfo, 1) )
             {
                 ret = -EFAULT;
                 break;
             }
         }
 
-        op->u.cpuinfo.nr_cpus = i;
+        op->u.getcpuinfo.nr_cpus = i;
         ret = 0;
 
         if ( copy_to_guest(u_sysctl, op, 1) )
diff -r 806dc0aca747 -r 3362de397f1e xen/include/public/sysctl.h
--- a/xen/include/public/sysctl.h       Wed Jun 27 21:28:19 2007 +0100
+++ b/xen/include/public/sysctl.h       Wed Jun 27 21:43:43 2007 +0100
@@ -140,9 +140,7 @@ typedef struct xen_sysctl_getdomaininfol
 typedef struct xen_sysctl_getdomaininfolist xen_sysctl_getdomaininfolist_t;
 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getdomaininfolist_t);
 
-/*
- * Inject debug keys into Xen.
- */
+/* Inject debug keys into Xen. */
 #define XEN_SYSCTL_debug_keys        7
 struct xen_sysctl_debug_keys {
     /* IN variables. */
@@ -152,17 +150,22 @@ typedef struct xen_sysctl_debug_keys xen
 typedef struct xen_sysctl_debug_keys xen_sysctl_debug_keys_t;
 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_debug_keys_t);
 
-/* Get physical CPU information */
-#define XEN_SYSCTL_cpuinfo           8
+/* Get physical CPU information. */
+#define XEN_SYSCTL_getcpuinfo        8
 struct xen_sysctl_cpuinfo {
-    /* IN variables. */
-    uint32_t                      max_cpus;
-    XEN_GUEST_HANDLE_64(uint64_t) buffer;
-    /* OUT variables. */
-    uint32_t                      nr_cpus;
-}; 
+    uint64_t idletime;
+};
 typedef struct xen_sysctl_cpuinfo xen_sysctl_cpuinfo_t;
 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpuinfo_t); 
+struct xen_sysctl_getcpuinfo {
+    /* IN variables. */
+    uint32_t max_cpus;
+    XEN_GUEST_HANDLE_64(xen_sysctl_cpuinfo_t) info;
+    /* OUT variables. */
+    uint32_t nr_cpus;
+}; 
+typedef struct xen_sysctl_getcpuinfo xen_sysctl_getcpuinfo_t;
+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getcpuinfo_t); 
 
 struct xen_sysctl {
     uint32_t cmd;
@@ -175,7 +178,7 @@ struct xen_sysctl {
         struct xen_sysctl_perfc_op          perfc_op;
         struct xen_sysctl_getdomaininfolist getdomaininfolist;
         struct xen_sysctl_debug_keys        debug_keys;
-        struct xen_sysctl_cpuinfo           cpuinfo;
+        struct xen_sysctl_getcpuinfo        getcpuinfo;
         uint8_t                             pad[128];
     } u;
 };

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
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®.