[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: [Patch] support of cpu pools in xl
> On Fri, 2010-09-17 at 07:10 +0100, Juergen Gross wrote: > > attached patch adds support of cpu pools in xl/libxl. > Ian, I didn't split up this patch, because the updated libxl_cpumask > structure requires changes to xl in any case. That's fine. > BTW: I realized that libxlu_cfg_l.c seems to be in the repository. > Isn't this file generated by make? I think it should be removed there. In an ideal world, yes. I think this was a workaround for buggy versions of flex observed in the field or something. > Signed-off-by: juergen.gross@xxxxxxxxxxxxxx > > Support of cpu pools in xl: > library functions > xl pool-create > xl pool-list > xl pool-destroy > xl pool-cpu-add > xl pool-cpu-remove > xl pool-migrate > > diff -r d978675f3d53 tools/libxl/libxl.c > --- a/tools/libxl/libxl.c Thu Sep 16 18:29:26 2010 +0100 > +++ b/tools/libxl/libxl.c Fri Sep 17 07:42:30 2010 +0200 > @@ -609,9 +609,17 @@ libxl_poolinfo * libxl_list_pool(libxl_c > libxl_poolinfo * libxl_list_pool(libxl_ctx *ctx, int *nb_pool) > { > libxl_poolinfo *ptr; > - int i, ret; > - xc_cpupoolinfo_t info[256]; > - int size = 256; > + int i, m; > + xc_cpupoolinfo_t *info; > + int size; > + uint32_t poolid; > + libxl_physinfo physinfo; > + > + if (libxl_get_physinfo(ctx, &physinfo) != 0) { > + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting phys info"); > + return NULL; > + } > + size = physinfo.max_cpu_id + 32; Where does the number 32 come from? > ptr = calloc(size, sizeof(libxl_poolinfo)); > if (!ptr) { > @@ -619,16 +627,23 @@ libxl_poolinfo * libxl_list_pool(libxl_c > return NULL; > } > > - ret = xc_cpupool_getinfo(ctx->xch, 0, 256, info); > - if (ret<0) { > - LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting cpupool info"); > - return NULL; > + poolid = 0; > + for (i = 0; i < size; i++) { > + info = xc_cpupool_getinfo(ctx->xch, poolid); > + if (info == NULL) > + break; > + ptr[i].poolid = info->cpupool_id; > + ptr[i].sched_id = info->sched_id; > + ptr[i].n_dom = info->n_dom; > + if (libxl_cpumap_alloc(&ptr[i].cpumap, physinfo.max_cpu_id + 1)) > + break; > + for (m = 0; m < ptr[i].cpumap.size / sizeof(*ptr[i].cpumap.map); m++) > + ptr[i].cpumap.map[m] = info->cpumap[m]; I guess if "physinfo.max_cpu_id + 1" does not correspond to info->cpumap_size then that is a serious error but if it does happen then you may run over the end of either ptr[i].cpumap.map or info->cpumap. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |