* [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset
@ 2013-02-19 13:15 Alex Bligh
2013-02-19 13:15 ` [PATCHv4 01/11] libxl_json: Export json_object related function Alex Bligh
` (11 more replies)
0 siblings, 12 replies; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 13:15 UTC (permalink / raw)
To: xen-devel, Stefano Stabellini; +Cc: Ian Jackson, Ian Campbell, Alex Bligh
This patch series consists of 2 parts:
* 11 patches to libxl
* 5 patches to QEMU
The 11 patches to libxl are unchanged since version 3 of the patch,
but have Acked-By lines reintroduced.
The 5 patches to QEMU are unchanged since version 2 of the patch.
These patches enable live-migrate on HVM using the upstream qemu-xen
device model under Xen 4.2. Currently this is unimplemented. In the
main they are backports of patches in xen-unstable, thought the
QEMU side in particular needed some fiddling.
I would suggest these patches should be included in 4.2.2.
You can find these on Github at:
https://github.com/abligh/xen-4.2-live-migrate/commits/PATCHv4
Or on the PATCHv4 branch of this repository:
https://github.com/abligh/xen-4.2-live-migrate.git
Alex Bligh (11):
libxl_json: Export json_object related function.
libxl_json: Remove JSON_ERROR from enum.
libxl_json: Replace JSON_TRUE/FALSE by JSON_BOOL.
libxl_json: Introduce libxl__json_object_to_yajl_gen.
libxl_qmp: Introduces helpers to create an argument list.
libxl_qmp: Use qmp_parameters_* functions for param list of a QMP
command.
libxl_qmp: Simplify run of single QMP commands.
libxl_qmp: Introduce libxl__qmp_set_global_dirty_log.
libxl_dom: Call the right switch logdirty for the right DM.
libxl: libxl__qmp_save: Add filename as JSON parameter to
xen-save-devices-state
libxl: Allow migration with qemu-xen.
tools/libxl/libxl.c | 17 ----
tools/libxl/libxl_dom.c | 45 +++++++++-
tools/libxl/libxl_internal.h | 35 ++++++-
tools/libxl/libxl_json.c | 94 +++++++++++++++----
tools/libxl/libxl_qmp.c | 209 +++++++++++++++++++++---------------------
5 files changed, 253 insertions(+), 147 deletions(-)
All this patch series:
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
--
1.7.4.1
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCHv4 01/11] libxl_json: Export json_object related function.
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
@ 2013-02-19 13:15 ` Alex Bligh
2013-02-19 13:15 ` [PATCHv4 02/11] libxl_json: Remove JSON_ERROR from enum Alex Bligh
` (10 subsequent siblings)
11 siblings, 0 replies; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 13:15 UTC (permalink / raw)
To: xen-devel, Stefano Stabellini; +Cc: Ian Jackson, Ian Campbell, Alex Bligh
Export libxl__json_object_alloc and libxl__json_object_append_to to
use them in a later patch.
Backported from xen-unstable patch:
: User Anthony PERARD <anthony.perard@citrix.com>
: Date 1349693129 -3600
: Node ID c9b80c7f8db1a5d26906a2298c481bf7e87fda94
: Parent 93e3e6a33e0a1ec9f92fc575334caa35e6dbc757
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Signed-off-by: Alex Bligh <alex@alex.org.uk>
---
tools/libxl/libxl_internal.h | 14 ++++++++++++--
tools/libxl/libxl_json.c | 32 ++++++++++++++++----------------
2 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index a135cd7..2959527 100644
*** a/tools/libxl/libxl_internal.h
--- b/tools/libxl/libxl_internal.h
***************
*** 1512,1517 ****
--- 1512,1526 ----
return -1;
}
+ /*
+ * NOGC can be used with those json_object functions, but the
+ * libxl__json_object* will need to be freed with libxl__json_object_free.
+ */
+ _hidden libxl__json_object *libxl__json_object_alloc(libxl__gc *gc_opt,
+ libxl__json_node_type type);
+ _hidden int libxl__json_object_append_to(libxl__gc *gc_opt,
+ libxl__json_object *obj,
+ libxl__json_object *dst);
_hidden libxl__json_object *libxl__json_array_get(const libxl__json_object *o,
int i);
_hidden
***************
*** 1520,1528 ****
_hidden const libxl__json_object *libxl__json_map_get(const char *key,
const libxl__json_object *o,
libxl__json_node_type expected_type);
! _hidden void libxl__json_object_free(libxl__gc *gc, libxl__json_object *obj);
! _hidden libxl__json_object *libxl__json_parse(libxl__gc *gc, const char *s);
/* Based on /local/domain/$domid/dm-version xenstore key
* default is qemu xen traditional */
--- 1529,1538 ----
_hidden const libxl__json_object *libxl__json_map_get(const char *key,
const libxl__json_object *o,
libxl__json_node_type expected_type);
! _hidden void libxl__json_object_free(libxl__gc *gc_opt,
! libxl__json_object *obj);
! _hidden libxl__json_object *libxl__json_parse(libxl__gc *gc_opt, const char *s);
/* Based on /local/domain/$domid/dm-version xenstore key
* default is qemu xen traditional */
diff --git a/tools/libxl/libxl_json.c b/tools/libxl/libxl_json.c
index caa8312..0b0cf2f 100644
*** a/tools/libxl/libxl_json.c
--- b/tools/libxl/libxl_json.c
***************
*** 205,211 ****
* libxl__json_object helper functions
*/
! static libxl__json_object *json_object_alloc(libxl__gc *gc,
libxl__json_node_type type)
{
libxl__json_object *obj;
--- 205,211 ----
* libxl__json_object helper functions
*/
! libxl__json_object *libxl__json_object_alloc(libxl__gc *gc,
libxl__json_node_type type)
{
libxl__json_object *obj;
***************
*** 236,242 ****
return obj;
}
! static int json_object_append_to(libxl__gc *gc,
libxl__json_object *obj,
libxl__json_object *dst)
{
--- 236,242 ----
return obj;
}
! int libxl__json_object_append_to(libxl__gc *gc,
libxl__json_object *obj,
libxl__json_object *dst)
{
***************
*** 393,402 ****
DEBUG_GEN(ctx, null);
! if ((obj = json_object_alloc(ctx->gc, JSON_NULL)) == NULL)
return 0;
! if (json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
libxl__json_object_free(ctx->gc, obj);
return 0;
}
--- 393,402 ----
DEBUG_GEN(ctx, null);
! if ((obj = libxl__json_object_alloc(ctx->gc, JSON_NULL)) == NULL)
return 0;
! if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
libxl__json_object_free(ctx->gc, obj);
return 0;
}
***************
*** 411,421 ****
DEBUG_GEN_VALUE(ctx, bool, boolean);
! if ((obj = json_object_alloc(ctx->gc,
boolean ? JSON_TRUE : JSON_FALSE)) == NULL)
return 0;
! if (json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
libxl__json_object_free(ctx->gc, obj);
return 0;
}
--- 411,421 ----
DEBUG_GEN_VALUE(ctx, bool, boolean);
! if ((obj = libxl__json_object_alloc(ctx->gc,
boolean ? JSON_TRUE : JSON_FALSE)) == NULL)
return 0;
! if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
libxl__json_object_free(ctx->gc, obj);
return 0;
}
***************
*** 448,454 ****
goto error;
}
! if ((obj = json_object_alloc(ctx->gc, JSON_DOUBLE)) == NULL)
return 0;
obj->u.d = d;
} else {
--- 448,454 ----
goto error;
}
! if ((obj = libxl__json_object_alloc(ctx->gc, JSON_DOUBLE)) == NULL)
return 0;
obj->u.d = d;
} else {
***************
*** 458,464 ****
goto error;
}
! if ((obj = json_object_alloc(ctx->gc, JSON_INTEGER)) == NULL)
return 0;
obj->u.i = i;
}
--- 458,464 ----
goto error;
}
! if ((obj = libxl__json_object_alloc(ctx->gc, JSON_INTEGER)) == NULL)
return 0;
obj->u.i = i;
}
***************
*** 466,472 ****
error:
/* If the conversion fail, we just store the original string. */
! if ((obj = json_object_alloc(ctx->gc, JSON_NUMBER)) == NULL)
return 0;
t = malloc(len + 1);
--- 466,472 ----
error:
/* If the conversion fail, we just store the original string. */
! if ((obj = libxl__json_object_alloc(ctx->gc, JSON_NUMBER)) == NULL)
return 0;
t = malloc(len + 1);
***************
*** 481,487 ****
obj->u.string = t;
out:
! if (json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
libxl__json_object_free(ctx->gc, obj);
return 0;
}
--- 481,487 ----
obj->u.string = t;
out:
! if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
libxl__json_object_free(ctx->gc, obj);
return 0;
}
***************
*** 508,520 ****
strncpy(t, (const char *) str, len);
t[len] = 0;
! if ((obj = json_object_alloc(ctx->gc, JSON_STRING)) == NULL) {
free(t);
return 0;
}
obj->u.string = t;
! if (json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
libxl__json_object_free(ctx->gc, obj);
return 0;
}
--- 508,520 ----
strncpy(t, (const char *) str, len);
t[len] = 0;
! if ((obj = libxl__json_object_alloc(ctx->gc, JSON_STRING)) == NULL) {
free(t);
return 0;
}
obj->u.string = t;
! if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
libxl__json_object_free(ctx->gc, obj);
return 0;
}
***************
*** 573,583 ****
DEBUG_GEN(ctx, map_open);
! if ((obj = json_object_alloc(ctx->gc, JSON_MAP)) == NULL)
return 0;
if (ctx->current) {
! if (json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
libxl__json_object_free(ctx->gc, obj);
return 0;
}
--- 573,583 ----
DEBUG_GEN(ctx, map_open);
! if ((obj = libxl__json_object_alloc(ctx->gc, JSON_MAP)) == NULL)
return 0;
if (ctx->current) {
! if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
libxl__json_object_free(ctx->gc, obj);
return 0;
}
***************
*** 615,625 ****
DEBUG_GEN(ctx, array_open);
! if ((obj = json_object_alloc(ctx->gc, JSON_ARRAY)) == NULL)
return 0;
if (ctx->current) {
! if (json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
libxl__json_object_free(ctx->gc, obj);
return 0;
}
- -
--- 615,625 ----
DEBUG_GEN(ctx, array_open);
! if ((obj = libxl__json_object_alloc(ctx->gc, JSON_ARRAY)) == NULL)
return 0;
if (ctx->current) {
! if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
libxl__json_object_free(ctx->gc, obj);
return 0;
}
1.7.4.1
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCHv4 02/11] libxl_json: Remove JSON_ERROR from enum.
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
2013-02-19 13:15 ` [PATCHv4 01/11] libxl_json: Export json_object related function Alex Bligh
@ 2013-02-19 13:15 ` Alex Bligh
2013-02-19 13:15 ` [PATCHv4 03/11] libxl_json: Replace JSON_TRUE/FALSE by JSON_BOOL Alex Bligh
` (9 subsequent siblings)
11 siblings, 0 replies; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 13:15 UTC (permalink / raw)
To: xen-devel, Stefano Stabellini; +Cc: Ian Jackson, Ian Campbell, Alex Bligh
This value from libxl__json_node_type is never used.
Backported from xen-unstable patch:
: HG changeset patch
: User Anthony PERARD <anthony.perard@citrix.com>
: Date 1349693130 -3600
: Node ID 4a6d5d8cba4fc44f9bbda201188885868604b8e8
: Parent c9b80c7f8db1a5d26906a2298c481bf7e87fda94
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Signed-off-by: Alex Bligh <alex@alex.org.uk>
---
tools/libxl/libxl_internal.h | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 2959527..5b285d4 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -1428,7 +1428,6 @@ _hidden yajl_gen_status libxl__yajl_gen_asciiz(yajl_gen hand, const char *str);
_hidden yajl_gen_status libxl__yajl_gen_enum(yajl_gen hand, const char *str);
typedef enum {
- JSON_ERROR,
JSON_NULL,
JSON_TRUE,
JSON_FALSE,
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCHv4 03/11] libxl_json: Replace JSON_TRUE/FALSE by JSON_BOOL.
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
2013-02-19 13:15 ` [PATCHv4 01/11] libxl_json: Export json_object related function Alex Bligh
2013-02-19 13:15 ` [PATCHv4 02/11] libxl_json: Remove JSON_ERROR from enum Alex Bligh
@ 2013-02-19 13:15 ` Alex Bligh
2013-02-19 13:15 ` [PATCHv4 04/11] libxl_json: Introduce libxl__json_object_to_yajl_gen Alex Bligh
` (8 subsequent siblings)
11 siblings, 0 replies; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 13:15 UTC (permalink / raw)
To: xen-devel, Stefano Stabellini; +Cc: Ian Jackson, Ian Campbell, Alex Bligh
Those two JSON_TRUE and JSON_FALSE were types of node. But it's better
to have a unique JSON_BOOL type.
Backported from xen-unstable patch:
: HG changeset patch
: User Anthony PERARD <anthony.perard@citrix.com>
: Date 1349693131 -3600
: Node ID 3f71aab0e2774ded0c5a03436c364fb031ba9aa0
: Parent 4a6d5d8cba4fc44f9bbda201188885868604b8e8
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Signed-off-by: Alex Bligh <alex@alex.org.uk>
---
tools/libxl/libxl_internal.h | 15 +++++++++++++--
tools/libxl/libxl_json.c | 3 +--
tools/libxl/libxl_qmp.c | 3 ++-
3 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 5b285d4..7dbd8af 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -1429,8 +1429,7 @@ _hidden yajl_gen_status libxl__yajl_gen_enum(yajl_gen hand, const char *str);
typedef enum {
JSON_NULL,
- JSON_TRUE,
- JSON_FALSE,
+ JSON_BOOL,
JSON_INTEGER,
JSON_DOUBLE,
/* number is store in string, it's too big to be a long long or a double */
@@ -1444,6 +1443,7 @@ typedef enum {
typedef struct libxl__json_object {
libxl__json_node_type type;
union {
+ bool b;
long long i;
double d;
char *string;
@@ -1462,6 +1462,10 @@ typedef struct {
typedef struct libxl__yajl_ctx libxl__yajl_ctx;
+static inline bool libxl__json_object_is_bool(const libxl__json_object *o)
+{
+ return o != NULL && o->type == JSON_BOOL;
+}
static inline bool libxl__json_object_is_string(const libxl__json_object *o)
{
return o != NULL && o->type == JSON_STRING;
@@ -1479,6 +1483,13 @@ static inline bool libxl__json_object_is_array(const libxl__json_object *o)
return o != NULL && o->type == JSON_ARRAY;
}
+static inline bool libxl__json_object_get_bool(const libxl__json_object *o)
+{
+ if (libxl__json_object_is_bool(o))
+ return o->u.b;
+ else
+ return false;
+}
static inline
const char *libxl__json_object_get_string(const libxl__json_object *o)
{
diff --git a/tools/libxl/libxl_json.c b/tools/libxl/libxl_json.c
index 0b0cf2f..98db465 100644
--- a/tools/libxl/libxl_json.c
+++ b/tools/libxl/libxl_json.c
@@ -411,8 +411,7 @@ static int json_callback_boolean(void *opaque, int boolean)
DEBUG_GEN_VALUE(ctx, bool, boolean);
- if ((obj = libxl__json_object_alloc(ctx->gc,
- boolean ? JSON_TRUE : JSON_FALSE)) == NULL)
+ if ((obj = libxl__json_object_alloc(ctx->gc, JSON_BOOL)) == NULL)
return 0;
if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) {
diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c
index e33b130..9e86c35 100644
--- a/tools/libxl/libxl_qmp.c
+++ b/tools/libxl/libxl_qmp.c
@@ -178,7 +178,8 @@ static int qmp_register_vnc_callback(libxl__qmp_handler *qmp,
goto out;
}
- if (libxl__json_map_get("enabled", o, JSON_FALSE)) {
+ obj = libxl__json_map_get("enabled", o, JSON_BOOL);
+ if (!obj || !libxl__json_object_get_bool(obj)) {
rc = 0;
goto out;
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCHv4 04/11] libxl_json: Introduce libxl__json_object_to_yajl_gen.
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
` (2 preceding siblings ...)
2013-02-19 13:15 ` [PATCHv4 03/11] libxl_json: Replace JSON_TRUE/FALSE by JSON_BOOL Alex Bligh
@ 2013-02-19 13:15 ` Alex Bligh
2013-02-19 13:15 ` [PATCHv4 05/11] libxl_qmp: Introduces helpers to create an argument list Alex Bligh
` (7 subsequent siblings)
11 siblings, 0 replies; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 13:15 UTC (permalink / raw)
To: xen-devel, Stefano Stabellini; +Cc: Ian Jackson, Ian Campbell, Alex Bligh
This function converts a libxl__json_object to yajl by calling every
yajl_gen_* function on a preallocated yajl_gen hand.
This helps to integrate a json_object into an already existing
yajl_gen tree.
This function is used in a later patch.
Backported from xen-unstable patch:
: HG changeset patch
: User Anthony PERARD <anthony.perard@citrix.com>
: Date 1349693132 -3600
: Node ID 74dee58cfc0d2d6594f388db3b4d2ce91d1bb204
: Parent 3f71aab0e2774ded0c5a03436c364fb031ba9aa0
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Signed-off-by: Alex Bligh <alex@alex.org.uk>
---
tools/libxl/libxl_internal.h | 3 ++
tools/libxl/libxl_json.c | 61 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 64 insertions(+), 0 deletions(-)
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 7dbd8af..b00ff61 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -1539,6 +1539,9 @@ libxl__json_map_node *libxl__json_map_node_get(const libxl__json_object *o,
_hidden const libxl__json_object *libxl__json_map_get(const char *key,
const libxl__json_object *o,
libxl__json_node_type expected_type);
+_hidden yajl_status libxl__json_object_to_yajl_gen(libxl__gc *gc_opt,
+ yajl_gen hand,
+ libxl__json_object *param);
_hidden void libxl__json_object_free(libxl__gc *gc_opt,
libxl__json_object *obj);
diff --git a/tools/libxl/libxl_json.c b/tools/libxl/libxl_json.c
index 98db465..72b52e8 100644
--- a/tools/libxl/libxl_json.c
+++ b/tools/libxl/libxl_json.c
@@ -381,6 +381,67 @@ const libxl__json_object *libxl__json_map_get(const char *key,
return NULL;
}
+yajl_status libxl__json_object_to_yajl_gen(libxl__gc *gc,
+ yajl_gen hand,
+ libxl__json_object *obj)
+{
+ int idx = 0;
+ yajl_status rc;
+
+ switch (obj->type) {
+ case JSON_NULL:
+ return yajl_gen_null(hand);
+ case JSON_BOOL:
+ return yajl_gen_bool(hand, obj->u.b);
+ case JSON_INTEGER:
+ return yajl_gen_integer(hand, obj->u.i);
+ case JSON_DOUBLE:
+ return yajl_gen_double(hand, obj->u.d);
+ case JSON_NUMBER:
+ return yajl_gen_number(hand, obj->u.string, strlen(obj->u.string));
+ case JSON_STRING:
+ return libxl__yajl_gen_asciiz(hand, obj->u.string);
+ case JSON_MAP: {
+ libxl__json_map_node *node = NULL;
+
+ rc = yajl_gen_map_open(hand);
+ if (rc != yajl_status_ok)
+ return rc;
+ for (idx = 0; idx < obj->u.map->count; idx++) {
+ if (flexarray_get(obj->u.map, idx, (void**)&node) != 0)
+ break;
+
+ rc = libxl__yajl_gen_asciiz(hand, node->map_key);
+ if (rc != yajl_status_ok)
+ return rc;
+ rc = libxl__json_object_to_yajl_gen(gc, hand, node->obj);
+ if (rc != yajl_status_ok)
+ return rc;
+ }
+ return yajl_gen_map_close(hand);
+ }
+ case JSON_ARRAY: {
+ libxl__json_object *node = NULL;
+
+ rc = yajl_gen_array_open(hand);
+ if (rc != yajl_status_ok)
+ return rc;
+ for (idx = 0; idx < obj->u.array->count; idx++) {
+ if (flexarray_get(obj->u.array, idx, (void**)&node) != 0)
+ break;
+ rc = libxl__json_object_to_yajl_gen(gc, hand, node);
+ if (rc != yajl_status_ok)
+ return rc;
+ }
+ return yajl_gen_array_close(hand);
+ }
+ case JSON_ANY:
+ /* JSON_ANY is not a valid value for obj->type. */
+ ;
+ }
+ abort();
+}
+
/*
* JSON callbacks
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCHv4 05/11] libxl_qmp: Introduces helpers to create an argument list.
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
` (3 preceding siblings ...)
2013-02-19 13:15 ` [PATCHv4 04/11] libxl_json: Introduce libxl__json_object_to_yajl_gen Alex Bligh
@ 2013-02-19 13:15 ` Alex Bligh
2013-02-19 13:15 ` [PATCHv4 06/11] libxl_qmp: Use qmp_parameters_* functions for param list of a QMP command Alex Bligh
` (6 subsequent siblings)
11 siblings, 0 replies; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 13:15 UTC (permalink / raw)
To: xen-devel, Stefano Stabellini; +Cc: Ian Jackson, Ian Campbell, Alex Bligh
Those functions will be used to create a "list" of parameters that
contain more than just strings. This list is converted by qmp_send to
a string to be sent to QEMU.
Those functions will be used in the next two patches, so right now
there are not compiled.
Backported from xen-unstable patch:
: HG changeset patch
: User Anthony PERARD <anthony.perard@citrix.com>
: Date 1349693132 -3600
: Node ID 6f7847729f0f42614de516d15257ede7243f995f
: Parent 74dee58cfc0d2d6594f388db3b4d2ce91d1bb204
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Signed-off-by: Alex Bligh <alex@alex.org.uk>
---
tools/libxl/libxl_qmp.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 51 insertions(+), 0 deletions(-)
diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c
index 9e86c35..827f1b7 100644
--- a/tools/libxl/libxl_qmp.c
+++ b/tools/libxl/libxl_qmp.c
@@ -624,6 +624,57 @@ static void qmp_free_handler(libxl__qmp_handler *qmp)
free(qmp);
}
+#if 0
+/*
+ * QMP Parameters Helpers
+ */
+static void qmp_parameters_common_add(libxl__gc *gc,
+ libxl__json_object **param,
+ const char *name,
+ libxl__json_object *obj)
+{
+ libxl__json_map_node *arg = NULL;
+
+ if (!*param) {
+ *param = libxl__json_object_alloc(gc, JSON_MAP);
+ }
+
+ arg = libxl__zalloc(gc, sizeof(*arg));
+
+ arg->map_key = libxl__strdup(gc, name);
+ arg->obj = obj;
+
+ flexarray_append((*param)->u.map, arg);
+}
+
+static void qmp_parameters_add_string(libxl__gc *gc,
+ libxl__json_object **param,
+ const char *name, const char *argument)
+{
+ libxl__json_object *obj;
+
+ obj = libxl__json_object_alloc(gc, JSON_STRING);
+ obj->u.string = libxl__strdup(gc, argument);
+
+ qmp_parameters_common_add(gc, param, name, obj);
+}
+
+static void qmp_parameters_add_bool(libxl__gc *gc,
+ libxl__json_object **param,
+ const char *name, bool b)
+{
+ libxl__json_object *obj;
+
+ obj = libxl__json_object_alloc(gc, JSON_BOOL);
+ obj->u.b = b;
+ qmp_parameters_common_add(gc, param, name, obj);
+}
+
+#define QMP_PARAMETERS_SPRINTF(args, name, format, ...) \
+ qmp_parameters_add_string(gc, args, name, \
+ libxl__sprintf(gc, format, __VA_ARGS__))
+#endif
+
/*
* API
*/
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCHv4 06/11] libxl_qmp: Use qmp_parameters_* functions for param list of a QMP command.
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
` (4 preceding siblings ...)
2013-02-19 13:15 ` [PATCHv4 05/11] libxl_qmp: Introduces helpers to create an argument list Alex Bligh
@ 2013-02-19 13:15 ` Alex Bligh
2013-02-19 13:15 ` [PATCHv4 07/11] libxl_qmp: Simplify run of single QMP commands Alex Bligh
` (5 subsequent siblings)
11 siblings, 0 replies; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 13:15 UTC (permalink / raw)
To: xen-devel, Stefano Stabellini; +Cc: Ian Jackson, Ian Campbell, Alex Bligh
Backported from xen-unstable patch:
: HG changeset patch
: User Anthony PERARD <anthony.perard@citrix.com>
: Date 1349693133 -3600
: Node ID be5d014f91dfbd67afacc3385c265243794a246f
: Parent 6f7847729f0f42614de516d15257ede7243f995f
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Signed-off-by: Alex Bligh <alex@alex.org.uk>
---
tools/libxl/libxl_qmp.c | 89 ++++++++++++++++-------------------------------
1 files changed, 30 insertions(+), 59 deletions(-)
diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c
index 827f1b7..605e8f3 100644
--- a/tools/libxl/libxl_qmp.c
+++ b/tools/libxl/libxl_qmp.c
@@ -78,7 +78,7 @@ struct libxl__qmp_handler {
};
static int qmp_send(libxl__qmp_handler *qmp,
- const char *cmd, libxl_key_value_list *args,
+ const char *cmd, libxl__json_object *args,
qmp_callback_t callback, void *opaque,
qmp_request_context *context);
@@ -503,7 +503,7 @@ static int qmp_next(libxl__gc *gc, libxl__qmp_handler *qmp)
}
static char *qmp_send_prepare(libxl__gc *gc, libxl__qmp_handler *qmp,
- const char *cmd, libxl_key_value_list *args,
+ const char *cmd, libxl__json_object *args,
qmp_callback_t callback, void *opaque,
qmp_request_context *context)
{
@@ -527,7 +527,7 @@ static char *qmp_send_prepare(libxl__gc *gc, libxl__qmp_handler *qmp,
yajl_gen_integer(hand, ++qmp->last_id_used);
if (args) {
libxl__yajl_gen_asciiz(hand, "arguments");
- libxl_key_value_list_gen_json(hand, args);
+ libxl__json_object_to_yajl_gen(gc, hand, args);
}
yajl_gen_map_close(hand);
@@ -561,7 +561,7 @@ out:
}
static int qmp_send(libxl__qmp_handler *qmp,
- const char *cmd, libxl_key_value_list *args,
+ const char *cmd, libxl__json_object *args,
qmp_callback_t callback, void *opaque,
qmp_request_context *context)
{
@@ -589,7 +589,7 @@ out:
}
static int qmp_synchronous_send(libxl__qmp_handler *qmp, const char *cmd,
- libxl_key_value_list *args,
+ libxl__json_object *args,
qmp_callback_t callback, void *opaque,
int ask_timeout)
{
@@ -624,7 +624,6 @@ static void qmp_free_handler(libxl__qmp_handler *qmp)
free(qmp);
}
-#if 0
/*
* QMP Parameters Helpers
*/
@@ -659,6 +658,7 @@ static void qmp_parameters_add_string(libxl__gc *gc,
qmp_parameters_common_add(gc, param, name, obj);
}
+#if 0
static void qmp_parameters_add_bool(libxl__gc *gc,
libxl__json_object **param,
const char *name, bool b)
@@ -669,11 +669,11 @@ static void qmp_parameters_add_bool(libxl__gc *gc,
obj->u.b = b;
qmp_parameters_common_add(gc, param, name, obj);
}
+#endif
#define QMP_PARAMETERS_SPRINTF(args, name, format, ...) \
qmp_parameters_add_string(gc, args, name, \
libxl__sprintf(gc, format, __VA_ARGS__))
-#endif
/*
* API
@@ -801,8 +801,7 @@ out:
int libxl__qmp_pci_add(libxl__gc *gc, int domid, libxl_device_pci *pcidev)
{
libxl__qmp_handler *qmp = NULL;
- flexarray_t *parameters = NULL;
- libxl_key_value_list args = NULL;
+ libxl__json_object *args = NULL;
char *hostaddr = NULL;
int rc = 0;
@@ -815,31 +814,22 @@ int libxl__qmp_pci_add(libxl__gc *gc, int domid, libxl_device_pci *pcidev)
if (!hostaddr)
return -1;
- parameters = flexarray_make(6, 1);
- flexarray_append_pair(parameters, "driver", "xen-pci-passthrough");
- flexarray_append_pair(parameters, "id",
- libxl__sprintf(gc, PCI_PT_QDEV_ID,
- pcidev->bus, pcidev->dev,
- pcidev->func));
- flexarray_append_pair(parameters, "hostaddr", hostaddr);
+ qmp_parameters_add_string(gc, &args, "driver", "xen-pci-passthrough");
+ QMP_PARAMETERS_SPRINTF(&args, "id", PCI_PT_QDEV_ID,
+ pcidev->bus, pcidev->dev, pcidev->func);
+ qmp_parameters_add_string(gc, &args, "hostaddr", hostaddr);
if (pcidev->vdevfn) {
- flexarray_append_pair(parameters, "addr",
- libxl__sprintf(gc, "%x.%x",
- PCI_SLOT(pcidev->vdevfn),
- PCI_FUNC(pcidev->vdevfn)));
+ QMP_PARAMETERS_SPRINTF(&args, "addr", "%x.%x",
+ PCI_SLOT(pcidev->vdevfn), PCI_FUNC(pcidev->vdevfn));
}
- args = libxl__xs_kvs_of_flexarray(gc, parameters, parameters->count);
- if (!args)
- return -1;
- rc = qmp_synchronous_send(qmp, "device_add", &args,
+ rc = qmp_synchronous_send(qmp, "device_add", args,
NULL, NULL, qmp->timeout);
if (rc == 0) {
rc = qmp_synchronous_send(qmp, "query-pci", NULL,
pci_add_callback, pcidev, qmp->timeout);
}
- flexarray_free(parameters);
libxl__qmp_close(qmp);
return rc;
}
@@ -847,24 +837,18 @@ int libxl__qmp_pci_add(libxl__gc *gc, int domid, libxl_device_pci *pcidev)
static int qmp_device_del(libxl__gc *gc, int domid, char *id)
{
libxl__qmp_handler *qmp = NULL;
- flexarray_t *parameters = NULL;
- libxl_key_value_list args = NULL;
+ libxl__json_object *args = NULL;
int rc = 0;
qmp = libxl__qmp_initialize(gc, domid);
if (!qmp)
return ERROR_FAIL;
- parameters = flexarray_make(2, 1);
- flexarray_append_pair(parameters, "id", id);
- args = libxl__xs_kvs_of_flexarray(gc, parameters, parameters->count);
- if (!args)
- return ERROR_NOMEM;
+ qmp_parameters_add_string(gc, &args, "id", id);
- rc = qmp_synchronous_send(qmp, "device_del", &args,
+ rc = qmp_synchronous_send(qmp, "device_del", args,
NULL, NULL, qmp->timeout);
- flexarray_free(parameters);
libxl__qmp_close(qmp);
return rc;
}
@@ -882,56 +866,43 @@ int libxl__qmp_pci_del(libxl__gc *gc, int domid, libxl_device_pci *pcidev)
int libxl__qmp_save(libxl__gc *gc, int domid, const char *filename)
{
libxl__qmp_handler *qmp = NULL;
- flexarray_t *parameters = NULL;
- libxl_key_value_list args = NULL;
+ libxl__json_object *args = NULL;
int rc = 0;
qmp = libxl__qmp_initialize(gc, domid);
if (!qmp)
return ERROR_FAIL;
- parameters = flexarray_make(2, 1);
- if (!parameters) {
- rc = ERROR_NOMEM;
- goto out;
- }
- flexarray_append_pair(parameters, "filename", (char *)filename);
- args = libxl__xs_kvs_of_flexarray(gc, parameters, parameters->count);
+ qmp_parameters_add_string(gc, &args, "filename", (char *)filename);
if (!args) {
rc = ERROR_NOMEM;
- goto out2;
+ goto out;
}
- rc = qmp_synchronous_send(qmp, "xen-save-devices-state", &args,
+ rc = qmp_synchronous_send(qmp, "xen-save-devices-state", args,
NULL, NULL, qmp->timeout);
-out2:
- flexarray_free(parameters);
out:
libxl__qmp_close(qmp);
return rc;
+
}
static int qmp_change(libxl__gc *gc, libxl__qmp_handler *qmp,
char *device, char *target, char *arg)
{
- flexarray_t *parameters = NULL;
- libxl_key_value_list args = NULL;
+ libxl__json_object *args = NULL;
int rc = 0;
- parameters = flexarray_make(6, 1);
- flexarray_append_pair(parameters, "device", device);
- flexarray_append_pair(parameters, "target", target);
- if (arg)
- flexarray_append_pair(parameters, "arg", arg);
- args = libxl__xs_kvs_of_flexarray(gc, parameters, parameters->count);
- if (!args)
- return ERROR_NOMEM;
+ qmp_parameters_add_string(gc, &args, "device", device);
+ qmp_parameters_add_string(gc, &args, "target", target);
+ if (arg) {
+ qmp_parameters_add_string(gc, &args, "arg", arg);
+ }
- rc = qmp_synchronous_send(qmp, "change", &args,
+ rc = qmp_synchronous_send(qmp, "change", args,
NULL, NULL, qmp->timeout);
- flexarray_free(parameters);
return rc;
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCHv4 07/11] libxl_qmp: Simplify run of single QMP commands.
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
` (5 preceding siblings ...)
2013-02-19 13:15 ` [PATCHv4 06/11] libxl_qmp: Use qmp_parameters_* functions for param list of a QMP command Alex Bligh
@ 2013-02-19 13:15 ` Alex Bligh
2013-02-19 13:15 ` [PATCHv4 08/11] libxl_qmp: Introduce libxl__qmp_set_global_dirty_log Alex Bligh
` (4 subsequent siblings)
11 siblings, 0 replies; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 13:15 UTC (permalink / raw)
To: xen-devel, Stefano Stabellini; +Cc: Ian Jackson, Ian Campbell, Alex Bligh
This new function connects to QEMU, sends the command and disconnects.
Backport of xen-unstable patch:
: HG changeset patch
: User Anthony PERARD <anthony.perard@citrix.com>
: Date 1349693134 -3600
: Node ID f3890916496445c97d6778d6c986b0270ff707f2
: Parent be5d014f91dfbd67afacc3385c265243794a246f
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Signed-off-by: Alex Bligh <alex@alex.org.uk>
---
tools/libxl/libxl_qmp.c | 77 +++++++++++++---------------------------------
1 files changed, 22 insertions(+), 55 deletions(-)
diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c
index 605e8f3..b09bf13 100644
--- a/tools/libxl/libxl_qmp.c
+++ b/tools/libxl/libxl_qmp.c
@@ -798,6 +798,23 @@ out:
return rc;
}
+static int qmp_run_command(libxl__gc *gc, int domid,
+ const char *cmd, libxl__json_object *args,
+ qmp_callback_t callback, void *opaque)
+{
+ libxl__qmp_handler *qmp = NULL;
+ int rc = 0;
+
+ qmp = libxl__qmp_initialize(gc, domid);
+ if (!qmp)
+ return ERROR_FAIL;
+
+ rc = qmp_synchronous_send(qmp, cmd, args, callback, opaque, qmp->timeout);
+
+ libxl__qmp_close(qmp);
+ return rc;
+}
+
int libxl__qmp_pci_add(libxl__gc *gc, int domid, libxl_device_pci *pcidev)
{
libxl__qmp_handler *qmp = NULL;
@@ -836,21 +853,10 @@ int libxl__qmp_pci_add(libxl__gc *gc, int domid, libxl_device_pci *pcidev)
static int qmp_device_del(libxl__gc *gc, int domid, char *id)
{
- libxl__qmp_handler *qmp = NULL;
libxl__json_object *args = NULL;
- int rc = 0;
-
- qmp = libxl__qmp_initialize(gc, domid);
- if (!qmp)
- return ERROR_FAIL;
qmp_parameters_add_string(gc, &args, "id", id);
-
- rc = qmp_synchronous_send(qmp, "device_del", args,
- NULL, NULL, qmp->timeout);
-
- libxl__qmp_close(qmp);
- return rc;
+ return qmp_run_command(gc, domid, "device_del", args, NULL, NULL);
}
int libxl__qmp_pci_del(libxl__gc *gc, int domid, libxl_device_pci *pcidev)
@@ -865,27 +871,10 @@ int libxl__qmp_pci_del(libxl__gc *gc, int domid, libxl_device_pci *pcidev)
int libxl__qmp_save(libxl__gc *gc, int domid, const char *filename)
{
- libxl__qmp_handler *qmp = NULL;
libxl__json_object *args = NULL;
- int rc = 0;
-
- qmp = libxl__qmp_initialize(gc, domid);
- if (!qmp)
- return ERROR_FAIL;
-
- qmp_parameters_add_string(gc, &args, "filename", (char *)filename);
- if (!args) {
- rc = ERROR_NOMEM;
- goto out;
- }
-
- rc = qmp_synchronous_send(qmp, "xen-save-devices-state", args,
- NULL, NULL, qmp->timeout);
-
-out:
- libxl__qmp_close(qmp);
- return rc;
+ return qmp_run_command(gc, domid, "xen-save-devices-state", args,
+ NULL, NULL);
}
static int qmp_change(libxl__gc *gc, libxl__qmp_handler *qmp,
@@ -908,34 +897,12 @@ static int qmp_change(libxl__gc *gc, libxl__qmp_handler *qmp,
int libxl__qmp_stop(libxl__gc *gc, int domid)
{
- libxl__qmp_handler *qmp = NULL;
- int rc = 0;
-
- qmp = libxl__qmp_initialize(gc, domid);
- if (!qmp)
- return ERROR_FAIL;
-
- rc = qmp_synchronous_send(qmp, "stop", NULL,
- NULL, NULL, qmp->timeout);
-
- libxl__qmp_close(qmp);
- return rc;
+ return qmp_run_command(gc, domid, "stop", NULL, NULL, NULL);
}
int libxl__qmp_resume(libxl__gc *gc, int domid)
{
- libxl__qmp_handler *qmp = NULL;
- int rc = 0;
-
- qmp = libxl__qmp_initialize(gc, domid);
- if (!qmp)
- return ERROR_FAIL;
-
- rc = qmp_synchronous_send(qmp, "cont", NULL,
- NULL, NULL, qmp->timeout);
-
- libxl__qmp_close(qmp);
- return rc;
+ return qmp_run_command(gc, domid, "cont", NULL, NULL, NULL);
}
int libxl__qmp_initializations(libxl__gc *gc, uint32_t domid,
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCHv4 08/11] libxl_qmp: Introduce libxl__qmp_set_global_dirty_log.
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
` (6 preceding siblings ...)
2013-02-19 13:15 ` [PATCHv4 07/11] libxl_qmp: Simplify run of single QMP commands Alex Bligh
@ 2013-02-19 13:15 ` Alex Bligh
2013-02-19 13:15 ` [PATCHv4 09/11] libxl_dom: Call the right switch logdirty for the right DM Alex Bligh
` (3 subsequent siblings)
11 siblings, 0 replies; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 13:15 UTC (permalink / raw)
To: xen-devel, Stefano Stabellini; +Cc: Ian Jackson, Ian Campbell, Alex Bligh
This function will enable or disable the global dirty log on QEMU,
used during a migration.
Backport of xen-unstable patch:
: HG changeset patch
: User Anthony PERARD <anthony.perard@citrix.com>
: Date 1349693135 -3600
: Node ID d4aec9eff7e6d15c2805957af620c82555553b3e
: Parent f3890916496445c97d6778d6c986b0270ff707f2
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Signed-off-by: Alex Bligh <alex@alex.org.uk>
---
tools/libxl/libxl_internal.h | 2 ++
tools/libxl/libxl_qmp.c | 12 ++++++++++--
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index b00ff61..f658562 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -1400,6 +1400,8 @@ _hidden int libxl__qmp_stop(libxl__gc *gc, int domid);
_hidden int libxl__qmp_resume(libxl__gc *gc, int domid);
/* Save current QEMU state into fd. */
_hidden int libxl__qmp_save(libxl__gc *gc, int domid, const char *filename);
+/* Set dirty bitmap logging status */
+_hidden int libxl__qmp_set_global_dirty_log(libxl__gc *gc, int domid, bool enable);
/* close and free the QMP handler */
_hidden void libxl__qmp_close(libxl__qmp_handler *qmp);
/* remove the socket file, if the file has already been removed,
diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c
index b09bf13..ac10f20 100644
--- a/tools/libxl/libxl_qmp.c
+++ b/tools/libxl/libxl_qmp.c
@@ -658,7 +658,6 @@ static void qmp_parameters_add_string(libxl__gc *gc,
qmp_parameters_common_add(gc, param, name, obj);
}
-#if 0
static void qmp_parameters_add_bool(libxl__gc *gc,
libxl__json_object **param,
const char *name, bool b)
@@ -669,7 +668,6 @@ static void qmp_parameters_add_bool(libxl__gc *gc,
obj->u.b = b;
qmp_parameters_common_add(gc, param, name, obj);
}
-#endif
#define QMP_PARAMETERS_SPRINTF(args, name, format, ...) \
qmp_parameters_add_string(gc, args, name, \
@@ -905,6 +903,16 @@ int libxl__qmp_resume(libxl__gc *gc, int domid)
return qmp_run_command(gc, domid, "cont", NULL, NULL, NULL);
}
+int libxl__qmp_set_global_dirty_log(libxl__gc *gc, int domid, bool enable)
+{
+ libxl__json_object *args = NULL;
+
+ qmp_parameters_add_bool(gc, &args, "enable", enable);
+
+ return qmp_run_command(gc, domid, "xen-set-global-dirty-log", args,
+ NULL, NULL);
+}
+
int libxl__qmp_initializations(libxl__gc *gc, uint32_t domid,
const libxl_domain_config *guest_config)
{
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCHv4 09/11] libxl_dom: Call the right switch logdirty for the right DM.
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
` (7 preceding siblings ...)
2013-02-19 13:15 ` [PATCHv4 08/11] libxl_qmp: Introduce libxl__qmp_set_global_dirty_log Alex Bligh
@ 2013-02-19 13:15 ` Alex Bligh
2013-02-19 13:15 ` [PATCHv4 10/11] libxl: libxl__qmp_save: Add filename as JSON parameter to xen-save-devices-state Alex Bligh
` (2 subsequent siblings)
11 siblings, 0 replies; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 13:15 UTC (permalink / raw)
To: xen-devel, Stefano Stabellini; +Cc: Ian Jackson, Ian Campbell, Alex Bligh
This patch dispatch the switch logdirty call depending on which device model
version is running.
The call to qemu-xen right now is synchronous, not like the one to
qemu-xen-traditional.
Backport of xen-unstable patch:
: HG changeset patch
: User Anthony PERARD <anthony.perard@citrix.com>
: Date 1349693136 -3600
: Node ID 08fac5c2bf3dcbc493ce45091383f6ce1938f369
: Parent d4aec9eff7e6d15c2805957af620c82555553b3e
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Signed-off-by: Alex Bligh <alex@alex.org.uk>
---
tools/libxl/libxl_dom.c | 45 ++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 42 insertions(+), 3 deletions(-)
diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
index e1de832..95da18e 100644
--- a/tools/libxl/libxl_dom.c
+++ b/tools/libxl/libxl_dom.c
@@ -685,10 +685,10 @@ static void logdirty_init(libxl__logdirty_switch *lds)
libxl__ev_time_init(&lds->timeout);
}
-void libxl__domain_suspend_common_switch_qemu_logdirty
- (int domid, unsigned enable, void *user)
+static void domain_suspend_switch_qemu_xen_traditional_logdirty
+ (int domid, unsigned enable,
+ libxl__save_helper_state *shs)
{
- libxl__save_helper_state *shs = user;
libxl__egc *egc = shs->egc;
libxl__domain_suspend_state *dss = CONTAINER_OF(shs, *dss, shs);
libxl__logdirty_switch *lds = &dss->logdirty;
@@ -756,6 +756,45 @@ void libxl__domain_suspend_common_switch_qemu_logdirty
switch_logdirty_done(egc,dss,-1);
}
+static void domain_suspend_switch_qemu_xen_logdirty
+ (int domid, unsigned enable,
+ libxl__save_helper_state *shs)
+{
+ libxl__egc *egc = shs->egc;
+ libxl__domain_suspend_state *dss = CONTAINER_OF(shs, *dss, shs);
+ STATE_AO_GC(dss->ao);
+ int rc;
+
+ rc = libxl__qmp_set_global_dirty_log(gc, domid, enable);
+ if (!rc) {
+ libxl__xc_domain_saverestore_async_callback_done(egc, shs, 0);
+ } else {
+ LOG(ERROR,"logdirty switch failed (rc=%d), aborting suspend",rc);
+ libxl__xc_domain_saverestore_async_callback_done(egc, shs, -1);
+ }
+}
+
+void libxl__domain_suspend_common_switch_qemu_logdirty
+ (int domid, unsigned enable, void *user)
+{
+ libxl__save_helper_state *shs = user;
+ libxl__egc *egc = shs->egc;
+ libxl__domain_suspend_state *dss = CONTAINER_OF(shs, *dss, shs);
+ STATE_AO_GC(dss->ao);
+
+ switch (libxl__device_model_version_running(gc, domid)) {
+ case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL:
+ domain_suspend_switch_qemu_xen_traditional_logdirty(domid, enable, shs);
+ break;
+ case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
+ domain_suspend_switch_qemu_xen_logdirty(domid, enable, shs);
+ break;
+ default:
+ LOG(ERROR,"logdirty switch failed"
+ ", no valid device model version found, aborting suspend");
+ libxl__xc_domain_saverestore_async_callback_done(egc, shs, -1);
+ }
+}
static void switch_logdirty_timeout(libxl__egc *egc, libxl__ev_time *ev,
const struct timeval *requested_abs)
{
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCHv4 10/11] libxl: libxl__qmp_save: Add filename as JSON parameter to xen-save-devices-state
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
` (8 preceding siblings ...)
2013-02-19 13:15 ` [PATCHv4 09/11] libxl_dom: Call the right switch logdirty for the right DM Alex Bligh
@ 2013-02-19 13:15 ` Alex Bligh
2013-02-19 13:16 ` [PATCHv4 11/11] libxl: Allow migration with qemu-xen Alex Bligh
2013-02-19 13:29 ` [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Ian Jackson
11 siblings, 0 replies; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 13:15 UTC (permalink / raw)
To: xen-devel, Stefano Stabellini; +Cc: Ian Jackson, Ian Campbell, Alex Bligh
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
To: xen-devel <xen-devel@lists.xen.org>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Ian Campbell <Ian.Campbell@citrix.com>,
Alex Bligh <alex@alex.org.uk>
Signed-off-by: Alex Bligh <alex@alex.org.uk>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
tools/libxl/libxl_qmp.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c
index ac10f20..b4cc247 100644
--- a/tools/libxl/libxl_qmp.c
+++ b/tools/libxl/libxl_qmp.c
@@ -871,6 +871,7 @@ int libxl__qmp_save(libxl__gc *gc, int domid, const char *filename)
{
libxl__json_object *args = NULL;
+ qmp_parameters_add_string(gc, &args, "filename", (char *)filename);
return qmp_run_command(gc, domid, "xen-save-devices-state", args,
NULL, NULL);
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCHv4 11/11] libxl: Allow migration with qemu-xen.
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
` (9 preceding siblings ...)
2013-02-19 13:15 ` [PATCHv4 10/11] libxl: libxl__qmp_save: Add filename as JSON parameter to xen-save-devices-state Alex Bligh
@ 2013-02-19 13:16 ` Alex Bligh
2013-02-19 13:29 ` [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Ian Jackson
11 siblings, 0 replies; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 13:16 UTC (permalink / raw)
To: xen-devel, Stefano Stabellini; +Cc: Ian Jackson, Ian Campbell, Alex Bligh
Backport of xen-unstable patch:
: HG changeset patch
: User Anthony PERARD <anthony.perard@citrix.com>
: Date 1349693136 -3600
: Node ID 0995890022391682a2499a202c3c8608e1d3780a
: Parent 08fac5c2bf3dcbc493ce45091383f6ce1938f369
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Signed-off-by: Alex Bligh <alex@alex.org.uk>
---
tools/libxl/libxl.c | 17 -----------------
1 files changed, 0 insertions(+), 17 deletions(-)
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 4b4c5b0..9b14364 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -768,23 +768,6 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd, int flags,
goto out_err;
}
- if (type == LIBXL_DOMAIN_TYPE_HVM && flags & LIBXL_SUSPEND_LIVE) {
- switch (libxl__device_model_version_running(gc, domid)) {
- case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
- LOG(ERROR,
- "cannot live migrate HVM domains with qemu-xen device-model");
- rc = ERROR_FAIL;
- goto out_err;
- case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL:
- /* No problem */
- break;
- case -1:
- rc = ERROR_FAIL;
- goto out_err;
- default: abort();
- }
- }
-
libxl__domain_suspend_state *dss;
GCNEW(dss);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
` (10 preceding siblings ...)
2013-02-19 13:16 ` [PATCHv4 11/11] libxl: Allow migration with qemu-xen Alex Bligh
@ 2013-02-19 13:29 ` Ian Jackson
2013-02-19 13:36 ` Jan Beulich
2013-02-19 14:44 ` Alex Bligh
11 siblings, 2 replies; 16+ messages in thread
From: Ian Jackson @ 2013-02-19 13:29 UTC (permalink / raw)
To: Alex Bligh; +Cc: Stefano Stabellini, Ian Campbell, Jan Beulich, xen-devel
Alex Bligh writes ("[PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset"):
> This patch series consists of 2 parts:
> * 11 patches to libxl
> * 5 patches to QEMU
>
> The 11 patches to libxl are unchanged since version 3 of the patch,
> but have Acked-By lines reintroduced.
Thanks for this! You've made this very convenient.
Jan, I intend to shovel this lot into 4.2 this afternoon, unless you
object.
Thanks,
Ian.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset
2013-02-19 13:29 ` [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Ian Jackson
@ 2013-02-19 13:36 ` Jan Beulich
2013-02-19 14:44 ` Alex Bligh
1 sibling, 0 replies; 16+ messages in thread
From: Jan Beulich @ 2013-02-19 13:36 UTC (permalink / raw)
To: Ian Jackson; +Cc: xen-devel, Ian Campbell, Alex Bligh, Stefano Stabellini
>>> On 19.02.13 at 14:29, Ian Jackson <Ian.Jackson@eu.citrix.com> wrote:
> Alex Bligh writes ("[PATCHv4 00/11] libxl: Enabling live-migrate on HVM on
> qemu-xen device model in 4.2 - libxl patchset"):
>> This patch series consists of 2 parts:
>> * 11 patches to libxl
>> * 5 patches to QEMU
>>
>> The 11 patches to libxl are unchanged since version 3 of the patch,
>> but have Acked-By lines reintroduced.
>
> Thanks for this! You've made this very convenient.
>
> Jan, I intend to shovel this lot into 4.2 this afternoon, unless you
> object.
Fine with me.
Jan
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset
2013-02-19 13:29 ` [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Ian Jackson
2013-02-19 13:36 ` Jan Beulich
@ 2013-02-19 14:44 ` Alex Bligh
2013-02-19 15:52 ` Ian Jackson
1 sibling, 1 reply; 16+ messages in thread
From: Alex Bligh @ 2013-02-19 14:44 UTC (permalink / raw)
To: Ian Jackson
Cc: Alex Bligh, Stefano Stabellini, Ian Campbell, Jan Beulich, xen-devel
Ian,
--On 19 February 2013 13:29:01 +0000 Ian Jackson
<Ian.Jackson@eu.citrix.com> wrote:
>> The 11 patches to libxl are unchanged since version 3 of the patch,
>> but have Acked-By lines reintroduced.
>
> Thanks for this! You've made this very convenient.
No problem.
> Jan, I intend to shovel this lot into 4.2 this afternoon, unless you
> object.
Note you will (obviously) need to change the commit ref for qemu once
the qemu patches are applied.
--
Alex Bligh
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset
2013-02-19 14:44 ` Alex Bligh
@ 2013-02-19 15:52 ` Ian Jackson
0 siblings, 0 replies; 16+ messages in thread
From: Ian Jackson @ 2013-02-19 15:52 UTC (permalink / raw)
To: Alex Bligh; +Cc: Stefano Stabellini, Ian Campbell, Jan Beulich, xen-devel
Alex Bligh writes ("Re: [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset"):
> --On 19 February 2013 13:29:01 +0000 Ian Jackson
> <Ian.Jackson@eu.citrix.com> wrote:
> >> The 11 patches to libxl are unchanged since version 3 of the patch,
> >> but have Acked-By lines reintroduced.
> >
> > Thanks for this! You've made this very convenient.
>
> No problem.
>
> > Jan, I intend to shovel this lot into 4.2 this afternoon, unless you
> > object.
Now done.
> Note you will (obviously) need to change the commit ref for qemu once
> the qemu patches are applied.
Yes, this is a routine part of our process for updating the qemu
trees. I think Stefano will be looking at your qemu-upstream-4.2
patches soon.
Ian.
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2013-02-19 15:52 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-02-19 13:15 [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Alex Bligh
2013-02-19 13:15 ` [PATCHv4 01/11] libxl_json: Export json_object related function Alex Bligh
2013-02-19 13:15 ` [PATCHv4 02/11] libxl_json: Remove JSON_ERROR from enum Alex Bligh
2013-02-19 13:15 ` [PATCHv4 03/11] libxl_json: Replace JSON_TRUE/FALSE by JSON_BOOL Alex Bligh
2013-02-19 13:15 ` [PATCHv4 04/11] libxl_json: Introduce libxl__json_object_to_yajl_gen Alex Bligh
2013-02-19 13:15 ` [PATCHv4 05/11] libxl_qmp: Introduces helpers to create an argument list Alex Bligh
2013-02-19 13:15 ` [PATCHv4 06/11] libxl_qmp: Use qmp_parameters_* functions for param list of a QMP command Alex Bligh
2013-02-19 13:15 ` [PATCHv4 07/11] libxl_qmp: Simplify run of single QMP commands Alex Bligh
2013-02-19 13:15 ` [PATCHv4 08/11] libxl_qmp: Introduce libxl__qmp_set_global_dirty_log Alex Bligh
2013-02-19 13:15 ` [PATCHv4 09/11] libxl_dom: Call the right switch logdirty for the right DM Alex Bligh
2013-02-19 13:15 ` [PATCHv4 10/11] libxl: libxl__qmp_save: Add filename as JSON parameter to xen-save-devices-state Alex Bligh
2013-02-19 13:16 ` [PATCHv4 11/11] libxl: Allow migration with qemu-xen Alex Bligh
2013-02-19 13:29 ` [PATCHv4 00/11] libxl: Enabling live-migrate on HVM on qemu-xen device model in 4.2 - libxl patchset Ian Jackson
2013-02-19 13:36 ` Jan Beulich
2013-02-19 14:44 ` Alex Bligh
2013-02-19 15:52 ` Ian Jackson
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.