[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 04 of 10 v3] libxl: rename libxl_cpumap to libxl_bitmap
# HG changeset patch # User Dario Faggioli <raistlin@xxxxxxxx> # Date 1341416323 -7200 # Node ID cfdd6d53f3dd3c6aa325fe6d8a17e4089daafae5 # Parent f1227d5a82e56d10e302aec4c3717d281718a349 libxl: rename libxl_cpumap to libxl_bitmap And leave to the caller the burden of knowing and remembering what kind of bitmap each instance of libxl_bitmap is. This is basically just some s/libxl_cpumap/libxl_bitmap/ (and some other related interface name substitution, e.g., libxl_for_each_cpu) in a bunch of files, with no real functional change involved. A specific allocation helper is introduced, besides libxl_bitmap_alloc(). It is called libxl_cpu_bitmap_alloc() and is meant at substituting the old libxl_cpumap_alloc(). It is just something easier to use in cases where one wants to allocate a libxl_bitmap that is going to serve as a cpu map. This is because we want to be able to deal with both cpu and NUMA node maps, but we don't want to duplicate all the various helpers and wrappers. While at it, add the usual initialization function, common to all libxl data structures. Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxxxxx> --- Changes from v2: * rebased on top of 51d2daabd428 (libxl: allow setting more than 31 vcpus). * Fixed one missing rename of cpumap into bitmap. * Added libxl_bitmap_init(). Changes from v1: * this patch replaces "libxl: abstract libxl_cpumap to just libxl_map" as it directly change the name of the old type instead of adding one more abstraction layer. diff --git a/tools/libxl/gentest.py b/tools/libxl/gentest.py --- a/tools/libxl/gentest.py +++ b/tools/libxl/gentest.py @@ -20,7 +20,7 @@ def randomize_case(s): def randomize_enum(e): return random.choice([v.name for v in e.values]) -handcoded = ["libxl_cpumap", "libxl_key_value_list", +handcoded = ["libxl_bitmap", "libxl_key_value_list", "libxl_cpuid_policy_list", "libxl_string_list"] def gen_rand_init(ty, v, indent = " ", parent = None): @@ -117,16 +117,16 @@ static void rand_bytes(uint8_t *p, size_ p[i] = rand() % 256; } -static void libxl_cpumap_rand_init(libxl_cpumap *cpumap) +static void libxl_bitmap_rand_init(libxl_bitmap *bitmap) { int i; - cpumap->size = rand() % 16; - cpumap->map = calloc(cpumap->size, sizeof(*cpumap->map)); - libxl_for_each_cpu(i, *cpumap) { + bitmap->size = rand() % 16; + bitmap->map = calloc(bitmap->size, sizeof(*bitmap->map)); + libxl_for_each_bit(i, *bitmap) { if (rand() % 2) - libxl_cpumap_set(cpumap, i); + libxl_bitmap_set(bitmap, i); else - libxl_cpumap_reset(cpumap, i); + libxl_bitmap_reset(bitmap, i); } } diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -586,7 +586,7 @@ static int cpupool_info(libxl__gc *gc, info->poolid = xcinfo->cpupool_id; info->sched = xcinfo->sched_id; info->n_dom = xcinfo->n_dom; - rc = libxl_cpumap_alloc(CTX, &info->cpumap, 0); + rc = libxl_cpu_bitmap_alloc(CTX, &info->cpumap, 0); if (rc) { LOG(ERROR, "unable to allocate cpumap %d\n", rc); @@ -3431,7 +3431,7 @@ libxl_vcpuinfo *libxl_list_vcpu(libxl_ct } for (*nb_vcpu = 0; *nb_vcpu <= domaininfo.max_vcpu_id; ++*nb_vcpu, ++ptr) { - if (libxl_cpumap_alloc(ctx, &ptr->cpumap, 0)) { + if (libxl_cpu_bitmap_alloc(ctx, &ptr->cpumap, 0)) { LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "allocating cpumap"); return NULL; } @@ -3454,7 +3454,7 @@ libxl_vcpuinfo *libxl_list_vcpu(libxl_ct } int libxl_set_vcpuaffinity(libxl_ctx *ctx, uint32_t domid, uint32_t vcpuid, - libxl_cpumap *cpumap) + libxl_bitmap *cpumap) { if (xc_vcpu_setaffinity(ctx->xch, domid, vcpuid, cpumap->map)) { LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "setting vcpu affinity"); @@ -3464,7 +3464,7 @@ int libxl_set_vcpuaffinity(libxl_ctx *ct } int libxl_set_vcpuaffinity_all(libxl_ctx *ctx, uint32_t domid, - unsigned int max_vcpus, libxl_cpumap *cpumap) + unsigned int max_vcpus, libxl_bitmap *cpumap) { int i, rc = 0; @@ -3478,7 +3478,7 @@ int libxl_set_vcpuaffinity_all(libxl_ctx return rc; } -int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_cpumap *cpumap) +int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_bitmap *cpumap) { GC_INIT(ctx); libxl_dominfo info; @@ -3498,7 +3498,7 @@ retry_transaction: for (i = 0; i <= info.vcpu_max_id; i++) libxl__xs_write(gc, t, libxl__sprintf(gc, "%s/cpu/%u/availability", dompath, i), - "%s", libxl_cpumap_test(cpumap, i) ? "online" : "offline"); + "%s", libxl_bitmap_test(cpumap, i) ? "online" : "offline"); if (!xs_transaction_end(ctx->xsh, t, 0)) { if (errno == EAGAIN) goto retry_transaction; @@ -4094,7 +4094,7 @@ int libxl_tmem_freeable(libxl_ctx *ctx) return rc; } -int libxl_get_freecpus(libxl_ctx *ctx, libxl_cpumap *cpumap) +int libxl_get_freecpus(libxl_ctx *ctx, libxl_bitmap *cpumap) { int ncpus; @@ -4113,7 +4113,7 @@ int libxl_get_freecpus(libxl_ctx *ctx, l int libxl_cpupool_create(libxl_ctx *ctx, const char *name, libxl_scheduler sched, - libxl_cpumap cpumap, libxl_uuid *uuid, + libxl_bitmap cpumap, libxl_uuid *uuid, uint32_t *poolid) { GC_INIT(ctx); @@ -4136,8 +4136,8 @@ int libxl_cpupool_create(libxl_ctx *ctx, return ERROR_FAIL; } - libxl_for_each_cpu(i, cpumap) - if (libxl_cpumap_test(&cpumap, i)) { + libxl_for_each_bit(i, cpumap) + if (libxl_bitmap_test(&cpumap, i)) { rc = xc_cpupool_addcpu(ctx->xch, *poolid, i); if (rc) { LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, rc, @@ -4172,7 +4172,7 @@ int libxl_cpupool_destroy(libxl_ctx *ctx int rc, i; xc_cpupoolinfo_t *info; xs_transaction_t t; - libxl_cpumap cpumap; + libxl_bitmap cpumap; info = xc_cpupool_getinfo(ctx->xch, poolid); if (info == NULL) { @@ -4184,13 +4184,13 @@ int libxl_cpupool_destroy(libxl_ctx *ctx if ((info->cpupool_id != poolid) || (info->n_dom)) goto out; - rc = libxl_cpumap_alloc(ctx, &cpumap, 0); + rc = libxl_cpu_bitmap_alloc(ctx, &cpumap, 0); if (rc) goto out; memcpy(cpumap.map, info->cpumap, cpumap.size); - libxl_for_each_cpu(i, cpumap) - if (libxl_cpumap_test(&cpumap, i)) { + libxl_for_each_bit(i, cpumap) + if (libxl_bitmap_test(&cpumap, i)) { rc = xc_cpupool_removecpu(ctx->xch, poolid, i); if (rc) { LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, rc, @@ -4219,7 +4219,7 @@ int libxl_cpupool_destroy(libxl_ctx *ctx rc = 0; out1: - libxl_cpumap_dispose(&cpumap); + libxl_bitmap_dispose(&cpumap); out: xc_cpupool_infofree(ctx->xch, info); GC_FREE; @@ -4287,7 +4287,7 @@ int libxl_cpupool_cpuadd_node(libxl_ctx { int rc = 0; int cpu, nr; - libxl_cpumap freemap; + libxl_bitmap freemap; libxl_cputopology *topology; if (libxl_get_freecpus(ctx, &freemap)) { @@ -4302,7 +4302,7 @@ int libxl_cpupool_cpuadd_node(libxl_ctx *cpus = 0; for (cpu = 0; cpu < nr; cpu++) { - if (libxl_cpumap_test(&freemap, cpu) && (topology[cpu].node == node) && + if (libxl_bitmap_test(&freemap, cpu) && (topology[cpu].node == node) && !libxl_cpupool_cpuadd(ctx, poolid, cpu)) { (*cpus)++; } @@ -4311,7 +4311,7 @@ int libxl_cpupool_cpuadd_node(libxl_ctx free(topology); out: - libxl_cpumap_dispose(&freemap); + libxl_bitmap_dispose(&freemap); return rc; } @@ -4353,7 +4353,7 @@ int libxl_cpupool_cpuremove_node(libxl_c if (poolinfo[p].poolid == poolid) { for (cpu = 0; cpu < nr_cpus; cpu++) { if ((topology[cpu].node == node) && - libxl_cpumap_test(&poolinfo[p].cpumap, cpu) && + libxl_bitmap_test(&poolinfo[p].cpumap, cpu) && !libxl_cpupool_cpuremove(ctx, poolid, cpu)) { (*cpus)++; } diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -285,8 +285,9 @@ typedef uint64_t libxl_ev_user; typedef struct { uint32_t size; /* number of bytes in map */ uint8_t *map; -} libxl_cpumap; -void libxl_cpumap_dispose(libxl_cpumap *map); +} libxl_bitmap; +void libxl_bitmap_init(libxl_bitmap *map); +void libxl_bitmap_dispose(libxl_bitmap *map); /* libxl_cpuid_policy_list is a dynamic array storing CPUID policies * for multiple leafs. It is terminated with an entry holding @@ -790,10 +791,10 @@ int libxl_userdata_retrieve(libxl_ctx *c int libxl_get_physinfo(libxl_ctx *ctx, libxl_physinfo *physinfo); int libxl_set_vcpuaffinity(libxl_ctx *ctx, uint32_t domid, uint32_t vcpuid, - libxl_cpumap *cpumap); + libxl_bitmap *cpumap); int libxl_set_vcpuaffinity_all(libxl_ctx *ctx, uint32_t domid, - unsigned int max_vcpus, libxl_cpumap *cpumap); -int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_cpumap *cpumap); + unsigned int max_vcpus, libxl_bitmap *cpumap); +int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_bitmap *cpumap); libxl_scheduler libxl_get_scheduler(libxl_ctx *ctx); @@ -843,10 +844,10 @@ int libxl_tmem_shared_auth(libxl_ctx *ct int auth); int libxl_tmem_freeable(libxl_ctx *ctx); -int libxl_get_freecpus(libxl_ctx *ctx, libxl_cpumap *cpumap); +int libxl_get_freecpus(libxl_ctx *ctx, libxl_bitmap *cpumap); int libxl_cpupool_create(libxl_ctx *ctx, const char *name, libxl_scheduler sched, - libxl_cpumap cpumap, libxl_uuid *uuid, + libxl_bitmap cpumap, libxl_uuid *uuid, uint32_t *poolid); int libxl_cpupool_destroy(libxl_ctx *ctx, uint32_t poolid); int libxl_cpupool_rename(libxl_ctx *ctx, const char *name, uint32_t poolid); diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -203,16 +203,16 @@ int libxl__domain_build_info_setdefault( if (!b_info->max_vcpus) b_info->max_vcpus = 1; if (!b_info->avail_vcpus.size) { - if (libxl_cpumap_alloc(CTX, &b_info->avail_vcpus, 1)) + if (libxl_cpu_bitmap_alloc(CTX, &b_info->avail_vcpus, 1)) return ERROR_FAIL; - libxl_cpumap_set(&b_info->avail_vcpus, 0); + libxl_bitmap_set(&b_info->avail_vcpus, 0); } else if (b_info->avail_vcpus.size > HVM_MAX_VCPUS) return ERROR_FAIL; if (!b_info->cpumap.size) { - if (libxl_cpumap_alloc(CTX, &b_info->cpumap, 0)) + if (libxl_cpu_bitmap_alloc(CTX, &b_info->cpumap, 0)) return ERROR_FAIL; - libxl_cpumap_set_any(&b_info->cpumap); + libxl_bitmap_set_any(&b_info->cpumap); } if (b_info->max_memkb == LIBXL_MEMKB_DEFAULT) diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -208,8 +208,8 @@ static char ** libxl__build_device_model NULL); } - nr_set_cpus = libxl_cpumap_count_set(&b_info->avail_vcpus); - s = libxl_cpumap_to_hex_string(CTX, &b_info->avail_vcpus); + nr_set_cpus = libxl_bitmap_count_set(&b_info->avail_vcpus); + s = libxl_bitmap_to_hex_string(CTX, &b_info->avail_vcpus); flexarray_vappend(dm_args, "-vcpu_avail", libxl__sprintf(gc, "%s", s), NULL); free(s); @@ -459,7 +459,7 @@ static char ** libxl__build_device_model flexarray_append(dm_args, "-smp"); if (b_info->avail_vcpus.size) { int nr_set_cpus = 0; - nr_set_cpus = libxl_cpumap_count_set(&b_info->avail_vcpus); + nr_set_cpus = libxl_bitmap_count_set(&b_info->avail_vcpus); flexarray_append(dm_args, libxl__sprintf(gc, "%d,maxcpus=%d", b_info->max_vcpus, diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -202,7 +202,7 @@ int libxl__build_post(libxl__gc *gc, uin ents[11] = libxl__sprintf(gc, "%lu", state->store_mfn); for (i = 0; i < info->max_vcpus; i++) { ents[12+(i*2)] = libxl__sprintf(gc, "cpu/%d/availability", i); - ents[12+(i*2)+1] = libxl_cpumap_test(&info->avail_vcpus, i) + ents[12+(i*2)+1] = libxl_bitmap_test(&info->avail_vcpus, i) ? "online" : "offline"; } diff --git a/tools/libxl/libxl_json.c b/tools/libxl/libxl_json.c --- a/tools/libxl/libxl_json.c +++ b/tools/libxl/libxl_json.c @@ -99,8 +99,8 @@ yajl_gen_status libxl_uuid_gen_json(yajl return yajl_gen_string(hand, (const unsigned char *)buf, LIBXL_UUID_FMTLEN); } -yajl_gen_status libxl_cpumap_gen_json(yajl_gen hand, - libxl_cpumap *cpumap) +yajl_gen_status libxl_bitmap_gen_json(yajl_gen hand, + libxl_bitmap *bitmap) { yajl_gen_status s; int i; @@ -108,8 +108,8 @@ yajl_gen_status libxl_cpumap_gen_json(ya s = yajl_gen_array_open(hand); if (s != yajl_gen_status_ok) goto out; - libxl_for_each_cpu(i, *cpumap) { - if (libxl_cpumap_test(cpumap, i)) { + libxl_for_each_bit(i, *bitmap) { + if (libxl_bitmap_test(bitmap, i)) { s = yajl_gen_integer(hand, i); if (s != yajl_gen_status_ok) goto out; } diff --git a/tools/libxl/libxl_json.h b/tools/libxl/libxl_json.h --- a/tools/libxl/libxl_json.h +++ b/tools/libxl/libxl_json.h @@ -26,7 +26,7 @@ yajl_gen_status libxl_defbool_gen_json(y yajl_gen_status libxl_domid_gen_json(yajl_gen hand, libxl_domid *p); yajl_gen_status libxl_uuid_gen_json(yajl_gen hand, libxl_uuid *p); yajl_gen_status libxl_mac_gen_json(yajl_gen hand, libxl_mac *p); -yajl_gen_status libxl_cpumap_gen_json(yajl_gen hand, libxl_cpumap *p); +yajl_gen_status libxl_bitmap_gen_json(yajl_gen hand, libxl_bitmap *p); yajl_gen_status libxl_cpuid_policy_list_gen_json(yajl_gen hand, libxl_cpuid_policy_list *p); yajl_gen_status libxl_string_list_gen_json(yajl_gen hand, libxl_string_list *p); diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -10,7 +10,7 @@ libxl_defbool = Builtin("defbool", passb libxl_domid = Builtin("domid", json_fn = "yajl_gen_integer", autogenerate_json = False) libxl_uuid = Builtin("uuid", passby=PASS_BY_REFERENCE) libxl_mac = Builtin("mac", passby=PASS_BY_REFERENCE) -libxl_cpumap = Builtin("cpumap", dispose_fn="libxl_cpumap_dispose", passby=PASS_BY_REFERENCE) +libxl_bitmap = Builtin("bitmap", dispose_fn="libxl_bitmap_dispose", passby=PASS_BY_REFERENCE) libxl_cpuid_policy_list = Builtin("cpuid_policy_list", dispose_fn="libxl_cpuid_dispose", passby=PASS_BY_REFERENCE) libxl_string_list = Builtin("string_list", dispose_fn="libxl_string_list_dispose", passby=PASS_BY_REFERENCE) @@ -198,7 +198,7 @@ libxl_cpupoolinfo = Struct("cpupoolinfo" ("poolid", uint32), ("sched", libxl_scheduler), ("n_dom", uint32), - ("cpumap", libxl_cpumap) + ("cpumap", libxl_bitmap) ], dir=DIR_OUT) libxl_vminfo = Struct("vminfo", [ @@ -247,8 +247,8 @@ libxl_domain_sched_params = Struct("doma libxl_domain_build_info = Struct("domain_build_info",[ ("max_vcpus", integer), - ("avail_vcpus", libxl_cpumap), - ("cpumap", libxl_cpumap), + ("avail_vcpus", libxl_bitmap), + ("cpumap", libxl_bitmap), ("tsc_mode", libxl_tsc_mode), ("max_memkb", MemKB), ("target_memkb", MemKB), @@ -409,7 +409,7 @@ libxl_vcpuinfo = Struct("vcpuinfo", [ ("blocked", bool), ("running", bool), ("vcpu_time", uint64), # total vcpu time ran (ns) - ("cpumap", libxl_cpumap), # current cpu's affinities + ("cpumap", libxl_bitmap), # current cpu's affinities ], dir=DIR_OUT) libxl_physinfo = Struct("physinfo", [ diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c --- a/tools/libxl/libxl_utils.c +++ b/tools/libxl/libxl_utils.c @@ -487,79 +487,70 @@ int libxl_mac_to_device_nic(libxl_ctx *c return rc; } -int libxl_cpumap_alloc(libxl_ctx *ctx, libxl_cpumap *cpumap, int max_cpus) +int libxl_bitmap_alloc(libxl_ctx *ctx, libxl_bitmap *bitmap, int n_bits) { GC_INIT(ctx); int sz; - int rc; - if (max_cpus < 0) { - rc = ERROR_INVAL; - goto out; - } - if (max_cpus == 0) - max_cpus = libxl_get_max_cpus(ctx); - if (max_cpus == 0) { - rc = ERROR_FAIL; - goto out; - } + sz = (n_bits + 7) / 8; + bitmap->map = libxl__calloc(NOGC, sizeof(*bitmap->map), sz); + bitmap->size = sz; - sz = (max_cpus + 7) / 8; - cpumap->map = libxl__calloc(NOGC, sizeof(*cpumap->map), sz); - cpumap->size = sz; - - rc = 0; - out: GC_FREE; - return rc; + return 0; } -void libxl_cpumap_dispose(libxl_cpumap *map) +void libxl_bitmap_init(libxl_bitmap *map) +{ + memset(map, '\0', sizeof(*map)); +} + +void libxl_bitmap_dispose(libxl_bitmap *map) { free(map->map); } -int libxl_cpumap_test(const libxl_cpumap *cpumap, int cpu) +int libxl_bitmap_test(const libxl_bitmap *bitmap, int bit) { - if (cpu >= cpumap->size * 8) + if (bit >= bitmap->size * 8) return 0; - return (cpumap->map[cpu / 8] & (1 << (cpu & 7))) ? 1 : 0; + return (bitmap->map[bit / 8] & (1 << (bit & 7))) ? 1 : 0; } -void libxl_cpumap_set(libxl_cpumap *cpumap, int cpu) +void libxl_bitmap_set(libxl_bitmap *bitmap, int bit) { - if (cpu >= cpumap->size * 8) + if (bit >= bitmap->size * 8) return; - cpumap->map[cpu / 8] |= 1 << (cpu & 7); + bitmap->map[bit / 8] |= 1 << (bit & 7); } -void libxl_cpumap_reset(libxl_cpumap *cpumap, int cpu) +void libxl_bitmap_reset(libxl_bitmap *bitmap, int bit) { - if (cpu >= cpumap->size * 8) + if (bit >= bitmap->size * 8) return; - cpumap->map[cpu / 8] &= ~(1 << (cpu & 7)); + bitmap->map[bit / 8] &= ~(1 << (bit & 7)); } -int libxl_cpumap_count_set(const libxl_cpumap *cpumap) +int libxl_bitmap_count_set(const libxl_bitmap *bitmap) { - int i, nr_set_cpus = 0; - libxl_for_each_set_cpu(i, *cpumap) - nr_set_cpus++; + int i, nr_set_bits = 0; + libxl_for_each_set_bit(i, *bitmap) + nr_set_bits++; - return nr_set_cpus; + return nr_set_bits; } /* NB. caller is responsible for freeing the memory */ -char *libxl_cpumap_to_hex_string(libxl_ctx *ctx, const libxl_cpumap *cpumap) +char *libxl_bitmap_to_hex_string(libxl_ctx *ctx, const libxl_bitmap *bitmap) { GC_INIT(ctx); - int i = cpumap->size; - char *p = libxl__zalloc(NOGC, cpumap->size * 2 + 3); + int i = bitmap->size; + char *p = libxl__zalloc(NOGC, bitmap->size * 2 + 3); char *q = p; strncpy(p, "0x", 2); p += 2; while(--i >= 0) { - sprintf(p, "%02x", cpumap->map[i]); + sprintf(p, "%02x", bitmap->map[i]); p += 2; } *p = '\0'; diff --git a/tools/libxl/libxl_utils.h b/tools/libxl/libxl_utils.h --- a/tools/libxl/libxl_utils.h +++ b/tools/libxl/libxl_utils.h @@ -63,29 +63,44 @@ int libxl_devid_to_device_nic(libxl_ctx int libxl_vdev_to_device_disk(libxl_ctx *ctx, uint32_t domid, const char *vdev, libxl_device_disk *disk); -int libxl_cpumap_alloc(libxl_ctx *ctx, libxl_cpumap *cpumap, int max_cpus); -int libxl_cpumap_test(const libxl_cpumap *cpumap, int cpu); -void libxl_cpumap_set(libxl_cpumap *cpumap, int cpu); -void libxl_cpumap_reset(libxl_cpumap *cpumap, int cpu); -int libxl_cpumap_count_set(const libxl_cpumap *cpumap); -char *libxl_cpumap_to_hex_string(libxl_ctx *ctx, const libxl_cpumap *cpumap); -static inline void libxl_cpumap_set_any(libxl_cpumap *cpumap) +int libxl_bitmap_alloc(libxl_ctx *ctx, libxl_bitmap *bitmap, int n_bits); + /* Allocated bimap is from malloc, libxl_bitmap_dispose() to be + * called by the application when done. */ +int libxl_bitmap_test(const libxl_bitmap *bitmap, int bit); +void libxl_bitmap_set(libxl_bitmap *bitmap, int bit); +void libxl_bitmap_reset(libxl_bitmap *bitmap, int bit); +int libxl_bitmap_count_set(const libxl_bitmap *cpumap); +char *libxl_bitmap_to_hex_string(libxl_ctx *ctx, const libxl_bitmap *cpumap); +static inline void libxl_bitmap_set_any(libxl_bitmap *bitmap) { - memset(cpumap->map, -1, cpumap->size); + memset(bitmap->map, -1, bitmap->size); } -static inline void libxl_cpumap_set_none(libxl_cpumap *cpumap) +static inline void libxl_bitmap_set_none(libxl_bitmap *bitmap) { - memset(cpumap->map, 0, cpumap->size); + memset(bitmap->map, 0, bitmap->size); } -static inline int libxl_cpumap_cpu_valid(libxl_cpumap *cpumap, int cpu) +static inline int libxl_bitmap_cpu_valid(libxl_bitmap *bitmap, int bit) { - return cpu >= 0 && cpu < (cpumap->size * 8); + return bit >= 0 && bit < (bitmap->size * 8); } -#define libxl_for_each_cpu(var, map) for (var = 0; var < (map).size * 8; var++) -#define libxl_for_each_set_cpu(v, m) for (v = 0; v < (m).size * 8; v++) \ - if (libxl_cpumap_test(&(m), v)) +#define libxl_for_each_bit(var, map) for (var = 0; var < (map).size * 8; var++) +#define libxl_for_each_set_bit(v, m) for (v = 0; v < (m).size * 8; v++) \ + if (libxl_bitmap_test(&(m), v)) -static inline uint32_t libxl__sizekb_to_mb(uint32_t s) { +static inline int libxl_cpu_bitmap_alloc(libxl_ctx *ctx, libxl_bitmap *cpumap, + int max_cpus) +{ + if (max_cpus < 0) + return ERROR_INVAL; + if (max_cpus == 0) + max_cpus = libxl_get_max_cpus(ctx); + if (max_cpus == 0) + return ERROR_FAIL; + + return libxl_bitmap_alloc(ctx, cpumap, max_cpus); +} + + static inline uint32_t libxl__sizekb_to_mb(uint32_t s) { return (s + 1023) / 1024; } diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -492,19 +492,19 @@ static void split_string_into_string_lis free(s); } -static int vcpupin_parse(char *cpu, libxl_cpumap *cpumap) -{ - libxl_cpumap exclude_cpumap; +static int vcpupin_parse(char *cpu, libxl_bitmap *cpumap) +{ + libxl_bitmap exclude_cpumap; uint32_t cpuida, cpuidb; char *endptr, *toka, *tokb, *saveptr = NULL; int i, rc = 0, rmcpu; if (!strcmp(cpu, "all")) { - libxl_cpumap_set_any(cpumap); + libxl_bitmap_set_any(cpumap); return 0; } - if (libxl_cpumap_alloc(ctx, &exclude_cpumap, 0)) { + if (libxl_cpu_bitmap_alloc(ctx, &exclude_cpumap, 0)) { fprintf(stderr, "Error: Failed to allocate cpumap.\n"); return ENOMEM; } @@ -534,19 +534,19 @@ static int vcpupin_parse(char *cpu, libx } } while (cpuida <= cpuidb) { - rmcpu == 0 ? libxl_cpumap_set(cpumap, cpuida) : - libxl_cpumap_set(&exclude_cpumap, cpuida); + rmcpu == 0 ? libxl_bitmap_set(cpumap, cpuida) : + libxl_bitmap_set(&exclude_cpumap, cpuida); cpuida++; } } /* Clear all the cpus from the removal list */ - libxl_for_each_set_cpu(i, exclude_cpumap) { - libxl_cpumap_reset(cpumap, i); + libxl_for_each_set_bit(i, exclude_cpumap) { + libxl_bitmap_reset(cpumap, i); } vcpp_out: - libxl_cpumap_dispose(&exclude_cpumap); + libxl_bitmap_dispose(&exclude_cpumap); return rc; } @@ -649,13 +649,13 @@ static void parse_config_data(const char if (!xlu_cfg_get_long (config, "vcpus", &l, 0)) { b_info->max_vcpus = l; - if (libxl_cpumap_alloc(ctx, &b_info->avail_vcpus, l)) { + if (libxl_cpu_bitmap_alloc(ctx, &b_info->avail_vcpus, l)) { fprintf(stderr, "Unable to allocate cpumap\n"); exit(1); } - libxl_cpumap_set_none(&b_info->avail_vcpus); + libxl_bitmap_set_none(&b_info->avail_vcpus); while (l-- > 0) - libxl_cpumap_set((&b_info->avail_vcpus), l); + libxl_bitmap_set((&b_info->avail_vcpus), l); } if (!xlu_cfg_get_long (config, "maxvcpus", &l, 0)) @@ -664,7 +664,7 @@ static void parse_config_data(const char if (!xlu_cfg_get_list (config, "cpus", &cpus, 0, 1)) { int i, n_cpus = 0; - if (libxl_cpumap_alloc(ctx, &b_info->cpumap, 0)) { + if (libxl_cpu_bitmap_alloc(ctx, &b_info->cpumap, 0)) { fprintf(stderr, "Unable to allocate cpumap\n"); exit(1); } @@ -684,14 +684,14 @@ static void parse_config_data(const char * the cpumap derived from the list ensures memory is being * allocated on the proper nodes anyway. */ - libxl_cpumap_set_none(&b_info->cpumap); + libxl_bitmap_set_none(&b_info->cpumap); while ((buf = xlu_cfg_get_listitem(cpus, n_cpus)) != NULL) { i = atoi(buf); - if (!libxl_cpumap_cpu_valid(&b_info->cpumap, i)) { + if (!libxl_bitmap_cpu_valid(&b_info->cpumap, i)) { fprintf(stderr, "cpu %d illegal\n", i); exit(1); } - libxl_cpumap_set(&b_info->cpumap, i); + libxl_bitmap_set(&b_info->cpumap, i); if (n_cpus < b_info->max_vcpus) vcpu_to_pcpu[n_cpus] = i; n_cpus++; @@ -700,12 +700,12 @@ static void parse_config_data(const char else if (!xlu_cfg_get_string (config, "cpus", &buf, 0)) { char *buf2 = strdup(buf); - if (libxl_cpumap_alloc(ctx, &b_info->cpumap, 0)) { + if (libxl_cpu_bitmap_alloc(ctx, &b_info->cpumap, 0)) { fprintf(stderr, "Unable to allocate cpumap\n"); exit(1); } - libxl_cpumap_set_none(&b_info->cpumap); + libxl_bitmap_set_none(&b_info->cpumap); if (vcpupin_parse(buf2, &b_info->cpumap)) exit(1); free(buf2); @@ -1800,28 +1800,28 @@ start: /* If single vcpu to pcpu mapping was requested, honour it */ if (vcpu_to_pcpu) { - libxl_cpumap vcpu_cpumap; - - ret = libxl_cpumap_alloc(ctx, &vcpu_cpumap, 0); + libxl_bitmap vcpu_cpumap; + + ret = libxl_cpu_bitmap_alloc(ctx, &vcpu_cpumap, 0); if (ret) goto error_out; for (i = 0; i < d_config.b_info.max_vcpus; i++) { if (vcpu_to_pcpu[i] != -1) { - libxl_cpumap_set_none(&vcpu_cpumap); - libxl_cpumap_set(&vcpu_cpumap, vcpu_to_pcpu[i]); + libxl_bitmap_set_none(&vcpu_cpumap); + libxl_bitmap_set(&vcpu_cpumap, vcpu_to_pcpu[i]); } else { - libxl_cpumap_set_any(&vcpu_cpumap); + libxl_bitmap_set_any(&vcpu_cpumap); } if (libxl_set_vcpuaffinity(ctx, domid, i, &vcpu_cpumap)) { fprintf(stderr, "setting affinity failed on vcpu `%d'.\n", i); - libxl_cpumap_dispose(&vcpu_cpumap); + libxl_bitmap_dispose(&vcpu_cpumap); free(vcpu_to_pcpu); ret = ERROR_FAIL; goto error_out; } } - libxl_cpumap_dispose(&vcpu_cpumap); + libxl_bitmap_dispose(&vcpu_cpumap); free(vcpu_to_pcpu); vcpu_to_pcpu = NULL; } @@ -4058,7 +4058,7 @@ int main_vcpulist(int argc, char **argv) static void vcpupin(const char *d, const char *vcpu, char *cpu) { libxl_vcpuinfo *vcpuinfo; - libxl_cpumap cpumap; + libxl_bitmap cpumap; uint32_t vcpuid; char *endptr; @@ -4075,7 +4075,7 @@ static void vcpupin(const char *d, const find_domain(d); - if (libxl_cpumap_alloc(ctx, &cpumap, 0)) { + if (libxl_cpu_bitmap_alloc(ctx, &cpumap, 0)) { goto vcpupin_out; } @@ -4102,7 +4102,7 @@ static void vcpupin(const char *d, const libxl_vcpuinfo_list_free(vcpuinfo, nb_vcpu); } vcpupin_out1: - libxl_cpumap_dispose(&cpumap); + libxl_bitmap_dispose(&cpumap); vcpupin_out: ; } @@ -4122,7 +4122,7 @@ static void vcpuset(const char *d, const { char *endptr; unsigned int max_vcpus, i; - libxl_cpumap cpumap; + libxl_bitmap cpumap; max_vcpus = strtoul(nr_vcpus, &endptr, 10); if (nr_vcpus == endptr) { @@ -4132,17 +4132,17 @@ static void vcpuset(const char *d, const find_domain(d); - if (libxl_cpumap_alloc(ctx, &cpumap, 0)) { - fprintf(stderr, "libxl_cpumap_alloc failed\n"); + if (libxl_cpu_bitmap_alloc(ctx, &cpumap, 0)) { + fprintf(stderr, "libxl_cpu_bitmap_alloc failed\n"); return; } for (i = 0; i < max_vcpus; i++) - libxl_cpumap_set(&cpumap, i); + libxl_bitmap_set(&cpumap, i); if (libxl_set_vcpuonline(ctx, domid, &cpumap) < 0) fprintf(stderr, "libxl_set_vcpuonline failed domid=%d max_vcpus=%d\n", domid, max_vcpus); - libxl_cpumap_dispose(&cpumap); + libxl_bitmap_dispose(&cpumap); } int main_vcpuset(int argc, char **argv) @@ -4206,7 +4206,7 @@ static void output_physinfo(void) libxl_physinfo info; const libxl_version_info *vinfo; unsigned int i; - libxl_cpumap cpumap; + libxl_bitmap cpumap; int n = 0; if (libxl_get_physinfo(ctx, &info) != 0) { @@ -4238,8 +4238,8 @@ static void output_physinfo(void) printf("sharing_used_memory : %"PRIu64"\n", info.sharing_used_frames / i); } if (!libxl_get_freecpus(ctx, &cpumap)) { - libxl_for_each_cpu(i, cpumap) - if (libxl_cpumap_test(&cpumap, i)) + libxl_for_each_bit(i, cpumap) + if (libxl_bitmap_test(&cpumap, i)) n++; printf("free_cpus : %d\n", n); free(cpumap.map); @@ -5861,8 +5861,8 @@ int main_cpupoolcreate(int argc, char ** XLU_ConfigList *cpus; XLU_ConfigList *nodes; int n_cpus, n_nodes, i, n; - libxl_cpumap freemap; - libxl_cpumap cpumap; + libxl_bitmap freemap; + libxl_bitmap cpumap; libxl_uuid uuid; libxl_cputopology *topology; int rc = -ERROR_FAIL; @@ -5975,7 +5975,7 @@ int main_cpupoolcreate(int argc, char ** fprintf(stderr, "libxl_get_freecpus failed\n"); goto out_cfg; } - if (libxl_cpumap_alloc(ctx, &cpumap, 0)) { + if (libxl_cpu_bitmap_alloc(ctx, &cpumap, 0)) { fprintf(stderr, "Failed to allocate cpumap\n"); goto out_cfg; } @@ -5992,8 +5992,8 @@ int main_cpupoolcreate(int argc, char ** n = atoi(buf); for (i = 0; i < nr; i++) { if ((topology[i].node == n) && - libxl_cpumap_test(&freemap, i)) { - libxl_cpumap_set(&cpumap, i); + libxl_bitmap_test(&freemap, i)) { + libxl_bitmap_set(&cpumap, i); n_cpus++; } } @@ -6011,11 +6011,11 @@ int main_cpupoolcreate(int argc, char ** while ((buf = xlu_cfg_get_listitem(cpus, n_cpus)) != NULL) { i = atoi(buf); if ((i < 0) || (i >= freemap.size * 8) || - !libxl_cpumap_test(&freemap, i)) { + !libxl_bitmap_test(&freemap, i)) { fprintf(stderr, "cpu %d illegal or not free\n", i); goto out_cfg; } - libxl_cpumap_set(&cpumap, i); + libxl_bitmap_set(&cpumap, i); n_cpus++; } } else @@ -6113,8 +6113,8 @@ int main_cpupoollist(int argc, char **ar printf("%-19s", name); free(name); n = 0; - libxl_for_each_cpu(c, poolinfo[p].cpumap) - if (libxl_cpumap_test(&poolinfo[p].cpumap, c)) { + libxl_for_each_bit(c, poolinfo[p].cpumap) + if (libxl_bitmap_test(&poolinfo[p].cpumap, c)) { if (n && opt_cpus) printf(","); if (opt_cpus) printf("%d", c); n++; @@ -6313,7 +6313,7 @@ int main_cpupoolnumasplit(int argc, char int n_cpus; char name[16]; libxl_uuid uuid; - libxl_cpumap cpumap; + libxl_bitmap cpumap; libxl_cpupoolinfo *poolinfo; libxl_cputopology *topology; libxl_dominfo info; @@ -6343,7 +6343,7 @@ int main_cpupoolnumasplit(int argc, char return -ERROR_FAIL; } - if (libxl_cpumap_alloc(ctx, &cpumap, 0)) { + if (libxl_cpu_bitmap_alloc(ctx, &cpumap, 0)) { fprintf(stderr, "Failed to allocate cpumap\n"); libxl_cputopology_list_free(topology, n_cpus); return -ERROR_FAIL; @@ -6369,7 +6369,7 @@ int main_cpupoolnumasplit(int argc, char for (c = 0; c < n_cpus; c++) { if (topology[c].node == node) { topology[c].node = LIBXL_CPUTOPOLOGY_INVALID_ENTRY; - libxl_cpumap_set(&cpumap, n); + libxl_bitmap_set(&cpumap, n); n++; } } @@ -6391,7 +6391,7 @@ int main_cpupoolnumasplit(int argc, char fprintf(stderr, "failed to offline vcpus\n"); goto out; } - libxl_cpumap_set_none(&cpumap); + libxl_bitmap_set_none(&cpumap); for (c = 0; c < n_cpus; c++) { if (topology[c].node == LIBXL_CPUTOPOLOGY_INVALID_ENTRY) { @@ -6429,7 +6429,7 @@ int main_cpupoolnumasplit(int argc, char out: libxl_cputopology_list_free(topology, n_cpus); - libxl_cpumap_dispose(&cpumap); + libxl_bitmap_dispose(&cpumap); return ret; } diff --git a/tools/python/xen/lowlevel/xl/xl.c b/tools/python/xen/lowlevel/xl/xl.c --- a/tools/python/xen/lowlevel/xl/xl.c +++ b/tools/python/xen/lowlevel/xl/xl.c @@ -231,14 +231,14 @@ int attrib__libxl_cpuid_policy_list_set( return -1; } -int attrib__libxl_cpumap_set(PyObject *v, libxl_cpumap *pptr) +int attrib__libxl_bitmap_set(PyObject *v, libxl_bitmap *pptr) { int i; long cpu; for (i = 0; i < PyList_Size(v); i++) { cpu = PyInt_AsLong(PyList_GetItem(v, i)); - libxl_cpumap_set(pptr, cpu); + libxl_bitmap_set(pptr, cpu); } return 0; } @@ -293,14 +293,14 @@ PyObject *attrib__libxl_cpuid_policy_lis return NULL; } -PyObject *attrib__libxl_cpumap_get(libxl_cpumap *pptr) +PyObject *attrib__libxl_bitmap_get(libxl_bitmap *pptr) { PyObject *cpulist = NULL; int i; cpulist = PyList_New(0); - libxl_for_each_cpu(i, *pptr) { - if ( libxl_cpumap_test(pptr, i) ) { + libxl_for_each_bit(i, *pptr) { + if ( libxl_bitmap_test(pptr, i) ) { PyObject* pyint = PyInt_FromLong(i); PyList_Append(cpulist, pyint); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |