On Fri, 2010-11-26 at 07:10 +0000, Juergen Gross wrote:
> +
> + if (libxl_cpumap_alloc(&ctx, &cpumap)) {
> + fprintf(stderr, "Failed to allocate cpumap\n");
> + return -ERROR_FAIL;
> + }
> +
> + poolinfo = libxl_list_cpupool(&ctx, &n_pools);
> + if (!poolinfo) {
> + fprintf(stderr, "error getting cpupool info\n");
> + return -ERROR_NOMEM;
> + }
> + poolid = poolinfo[0].poolid;
> + schedid = poolinfo[0].sched_id;
> + libxl_for_each_cpu(c, poolinfo[0].cpumap)
> + if (libxl_cpumap_test(&poolinfo[0].cpumap, c))
> + libxl_cpumap_set(&cpumap, c);
Can the libxl_cpumap_alloc and this loop be deferred until after the
check and bail for n_pools > 1?
There seems to be no way to find out the number of pools without also
getting all the info about them, which is a shame.
> + /* Reset Pool-0 to 1st node */
> + node = topology->nodemap.array[0];
> + libxl_for_each_cpu(c, cpumap) {
> + if (!libxl_cpumap_test(&cpumap, c) && (c <
> topology->nodemap.entries) &&
> + (topology->nodemap.array[c] == node)) {
> + ret = -libxl_cpupool_cpuadd(&ctx, poolid, c);
> + if (ret) {
> + fprintf(stderr, "error on adding cpu to Pool-0\n");
> + goto out;
> + }
> + libxl_cpumap_reset(&freemap, c);
(nt really related to this series but I wish this was called
libxl_cpumap_clear, I had to go check it wasn't resetting the whole map
or something...)
> + }
> + }
> + libxl_for_each_cpu(c, cpumap) {
> + if (libxl_cpumap_test(&cpumap, c) && (c < topology->nodemap.entries)
> &&
> + (topology->nodemap.array[c] != node)) {
> + ret = -libxl_cpupool_cpuremove(&ctx, poolid, c);
> + if (ret) {
> + fprintf(stderr, "error on removing cpu from Pool-0\n");
> + goto out;
> + }
> + libxl_cpumap_set(&freemap, c);
> + }
> + }
Can this loop be merged with the preceding loop, with the body being the
else case of the if?
> + for (;;) {
> + node = -1;
> + libxl_for_each_cpu(c, freemap) {
> + if (libxl_cpumap_test(&freemap, c) && (node == -1)) {
> + node = topology->nodemap.array[c];
> + }
> + libxl_cpumap_reset(&cpumap, c);
> + if ((node >= 0) && libxl_cpumap_test(&freemap, c) &&
> + (c < topology->nodemap.entries) &&
> (topology->nodemap.array[c] == node)) {
> + libxl_cpumap_reset(&freemap, c);
> + libxl_cpumap_set(&cpumap, c);
> + }
> + }
> + if (node == -1)
> + break;
> +
> + snprintf(name, 15, "Pool-node%d", node);
Do we want to rename Pool-0 at some point too or do we rely on that name
elsewhere?
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|