[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 04 of 10 v3] libxl: rename libxl_cpumap to libxl_bitmap
On Wed, 2012-07-04 at 17:18 +0100, Dario Faggioli wrote: > # 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> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > > --- > 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 |