aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxc/xc_misc.c
diff options
context:
space:
mode:
authorKeir Fraser <keir@xensource.com>2007-06-27 21:43:43 +0100
committerKeir Fraser <keir@xensource.com>2007-06-27 21:43:43 +0100
commit41b3adc9252a1d70ea1e7a4f67696227adbed2ca (patch)
tree666a8e9f493ceb8b3a3eccf9abb0d73dd6eb8795 /tools/libxc/xc_misc.c
parent9ba645fd7db85d46ea47e8020752ad971f233f61 (diff)
downloadxen-41b3adc9252a1d70ea1e7a4f67696227adbed2ca.tar.gz
xen-41b3adc9252a1d70ea1e7a4f67696227adbed2ca.tar.bz2
xen-41b3adc9252a1d70ea1e7a4f67696227adbed2ca.zip
More getcpuinfo sysctl cleanup.
Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'tools/libxc/xc_misc.c')
-rw-r--r--tools/libxc/xc_misc.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/tools/libxc/xc_misc.c b/tools/libxc/xc_misc.c
index e17bf7f721..85f7921e77 100644
--- a/tools/libxc/xc_misc.c
+++ b/tools/libxc/xc_misc.c
@@ -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 xc_getcpuinfo(int xc_handle, int max_cpus,
+ xc_cpuinfo_t *info, int *nr_cpus)
{
- int ret;
+ int rc;
DECLARE_SYSCTL;
- sysctl.cmd = XEN_SYSCTL_cpuinfo;
- sysctl.u.cpuinfo.max_cpus = max_cpus;
- set_xen_guest_handle(sysctl.u.cpuinfo.buffer, info);
+ sysctl.cmd = XEN_SYSCTL_getcpuinfo;
+ sysctl.u.getcpuinfo.max_cpus = max_cpus;
+ set_xen_guest_handle(sysctl.u.getcpuinfo.info, info);
- if ( (ret = do_sysctl(xc_handle, &sysctl)) != 0 )
- return ret;
+ if ( (rc = lock_pages(info, max_cpus*sizeof(*info))) != 0 )
+ return rc;
- if(nr_cpus)
- *nr_cpus = sysctl.u.cpuinfo.nr_cpus;
+ rc = do_sysctl(xc_handle, &sysctl);
- return 0;
+ unlock_pages(info, max_cpus*sizeof(*info));
+
+ if ( nr_cpus )
+ *nr_cpus = sysctl.u.getcpuinfo.nr_cpus;
+
+ return rc;
}