diff options
author | Keir Fraser <keir@xensource.com> | 2007-06-27 21:43:43 +0100 |
---|---|---|
committer | Keir Fraser <keir@xensource.com> | 2007-06-27 21:43:43 +0100 |
commit | 41b3adc9252a1d70ea1e7a4f67696227adbed2ca (patch) | |
tree | 666a8e9f493ceb8b3a3eccf9abb0d73dd6eb8795 /tools/libxc/xc_misc.c | |
parent | 9ba645fd7db85d46ea47e8020752ad971f233f61 (diff) | |
download | xen-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.c | 29 |
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; } |