[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |