# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1287419870 -3600
# Node ID 8e00eeb1c0d33818547dcc9534872c0bbe1a750c
# Parent b15d1f14810fb746b2a2df24f7075d333532cf58
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>
Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
tools/libxc/xc_misc.c | 40 ++++++++++++++++++++++++++++++++--------
tools/libxc/xenctrl.h | 12 +++++++-----
tools/misc/xenlockprof.c | 9 +++------
3 files changed, 42 insertions(+), 19 deletions(-)
diff -r b15d1f14810f -r 8e00eeb1c0d3 tools/libxc/xc_misc.c
--- a/tools/libxc/xc_misc.c Mon Oct 18 17:37:31 2010 +0100
+++ b/tools/libxc/xc_misc.c Mon Oct 18 17:37:50 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 b15d1f14810f -r 8e00eeb1c0d3 tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h Mon Oct 18 17:37:31 2010 +0100
+++ b/tools/libxc/xenctrl.h Mon Oct 18 17:37:50 2010 +0100
@@ -898,12 +898,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 b15d1f14810f -r 8e00eeb1c0d3 tools/misc/xenlockprof.c
--- a/tools/misc/xenlockprof.c Mon Oct 18 17:37:31 2010 +0100
+++ b/tools/misc/xenlockprof.c Mon Oct 18 17:37:50 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-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|