diff options
Diffstat (limited to 'meta/recipes-devtools/qemu/qemu/0008-chardev-connect-socket-to-a-spawned-command.patch')
-rw-r--r-- | meta/recipes-devtools/qemu/qemu/0008-chardev-connect-socket-to-a-spawned-command.patch | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/meta/recipes-devtools/qemu/qemu/0008-chardev-connect-socket-to-a-spawned-command.patch b/meta/recipes-devtools/qemu/qemu/0008-chardev-connect-socket-to-a-spawned-command.patch index f0c0fa19b4..2afe4e9376 100644 --- a/meta/recipes-devtools/qemu/qemu/0008-chardev-connect-socket-to-a-spawned-command.patch +++ b/meta/recipes-devtools/qemu/qemu/0008-chardev-connect-socket-to-a-spawned-command.patch | |||
@@ -1,4 +1,4 @@ | |||
1 | From 55c9510311b7481a0c8f3f71b3ce130cc25563f9 Mon Sep 17 00:00:00 2001 | 1 | From 20a09bb18907e67565c54fc505a741cbbef53f7f Mon Sep 17 00:00:00 2001 |
2 | From: Alistair Francis <alistair.francis@xilinx.com> | 2 | From: Alistair Francis <alistair.francis@xilinx.com> |
3 | Date: Thu, 21 Dec 2017 11:35:16 -0800 | 3 | Date: Thu, 21 Dec 2017 11:35:16 -0800 |
4 | Subject: [PATCH] chardev: connect socket to a spawned command | 4 | Subject: [PATCH] chardev: connect socket to a spawned command |
@@ -45,16 +45,16 @@ Upstream-Status: Inappropriate [embedded specific] | |||
45 | 45 | ||
46 | Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> | 46 | Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> |
47 | --- | 47 | --- |
48 | chardev/char-socket.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++ | 48 | chardev/char-socket.c | 102 ++++++++++++++++++++++++++++++++++++++++++ |
49 | chardev/char.c | 3 ++ | 49 | chardev/char.c | 3 ++ |
50 | qapi/char.json | 5 +++ | 50 | qapi/char.json | 5 +++ |
51 | 3 files changed, 107 insertions(+) | 51 | 3 files changed, 110 insertions(+) |
52 | 52 | ||
53 | diff --git a/chardev/char-socket.c b/chardev/char-socket.c | 53 | diff --git a/chardev/char-socket.c b/chardev/char-socket.c |
54 | index 53eda8e..6c63555 100644 | 54 | index 159e69c3b1..84778cf31a 100644 |
55 | --- a/chardev/char-socket.c | 55 | --- a/chardev/char-socket.c |
56 | +++ b/chardev/char-socket.c | 56 | +++ b/chardev/char-socket.c |
57 | @@ -852,6 +852,68 @@ static gboolean socket_reconnect_timeout(gpointer opaque) | 57 | @@ -934,6 +934,68 @@ static gboolean socket_reconnect_timeout(gpointer opaque) |
58 | return false; | 58 | return false; |
59 | } | 59 | } |
60 | 60 | ||
@@ -123,7 +123,7 @@ index 53eda8e..6c63555 100644 | |||
123 | static void qmp_chardev_open_socket(Chardev *chr, | 123 | static void qmp_chardev_open_socket(Chardev *chr, |
124 | ChardevBackend *backend, | 124 | ChardevBackend *backend, |
125 | bool *be_opened, | 125 | bool *be_opened, |
126 | @@ -859,6 +921,9 @@ static void qmp_chardev_open_socket(Chardev *chr, | 126 | @@ -941,6 +1003,9 @@ static void qmp_chardev_open_socket(Chardev *chr, |
127 | { | 127 | { |
128 | SocketChardev *s = SOCKET_CHARDEV(chr); | 128 | SocketChardev *s = SOCKET_CHARDEV(chr); |
129 | ChardevSocket *sock = backend->u.socket.data; | 129 | ChardevSocket *sock = backend->u.socket.data; |
@@ -133,24 +133,24 @@ index 53eda8e..6c63555 100644 | |||
133 | bool do_nodelay = sock->has_nodelay ? sock->nodelay : false; | 133 | bool do_nodelay = sock->has_nodelay ? sock->nodelay : false; |
134 | bool is_listen = sock->has_server ? sock->server : true; | 134 | bool is_listen = sock->has_server ? sock->server : true; |
135 | bool is_telnet = sock->has_telnet ? sock->telnet : false; | 135 | bool is_telnet = sock->has_telnet ? sock->telnet : false; |
136 | @@ -925,7 +990,14 @@ static void qmp_chardev_open_socket(Chardev *chr, | 136 | @@ -1008,6 +1073,14 @@ static void qmp_chardev_open_socket(Chardev *chr, |
137 | } else if (reconnect > 0) { | ||
138 | s->reconnect_time = reconnect; | 137 | s->reconnect_time = reconnect; |
139 | } | 138 | } |
139 | |||
140 | +#ifndef _WIN32 | 140 | +#ifndef _WIN32 |
141 | + if (cmd) { | 141 | + if (cmd) { |
142 | + chardev_open_socket_cmd(chr, cmd, errp); | 142 | + chardev_open_socket_cmd(chr, cmd, errp); |
143 | 143 | + | |
144 | + /* everything ready (or failed permanently) before we return */ | 144 | + /* everything ready (or failed permanently) before we return */ |
145 | + *be_opened = true; | 145 | + *be_opened = true; |
146 | + } else | 146 | + } else |
147 | +#endif | 147 | +#endif |
148 | if (s->reconnect_time) { | 148 | /* If reconnect_time is set, will do that in chr_machine_done. */ |
149 | sioc = qio_channel_socket_new(); | 149 | if (!s->reconnect_time) { |
150 | tcp_chr_set_client_ioc_name(chr, sioc); | 150 | if (s->is_listen) { |
151 | @@ -985,10 +1057,26 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend, | 151 | @@ -1065,9 +1138,26 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend, |
152 | const char *host = qemu_opt_get(opts, "host"); | ||
153 | const char *port = qemu_opt_get(opts, "port"); | 152 | const char *port = qemu_opt_get(opts, "port"); |
153 | const char *fd = qemu_opt_get(opts, "fd"); | ||
154 | const char *tls_creds = qemu_opt_get(opts, "tls-creds"); | 154 | const char *tls_creds = qemu_opt_get(opts, "tls-creds"); |
155 | +#ifndef _WIN32 | 155 | +#ifndef _WIN32 |
156 | + const char *cmd = qemu_opt_get(opts, "cmd"); | 156 | + const char *cmd = qemu_opt_get(opts, "cmd"); |
@@ -158,7 +158,6 @@ index 53eda8e..6c63555 100644 | |||
158 | SocketAddressLegacy *addr; | 158 | SocketAddressLegacy *addr; |
159 | ChardevSocket *sock; | 159 | ChardevSocket *sock; |
160 | 160 | ||
161 | backend->type = CHARDEV_BACKEND_KIND_SOCKET; | ||
162 | +#ifndef _WIN32 | 161 | +#ifndef _WIN32 |
163 | + if (cmd) { | 162 | + if (cmd) { |
164 | + /* | 163 | + /* |
@@ -172,17 +171,18 @@ index 53eda8e..6c63555 100644 | |||
172 | + } | 171 | + } |
173 | + } else | 172 | + } else |
174 | +#endif | 173 | +#endif |
175 | if (!path) { | 174 | + |
176 | if (!host) { | 175 | if ((!!path + !!fd + !!host) != 1) { |
177 | error_setg(errp, "chardev: socket: no host given"); | 176 | error_setg(errp, |
178 | @@ -1021,13 +1109,24 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend, | 177 | "Exactly one of 'path', 'fd' or 'host' required"); |
179 | sock->has_reconnect = true; | 178 | @@ -1112,12 +1202,24 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend, |
180 | sock->reconnect = reconnect; | 179 | sock->reconnect = reconnect; |
181 | sock->tls_creds = g_strdup(tls_creds); | 180 | sock->tls_creds = g_strdup(tls_creds); |
181 | |||
182 | +#ifndef _WIN32 | 182 | +#ifndef _WIN32 |
183 | + sock->cmd = g_strdup(cmd); | 183 | + sock->cmd = g_strdup(cmd); |
184 | +#endif | 184 | +#endif |
185 | 185 | + | |
186 | addr = g_new0(SocketAddressLegacy, 1); | 186 | addr = g_new0(SocketAddressLegacy, 1); |
187 | +#ifndef _WIN32 | 187 | +#ifndef _WIN32 |
188 | + if (path || cmd) { | 188 | + if (path || cmd) { |
@@ -197,25 +197,25 @@ index 53eda8e..6c63555 100644 | |||
197 | +#else | 197 | +#else |
198 | q_unix->path = g_strdup(path); | 198 | q_unix->path = g_strdup(path); |
199 | +#endif | 199 | +#endif |
200 | } else { | 200 | } else if (host) { |
201 | addr->type = SOCKET_ADDRESS_LEGACY_KIND_INET; | 201 | addr->type = SOCKET_ADDRESS_LEGACY_KIND_INET; |
202 | addr->u.inet.data = g_new(InetSocketAddress, 1); | 202 | addr->u.inet.data = g_new(InetSocketAddress, 1); |
203 | diff --git a/chardev/char.c b/chardev/char.c | 203 | diff --git a/chardev/char.c b/chardev/char.c |
204 | index 2ae4f46..5d52cd5 100644 | 204 | index 76d866e6fe..9747d51d7c 100644 |
205 | --- a/chardev/char.c | 205 | --- a/chardev/char.c |
206 | +++ b/chardev/char.c | 206 | +++ b/chardev/char.c |
207 | @@ -793,6 +793,9 @@ QemuOptsList qemu_chardev_opts = { | 207 | @@ -792,6 +792,9 @@ QemuOptsList qemu_chardev_opts = { |
208 | },{ | ||
208 | .name = "path", | 209 | .name = "path", |
209 | .type = QEMU_OPT_STRING, | 210 | .type = QEMU_OPT_STRING, |
210 | },{ | 211 | + },{ |
211 | + .name = "cmd", | 212 | + .name = "cmd", |
212 | + .type = QEMU_OPT_STRING, | 213 | + .type = QEMU_OPT_STRING, |
213 | + },{ | 214 | },{ |
214 | .name = "host", | 215 | .name = "host", |
215 | .type = QEMU_OPT_STRING, | 216 | .type = QEMU_OPT_STRING, |
216 | },{ | ||
217 | diff --git a/qapi/char.json b/qapi/char.json | 217 | diff --git a/qapi/char.json b/qapi/char.json |
218 | index ae19dcd..6de0f29 100644 | 218 | index ae19dcd1ed..6de0f29bcd 100644 |
219 | --- a/qapi/char.json | 219 | --- a/qapi/char.json |
220 | +++ b/qapi/char.json | 220 | +++ b/qapi/char.json |
221 | @@ -241,6 +241,10 @@ | 221 | @@ -241,6 +241,10 @@ |