aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/qemu/qemu/chardev-connect-socket-to-a-spawned-command.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/qemu/qemu/chardev-connect-socket-to-a-spawned-command.patch')
-rw-r--r--meta/recipes-devtools/qemu/qemu/chardev-connect-socket-to-a-spawned-command.patch72
1 files changed, 25 insertions, 47 deletions
diff --git a/meta/recipes-devtools/qemu/qemu/chardev-connect-socket-to-a-spawned-command.patch b/meta/recipes-devtools/qemu/qemu/chardev-connect-socket-to-a-spawned-command.patch
index 4f8539757a..32809d3085 100644
--- a/meta/recipes-devtools/qemu/qemu/chardev-connect-socket-to-a-spawned-command.patch
+++ b/meta/recipes-devtools/qemu/qemu/chardev-connect-socket-to-a-spawned-command.patch
@@ -1,6 +1,6 @@
-From aa3aef4cf5f4dd98f9133df085e825ff5da7dcbd Mon Sep 17 00:00:00 2001
-From: Patrick Ohly <patrick.ohly@intel.com>
-Date: Fri, 27 Oct 2017 15:23:35 +0200
+From 3bb3100c22eb30146a69656480bdffeef8663575 Mon Sep 17 00:00:00 2001
+From: Alistair Francis <alistair.francis@xilinx.com>
+Date: Thu, 21 Dec 2017 11:35:16 -0800
Subject: [PATCH] chardev: connect socket to a spawned command
The command is started in a shell (sh -c) with stdin connect to QEMU
@@ -44,22 +44,20 @@ as simple as possible.
Upstream-Status: Inappropriate [embedded specific]
Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
-
---
chardev/char-socket.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++---
chardev/char.c | 3 ++
- qapi-schema.json | 5 +++
+ qapi/char.json | 5 +++
3 files changed, 90 insertions(+), 4 deletions(-)
diff --git a/chardev/char-socket.c b/chardev/char-socket.c
-index 1ae730a4..c366a02a 100644
+index 53eda8ef00..f566107c35 100644
--- a/chardev/char-socket.c
+++ b/chardev/char-socket.c
-@@ -854,6 +854,68 @@ static gboolean socket_reconnect_timeout(gpointer opaque)
+@@ -852,6 +852,66 @@ static gboolean socket_reconnect_timeout(gpointer opaque)
return false;
}
-+#ifndef _WIN32
+static void chardev_open_socket_cmd(Chardev *chr,
+ const char *cmd,
+ Error **errp)
@@ -119,51 +117,42 @@ index 1ae730a4..c366a02a 100644
+ object_unref(OBJECT(sioc));
+ }
+}
-+#endif
+
static void qmp_chardev_open_socket(Chardev *chr,
ChardevBackend *backend,
bool *be_opened,
-@@ -861,6 +923,9 @@ static void qmp_chardev_open_socket(Chardev *chr,
+@@ -859,6 +919,7 @@ static void qmp_chardev_open_socket(Chardev *chr,
{
SocketChardev *s = SOCKET_CHARDEV(chr);
ChardevSocket *sock = backend->u.socket.data;
-+#ifndef _WIN32
+ const char *cmd = sock->cmd;
-+#endif
bool do_nodelay = sock->has_nodelay ? sock->nodelay : false;
bool is_listen = sock->has_server ? sock->server : true;
bool is_telnet = sock->has_telnet ? sock->telnet : false;
-@@ -928,7 +993,15 @@ static void qmp_chardev_open_socket(Chardev *chr,
+@@ -926,7 +987,12 @@ static void qmp_chardev_open_socket(Chardev *chr,
s->reconnect_time = reconnect;
}
- if (s->reconnect_time) {
-+#ifndef _WIN32
+ if (cmd) {
+ chardev_open_socket_cmd(chr, cmd, errp);
+
+ /* everything ready (or failed permanently) before we return */
+ *be_opened = true;
-+ } else
-+#endif
-+ if (s->reconnect_time) {
++ } else if (s->reconnect_time) {
sioc = qio_channel_socket_new();
tcp_chr_set_client_ioc_name(chr, sioc);
qio_channel_socket_connect_async(sioc, s->addr,
-@@ -987,11 +1060,27 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
+@@ -985,11 +1051,22 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
const char *host = qemu_opt_get(opts, "host");
const char *port = qemu_opt_get(opts, "port");
const char *tls_creds = qemu_opt_get(opts, "tls-creds");
-+#ifndef _WIN32
+ const char *cmd = qemu_opt_get(opts, "cmd");
-+#endif
SocketAddressLegacy *addr;
ChardevSocket *sock;
backend->type = CHARDEV_BACKEND_KIND_SOCKET;
- if (!path) {
-+#ifndef _WIN32
+ if (cmd) {
+ /*
+ * Here we have to ensure that no options are set which are incompatible with
@@ -174,57 +163,46 @@ index 1ae730a4..c366a02a 100644
+ error_setg(errp, "chardev: socket: cmd does not support any additional options");
+ return;
+ }
-+ } else
-+#endif
-+ if (!path) {
++ } else if (!path) {
if (!host) {
error_setg(errp, "chardev: socket: no host given");
return;
-@@ -1023,13 +1112,24 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
+@@ -1021,13 +1098,14 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
sock->has_reconnect = true;
sock->reconnect = reconnect;
sock->tls_creds = g_strdup(tls_creds);
-+#ifndef _WIN32
+ sock->cmd = g_strdup(cmd);
-+#endif
addr = g_new0(SocketAddressLegacy, 1);
-+#ifndef _WIN32
+- if (path) {
+ if (path || cmd) {
-+#else
- if (path) {
-+#endif
UnixSocketAddress *q_unix;
addr->type = SOCKET_ADDRESS_LEGACY_KIND_UNIX;
q_unix = addr->u.q_unix.data = g_new0(UnixSocketAddress, 1);
- q_unix->path = g_strdup(path);
-+#ifndef _WIN32
+ q_unix->path = cmd ? g_strdup_printf("cmd:%s", cmd) : g_strdup(path);
-+#else
-+ q_unix->path = g_strdup(path);
-+#endif
} else {
addr->type = SOCKET_ADDRESS_LEGACY_KIND_INET;
addr->u.inet.data = g_new(InetSocketAddress, 1);
diff --git a/chardev/char.c b/chardev/char.c
-index 5d283b90..ccb329d4 100644
+index 2ae4f465ec..5d52cd5de5 100644
--- a/chardev/char.c
+++ b/chardev/char.c
-@@ -782,6 +782,9 @@ QemuOptsList qemu_chardev_opts = {
+@@ -792,6 +792,9 @@ QemuOptsList qemu_chardev_opts = {
+ },{
.name = "path",
.type = QEMU_OPT_STRING,
- },{
++ },{
+ .name = "cmd",
+ .type = QEMU_OPT_STRING,
-+ },{
+ },{
.name = "host",
.type = QEMU_OPT_STRING,
- },{
-diff --git a/qapi-schema.json b/qapi-schema.json
-index 78a00bc8..790b026d 100644
---- a/qapi-schema.json
-+++ b/qapi-schema.json
-@@ -5004,6 +5004,10 @@
+diff --git a/qapi/char.json b/qapi/char.json
+index ae19dcd1ed..6de0f29bcd 100644
+--- a/qapi/char.json
++++ b/qapi/char.json
+@@ -241,6 +241,10 @@
#
# @addr: socket address to listen on (server=true)
# or connect to (server=false)
@@ -235,7 +213,7 @@ index 78a00bc8..790b026d 100644
# @tls-creds: the ID of the TLS credentials object (since 2.6)
# @server: create server socket (default: true)
# @wait: wait for incoming connection on server
-@@ -5021,6 +5025,7 @@
+@@ -258,6 +262,7 @@
# Since: 1.4
##
{ 'struct': 'ChardevSocket', 'data': { 'addr' : 'SocketAddressLegacy',
@@ -244,5 +222,5 @@ index 78a00bc8..790b026d 100644
'*server' : 'bool',
'*wait' : 'bool',
--
-2.11.0
+2.14.1