libxl: introduce libxl__qmp_query_cpus

It interrogates QEMU for CPUs and update the bitmap accordingly.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Dario Faggioli <dario.faggioli@citrix.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
This commit is contained in:
Wei Liu committed 2016-07-12 12:49:41 +01:00
1 parent b173750d2b
commit 324bd8f5dc
2 files changed
+41

No files matched your search

+3
View File
@@ -1794,6 +1794,9 @@ _hidden int libxl__qmp_set_global_dirty_log(libxl__gc *gc, int domid, bool enabl
_hidden int libxl__qmp_insert_cdrom(libxl__gc *gc, int domid, const libxl_device_disk *disk);
/* Add a virtual CPU */
_hidden int libxl__qmp_cpu_add(libxl__gc *gc, int domid, int index);
/* Query the bitmap of CPUs */
_hidden int libxl__qmp_query_cpus(libxl__gc *gc, int domid,
libxl_bitmap *map);
/* Start NBD server */
_hidden int libxl__qmp_nbd_server_start(libxl__gc *gc, int domid,
const char *host, const char *port);
+38
View File
@@ -979,6 +979,44 @@ int libxl__qmp_cpu_add(libxl__gc *gc, int domid, int idx)
return qmp_run_command(gc, domid, "cpu-add", args, NULL, NULL);
}
static int query_cpus_callback(libxl__qmp_handler *qmp,
const libxl__json_object *response,
void *opaque)
{
libxl_bitmap *map = opaque;
unsigned int i;
const libxl__json_object *cpu = NULL;
int rc;
GC_INIT(qmp->ctx);
libxl_bitmap_set_none(map);
for (i = 0; (cpu = libxl__json_array_get(response, i)); i++) {
unsigned int idx;
const libxl__json_object *o;
o = libxl__json_map_get("CPU", cpu, JSON_INTEGER);
if (!o) {
LOG(ERROR, "Failed to retrieve CPU index.");
rc = ERROR_FAIL;
goto out;
}
idx = libxl__json_object_get_integer(o);
libxl_bitmap_set(map, idx);
}
rc = 0;
out:
GC_FREE;
return rc;
}
int libxl__qmp_query_cpus(libxl__gc *gc, int domid, libxl_bitmap *map)
{
return qmp_run_command(gc, domid, "query-cpus", NULL,
query_cpus_callback, map);
}
int libxl__qmp_nbd_server_start(libxl__gc *gc, int domid,
const char *host, const char *port)
{
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.