diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2010-05-04 22:20:05 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2010-05-04 22:20:05 +0100 |
commit | 4cd740cf56f0801f3a3d92cb8c5fb7d930b0dd27 (patch) | |
tree | 3c3cbcabb6adbed9cbb9ba48c47108d9afee63de /tools/libxc/xc_cpupool.c | |
parent | df2edff1aa7db2c5a339401198a11fa1a6171434 (diff) | |
download | xen-4cd740cf56f0801f3a3d92cb8c5fb7d930b0dd27.tar.gz xen-4cd740cf56f0801f3a3d92cb8c5fb7d930b0dd27.tar.bz2 xen-4cd740cf56f0801f3a3d92cb8c5fb7d930b0dd27.zip |
cpupool: Control interface should be a sysctl rather than a domctl.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'tools/libxc/xc_cpupool.c')
-rw-r--r-- | tools/libxc/xc_cpupool.c | 109 |
1 files changed, 60 insertions, 49 deletions
diff --git a/tools/libxc/xc_cpupool.c b/tools/libxc/xc_cpupool.c index a7a759fcad..12bcc0ee9c 100644 --- a/tools/libxc/xc_cpupool.c +++ b/tools/libxc/xc_cpupool.c @@ -9,34 +9,45 @@ #include <stdarg.h> #include "xc_private.h" +static int do_sysctl_save(int xc_handle, struct xen_sysctl *sysctl) +{ + int ret; + + do { + ret = do_sysctl(xc_handle, sysctl); + } while ( (ret < 0) && (errno == EAGAIN) ); + + return ret; +} + int xc_cpupool_create(int xc_handle, uint32_t *ppoolid, uint32_t sched_id) { int err; - DECLARE_DOMCTL; - - domctl.cmd = XEN_DOMCTL_cpupool_op; - domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_CREATE; - domctl.u.cpupool_op.cpupool_id = (*ppoolid == 0) ? - XEN_DOMCTL_CPUPOOL_PAR_ANY : *ppoolid; - domctl.u.cpupool_op.sched_id = sched_id; - if ( (err = do_domctl_save(xc_handle, &domctl)) != 0 ) + DECLARE_SYSCTL; + + sysctl.cmd = XEN_SYSCTL_cpupool_op; + sysctl.u.cpupool_op.op = XEN_SYSCTL_CPUPOOL_OP_CREATE; + sysctl.u.cpupool_op.cpupool_id = (*ppoolid == 0) ? + XEN_SYSCTL_CPUPOOL_PAR_ANY : *ppoolid; + sysctl.u.cpupool_op.sched_id = sched_id; + if ( (err = do_sysctl_save(xc_handle, &sysctl)) != 0 ) return err; - *ppoolid = domctl.u.cpupool_op.cpupool_id; + *ppoolid = sysctl.u.cpupool_op.cpupool_id; return 0; } int xc_cpupool_destroy(int xc_handle, uint32_t poolid) { - DECLARE_DOMCTL; + DECLARE_SYSCTL; - domctl.cmd = XEN_DOMCTL_cpupool_op; - domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_DESTROY; - domctl.u.cpupool_op.cpupool_id = poolid; - return do_domctl_save(xc_handle, &domctl); + sysctl.cmd = XEN_SYSCTL_cpupool_op; + sysctl.u.cpupool_op.op = XEN_SYSCTL_CPUPOOL_OP_DESTROY; + sysctl.u.cpupool_op.cpupool_id = poolid; + return do_sysctl_save(xc_handle, &sysctl); } int xc_cpupool_getinfo(int xc_handle, @@ -48,34 +59,34 @@ int xc_cpupool_getinfo(int xc_handle, int p; uint32_t poolid = first_poolid; uint8_t local[sizeof (info->cpumap)]; - DECLARE_DOMCTL; + DECLARE_SYSCTL; memset(info, 0, n_max * sizeof(xc_cpupoolinfo_t)); for (p = 0; p < n_max; p++) { - domctl.cmd = XEN_DOMCTL_cpupool_op; - domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_INFO; - domctl.u.cpupool_op.cpupool_id = poolid; - set_xen_guest_handle(domctl.u.cpupool_op.cpumap.bitmap, local); - domctl.u.cpupool_op.cpumap.nr_cpus = sizeof(info->cpumap) * 8; + sysctl.cmd = XEN_SYSCTL_cpupool_op; + sysctl.u.cpupool_op.op = XEN_SYSCTL_CPUPOOL_OP_INFO; + sysctl.u.cpupool_op.cpupool_id = poolid; + set_xen_guest_handle(sysctl.u.cpupool_op.cpumap.bitmap, local); + sysctl.u.cpupool_op.cpumap.nr_cpus = sizeof(info->cpumap) * 8; if ( (err = lock_pages(local, sizeof(local))) != 0 ) { PERROR("Could not lock memory for Xen hypercall"); break; } - err = do_domctl_save(xc_handle, &domctl); + err = do_sysctl_save(xc_handle, &sysctl); unlock_pages(local, sizeof (local)); if ( err < 0 ) break; - info->cpupool_id = domctl.u.cpupool_op.cpupool_id; - info->sched_id = domctl.u.cpupool_op.sched_id; - info->n_dom = domctl.u.cpupool_op.n_dom; + info->cpupool_id = sysctl.u.cpupool_op.cpupool_id; + info->sched_id = sysctl.u.cpupool_op.sched_id; + info->n_dom = sysctl.u.cpupool_op.n_dom; bitmap_byte_to_64(&(info->cpumap), local, sizeof(local) * 8); - poolid = domctl.u.cpupool_op.cpupool_id + 1; + poolid = sysctl.u.cpupool_op.cpupool_id + 1; info++; } @@ -89,39 +100,39 @@ int xc_cpupool_addcpu(int xc_handle, uint32_t poolid, int cpu) { - DECLARE_DOMCTL; + DECLARE_SYSCTL; - domctl.cmd = XEN_DOMCTL_cpupool_op; - domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_ADDCPU; - domctl.u.cpupool_op.cpupool_id = poolid; - domctl.u.cpupool_op.cpu = (cpu < 0) ? XEN_DOMCTL_CPUPOOL_PAR_ANY : cpu; - return do_domctl_save(xc_handle, &domctl); + sysctl.cmd = XEN_SYSCTL_cpupool_op; + sysctl.u.cpupool_op.op = XEN_SYSCTL_CPUPOOL_OP_ADDCPU; + sysctl.u.cpupool_op.cpupool_id = poolid; + sysctl.u.cpupool_op.cpu = (cpu < 0) ? XEN_SYSCTL_CPUPOOL_PAR_ANY : cpu; + return do_sysctl_save(xc_handle, &sysctl); } int xc_cpupool_removecpu(int xc_handle, uint32_t poolid, int cpu) { - DECLARE_DOMCTL; + DECLARE_SYSCTL; - domctl.cmd = XEN_DOMCTL_cpupool_op; - domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_RMCPU; - domctl.u.cpupool_op.cpupool_id = poolid; - domctl.u.cpupool_op.cpu = (cpu < 0) ? XEN_DOMCTL_CPUPOOL_PAR_ANY : cpu; - return do_domctl_save(xc_handle, &domctl); + sysctl.cmd = XEN_SYSCTL_cpupool_op; + sysctl.u.cpupool_op.op = XEN_SYSCTL_CPUPOOL_OP_RMCPU; + sysctl.u.cpupool_op.cpupool_id = poolid; + sysctl.u.cpupool_op.cpu = (cpu < 0) ? XEN_SYSCTL_CPUPOOL_PAR_ANY : cpu; + return do_sysctl_save(xc_handle, &sysctl); } int xc_cpupool_movedomain(int xc_handle, uint32_t poolid, uint32_t domid) { - DECLARE_DOMCTL; + DECLARE_SYSCTL; - domctl.cmd = XEN_DOMCTL_cpupool_op; - domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_MOVEDOMAIN; - domctl.u.cpupool_op.cpupool_id = poolid; - domctl.u.cpupool_op.domid = domid; - return do_domctl_save(xc_handle, &domctl); + sysctl.cmd = XEN_SYSCTL_cpupool_op; + sysctl.u.cpupool_op.op = XEN_SYSCTL_CPUPOOL_OP_MOVEDOMAIN; + sysctl.u.cpupool_op.cpupool_id = poolid; + sysctl.u.cpupool_op.domid = domid; + return do_sysctl_save(xc_handle, &sysctl); } int xc_cpupool_freeinfo(int xc_handle, @@ -129,12 +140,12 @@ int xc_cpupool_freeinfo(int xc_handle, { int err; uint8_t local[sizeof (*cpumap)]; - DECLARE_DOMCTL; + DECLARE_SYSCTL; - domctl.cmd = XEN_DOMCTL_cpupool_op; - domctl.u.cpupool_op.op = XEN_DOMCTL_CPUPOOL_OP_FREEINFO; - set_xen_guest_handle(domctl.u.cpupool_op.cpumap.bitmap, local); - domctl.u.cpupool_op.cpumap.nr_cpus = sizeof(*cpumap) * 8; + sysctl.cmd = XEN_SYSCTL_cpupool_op; + sysctl.u.cpupool_op.op = XEN_SYSCTL_CPUPOOL_OP_FREEINFO; + set_xen_guest_handle(sysctl.u.cpupool_op.cpumap.bitmap, local); + sysctl.u.cpupool_op.cpumap.nr_cpus = sizeof(*cpumap) * 8; if ( (err = lock_pages(local, sizeof(local))) != 0 ) { @@ -142,7 +153,7 @@ int xc_cpupool_freeinfo(int xc_handle, return err; } - err = do_domctl_save(xc_handle, &domctl); + err = do_sysctl_save(xc_handle, &sysctl); unlock_pages(local, sizeof (local)); if (err < 0) |