* [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del @ 2013-12-20 22:21 Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 1/5] rng: initialize file descriptor to -1 Paolo Bonzini ` (7 more replies) 0 siblings, 8 replies; 10+ messages in thread From: Paolo Bonzini @ 2013-12-20 22:21 UTC (permalink / raw) To: qemu-devel; +Cc: imammedo, afaerber, lcapitulino These allow hotplugging (and hot-unplugging without leaking an object) virtio-rng devices. They can also be used for memory hotplug. v1->v2: fix mistyped underscores in qapi-schema.json v2->v3: preserve bisectability by inverting patches 4 and 5, keep lines under 80 characters since it can be done easily, drop error_is_set Paolo Bonzini (5): rng: initialize file descriptor to -1 qom: fix leak for objects created with -object qom: catch errors in object_property_add_child monitor: add object-del (QMP) and object_del (HMP) command monitor: add object-add (QMP) and object_add (HMP) command backends/rng-random.c | 4 +-- hmp-commands.hx | 28 +++++++++++++++++ hmp.c | 67 +++++++++++++++++++++++++++++++++++++++++ hmp.h | 2 ++ include/monitor/monitor.h | 3 ++ include/qapi/visitor.h | 3 +- include/qemu/typedefs.h | 2 ++ qapi-schema.json | 34 +++++++++++++++++++++ qmp-commands.hx | 51 +++++++++++++++++++++++++++++++ qmp.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++ qom/object.c | 9 ++++-- vl.c | 3 +- 12 files changed, 275 insertions(+), 7 deletions(-) -- 1.8.4.2 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH v3 1/5] rng: initialize file descriptor to -1 2013-12-20 22:21 [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del Paolo Bonzini @ 2013-12-20 22:21 ` Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 2/5] qom: fix leak for objects created with -object Paolo Bonzini ` (6 subsequent siblings) 7 siblings, 0 replies; 10+ messages in thread From: Paolo Bonzini @ 2013-12-20 22:21 UTC (permalink / raw) To: qemu-devel; +Cc: imammedo, afaerber, lcapitulino The file descriptor is never initialized to -1, which makes rng-random close stdin if an object is created and immediately destroyed. If we change it to -1, we also need to protect qemu_set_fd_handler from receiving a bogus file descriptor. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- backends/rng-random.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backends/rng-random.c b/backends/rng-random.c index 68dfc8a..136499d 100644 --- a/backends/rng-random.c +++ b/backends/rng-random.c @@ -123,15 +123,15 @@ static void rng_random_init(Object *obj) NULL); s->filename = g_strdup("/dev/random"); + s->fd = -1; } static void rng_random_finalize(Object *obj) { RndRandom *s = RNG_RANDOM(obj); - qemu_set_fd_handler(s->fd, NULL, NULL, NULL); - if (s->fd != -1) { + qemu_set_fd_handler(s->fd, NULL, NULL, NULL); qemu_close(s->fd); } -- 1.8.4.2 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH v3 2/5] qom: fix leak for objects created with -object 2013-12-20 22:21 [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 1/5] rng: initialize file descriptor to -1 Paolo Bonzini @ 2013-12-20 22:21 ` Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 3/5] qom: catch errors in object_property_add_child Paolo Bonzini ` (5 subsequent siblings) 7 siblings, 0 replies; 10+ messages in thread From: Paolo Bonzini @ 2013-12-20 22:21 UTC (permalink / raw) To: qemu-devel; +Cc: imammedo, afaerber, lcapitulino The object must be unref-ed when its variable goes out of scope. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- vl.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vl.c b/vl.c index 7511e70..45f9177 100644 --- a/vl.c +++ b/vl.c @@ -2809,12 +2809,13 @@ static int object_create(QemuOpts *opts, void *opaque) obj = object_new(type); if (qemu_opt_foreach(opts, object_set_property, obj, 1) < 0) { + object_unref(obj); return -1; } object_property_add_child(container_get(object_get_root(), "/objects"), id, obj, NULL); - + object_unref(obj); return 0; } -- 1.8.4.2 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH v3 3/5] qom: catch errors in object_property_add_child 2013-12-20 22:21 [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 1/5] rng: initialize file descriptor to -1 Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 2/5] qom: fix leak for objects created with -object Paolo Bonzini @ 2013-12-20 22:21 ` Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 4/5] monitor: add object-del (QMP) and object_del (HMP) command Paolo Bonzini ` (4 subsequent siblings) 7 siblings, 0 replies; 10+ messages in thread From: Paolo Bonzini @ 2013-12-20 22:21 UTC (permalink / raw) To: qemu-devel; +Cc: imammedo, afaerber, lcapitulino Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- qom/object.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/qom/object.c b/qom/object.c index fc19cf6..68fe07a 100644 --- a/qom/object.c +++ b/qom/object.c @@ -988,17 +988,22 @@ static void object_finalize_child_property(Object *obj, const char *name, void object_property_add_child(Object *obj, const char *name, Object *child, Error **errp) { + Error *local_err = NULL; gchar *type; type = g_strdup_printf("child<%s>", object_get_typename(OBJECT(child))); - object_property_add(obj, name, type, object_get_child_property, - NULL, object_finalize_child_property, child, errp); - + object_property_add(obj, name, type, object_get_child_property, NULL, + object_finalize_child_property, child, &local_err); + if (local_err) { + error_propagate(errp, local_err); + goto out; + } object_ref(child); g_assert(child->parent == NULL); child->parent = obj; +out: g_free(type); } -- 1.8.4.2 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH v3 4/5] monitor: add object-del (QMP) and object_del (HMP) command 2013-12-20 22:21 [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del Paolo Bonzini ` (2 preceding siblings ...) 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 3/5] qom: catch errors in object_property_add_child Paolo Bonzini @ 2013-12-20 22:21 ` Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 5/5] monitor: add object-add (QMP) and object_add " Paolo Bonzini ` (3 subsequent siblings) 7 siblings, 0 replies; 10+ messages in thread From: Paolo Bonzini @ 2013-12-20 22:21 UTC (permalink / raw) To: qemu-devel; +Cc: imammedo, afaerber, lcapitulino These two commands invoke the "unparent" method of Object. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- hmp-commands.hx | 14 ++++++++++++++ hmp.c | 9 +++++++++ hmp.h | 1 + qapi-schema.json | 14 ++++++++++++++ qmp-commands.hx | 25 +++++++++++++++++++++++++ qmp.c | 14 ++++++++++++++ 6 files changed, 77 insertions(+) diff --git a/hmp-commands.hx b/hmp-commands.hx index ebe8e78..623e35e 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -1243,6 +1243,20 @@ STEXI Remove host network device. ETEXI + { + .name = "object_del", + .args_type = "id:s", + .params = "id", + .help = "destroy QOM object", + .mhandler.cmd = hmp_object_del, + }, + +STEXI +@item object_del +@findex object_del +Destroy QOM object. +ETEXI + #ifdef CONFIG_SLIRP { .name = "hostfwd_add", diff --git a/hmp.c b/hmp.c index 32ee285..fdcdee4 100644 --- a/hmp.c +++ b/hmp.c @@ -1564,3 +1564,12 @@ void hmp_qemu_io(Monitor *mon, const QDict *qdict) hmp_handle_error(mon, &err); } + +void hmp_object_del(Monitor *mon, const QDict *qdict) +{ + const char *id = qdict_get_str(qdict, "id"); + Error *err = NULL; + + qmp_object_del(id, &err); + hmp_handle_error(mon, &err); +} diff --git a/hmp.h b/hmp.h index 54cf71f..1d67ed5 100644 --- a/hmp.h +++ b/hmp.h @@ -89,5 +89,6 @@ void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict); void hmp_chardev_add(Monitor *mon, const QDict *qdict); void hmp_chardev_remove(Monitor *mon, const QDict *qdict); void hmp_qemu_io(Monitor *mon, const QDict *qdict); +void hmp_object_del(Monitor *mon, const QDict *qdict); #endif diff --git a/qapi-schema.json b/qapi-schema.json index c3c939c..af3a83b 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -2759,6 +2759,20 @@ { 'command': 'netdev_del', 'data': {'id': 'str'} } ## +# @object-del: +# +# Remove a QOM object. +# +# @id: the name of the QOM object to remove +# +# Returns: Nothing on success +# Error if @id is not a valid id for a QOM object +# +# Since: 2.0 +## +{ 'command': 'object-del', 'data': {'id': 'str'} } + +## # @NetdevNoneOptions # # Use it alone to have zero network devices. diff --git a/qmp-commands.hx b/qmp-commands.hx index fba15cd..71422cd 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -879,6 +879,31 @@ Example: EQMP { + .name = "object-del", + .args_type = "id:s", + .mhandler.cmd_new = qmp_marshal_input_object_del, + }, + +SQMP +object-del +---------- + +Remove QOM object. + +Arguments: + +- "id": the object's ID (json-string) + +Example: + +-> { "execute": "object-del", "arguments": { "id": "rng1" } } +<- { "return": {} } + + +EQMP + + + { .name = "block_resize", .args_type = "device:B,size:o", .mhandler.cmd_new = qmp_marshal_input_block_resize, diff --git a/qmp.c b/qmp.c index 1d7a04d..73aab58 100644 --- a/qmp.c +++ b/qmp.c @@ -529,3 +529,17 @@ void qmp_add_client(const char *protocol, const char *fdname, error_setg(errp, "protocol '%s' is invalid", protocol); close(fd); } + +void qmp_object_del(const char *id, Error **errp) +{ + Object *container; + Object *obj; + + container = container_get(object_get_root(), "/objects"); + obj = object_resolve_path_component(container, id); + if (!obj) { + error_setg(errp, "object id not found"); + return; + } + object_unparent(obj); +} -- 1.8.4.2 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH v3 5/5] monitor: add object-add (QMP) and object_add (HMP) command 2013-12-20 22:21 [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del Paolo Bonzini ` (3 preceding siblings ...) 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 4/5] monitor: add object-del (QMP) and object_del (HMP) command Paolo Bonzini @ 2013-12-20 22:21 ` Paolo Bonzini 2014-01-03 14:17 ` [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del Igor Mammedov ` (2 subsequent siblings) 7 siblings, 0 replies; 10+ messages in thread From: Paolo Bonzini @ 2013-12-20 22:21 UTC (permalink / raw) To: qemu-devel; +Cc: imammedo, afaerber, lcapitulino Add two commands that are the monitor counterparts of -object. The commands have the same Visitor-based implementation, but use different kinds of visitors so that the HMP command has a DWIM string-based syntax, while the QMP variant accepts a stricter JSON-based properties dictionary. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- hmp-commands.hx | 14 +++++++++++ hmp.c | 58 ++++++++++++++++++++++++++++++++++++++++++++ hmp.h | 1 + include/monitor/monitor.h | 3 +++ include/qapi/visitor.h | 3 +-- include/qemu/typedefs.h | 2 ++ qapi-schema.json | 20 +++++++++++++++ qmp-commands.hx | 26 ++++++++++++++++++++ qmp.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 187 insertions(+), 2 deletions(-) diff --git a/hmp-commands.hx b/hmp-commands.hx index 623e35e..0ace14f 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -1244,6 +1244,20 @@ Remove host network device. ETEXI { + .name = "object_add", + .args_type = "object:O", + .params = "[qom-type=]type,id=str[,prop=value][,...]", + .help = "create QOM object", + .mhandler.cmd = hmp_object_add, + }, + +STEXI +@item object_add +@findex object_add +Create QOM object. +ETEXI + + { .name = "object_del", .args_type = "id:s", .params = "id", diff --git a/hmp.c b/hmp.c index fdcdee4..9f4c9b3 100644 --- a/hmp.c +++ b/hmp.c @@ -21,6 +21,7 @@ #include "qmp-commands.h" #include "qemu/sockets.h" #include "monitor/monitor.h" +#include "qapi/opts-visitor.h" #include "ui/console.h" #include "block/qapi.h" #include "qemu-io.h" @@ -1354,6 +1355,63 @@ void hmp_netdev_del(Monitor *mon, const QDict *qdict) hmp_handle_error(mon, &err); } +void hmp_object_add(Monitor *mon, const QDict *qdict) +{ + Error *err = NULL; + QemuOpts *opts; + char *type = NULL; + char *id = NULL; + void *dummy = NULL; + OptsVisitor *ov; + QDict *pdict; + + opts = qemu_opts_from_qdict(qemu_find_opts("object"), qdict, &err); + if (err) { + goto out; + } + + ov = opts_visitor_new(opts); + pdict = qdict_clone_shallow(qdict); + + visit_start_struct(opts_get_visitor(ov), &dummy, NULL, NULL, 0, &err); + if (err) { + goto out_clean; + } + + qdict_del(pdict, "qom-type"); + visit_type_str(opts_get_visitor(ov), &type, "qom-type", &err); + if (err) { + goto out_clean; + } + + qdict_del(pdict, "id"); + visit_type_str(opts_get_visitor(ov), &id, "id", &err); + if (err) { + goto out_clean; + } + + object_add(type, id, pdict, opts_get_visitor(ov), &err); + if (err) { + goto out_clean; + } + visit_end_struct(opts_get_visitor(ov), &err); + if (err) { + qmp_object_del(id, NULL); + } + +out_clean: + opts_visitor_cleanup(ov); + + QDECREF(pdict); + qemu_opts_del(opts); + g_free(id); + g_free(type); + g_free(dummy); + +out: + hmp_handle_error(mon, &err); +} + void hmp_getfd(Monitor *mon, const QDict *qdict) { const char *fdname = qdict_get_str(qdict, "fdname"); diff --git a/hmp.h b/hmp.h index 1d67ed5..94264d6 100644 --- a/hmp.h +++ b/hmp.h @@ -89,6 +89,7 @@ void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict); void hmp_chardev_add(Monitor *mon, const QDict *qdict); void hmp_chardev_remove(Monitor *mon, const QDict *qdict); void hmp_qemu_io(Monitor *mon, const QDict *qdict); +void hmp_object_add(Monitor *mon, const QDict *qdict); void hmp_object_del(Monitor *mon, const QDict *qdict); #endif diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h index 10fa0e3..22d8b8f 100644 --- a/include/monitor/monitor.h +++ b/include/monitor/monitor.h @@ -93,6 +93,9 @@ int monitor_read_password(Monitor *mon, ReadLineFunc *readline_func, int qmp_qom_set(Monitor *mon, const QDict *qdict, QObject **ret); int qmp_qom_get(Monitor *mon, const QDict *qdict, QObject **ret); +int qmp_object_add(Monitor *mon, const QDict *qdict, QObject **ret); +void object_add(const char *type, const char *id, const QDict *qdict, + Visitor *v, Error **errp); AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id, bool has_opaque, const char *opaque, diff --git a/include/qapi/visitor.h b/include/qapi/visitor.h index 48a2a2e..29da211 100644 --- a/include/qapi/visitor.h +++ b/include/qapi/visitor.h @@ -13,6 +13,7 @@ #ifndef QAPI_VISITOR_CORE_H #define QAPI_VISITOR_CORE_H +#include "qemu/typedefs.h" #include "qapi/qmp/qobject.h" #include "qapi/error.h" #include <stdlib.h> @@ -26,8 +27,6 @@ typedef struct GenericList struct GenericList *next; } GenericList; -typedef struct Visitor Visitor; - void visit_start_handle(Visitor *v, void **obj, const char *kind, const char *name, Error **errp); void visit_end_handle(Visitor *v, Error **errp); diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h index a4c1b84..4524496 100644 --- a/include/qemu/typedefs.h +++ b/include/qemu/typedefs.h @@ -10,6 +10,8 @@ typedef struct QEMUBH QEMUBH; typedef struct AioContext AioContext; +typedef struct Visitor Visitor; + struct Monitor; typedef struct Monitor Monitor; typedef struct MigrationParams MigrationParams; diff --git a/qapi-schema.json b/qapi-schema.json index af3a83b..4abbf36 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -2759,6 +2759,26 @@ { 'command': 'netdev_del', 'data': {'id': 'str'} } ## +# @object-add: +# +# Create a QOM object. +# +# @qom-type: the class name for the object to be created +# +# @id: the name of the new object +# +# @props: #optional a dictionary of properties to be passed to the backend +# +# Returns: Nothing on success +# Error if @qom-type is not a valid class name +# +# Since: 2.0 +## +{ 'command': 'object-add', + 'data': {'qom-type': 'str', 'id': 'str', '*props': 'dict'}, + 'gen': 'no' } + +## # @object-del: # # Remove a QOM object. diff --git a/qmp-commands.hx b/qmp-commands.hx index 71422cd..02cc815 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -879,6 +879,32 @@ Example: EQMP { + .name = "object-add", + .args_type = "qom-type:s,id:s,props:q?", + .mhandler.cmd_new = qmp_object_add, + }, + +SQMP +object-add +---------- + +Create QOM object. + +Arguments: + +- "qom-type": the object's QOM type, i.e. the class name (json-string) +- "id": the object's ID, must be unique (json-string) +- "props": a dictionary of object property values (optional, json-dict) + +Example: + +-> { "execute": "object-add", "arguments": { "qom-type": "rng-random", "id": "rng1", + "props": { "filename": "/dev/hwrng" } } } +<- { "return": {} } + +EQMP + + { .name = "object-del", .args_type = "id:s", .mhandler.cmd_new = qmp_marshal_input_object_del, diff --git a/qmp.c b/qmp.c index 73aab58..3e20605 100644 --- a/qmp.c +++ b/qmp.c @@ -24,6 +24,8 @@ #include "hw/qdev.h" #include "sysemu/blockdev.h" #include "qom/qom-qobject.h" +#include "qapi/qmp/qobject.h" +#include "qapi/qmp-input-visitor.h" #include "hw/boards.h" NameInfo *qmp_query_name(Error **errp) @@ -530,6 +532,66 @@ void qmp_add_client(const char *protocol, const char *fdname, close(fd); } +void object_add(const char *type, const char *id, const QDict *qdict, + Visitor *v, Error **errp) +{ + Object *obj; + const QDictEntry *e; + Error *local_err = NULL; + + if (!object_class_by_name(type)) { + error_setg(errp, "invalid class name"); + return; + } + + obj = object_new(type); + if (qdict) { + for (e = qdict_first(qdict); e; e = qdict_next(qdict, e)) { + object_property_set(obj, v, e->key, &local_err); + if (local_err) { + error_propagate(errp, local_err); + object_unref(obj); + return; + } + } + } + + object_property_add_child(container_get(object_get_root(), "/objects"), + id, obj, errp); + object_unref(obj); +} + +int qmp_object_add(Monitor *mon, const QDict *qdict, QObject **ret) +{ + const char *type = qdict_get_str(qdict, "qom-type"); + const char *id = qdict_get_str(qdict, "id"); + QObject *props = qdict_get(qdict, "props"); + const QDict *pdict = NULL; + Error *local_err = NULL; + QmpInputVisitor *qiv; + + if (props) { + pdict = qobject_to_qdict(props); + if (!pdict) { + error_set(&local_err, QERR_INVALID_PARAMETER_TYPE, "props", "dict"); + goto out; + } + } + + qiv = qmp_input_visitor_new(props); + object_add(type, id, pdict, qmp_input_get_visitor(qiv), &local_err); + qmp_input_visitor_cleanup(qiv); + +out: + if (local_err) { + qerror_report_err(local_err); + error_free(local_err); + return -1; + } + + return 0; +} + void qmp_object_del(const char *id, Error **errp) { Object *container; -- 1.8.4.2 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del 2013-12-20 22:21 [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del Paolo Bonzini ` (4 preceding siblings ...) 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 5/5] monitor: add object-add (QMP) and object_add " Paolo Bonzini @ 2014-01-03 14:17 ` Igor Mammedov 2014-01-03 14:24 ` Igor Mammedov 2014-01-06 18:53 ` Luiz Capitulino 7 siblings, 0 replies; 10+ messages in thread From: Igor Mammedov @ 2014-01-03 14:17 UTC (permalink / raw) To: Paolo Bonzini; +Cc: lcapitulino, qemu-devel, afaerber On Fri, 20 Dec 2013 23:21:05 +0100 Paolo Bonzini <pbonzini@redhat.com> wrote: > These allow hotplugging (and hot-unplugging without leaking an object) > virtio-rng devices. They can also be used for memory hotplug. > > v1->v2: fix mistyped underscores in qapi-schema.json > > v2->v3: preserve bisectability by inverting patches 4 and 5, keep lines > under 80 characters since it can be done easily, drop error_is_set Reviewed-By & Tested-By: Igor Mammedov <imammedo@redhat.com> > > Paolo Bonzini (5): > rng: initialize file descriptor to -1 > qom: fix leak for objects created with -object > qom: catch errors in object_property_add_child > monitor: add object-del (QMP) and object_del (HMP) command > monitor: add object-add (QMP) and object_add (HMP) command > > backends/rng-random.c | 4 +-- > hmp-commands.hx | 28 +++++++++++++++++ > hmp.c | 67 +++++++++++++++++++++++++++++++++++++++++ > hmp.h | 2 ++ > include/monitor/monitor.h | 3 ++ > include/qapi/visitor.h | 3 +- > include/qemu/typedefs.h | 2 ++ > qapi-schema.json | 34 +++++++++++++++++++++ > qmp-commands.hx | 51 +++++++++++++++++++++++++++++++ > qmp.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++ > qom/object.c | 9 ++++-- > vl.c | 3 +- > 12 files changed, 275 insertions(+), 7 deletions(-) > > -- > 1.8.4.2 > > -- Regards, Igor ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del 2013-12-20 22:21 [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del Paolo Bonzini ` (5 preceding siblings ...) 2014-01-03 14:17 ` [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del Igor Mammedov @ 2014-01-03 14:24 ` Igor Mammedov 2014-01-03 14:41 ` Luiz Capitulino 2014-01-06 18:53 ` Luiz Capitulino 7 siblings, 1 reply; 10+ messages in thread From: Igor Mammedov @ 2014-01-03 14:24 UTC (permalink / raw) To: Paolo Bonzini; +Cc: lcapitulino, qemu-devel, afaerber On Fri, 20 Dec 2013 23:21:05 +0100 Paolo Bonzini <pbonzini@redhat.com> wrote: > These allow hotplugging (and hot-unplugging without leaking an object) > virtio-rng devices. They can also be used for memory hotplug. > > v1->v2: fix mistyped underscores in qapi-schema.json > > v2->v3: preserve bisectability by inverting patches 4 and 5, keep lines > under 80 characters since it can be done easily, drop error_is_set > Looks like there is typo in CC list, so Luiz was never CCed, adding him to CC so series won't be lost. -- Regards, Igor ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del 2014-01-03 14:24 ` Igor Mammedov @ 2014-01-03 14:41 ` Luiz Capitulino 0 siblings, 0 replies; 10+ messages in thread From: Luiz Capitulino @ 2014-01-03 14:41 UTC (permalink / raw) To: Igor Mammedov; +Cc: Paolo Bonzini, qemu-devel, afaerber On Fri, 3 Jan 2014 15:24:57 +0100 Igor Mammedov <imammedo@redhat.com> wrote: > On Fri, 20 Dec 2013 23:21:05 +0100 > Paolo Bonzini <pbonzini@redhat.com> wrote: > > > These allow hotplugging (and hot-unplugging without leaking an object) > > virtio-rng devices. They can also be used for memory hotplug. > > > > v1->v2: fix mistyped underscores in qapi-schema.json > > > > v2->v3: preserve bisectability by inverting patches 4 and 5, keep lines > > under 80 characters since it can be done easily, drop error_is_set > > > Looks like there is typo in CC list, so Luiz was never CCed, > adding him to CC so series won't be lost. Paolo did ping in private, but thanks for reminding me anyway. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del 2013-12-20 22:21 [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del Paolo Bonzini ` (6 preceding siblings ...) 2014-01-03 14:24 ` Igor Mammedov @ 2014-01-06 18:53 ` Luiz Capitulino 7 siblings, 0 replies; 10+ messages in thread From: Luiz Capitulino @ 2014-01-06 18:53 UTC (permalink / raw) To: Paolo Bonzini; +Cc: imammedo, qemu-devel, lcapitulino, afaerber On Fri, 20 Dec 2013 23:21:05 +0100 Paolo Bonzini <pbonzini@redhat.com> wrote: > These allow hotplugging (and hot-unplugging without leaking an object) > virtio-rng devices. They can also be used for memory hotplug. > > v1->v2: fix mistyped underscores in qapi-schema.json > > v2->v3: preserve bisectability by inverting patches 4 and 5, keep lines > under 80 characters since it can be done easily, drop error_is_set Applied to the qmp branch, thanks. > > Paolo Bonzini (5): > rng: initialize file descriptor to -1 > qom: fix leak for objects created with -object > qom: catch errors in object_property_add_child > monitor: add object-del (QMP) and object_del (HMP) command > monitor: add object-add (QMP) and object_add (HMP) command > > backends/rng-random.c | 4 +-- > hmp-commands.hx | 28 +++++++++++++++++ > hmp.c | 67 +++++++++++++++++++++++++++++++++++++++++ > hmp.h | 2 ++ > include/monitor/monitor.h | 3 ++ > include/qapi/visitor.h | 3 +- > include/qemu/typedefs.h | 2 ++ > qapi-schema.json | 34 +++++++++++++++++++++ > qmp-commands.hx | 51 +++++++++++++++++++++++++++++++ > qmp.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++ > qom/object.c | 9 ++++-- > vl.c | 3 +- > 12 files changed, 275 insertions(+), 7 deletions(-) > ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2014-01-06 18:53 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-12-20 22:21 [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 1/5] rng: initialize file descriptor to -1 Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 2/5] qom: fix leak for objects created with -object Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 3/5] qom: catch errors in object_property_add_child Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 4/5] monitor: add object-del (QMP) and object_del (HMP) command Paolo Bonzini 2013-12-20 22:21 ` [Qemu-devel] [PATCH v3 5/5] monitor: add object-add (QMP) and object_add " Paolo Bonzini 2014-01-03 14:17 ` [Qemu-devel] [PATCH v3 0/5] Monitor commands for object-add/del Igor Mammedov 2014-01-03 14:24 ` Igor Mammedov 2014-01-03 14:41 ` Luiz Capitulino 2014-01-06 18:53 ` Luiz Capitulino
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).