All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anton Nefedov <anton.nefedov@virtuozzo.com>
To: qemu-devel@nongnu.org
Cc: den@virtuozzo.com, pbonzini@redhat.com,
	marcandre.lureau@redhat.com,
	Anton Nefedov <anton.nefedov@virtuozzo.com>,
	"Dr . David Alan Gilbert" <dgilbert@redhat.com>
Subject: [Qemu-devel] [PATCH v3 10/13] hmp: add hmp analogue for qmp-chardev-change
Date: Tue, 30 May 2017 16:58:00 +0300	[thread overview]
Message-ID: <1496152683-102751-11-git-send-email-anton.nefedov@virtuozzo.com> (raw)
In-Reply-To: <1496152683-102751-1-git-send-email-anton.nefedov@virtuozzo.com>

Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
CC: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 chardev/char.c        |  2 +-
 hmp-commands.hx       | 16 ++++++++++++++++
 hmp.c                 | 34 ++++++++++++++++++++++++++++++++++
 hmp.h                 |  1 +
 include/sysemu/char.h | 12 ++++++++++++
 5 files changed, 64 insertions(+), 1 deletion(-)

diff --git a/chardev/char.c b/chardev/char.c
index 2d6e204..1e2a2dd 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -888,7 +888,7 @@ help_string_append(const char *name, void *opaque)
     g_string_append_printf(str, "\n%s", name);
 }
 
-static ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, Error **errp)
+ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, Error **errp)
 {
     Error *local_err = NULL;
     const ChardevClass *cc;
diff --git a/hmp-commands.hx b/hmp-commands.hx
index baeac47..19bfddd 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -1727,6 +1727,22 @@ chardev_add accepts the same parameters as the -chardev command line switch.
 ETEXI
 
     {
+        .name       = "chardev-change",
+        .args_type  = "id:s,args:s",
+        .params     = "id args",
+        .help       = "change chardev",
+        .cmd        = hmp_chardev_change,
+    },
+
+STEXI
+@item chardev-change args
+@findex chardev-change
+chardev_change accepts existing chardev @var{id} and then the same arguments
+as the -chardev command line switch (except for "id").
+
+ETEXI
+
+    {
         .name       = "chardev-remove",
         .args_type  = "id:s",
         .params     = "id",
diff --git a/hmp.c b/hmp.c
index 20f5dab..7660495 100644
--- a/hmp.c
+++ b/hmp.c
@@ -2224,6 +2224,40 @@ void hmp_chardev_add(Monitor *mon, const QDict *qdict)
     hmp_handle_error(mon, &err);
 }
 
+void hmp_chardev_change(Monitor *mon, const QDict *qdict)
+{
+    const char *args = qdict_get_str(qdict, "args");
+    const char *id;
+    Error *err = NULL;
+    ChardevBackend *backend = NULL;
+    ChardevReturn *ret = NULL;
+    QemuOpts *opts = qemu_opts_parse_noisily(qemu_find_opts("chardev"), args,
+                                             true);
+    if (!opts) {
+        error_setg(&err, "Parsing chardev args failed");
+        goto end;
+    }
+
+    id = qdict_get_str(qdict, "id");
+    if (qemu_opts_id(opts)) {
+        error_setg(&err, "Unexpected 'id' parameter");
+        goto end;
+    }
+
+    backend = qemu_chr_parse_opts(opts, &err);
+    if (!backend) {
+        goto end;
+    }
+
+    ret = qmp_chardev_change(id, backend, &err);
+
+end:
+    qapi_free_ChardevReturn(ret);
+    qapi_free_ChardevBackend(backend);
+    qemu_opts_del(opts);
+    hmp_handle_error(mon, &err);
+}
+
 void hmp_chardev_remove(Monitor *mon, const QDict *qdict)
 {
     Error *local_err = NULL;
diff --git a/hmp.h b/hmp.h
index d8b94ce..23e035c 100644
--- a/hmp.h
+++ b/hmp.h
@@ -102,6 +102,7 @@ void hmp_nbd_server_start(Monitor *mon, const QDict *qdict);
 void hmp_nbd_server_add(Monitor *mon, const QDict *qdict);
 void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict);
 void hmp_chardev_add(Monitor *mon, const QDict *qdict);
+void hmp_chardev_change(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_cpu_add(Monitor *mon, const QDict *qdict);
diff --git a/include/sysemu/char.h b/include/sysemu/char.h
index 342f531..18fcd26 100644
--- a/include/sysemu/char.h
+++ b/include/sysemu/char.h
@@ -131,6 +131,18 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts,
 void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend);
 
 /**
+ * @qemu_chr_parse_opts:
+ *
+ * Parse the options to the ChardevBackend struct.
+ *
+ * @opts
+ *
+ * Returns: a new backend
+ */
+ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts,
+                                    Error **errp);
+
+/**
  * @qemu_chr_new:
  *
  * Create a new character backend from a URI.
-- 
2.7.4

  parent reply	other threads:[~2017-05-30 13:58 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-30 13:57 [Qemu-devel] [PATCH v3 00/13] chardevice hotswap Anton Nefedov
2017-05-30 13:57 ` [Qemu-devel] [PATCH v3 01/13] char: move QemuOpts->ChardevBackend translation to a separate func Anton Nefedov
2017-05-31 19:18   ` Marc-André Lureau
2017-05-30 13:57 ` [Qemu-devel] [PATCH v3 02/13] char: add backend hotswap handler Anton Nefedov
2017-05-30 13:57 ` [Qemu-devel] [PATCH v3 03/13] char: chardevice hotswap Anton Nefedov
2017-05-31 19:20   ` Marc-André Lureau
2017-06-01 11:23     ` Anton Nefedov
2017-06-09 14:53       ` Marc-André Lureau
2017-06-13 11:53         ` Anton Nefedov
2017-06-13 12:32           ` Marc-André Lureau
2017-06-15 14:03             ` Anton Nefedov
2017-05-30 13:57 ` [Qemu-devel] [PATCH v3 04/13] char: forbid direct chardevice access for hotswap devices Anton Nefedov
2017-05-31 19:21   ` Marc-André Lureau
2017-05-30 13:57 ` [Qemu-devel] [PATCH v3 05/13] char: avoid chardevice direct access Anton Nefedov
2017-05-31 19:21   ` Marc-André Lureau
2017-05-30 13:57 ` [Qemu-devel] [PATCH v3 06/13] test-char: unref chardev-udp after test Anton Nefedov
2017-05-31 19:22   ` Marc-André Lureau
2017-05-30 13:57 ` [Qemu-devel] [PATCH v3 07/13] test-char: split char_udp_test Anton Nefedov
2017-05-31 19:22   ` Marc-André Lureau
2017-05-30 13:57 ` [Qemu-devel] [PATCH v3 08/13] test-char: split char_file_test Anton Nefedov
2017-05-31 19:24   ` Marc-André Lureau
2017-05-30 13:57 ` [Qemu-devel] [PATCH v3 09/13] test-char: add hotswap test Anton Nefedov
2017-05-31 19:25   ` Marc-André Lureau
2017-05-30 13:58 ` Anton Nefedov [this message]
2017-06-01  7:12   ` [Qemu-devel] [PATCH v3 10/13] hmp: add hmp analogue for qmp-chardev-change Marc-André Lureau
2017-06-01 11:24     ` Anton Nefedov
2017-06-01 14:56   ` Dr. David Alan Gilbert
2017-05-30 13:58 ` [Qemu-devel] [PATCH v3 11/13] virtio-console: chardev hotswap support Anton Nefedov
2017-05-30 13:58 ` [Qemu-devel] [PATCH v3 12/13] serial: move TIOCM update to a separate function Anton Nefedov
2017-05-30 13:58 ` [Qemu-devel] [PATCH v3 13/13] serial: chardev hotswap support Anton Nefedov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1496152683-102751-11-git-send-email-anton.nefedov@virtuozzo.com \
    --to=anton.nefedov@virtuozzo.com \
    --cc=den@virtuozzo.com \
    --cc=dgilbert@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.