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

[Xen-devel] [PATCH 09 of 24] libxc: simplify lock profiling API



# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1283779691 -3600
# Node ID 7b45202f78cd82d320fb32fea67c0a618697baec
# Parent  8e9ada79914009870ea06339eb4211519a43a927
libxc: simplify lock profiling API

Current function has heavily overloaded semantics for the various
arguments. Separate out into more specific functions.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r 8e9ada799140 -r 7b45202f78cd tools/libxc/xc_misc.c
--- a/tools/libxc/xc_misc.c     Mon Sep 06 14:28:11 2010 +0100
+++ b/tools/libxc/xc_misc.c     Mon Sep 06 14:28:11 2010 +0100
@@ -215,8 +215,35 @@ int xc_perfc_query(xc_interface *xch,
     return do_sysctl(xch, &sysctl);
 }
 
-int xc_lockprof_control(xc_interface *xch,
-                        uint32_t opcode,
+int xc_lockprof_reset(xc_interface *xch)
+{
+    DECLARE_SYSCTL;
+
+    sysctl.cmd = XEN_SYSCTL_lockprof_op;
+    sysctl.u.lockprof_op.cmd = XEN_SYSCTL_LOCKPROF_reset;
+    set_xen_guest_handle(sysctl.u.lockprof_op.data, NULL);
+
+    return do_sysctl(xch, &sysctl);
+}
+
+int xc_lockprof_query_number(xc_interface *xch,
+                             uint32_t *n_elems)
+{
+    int rc;
+    DECLARE_SYSCTL;
+
+    sysctl.cmd = XEN_SYSCTL_lockprof_op;
+    sysctl.u.lockprof_op.cmd = XEN_SYSCTL_LOCKPROF_query;
+    set_xen_guest_handle(sysctl.u.lockprof_op.data, NULL);
+
+    rc = do_sysctl(xch, &sysctl);
+
+    *n_elems = sysctl.u.lockprof_op.nr_elem;
+
+    return rc;
+}
+
+int xc_lockprof_query(xc_interface *xch,
                         uint32_t *n_elems,
                         uint64_t *time,
                         xc_lockprof_data_t *data)
@@ -225,16 +252,13 @@ int xc_lockprof_control(xc_interface *xc
     DECLARE_SYSCTL;
 
     sysctl.cmd = XEN_SYSCTL_lockprof_op;
-    sysctl.u.lockprof_op.cmd = opcode;
-    sysctl.u.lockprof_op.max_elem = n_elems ? *n_elems : 0;
+    sysctl.u.lockprof_op.cmd = XEN_SYSCTL_LOCKPROF_query;
+    sysctl.u.lockprof_op.max_elem = *n_elems;
     set_xen_guest_handle(sysctl.u.lockprof_op.data, data);
 
     rc = do_sysctl(xch, &sysctl);
 
-    if (n_elems)
-        *n_elems = sysctl.u.lockprof_op.nr_elem;
-    if (time)
-        *time = sysctl.u.lockprof_op.time;
+    *n_elems = sysctl.u.lockprof_op.nr_elem;
 
     return rc;
 }
diff -r 8e9ada799140 -r 7b45202f78cd tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h     Mon Sep 06 14:28:11 2010 +0100
+++ b/tools/libxc/xenctrl.h     Mon Sep 06 14:28:11 2010 +0100
@@ -860,12 +860,14 @@ int xc_perfc_query(xc_interface *xch,
                    xc_perfc_val_t *val);
 
 typedef xen_sysctl_lockprof_data_t xc_lockprof_data_t;
+int xc_lockprof_reset(xc_interface *xch);
+int xc_lockprof_query_number(xc_interface *xch,
+                             uint32_t *n_elems);
 /* IMPORTANT: The caller is responsible for mlock()'ing the @data array. */
-int xc_lockprof_control(xc_interface *xch,
-                        uint32_t opcode,
-                        uint32_t *n_elems,
-                        uint64_t *time,
-                        xc_lockprof_data_t *data);
+int xc_lockprof_query(xc_interface *xch,
+                      uint32_t *n_elems,
+                      uint64_t *time,
+                      xc_lockprof_data_t *data);
 
 /**
  * Memory maps a range within one domain to a local address range.  Mappings
diff -r 8e9ada799140 -r 7b45202f78cd tools/misc/xenlockprof.c
--- a/tools/misc/xenlockprof.c  Mon Sep 06 14:28:11 2010 +0100
+++ b/tools/misc/xenlockprof.c  Mon Sep 06 14:28:11 2010 +0100
@@ -60,8 +60,7 @@ int main(int argc, char *argv[])
 
     if ( argc > 1 )
     {
-        if ( xc_lockprof_control(xc_handle, XEN_SYSCTL_LOCKPROF_reset, NULL,
-                                 NULL, NULL) != 0 )
+        if ( xc_lockprof_reset(xc_handle) != 0 )
         {
             fprintf(stderr, "Error reseting profile data: %d (%s)\n",
                     errno, strerror(errno));
@@ -71,8 +70,7 @@ int main(int argc, char *argv[])
     }
 
     n = 0;
-    if ( xc_lockprof_control(xc_handle, XEN_SYSCTL_LOCKPROF_query, &n,
-                             NULL, NULL) != 0 )
+    if ( xc_lockprof_query_number(xc_handle, &n) != 0 )
     {
         fprintf(stderr, "Error getting number of profile records: %d (%s)\n",
                 errno, strerror(errno));
@@ -89,8 +87,7 @@ int main(int argc, char *argv[])
     }
 
     i = n;
-    if ( xc_lockprof_control(xc_handle, XEN_SYSCTL_LOCKPROF_query, &i,
-                             &time, data) != 0 )
+    if ( xc_lockprof_query(xc_handle, &i, &time, data) != 0 )
     {
         fprintf(stderr, "Error getting profile records: %d (%s)\n",
                 errno, strerror(errno));

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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