[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.