Zhang, Yang Z
2012-Jun-28 02:38 UTC
[PATCH v3 ]libxl: allow to allocate cpumap with specific size
Change from v2:
Rebase on top of latest head.
Currently, libxl_cpumap_alloc()allocate the cpumap with size of number of
physical cpus. In some place, we may want to allocate specific size of cpumap.
This patch allow to pass a argument to specific the size that you want to
allocate. If pass 0, it means the size is equal to number of physical cpus.
Signed-off-by: Yang Zhang <yang.z.zhang@Intel.com>
diff -r c6c9d20963d7 -r 079fce9e5557 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c Tue Jun 26 17:00:20 2012 +0100
+++ b/tools/libxl/libxl.c Wed Jun 27 10:38:16 2012 +0800
@@ -570,7 +570,7 @@ static int cpupool_info(libxl__gc *gc,
info->poolid = xcinfo->cpupool_id;
info->sched = xcinfo->sched_id;
info->n_dom = xcinfo->n_dom;
- if (libxl_cpumap_alloc(CTX, &info->cpumap))
+ if (libxl_cpumap_alloc(CTX, &info->cpumap, 0))
goto out;
memcpy(info->cpumap.map, xcinfo->cpumap, info->cpumap.size);
@@ -3287,7 +3287,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)) {
+ if (libxl_cpumap_alloc(ctx, &ptr->cpumap, 0)) {
LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "allocating
cpumap");
return NULL;
}
@@ -4040,8 +4040,8 @@ int libxl_cpupool_destroy(libxl_ctx *ctx
if ((info->cpupool_id != poolid) || (info->n_dom))
goto out;
- rc = ERROR_NOMEM;
- if (libxl_cpumap_alloc(ctx, &cpumap))
+ rc = libxl_cpumap_alloc(ctx, &cpumap, 0);
+ if (rc)
goto out;
memcpy(cpumap.map, info->cpumap, cpumap.size);
diff -r c6c9d20963d7 -r 079fce9e5557 tools/libxl/libxl_create.c
--- a/tools/libxl/libxl_create.c Tue Jun 26 17:00:20 2012 +0100
+++ b/tools/libxl/libxl_create.c Wed Jun 27 10:38:16 2012 +0800
@@ -205,8 +205,8 @@ int libxl__domain_build_info_setdefault(
b_info->cur_vcpus = 1;
if (!b_info->cpumap.size) {
- if (libxl_cpumap_alloc(CTX, &b_info->cpumap))
- return ERROR_NOMEM;
+ if (libxl_cpumap_alloc(CTX, &b_info->cpumap, 0))
+ return ERROR_FAIL;
libxl_cpumap_set_any(&b_info->cpumap);
}
diff -r c6c9d20963d7 -r 079fce9e5557 tools/libxl/libxl_utils.c
--- a/tools/libxl/libxl_utils.c Tue Jun 26 17:00:20 2012 +0100
+++ b/tools/libxl/libxl_utils.c Wed Jun 27 10:38:16 2012 +0800
@@ -489,19 +489,19 @@ int libxl_mac_to_device_nic(libxl_ctx *c
return rc;
}
-int libxl_cpumap_alloc(libxl_ctx *ctx, libxl_cpumap *cpumap)
+int libxl_cpumap_alloc(libxl_ctx *ctx, libxl_cpumap *cpumap, int max_cpus)
{
- int max_cpus;
int sz;
- max_cpus = libxl_get_max_cpus(ctx);
+ 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;
sz = (max_cpus + 7) / 8;
- cpumap->map = calloc(sz, sizeof(*cpumap->map));
- if (!cpumap->map)
- return ERROR_NOMEM;
+ cpumap->map = libxl__calloc(NULL, sizeof(*cpumap->map), sz);
cpumap->size = sz;
return 0;
}
diff -r c6c9d20963d7 -r 079fce9e5557 tools/libxl/libxl_utils.h
--- a/tools/libxl/libxl_utils.h Tue Jun 26 17:00:20 2012 +0100
+++ b/tools/libxl/libxl_utils.h Wed Jun 27 10:38:16 2012 +0800
@@ -63,7 +63,7 @@ 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 libxl_cpumap_alloc(libxl_ctx *ctx, libxl_cpumap *cpumap, int max_cpus);
int libxl_cpumap_test(libxl_cpumap *cpumap, int cpu);
void libxl_cpumap_set(libxl_cpumap *cpumap, int cpu);
void libxl_cpumap_reset(libxl_cpumap *cpumap, int cpu);
diff -r c6c9d20963d7 -r 079fce9e5557 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c Tue Jun 26 17:00:20 2012 +0100
+++ b/tools/libxl/xl_cmdimpl.c Wed Jun 27 10:38:16 2012 +0800
@@ -503,7 +503,7 @@ static int vcpupin_parse(char *cpu, libx
return 0;
}
- if (libxl_cpumap_alloc(ctx, &exclude_cpumap)) {
+ if (libxl_cpumap_alloc(ctx, &exclude_cpumap, 0)) {
fprintf(stderr, "Error: Failed to allocate cpumap.\n");
return ENOMEM;
}
@@ -656,7 +656,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)) {
+ if (libxl_cpumap_alloc(ctx, &b_info->cpumap, 0)) {
fprintf(stderr, "Unable to allocate cpumap\n");
exit(1);
}
@@ -692,7 +692,7 @@ 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)) {
+ if (libxl_cpumap_alloc(ctx, &b_info->cpumap, 0)) {
fprintf(stderr, "Unable to allocate cpumap\n");
exit(1);
}
@@ -1779,7 +1779,9 @@ start:
if (vcpu_to_pcpu) {
libxl_cpumap vcpu_cpumap;
- libxl_cpumap_alloc(ctx, &vcpu_cpumap);
+ ret = libxl_cpumap_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) {
@@ -4051,7 +4053,7 @@ static void vcpupin(const char *d, const
find_domain(d);
- if (libxl_cpumap_alloc(ctx, &cpumap)) {
+ if (libxl_cpumap_alloc(ctx, &cpumap, 0)) {
goto vcpupin_out;
}
@@ -4108,7 +4110,7 @@ static void vcpuset(const char *d, const
find_domain(d);
- if (libxl_cpumap_alloc(ctx, &cpumap)) {
+ if (libxl_cpumap_alloc(ctx, &cpumap, 0)) {
fprintf(stderr, "libxl_cpumap_alloc failed\n");
return;
}
@@ -5921,7 +5923,7 @@ int main_cpupoolcreate(int argc, char **
fprintf(stderr, "libxl_get_freecpus failed\n");
goto out_cfg;
}
- if (libxl_cpumap_alloc(ctx, &cpumap)) {
+ if (libxl_cpumap_alloc(ctx, &cpumap, 0)) {
fprintf(stderr, "Failed to allocate cpumap\n");
goto out_cfg;
}
@@ -6289,7 +6291,7 @@ int main_cpupoolnumasplit(int argc, char
return -ERROR_FAIL;
}
- if (libxl_cpumap_alloc(ctx, &cpumap)) {
+ if (libxl_cpumap_alloc(ctx, &cpumap, 0)) {
fprintf(stderr, "Failed to allocate cpumap\n");
libxl_cputopology_list_free(topology, n_cpus);
return -ERROR_FAIL;
Ian Jackson
2012-Jun-28 14:54 UTC
Re: [PATCH v3 ]libxl: allow to allocate cpumap with specific size
Zhang, Yang Z writes ("[Xen-devel] [PATCH v3 ]libxl: allow to allocate
cpumap with specific size"):> Change from v2:
> Rebase on top of latest head.
>
> Currently, libxl_cpumap_alloc()allocate the cpumap with size of
> number of physical cpus. In some place, we may want to allocate
> specific size of cpumap. This patch allow to pass a argument to
> specific the size that you want to allocate. If pass 0, it means the
> size is equal to number of physical cpus.
Isn''t this same objective achieved in a more general way by
Dario''s
[PATCH 05 of 10 v2] libxl: rename libxl_cpumap to libxl_bitmap
?
Ian.
Ian Campbell
2012-Jun-28 14:58 UTC
Re: [PATCH v3 ]libxl: allow to allocate cpumap with specific size
On Thu, 2012-06-28 at 15:54 +0100, Ian Jackson wrote:> Zhang, Yang Z writes ("[Xen-devel] [PATCH v3 ]libxl: allow to allocate cpumap with specific size"): > > Change from v2: > > Rebase on top of latest head. > > > > Currently, libxl_cpumap_alloc()allocate the cpumap with size of > > number of physical cpus. In some place, we may want to allocate > > specific size of cpumap. This patch allow to pass a argument to > > specific the size that you want to allocate. If pass 0, it means the > > size is equal to number of physical cpus. > > Isn''t this same objective achieved in a more general way by Dario''s > [PATCH 05 of 10 v2] libxl: rename libxl_cpumap to libxl_bitmapDidn''t Dario''s patch build on this one, or perhaps incorporate it?
Dario Faggioli
2012-Jun-28 15:22 UTC
Re: [PATCH v3 ]libxl: allow to allocate cpumap with specific size
On Thu, 2012-06-28 at 15:58 +0100, Ian Campbell wrote:> On Thu, 2012-06-28 at 15:54 +0100, Ian Jackson wrote: > > Zhang, Yang Z writes ("[Xen-devel] [PATCH v3 ]libxl: allow to allocate cpumap with specific size"): > > > Change from v2: > > > Rebase on top of latest head. > > > > > > Currently, libxl_cpumap_alloc()allocate the cpumap with size of > > > number of physical cpus. In some place, we may want to allocate > > > specific size of cpumap. This patch allow to pass a argument to > > > specific the size that you want to allocate. If pass 0, it means the > > > size is equal to number of physical cpus. > > > > Isn''t this same objective achieved in a more general way by Dario''s > > [PATCH 05 of 10 v2] libxl: rename libxl_cpumap to libxl_bitmap >Well, there''s sure is a clash, as I''m changing the name of map data structure. If you check this in, I''ll rebase mine one on top of it.> Didn''t Dario''s patch build on this one, or perhaps incorporate it? >No, or at least not yet, as this patch is not in yet. Anyway, that''s of course possible, just decide what you prefer. :-) Merging this patch and my 05/10 won''t be that hard, and I can take care of it, and the same should apply to this "[Xen-devel] [PATCH v4 ]libxl: allow to set more than 31 vcpus". Thanks and Regards, Dario -- <<This happens because I choose it to happen!>> (Raistlin Majere) ----------------------------------------------------------------- Dario Faggioli, Ph.D, http://retis.sssup.it/people/faggioli Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Ian Campbell
2012-Jun-28 15:33 UTC
Re: [PATCH v3 ]libxl: allow to allocate cpumap with specific size
On Thu, 2012-06-28 at 16:22 +0100, Dario Faggioli wrote:> On Thu, 2012-06-28 at 15:58 +0100, Ian Campbell wrote: > > On Thu, 2012-06-28 at 15:54 +0100, Ian Jackson wrote: > > > Zhang, Yang Z writes ("[Xen-devel] [PATCH v3 ]libxl: allow to allocate cpumap with specific size"): > > > > Change from v2: > > > > Rebase on top of latest head. > > > > > > > > Currently, libxl_cpumap_alloc()allocate the cpumap with size of > > > > number of physical cpus. In some place, we may want to allocate > > > > specific size of cpumap. This patch allow to pass a argument to > > > > specific the size that you want to allocate. If pass 0, it means the > > > > size is equal to number of physical cpus. > > > > > > Isn''t this same objective achieved in a more general way by Dario''s > > > [PATCH 05 of 10 v2] libxl: rename libxl_cpumap to libxl_bitmap > > > Well, there''s sure is a clash, as I''m changing the name of map data > structure. If you check this in, I''ll rebase mine one on top of it. > > > > Didn''t Dario''s patch build on this one, or perhaps incorporate it? > > > No, or at least not yet, as this patch is not in yet. Anyway, that''s of > course possible, just decide what you prefer. :-) > > Merging this patch and my 05/10 won''t be that hard, and I can take care > of it, and the same should apply to this "[Xen-devel] [PATCH v4 ]libxl: > allow to set more than 31 vcpus".If you don''t mind I think we should take this and the 31 cpus one (assuming they are otherwise acked) now and the numa one can be rebased on it. Ian.
Dario Faggioli
2012-Jun-28 15:40 UTC
Re: [PATCH v3 ]libxl: allow to allocate cpumap with specific size
On Thu, 2012-06-28 at 16:33 +0100, Ian Campbell wrote:> > Merging this patch and my 05/10 won''t be that hard, and I can take care > > of it, and the same should apply to this "[Xen-devel] [PATCH v4 ]libxl: > > allow to set more than 31 vcpus". > > If you don''t mind I think we should take this and the 31 cpus one > (assuming they are otherwise acked) now and the numa one can be rebased > on it. >As I said, feel free to do whatever you wish, I''ll rebase the NUMA series on top of whatever will be in the repository at the time of posting! :-P Dario -- <<This happens because I choose it to happen!>> (Raistlin Majere) ----------------------------------------------------------------- Dario Faggioli, Ph.D, http://retis.sssup.it/people/faggioli Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Ian Jackson
2012-Jun-28 16:52 UTC
Re: [PATCH v3 ]libxl: allow to allocate cpumap with specific size
Zhang, Yang Z writes ("[Xen-devel] [PATCH v3 ]libxl: allow to allocate
cpumap with specific size"):> Currently, libxl_cpumap_alloc()allocate the cpumap with size of number of
physical cpus. In some place, we may want to allocate specific size of cpumap.
> This patch allow to pass a argument to specific the size that you want to
allocate. If pass 0, it means the size is equal to number of physical cpus.
>
> Signed-off-by: Yang Zhang <yang.z.zhang@Intel.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
Thanks,
Ian.