All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups
@ 2017-05-29  8:45 Marc-André Lureau
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 01/14] char-win: simplify win_chr_read() Marc-André Lureau
                   ` (14 more replies)
  0 siblings, 15 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

Hi,

This is the last batch of patches I have pending for chardev for
now. They are mostly windows and headers related, and various small
improvements.

Comments welcome,
Thanks

v2:
- rename skip_free->keep_open, all->write_all
- add a patch moving char devices to chardev/
- patch reordering to remove chardev/char.h includes earlier
- add various r-b tags

Marc-André Lureau (14):
  char-win: simplify win_chr_read()
  char-win: remove WinChardev.len
  char-win: rename win_chr_init/poll win_chr_serial_init/poll
  char-win: rename hcom->file
  char-win: close file handle except with console
  Remove/replace sysemu/char.h inclusion
  chardev: move headers to include/chardev
  chardev: serial & parallel declaration to own headers
  be-hci: use backend functions
  char: generalize qemu_chr_write_all()
  char: move CharBackend handling in char-fe unit
  char: rename functions that are not part of fe
  char: make chr_fe_deinit() optionaly delete backend
  char: move char devices to chardev/

 {chardev => include/chardev}/char-fd.h        |   2 +-
 include/chardev/char-fe.h                     | 251 +++++++++++++
 {chardev => include/chardev}/char-io.h        |   2 +-
 {chardev => include/chardev}/char-mux.h       |   3 +-
 {chardev => include/chardev}/char-parallel.h  |  20 +-
 {chardev => include/chardev}/char-serial.h    |  22 ++
 {chardev => include/chardev}/char-win-stdio.h |   0
 {chardev => include/chardev}/char-win.h       |  14 +-
 include/chardev/char.h                        | 229 ++++++++++++
 include/hw/char/bcm2835_aux.h                 |   2 +-
 include/hw/char/cadence_uart.h                |   2 +-
 include/hw/char/digic-uart.h                  |   2 +-
 include/hw/char/imx_serial.h                  |   2 +-
 include/hw/char/serial.h                      |   4 +-
 include/hw/char/stm32f2xx_usart.h             |   2 +-
 include/sysemu/char.h                         | 499 --------------------------
 backends/rng-egd.c                            |   4 +-
 {backends => chardev}/baum.c                  |   2 +-
 chardev/char-console.c                        |   4 +-
 chardev/char-fd.c                             |   6 +-
 chardev/char-fe.c                             | 361 +++++++++++++++++++
 chardev/char-file.c                           |   8 +-
 chardev/char-io.c                             |   2 +-
 chardev/char-mux.c                            |   6 +-
 chardev/char-null.c                           |   2 +-
 chardev/char-parallel.c                       |   6 +-
 chardev/char-pipe.c                           |  16 +-
 chardev/char-pty.c                            |   4 +-
 chardev/char-ringbuf.c                        |   2 +-
 chardev/char-serial.c                         |   8 +-
 chardev/char-socket.c                         |   4 +-
 chardev/char-stdio.c                          |   8 +-
 chardev/char-udp.c                            |   4 +-
 chardev/char-win-stdio.c                      |   4 +-
 chardev/char-win.c                            |  95 ++---
 chardev/char.c                                | 386 +-------------------
 {backends => chardev}/msmouse.c               |   2 +-
 spice-qemu-char.c => chardev/spice.c          |   4 +-
 {backends => chardev}/testdev.c               |   2 +-
 {backends => chardev}/wctablet.c              |   2 +-
 gdbstub.c                                     |  18 +-
 hmp.c                                         |   2 +-
 hw/arm/bcm2835_peripherals.c                  |   1 -
 hw/arm/fsl-imx25.c                            |   2 +-
 hw/arm/fsl-imx31.c                            |   2 +-
 hw/arm/fsl-imx6.c                             |   2 +-
 hw/arm/omap2.c                                |   2 +-
 hw/arm/pxa2xx.c                               |   2 +-
 hw/arm/strongarm.c                            |   3 +-
 hw/bt/hci-csr.c                               |  11 +-
 hw/char/cadence_uart.c                        |   3 +-
 hw/char/debugcon.c                            |   2 +-
 hw/char/digic-uart.c                          |   2 +-
 hw/char/escc.c                                |   3 +-
 hw/char/etraxfs_ser.c                         |   2 +-
 hw/char/exynos4210_uart.c                     |   3 +-
 hw/char/grlib_apbuart.c                       |   2 +-
 hw/char/imx_serial.c                          |   1 -
 hw/char/ipoctal232.c                          |   2 +-
 hw/char/lm32_juart.c                          |   2 +-
 hw/char/lm32_uart.c                           |   2 +-
 hw/char/mcf_uart.c                            |   2 +-
 hw/char/milkymist-uart.c                      |   2 +-
 hw/char/omap_uart.c                           |   2 +-
 hw/char/parallel.c                            |   3 +-
 hw/char/pl011.c                               |   2 +-
 hw/char/sclpconsole-lm.c                      |   2 +-
 hw/char/sclpconsole.c                         |   2 +-
 hw/char/serial.c                              |   4 +-
 hw/char/sh_serial.c                           |   2 +-
 hw/char/spapr_vty.c                           |   2 +-
 hw/char/terminal3270.c                        |   2 +-
 hw/char/virtio-console.c                      |   2 +-
 hw/char/xen_console.c                         |   4 +-
 hw/char/xilinx_uartlite.c                     |   2 +-
 hw/core/qdev-properties-system.c              |   4 +-
 hw/core/qdev-properties.c                     |   2 +-
 hw/display/xenfb.c                            |   1 -
 hw/i386/xen/xen-hvm.c                         |   1 -
 hw/ipmi/ipmi_bmc_extern.c                     |   2 +-
 hw/isa/pc87312.c                              |   2 +-
 hw/mips/boston.c                              |   2 +-
 hw/mips/mips_fulong2e.c                       |   1 -
 hw/mips/mips_malta.c                          |   1 -
 hw/misc/ivshmem.c                             |   2 +-
 hw/net/xgmac.c                                |   1 -
 hw/ppc/spapr_events.c                         |   1 -
 hw/ppc/spapr_rtas.c                           |   1 -
 hw/sparc/leon3.c                              |   1 -
 hw/usb/ccid-card-emulated.c                   |   2 +-
 hw/usb/ccid-card-passthru.c                   |   7 +-
 hw/usb/dev-serial.c                           |   3 +-
 hw/usb/redirect.c                             |   6 +-
 hw/virtio/vhost-user.c                        |   2 +-
 hw/xen/xen-common.c                           |   2 +-
 hw/xen/xen_backend.c                          |   1 -
 hw/xtensa/xtfpga.c                            |   2 +-
 monitor.c                                     |   4 +-
 net/colo-compare.c                            |  10 +-
 net/filter-mirror.c                           |   8 +-
 net/slirp.c                                   |   2 +-
 net/vhost-user.c                              |   7 +-
 qmp.c                                         |   2 +-
 qtest.c                                       |   2 +-
 replay/replay-char.c                          |   2 +-
 slirp/slirp.c                                 |   2 +-
 tests/postcopy-test.c                         |   2 +-
 tests/test-char.c                             |  24 +-
 tests/vhost-user-test.c                       |   6 +-
 ui/console.c                                  |   2 +-
 ui/gtk.c                                      |   2 +-
 util/event_notifier-posix.c                   |   1 -
 vl.c                                          |   2 +-
 MAINTAINERS                                   |   5 +-
 Makefile.objs                                 |   4 +-
 backends/Makefile.objs                        |   4 -
 backends/trace-events                         |  10 -
 chardev/Makefile.objs                         |   7 +
 chardev/trace-events                          |  18 +
 trace-events                                  |   7 -
 120 files changed, 1124 insertions(+), 1156 deletions(-)
 rename {chardev => include/chardev}/char-fd.h (98%)
 create mode 100644 include/chardev/char-fe.h
 rename {chardev => include/chardev}/char-io.h (98%)
 rename {chardev => include/chardev}/char-mux.h (97%)
 rename {chardev => include/chardev}/char-parallel.h (70%)
 rename {chardev => include/chardev}/char-serial.h (75%)
 rename {chardev => include/chardev}/char-win-stdio.h (100%)
 rename {chardev => include/chardev}/char-win.h (84%)
 create mode 100644 include/chardev/char.h
 delete mode 100644 include/sysemu/char.h
 rename {backends => chardev}/baum.c (99%)
 create mode 100644 chardev/char-fe.c
 rename {backends => chardev}/msmouse.c (99%)
 rename spice-qemu-char.c => chardev/spice.c (99%)
 rename {backends => chardev}/testdev.c (99%)
 rename {backends => chardev}/wctablet.c (99%)
 create mode 100644 chardev/trace-events

-- 
2.13.0.91.g00982b8dd

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 01/14] char-win: simplify win_chr_read()
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 02/14] char-win: remove WinChardev.len Marc-André Lureau
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

win_chr_read_poll() is always used before win_chr_read().
We can easily fold win_chr_readfile() too.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 chardev/char-win.h |  2 +-
 chardev/char-win.c | 35 +++++++++--------------------------
 2 files changed, 10 insertions(+), 27 deletions(-)

diff --git a/chardev/char-win.h b/chardev/char-win.h
index d78a7d7972..73a0e3caef 100644
--- a/chardev/char-win.h
+++ b/chardev/char-win.h
@@ -28,7 +28,7 @@
 
 typedef struct {
     Chardev parent;
-    int max_size;
+
     HANDLE hcom, hrecv, hsend;
     OVERLAPPED orecv;
     BOOL fpipe;
diff --git a/chardev/char-win.c b/chardev/char-win.c
index e4b6957ded..a46d878ef8 100644
--- a/chardev/char-win.c
+++ b/chardev/char-win.c
@@ -26,14 +26,21 @@
 #include "qapi/error.h"
 #include "char-win.h"
 
-static void win_chr_readfile(Chardev *chr)
+static void win_chr_read(Chardev *chr)
 {
     WinChardev *s = WIN_CHARDEV(chr);
-
+    int max_size = qemu_chr_be_can_write(chr);
     int ret, err;
     uint8_t buf[CHR_READ_BUF_LEN];
     DWORD size;
 
+    if (s->len > max_size) {
+        s->len = max_size;
+    }
+    if (s->len == 0) {
+        return;
+    }
+
     ZeroMemory(&s->orecv, sizeof(s->orecv));
     s->orecv.hEvent = s->hrecv;
     ret = ReadFile(s->hcom, buf, s->len, &size, &s->orecv);
@@ -49,28 +56,6 @@ static void win_chr_readfile(Chardev *chr)
     }
 }
 
-static void win_chr_read(Chardev *chr)
-{
-    WinChardev *s = WIN_CHARDEV(chr);
-
-    if (s->len > s->max_size) {
-        s->len = s->max_size;
-    }
-    if (s->len == 0) {
-        return;
-    }
-
-    win_chr_readfile(chr);
-}
-
-static int win_chr_read_poll(Chardev *chr)
-{
-    WinChardev *s = WIN_CHARDEV(chr);
-
-    s->max_size = qemu_chr_be_can_write(chr);
-    return s->max_size;
-}
-
 static int win_chr_poll(void *opaque)
 {
     Chardev *chr = CHARDEV(opaque);
@@ -81,7 +66,6 @@ static int win_chr_poll(void *opaque)
     ClearCommError(s->hcom, &comerr, &status);
     if (status.cbInQue > 0) {
         s->len = status.cbInQue;
-        win_chr_read_poll(chr);
         win_chr_read(chr);
         return 1;
     }
@@ -163,7 +147,6 @@ int win_chr_pipe_poll(void *opaque)
     PeekNamedPipe(s->hcom, NULL, 0, NULL, &size, NULL);
     if (size > 0) {
         s->len = size;
-        win_chr_read_poll(chr);
         win_chr_read(chr);
         return 1;
     }
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 02/14] char-win: remove WinChardev.len
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 01/14] char-win: simplify win_chr_read() Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 03/14] char-win: rename win_chr_init/poll win_chr_serial_init/poll Marc-André Lureau
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

The "len" argument can be passed directly to win_chr_read()

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 chardev/char-win.h |  1 -
 chardev/char-win.c | 16 +++++++---------
 2 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/chardev/char-win.h b/chardev/char-win.h
index 73a0e3caef..70215e04c2 100644
--- a/chardev/char-win.h
+++ b/chardev/char-win.h
@@ -32,7 +32,6 @@ typedef struct {
     HANDLE hcom, hrecv, hsend;
     OVERLAPPED orecv;
     BOOL fpipe;
-    DWORD len;
 
     /* Protected by the Chardev chr_write_lock.  */
     OVERLAPPED osend;
diff --git a/chardev/char-win.c b/chardev/char-win.c
index a46d878ef8..5e7daeeae1 100644
--- a/chardev/char-win.c
+++ b/chardev/char-win.c
@@ -26,7 +26,7 @@
 #include "qapi/error.h"
 #include "char-win.h"
 
-static void win_chr_read(Chardev *chr)
+static void win_chr_read(Chardev *chr, DWORD len)
 {
     WinChardev *s = WIN_CHARDEV(chr);
     int max_size = qemu_chr_be_can_write(chr);
@@ -34,16 +34,16 @@ static void win_chr_read(Chardev *chr)
     uint8_t buf[CHR_READ_BUF_LEN];
     DWORD size;
 
-    if (s->len > max_size) {
-        s->len = max_size;
+    if (len > max_size) {
+        len = max_size;
     }
-    if (s->len == 0) {
+    if (len == 0) {
         return;
     }
 
     ZeroMemory(&s->orecv, sizeof(s->orecv));
     s->orecv.hEvent = s->hrecv;
-    ret = ReadFile(s->hcom, buf, s->len, &size, &s->orecv);
+    ret = ReadFile(s->hcom, buf, len, &size, &s->orecv);
     if (!ret) {
         err = GetLastError();
         if (err == ERROR_IO_PENDING) {
@@ -65,8 +65,7 @@ static int win_chr_poll(void *opaque)
 
     ClearCommError(s->hcom, &comerr, &status);
     if (status.cbInQue > 0) {
-        s->len = status.cbInQue;
-        win_chr_read(chr);
+        win_chr_read(chr, status.cbInQue);
         return 1;
     }
     return 0;
@@ -146,8 +145,7 @@ int win_chr_pipe_poll(void *opaque)
 
     PeekNamedPipe(s->hcom, NULL, 0, NULL, &size, NULL);
     if (size > 0) {
-        s->len = size;
-        win_chr_read(chr);
+        win_chr_read(chr, size);
         return 1;
     }
     return 0;
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 03/14] char-win: rename win_chr_init/poll win_chr_serial_init/poll
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 01/14] char-win: simplify win_chr_read() Marc-André Lureau
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 02/14] char-win: remove WinChardev.len Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 04/14] char-win: rename hcom->file Marc-André Lureau
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

Those 2 functions are specific to serial chardev, make it more clear.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 chardev/char-win.h    | 2 +-
 chardev/char-serial.c | 2 +-
 chardev/char-win.c    | 8 ++++----
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/chardev/char-win.h b/chardev/char-win.h
index 70215e04c2..e0b3839a77 100644
--- a/chardev/char-win.h
+++ b/chardev/char-win.h
@@ -46,7 +46,7 @@ typedef struct {
 #define WIN_CHARDEV(obj) OBJECT_CHECK(WinChardev, (obj), TYPE_CHARDEV_WIN)
 
 void qemu_chr_open_win_file(Chardev *chr, HANDLE fd_out);
-int win_chr_init(Chardev *chr, const char *filename, Error **errp);
+int win_chr_serial_init(Chardev *chr, const char *filename, Error **errp);
 int win_chr_pipe_poll(void *opaque);
 
 #endif /* CHAR_WIN_H */
diff --git a/chardev/char-serial.c b/chardev/char-serial.c
index 094e08dca5..fef3a91c77 100644
--- a/chardev/char-serial.c
+++ b/chardev/char-serial.c
@@ -45,7 +45,7 @@ static void qmp_chardev_open_serial(Chardev *chr,
 {
     ChardevHostdev *serial = backend->u.serial.data;
 
-    win_chr_init(chr, serial->device, errp);
+    win_chr_serial_init(chr, serial->device, errp);
 }
 
 #elif defined(__linux__) || defined(__sun__) || defined(__FreeBSD__)      \
diff --git a/chardev/char-win.c b/chardev/char-win.c
index 5e7daeeae1..11abad1521 100644
--- a/chardev/char-win.c
+++ b/chardev/char-win.c
@@ -56,7 +56,7 @@ static void win_chr_read(Chardev *chr, DWORD len)
     }
 }
 
-static int win_chr_poll(void *opaque)
+static int win_chr_serial_poll(void *opaque)
 {
     Chardev *chr = CHARDEV(opaque);
     WinChardev *s = WIN_CHARDEV(opaque);
@@ -71,7 +71,7 @@ static int win_chr_poll(void *opaque)
     return 0;
 }
 
-int win_chr_init(Chardev *chr, const char *filename, Error **errp)
+int win_chr_serial_init(Chardev *chr, const char *filename, Error **errp)
 {
     WinChardev *s = WIN_CHARDEV(chr);
     COMMCONFIG comcfg;
@@ -130,7 +130,7 @@ int win_chr_init(Chardev *chr, const char *filename, Error **errp)
         error_setg(errp, "Failed ClearCommError");
         goto fail;
     }
-    qemu_add_polling_cb(win_chr_poll, chr);
+    qemu_add_polling_cb(win_chr_serial_poll, chr);
     return 0;
 
  fail:
@@ -208,7 +208,7 @@ static void char_win_finalize(Object *obj)
     if (s->fpipe) {
         qemu_del_polling_cb(win_chr_pipe_poll, chr);
     } else {
-        qemu_del_polling_cb(win_chr_poll, chr);
+        qemu_del_polling_cb(win_chr_serial_poll, chr);
     }
 
     qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 04/14] char-win: rename hcom->file
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
                   ` (2 preceding siblings ...)
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 03/14] char-win: rename win_chr_init/poll win_chr_serial_init/poll Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 05/14] char-win: close file handle except with console Marc-André Lureau
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

hcom is the name of the file handle, regardless of the actual chardev
driver (serial, file, console etc..). Rename it to be more explicit.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 chardev/char-win.h  |  2 +-
 chardev/char-pipe.c | 10 +++++-----
 chardev/char-win.c  | 36 ++++++++++++++++++------------------
 3 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/chardev/char-win.h b/chardev/char-win.h
index e0b3839a77..888be2b3ca 100644
--- a/chardev/char-win.h
+++ b/chardev/char-win.h
@@ -29,7 +29,7 @@
 typedef struct {
     Chardev parent;
 
-    HANDLE hcom, hrecv, hsend;
+    HANDLE file, hrecv, hsend;
     OVERLAPPED orecv;
     BOOL fpipe;
 
diff --git a/chardev/char-pipe.c b/chardev/char-pipe.c
index 54240c863d..aae950a22b 100644
--- a/chardev/char-pipe.c
+++ b/chardev/char-pipe.c
@@ -58,27 +58,27 @@ static int win_chr_pipe_init(Chardev *chr, const char *filename,
     }
 
     openname = g_strdup_printf("\\\\.\\pipe\\%s", filename);
-    s->hcom = CreateNamedPipe(openname,
+    s->file = CreateNamedPipe(openname,
                               PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
                               PIPE_TYPE_BYTE | PIPE_READMODE_BYTE |
                               PIPE_WAIT,
                               MAXCONNECT, NSENDBUF, NRECVBUF, NTIMEOUT, NULL);
     g_free(openname);
-    if (s->hcom == INVALID_HANDLE_VALUE) {
+    if (s->file == INVALID_HANDLE_VALUE) {
         error_setg(errp, "Failed CreateNamedPipe (%lu)", GetLastError());
-        s->hcom = NULL;
+        s->file = NULL;
         goto fail;
     }
 
     ZeroMemory(&ov, sizeof(ov));
     ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
-    ret = ConnectNamedPipe(s->hcom, &ov);
+    ret = ConnectNamedPipe(s->file, &ov);
     if (ret) {
         error_setg(errp, "Failed ConnectNamedPipe");
         goto fail;
     }
 
-    ret = GetOverlappedResult(s->hcom, &ov, &size, TRUE);
+    ret = GetOverlappedResult(s->file, &ov, &size, TRUE);
     if (!ret) {
         error_setg(errp, "Failed GetOverlappedResult");
         if (ov.hEvent) {
diff --git a/chardev/char-win.c b/chardev/char-win.c
index 11abad1521..a7e3296909 100644
--- a/chardev/char-win.c
+++ b/chardev/char-win.c
@@ -43,11 +43,11 @@ static void win_chr_read(Chardev *chr, DWORD len)
 
     ZeroMemory(&s->orecv, sizeof(s->orecv));
     s->orecv.hEvent = s->hrecv;
-    ret = ReadFile(s->hcom, buf, len, &size, &s->orecv);
+    ret = ReadFile(s->file, buf, len, &size, &s->orecv);
     if (!ret) {
         err = GetLastError();
         if (err == ERROR_IO_PENDING) {
-            ret = GetOverlappedResult(s->hcom, &s->orecv, &size, TRUE);
+            ret = GetOverlappedResult(s->file, &s->orecv, &size, TRUE);
         }
     }
 
@@ -63,7 +63,7 @@ static int win_chr_serial_poll(void *opaque)
     COMSTAT status;
     DWORD comerr;
 
-    ClearCommError(s->hcom, &comerr, &status);
+    ClearCommError(s->file, &comerr, &status);
     if (status.cbInQue > 0) {
         win_chr_read(chr, status.cbInQue);
         return 1;
@@ -91,15 +91,15 @@ int win_chr_serial_init(Chardev *chr, const char *filename, Error **errp)
         goto fail;
     }
 
-    s->hcom = CreateFile(filename, GENERIC_READ | GENERIC_WRITE, 0, NULL,
+    s->file = CreateFile(filename, GENERIC_READ | GENERIC_WRITE, 0, NULL,
                       OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
-    if (s->hcom == INVALID_HANDLE_VALUE) {
+    if (s->file == INVALID_HANDLE_VALUE) {
         error_setg(errp, "Failed CreateFile (%lu)", GetLastError());
-        s->hcom = NULL;
+        s->file = NULL;
         goto fail;
     }
 
-    if (!SetupComm(s->hcom, NRECVBUF, NSENDBUF)) {
+    if (!SetupComm(s->file, NRECVBUF, NSENDBUF)) {
         error_setg(errp, "Failed SetupComm");
         goto fail;
     }
@@ -110,23 +110,23 @@ int win_chr_serial_init(Chardev *chr, const char *filename, Error **errp)
     comcfg.dcb.DCBlength = sizeof(DCB);
     CommConfigDialog(filename, NULL, &comcfg);
 
-    if (!SetCommState(s->hcom, &comcfg.dcb)) {
+    if (!SetCommState(s->file, &comcfg.dcb)) {
         error_setg(errp, "Failed SetCommState");
         goto fail;
     }
 
-    if (!SetCommMask(s->hcom, EV_ERR)) {
+    if (!SetCommMask(s->file, EV_ERR)) {
         error_setg(errp, "Failed SetCommMask");
         goto fail;
     }
 
     cto.ReadIntervalTimeout = MAXDWORD;
-    if (!SetCommTimeouts(s->hcom, &cto)) {
+    if (!SetCommTimeouts(s->file, &cto)) {
         error_setg(errp, "Failed SetCommTimeouts");
         goto fail;
     }
 
-    if (!ClearCommError(s->hcom, &err, &comstat)) {
+    if (!ClearCommError(s->file, &err, &comstat)) {
         error_setg(errp, "Failed ClearCommError");
         goto fail;
     }
@@ -143,7 +143,7 @@ int win_chr_pipe_poll(void *opaque)
     WinChardev *s = WIN_CHARDEV(opaque);
     DWORD size;
 
-    PeekNamedPipe(s->hcom, NULL, 0, NULL, &size, NULL);
+    PeekNamedPipe(s->file, NULL, 0, NULL, &size, NULL);
     if (size > 0) {
         win_chr_read(chr, size);
         return 1;
@@ -162,14 +162,14 @@ static int win_chr_write(Chardev *chr, const uint8_t *buf, int len1)
     s->osend.hEvent = s->hsend;
     while (len > 0) {
         if (s->hsend) {
-            ret = WriteFile(s->hcom, buf, len, &size, &s->osend);
+            ret = WriteFile(s->file, buf, len, &size, &s->osend);
         } else {
-            ret = WriteFile(s->hcom, buf, len, &size, NULL);
+            ret = WriteFile(s->file, buf, len, &size, NULL);
         }
         if (!ret) {
             err = GetLastError();
             if (err == ERROR_IO_PENDING) {
-                ret = GetOverlappedResult(s->hcom, &s->osend, &size, TRUE);
+                ret = GetOverlappedResult(s->file, &s->osend, &size, TRUE);
                 if (ret) {
                     buf += size;
                     len -= size;
@@ -202,8 +202,8 @@ static void char_win_finalize(Object *obj)
     if (s->hrecv) {
         CloseHandle(s->hrecv);
     }
-    if (s->hcom) {
-        CloseHandle(s->hcom);
+    if (s->file) {
+        CloseHandle(s->file);
     }
     if (s->fpipe) {
         qemu_del_polling_cb(win_chr_pipe_poll, chr);
@@ -219,7 +219,7 @@ void qemu_chr_open_win_file(Chardev *chr, HANDLE fd_out)
     WinChardev *s = WIN_CHARDEV(chr);
 
     s->skip_free = true;
-    s->hcom = fd_out;
+    s->file = fd_out;
 }
 
 static void char_win_class_init(ObjectClass *oc, void *data)
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 05/14] char-win: close file handle except with console
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
                   ` (3 preceding siblings ...)
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 04/14] char-win: rename hcom->file Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 06/14] Remove/replace sysemu/char.h inclusion Marc-André Lureau
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

Only the console handle shouldn't be closed, however, the "file" handle
should.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 chardev/char-win.h     |  5 ++---
 chardev/char-console.c |  2 +-
 chardev/char-file.c    |  2 +-
 chardev/char-win.c     | 12 ++++--------
 4 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/chardev/char-win.h b/chardev/char-win.h
index 888be2b3ca..4994425e9e 100644
--- a/chardev/char-win.h
+++ b/chardev/char-win.h
@@ -29,14 +29,13 @@
 typedef struct {
     Chardev parent;
 
+    bool keep_open; /* console do not close file */
     HANDLE file, hrecv, hsend;
     OVERLAPPED orecv;
     BOOL fpipe;
 
     /* Protected by the Chardev chr_write_lock.  */
     OVERLAPPED osend;
-    /* FIXME: file/console do not finalize */
-    bool skip_free;
 } WinChardev;
 
 #define NSENDBUF 2048
@@ -45,7 +44,7 @@ typedef struct {
 #define TYPE_CHARDEV_WIN "chardev-win"
 #define WIN_CHARDEV(obj) OBJECT_CHECK(WinChardev, (obj), TYPE_CHARDEV_WIN)
 
-void qemu_chr_open_win_file(Chardev *chr, HANDLE fd_out);
+void win_chr_set_file(Chardev *chr, HANDLE file, bool keep_open);
 int win_chr_serial_init(Chardev *chr, const char *filename, Error **errp);
 int win_chr_pipe_poll(void *opaque);
 
diff --git a/chardev/char-console.c b/chardev/char-console.c
index c824937fe6..8d972c1506 100644
--- a/chardev/char-console.c
+++ b/chardev/char-console.c
@@ -29,7 +29,7 @@ static void qemu_chr_open_win_con(Chardev *chr,
                                   bool *be_opened,
                                   Error **errp)
 {
-    qemu_chr_open_win_file(chr, GetStdHandle(STD_OUTPUT_HANDLE));
+    win_chr_set_file(chr, GetStdHandle(STD_OUTPUT_HANDLE), true);
 }
 
 static void char_console_class_init(ObjectClass *oc, void *data)
diff --git a/chardev/char-file.c b/chardev/char-file.c
index 8bae25350d..aed4ae1569 100644
--- a/chardev/char-file.c
+++ b/chardev/char-file.c
@@ -65,7 +65,7 @@ static void qmp_chardev_open_file(Chardev *chr,
         return;
     }
 
-    qemu_chr_open_win_file(chr, out);
+    win_chr_set_file(chr, out, false);
 #else
     int flags, in = -1, out;
 
diff --git a/chardev/char-win.c b/chardev/char-win.c
index a7e3296909..ec9a731be9 100644
--- a/chardev/char-win.c
+++ b/chardev/char-win.c
@@ -192,17 +192,13 @@ static void char_win_finalize(Object *obj)
     Chardev *chr = CHARDEV(obj);
     WinChardev *s = WIN_CHARDEV(chr);
 
-    if (s->skip_free) {
-        return;
-    }
-
     if (s->hsend) {
         CloseHandle(s->hsend);
     }
     if (s->hrecv) {
         CloseHandle(s->hrecv);
     }
-    if (s->file) {
+    if (!s->keep_open && s->file) {
         CloseHandle(s->file);
     }
     if (s->fpipe) {
@@ -214,12 +210,12 @@ static void char_win_finalize(Object *obj)
     qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
 }
 
-void qemu_chr_open_win_file(Chardev *chr, HANDLE fd_out)
+void win_chr_set_file(Chardev *chr, HANDLE file, bool keep_open)
 {
     WinChardev *s = WIN_CHARDEV(chr);
 
-    s->skip_free = true;
-    s->file = fd_out;
+    s->keep_open = keep_open;
+    s->file = file;
 }
 
 static void char_win_class_init(ObjectClass *oc, void *data)
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 06/14] Remove/replace sysemu/char.h inclusion
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
                   ` (4 preceding siblings ...)
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 05/14] char-win: close file handle except with console Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29 20:57   ` Philippe Mathieu-Daudé
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 07/14] chardev: move headers to include/chardev Marc-André Lureau
                   ` (8 subsequent siblings)
  14 siblings, 1 reply; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

Those are apparently unnecessary includes.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 hw/arm/bcm2835_peripherals.c | 1 -
 hw/char/imx_serial.c         | 1 -
 hw/display/xenfb.c           | 1 -
 hw/i386/xen/xen-hvm.c        | 1 -
 hw/mips/mips_fulong2e.c      | 1 -
 hw/mips/mips_malta.c         | 1 -
 hw/net/xgmac.c               | 1 -
 hw/ppc/spapr_events.c        | 1 -
 hw/ppc/spapr_rtas.c          | 1 -
 hw/sparc/leon3.c             | 1 -
 hw/usb/ccid-card-emulated.c  | 2 +-
 hw/xen/xen_backend.c         | 1 -
 util/event_notifier-posix.c  | 1 -
 13 files changed, 1 insertion(+), 13 deletions(-)

diff --git a/hw/arm/bcm2835_peripherals.c b/hw/arm/bcm2835_peripherals.c
index 369ef1e3bd..502f04c02a 100644
--- a/hw/arm/bcm2835_peripherals.c
+++ b/hw/arm/bcm2835_peripherals.c
@@ -13,7 +13,6 @@
 #include "hw/arm/bcm2835_peripherals.h"
 #include "hw/misc/bcm2835_mbox_defs.h"
 #include "hw/arm/raspi_platform.h"
-#include "sysemu/char.h"
 #include "sysemu/sysemu.h"
 
 /* Peripheral base address on the VC (GPU) system bus */
diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c
index 52e67f8dc9..af250305be 100644
--- a/hw/char/imx_serial.c
+++ b/hw/char/imx_serial.c
@@ -21,7 +21,6 @@
 #include "qemu/osdep.h"
 #include "hw/char/imx_serial.h"
 #include "sysemu/sysemu.h"
-#include "sysemu/char.h"
 #include "qemu/log.h"
 
 #ifndef DEBUG_IMX_UART
diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c
index 7a8727aa21..e76c0d805c 100644
--- a/hw/display/xenfb.c
+++ b/hw/display/xenfb.c
@@ -28,7 +28,6 @@
 
 #include "hw/hw.h"
 #include "ui/console.h"
-#include "sysemu/char.h"
 #include "hw/xen/xen_backend.h"
 
 #include <xen/event_channel.h>
diff --git a/hw/i386/xen/xen-hvm.c b/hw/i386/xen/xen-hvm.c
index b1c05ffb86..321cf36b67 100644
--- a/hw/i386/xen/xen-hvm.c
+++ b/hw/i386/xen/xen-hvm.c
@@ -18,7 +18,6 @@
 #include "hw/xen/xen_backend.h"
 #include "qmp-commands.h"
 
-#include "sysemu/char.h"
 #include "qemu/error-report.h"
 #include "qemu/range.h"
 #include "sysemu/xen-mapcache.h"
diff --git a/hw/mips/mips_fulong2e.c b/hw/mips/mips_fulong2e.c
index e636c3abaa..dbe2805acb 100644
--- a/hw/mips/mips_fulong2e.c
+++ b/hw/mips/mips_fulong2e.c
@@ -32,7 +32,6 @@
 #include "hw/mips/mips.h"
 #include "hw/mips/cpudevs.h"
 #include "hw/pci/pci.h"
-#include "sysemu/char.h"
 #include "sysemu/sysemu.h"
 #include "audio/audio.h"
 #include "qemu/log.h"
diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c
index 5dd177e961..6fcdd9c6c1 100644
--- a/hw/mips/mips_malta.c
+++ b/hw/mips/mips_malta.c
@@ -37,7 +37,6 @@
 #include "hw/mips/mips.h"
 #include "hw/mips/cpudevs.h"
 #include "hw/pci/pci.h"
-#include "sysemu/char.h"
 #include "sysemu/sysemu.h"
 #include "sysemu/arch_init.h"
 #include "qemu/log.h"
diff --git a/hw/net/xgmac.c b/hw/net/xgmac.c
index 46b1aa17fa..0843bf185c 100644
--- a/hw/net/xgmac.c
+++ b/hw/net/xgmac.c
@@ -26,7 +26,6 @@
 
 #include "qemu/osdep.h"
 #include "hw/sysbus.h"
-#include "sysemu/char.h"
 #include "qemu/log.h"
 #include "net/net.h"
 #include "net/checksum.h"
diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c
index f0b28d8112..8a5f1d321a 100644
--- a/hw/ppc/spapr_events.c
+++ b/hw/ppc/spapr_events.c
@@ -28,7 +28,6 @@
 #include "qapi/error.h"
 #include "cpu.h"
 #include "sysemu/sysemu.h"
-#include "sysemu/char.h"
 #include "hw/qdev.h"
 #include "sysemu/device_tree.h"
 
diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
index 619f32c054..dd1633a104 100644
--- a/hw/ppc/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -29,7 +29,6 @@
 #include "qemu/log.h"
 #include "qemu/error-report.h"
 #include "sysemu/sysemu.h"
-#include "sysemu/char.h"
 #include "hw/qdev.h"
 #include "sysemu/device_tree.h"
 #include "sysemu/cpus.h"
diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c
index 6e16478413..f415997649 100644
--- a/hw/sparc/leon3.c
+++ b/hw/sparc/leon3.c
@@ -28,7 +28,6 @@
 #include "hw/hw.h"
 #include "qemu/timer.h"
 #include "hw/ptimer.h"
-#include "sysemu/char.h"
 #include "sysemu/sysemu.h"
 #include "sysemu/qtest.h"
 #include "hw/boards.h"
diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c
index 99627860a3..e646eb243b 100644
--- a/hw/usb/ccid-card-emulated.c
+++ b/hw/usb/ccid-card-emulated.c
@@ -33,7 +33,7 @@
 #include <vcard_emul.h>
 
 #include "qemu/thread.h"
-#include "sysemu/char.h"
+#include "qemu/main-loop.h"
 #include "ccid.h"
 
 #define DPRINTF(card, lvl, fmt, ...) \
diff --git a/hw/xen/xen_backend.c b/hw/xen/xen_backend.c
index 3570f37e56..c46cbb0759 100644
--- a/hw/xen/xen_backend.c
+++ b/hw/xen/xen_backend.c
@@ -28,7 +28,6 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "hw/boards.h"
-#include "sysemu/char.h"
 #include "qemu/log.h"
 #include "qapi/error.h"
 #include "hw/xen/xen_backend.h"
diff --git a/util/event_notifier-posix.c b/util/event_notifier-posix.c
index acdbe3b483..73c4046b58 100644
--- a/util/event_notifier-posix.c
+++ b/util/event_notifier-posix.c
@@ -14,7 +14,6 @@
 #include "qemu-common.h"
 #include "qemu/cutils.h"
 #include "qemu/event_notifier.h"
-#include "sysemu/char.h"
 #include "qemu/main-loop.h"
 
 #ifdef CONFIG_EVENTFD
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 07/14] chardev: move headers to include/chardev
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
                   ` (5 preceding siblings ...)
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 06/14] Remove/replace sysemu/char.h inclusion Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29 21:02   ` Philippe Mathieu-Daudé
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 08/14] chardev: serial & parallel declaration to own headers Marc-André Lureau
                   ` (7 subsequent siblings)
  14 siblings, 1 reply; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

So they are all in one place. The following patch will move serial &
parallel declarations to the respective headers.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 {chardev => include/chardev}/char-fd.h        |  2 +-
 {chardev => include/chardev}/char-io.h        |  2 +-
 {chardev => include/chardev}/char-mux.h       |  2 +-
 {chardev => include/chardev}/char-parallel.h  |  0
 {chardev => include/chardev}/char-serial.h    |  0
 {chardev => include/chardev}/char-win-stdio.h |  0
 {chardev => include/chardev}/char-win.h       |  2 +-
 include/{sysemu => chardev}/char.h            |  0
 include/hw/char/bcm2835_aux.h                 |  2 +-
 include/hw/char/cadence_uart.h                |  2 +-
 include/hw/char/digic-uart.h                  |  2 +-
 include/hw/char/imx_serial.h                  |  2 +-
 include/hw/char/serial.h                      |  4 ++--
 include/hw/char/stm32f2xx_usart.h             |  2 +-
 backends/baum.c                               |  2 +-
 backends/msmouse.c                            |  2 +-
 backends/rng-egd.c                            |  2 +-
 backends/testdev.c                            |  2 +-
 backends/wctablet.c                           |  2 +-
 chardev/char-console.c                        |  2 +-
 chardev/char-fd.c                             |  6 +++---
 chardev/char-file.c                           |  6 +++---
 chardev/char-io.c                             |  2 +-
 chardev/char-mux.c                            |  4 ++--
 chardev/char-null.c                           |  2 +-
 chardev/char-parallel.c                       |  6 +++---
 chardev/char-pipe.c                           |  6 +++---
 chardev/char-pty.c                            |  4 ++--
 chardev/char-ringbuf.c                        |  2 +-
 chardev/char-serial.c                         |  6 +++---
 chardev/char-socket.c                         |  4 ++--
 chardev/char-stdio.c                          |  8 ++++----
 chardev/char-udp.c                            |  4 ++--
 chardev/char-win-stdio.c                      |  4 ++--
 chardev/char-win.c                            |  2 +-
 chardev/char.c                                | 10 +++++-----
 gdbstub.c                                     |  2 +-
 hmp.c                                         |  2 +-
 hw/arm/fsl-imx25.c                            |  2 +-
 hw/arm/fsl-imx31.c                            |  2 +-
 hw/arm/fsl-imx6.c                             |  2 +-
 hw/arm/omap2.c                                |  2 +-
 hw/arm/pxa2xx.c                               |  2 +-
 hw/arm/strongarm.c                            |  2 +-
 hw/bt/hci-csr.c                               |  2 +-
 hw/char/cadence_uart.c                        |  2 +-
 hw/char/debugcon.c                            |  2 +-
 hw/char/digic-uart.c                          |  2 +-
 hw/char/escc.c                                |  2 +-
 hw/char/etraxfs_ser.c                         |  2 +-
 hw/char/exynos4210_uart.c                     |  2 +-
 hw/char/grlib_apbuart.c                       |  2 +-
 hw/char/ipoctal232.c                          |  2 +-
 hw/char/lm32_juart.c                          |  2 +-
 hw/char/lm32_uart.c                           |  2 +-
 hw/char/mcf_uart.c                            |  2 +-
 hw/char/milkymist-uart.c                      |  2 +-
 hw/char/omap_uart.c                           |  2 +-
 hw/char/parallel.c                            |  2 +-
 hw/char/pl011.c                               |  2 +-
 hw/char/sclpconsole-lm.c                      |  2 +-
 hw/char/sclpconsole.c                         |  2 +-
 hw/char/serial.c                              |  2 +-
 hw/char/sh_serial.c                           |  2 +-
 hw/char/spapr_vty.c                           |  2 +-
 hw/char/terminal3270.c                        |  2 +-
 hw/char/virtio-console.c                      |  2 +-
 hw/char/xen_console.c                         |  2 +-
 hw/char/xilinx_uartlite.c                     |  2 +-
 hw/core/qdev-properties-system.c              |  2 +-
 hw/core/qdev-properties.c                     |  2 +-
 hw/ipmi/ipmi_bmc_extern.c                     |  2 +-
 hw/isa/pc87312.c                              |  2 +-
 hw/mips/boston.c                              |  2 +-
 hw/misc/ivshmem.c                             |  2 +-
 hw/usb/ccid-card-passthru.c                   |  2 +-
 hw/usb/dev-serial.c                           |  2 +-
 hw/usb/redirect.c                             |  2 +-
 hw/virtio/vhost-user.c                        |  2 +-
 hw/xen/xen-common.c                           |  2 +-
 hw/xtensa/xtfpga.c                            |  2 +-
 monitor.c                                     |  2 +-
 net/colo-compare.c                            |  2 +-
 net/filter-mirror.c                           |  2 +-
 net/slirp.c                                   |  2 +-
 net/vhost-user.c                              |  2 +-
 qmp.c                                         |  2 +-
 qtest.c                                       |  2 +-
 replay/replay-char.c                          |  2 +-
 slirp/slirp.c                                 |  2 +-
 spice-qemu-char.c                             |  2 +-
 tests/postcopy-test.c                         |  2 +-
 tests/test-char.c                             |  2 +-
 tests/vhost-user-test.c                       |  2 +-
 ui/console.c                                  |  2 +-
 ui/gtk.c                                      |  2 +-
 vl.c                                          |  2 +-
 MAINTAINERS                                   |  1 +
 98 files changed, 117 insertions(+), 116 deletions(-)
 rename {chardev => include/chardev}/char-fd.h (98%)
 rename {chardev => include/chardev}/char-io.h (98%)
 rename {chardev => include/chardev}/char-mux.h (98%)
 rename {chardev => include/chardev}/char-parallel.h (100%)
 rename {chardev => include/chardev}/char-serial.h (100%)
 rename {chardev => include/chardev}/char-win-stdio.h (100%)
 rename {chardev => include/chardev}/char-win.h (98%)
 rename include/{sysemu => chardev}/char.h (100%)

diff --git a/chardev/char-fd.h b/include/chardev/char-fd.h
similarity index 98%
rename from chardev/char-fd.h
rename to include/chardev/char-fd.h
index d8327982fb..55ae5b47b0 100644
--- a/chardev/char-fd.h
+++ b/include/chardev/char-fd.h
@@ -25,7 +25,7 @@
 #define CHAR_FD_H
 
 #include "io/channel.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 typedef struct FDChardev {
     Chardev parent;
diff --git a/chardev/char-io.h b/include/chardev/char-io.h
similarity index 98%
rename from chardev/char-io.h
rename to include/chardev/char-io.h
index 55973a7671..9638da5100 100644
--- a/chardev/char-io.h
+++ b/include/chardev/char-io.h
@@ -26,7 +26,7 @@
 
 #include "qemu-common.h"
 #include "io/channel.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 /* Can only be used for read */
 GSource *io_add_watch_poll(Chardev *chr,
diff --git a/chardev/char-mux.h b/include/chardev/char-mux.h
similarity index 98%
rename from chardev/char-mux.h
rename to include/chardev/char-mux.h
index 3f41dfcfd2..45cdfc7e67 100644
--- a/chardev/char-mux.h
+++ b/include/chardev/char-mux.h
@@ -24,7 +24,7 @@
 #ifndef CHAR_MUX_H
 #define CHAR_MUX_H
 
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 extern bool muxes_realized;
 
diff --git a/chardev/char-parallel.h b/include/chardev/char-parallel.h
similarity index 100%
rename from chardev/char-parallel.h
rename to include/chardev/char-parallel.h
diff --git a/chardev/char-serial.h b/include/chardev/char-serial.h
similarity index 100%
rename from chardev/char-serial.h
rename to include/chardev/char-serial.h
diff --git a/chardev/char-win-stdio.h b/include/chardev/char-win-stdio.h
similarity index 100%
rename from chardev/char-win-stdio.h
rename to include/chardev/char-win-stdio.h
diff --git a/chardev/char-win.h b/include/chardev/char-win.h
similarity index 98%
rename from chardev/char-win.h
rename to include/chardev/char-win.h
index 4994425e9e..fa59e9e423 100644
--- a/chardev/char-win.h
+++ b/include/chardev/char-win.h
@@ -24,7 +24,7 @@
 #ifndef CHAR_WIN_H
 #define CHAR_WIN_H
 
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 typedef struct {
     Chardev parent;
diff --git a/include/sysemu/char.h b/include/chardev/char.h
similarity index 100%
rename from include/sysemu/char.h
rename to include/chardev/char.h
diff --git a/include/hw/char/bcm2835_aux.h b/include/hw/char/bcm2835_aux.h
index 6865f154bc..2a051c5646 100644
--- a/include/hw/char/bcm2835_aux.h
+++ b/include/hw/char/bcm2835_aux.h
@@ -9,7 +9,7 @@
 #define BCM2835_AUX_H
 
 #include "hw/sysbus.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #define TYPE_BCM2835_AUX "bcm2835-aux"
 #define BCM2835_AUX(obj) OBJECT_CHECK(BCM2835AuxState, (obj), TYPE_BCM2835_AUX)
diff --git a/include/hw/char/cadence_uart.h b/include/hw/char/cadence_uart.h
index c836db4b74..eed7d8d358 100644
--- a/include/hw/char/cadence_uart.h
+++ b/include/hw/char/cadence_uart.h
@@ -19,7 +19,7 @@
 #ifndef CADENCE_UART_H
 
 #include "hw/sysbus.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/timer.h"
 
 #define CADENCE_UART_RX_FIFO_SIZE           16
diff --git a/include/hw/char/digic-uart.h b/include/hw/char/digic-uart.h
index 340c8e1111..370b48a6c5 100644
--- a/include/hw/char/digic-uart.h
+++ b/include/hw/char/digic-uart.h
@@ -19,7 +19,7 @@
 #define HW_CHAR_DIGIC_UART_H
 
 #include "hw/sysbus.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #define TYPE_DIGIC_UART "digic-uart"
 #define DIGIC_UART(obj) \
diff --git a/include/hw/char/imx_serial.h b/include/hw/char/imx_serial.h
index 4cc3fbc395..05500f5346 100644
--- a/include/hw/char/imx_serial.h
+++ b/include/hw/char/imx_serial.h
@@ -19,7 +19,7 @@
 #define IMX_SERIAL_H
 
 #include "hw/sysbus.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #define TYPE_IMX_SERIAL "imx.serial"
 #define IMX_SERIAL(obj) OBJECT_CHECK(IMXSerialState, (obj), TYPE_IMX_SERIAL)
diff --git a/include/hw/char/serial.h b/include/hw/char/serial.h
index daebb076c2..01dcd2a8d2 100644
--- a/include/hw/char/serial.h
+++ b/include/hw/char/serial.h
@@ -28,10 +28,10 @@
 
 #include "hw/hw.h"
 #include "sysemu/sysemu.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "exec/memory.h"
 #include "qemu/fifo8.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #define UART_FIFO_LENGTH    16      /* 16550A Fifo Length */
 
diff --git a/include/hw/char/stm32f2xx_usart.h b/include/hw/char/stm32f2xx_usart.h
index 3267523270..4259dbeb1e 100644
--- a/include/hw/char/stm32f2xx_usart.h
+++ b/include/hw/char/stm32f2xx_usart.h
@@ -26,7 +26,7 @@
 #define HW_STM32F2XX_USART_H
 
 #include "hw/sysbus.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "hw/hw.h"
 
 #define USART_SR   0x00
diff --git a/backends/baum.c b/backends/baum.c
index 2eddcae119..302dd9666c 100644
--- a/backends/baum.c
+++ b/backends/baum.c
@@ -24,7 +24,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "qemu-common.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/timer.h"
 #include "hw/usb.h"
 #include "ui/console.h"
diff --git a/backends/msmouse.c b/backends/msmouse.c
index d2c3162f1e..0ffd137ce8 100644
--- a/backends/msmouse.c
+++ b/backends/msmouse.c
@@ -23,7 +23,7 @@
  */
 #include "qemu/osdep.h"
 #include "qemu-common.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "ui/console.h"
 #include "ui/input.h"
 
diff --git a/backends/rng-egd.c b/backends/rng-egd.c
index 380b19a0a1..5448f6e5f5 100644
--- a/backends/rng-egd.c
+++ b/backends/rng-egd.c
@@ -12,7 +12,7 @@
 
 #include "qemu/osdep.h"
 #include "sysemu/rng.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qapi/error.h"
 #include "qapi/qmp/qerror.h"
 
diff --git a/backends/testdev.c b/backends/testdev.c
index 7df9248a13..031e9a23e8 100644
--- a/backends/testdev.c
+++ b/backends/testdev.c
@@ -25,7 +25,7 @@
  */
 #include "qemu/osdep.h"
 #include "qemu-common.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #define BUF_SIZE 32
 
diff --git a/backends/wctablet.c b/backends/wctablet.c
index a4d3ae098a..07a4cde956 100644
--- a/backends/wctablet.c
+++ b/backends/wctablet.c
@@ -32,7 +32,7 @@
 
 #include "qemu/osdep.h"
 #include "qemu-common.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "ui/console.h"
 #include "ui/input.h"
 #include "trace.h"
diff --git a/chardev/char-console.c b/chardev/char-console.c
index 8d972c1506..535ed65136 100644
--- a/chardev/char-console.c
+++ b/chardev/char-console.c
@@ -22,7 +22,7 @@
  * THE SOFTWARE.
  */
 #include "qemu/osdep.h"
-#include "char-win.h"
+#include "chardev/char-win.h"
 
 static void qemu_chr_open_win_con(Chardev *chr,
                                   ChardevBackend *backend,
diff --git a/chardev/char-fd.c b/chardev/char-fd.c
index 0b182c552c..1584a3de20 100644
--- a/chardev/char-fd.c
+++ b/chardev/char-fd.c
@@ -25,11 +25,11 @@
 #include "qemu/sockets.h"
 #include "qapi/error.h"
 #include "qemu-common.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "io/channel-file.h"
 
-#include "char-fd.h"
-#include "char-io.h"
+#include "chardev/char-fd.h"
+#include "chardev/char-io.h"
 
 /* Called with chr_write_lock held.  */
 static int fd_chr_write(Chardev *chr, const uint8_t *buf, int len)
diff --git a/chardev/char-file.c b/chardev/char-file.c
index aed4ae1569..a57b88aaf2 100644
--- a/chardev/char-file.c
+++ b/chardev/char-file.c
@@ -24,12 +24,12 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "qemu-common.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #ifdef _WIN32
-#include "char-win.h"
+#include "chardev/char-win.h"
 #else
-#include "char-fd.h"
+#include "chardev/char-fd.h"
 #endif
 
 static void qmp_chardev_open_file(Chardev *chr,
diff --git a/chardev/char-io.c b/chardev/char-io.c
index b5708eef45..f81052481a 100644
--- a/chardev/char-io.c
+++ b/chardev/char-io.c
@@ -22,7 +22,7 @@
  * THE SOFTWARE.
  */
 #include "qemu/osdep.h"
-#include "char-io.h"
+#include "chardev/char-io.h"
 
 typedef struct IOWatchPoll {
     GSource parent;
diff --git a/chardev/char-mux.c b/chardev/char-mux.c
index 37d42c65c6..106c682e7f 100644
--- a/chardev/char-mux.c
+++ b/chardev/char-mux.c
@@ -24,9 +24,9 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "qemu-common.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/block-backend.h"
-#include "char-mux.h"
+#include "chardev/char-mux.h"
 
 /* MUX driver for serial I/O splitting */
 
diff --git a/chardev/char-null.c b/chardev/char-null.c
index dc0d68ab2d..90bafe76f4 100644
--- a/chardev/char-null.c
+++ b/chardev/char-null.c
@@ -22,7 +22,7 @@
  * THE SOFTWARE.
  */
 #include "qemu/osdep.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 static void null_chr_open(Chardev *chr,
                           ChardevBackend *backend,
diff --git a/chardev/char-parallel.c b/chardev/char-parallel.c
index 3fa22ce29d..bce89f8c36 100644
--- a/chardev/char-parallel.c
+++ b/chardev/char-parallel.c
@@ -22,7 +22,7 @@
  * THE SOFTWARE.
  */
 #include "qemu/osdep.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qapi/error.h"
 #include <sys/ioctl.h>
 
@@ -41,8 +41,8 @@
 #endif
 #endif
 
-#include "char-fd.h"
-#include "char-parallel.h"
+#include "chardev/char-fd.h"
+#include "chardev/char-parallel.h"
 
 #if defined(__linux__)
 
diff --git a/chardev/char-pipe.c b/chardev/char-pipe.c
index aae950a22b..3a95e4c1b2 100644
--- a/chardev/char-pipe.c
+++ b/chardev/char-pipe.c
@@ -23,12 +23,12 @@
  */
 #include "qemu/osdep.h"
 #include "qapi/error.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #ifdef _WIN32
-#include "char-win.h"
+#include "chardev/char-win.h"
 #else
-#include "char-fd.h"
+#include "chardev/char-fd.h"
 #endif
 
 #ifdef _WIN32
diff --git a/chardev/char-pty.c b/chardev/char-pty.c
index 35a175d796..e5d20a0e6a 100644
--- a/chardev/char-pty.c
+++ b/chardev/char-pty.c
@@ -24,12 +24,12 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "qemu-common.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "io/channel-file.h"
 #include "qemu/sockets.h"
 #include "qemu/error-report.h"
 
-#include "char-io.h"
+#include "chardev/char-io.h"
 
 #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__)      \
     || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) \
diff --git a/chardev/char-ringbuf.c b/chardev/char-ringbuf.c
index d130069e88..df52b04d22 100644
--- a/chardev/char-ringbuf.c
+++ b/chardev/char-ringbuf.c
@@ -22,7 +22,7 @@
  * THE SOFTWARE.
  */
 #include "qemu/osdep.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qmp-commands.h"
 #include "qemu/base64.h"
 
diff --git a/chardev/char-serial.c b/chardev/char-serial.c
index fef3a91c77..2f8f83821d 100644
--- a/chardev/char-serial.c
+++ b/chardev/char-serial.c
@@ -27,14 +27,14 @@
 #include "qapi/error.h"
 
 #ifdef _WIN32
-#include "char-win.h"
+#include "chardev/char-win.h"
 #else
 #include <sys/ioctl.h>
 #include <termios.h>
-#include "char-fd.h"
+#include "chardev/char-fd.h"
 #endif
 
-#include "char-serial.h"
+#include "chardev/char-serial.h"
 
 #ifdef _WIN32
 
diff --git a/chardev/char-socket.c b/chardev/char-socket.c
index e2fb7f7cd5..ccc499cfa1 100644
--- a/chardev/char-socket.c
+++ b/chardev/char-socket.c
@@ -22,14 +22,14 @@
  * THE SOFTWARE.
  */
 #include "qemu/osdep.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "io/channel-socket.h"
 #include "io/channel-tls.h"
 #include "qemu/error-report.h"
 #include "qapi/error.h"
 #include "qapi/clone-visitor.h"
 
-#include "char-io.h"
+#include "chardev/char-io.h"
 
 /***********************************************************/
 /* TCP Net console */
diff --git a/chardev/char-stdio.c b/chardev/char-stdio.c
index be4a65962c..6f5d798d7b 100644
--- a/chardev/char-stdio.c
+++ b/chardev/char-stdio.c
@@ -25,14 +25,14 @@
 #include "qemu/sockets.h"
 #include "qapi/error.h"
 #include "qemu-common.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #ifdef _WIN32
-#include "char-win.h"
-#include "char-win-stdio.h"
+#include "chardev/char-win.h"
+#include "chardev/char-win-stdio.h"
 #else
 #include <termios.h>
-#include "char-fd.h"
+#include "chardev/char-fd.h"
 #endif
 
 #ifndef _WIN32
diff --git a/chardev/char-udp.c b/chardev/char-udp.c
index 607647642a..4ee11d3ebf 100644
--- a/chardev/char-udp.c
+++ b/chardev/char-udp.c
@@ -22,11 +22,11 @@
  * THE SOFTWARE.
  */
 #include "qemu/osdep.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "io/channel-socket.h"
 #include "qapi/error.h"
 
-#include "char-io.h"
+#include "chardev/char-io.h"
 
 /***********************************************************/
 /* UDP Net console */
diff --git a/chardev/char-win-stdio.c b/chardev/char-win-stdio.c
index eb44afc17a..efcf7827eb 100644
--- a/chardev/char-win-stdio.c
+++ b/chardev/char-win-stdio.c
@@ -23,8 +23,8 @@
  */
 #include "qemu/osdep.h"
 #include "qapi/error.h"
-#include "char-win.h"
-#include "char-win-stdio.h"
+#include "chardev/char-win.h"
+#include "chardev/char-win-stdio.h"
 
 typedef struct {
     Chardev parent;
diff --git a/chardev/char-win.c b/chardev/char-win.c
index ec9a731be9..05518e0958 100644
--- a/chardev/char-win.c
+++ b/chardev/char-win.c
@@ -24,7 +24,7 @@
 #include "qemu/osdep.h"
 #include "qemu-common.h"
 #include "qapi/error.h"
-#include "char-win.h"
+#include "chardev/char-win.h"
 
 static void win_chr_read(Chardev *chr, DWORD len)
 {
diff --git a/chardev/char.c b/chardev/char.c
index 4e24dc39af..a747e0279a 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -28,16 +28,16 @@
 #include "sysemu/sysemu.h"
 #include "qemu/config-file.h"
 #include "qemu/error-report.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qmp-commands.h"
 #include "qapi-visit.h"
 #include "sysemu/replay.h"
 #include "qemu/help_option.h"
 
-#include "char-mux.h"
-#include "char-io.h"
-#include "char-parallel.h"
-#include "char-serial.h"
+#include "chardev/char-mux.h"
+#include "chardev/char-io.h"
+#include "chardev/char-parallel.h"
+#include "chardev/char-serial.h"
 
 /***********************************************************/
 /* character device */
diff --git a/gdbstub.c b/gdbstub.c
index 86eed4f97c..6515c635dc 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -25,7 +25,7 @@
 #include "qemu.h"
 #else
 #include "monitor/monitor.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/sysemu.h"
 #include "exec/gdbstub.h"
 #endif
diff --git a/hmp.c b/hmp.c
index 20f5daba5e..97d4822e52 100644
--- a/hmp.c
+++ b/hmp.c
@@ -17,7 +17,7 @@
 #include "hmp.h"
 #include "net/net.h"
 #include "net/eth.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/block-backend.h"
 #include "sysemu/sysemu.h"
 #include "qemu/config-file.h"
diff --git a/hw/arm/fsl-imx25.c b/hw/arm/fsl-imx25.c
index 9056f27bf8..40666b68a3 100644
--- a/hw/arm/fsl-imx25.c
+++ b/hw/arm/fsl-imx25.c
@@ -30,7 +30,7 @@
 #include "sysemu/sysemu.h"
 #include "exec/address-spaces.h"
 #include "hw/boards.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 static void fsl_imx25_init(Object *obj)
 {
diff --git a/hw/arm/fsl-imx31.c b/hw/arm/fsl-imx31.c
index d7e2d832b2..c30130667e 100644
--- a/hw/arm/fsl-imx31.c
+++ b/hw/arm/fsl-imx31.c
@@ -27,7 +27,7 @@
 #include "sysemu/sysemu.h"
 #include "exec/address-spaces.h"
 #include "hw/boards.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 static void fsl_imx31_init(Object *obj)
 {
diff --git a/hw/arm/fsl-imx6.c b/hw/arm/fsl-imx6.c
index 6969e734ad..27773c9c47 100644
--- a/hw/arm/fsl-imx6.c
+++ b/hw/arm/fsl-imx6.c
@@ -24,7 +24,7 @@
 #include "qemu-common.h"
 #include "hw/arm/fsl-imx6.h"
 #include "sysemu/sysemu.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/error-report.h"
 
 #define NAME_SIZE 20
diff --git a/hw/arm/omap2.c b/hw/arm/omap2.c
index cf1b4ba58f..566749a9eb 100644
--- a/hw/arm/omap2.c
+++ b/hw/arm/omap2.c
@@ -30,7 +30,7 @@
 #include "hw/arm/omap.h"
 #include "sysemu/sysemu.h"
 #include "qemu/timer.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "hw/block/flash.h"
 #include "hw/arm/soc_dma.h"
 #include "hw/sysbus.h"
diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
index eea551dc16..0d43cc707c 100644
--- a/hw/arm/pxa2xx.c
+++ b/hw/arm/pxa2xx.c
@@ -17,7 +17,7 @@
 #include "hw/char/serial.h"
 #include "hw/i2c/i2c.h"
 #include "hw/ssi/ssi.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/block-backend.h"
 #include "sysemu/blockdev.h"
 #include "qemu/cutils.h"
diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c
index 3311cc38a4..66cad198d4 100644
--- a/hw/arm/strongarm.c
+++ b/hw/arm/strongarm.c
@@ -34,7 +34,7 @@
 #include "strongarm.h"
 #include "qemu/error-report.h"
 #include "hw/arm/arm.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/sysemu.h"
 #include "hw/ssi/ssi.h"
 #include "qemu/cutils.h"
diff --git a/hw/bt/hci-csr.c b/hw/bt/hci-csr.c
index 3c193848fc..cc2087392e 100644
--- a/hw/bt/hci-csr.c
+++ b/hw/bt/hci-csr.c
@@ -20,7 +20,7 @@
 
 #include "qemu/osdep.h"
 #include "qemu-common.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/timer.h"
 #include "qemu/bswap.h"
 #include "hw/irq.h"
diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
index 4dcee571c0..cf4c1d56ff 100644
--- a/hw/char/cadence_uart.c
+++ b/hw/char/cadence_uart.c
@@ -23,7 +23,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/sysbus.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/timer.h"
 #include "qemu/log.h"
 #include "hw/char/cadence_uart.h"
diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c
index 80dce07e7f..77d91c8558 100644
--- a/hw/char/debugcon.c
+++ b/hw/char/debugcon.c
@@ -27,7 +27,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "hw/hw.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "hw/isa/isa.h"
 #include "hw/i386/pc.h"
 
diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c
index 029f5bbf5e..4f1dec7f1d 100644
--- a/hw/char/digic-uart.c
+++ b/hw/char/digic-uart.c
@@ -29,7 +29,7 @@
 #include "qemu/osdep.h"
 #include "hw/hw.h"
 #include "hw/sysbus.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/log.h"
 
 #include "hw/char/digic-uart.h"
diff --git a/hw/char/escc.c b/hw/char/escc.c
index 9228091cec..df89d58eed 100644
--- a/hw/char/escc.c
+++ b/hw/char/escc.c
@@ -26,7 +26,7 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "hw/char/escc.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "ui/console.h"
 #include "ui/input.h"
 #include "trace.h"
diff --git a/hw/char/etraxfs_ser.c b/hw/char/etraxfs_ser.c
index 54383878e0..33e3e16397 100644
--- a/hw/char/etraxfs_ser.c
+++ b/hw/char/etraxfs_ser.c
@@ -24,7 +24,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/sysbus.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/log.h"
 
 #define D(x)
diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c
index bff706ab3a..94952fb90f 100644
--- a/hw/char/exynos4210_uart.c
+++ b/hw/char/exynos4210_uart.c
@@ -23,7 +23,7 @@
 #include "hw/sysbus.h"
 #include "qemu/error-report.h"
 #include "sysemu/sysemu.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #include "hw/arm/exynos4210.h"
 
diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c
index db686e6a6f..39d1133c61 100644
--- a/hw/char/grlib_apbuart.c
+++ b/hw/char/grlib_apbuart.c
@@ -24,7 +24,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/sysbus.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #include "trace.h"
 
diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c
index 93929c2880..b8a3c92c9e 100644
--- a/hw/char/ipoctal232.c
+++ b/hw/char/ipoctal232.c
@@ -11,7 +11,7 @@
 #include "qemu/osdep.h"
 #include "hw/ipack/ipack.h"
 #include "qemu/bitops.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 /* #define DEBUG_IPOCTAL */
 
diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c
index f8c1e0d076..6b0633e518 100644
--- a/hw/char/lm32_juart.c
+++ b/hw/char/lm32_juart.c
@@ -21,7 +21,7 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "trace.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #include "hw/char/lm32_juart.h"
 
diff --git a/hw/char/lm32_uart.c b/hw/char/lm32_uart.c
index 7f3597c4b0..a7610c28ce 100644
--- a/hw/char/lm32_uart.c
+++ b/hw/char/lm32_uart.c
@@ -26,7 +26,7 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "trace.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/error-report.h"
 
 enum {
diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c
index e69672f4e9..b639b53c83 100644
--- a/hw/char/mcf_uart.c
+++ b/hw/char/mcf_uart.c
@@ -9,7 +9,7 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "hw/m68k/mcf.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "exec/address-spaces.h"
 #include "qapi/error.h"
 
diff --git a/hw/char/milkymist-uart.c b/hw/char/milkymist-uart.c
index ae8e2f3554..5ef847c5eb 100644
--- a/hw/char/milkymist-uart.c
+++ b/hw/char/milkymist-uart.c
@@ -25,7 +25,7 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "trace.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/error-report.h"
 
 enum {
diff --git a/hw/char/omap_uart.c b/hw/char/omap_uart.c
index 31ebb1592c..6fd1b9cf6b 100644
--- a/hw/char/omap_uart.c
+++ b/hw/char/omap_uart.c
@@ -18,7 +18,7 @@
  * with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 #include "qemu/osdep.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "hw/hw.h"
 #include "hw/arm/omap.h"
 #include "hw/char/serial.h"
diff --git a/hw/char/parallel.c b/hw/char/parallel.c
index c71a4a0f4f..c926df0bee 100644
--- a/hw/char/parallel.c
+++ b/hw/char/parallel.c
@@ -25,7 +25,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "hw/hw.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "hw/isa/isa.h"
 #include "hw/i386/pc.h"
 #include "sysemu/sysemu.h"
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
index 24ea9738b6..1757035bb3 100644
--- a/hw/char/pl011.c
+++ b/hw/char/pl011.c
@@ -9,7 +9,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/sysbus.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/log.h"
 #include "trace.h"
 
diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c
index 07d6ebd112..755d514188 100644
--- a/hw/char/sclpconsole-lm.c
+++ b/hw/char/sclpconsole-lm.c
@@ -17,7 +17,7 @@
 #include "hw/qdev.h"
 #include "qemu/thread.h"
 #include "qemu/error-report.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #include "hw/s390x/sclp.h"
 #include "hw/s390x/event-facility.h"
diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c
index b78f240a73..0fd3cb4887 100644
--- a/hw/char/sclpconsole.c
+++ b/hw/char/sclpconsole.c
@@ -19,7 +19,7 @@
 
 #include "hw/s390x/sclp.h"
 #include "hw/s390x/event-facility.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 typedef struct ASCIIConsoleData {
     EventBufferHeader ebh;
diff --git a/hw/char/serial.c b/hw/char/serial.c
index 03d890ca24..aa336333be 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -25,7 +25,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/char/serial.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qapi/error.h"
 #include "qemu/timer.h"
 #include "exec/address-spaces.h"
diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c
index 303eb0a678..80c7696d8d 100644
--- a/hw/char/sh_serial.c
+++ b/hw/char/sh_serial.c
@@ -27,7 +27,7 @@
 #include "qemu/osdep.h"
 #include "hw/hw.h"
 #include "hw/sh4/sh.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "exec/address-spaces.h"
 #include "qapi/error.h"
 
diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c
index e30c8da57c..2317e45404 100644
--- a/hw/char/spapr_vty.c
+++ b/hw/char/spapr_vty.c
@@ -4,7 +4,7 @@
 #include "qemu-common.h"
 #include "cpu.h"
 #include "hw/qdev.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "hw/ppc/spapr.h"
 #include "hw/ppc/spapr_vio.h"
 
diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c
index b2dda01baa..c043104185 100644
--- a/hw/char/terminal3270.c
+++ b/hw/char/terminal3270.c
@@ -13,7 +13,7 @@
 
 #include "qemu/osdep.h"
 #include "qapi/error.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "hw/s390x/3270-ccw.h"
 
 /* Enough spaces for different window sizes. */
diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c
index 798d9b69fd..8418db6a07 100644
--- a/hw/char/virtio-console.c
+++ b/hw/char/virtio-console.c
@@ -11,7 +11,7 @@
  */
 
 #include "qemu/osdep.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/error-report.h"
 #include "trace.h"
 #include "hw/virtio/virtio-serial.h"
diff --git a/hw/char/xen_console.c b/hw/char/xen_console.c
index c01f41090e..1cdbe59f8a 100644
--- a/hw/char/xen_console.c
+++ b/hw/char/xen_console.c
@@ -25,7 +25,7 @@
 
 #include "qapi/error.h"
 #include "hw/hw.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "hw/xen/xen_backend.h"
 #include "qapi/error.h"
 
diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c
index 37d313b429..bcebdae3da 100644
--- a/hw/char/xilinx_uartlite.c
+++ b/hw/char/xilinx_uartlite.c
@@ -24,7 +24,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/sysbus.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #define DUART(x)
 
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 79c2014135..4da0c6a24e 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -20,7 +20,7 @@
 #include "hw/block/block.h"
 #include "net/hub.h"
 #include "qapi/visitor.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/iothread.h"
 
 static void get_pointer(Object *obj, Visitor *v, Property *prop,
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index fa3617db2d..9f1a497322 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -9,7 +9,7 @@
 #include "hw/block/block.h"
 #include "net/hub.h"
 #include "qapi/visitor.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 void qdev_prop_set_after_realize(DeviceState *dev, const char *name,
                                   Error **errp)
diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c
index e8e3d250b6..35285383fd 100644
--- a/hw/ipmi/ipmi_bmc_extern.c
+++ b/hw/ipmi/ipmi_bmc_extern.c
@@ -30,7 +30,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "qemu/timer.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/sysemu.h"
 #include "hw/ipmi/ipmi.h"
 
diff --git a/hw/isa/pc87312.c b/hw/isa/pc87312.c
index c707d24db4..5ce9f0a062 100644
--- a/hw/isa/pc87312.c
+++ b/hw/isa/pc87312.c
@@ -30,7 +30,7 @@
 #include "sysemu/block-backend.h"
 #include "sysemu/blockdev.h"
 #include "sysemu/sysemu.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "trace.h"
 
 
diff --git a/hw/mips/boston.c b/hw/mips/boston.c
index 83f7b82386..56d22fe49b 100644
--- a/hw/mips/boston.c
+++ b/hw/mips/boston.c
@@ -35,7 +35,7 @@
 #include "qemu/cutils.h"
 #include "qemu/error-report.h"
 #include "qemu/log.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/device_tree.h"
 #include "sysemu/sysemu.h"
 #include "sysemu/qtest.h"
diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
index 475e36a4c7..cd064dcf8c 100644
--- a/hw/misc/ivshmem.c
+++ b/hw/misc/ivshmem.c
@@ -29,7 +29,7 @@
 #include "qemu/error-report.h"
 #include "qemu/event_notifier.h"
 #include "qom/object_interfaces.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/hostmem.h"
 #include "sysemu/qtest.h"
 #include "qapi/visitor.h"
diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
index a41b0d6ec5..c2096b25ab 100644
--- a/hw/usb/ccid-card-passthru.c
+++ b/hw/usb/ccid-card-passthru.c
@@ -9,7 +9,7 @@
  */
 
 #include "qemu/osdep.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/error-report.h"
 #include "qemu/sockets.h"
 #include "ccid.h"
diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
index 83a4f0e6fb..578760e1b3 100644
--- a/hw/usb/dev-serial.c
+++ b/hw/usb/dev-serial.c
@@ -15,7 +15,7 @@
 #include "qemu/error-report.h"
 #include "hw/usb.h"
 #include "hw/usb/desc.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 //#define DEBUG_Serial
 
diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
index ad5ef783a6..c862c1adea 100644
--- a/hw/usb/redirect.c
+++ b/hw/usb/redirect.c
@@ -33,7 +33,7 @@
 #include "qapi/qmp/qerror.h"
 #include "qemu/error-report.h"
 #include "qemu/iov.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 #include <usbredirparser.h>
 #include <usbredirfilter.h>
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index b87a176770..ff4cee82e6 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -13,7 +13,7 @@
 #include "hw/virtio/vhost.h"
 #include "hw/virtio/vhost-backend.h"
 #include "hw/virtio/virtio-net.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/kvm.h"
 #include "qemu/error-report.h"
 #include "qemu/sockets.h"
diff --git a/hw/xen/xen-common.c b/hw/xen/xen-common.c
index a9055e9eba..0bed5770c9 100644
--- a/hw/xen/xen-common.c
+++ b/hw/xen/xen-common.c
@@ -11,7 +11,7 @@
 #include "qemu/osdep.h"
 #include "hw/xen/xen_backend.h"
 #include "qmp-commands.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/accel.h"
 #include "migration/migration.h"
 
diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c
index 11176e26bd..5b31cdc566 100644
--- a/hw/xtensa/xtfpga.c
+++ b/hw/xtensa/xtfpga.c
@@ -40,7 +40,7 @@
 #include "hw/sysbus.h"
 #include "hw/block/flash.h"
 #include "sysemu/block-backend.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/device_tree.h"
 #include "qemu/error-report.h"
 #include "bootparam.h"
diff --git a/monitor.c b/monitor.c
index baa73c98b7..29b71ff2bc 100644
--- a/monitor.c
+++ b/monitor.c
@@ -35,7 +35,7 @@
 #include "exec/gdbstub.h"
 #include "net/net.h"
 #include "net/slirp.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "ui/qemu-spice.h"
 #include "sysemu/numa.h"
 #include "monitor/monitor.h"
diff --git a/net/colo-compare.c b/net/colo-compare.c
index 2639c7f0a2..619335d5e8 100644
--- a/net/colo-compare.c
+++ b/net/colo-compare.c
@@ -25,7 +25,7 @@
 #include "qom/object.h"
 #include "qemu/typedefs.h"
 #include "net/queue.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/sockets.h"
 #include "qapi-visit.h"
 #include "net/colo.h"
diff --git a/net/filter-mirror.c b/net/filter-mirror.c
index 8b1b06977d..7adc2c10d2 100644
--- a/net/filter-mirror.c
+++ b/net/filter-mirror.c
@@ -20,7 +20,7 @@
 #include "qemu/main-loop.h"
 #include "qemu/error-report.h"
 #include "trace.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/iov.h"
 #include "qemu/sockets.h"
 
diff --git a/net/slirp.c b/net/slirp.c
index c705a60b62..af3e8b22ac 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -37,7 +37,7 @@
 #include "qemu/sockets.h"
 #include "slirp/libslirp.h"
 #include "slirp/ip6.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/sysemu.h"
 #include "qemu/cutils.h"
 #include "qapi/error.h"
diff --git a/net/vhost-user.c b/net/vhost-user.c
index 00a0c1cbc5..77d2ce22a6 100644
--- a/net/vhost-user.c
+++ b/net/vhost-user.c
@@ -12,7 +12,7 @@
 #include "clients.h"
 #include "net/vhost_net.h"
 #include "net/vhost-user.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/config-file.h"
 #include "qemu/error-report.h"
 #include "qmp-commands.h"
diff --git a/qmp.c b/qmp.c
index f656940769..59448dcd16 100644
--- a/qmp.c
+++ b/qmp.c
@@ -21,7 +21,7 @@
 #include "qemu/config-file.h"
 #include "qemu/uuid.h"
 #include "qmp-commands.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "ui/qemu-spice.h"
 #include "ui/vnc.h"
 #include "sysemu/kvm.h"
diff --git a/qtest.c b/qtest.c
index 5aa6636ca8..dbf70a7018 100644
--- a/qtest.c
+++ b/qtest.c
@@ -17,7 +17,7 @@
 #include "cpu.h"
 #include "sysemu/qtest.h"
 #include "hw/qdev.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "exec/ioport.h"
 #include "exec/memory.h"
 #include "hw/irq.h"
diff --git a/replay/replay-char.c b/replay/replay-char.c
index aa65955942..cbf7c04a9f 100755
--- a/replay/replay-char.c
+++ b/replay/replay-char.c
@@ -14,7 +14,7 @@
 #include "sysemu/replay.h"
 #include "replay-internal.h"
 #include "sysemu/sysemu.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 
 /* Char drivers that generate qemu_chr_be_write events
    that should be saved into the log. */
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 2f2ec2c1b3..3b92cb54ce 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -25,7 +25,7 @@
 #include "qemu-common.h"
 #include "qemu/timer.h"
 #include "qemu/error-report.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "slirp.h"
 #include "hw/hw.h"
 #include "qemu/cutils.h"
diff --git a/spice-qemu-char.c b/spice-qemu-char.c
index 4d1c76e8a4..1c6c2e3969 100644
--- a/spice-qemu-char.c
+++ b/spice-qemu-char.c
@@ -1,7 +1,7 @@
 #include "qemu/osdep.h"
 #include "trace-root.h"
 #include "ui/qemu-spice.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/error-report.h"
 #include <spice.h>
 #include <spice/protocol.h>
diff --git a/tests/postcopy-test.c b/tests/postcopy-test.c
index e86f87656a..8142f2ab90 100644
--- a/tests/postcopy-test.c
+++ b/tests/postcopy-test.c
@@ -16,7 +16,7 @@
 #include "qemu/option.h"
 #include "qemu/range.h"
 #include "qemu/sockets.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/sysemu.h"
 #include "hw/nvram/chrp_nvram.h"
 
diff --git a/tests/test-char.c b/tests/test-char.c
index 124d0c5439..9340c55058 100644
--- a/tests/test-char.c
+++ b/tests/test-char.c
@@ -4,7 +4,7 @@
 #include "qemu-common.h"
 #include "qemu/config-file.h"
 #include "qemu/sockets.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/sysemu.h"
 #include "qapi/error.h"
 #include "qom/qom-qobject.h"
diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
index 9095af267e..acc392d046 100644
--- a/tests/vhost-user-test.c
+++ b/tests/vhost-user-test.c
@@ -16,7 +16,7 @@
 #include "qemu/option.h"
 #include "qemu/range.h"
 #include "qemu/sockets.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "sysemu/sysemu.h"
 #include "libqos/libqos.h"
 #include "libqos/pci-pc.h"
diff --git a/ui/console.c b/ui/console.c
index ac66b3c910..6cf795a23d 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -27,7 +27,7 @@
 #include "hw/qdev-core.h"
 #include "qemu/timer.h"
 #include "qmp-commands.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "trace.h"
 #include "exec/memory.h"
 
diff --git a/ui/gtk.c b/ui/gtk.c
index 0213ad0efc..5bd87c265a 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -54,7 +54,7 @@
 #include "qmp-commands.h"
 #include "x_keymap.h"
 #include "keymaps.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qom/object.h"
 
 #define MAX_VCS 10
diff --git a/vl.c b/vl.c
index 3465121217..009dfa58b4 100644
--- a/vl.c
+++ b/vl.c
@@ -81,7 +81,7 @@ int main(int argc, char **argv)
 #include "sysemu/numa.h"
 #include "exec/gdbstub.h"
 #include "qemu/timer.h"
-#include "sysemu/char.h"
+#include "chardev/char.h"
 #include "qemu/bitmap.h"
 #include "qemu/log.h"
 #include "sysemu/blockdev.h"
diff --git a/MAINTAINERS b/MAINTAINERS
index ef2ec58a94..59e03436ad 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1230,6 +1230,7 @@ M: Paolo Bonzini <pbonzini@redhat.com>
 M: Marc-André Lureau <marcandre.lureau@redhat.com>
 S: Maintained
 F: chardev/
+F: include/chardev/
 F: backends/msmouse.c
 F: backends/testdev.c
 
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 08/14] chardev: serial & parallel declaration to own headers
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
                   ` (6 preceding siblings ...)
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 07/14] chardev: move headers to include/chardev Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29 21:03   ` Philippe Mathieu-Daudé
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 09/14] be-hci: use backend functions Marc-André Lureau
                   ` (6 subsequent siblings)
  14 siblings, 1 reply; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/chardev/char-parallel.h | 20 +++++++++++++++++++-
 include/chardev/char-serial.h   | 22 ++++++++++++++++++++++
 include/chardev/char.h          | 36 ------------------------------------
 backends/wctablet.c             |  2 +-
 hw/arm/strongarm.c              |  2 +-
 hw/bt/hci-csr.c                 |  2 +-
 hw/char/cadence_uart.c          |  2 +-
 hw/char/escc.c                  |  2 +-
 hw/char/exynos4210_uart.c       |  2 +-
 hw/char/parallel.c              |  2 +-
 hw/char/serial.c                |  2 +-
 hw/usb/dev-serial.c             |  2 +-
 12 files changed, 50 insertions(+), 46 deletions(-)

diff --git a/include/chardev/char-parallel.h b/include/chardev/char-parallel.h
index 26742f9d5c..3284a1b96b 100644
--- a/include/chardev/char-parallel.h
+++ b/include/chardev/char-parallel.h
@@ -24,9 +24,27 @@
 #ifndef CHAR_PARALLEL_H
 #define CHAR_PARALLEL_H
 
-#if defined(__linux__) || defined(__FreeBSD__) || \
+#include "chardev/char.h"
+
+#if defined(__linux__) || defined(__FreeBSD__) ||               \
     defined(__FreeBSD_kernel__) || defined(__DragonFly__)
 #define HAVE_CHARDEV_PARPORT 1
 #endif
 
+#define CHR_IOCTL_PP_READ_DATA        3
+#define CHR_IOCTL_PP_WRITE_DATA       4
+#define CHR_IOCTL_PP_READ_CONTROL     5
+#define CHR_IOCTL_PP_WRITE_CONTROL    6
+#define CHR_IOCTL_PP_READ_STATUS      7
+#define CHR_IOCTL_PP_EPP_READ_ADDR    8
+#define CHR_IOCTL_PP_EPP_READ         9
+#define CHR_IOCTL_PP_EPP_WRITE_ADDR  10
+#define CHR_IOCTL_PP_EPP_WRITE       11
+#define CHR_IOCTL_PP_DATA_DIR        12
+
+struct ParallelIOArg {
+    void *buffer;
+    int count;
+};
+
 #endif /* CHAR_PARALLEL_H */
diff --git a/include/chardev/char-serial.h b/include/chardev/char-serial.h
index 64a27f63b1..cb2e59e82a 100644
--- a/include/chardev/char-serial.h
+++ b/include/chardev/char-serial.h
@@ -24,6 +24,8 @@
 #ifndef CHAR_SERIAL_H
 #define CHAR_SERIAL_H
 
+#include "chardev/char.h"
+
 #ifdef _WIN32
 #define HAVE_CHARDEV_SERIAL 1
 #elif defined(__linux__) || defined(__sun__) || defined(__FreeBSD__)    \
@@ -32,4 +34,24 @@
 #define HAVE_CHARDEV_SERIAL 1
 #endif
 
+#define CHR_IOCTL_SERIAL_SET_PARAMS   1
+typedef struct {
+    int speed;
+    int parity;
+    int data_bits;
+    int stop_bits;
+} QEMUSerialSetParams;
+
+#define CHR_IOCTL_SERIAL_SET_BREAK    2
+
+#define CHR_IOCTL_SERIAL_SET_TIOCM   13
+#define CHR_IOCTL_SERIAL_GET_TIOCM   14
+
+#define CHR_TIOCM_CTS   0x020
+#define CHR_TIOCM_CAR   0x040
+#define CHR_TIOCM_DSR   0x100
+#define CHR_TIOCM_RI    0x080
+#define CHR_TIOCM_DTR   0x002
+#define CHR_TIOCM_RTS   0x004
+
 #endif
diff --git a/include/chardev/char.h b/include/chardev/char.h
index fffc0f40d4..95273e10ae 100644
--- a/include/chardev/char.h
+++ b/include/chardev/char.h
@@ -27,42 +27,6 @@ typedef enum {
 
 #define CHR_READ_BUF_LEN 4096
 
-#define CHR_IOCTL_SERIAL_SET_PARAMS   1
-typedef struct {
-    int speed;
-    int parity;
-    int data_bits;
-    int stop_bits;
-} QEMUSerialSetParams;
-
-#define CHR_IOCTL_SERIAL_SET_BREAK    2
-
-#define CHR_IOCTL_PP_READ_DATA        3
-#define CHR_IOCTL_PP_WRITE_DATA       4
-#define CHR_IOCTL_PP_READ_CONTROL     5
-#define CHR_IOCTL_PP_WRITE_CONTROL    6
-#define CHR_IOCTL_PP_READ_STATUS      7
-#define CHR_IOCTL_PP_EPP_READ_ADDR    8
-#define CHR_IOCTL_PP_EPP_READ         9
-#define CHR_IOCTL_PP_EPP_WRITE_ADDR  10
-#define CHR_IOCTL_PP_EPP_WRITE       11
-#define CHR_IOCTL_PP_DATA_DIR        12
-
-struct ParallelIOArg {
-    void *buffer;
-    int count;
-};
-
-#define CHR_IOCTL_SERIAL_SET_TIOCM   13
-#define CHR_IOCTL_SERIAL_GET_TIOCM   14
-
-#define CHR_TIOCM_CTS	0x020
-#define CHR_TIOCM_CAR	0x040
-#define CHR_TIOCM_DSR	0x100
-#define CHR_TIOCM_RI	0x080
-#define CHR_TIOCM_DTR	0x002
-#define CHR_TIOCM_RTS	0x004
-
 typedef void IOEventHandler(void *opaque, int event);
 
 typedef enum {
diff --git a/backends/wctablet.c b/backends/wctablet.c
index 07a4cde956..6c13c2c58a 100644
--- a/backends/wctablet.c
+++ b/backends/wctablet.c
@@ -32,7 +32,7 @@
 
 #include "qemu/osdep.h"
 #include "qemu-common.h"
-#include "chardev/char.h"
+#include "chardev/char-serial.h"
 #include "ui/console.h"
 #include "ui/input.h"
 #include "trace.h"
diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c
index 66cad198d4..967caea749 100644
--- a/hw/arm/strongarm.c
+++ b/hw/arm/strongarm.c
@@ -34,7 +34,7 @@
 #include "strongarm.h"
 #include "qemu/error-report.h"
 #include "hw/arm/arm.h"
-#include "chardev/char.h"
+#include "chardev/char-serial.h"
 #include "sysemu/sysemu.h"
 #include "hw/ssi/ssi.h"
 #include "qemu/cutils.h"
diff --git a/hw/bt/hci-csr.c b/hw/bt/hci-csr.c
index cc2087392e..0f2021086d 100644
--- a/hw/bt/hci-csr.c
+++ b/hw/bt/hci-csr.c
@@ -20,7 +20,7 @@
 
 #include "qemu/osdep.h"
 #include "qemu-common.h"
-#include "chardev/char.h"
+#include "chardev/char-serial.h"
 #include "qemu/timer.h"
 #include "qemu/bswap.h"
 #include "hw/irq.h"
diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
index cf4c1d56ff..4bfc185376 100644
--- a/hw/char/cadence_uart.c
+++ b/hw/char/cadence_uart.c
@@ -23,7 +23,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/sysbus.h"
-#include "chardev/char.h"
+#include "chardev/char-serial.h"
 #include "qemu/timer.h"
 #include "qemu/log.h"
 #include "hw/char/cadence_uart.h"
diff --git a/hw/char/escc.c b/hw/char/escc.c
index df89d58eed..81d792cb47 100644
--- a/hw/char/escc.c
+++ b/hw/char/escc.c
@@ -26,7 +26,7 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "hw/char/escc.h"
-#include "chardev/char.h"
+#include "chardev/char-serial.h"
 #include "ui/console.h"
 #include "ui/input.h"
 #include "trace.h"
diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c
index 94952fb90f..d93125645a 100644
--- a/hw/char/exynos4210_uart.c
+++ b/hw/char/exynos4210_uart.c
@@ -23,7 +23,7 @@
 #include "hw/sysbus.h"
 #include "qemu/error-report.h"
 #include "sysemu/sysemu.h"
-#include "chardev/char.h"
+#include "chardev/char-serial.h"
 
 #include "hw/arm/exynos4210.h"
 
diff --git a/hw/char/parallel.c b/hw/char/parallel.c
index c926df0bee..1d6c6e9f33 100644
--- a/hw/char/parallel.c
+++ b/hw/char/parallel.c
@@ -25,7 +25,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "hw/hw.h"
-#include "chardev/char.h"
+#include "chardev/char-parallel.h"
 #include "hw/isa/isa.h"
 #include "hw/i386/pc.h"
 #include "sysemu/sysemu.h"
diff --git a/hw/char/serial.c b/hw/char/serial.c
index aa336333be..23e5fe9d18 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -25,7 +25,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/char/serial.h"
-#include "chardev/char.h"
+#include "chardev/char-serial.h"
 #include "qapi/error.h"
 #include "qemu/timer.h"
 #include "exec/address-spaces.h"
diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
index 578760e1b3..a145c919e9 100644
--- a/hw/usb/dev-serial.c
+++ b/hw/usb/dev-serial.c
@@ -15,7 +15,7 @@
 #include "qemu/error-report.h"
 #include "hw/usb.h"
 #include "hw/usb/desc.h"
-#include "chardev/char.h"
+#include "chardev/char-serial.h"
 
 //#define DEBUG_Serial
 
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 09/14] be-hci: use backend functions
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
                   ` (7 preceding siblings ...)
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 08/14] chardev: serial & parallel declaration to own headers Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 10/14] char: generalize qemu_chr_write_all() Marc-André Lureau
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

Avoid accessing CharBackend directly, use qemu_chr_be_* methods instead.

be->chr_read should exists if qemu_chr_be_can_write() is true.

(use qemu_chr_be_write(), _impl() bypasses replay)

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Andrzej Zaborowski <balrogg@gmail.com>
---
 hw/bt/hci-csr.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/hw/bt/hci-csr.c b/hw/bt/hci-csr.c
index 0f2021086d..d13192b9b5 100644
--- a/hw/bt/hci-csr.c
+++ b/hw/bt/hci-csr.c
@@ -82,17 +82,14 @@ enum {
 
 static inline void csrhci_fifo_wake(struct csrhci_s *s)
 {
-    Chardev *chr = (Chardev *)s;
-    CharBackend *be = chr->be;
+    Chardev *chr = CHARDEV(s);
 
     if (!s->enable || !s->out_len)
         return;
 
     /* XXX: Should wait for s->modem_state & CHR_TIOCM_RTS? */
-    if (be && be->chr_can_read && be->chr_can_read(be->opaque) &&
-        be->chr_read) {
-        be->chr_read(be->opaque,
-                     s->outfifo + s->out_start++, 1);
+    if (qemu_chr_be_can_write(chr)) {
+        qemu_chr_be_write(chr, s->outfifo + s->out_start++, 1);
         s->out_len--;
         if (s->out_start >= s->out_size) {
             s->out_start = 0;
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 10/14] char: generalize qemu_chr_write_all()
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
                   ` (8 preceding siblings ...)
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 09/14] be-hci: use backend functions Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29 21:09   ` Philippe Mathieu-Daudé
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 11/14] char: move CharBackend handling in char-fe unit Marc-André Lureau
                   ` (4 subsequent siblings)
  14 siblings, 1 reply; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

qemu_chr_fe_write() is similar to qemu_chr_write_all(): the later write
all with a chardev backend.

Make qemu_chr_write() and qemu_chr_fe_write_buffer() take an 'all'
argument. If false, handle 'partial' write the way qemu_chr_fe_write()
use to, and call qemu_chr_write() from qemu_chr_fe_write().

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 chardev/char.c | 70 +++++++++++++++++++++++-----------------------------------
 1 file changed, 28 insertions(+), 42 deletions(-)

diff --git a/chardev/char.c b/chardev/char.c
index a747e0279a..9a7c70c7aa 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -96,7 +96,8 @@ static void qemu_chr_fe_write_log(Chardev *s,
 }
 
 static int qemu_chr_fe_write_buffer(Chardev *s,
-                                    const uint8_t *buf, int len, int *offset)
+                                    const uint8_t *buf, int len,
+                                    int *offset, bool write_all)
 {
     ChardevClass *cc = CHARDEV_GET_CLASS(s);
     int res = 0;
@@ -106,7 +107,7 @@ static int qemu_chr_fe_write_buffer(Chardev *s,
     while (*offset < len) {
     retry:
         res = cc->chr_write(s, buf + *offset, len - *offset);
-        if (res < 0 && errno == EAGAIN) {
+        if (res < 0 && errno == EAGAIN && write_all) {
             g_usleep(100);
             goto retry;
         }
@@ -116,6 +117,9 @@ static int qemu_chr_fe_write_buffer(Chardev *s,
         }
 
         *offset += res;
+        if (!write_all) {
+            break;
+        }
     }
     if (*offset > 0) {
         qemu_chr_fe_write_log(s, buf, *offset);
@@ -130,54 +134,20 @@ static bool qemu_chr_replay(Chardev *chr)
     return qemu_chr_has_feature(chr, QEMU_CHAR_FEATURE_REPLAY);
 }
 
-int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len)
+static int qemu_chr_write(Chardev *s, const uint8_t *buf, int len,
+                          bool write_all)
 {
-    Chardev *s = be->chr;
-    ChardevClass *cc;
-    int ret;
-
-    if (!s) {
-        return 0;
-    }
-
-    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_PLAY) {
-        int offset;
-        replay_char_write_event_load(&ret, &offset);
-        assert(offset <= len);
-        qemu_chr_fe_write_buffer(s, buf, offset, &offset);
-        return ret;
-    }
-
-    cc = CHARDEV_GET_CLASS(s);
-    qemu_mutex_lock(&s->chr_write_lock);
-    ret = cc->chr_write(s, buf, len);
-
-    if (ret > 0) {
-        qemu_chr_fe_write_log(s, buf, ret);
-    }
-
-    qemu_mutex_unlock(&s->chr_write_lock);
-    
-    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
-        replay_char_write_event_save(ret, ret < 0 ? 0 : ret);
-    }
-    
-    return ret;
-}
-
-int qemu_chr_write_all(Chardev *s, const uint8_t *buf, int len)
-{
-    int offset;
+    int offset = 0;
     int res;
 
     if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_PLAY) {
         replay_char_write_event_load(&res, &offset);
         assert(offset <= len);
-        qemu_chr_fe_write_buffer(s, buf, offset, &offset);
+        qemu_chr_fe_write_buffer(s, buf, offset, &offset, true);
         return res;
     }
 
-    res = qemu_chr_fe_write_buffer(s, buf, len, &offset);
+    res = qemu_chr_fe_write_buffer(s, buf, len, &offset, write_all);
 
     if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
         replay_char_write_event_save(res, offset);
@@ -189,6 +159,22 @@ int qemu_chr_write_all(Chardev *s, const uint8_t *buf, int len)
     return offset;
 }
 
+int qemu_chr_write_all(Chardev *s, const uint8_t *buf, int len)
+{
+    return qemu_chr_write(s, buf, len, true);
+}
+
+int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len)
+{
+    Chardev *s = be->chr;
+
+    if (!s) {
+        return 0;
+    }
+
+    return qemu_chr_write(s, buf, len, false);
+}
+
 int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len)
 {
     Chardev *s = be->chr;
@@ -197,7 +183,7 @@ int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len)
         return 0;
     }
 
-    return qemu_chr_write_all(s, buf, len);
+    return qemu_chr_write(s, buf, len, true);
 }
 
 int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len)
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 11/14] char: move CharBackend handling in char-fe unit
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
                   ` (9 preceding siblings ...)
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 10/14] char: generalize qemu_chr_write_all() Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29 21:25   ` Philippe Mathieu-Daudé
  2017-06-07 16:41     ` Anthony PERARD
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 12/14] char: rename functions that are not part of fe Marc-André Lureau
                   ` (3 subsequent siblings)
  14 siblings, 2 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

Move all the fronted struct and methods to a seperate unit. This avoids
accidentally mixing backend and frontend calls, and helps with readibilty.

Make qemu_chr_replay() a macro shared by both char and char-fe.

Export qemu_chr_write(), and use a macro for qemu_chr_write_all()

(nb: yes, CharBackend is for char frontend :)

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/chardev/char-fe.h         | 249 ++++++++++++++++++++++++++
 include/chardev/char-mux.h        |   1 +
 include/chardev/char.h            | 242 +-------------------------
 include/hw/char/bcm2835_aux.h     |   2 +-
 include/hw/char/cadence_uart.h    |   2 +-
 include/hw/char/digic-uart.h      |   2 +-
 include/hw/char/imx_serial.h      |   2 +-
 include/hw/char/serial.h          |   2 +-
 include/hw/char/stm32f2xx_usart.h |   2 +-
 backends/rng-egd.c                |   2 +-
 chardev/char-fe.c                 | 358 ++++++++++++++++++++++++++++++++++++++
 chardev/char.c                    | 343 +-----------------------------------
 gdbstub.c                         |   1 +
 hw/arm/omap2.c                    |   2 +-
 hw/arm/pxa2xx.c                   |   2 +-
 hw/arm/strongarm.c                |   1 +
 hw/char/cadence_uart.c            |   1 +
 hw/char/debugcon.c                |   2 +-
 hw/char/digic-uart.c              |   2 +-
 hw/char/escc.c                    |   1 +
 hw/char/etraxfs_ser.c             |   2 +-
 hw/char/exynos4210_uart.c         |   1 +
 hw/char/grlib_apbuart.c           |   2 +-
 hw/char/ipoctal232.c              |   2 +-
 hw/char/lm32_juart.c              |   2 +-
 hw/char/lm32_uart.c               |   2 +-
 hw/char/mcf_uart.c                |   2 +-
 hw/char/milkymist-uart.c          |   2 +-
 hw/char/parallel.c                |   1 +
 hw/char/pl011.c                   |   2 +-
 hw/char/sclpconsole-lm.c          |   2 +-
 hw/char/sclpconsole.c             |   2 +-
 hw/char/sh_serial.c               |   2 +-
 hw/char/spapr_vty.c               |   2 +-
 hw/char/terminal3270.c            |   2 +-
 hw/char/virtio-console.c          |   2 +-
 hw/char/xen_console.c             |   2 +-
 hw/char/xilinx_uartlite.c         |   2 +-
 hw/core/qdev-properties-system.c  |   2 +-
 hw/ipmi/ipmi_bmc_extern.c         |   2 +-
 hw/misc/ivshmem.c                 |   2 +-
 hw/usb/ccid-card-passthru.c       |   2 +-
 hw/usb/dev-serial.c               |   1 +
 hw/usb/redirect.c                 |   2 +-
 hw/virtio/vhost-user.c            |   2 +-
 monitor.c                         |   2 +-
 net/colo-compare.c                |   2 +-
 net/filter-mirror.c               |   2 +-
 net/slirp.c                       |   2 +-
 net/vhost-user.c                  |   2 +-
 qtest.c                           |   2 +-
 slirp/slirp.c                     |   2 +-
 tests/test-char.c                 |   2 +-
 tests/vhost-user-test.c           |   2 +-
 ui/console.c                      |   2 +-
 chardev/Makefile.objs             |   1 +
 56 files changed, 664 insertions(+), 623 deletions(-)
 create mode 100644 include/chardev/char-fe.h
 create mode 100644 chardev/char-fe.c

diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h
new file mode 100644
index 0000000000..bd82093218
--- /dev/null
+++ b/include/chardev/char-fe.h
@@ -0,0 +1,249 @@
+#ifndef QEMU_CHAR_FE_H
+#define QEMU_CHAR_FE_H
+
+#include "chardev/char.h"
+
+typedef void IOEventHandler(void *opaque, int event);
+
+/* This is the backend as seen by frontend, the actual backend is
+ * Chardev */
+struct CharBackend {
+    Chardev *chr;
+    IOEventHandler *chr_event;
+    IOCanReadHandler *chr_can_read;
+    IOReadHandler *chr_read;
+    void *opaque;
+    int tag;
+    int fe_open;
+};
+
+/**
+ * @qemu_chr_fe_init:
+ *
+ * Initializes a front end for the given CharBackend and
+ * Chardev. Call qemu_chr_fe_deinit() to remove the association and
+ * release the driver.
+ *
+ * Returns: false on error.
+ */
+bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp);
+
+/**
+ * @qemu_chr_fe_deinit:
+ *
+ * Dissociate the CharBackend from the Chardev.
+ *
+ * Safe to call without associated Chardev.
+ */
+void qemu_chr_fe_deinit(CharBackend *b);
+
+/**
+ * @qemu_chr_fe_get_driver:
+ *
+ * Returns the driver associated with a CharBackend or NULL if no
+ * associated Chardev.
+ */
+Chardev *qemu_chr_fe_get_driver(CharBackend *be);
+
+/**
+ * @qemu_chr_fe_set_handlers:
+ * @b: a CharBackend
+ * @fd_can_read: callback to get the amount of data the frontend may
+ *               receive
+ * @fd_read: callback to receive data from char
+ * @fd_event: event callback
+ * @opaque: an opaque pointer for the callbacks
+ * @context: a main loop context or NULL for the default
+ * @set_open: whether to call qemu_chr_fe_set_open() implicitely when
+ * any of the handler is non-NULL
+ *
+ * Set the front end char handlers. The front end takes the focus if
+ * any of the handler is non-NULL.
+ *
+ * Without associated Chardev, nothing is changed.
+ */
+void qemu_chr_fe_set_handlers(CharBackend *b,
+                              IOCanReadHandler *fd_can_read,
+                              IOReadHandler *fd_read,
+                              IOEventHandler *fd_event,
+                              void *opaque,
+                              GMainContext *context,
+                              bool set_open);
+
+/**
+ * @qemu_chr_fe_take_focus:
+ *
+ * Take the focus (if the front end is muxed).
+ *
+ * Without associated Chardev, nothing is changed.
+ */
+void qemu_chr_fe_take_focus(CharBackend *b);
+
+/**
+ * @qemu_chr_fe_accept_input:
+ *
+ * Notify that the frontend is ready to receive data
+ */
+void qemu_chr_fe_accept_input(CharBackend *be);
+
+/**
+ * @qemu_chr_fe_disconnect:
+ *
+ * Close a fd accpeted by character backend.
+ * Without associated Chardev, do nothing.
+ */
+void qemu_chr_fe_disconnect(CharBackend *be);
+
+/**
+ * @qemu_chr_fe_wait_connected:
+ *
+ * Wait for characted backend to be connected, return < 0 on error or
+ * if no assicated Chardev.
+ */
+int qemu_chr_fe_wait_connected(CharBackend *be, Error **errp);
+
+/**
+ * @qemu_chr_fe_set_echo:
+ *
+ * Ask the backend to override its normal echo setting.  This only really
+ * applies to the stdio backend and is used by the QMP server such that you
+ * can see what you type if you try to type QMP commands.
+ * Without associated Chardev, do nothing.
+ *
+ * @echo true to enable echo, false to disable echo
+ */
+void qemu_chr_fe_set_echo(CharBackend *be, bool echo);
+
+/**
+ * @qemu_chr_fe_set_open:
+ *
+ * Set character frontend open status.  This is an indication that the
+ * front end is ready (or not) to begin doing I/O.
+ * Without associated Chardev, do nothing.
+ */
+void qemu_chr_fe_set_open(CharBackend *be, int fe_open);
+
+/**
+ * @qemu_chr_fe_printf:
+ *
+ * Write to a character backend using a printf style interface.  This
+ * function is thread-safe. It does nothing without associated
+ * Chardev.
+ *
+ * @fmt see #printf
+ */
+void qemu_chr_fe_printf(CharBackend *be, const char *fmt, ...)
+    GCC_FMT_ATTR(2, 3);
+
+/**
+ * @qemu_chr_fe_add_watch:
+ *
+ * If the backend is connected, create and add a #GSource that fires
+ * when the given condition (typically G_IO_OUT|G_IO_HUP or G_IO_HUP)
+ * is active; return the #GSource's tag.  If it is disconnected,
+ * or without associated Chardev, return 0.
+ *
+ * @cond the condition to poll for
+ * @func the function to call when the condition happens
+ * @user_data the opaque pointer to pass to @func
+ *
+ * Returns: the source tag
+ */
+guint qemu_chr_fe_add_watch(CharBackend *be, GIOCondition cond,
+                            GIOFunc func, void *user_data);
+
+/**
+ * @qemu_chr_fe_write:
+ *
+ * Write data to a character backend from the front end.  This function
+ * will send data from the front end to the back end.  This function
+ * is thread-safe.
+ *
+ * @buf the data
+ * @len the number of bytes to send
+ *
+ * Returns: the number of bytes consumed (0 if no assicated Chardev)
+ */
+int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len);
+
+/**
+ * @qemu_chr_fe_write_all:
+ *
+ * Write data to a character backend from the front end.  This function will
+ * send data from the front end to the back end.  Unlike @qemu_chr_fe_write,
+ * this function will block if the back end cannot consume all of the data
+ * attempted to be written.  This function is thread-safe.
+ *
+ * @buf the data
+ * @len the number of bytes to send
+ *
+ * Returns: the number of bytes consumed (0 if no assicated Chardev)
+ */
+int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len);
+
+/**
+ * @qemu_chr_fe_read_all:
+ *
+ * Read data to a buffer from the back end.
+ *
+ * @buf the data buffer
+ * @len the number of bytes to read
+ *
+ * Returns: the number of bytes read (0 if no assicated Chardev)
+ */
+int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len);
+
+/**
+ * @qemu_chr_fe_ioctl:
+ *
+ * Issue a device specific ioctl to a backend.  This function is thread-safe.
+ *
+ * @cmd see CHR_IOCTL_*
+ * @arg the data associated with @cmd
+ *
+ * Returns: if @cmd is not supported by the backend or there is no
+ *          associated Chardev, -ENOTSUP, otherwise the return
+ *          value depends on the semantics of @cmd
+ */
+int qemu_chr_fe_ioctl(CharBackend *be, int cmd, void *arg);
+
+/**
+ * @qemu_chr_fe_get_msgfd:
+ *
+ * For backends capable of fd passing, return the latest file descriptor passed
+ * by a client.
+ *
+ * Returns: -1 if fd passing isn't supported or there is no pending file
+ *          descriptor.  If a file descriptor is returned, subsequent calls to
+ *          this function will return -1 until a client sends a new file
+ *          descriptor.
+ */
+int qemu_chr_fe_get_msgfd(CharBackend *be);
+
+/**
+ * @qemu_chr_fe_get_msgfds:
+ *
+ * For backends capable of fd passing, return the number of file received
+ * descriptors and fills the fds array up to num elements
+ *
+ * Returns: -1 if fd passing isn't supported or there are no pending file
+ *          descriptors.  If file descriptors are returned, subsequent calls to
+ *          this function will return -1 until a client sends a new set of file
+ *          descriptors.
+ */
+int qemu_chr_fe_get_msgfds(CharBackend *be, int *fds, int num);
+
+/**
+ * @qemu_chr_fe_set_msgfds:
+ *
+ * For backends capable of fd passing, set an array of fds to be passed with
+ * the next send operation.
+ * A subsequent call to this function before calling a write function will
+ * result in overwriting the fd array with the new value without being send.
+ * Upon writing the message the fd array is freed.
+ *
+ * Returns: -1 if fd passing isn't supported or no associated Chardev.
+ */
+int qemu_chr_fe_set_msgfds(CharBackend *be, int *fds, int num);
+
+#endif /* QEMU_CHAR_FE_H */
diff --git a/include/chardev/char-mux.h b/include/chardev/char-mux.h
index 45cdfc7e67..8928977897 100644
--- a/include/chardev/char-mux.h
+++ b/include/chardev/char-mux.h
@@ -25,6 +25,7 @@
 #define CHAR_MUX_H
 
 #include "chardev/char.h"
+#include "chardev/char-fe.h"
 
 extern bool muxes_realized;
 
diff --git a/include/chardev/char.h b/include/chardev/char.h
index 95273e10ae..8a9ade4931 100644
--- a/include/chardev/char.h
+++ b/include/chardev/char.h
@@ -16,6 +16,7 @@
 #define IAC 255
 
 /* character device */
+typedef struct CharBackend CharBackend;
 
 typedef enum {
     CHR_EVENT_BREAK, /* serial break char */
@@ -27,8 +28,6 @@ typedef enum {
 
 #define CHR_READ_BUF_LEN 4096
 
-typedef void IOEventHandler(void *opaque, int event);
-
 typedef enum {
     /* Whether the chardev peer is able to close and
      * reopen the data channel, thus requiring support
@@ -44,17 +43,7 @@ typedef enum {
     QEMU_CHAR_FEATURE_LAST,
 } ChardevFeature;
 
-/* This is the backend as seen by frontend, the actual backend is
- * Chardev */
-typedef struct CharBackend {
-    Chardev *chr;
-    IOEventHandler *chr_event;
-    IOCanReadHandler *chr_can_read;
-    IOReadHandler *chr_read;
-    void *opaque;
-    int tag;
-    int fe_open;
-} CharBackend;
+#define qemu_chr_replay(chr) qemu_chr_has_feature(chr, QEMU_CHAR_FEATURE_REPLAY)
 
 struct Chardev {
     Object parent_obj;
@@ -103,15 +92,6 @@ void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend);
  */
 Chardev *qemu_chr_new(const char *label, const char *filename);
 
-
-/**
- * @qemu_chr_fe_disconnect:
- *
- * Close a fd accpeted by character backend.
- * Without associated Chardev, do nothing.
- */
-void qemu_chr_fe_disconnect(CharBackend *be);
-
 /**
  * @qemu_chr_cleanup:
  *
@@ -120,14 +100,6 @@ void qemu_chr_fe_disconnect(CharBackend *be);
 void qemu_chr_cleanup(void);
 
 /**
- * @qemu_chr_fe_wait_connected:
- *
- * Wait for characted backend to be connected, return < 0 on error or
- * if no assicated Chardev.
- */
-int qemu_chr_fe_wait_connected(CharBackend *be, Error **errp);
-
-/**
  * @qemu_chr_new_noreplay:
  *
  * Create a new character backend from a URI.
@@ -142,150 +114,6 @@ int qemu_chr_fe_wait_connected(CharBackend *be, Error **errp);
 Chardev *qemu_chr_new_noreplay(const char *label, const char *filename);
 
 /**
- * @qemu_chr_fe_set_echo:
- *
- * Ask the backend to override its normal echo setting.  This only really
- * applies to the stdio backend and is used by the QMP server such that you
- * can see what you type if you try to type QMP commands.
- * Without associated Chardev, do nothing.
- *
- * @echo true to enable echo, false to disable echo
- */
-void qemu_chr_fe_set_echo(CharBackend *be, bool echo);
-
-/**
- * @qemu_chr_fe_set_open:
- *
- * Set character frontend open status.  This is an indication that the
- * front end is ready (or not) to begin doing I/O.
- * Without associated Chardev, do nothing.
- */
-void qemu_chr_fe_set_open(CharBackend *be, int fe_open);
-
-/**
- * @qemu_chr_fe_printf:
- *
- * Write to a character backend using a printf style interface.  This
- * function is thread-safe. It does nothing without associated
- * Chardev.
- *
- * @fmt see #printf
- */
-void qemu_chr_fe_printf(CharBackend *be, const char *fmt, ...)
-    GCC_FMT_ATTR(2, 3);
-
-/**
- * @qemu_chr_fe_add_watch:
- *
- * If the backend is connected, create and add a #GSource that fires
- * when the given condition (typically G_IO_OUT|G_IO_HUP or G_IO_HUP)
- * is active; return the #GSource's tag.  If it is disconnected,
- * or without associated Chardev, return 0.
- *
- * @cond the condition to poll for
- * @func the function to call when the condition happens
- * @user_data the opaque pointer to pass to @func
- *
- * Returns: the source tag
- */
-guint qemu_chr_fe_add_watch(CharBackend *be, GIOCondition cond,
-                            GIOFunc func, void *user_data);
-
-/**
- * @qemu_chr_fe_write:
- *
- * Write data to a character backend from the front end.  This function
- * will send data from the front end to the back end.  This function
- * is thread-safe.
- *
- * @buf the data
- * @len the number of bytes to send
- *
- * Returns: the number of bytes consumed (0 if no assicated Chardev)
- */
-int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len);
-
-/**
- * @qemu_chr_fe_write_all:
- *
- * Write data to a character backend from the front end.  This function will
- * send data from the front end to the back end.  Unlike @qemu_chr_fe_write,
- * this function will block if the back end cannot consume all of the data
- * attempted to be written.  This function is thread-safe.
- *
- * @buf the data
- * @len the number of bytes to send
- *
- * Returns: the number of bytes consumed (0 if no assicated Chardev)
- */
-int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len);
-
-/**
- * @qemu_chr_fe_read_all:
- *
- * Read data to a buffer from the back end.
- *
- * @buf the data buffer
- * @len the number of bytes to read
- *
- * Returns: the number of bytes read (0 if no assicated Chardev)
- */
-int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len);
-
-/**
- * @qemu_chr_fe_ioctl:
- *
- * Issue a device specific ioctl to a backend.  This function is thread-safe.
- *
- * @cmd see CHR_IOCTL_*
- * @arg the data associated with @cmd
- *
- * Returns: if @cmd is not supported by the backend or there is no
- *          associated Chardev, -ENOTSUP, otherwise the return
- *          value depends on the semantics of @cmd
- */
-int qemu_chr_fe_ioctl(CharBackend *be, int cmd, void *arg);
-
-/**
- * @qemu_chr_fe_get_msgfd:
- *
- * For backends capable of fd passing, return the latest file descriptor passed
- * by a client.
- *
- * Returns: -1 if fd passing isn't supported or there is no pending file
- *          descriptor.  If a file descriptor is returned, subsequent calls to
- *          this function will return -1 until a client sends a new file
- *          descriptor.
- */
-int qemu_chr_fe_get_msgfd(CharBackend *be);
-
-/**
- * @qemu_chr_fe_get_msgfds:
- *
- * For backends capable of fd passing, return the number of file received
- * descriptors and fills the fds array up to num elements
- *
- * Returns: -1 if fd passing isn't supported or there are no pending file
- *          descriptors.  If file descriptors are returned, subsequent calls to
- *          this function will return -1 until a client sends a new set of file
- *          descriptors.
- */
-int qemu_chr_fe_get_msgfds(CharBackend *be, int *fds, int num);
-
-/**
- * @qemu_chr_fe_set_msgfds:
- *
- * For backends capable of fd passing, set an array of fds to be passed with
- * the next send operation.
- * A subsequent call to this function before calling a write function will
- * result in overwriting the fd array with the new value without being send.
- * Upon writing the message the fd array is freed.
- *
- * Returns: -1 if fd passing isn't supported or no associated Chardev.
- */
-int qemu_chr_fe_set_msgfds(CharBackend *be, int *fds, int num);
-
-/**
  * @qemu_chr_be_can_write:
  *
  * Determine how much data the front end can currently accept.  This function
@@ -328,69 +156,6 @@ void qemu_chr_be_write_impl(Chardev *s, uint8_t *buf, int len);
  */
 void qemu_chr_be_event(Chardev *s, int event);
 
-/**
- * @qemu_chr_fe_init:
- *
- * Initializes a front end for the given CharBackend and
- * Chardev. Call qemu_chr_fe_deinit() to remove the association and
- * release the driver.
- *
- * Returns: false on error.
- */
-bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp);
-
-/**
- * @qemu_chr_fe_get_driver:
- *
- * Returns the driver associated with a CharBackend or NULL if no
- * associated Chardev.
- */
-Chardev *qemu_chr_fe_get_driver(CharBackend *be);
-
-/**
- * @qemu_chr_fe_deinit:
- *
- * Dissociate the CharBackend from the Chardev.
- *
- * Safe to call without associated Chardev.
- */
-void qemu_chr_fe_deinit(CharBackend *b);
-
-/**
- * @qemu_chr_fe_set_handlers:
- * @b: a CharBackend
- * @fd_can_read: callback to get the amount of data the frontend may
- *               receive
- * @fd_read: callback to receive data from char
- * @fd_event: event callback
- * @opaque: an opaque pointer for the callbacks
- * @context: a main loop context or NULL for the default
- * @set_open: whether to call qemu_chr_fe_set_open() implicitely when
- * any of the handler is non-NULL
- *
- * Set the front end char handlers. The front end takes the focus if
- * any of the handler is non-NULL.
- *
- * Without associated Chardev, nothing is changed.
- */
-void qemu_chr_fe_set_handlers(CharBackend *b,
-                              IOCanReadHandler *fd_can_read,
-                              IOReadHandler *fd_read,
-                              IOEventHandler *fd_event,
-                              void *opaque,
-                              GMainContext *context,
-                              bool set_open);
-
-/**
- * @qemu_chr_fe_take_focus:
- *
- * Take the focus (if the front end is muxed).
- *
- * Without associated Chardev, nothing is changed.
- */
-void qemu_chr_fe_take_focus(CharBackend *b);
-
-void qemu_chr_fe_accept_input(CharBackend *be);
 int qemu_chr_add_client(Chardev *s, int fd);
 Chardev *qemu_chr_find(const char *name);
 
@@ -399,7 +164,8 @@ bool qemu_chr_has_feature(Chardev *chr,
 void qemu_chr_set_feature(Chardev *chr,
                           ChardevFeature feature);
 QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename);
-int qemu_chr_write_all(Chardev *s, const uint8_t *buf, int len);
+int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all);
+#define qemu_chr_write_all(s, buf, len) qemu_chr_write(s, buf, len, true)
 int qemu_chr_wait_connected(Chardev *chr, Error **errp);
 
 #define TYPE_CHARDEV "chardev"
diff --git a/include/hw/char/bcm2835_aux.h b/include/hw/char/bcm2835_aux.h
index 2a051c5646..cdbf7e3e37 100644
--- a/include/hw/char/bcm2835_aux.h
+++ b/include/hw/char/bcm2835_aux.h
@@ -9,7 +9,7 @@
 #define BCM2835_AUX_H
 
 #include "hw/sysbus.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 
 #define TYPE_BCM2835_AUX "bcm2835-aux"
 #define BCM2835_AUX(obj) OBJECT_CHECK(BCM2835AuxState, (obj), TYPE_BCM2835_AUX)
diff --git a/include/hw/char/cadence_uart.h b/include/hw/char/cadence_uart.h
index eed7d8d358..118e3f10de 100644
--- a/include/hw/char/cadence_uart.h
+++ b/include/hw/char/cadence_uart.h
@@ -19,7 +19,7 @@
 #ifndef CADENCE_UART_H
 
 #include "hw/sysbus.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "qemu/timer.h"
 
 #define CADENCE_UART_RX_FIFO_SIZE           16
diff --git a/include/hw/char/digic-uart.h b/include/hw/char/digic-uart.h
index 370b48a6c5..de9a3e3551 100644
--- a/include/hw/char/digic-uart.h
+++ b/include/hw/char/digic-uart.h
@@ -19,7 +19,7 @@
 #define HW_CHAR_DIGIC_UART_H
 
 #include "hw/sysbus.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 
 #define TYPE_DIGIC_UART "digic-uart"
 #define DIGIC_UART(obj) \
diff --git a/include/hw/char/imx_serial.h b/include/hw/char/imx_serial.h
index 05500f5346..baeec3183f 100644
--- a/include/hw/char/imx_serial.h
+++ b/include/hw/char/imx_serial.h
@@ -19,7 +19,7 @@
 #define IMX_SERIAL_H
 
 #include "hw/sysbus.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 
 #define TYPE_IMX_SERIAL "imx.serial"
 #define IMX_SERIAL(obj) OBJECT_CHECK(IMXSerialState, (obj), TYPE_IMX_SERIAL)
diff --git a/include/hw/char/serial.h b/include/hw/char/serial.h
index 01dcd2a8d2..c4daf11a14 100644
--- a/include/hw/char/serial.h
+++ b/include/hw/char/serial.h
@@ -28,7 +28,7 @@
 
 #include "hw/hw.h"
 #include "sysemu/sysemu.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "exec/memory.h"
 #include "qemu/fifo8.h"
 #include "chardev/char.h"
diff --git a/include/hw/char/stm32f2xx_usart.h b/include/hw/char/stm32f2xx_usart.h
index 4259dbeb1e..9d03a7527c 100644
--- a/include/hw/char/stm32f2xx_usart.h
+++ b/include/hw/char/stm32f2xx_usart.h
@@ -26,7 +26,7 @@
 #define HW_STM32F2XX_USART_H
 
 #include "hw/sysbus.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "hw/hw.h"
 
 #define USART_SR   0x00
diff --git a/backends/rng-egd.c b/backends/rng-egd.c
index 5448f6e5f5..ad3e1e5edf 100644
--- a/backends/rng-egd.c
+++ b/backends/rng-egd.c
@@ -12,7 +12,7 @@
 
 #include "qemu/osdep.h"
 #include "sysemu/rng.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "qapi/error.h"
 #include "qapi/qmp/qerror.h"
 
diff --git a/chardev/char-fe.c b/chardev/char-fe.c
new file mode 100644
index 0000000000..341221d029
--- /dev/null
+++ b/chardev/char-fe.c
@@ -0,0 +1,358 @@
+/*
+ * QEMU System Emulator
+ *
+ * Copyright (c) 2003-2008 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include "qemu/osdep.h"
+#include "qemu/error-report.h"
+#include "qapi/error.h"
+#include "qapi-visit.h"
+#include "sysemu/replay.h"
+
+#include "chardev/char-fe.h"
+#include "chardev/char-io.h"
+#include "chardev/char-mux.h"
+
+int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len)
+{
+    Chardev *s = be->chr;
+
+    if (!s) {
+        return 0;
+    }
+
+    return qemu_chr_write(s, buf, len, false);
+}
+
+int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len)
+{
+    Chardev *s = be->chr;
+
+    if (!s) {
+        return 0;
+    }
+
+    return qemu_chr_write(s, buf, len, true);
+}
+
+int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len)
+{
+    Chardev *s = be->chr;
+    int offset = 0, counter = 10;
+    int res;
+
+    if (!s || !CHARDEV_GET_CLASS(s)->chr_sync_read) {
+        return 0;
+    }
+
+    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_PLAY) {
+        return replay_char_read_all_load(buf);
+    }
+
+    while (offset < len) {
+    retry:
+        res = CHARDEV_GET_CLASS(s)->chr_sync_read(s, buf + offset,
+                                                  len - offset);
+        if (res == -1 && errno == EAGAIN) {
+            g_usleep(100);
+            goto retry;
+        }
+
+        if (res == 0) {
+            break;
+        }
+
+        if (res < 0) {
+            if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
+                replay_char_read_all_save_error(res);
+            }
+            return res;
+        }
+
+        offset += res;
+
+        if (!counter--) {
+            break;
+        }
+    }
+
+    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
+        replay_char_read_all_save_buf(buf, offset);
+    }
+    return offset;
+}
+
+int qemu_chr_fe_ioctl(CharBackend *be, int cmd, void *arg)
+{
+    Chardev *s = be->chr;
+    int res;
+
+    if (!s || !CHARDEV_GET_CLASS(s)->chr_ioctl || qemu_chr_replay(s)) {
+        res = -ENOTSUP;
+    } else {
+        res = CHARDEV_GET_CLASS(s)->chr_ioctl(s, cmd, arg);
+    }
+
+    return res;
+}
+
+int qemu_chr_fe_get_msgfd(CharBackend *be)
+{
+    Chardev *s = be->chr;
+    int fd;
+    int res = (qemu_chr_fe_get_msgfds(be, &fd, 1) == 1) ? fd : -1;
+    if (s && qemu_chr_replay(s)) {
+        error_report("Replay: get msgfd is not supported "
+                     "for serial devices yet");
+        exit(1);
+    }
+    return res;
+}
+
+int qemu_chr_fe_get_msgfds(CharBackend *be, int *fds, int len)
+{
+    Chardev *s = be->chr;
+
+    if (!s) {
+        return -1;
+    }
+
+    return CHARDEV_GET_CLASS(s)->get_msgfds ?
+        CHARDEV_GET_CLASS(s)->get_msgfds(s, fds, len) : -1;
+}
+
+int qemu_chr_fe_set_msgfds(CharBackend *be, int *fds, int num)
+{
+    Chardev *s = be->chr;
+
+    if (!s) {
+        return -1;
+    }
+
+    return CHARDEV_GET_CLASS(s)->set_msgfds ?
+        CHARDEV_GET_CLASS(s)->set_msgfds(s, fds, num) : -1;
+}
+
+void qemu_chr_fe_accept_input(CharBackend *be)
+{
+    Chardev *s = be->chr;
+
+    if (!s) {
+        return;
+    }
+
+    if (CHARDEV_GET_CLASS(s)->chr_accept_input) {
+        CHARDEV_GET_CLASS(s)->chr_accept_input(s);
+    }
+    qemu_notify_event();
+}
+
+void qemu_chr_fe_printf(CharBackend *be, const char *fmt, ...)
+{
+    char buf[CHR_READ_BUF_LEN];
+    va_list ap;
+    va_start(ap, fmt);
+    vsnprintf(buf, sizeof(buf), fmt, ap);
+    /* XXX this blocks entire thread. Rewrite to use
+     * qemu_chr_fe_write and background I/O callbacks */
+    qemu_chr_fe_write_all(be, (uint8_t *)buf, strlen(buf));
+    va_end(ap);
+}
+
+Chardev *qemu_chr_fe_get_driver(CharBackend *be)
+{
+    return be->chr;
+}
+
+bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp)
+{
+    int tag = 0;
+
+    if (CHARDEV_IS_MUX(s)) {
+        MuxChardev *d = MUX_CHARDEV(s);
+
+        if (d->mux_cnt >= MAX_MUX) {
+            goto unavailable;
+        }
+
+        d->backends[d->mux_cnt] = b;
+        tag = d->mux_cnt++;
+    } else if (s->be) {
+        goto unavailable;
+    } else {
+        s->be = b;
+    }
+
+    b->fe_open = false;
+    b->tag = tag;
+    b->chr = s;
+    return true;
+
+unavailable:
+    error_setg(errp, QERR_DEVICE_IN_USE, s->label);
+    return false;
+}
+
+void qemu_chr_fe_deinit(CharBackend *b)
+{
+    assert(b);
+
+    if (b->chr) {
+        qemu_chr_fe_set_handlers(b, NULL, NULL, NULL, NULL, NULL, true);
+        if (b->chr->be == b) {
+            b->chr->be = NULL;
+        }
+        if (CHARDEV_IS_MUX(b->chr)) {
+            MuxChardev *d = MUX_CHARDEV(b->chr);
+            d->backends[b->tag] = NULL;
+        }
+        b->chr = NULL;
+    }
+}
+
+void qemu_chr_fe_set_handlers(CharBackend *b,
+                              IOCanReadHandler *fd_can_read,
+                              IOReadHandler *fd_read,
+                              IOEventHandler *fd_event,
+                              void *opaque,
+                              GMainContext *context,
+                              bool set_open)
+{
+    Chardev *s;
+    ChardevClass *cc;
+    int fe_open;
+
+    s = b->chr;
+    if (!s) {
+        return;
+    }
+
+    cc = CHARDEV_GET_CLASS(s);
+    if (!opaque && !fd_can_read && !fd_read && !fd_event) {
+        fe_open = 0;
+        remove_fd_in_watch(s);
+    } else {
+        fe_open = 1;
+    }
+    b->chr_can_read = fd_can_read;
+    b->chr_read = fd_read;
+    b->chr_event = fd_event;
+    b->opaque = opaque;
+    if (cc->chr_update_read_handler) {
+        cc->chr_update_read_handler(s, context);
+    }
+
+    if (set_open) {
+        qemu_chr_fe_set_open(b, fe_open);
+    }
+
+    if (fe_open) {
+        qemu_chr_fe_take_focus(b);
+        /* We're connecting to an already opened device, so let's make sure we
+           also get the open event */
+        if (s->be_open) {
+            qemu_chr_be_event(s, CHR_EVENT_OPENED);
+        }
+    }
+
+    if (CHARDEV_IS_MUX(s)) {
+        mux_chr_set_handlers(s, context);
+    }
+}
+
+void qemu_chr_fe_take_focus(CharBackend *b)
+{
+    if (!b->chr) {
+        return;
+    }
+
+    if (CHARDEV_IS_MUX(b->chr)) {
+        mux_set_focus(b->chr, b->tag);
+    }
+}
+
+int qemu_chr_fe_wait_connected(CharBackend *be, Error **errp)
+{
+    if (!be->chr) {
+        error_setg(errp, "missing associated backend");
+        return -1;
+    }
+
+    return qemu_chr_wait_connected(be->chr, errp);
+}
+
+void qemu_chr_fe_set_echo(CharBackend *be, bool echo)
+{
+    Chardev *chr = be->chr;
+
+    if (chr && CHARDEV_GET_CLASS(chr)->chr_set_echo) {
+        CHARDEV_GET_CLASS(chr)->chr_set_echo(chr, echo);
+    }
+}
+
+void qemu_chr_fe_set_open(CharBackend *be, int fe_open)
+{
+    Chardev *chr = be->chr;
+
+    if (!chr) {
+        return;
+    }
+
+    if (be->fe_open == fe_open) {
+        return;
+    }
+    be->fe_open = fe_open;
+    if (CHARDEV_GET_CLASS(chr)->chr_set_fe_open) {
+        CHARDEV_GET_CLASS(chr)->chr_set_fe_open(chr, fe_open);
+    }
+}
+
+guint qemu_chr_fe_add_watch(CharBackend *be, GIOCondition cond,
+                            GIOFunc func, void *user_data)
+{
+    Chardev *s = be->chr;
+    GSource *src;
+    guint tag;
+
+    if (!s || CHARDEV_GET_CLASS(s)->chr_add_watch == NULL) {
+        return 0;
+    }
+
+    src = CHARDEV_GET_CLASS(s)->chr_add_watch(s, cond);
+    if (!src) {
+        return 0;
+    }
+
+    g_source_set_callback(src, (GSourceFunc)func, user_data, NULL);
+    tag = g_source_attach(src, NULL);
+    g_source_unref(src);
+
+    return tag;
+}
+
+void qemu_chr_fe_disconnect(CharBackend *be)
+{
+    Chardev *chr = be->chr;
+
+    if (chr && CHARDEV_GET_CLASS(chr)->chr_disconnect) {
+        CHARDEV_GET_CLASS(chr)->chr_disconnect(chr);
+    }
+}
diff --git a/chardev/char.c b/chardev/char.c
index 9a7c70c7aa..3d5316166e 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -22,7 +22,6 @@
  * THE SOFTWARE.
  */
 #include "qemu/osdep.h"
-#include "qemu-common.h"
 #include "qemu/cutils.h"
 #include "monitor/monitor.h"
 #include "sysemu/sysemu.h"
@@ -35,9 +34,6 @@
 #include "qemu/help_option.h"
 
 #include "chardev/char-mux.h"
-#include "chardev/char-io.h"
-#include "chardev/char-parallel.h"
-#include "chardev/char-serial.h"
 
 /***********************************************************/
 /* character device */
@@ -129,13 +125,7 @@ static int qemu_chr_fe_write_buffer(Chardev *s,
     return res;
 }
 
-static bool qemu_chr_replay(Chardev *chr)
-{
-    return qemu_chr_has_feature(chr, QEMU_CHAR_FEATURE_REPLAY);
-}
-
-static int qemu_chr_write(Chardev *s, const uint8_t *buf, int len,
-                          bool write_all)
+int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all)
 {
     int offset = 0;
     int res;
@@ -159,94 +149,6 @@ static int qemu_chr_write(Chardev *s, const uint8_t *buf, int len,
     return offset;
 }
 
-int qemu_chr_write_all(Chardev *s, const uint8_t *buf, int len)
-{
-    return qemu_chr_write(s, buf, len, true);
-}
-
-int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len)
-{
-    Chardev *s = be->chr;
-
-    if (!s) {
-        return 0;
-    }
-
-    return qemu_chr_write(s, buf, len, false);
-}
-
-int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len)
-{
-    Chardev *s = be->chr;
-
-    if (!s) {
-        return 0;
-    }
-
-    return qemu_chr_write(s, buf, len, true);
-}
-
-int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len)
-{
-    Chardev *s = be->chr;
-    int offset = 0, counter = 10;
-    int res;
-
-    if (!s || !CHARDEV_GET_CLASS(s)->chr_sync_read) {
-        return 0;
-    }
-
-    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_PLAY) {
-        return replay_char_read_all_load(buf);
-    }
-
-    while (offset < len) {
-    retry:
-        res = CHARDEV_GET_CLASS(s)->chr_sync_read(s, buf + offset,
-                                                  len - offset);
-        if (res == -1 && errno == EAGAIN) {
-            g_usleep(100);
-            goto retry;
-        }
-
-        if (res == 0) {
-            break;
-        }
-
-        if (res < 0) {
-            if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
-                replay_char_read_all_save_error(res);
-            }
-            return res;
-        }
-
-        offset += res;
-
-        if (!counter--) {
-            break;
-        }
-    }
-
-    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
-        replay_char_read_all_save_buf(buf, offset);
-    }
-    return offset;
-}
-
-int qemu_chr_fe_ioctl(CharBackend *be, int cmd, void *arg)
-{
-    Chardev *s = be->chr;
-    int res;
-
-    if (!s || !CHARDEV_GET_CLASS(s)->chr_ioctl || qemu_chr_replay(s)) {
-        res = -ENOTSUP;
-    } else {
-        res = CHARDEV_GET_CLASS(s)->chr_ioctl(s, cmd, arg);
-    }
-
-    return res;
-}
-
 int qemu_chr_be_can_write(Chardev *s)
 {
     CharBackend *be = s->be;
@@ -279,75 +181,12 @@ void qemu_chr_be_write(Chardev *s, uint8_t *buf, int len)
     }
 }
 
-int qemu_chr_fe_get_msgfd(CharBackend *be)
-{
-    Chardev *s = be->chr;
-    int fd;
-    int res = (qemu_chr_fe_get_msgfds(be, &fd, 1) == 1) ? fd : -1;
-    if (s && qemu_chr_replay(s)) {
-        error_report("Replay: get msgfd is not supported "
-                     "for serial devices yet");
-        exit(1);
-    }
-    return res;
-}
-
-int qemu_chr_fe_get_msgfds(CharBackend *be, int *fds, int len)
-{
-    Chardev *s = be->chr;
-
-    if (!s) {
-        return -1;
-    }
-
-    return CHARDEV_GET_CLASS(s)->get_msgfds ?
-        CHARDEV_GET_CLASS(s)->get_msgfds(s, fds, len) : -1;
-}
-
-int qemu_chr_fe_set_msgfds(CharBackend *be, int *fds, int num)
-{
-    Chardev *s = be->chr;
-
-    if (!s) {
-        return -1;
-    }
-
-    return CHARDEV_GET_CLASS(s)->set_msgfds ?
-        CHARDEV_GET_CLASS(s)->set_msgfds(s, fds, num) : -1;
-}
-
 int qemu_chr_add_client(Chardev *s, int fd)
 {
     return CHARDEV_GET_CLASS(s)->chr_add_client ?
         CHARDEV_GET_CLASS(s)->chr_add_client(s, fd) : -1;
 }
 
-void qemu_chr_fe_accept_input(CharBackend *be)
-{
-    Chardev *s = be->chr;
-
-    if (!s) {
-        return;
-    }
-
-    if (CHARDEV_GET_CLASS(s)->chr_accept_input) {
-        CHARDEV_GET_CLASS(s)->chr_accept_input(s);
-    }
-    qemu_notify_event();
-}
-
-void qemu_chr_fe_printf(CharBackend *be, const char *fmt, ...)
-{
-    char buf[CHR_READ_BUF_LEN];
-    va_list ap;
-    va_start(ap, fmt);
-    vsnprintf(buf, sizeof(buf), fmt, ap);
-    /* XXX this blocks entire thread. Rewrite to use
-     * qemu_chr_fe_write and background I/O callbacks */
-    qemu_chr_fe_write_all(be, (uint8_t *)buf, strlen(buf));
-    va_end(ap);
-}
-
 static void qemu_char_open(Chardev *chr, ChardevBackend *backend,
                            bool *be_opened, Error **errp)
 {
@@ -459,40 +298,6 @@ static Notifier muxes_realize_notify = {
     .notify = muxes_realize_done,
 };
 
-Chardev *qemu_chr_fe_get_driver(CharBackend *be)
-{
-    return be->chr;
-}
-
-bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp)
-{
-    int tag = 0;
-
-    if (CHARDEV_IS_MUX(s)) {
-        MuxChardev *d = MUX_CHARDEV(s);
-
-        if (d->mux_cnt >= MAX_MUX) {
-            goto unavailable;
-        }
-
-        d->backends[d->mux_cnt] = b;
-        tag = d->mux_cnt++;
-    } else if (s->be) {
-        goto unavailable;
-    } else {
-        s->be = b;
-    }
-
-    b->fe_open = false;
-    b->tag = tag;
-    b->chr = s;
-    return true;
-
-unavailable:
-    error_setg(errp, QERR_DEVICE_IN_USE, s->label);
-    return false;
-}
-
 static bool qemu_chr_is_busy(Chardev *s)
 {
     if (CHARDEV_IS_MUX(s)) {
@@ -503,84 +308,6 @@ static bool qemu_chr_is_busy(Chardev *s)
     }
 }
 
-void qemu_chr_fe_deinit(CharBackend *b)
-{
-    assert(b);
-
-    if (b->chr) {
-        qemu_chr_fe_set_handlers(b, NULL, NULL, NULL, NULL, NULL, true);
-        if (b->chr->be == b) {
-            b->chr->be = NULL;
-        }
-        if (CHARDEV_IS_MUX(b->chr)) {
-            MuxChardev *d = MUX_CHARDEV(b->chr);
-            d->backends[b->tag] = NULL;
-        }
-        b->chr = NULL;
-    }
-}
-
-void qemu_chr_fe_set_handlers(CharBackend *b,
-                              IOCanReadHandler *fd_can_read,
-                              IOReadHandler *fd_read,
-                              IOEventHandler *fd_event,
-                              void *opaque,
-                              GMainContext *context,
-                              bool set_open)
-{
-    Chardev *s;
-    ChardevClass *cc;
-    int fe_open;
-
-    s = b->chr;
-    if (!s) {
-        return;
-    }
-
-    cc = CHARDEV_GET_CLASS(s);
-    if (!opaque && !fd_can_read && !fd_read && !fd_event) {
-        fe_open = 0;
-        remove_fd_in_watch(s);
-    } else {
-        fe_open = 1;
-    }
-    b->chr_can_read = fd_can_read;
-    b->chr_read = fd_read;
-    b->chr_event = fd_event;
-    b->opaque = opaque;
-    if (cc->chr_update_read_handler) {
-        cc->chr_update_read_handler(s, context);
-    }
-
-    if (set_open) {
-        qemu_chr_fe_set_open(b, fe_open);
-    }
-
-    if (fe_open) {
-        qemu_chr_fe_take_focus(b);
-        /* We're connecting to an already opened device, so let's make sure we
-           also get the open event */
-        if (s->be_open) {
-            qemu_chr_be_event(s, CHR_EVENT_OPENED);
-        }
-    }
-
-    if (CHARDEV_IS_MUX(s)) {
-        mux_chr_set_handlers(s, context);
-    }
-}
-
-void qemu_chr_fe_take_focus(CharBackend *b)
-{
-    if (!b->chr) {
-        return;
-    }
-
-    if (CHARDEV_IS_MUX(b->chr)) {
-        mux_set_focus(b->chr, b->tag);
-    }
-}
-
 int qemu_chr_wait_connected(Chardev *chr, Error **errp)
 {
     ChardevClass *cc = CHARDEV_GET_CLASS(chr);
@@ -592,16 +319,6 @@ int qemu_chr_wait_connected(Chardev *chr, Error **errp)
     return 0;
 }
 
-int qemu_chr_fe_wait_connected(CharBackend *be, Error **errp)
-{
-    if (!be->chr) {
-        error_setg(errp, "missing associated backend");
-        return -1;
-    }
-
-    return qemu_chr_wait_connected(be->chr, errp);
-}
-
 QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename)
 {
     char host[65], port[33], width[8], height[8];
@@ -978,64 +695,6 @@ Chardev *qemu_chr_new(const char *label, const char *filename)
     return chr;
 }
 
-void qemu_chr_fe_set_echo(CharBackend *be, bool echo)
-{
-    Chardev *chr = be->chr;
-
-    if (chr && CHARDEV_GET_CLASS(chr)->chr_set_echo) {
-        CHARDEV_GET_CLASS(chr)->chr_set_echo(chr, echo);
-    }
-}
-
-void qemu_chr_fe_set_open(CharBackend *be, int fe_open)
-{
-    Chardev *chr = be->chr;
-
-    if (!chr) {
-        return;
-    }
-
-    if (be->fe_open == fe_open) {
-        return;
-    }
-    be->fe_open = fe_open;
-    if (CHARDEV_GET_CLASS(chr)->chr_set_fe_open) {
-        CHARDEV_GET_CLASS(chr)->chr_set_fe_open(chr, fe_open);
-    }
-}
-
-guint qemu_chr_fe_add_watch(CharBackend *be, GIOCondition cond,
-                            GIOFunc func, void *user_data)
-{
-    Chardev *s = be->chr;
-    GSource *src;
-    guint tag;
-
-    if (!s || CHARDEV_GET_CLASS(s)->chr_add_watch == NULL) {
-        return 0;
-    }
-
-    src = CHARDEV_GET_CLASS(s)->chr_add_watch(s, cond);
-    if (!src) {
-        return 0;
-    }
-
-    g_source_set_callback(src, (GSourceFunc)func, user_data, NULL);
-    tag = g_source_attach(src, NULL);
-    g_source_unref(src);
-
-    return tag;
-}
-
-void qemu_chr_fe_disconnect(CharBackend *be)
-{
-    Chardev *chr = be->chr;
-
-    if (chr && CHARDEV_GET_CLASS(chr)->chr_disconnect) {
-        CHARDEV_GET_CLASS(chr)->chr_disconnect(chr);
-    }
-}
-
 static int qmp_query_chardev_foreach(Object *obj, void *data)
 {
     Chardev *chr = CHARDEV(obj);
diff --git a/gdbstub.c b/gdbstub.c
index 6515c635dc..4251d23898 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -26,6 +26,7 @@
 #else
 #include "monitor/monitor.h"
 #include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "sysemu/sysemu.h"
 #include "exec/gdbstub.h"
 #endif
diff --git a/hw/arm/omap2.c b/hw/arm/omap2.c
index 566749a9eb..4b4c024693 100644
--- a/hw/arm/omap2.c
+++ b/hw/arm/omap2.c
@@ -30,7 +30,7 @@
 #include "hw/arm/omap.h"
 #include "sysemu/sysemu.h"
 #include "qemu/timer.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "hw/block/flash.h"
 #include "hw/arm/soc_dma.h"
 #include "hw/sysbus.h"
diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
index 0d43cc707c..629e6c64e6 100644
--- a/hw/arm/pxa2xx.c
+++ b/hw/arm/pxa2xx.c
@@ -17,7 +17,7 @@
 #include "hw/char/serial.h"
 #include "hw/i2c/i2c.h"
 #include "hw/ssi/ssi.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "sysemu/block-backend.h"
 #include "sysemu/blockdev.h"
 #include "qemu/cutils.h"
diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c
index 967caea749..7683edc9e5 100644
--- a/hw/arm/strongarm.c
+++ b/hw/arm/strongarm.c
@@ -34,6 +34,7 @@
 #include "strongarm.h"
 #include "qemu/error-report.h"
 #include "hw/arm/arm.h"
+#include "chardev/char-fe.h"
 #include "chardev/char-serial.h"
 #include "sysemu/sysemu.h"
 #include "hw/ssi/ssi.h"
diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
index 4bfc185376..4a2c124104 100644
--- a/hw/char/cadence_uart.c
+++ b/hw/char/cadence_uart.c
@@ -23,6 +23,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/sysbus.h"
+#include "chardev/char-fe.h"
 #include "chardev/char-serial.h"
 #include "qemu/timer.h"
 #include "qemu/log.h"
diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c
index 77d91c8558..762e3d8ada 100644
--- a/hw/char/debugcon.c
+++ b/hw/char/debugcon.c
@@ -27,7 +27,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "hw/hw.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "hw/isa/isa.h"
 #include "hw/i386/pc.h"
 
diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c
index 4f1dec7f1d..34306e11ff 100644
--- a/hw/char/digic-uart.c
+++ b/hw/char/digic-uart.c
@@ -29,7 +29,7 @@
 #include "qemu/osdep.h"
 #include "hw/hw.h"
 #include "hw/sysbus.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "qemu/log.h"
 
 #include "hw/char/digic-uart.h"
diff --git a/hw/char/escc.c b/hw/char/escc.c
index 81d792cb47..3f787632c7 100644
--- a/hw/char/escc.c
+++ b/hw/char/escc.c
@@ -26,6 +26,7 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "hw/char/escc.h"
+#include "chardev/char-fe.h"
 #include "chardev/char-serial.h"
 #include "ui/console.h"
 #include "ui/input.h"
diff --git a/hw/char/etraxfs_ser.c b/hw/char/etraxfs_ser.c
index 33e3e16397..c1fba9f50f 100644
--- a/hw/char/etraxfs_ser.c
+++ b/hw/char/etraxfs_ser.c
@@ -24,7 +24,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/sysbus.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "qemu/log.h"
 
 #define D(x)
diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c
index d93125645a..b51d44a321 100644
--- a/hw/char/exynos4210_uart.c
+++ b/hw/char/exynos4210_uart.c
@@ -23,6 +23,7 @@
 #include "hw/sysbus.h"
 #include "qemu/error-report.h"
 #include "sysemu/sysemu.h"
+#include "chardev/char-fe.h"
 #include "chardev/char-serial.h"
 
 #include "hw/arm/exynos4210.h"
diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c
index 39d1133c61..32d98edf49 100644
--- a/hw/char/grlib_apbuart.c
+++ b/hw/char/grlib_apbuart.c
@@ -24,7 +24,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/sysbus.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 
 #include "trace.h"
 
diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c
index b8a3c92c9e..337a3e566a 100644
--- a/hw/char/ipoctal232.c
+++ b/hw/char/ipoctal232.c
@@ -11,7 +11,7 @@
 #include "qemu/osdep.h"
 #include "hw/ipack/ipack.h"
 #include "qemu/bitops.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 
 /* #define DEBUG_IPOCTAL */
 
diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c
index 6b0633e518..3948dcd332 100644
--- a/hw/char/lm32_juart.c
+++ b/hw/char/lm32_juart.c
@@ -21,7 +21,7 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "trace.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 
 #include "hw/char/lm32_juart.h"
 
diff --git a/hw/char/lm32_uart.c b/hw/char/lm32_uart.c
index a7610c28ce..cff8c38f90 100644
--- a/hw/char/lm32_uart.c
+++ b/hw/char/lm32_uart.c
@@ -26,7 +26,7 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "trace.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "qemu/error-report.h"
 
 enum {
diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c
index b639b53c83..fe12ad5ccb 100644
--- a/hw/char/mcf_uart.c
+++ b/hw/char/mcf_uart.c
@@ -9,7 +9,7 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "hw/m68k/mcf.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "exec/address-spaces.h"
 #include "qapi/error.h"
 
diff --git a/hw/char/milkymist-uart.c b/hw/char/milkymist-uart.c
index 5ef847c5eb..e19d0f6520 100644
--- a/hw/char/milkymist-uart.c
+++ b/hw/char/milkymist-uart.c
@@ -25,7 +25,7 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "trace.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "qemu/error-report.h"
 
 enum {
diff --git a/hw/char/parallel.c b/hw/char/parallel.c
index 1d6c6e9f33..75a1a2f55e 100644
--- a/hw/char/parallel.c
+++ b/hw/char/parallel.c
@@ -26,6 +26,7 @@
 #include "qapi/error.h"
 #include "hw/hw.h"
 #include "chardev/char-parallel.h"
+#include "chardev/char-fe.h"
 #include "hw/isa/isa.h"
 #include "hw/i386/pc.h"
 #include "sysemu/sysemu.h"
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
index 1757035bb3..33802f00c8 100644
--- a/hw/char/pl011.c
+++ b/hw/char/pl011.c
@@ -9,7 +9,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/sysbus.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "qemu/log.h"
 #include "trace.h"
 
diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c
index 755d514188..1b15046690 100644
--- a/hw/char/sclpconsole-lm.c
+++ b/hw/char/sclpconsole-lm.c
@@ -17,7 +17,7 @@
 #include "hw/qdev.h"
 #include "qemu/thread.h"
 #include "qemu/error-report.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 
 #include "hw/s390x/sclp.h"
 #include "hw/s390x/event-facility.h"
diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c
index 0fd3cb4887..4a107a268d 100644
--- a/hw/char/sclpconsole.c
+++ b/hw/char/sclpconsole.c
@@ -19,7 +19,7 @@
 
 #include "hw/s390x/sclp.h"
 #include "hw/s390x/event-facility.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 
 typedef struct ASCIIConsoleData {
     EventBufferHeader ebh;
diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c
index 80c7696d8d..ca9816d045 100644
--- a/hw/char/sh_serial.c
+++ b/hw/char/sh_serial.c
@@ -27,7 +27,7 @@
 #include "qemu/osdep.h"
 #include "hw/hw.h"
 #include "hw/sh4/sh.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "exec/address-spaces.h"
 #include "qapi/error.h"
 
diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c
index 2317e45404..8f02f3a612 100644
--- a/hw/char/spapr_vty.c
+++ b/hw/char/spapr_vty.c
@@ -4,7 +4,7 @@
 #include "qemu-common.h"
 #include "cpu.h"
 #include "hw/qdev.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "hw/ppc/spapr.h"
 #include "hw/ppc/spapr_vio.h"
 
diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c
index c043104185..7b10a04f18 100644
--- a/hw/char/terminal3270.c
+++ b/hw/char/terminal3270.c
@@ -13,7 +13,7 @@
 
 #include "qemu/osdep.h"
 #include "qapi/error.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "hw/s390x/3270-ccw.h"
 
 /* Enough spaces for different window sizes. */
diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c
index 8418db6a07..0cb1668c8a 100644
--- a/hw/char/virtio-console.c
+++ b/hw/char/virtio-console.c
@@ -11,7 +11,7 @@
  */
 
 #include "qemu/osdep.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "qemu/error-report.h"
 #include "trace.h"
 #include "hw/virtio/virtio-serial.h"
diff --git a/hw/char/xen_console.c b/hw/char/xen_console.c
index 1cdbe59f8a..cb849c2e3e 100644
--- a/hw/char/xen_console.c
+++ b/hw/char/xen_console.c
@@ -25,7 +25,7 @@
 
 #include "qapi/error.h"
 #include "hw/hw.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "hw/xen/xen_backend.h"
 #include "qapi/error.h"
 
diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c
index bcebdae3da..71ed2fc1be 100644
--- a/hw/char/xilinx_uartlite.c
+++ b/hw/char/xilinx_uartlite.c
@@ -24,7 +24,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/sysbus.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 
 #define DUART(x)
 
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 4da0c6a24e..a549d39030 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -20,7 +20,7 @@
 #include "hw/block/block.h"
 #include "net/hub.h"
 #include "qapi/visitor.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "sysemu/iothread.h"
 
 static void get_pointer(Object *obj, Visitor *v, Property *prop,
diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c
index 35285383fd..329b03e17f 100644
--- a/hw/ipmi/ipmi_bmc_extern.c
+++ b/hw/ipmi/ipmi_bmc_extern.c
@@ -30,7 +30,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "qemu/timer.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "sysemu/sysemu.h"
 #include "hw/ipmi/ipmi.h"
 
diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
index cd064dcf8c..6367d041f0 100644
--- a/hw/misc/ivshmem.c
+++ b/hw/misc/ivshmem.c
@@ -29,7 +29,7 @@
 #include "qemu/error-report.h"
 #include "qemu/event_notifier.h"
 #include "qom/object_interfaces.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "sysemu/hostmem.h"
 #include "sysemu/qtest.h"
 #include "qapi/visitor.h"
diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
index c2096b25ab..fed3683a50 100644
--- a/hw/usb/ccid-card-passthru.c
+++ b/hw/usb/ccid-card-passthru.c
@@ -9,7 +9,7 @@
  */
 
 #include "qemu/osdep.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "qemu/error-report.h"
 #include "qemu/sockets.h"
 #include "ccid.h"
diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
index a145c919e9..17d650f35a 100644
--- a/hw/usb/dev-serial.c
+++ b/hw/usb/dev-serial.c
@@ -16,6 +16,7 @@
 #include "hw/usb.h"
 #include "hw/usb/desc.h"
 #include "chardev/char-serial.h"
+#include "chardev/char-fe.h"
 
 //#define DEBUG_Serial
 
diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
index c862c1adea..d2b3a84a03 100644
--- a/hw/usb/redirect.c
+++ b/hw/usb/redirect.c
@@ -33,7 +33,7 @@
 #include "qapi/qmp/qerror.h"
 #include "qemu/error-report.h"
 #include "qemu/iov.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 
 #include <usbredirparser.h>
 #include <usbredirfilter.h>
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index ff4cee82e6..e60a7a1cfe 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -13,7 +13,7 @@
 #include "hw/virtio/vhost.h"
 #include "hw/virtio/vhost-backend.h"
 #include "hw/virtio/virtio-net.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "sysemu/kvm.h"
 #include "qemu/error-report.h"
 #include "qemu/sockets.h"
diff --git a/monitor.c b/monitor.c
index 29b71ff2bc..37f8d5645f 100644
--- a/monitor.c
+++ b/monitor.c
@@ -35,7 +35,7 @@
 #include "exec/gdbstub.h"
 #include "net/net.h"
 #include "net/slirp.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "ui/qemu-spice.h"
 #include "sysemu/numa.h"
 #include "monitor/monitor.h"
diff --git a/net/colo-compare.c b/net/colo-compare.c
index 619335d5e8..2fb75bcca4 100644
--- a/net/colo-compare.c
+++ b/net/colo-compare.c
@@ -25,7 +25,7 @@
 #include "qom/object.h"
 #include "qemu/typedefs.h"
 #include "net/queue.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "qemu/sockets.h"
 #include "qapi-visit.h"
 #include "net/colo.h"
diff --git a/net/filter-mirror.c b/net/filter-mirror.c
index 7adc2c10d2..a20330475c 100644
--- a/net/filter-mirror.c
+++ b/net/filter-mirror.c
@@ -20,7 +20,7 @@
 #include "qemu/main-loop.h"
 #include "qemu/error-report.h"
 #include "trace.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "qemu/iov.h"
 #include "qemu/sockets.h"
 
diff --git a/net/slirp.c b/net/slirp.c
index af3e8b22ac..6a6d727999 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -37,7 +37,7 @@
 #include "qemu/sockets.h"
 #include "slirp/libslirp.h"
 #include "slirp/ip6.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "sysemu/sysemu.h"
 #include "qemu/cutils.h"
 #include "qapi/error.h"
diff --git a/net/vhost-user.c b/net/vhost-user.c
index 77d2ce22a6..526290d8c1 100644
--- a/net/vhost-user.c
+++ b/net/vhost-user.c
@@ -12,7 +12,7 @@
 #include "clients.h"
 #include "net/vhost_net.h"
 #include "net/vhost-user.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "qemu/config-file.h"
 #include "qemu/error-report.h"
 #include "qmp-commands.h"
diff --git a/qtest.c b/qtest.c
index dbf70a7018..9a5d1dc50d 100644
--- a/qtest.c
+++ b/qtest.c
@@ -17,7 +17,7 @@
 #include "cpu.h"
 #include "sysemu/qtest.h"
 #include "hw/qdev.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "exec/ioport.h"
 #include "exec/memory.h"
 #include "hw/irq.h"
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 3b92cb54ce..e79345bdfc 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -25,7 +25,7 @@
 #include "qemu-common.h"
 #include "qemu/timer.h"
 #include "qemu/error-report.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "slirp.h"
 #include "hw/hw.h"
 #include "qemu/cutils.h"
diff --git a/tests/test-char.c b/tests/test-char.c
index 9340c55058..d7ecf1056a 100644
--- a/tests/test-char.c
+++ b/tests/test-char.c
@@ -4,7 +4,7 @@
 #include "qemu-common.h"
 #include "qemu/config-file.h"
 #include "qemu/sockets.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "sysemu/sysemu.h"
 #include "qapi/error.h"
 #include "qom/qom-qobject.h"
diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
index acc392d046..4ca11ae28d 100644
--- a/tests/vhost-user-test.c
+++ b/tests/vhost-user-test.c
@@ -16,7 +16,7 @@
 #include "qemu/option.h"
 #include "qemu/range.h"
 #include "qemu/sockets.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "sysemu/sysemu.h"
 #include "libqos/libqos.h"
 #include "libqos/pci-pc.h"
diff --git a/ui/console.c b/ui/console.c
index 6cf795a23d..d914cced53 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -27,7 +27,7 @@
 #include "hw/qdev-core.h"
 #include "qemu/timer.h"
 #include "qmp-commands.h"
-#include "chardev/char.h"
+#include "chardev/char-fe.h"
 #include "trace.h"
 #include "exec/memory.h"
 
diff --git a/chardev/Makefile.objs b/chardev/Makefile.objs
index 1feda0f0ed..e0b37dbfd8 100644
--- a/chardev/Makefile.objs
+++ b/chardev/Makefile.objs
@@ -1,6 +1,7 @@
 chardev-obj-y += char.o
 chardev-obj-$(CONFIG_WIN32) += char-console.o
 chardev-obj-$(CONFIG_POSIX) += char-fd.o
+chardev-obj-y += char-fe.o
 chardev-obj-y += char-file.o
 chardev-obj-y += char-io.o
 chardev-obj-y += char-mux.o
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 12/14] char: rename functions that are not part of fe
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
                   ` (10 preceding siblings ...)
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 11/14] char: move CharBackend handling in char-fe unit Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 13/14] char: make chr_fe_deinit() optionaly delete backend Marc-André Lureau
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

There is no clear reason to have those functions associated with
frontend.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 chardev/char.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/chardev/char.c b/chardev/char.c
index 3d5316166e..4e3808aefc 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -66,8 +66,7 @@ void qemu_chr_be_event(Chardev *s, int event)
 
 /* Not reporting errors from writing to logfile, as logs are
  * defined to be "best effort" only */
-static void qemu_chr_fe_write_log(Chardev *s,
-                                  const uint8_t *buf, size_t len)
+static void qemu_chr_write_log(Chardev *s, const uint8_t *buf, size_t len)
 {
     size_t done = 0;
     ssize_t ret;
@@ -91,9 +90,9 @@ static void qemu_chr_fe_write_log(Chardev *s,
     }
 }
 
-static int qemu_chr_fe_write_buffer(Chardev *s,
-                                    const uint8_t *buf, int len,
-                                    int *offset, bool write_all)
+static int qemu_chr_write_buffer(Chardev *s,
+                                 const uint8_t *buf, int len,
+                                 int *offset, bool write_all)
 {
     ChardevClass *cc = CHARDEV_GET_CLASS(s);
     int res = 0;
@@ -118,7 +117,7 @@ static int qemu_chr_fe_write_buffer(Chardev *s,
         }
     }
     if (*offset > 0) {
-        qemu_chr_fe_write_log(s, buf, *offset);
+        qemu_chr_write_log(s, buf, *offset);
     }
     qemu_mutex_unlock(&s->chr_write_lock);
 
@@ -133,11 +132,11 @@ int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all)
     if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_PLAY) {
         replay_char_write_event_load(&res, &offset);
         assert(offset <= len);
-        qemu_chr_fe_write_buffer(s, buf, offset, &offset, true);
+        qemu_chr_write_buffer(s, buf, offset, &offset, true);
         return res;
     }
 
-    res = qemu_chr_fe_write_buffer(s, buf, len, &offset, write_all);
+    res = qemu_chr_write_buffer(s, buf, len, &offset, write_all);
 
     if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
         replay_char_write_event_save(res, offset);
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 13/14] char: make chr_fe_deinit() optionaly delete backend
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
                   ` (11 preceding siblings ...)
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 12/14] char: rename functions that are not part of fe Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-31 13:09   ` Marc-André Lureau
  2017-06-02  4:52   ` Philippe Mathieu-Daudé
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 14/14] char: move char devices to chardev/ Marc-André Lureau
  2017-05-29  9:23 ` [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups no-reply
  14 siblings, 2 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

This simplifies removing a backend for a frontend user (no need to
retrive the associated driver and seperate delete call etc).

NB: many frontends have questionable handling of ending a chardev. They
should probably delete the backend to prevent broken reusage.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/chardev/char-fe.h        |  6 ++++--
 backends/rng-egd.c               |  2 +-
 chardev/char-fe.c                |  5 ++++-
 chardev/char-mux.c               |  2 +-
 gdbstub.c                        | 15 ++-------------
 hw/char/serial.c                 |  2 +-
 hw/char/xen_console.c            |  2 +-
 hw/core/qdev-properties-system.c |  2 +-
 hw/usb/ccid-card-passthru.c      |  5 +----
 hw/usb/redirect.c                |  4 +---
 monitor.c                        |  2 +-
 net/colo-compare.c               |  8 +++-----
 net/filter-mirror.c              |  6 +++---
 net/vhost-user.c                 |  5 +----
 tests/test-char.c                | 22 ++++++++--------------
 tests/vhost-user-test.c          |  4 +---
 16 files changed, 34 insertions(+), 58 deletions(-)

diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h
index bd82093218..2cbb262f66 100644
--- a/include/chardev/char-fe.h
+++ b/include/chardev/char-fe.h
@@ -30,12 +30,14 @@ bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp);
 
 /**
  * @qemu_chr_fe_deinit:
- *
+ * @b: a CharBackend
+ * @del: if true, delete the chardev backend
+*
  * Dissociate the CharBackend from the Chardev.
  *
  * Safe to call without associated Chardev.
  */
-void qemu_chr_fe_deinit(CharBackend *b);
+void qemu_chr_fe_deinit(CharBackend *b, bool del);
 
 /**
  * @qemu_chr_fe_get_driver:
diff --git a/backends/rng-egd.c b/backends/rng-egd.c
index ad3e1e5edf..e7ce2cac80 100644
--- a/backends/rng-egd.c
+++ b/backends/rng-egd.c
@@ -145,7 +145,7 @@ static void rng_egd_finalize(Object *obj)
 {
     RngEgd *s = RNG_EGD(obj);
 
-    qemu_chr_fe_deinit(&s->chr);
+    qemu_chr_fe_deinit(&s->chr, false);
     g_free(s->chr_name);
 }
 
diff --git a/chardev/char-fe.c b/chardev/char-fe.c
index 341221d029..3f90f0567c 100644
--- a/chardev/char-fe.c
+++ b/chardev/char-fe.c
@@ -211,7 +211,7 @@ unavailable:
     return false;
 }
 
-void qemu_chr_fe_deinit(CharBackend *b)
+void qemu_chr_fe_deinit(CharBackend *b, bool del)
 {
     assert(b);
 
@@ -224,6 +224,9 @@ void qemu_chr_fe_deinit(CharBackend *b)
             MuxChardev *d = MUX_CHARDEV(b->chr);
             d->backends[b->tag] = NULL;
         }
+        if (del) {
+            object_unparent(OBJECT(b->chr));
+        }
         b->chr = NULL;
     }
 }
diff --git a/chardev/char-mux.c b/chardev/char-mux.c
index 106c682e7f..08570b915e 100644
--- a/chardev/char-mux.c
+++ b/chardev/char-mux.c
@@ -266,7 +266,7 @@ static void char_mux_finalize(Object *obj)
             be->chr = NULL;
         }
     }
-    qemu_chr_fe_deinit(&d->chr);
+    qemu_chr_fe_deinit(&d->chr, false);
 }
 
 void mux_chr_set_handlers(Chardev *chr, GMainContext *context)
diff --git a/gdbstub.c b/gdbstub.c
index 4251d23898..ec4e4b25be 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -1678,9 +1678,6 @@ void gdb_exit(CPUArchState *env, int code)
 {
   GDBState *s;
   char buf[4];
-#ifndef CONFIG_USER_ONLY
-  Chardev *chr;
-#endif
 
   s = gdbserver_state;
   if (!s) {
@@ -1690,19 +1687,13 @@ void gdb_exit(CPUArchState *env, int code)
   if (gdbserver_fd < 0 || s->fd < 0) {
       return;
   }
-#else
-  chr = qemu_chr_fe_get_driver(&s->chr);
-  if (!chr) {
-      return;
-  }
 #endif
 
   snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
   put_packet(s, buf);
 
 #ifndef CONFIG_USER_ONLY
-  qemu_chr_fe_deinit(&s->chr);
-  object_unparent(OBJECT(chr));
+  qemu_chr_fe_deinit(&s->chr, true);
 #endif
 }
 
@@ -2002,9 +1993,7 @@ int gdbserver_start(const char *device)
                                    NULL, &error_abort);
         monitor_init(mon_chr, 0);
     } else {
-        if (qemu_chr_fe_get_driver(&s->chr)) {
-            object_unparent(OBJECT(qemu_chr_fe_get_driver(&s->chr)));
-        }
+        qemu_chr_fe_deinit(&s->chr, true);
         mon_chr = s->mon_chr;
         memset(s, 0, sizeof(GDBState));
         s->mon_chr = mon_chr;
diff --git a/hw/char/serial.c b/hw/char/serial.c
index 23e5fe9d18..e1f12507bf 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -905,7 +905,7 @@ void serial_realize_core(SerialState *s, Error **errp)
 
 void serial_exit_core(SerialState *s)
 {
-    qemu_chr_fe_deinit(&s->chr);
+    qemu_chr_fe_deinit(&s->chr, false);
 
     timer_del(s->modem_status_poll);
     timer_free(s->modem_status_poll);
diff --git a/hw/char/xen_console.c b/hw/char/xen_console.c
index cb849c2e3e..f9af8cadf4 100644
--- a/hw/char/xen_console.c
+++ b/hw/char/xen_console.c
@@ -261,7 +261,7 @@ static void con_disconnect(struct XenDevice *xendev)
 {
     struct XenConsole *con = container_of(xendev, struct XenConsole, xendev);
 
-    qemu_chr_fe_deinit(&con->chr);
+    qemu_chr_fe_deinit(&con->chr, false);
     xen_pv_unbind_evtchn(&con->xendev);
 
     if (con->sring) {
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index a549d39030..3bef41914d 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -225,7 +225,7 @@ static void release_chr(Object *obj, const char *name, void *opaque)
     Property *prop = opaque;
     CharBackend *be = qdev_get_prop_ptr(dev, prop);
 
-    qemu_chr_fe_deinit(be);
+    qemu_chr_fe_deinit(be, false);
 }
 
 PropertyInfo qdev_prop_chr = {
diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
index fed3683a50..ac1725eeae 100644
--- a/hw/usb/ccid-card-passthru.c
+++ b/hw/usb/ccid-card-passthru.c
@@ -264,10 +264,7 @@ static void ccid_card_vscard_handle_message(PassthruState *card,
 
 static void ccid_card_vscard_drop_connection(PassthruState *card)
 {
-    Chardev *chr = qemu_chr_fe_get_driver(&card->cs);
-
-    qemu_chr_fe_deinit(&card->cs);
-    object_unparent(OBJECT(chr));
+    qemu_chr_fe_deinit(&card->cs, true);
     card->vscard_in_pos = card->vscard_in_hdr = 0;
 }
 
diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
index d2b3a84a03..aa22d69216 100644
--- a/hw/usb/redirect.c
+++ b/hw/usb/redirect.c
@@ -1419,10 +1419,8 @@ static void usbredir_cleanup_device_queues(USBRedirDevice *dev)
 static void usbredir_unrealize(USBDevice *udev, Error **errp)
 {
     USBRedirDevice *dev = USB_REDIRECT(udev);
-    Chardev *chr = qemu_chr_fe_get_driver(&dev->cs);
 
-    qemu_chr_fe_deinit(&dev->cs);
-    object_unparent(OBJECT(chr));
+    qemu_chr_fe_deinit(&dev->cs, true);
 
     /* Note must be done after qemu_chr_close, as that causes a close event */
     qemu_bh_delete(dev->chardev_close_bh);
diff --git a/monitor.c b/monitor.c
index 37f8d5645f..75e7cd26d0 100644
--- a/monitor.c
+++ b/monitor.c
@@ -578,7 +578,7 @@ static void monitor_data_init(Monitor *mon)
 
 static void monitor_data_destroy(Monitor *mon)
 {
-    qemu_chr_fe_deinit(&mon->chr);
+    qemu_chr_fe_deinit(&mon->chr, false);
     if (monitor_is_qmp(mon)) {
         json_message_parser_destroy(&mon->qmp.parser);
     }
diff --git a/net/colo-compare.c b/net/colo-compare.c
index 2fb75bcca4..6d500e1dc4 100644
--- a/net/colo-compare.c
+++ b/net/colo-compare.c
@@ -801,11 +801,9 @@ static void colo_compare_finalize(Object *obj)
 {
     CompareState *s = COLO_COMPARE(obj);
 
-    qemu_chr_fe_set_handlers(&s->chr_pri_in, NULL, NULL, NULL, NULL,
-                             s->worker_context, true);
-    qemu_chr_fe_set_handlers(&s->chr_sec_in, NULL, NULL, NULL, NULL,
-                             s->worker_context, true);
-    qemu_chr_fe_deinit(&s->chr_out);
+    qemu_chr_fe_deinit(&s->chr_pri_in, false);
+    qemu_chr_fe_deinit(&s->chr_sec_in, false);
+    qemu_chr_fe_deinit(&s->chr_out, false);
 
     g_main_loop_quit(s->compare_loop);
     qemu_thread_join(&s->thread);
diff --git a/net/filter-mirror.c b/net/filter-mirror.c
index a20330475c..52d978fce2 100644
--- a/net/filter-mirror.c
+++ b/net/filter-mirror.c
@@ -178,15 +178,15 @@ static void filter_mirror_cleanup(NetFilterState *nf)
 {
     MirrorState *s = FILTER_MIRROR(nf);
 
-    qemu_chr_fe_deinit(&s->chr_out);
+    qemu_chr_fe_deinit(&s->chr_out, false);
 }
 
 static void filter_redirector_cleanup(NetFilterState *nf)
 {
     MirrorState *s = FILTER_REDIRECTOR(nf);
 
-    qemu_chr_fe_deinit(&s->chr_in);
-    qemu_chr_fe_deinit(&s->chr_out);
+    qemu_chr_fe_deinit(&s->chr_in, false);
+    qemu_chr_fe_deinit(&s->chr_out, false);
 }
 
 static void filter_mirror_setup(NetFilterState *nf, Error **errp)
diff --git a/net/vhost-user.c b/net/vhost-user.c
index 526290d8c1..a042ec6a34 100644
--- a/net/vhost-user.c
+++ b/net/vhost-user.c
@@ -151,10 +151,7 @@ static void vhost_user_cleanup(NetClientState *nc)
         s->vhost_net = NULL;
     }
     if (nc->queue_index == 0) {
-        Chardev *chr = qemu_chr_fe_get_driver(&s->chr);
-
-        qemu_chr_fe_deinit(&s->chr);
-        object_unparent(OBJECT(chr));
+        qemu_chr_fe_deinit(&s->chr, true);
     }
 
     qemu_purge_queued_packets(nc);
diff --git a/tests/test-char.c b/tests/test-char.c
index d7ecf1056a..dfe856cb85 100644
--- a/tests/test-char.c
+++ b/tests/test-char.c
@@ -97,8 +97,7 @@ static void char_stdio_test_subprocess(void)
     ret = qemu_chr_fe_write(&be, (void *)"buf", 4);
     g_assert_cmpint(ret, ==, 4);
 
-    qemu_chr_fe_deinit(&be);
-    object_unparent(OBJECT(chr));
+    qemu_chr_fe_deinit(&be, true);
 }
 
 static void char_stdio_test(void)
@@ -146,8 +145,7 @@ static void char_ringbuf_test(void)
     g_assert_cmpstr(data, ==, "");
     g_free(data);
 
-    qemu_chr_fe_deinit(&be);
-    object_unparent(OBJECT(chr));
+    qemu_chr_fe_deinit(&be, true);
 
     /* check alias */
     opts = qemu_opts_create(qemu_find_opts("chardev"), "memory-label",
@@ -231,9 +229,8 @@ static void char_mux_test(void)
     g_assert_cmpint(strlen(data), !=, 0);
     g_free(data);
 
-    qemu_chr_fe_deinit(&chr_be1);
-    qemu_chr_fe_deinit(&chr_be2);
-    object_unparent(OBJECT(chr));
+    qemu_chr_fe_deinit(&chr_be1, false);
+    qemu_chr_fe_deinit(&chr_be2, true);
 }
 
 typedef struct SocketIdleData {
@@ -396,8 +393,7 @@ static void char_pipe_test(void)
     g_assert_cmpint(fe.read_count, ==, 8);
     g_assert_cmpstr(fe.read_buf, ==, "pipe-in");
 
-    qemu_chr_fe_deinit(&be);
-    object_unparent(OBJECT(chr));
+    qemu_chr_fe_deinit(&be, true);
 
     g_assert(g_unlink(in) == 0);
     g_assert(g_unlink(out) == 0);
@@ -511,8 +507,7 @@ static void char_file_test(void)
 
         g_assert_cmpint(fe.read_count, ==, 8);
         g_assert_cmpstr(fe.read_buf, ==, "fifo-in");
-        qemu_chr_fe_deinit(&be);
-        object_unref(OBJECT(chr));
+        qemu_chr_fe_deinit(&be, true);
         g_unlink(fifo);
         g_free(fifo);
     }
@@ -549,7 +544,7 @@ static void char_null_test(void)
     error_free_or_abort(&err);
 
     /* deinit & reinit */
-    qemu_chr_fe_deinit(&be);
+    qemu_chr_fe_deinit(&be, false);
     qemu_chr_fe_init(&be, chr, &error_abort);
 
     qemu_chr_fe_set_open(&be, true);
@@ -563,8 +558,7 @@ static void char_null_test(void)
     ret = qemu_chr_fe_write(&be, (void *)"buf", 4);
     g_assert_cmpint(ret, ==, 4);
 
-    qemu_chr_fe_deinit(&be);
-    object_unparent(OBJECT(chr));
+    qemu_chr_fe_deinit(&be, true);
 }
 
 static void char_invalid_test(void)
diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
index 4ca11ae28d..b3cc045765 100644
--- a/tests/vhost-user-test.c
+++ b/tests/vhost-user-test.c
@@ -488,10 +488,8 @@ static inline void test_server_connect(TestServer *server)
 static gboolean _test_server_free(TestServer *server)
 {
     int i;
-    Chardev *chr = qemu_chr_fe_get_driver(&server->chr);
 
-    qemu_chr_fe_deinit(&server->chr);
-    object_unparent(OBJECT(chr));
+    qemu_chr_fe_deinit(&server->chr, true);
 
     for (i = 0; i < server->fds_num; i++) {
         close(server->fds[i]);
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH v2 14/14] char: move char devices to chardev/
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
                   ` (12 preceding siblings ...)
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 13/14] char: make chr_fe_deinit() optionaly delete backend Marc-André Lureau
@ 2017-05-29  8:45 ` Marc-André Lureau
  2017-05-29 21:31   ` Philippe Mathieu-Daudé
  2017-05-29  9:23 ` [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups no-reply
  14 siblings, 1 reply; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-29  8:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug, Marc-André Lureau

Suggested by Paolo Bonizini during series review.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 {backends => chardev}/baum.c         |  0
 {backends => chardev}/msmouse.c      |  0
 spice-qemu-char.c => chardev/spice.c |  2 +-
 {backends => chardev}/testdev.c      |  0
 {backends => chardev}/wctablet.c     |  0
 MAINTAINERS                          |  4 +---
 Makefile.objs                        |  4 ++--
 backends/Makefile.objs               |  4 ----
 backends/trace-events                | 10 ----------
 chardev/Makefile.objs                |  6 ++++++
 chardev/trace-events                 | 18 ++++++++++++++++++
 trace-events                         |  7 -------
 12 files changed, 28 insertions(+), 27 deletions(-)
 rename {backends => chardev}/baum.c (100%)
 rename {backends => chardev}/msmouse.c (100%)
 rename spice-qemu-char.c => chardev/spice.c (99%)
 rename {backends => chardev}/testdev.c (100%)
 rename {backends => chardev}/wctablet.c (100%)
 create mode 100644 chardev/trace-events

diff --git a/backends/baum.c b/chardev/baum.c
similarity index 100%
rename from backends/baum.c
rename to chardev/baum.c
diff --git a/backends/msmouse.c b/chardev/msmouse.c
similarity index 100%
rename from backends/msmouse.c
rename to chardev/msmouse.c
diff --git a/spice-qemu-char.c b/chardev/spice.c
similarity index 99%
rename from spice-qemu-char.c
rename to chardev/spice.c
index 1c6c2e3969..a312078812 100644
--- a/spice-qemu-char.c
+++ b/chardev/spice.c
@@ -1,5 +1,5 @@
 #include "qemu/osdep.h"
-#include "trace-root.h"
+#include "trace.h"
 #include "ui/qemu-spice.h"
 #include "chardev/char.h"
 #include "qemu/error-report.h"
diff --git a/backends/testdev.c b/chardev/testdev.c
similarity index 100%
rename from backends/testdev.c
rename to chardev/testdev.c
diff --git a/backends/wctablet.c b/chardev/wctablet.c
similarity index 100%
rename from backends/wctablet.c
rename to chardev/wctablet.c
diff --git a/MAINTAINERS b/MAINTAINERS
index 59e03436ad..7ee69d0e42 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1231,13 +1231,11 @@ M: Marc-André Lureau <marcandre.lureau@redhat.com>
 S: Maintained
 F: chardev/
 F: include/chardev/
-F: backends/msmouse.c
-F: backends/testdev.c
 
 Character Devices (Braille)
 M: Samuel Thibault <samuel.thibault@ens-lyon.org>
 S: Maintained
-F: backends/baum.c
+F: chardev/baum.c
 
 Command line option argument parsing
 M: Markus Armbruster <armbru@redhat.com>
diff --git a/Makefile.objs b/Makefile.objs
index 2100845ce2..0575802440 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -50,8 +50,6 @@ common-obj-$(CONFIG_LINUX) += fsdev/
 
 common-obj-y += migration/
 
-common-obj-$(CONFIG_SPICE) += spice-qemu-char.o
-
 common-obj-y += audio/
 common-obj-y += hw/
 common-obj-y += accel.o
@@ -70,6 +68,7 @@ common-obj-y += tpm.o
 common-obj-$(CONFIG_SLIRP) += slirp/
 
 common-obj-y += backends/
+common-obj-y += chardev/
 
 common-obj-$(CONFIG_SECCOMP) += qemu-seccomp.o
 
@@ -121,6 +120,7 @@ trace-events-subdirs += io
 trace-events-subdirs += migration
 trace-events-subdirs += block
 trace-events-subdirs += backends
+trace-events-subdirs += chardev
 trace-events-subdirs += hw/block
 trace-events-subdirs += hw/block/dataplane
 trace-events-subdirs += hw/char
diff --git a/backends/Makefile.objs b/backends/Makefile.objs
index 0e0f1567b2..0400799efd 100644
--- a/backends/Makefile.objs
+++ b/backends/Makefile.objs
@@ -1,10 +1,6 @@
 common-obj-y += rng.o rng-egd.o
 common-obj-$(CONFIG_POSIX) += rng-random.o
 
-common-obj-y += msmouse.o wctablet.o testdev.o
-common-obj-$(CONFIG_BRLAPI) += baum.o
-baum.o-cflags := $(SDL_CFLAGS)
-
 common-obj-$(CONFIG_TPM) += tpm.o
 
 common-obj-y += hostmem.o hostmem-ram.o
diff --git a/backends/trace-events b/backends/trace-events
index 8c3289a3f9..e69de29bb2 100644
--- a/backends/trace-events
+++ b/backends/trace-events
@@ -1,10 +0,0 @@
-# See docs/tracing.txt for syntax documentation.
-
-# backends/wctablet.c
-wct_init(void) ""
-wct_cmd_re(void) ""
-wct_cmd_st(void) ""
-wct_cmd_sp(void) ""
-wct_cmd_ts(int input) "0x%02x"
-wct_cmd_other(const char *cmd) "%s"
-wct_speed(int speed) "%d"
diff --git a/chardev/Makefile.objs b/chardev/Makefile.objs
index e0b37dbfd8..52a8127606 100644
--- a/chardev/Makefile.objs
+++ b/chardev/Makefile.objs
@@ -16,3 +16,9 @@ chardev-obj-y += char-stdio.o
 chardev-obj-y += char-udp.o
 chardev-obj-$(CONFIG_WIN32) += char-win.o
 chardev-obj-$(CONFIG_WIN32) += char-win-stdio.o
+
+common-obj-y += msmouse.o wctablet.o testdev.o
+common-obj-$(CONFIG_BRLAPI) += baum.o
+baum.o-cflags := $(SDL_CFLAGS)
+
+common-obj-$(CONFIG_SPICE) += spice.o
diff --git a/chardev/trace-events b/chardev/trace-events
new file mode 100644
index 0000000000..822dde668b
--- /dev/null
+++ b/chardev/trace-events
@@ -0,0 +1,18 @@
+# See docs/tracing.txt for syntax documentation.
+
+# chardev/wctablet.c
+wct_init(void) ""
+wct_cmd_re(void) ""
+wct_cmd_st(void) ""
+wct_cmd_sp(void) ""
+wct_cmd_ts(int input) "0x%02x"
+wct_cmd_other(const char *cmd) "%s"
+wct_speed(int speed) "%d"
+
+# chardev/spice.c
+spice_vmc_write(ssize_t out, int len) "spice wrote %zd of requested %d"
+spice_vmc_read(int bytes, int len) "spice read %d of requested %d"
+spice_vmc_register_interface(void *scd) "spice vmc registered interface %p"
+spice_vmc_unregister_interface(void *scd) "spice vmc unregistered interface %p"
+spice_vmc_event(int event) "spice vmc event %d"
+
diff --git a/trace-events b/trace-events
index e582d6315d..c785af294a 100644
--- a/trace-events
+++ b/trace-events
@@ -41,13 +41,6 @@ system_wakeup_request(int reason) "reason=%d"
 qemu_system_shutdown_request(void) ""
 qemu_system_powerdown_request(void) ""
 
-# spice-qemu-char.c
-spice_vmc_write(ssize_t out, int len) "spice wrote %zd of requested %d"
-spice_vmc_read(int bytes, int len) "spice read %d of requested %d"
-spice_vmc_register_interface(void *scd) "spice vmc registered interface %p"
-spice_vmc_unregister_interface(void *scd) "spice vmc unregistered interface %p"
-spice_vmc_event(int event) "spice vmc event %d"
-
 # monitor.c
 monitor_protocol_event_handler(uint32_t event, void *qdict) "event=%d data=%p"
 monitor_protocol_event_emit(uint32_t event, void *data) "event=%d data=%p"
-- 
2.13.0.91.g00982b8dd

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups
  2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
                   ` (13 preceding siblings ...)
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 14/14] char: move char devices to chardev/ Marc-André Lureau
@ 2017-05-29  9:23 ` no-reply
  2017-05-30 12:09   ` [Qemu-devel] [PATCH] char: cast ARRAY_SIZE() as signed to silent warning on empty array Philippe Mathieu-Daudé
  14 siblings, 1 reply; 33+ messages in thread
From: no-reply @ 2017-05-29  9:23 UTC (permalink / raw)
  To: marcandre.lureau; +Cc: famz, qemu-devel, pbonzini, f4bug

Hi,

This series failed automatic build test. Please find the testing commands and
their output below. If you have docker installed, you can probably reproduce it
locally.

Type: series
Subject: [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups
Message-id: 20170529084546.26500-1-marcandre.lureau@redhat.com

=== TEST SCRIPT BEGIN ===
#!/bin/bash
set -e
git submodule update --init dtc
# Let docker tests dump environment info
export SHOW_ENV=1
export J=8
time make docker-test-quick@centos6
time make docker-test-mingw@fedora
time make docker-test-build@min-glib
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
3f28b53 char: move char devices to chardev/
ec5b56e char: make chr_fe_deinit() optionaly delete backend
3e930bb char: rename functions that are not part of fe
d38aea4 char: move CharBackend handling in char-fe unit
364cb2a char: generalize qemu_chr_write_all()
a61ebe5 be-hci: use backend functions
299e2d0 chardev: serial & parallel declaration to own headers
108ddbe chardev: move headers to include/chardev
08b9c49 Remove/replace sysemu/char.h inclusion
7a29c6f char-win: close file handle except with console
7b62d78 char-win: rename hcom->file
aeefb52 char-win: rename win_chr_init/poll win_chr_serial_init/poll
66afe80 char-win: remove WinChardev.len
9874385 char-win: simplify win_chr_read()

=== OUTPUT BEGIN ===
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into '/var/tmp/patchew-tester-tmp-i0aq57qp/src/dtc'...
Submodule path 'dtc': checked out '558cd81bdd432769b59bff01240c44f82cfb1a9d'
  BUILD   centos6
make[1]: Entering directory '/var/tmp/patchew-tester-tmp-i0aq57qp/src'
  ARCHIVE qemu.tgz
  ARCHIVE dtc.tgz
  COPY    RUNNER
    RUN test-quick in qemu:centos6 
Packages installed:
SDL-devel-1.2.14-7.el6_7.1.x86_64
ccache-3.1.6-2.el6.x86_64
epel-release-6-8.noarch
gcc-4.4.7-17.el6.x86_64
git-1.7.1-4.el6_7.1.x86_64
glib2-devel-2.28.8-5.el6.x86_64
libfdt-devel-1.4.0-1.el6.x86_64
make-3.81-23.el6.x86_64
package g++ is not installed
pixman-devel-0.32.8-1.el6.x86_64
tar-1.23-15.el6_8.x86_64
zlib-devel-1.2.3-29.el6.x86_64

Environment variables:
PACKAGES=libfdt-devel ccache     tar git make gcc g++     zlib-devel glib2-devel SDL-devel pixman-devel     epel-release
HOSTNAME=61ffcd087a35
TERM=xterm
MAKEFLAGS= -j8
HISTSIZE=1000
J=8
USER=root
CCACHE_DIR=/var/tmp/ccache
EXTRA_CONFIGURE_OPTS=
V=
SHOW_ENV=1
MAIL=/var/spool/mail/root
PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
LANG=en_US.UTF-8
TARGET_LIST=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
TEST_DIR=/tmp/qemu-test
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
FEATURES= dtc
DEBUG=
G_BROKEN_FILENAMES=1
CCACHE_HASHDIR=
_=/usr/bin/env

Configure options:
--enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/var/tmp/qemu-build/install
No C++ compiler available; disabling C++ specific optional code
Install prefix    /var/tmp/qemu-build/install
BIOS directory    /var/tmp/qemu-build/install/share/qemu
binary directory  /var/tmp/qemu-build/install/bin
library directory /var/tmp/qemu-build/install/lib
module directory  /var/tmp/qemu-build/install/lib/qemu
libexec directory /var/tmp/qemu-build/install/libexec
include directory /var/tmp/qemu-build/install/include
config directory  /var/tmp/qemu-build/install/etc
local state directory   /var/tmp/qemu-build/install/var
Manual directory  /var/tmp/qemu-build/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /tmp/qemu-test/src
C compiler        cc
Host C compiler   cc
C++ compiler      
Objective-C compiler cc
ARFLAGS           rv
CFLAGS            -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g 
QEMU_CFLAGS       -I/usr/include/pixman-1   -I$(SRC_PATH)/dtc/libfdt -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include   -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv  -Wendif-labels -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-all
LDFLAGS           -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie -m64 -g 
make              make
install           install
python            python -B
smbd              /usr/sbin/smbd
module support    no
host CPU          x86_64
host big endian   no
target list       x86_64-softmmu aarch64-softmmu
tcg debug enabled no
gprof enabled     no
sparse enabled    no
strip binaries    yes
profiler          no
static build      no
pixman            system
SDL support       yes (1.2.14)
GTK support       no 
GTK GL support    no
VTE support       no 
TLS priority      NORMAL
GNUTLS support    no
GNUTLS rnd        no
libgcrypt         no
libgcrypt kdf     no
nettle            no 
nettle kdf        no
libtasn1          no
curses support    no
virgl support     no
curl support      no
mingw32 support   no
Audio drivers     oss
Block whitelist (rw) 
Block whitelist (ro) 
VirtFS support    no
VNC support       yes
VNC SASL support  no
VNC JPEG support  no
VNC PNG support   no
xen support       no
brlapi support    no
bluez  support    no
Documentation     no
PIE               yes
vde support       no
netmap support    no
Linux AIO support no
ATTR/XATTR support yes
Install blobs     yes
KVM support       yes
HAX support       no
RDMA support      no
TCG interpreter   no
fdt support       yes
preadv support    yes
fdatasync         yes
madvise           yes
posix_madvise     yes
libcap-ng support no
vhost-net support yes
vhost-scsi support yes
vhost-vsock support yes
Trace backends    log
spice support     no 
rbd support       no
xfsctl support    no
smartcard support no
libusb            no
usb net redir     no
OpenGL support    no
OpenGL dmabufs    no
libiscsi support  no
libnfs support    no
build guest agent yes
QGA VSS support   no
QGA w32 disk info no
QGA MSI support   no
seccomp support   no
coroutine backend ucontext
coroutine pool    yes
debug stack usage no
GlusterFS support no
gcov              gcov
gcov enabled      no
TPM support       yes
libssh2 support   no
TPM passthrough   yes
QOM debugging     yes
Live block migration yes
lzo support       no
snappy support    no
bzip2 support     no
NUMA host support no
tcmalloc support  no
jemalloc support  no
avx2 optimization no
replication support yes
VxHS block device no
  GEN     x86_64-softmmu/config-devices.mak.tmp
  GEN     aarch64-softmmu/config-devices.mak.tmp
mkdir -p dtc/libfdt
mkdir -p dtc/tests
  GEN     config-host.h
  GEN     qemu-options.def
  GEN     qapi-types.h
  GEN     qmp-commands.h
  GEN     qapi-visit.h
  GEN     qapi-event.h
  GEN     qmp-marshal.c
  GEN     x86_64-softmmu/config-devices.mak
  GEN     qapi-types.c
  GEN     aarch64-softmmu/config-devices.mak
  GEN     qapi-visit.c
  GEN     qapi-event.c
  GEN     qmp-introspect.h
  GEN     qmp-introspect.c
  GEN     trace/generated-tcg-tracers.h
  GEN     trace/generated-helpers-wrappers.h
  GEN     trace/generated-helpers.h
  GEN     trace/generated-helpers.c
  GEN     module_block.h
  GEN     tests/test-qapi-types.h
  GEN     tests/test-qapi-visit.h
  GEN     tests/test-qmp-commands.h
  GEN     tests/test-qapi-event.h
  GEN     tests/test-qmp-introspect.h
  GEN     trace-root.h
  GEN     util/trace.h
  GEN     crypto/trace.h
  GEN     io/trace.h
  GEN     migration/trace.h
  GEN     block/trace.h
  GEN     backends/trace.h
  GEN     chardev/trace.h
  GEN     hw/block/trace.h
  GEN     hw/block/dataplane/trace.h
  GEN     hw/char/trace.h
  GEN     hw/intc/trace.h
  GEN     hw/net/trace.h
  GEN     hw/virtio/trace.h
  GEN     hw/audio/trace.h
  GEN     hw/misc/trace.h
  GEN     hw/usb/trace.h
  GEN     hw/scsi/trace.h
  GEN     hw/nvram/trace.h
  GEN     hw/display/trace.h
  GEN     hw/input/trace.h
  GEN     hw/timer/trace.h
  GEN     hw/dma/trace.h
  GEN     hw/sparc/trace.h
  GEN     hw/sd/trace.h
  GEN     hw/isa/trace.h
  GEN     hw/mem/trace.h
  GEN     hw/i386/trace.h
  GEN     hw/i386/xen/trace.h
  GEN     hw/9pfs/trace.h
  GEN     hw/ppc/trace.h
  GEN     hw/pci/trace.h
  GEN     hw/s390x/trace.h
  GEN     hw/vfio/trace.h
  GEN     hw/acpi/trace.h
  GEN     hw/arm/trace.h
  GEN     hw/alpha/trace.h
  GEN     hw/xen/trace.h
  GEN     ui/trace.h
  GEN     audio/trace.h
  GEN     net/trace.h
  GEN     target/arm/trace.h
  GEN     target/i386/trace.h
  GEN     target/mips/trace.h
  GEN     target/sparc/trace.h
  GEN     target/s390x/trace.h
  GEN     target/ppc/trace.h
  GEN     qom/trace.h
  GEN     linux-user/trace.h
  GEN     trace-root.c
  GEN     qapi/trace.h
  GEN     util/trace.c
  GEN     crypto/trace.c
  GEN     io/trace.c
  GEN     migration/trace.c
  GEN     block/trace.c
  GEN     backends/trace.c
  GEN     chardev/trace.c
  GEN     hw/block/trace.c
  GEN     hw/block/dataplane/trace.c
  GEN     hw/char/trace.c
  GEN     hw/intc/trace.c
  GEN     hw/net/trace.c
  GEN     hw/virtio/trace.c
  GEN     hw/audio/trace.c
  GEN     hw/misc/trace.c
  GEN     hw/usb/trace.c
  GEN     hw/scsi/trace.c
  GEN     hw/nvram/trace.c
  GEN     hw/display/trace.c
  GEN     hw/input/trace.c
  GEN     hw/timer/trace.c
  GEN     hw/dma/trace.c
  GEN     hw/sparc/trace.c
  GEN     hw/sd/trace.c
  GEN     hw/isa/trace.c
  GEN     hw/mem/trace.c
  GEN     hw/i386/trace.c
  GEN     hw/i386/xen/trace.c
  GEN     hw/9pfs/trace.c
  GEN     hw/ppc/trace.c
  GEN     hw/pci/trace.c
  GEN     hw/s390x/trace.c
  GEN     hw/vfio/trace.c
  GEN     hw/acpi/trace.c
  GEN     hw/arm/trace.c
  GEN     hw/alpha/trace.c
  GEN     hw/xen/trace.c
  GEN     ui/trace.c
  GEN     audio/trace.c
  GEN     net/trace.c
  GEN     target/arm/trace.c
  GEN     target/i386/trace.c
  GEN     target/mips/trace.c
  GEN     target/sparc/trace.c
  GEN     target/s390x/trace.c
  GEN     target/ppc/trace.c
  GEN     qom/trace.c
  GEN     linux-user/trace.c
  GEN     qapi/trace.c
  GEN     config-all-devices.mak
	 DEP /tmp/qemu-test/src/dtc/tests/dumptrees.c
	 DEP /tmp/qemu-test/src/dtc/tests/trees.S
	 DEP /tmp/qemu-test/src/dtc/tests/testutils.c
	 DEP /tmp/qemu-test/src/dtc/tests/value-labels.c
	 DEP /tmp/qemu-test/src/dtc/tests/asm_tree_dump.c
	 DEP /tmp/qemu-test/src/dtc/tests/truncated_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/check_path.c
	 DEP /tmp/qemu-test/src/dtc/tests/overlay_bad_fixup.c
	 DEP /tmp/qemu-test/src/dtc/tests/overlay.c
	 DEP /tmp/qemu-test/src/dtc/tests/subnode_iterate.c
	 DEP /tmp/qemu-test/src/dtc/tests/integer-expressions.c
	 DEP /tmp/qemu-test/src/dtc/tests/property_iterate.c
	 DEP /tmp/qemu-test/src/dtc/tests/utilfdt_test.c
	 DEP /tmp/qemu-test/src/dtc/tests/path_offset_aliases.c
	 DEP /tmp/qemu-test/src/dtc/tests/add_subnode_with_nops.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_unordered.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtb_reverse.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_ordered.c
	 DEP /tmp/qemu-test/src/dtc/tests/extra-terminating-null.c
	 DEP /tmp/qemu-test/src/dtc/tests/incbin.c
	 DEP /tmp/qemu-test/src/dtc/tests/boot-cpuid.c
	 DEP /tmp/qemu-test/src/dtc/tests/phandle_format.c
	 DEP /tmp/qemu-test/src/dtc/tests/path-references.c
	 DEP /tmp/qemu-test/src/dtc/tests/references.c
	 DEP /tmp/qemu-test/src/dtc/tests/string_escapes.c
	 DEP /tmp/qemu-test/src/dtc/tests/propname_escapes.c
	 DEP /tmp/qemu-test/src/dtc/tests/appendprop2.c
	 DEP /tmp/qemu-test/src/dtc/tests/appendprop1.c
	 DEP /tmp/qemu-test/src/dtc/tests/del_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/del_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/setprop.c
	 DEP /tmp/qemu-test/src/dtc/tests/set_name.c
	 DEP /tmp/qemu-test/src/dtc/tests/rw_tree1.c
	 DEP /tmp/qemu-test/src/dtc/tests/open_pack.c
	 DEP /tmp/qemu-test/src/dtc/tests/nopulate.c
	 DEP /tmp/qemu-test/src/dtc/tests/mangle-layout.c
	 DEP /tmp/qemu-test/src/dtc/tests/move_and_save.c
	 DEP /tmp/qemu-test/src/dtc/tests/sw_tree1.c
	 DEP /tmp/qemu-test/src/dtc/tests/nop_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/nop_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/setprop_inplace.c
	 DEP /tmp/qemu-test/src/dtc/tests/stringlist.c
	 DEP /tmp/qemu-test/src/dtc/tests/addr_size_cells.c
	 DEP /tmp/qemu-test/src/dtc/tests/notfound.c
	 DEP /tmp/qemu-test/src/dtc/tests/sized_cells.c
	 DEP /tmp/qemu-test/src/dtc/tests/char_literal.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_alias.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_compatible.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_check_compatible.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_phandle.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_prop_value.c
	 DEP /tmp/qemu-test/src/dtc/tests/parent_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/supernode_atdepth_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_path.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_phandle.c
	 DEP /tmp/qemu-test/src/dtc/tests/getprop.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_name.c
	 DEP /tmp/qemu-test/src/dtc/tests/path_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/find_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/subnode_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/root_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_mem_rsv.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_overlay.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_addresses.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_empty_tree.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_strerror.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_rw.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_sw.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_wip.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_ro.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt.c
	 DEP /tmp/qemu-test/src/dtc/util.c
	 DEP /tmp/qemu-test/src/dtc/fdtput.c
	 DEP /tmp/qemu-test/src/dtc/fdtget.c
	 DEP /tmp/qemu-test/src/dtc/fdtdump.c
	 LEX convert-dtsv0-lexer.lex.c
	 DEP /tmp/qemu-test/src/dtc/srcpos.c
make[1]: flex: Command not found
	 BISON dtc-parser.tab.c
make[1]: bison: Command not found
	 LEX dtc-lexer.lex.c
make[1]: flex: Command not found
	 DEP /tmp/qemu-test/src/dtc/treesource.c
	 DEP /tmp/qemu-test/src/dtc/livetree.c
	 DEP /tmp/qemu-test/src/dtc/fstree.c
	 DEP /tmp/qemu-test/src/dtc/data.c
	 DEP /tmp/qemu-test/src/dtc/dtc.c
	 DEP /tmp/qemu-test/src/dtc/flattree.c
	 DEP /tmp/qemu-test/src/dtc/checks.c
	CHK version_gen.h
	 LEX convert-dtsv0-lexer.lex.c
make[1]: flex: Command not found
	 LEX dtc-lexer.lex.c
	 BISON dtc-parser.tab.c
make[1]: flex: Command not found
make[1]: bison: Command not found
	UPD version_gen.h
	 DEP /tmp/qemu-test/src/dtc/util.c
	 LEX convert-dtsv0-lexer.lex.c
	 BISON dtc-parser.tab.c
	 LEX dtc-lexer.lex.c
make[1]: flex: Command not found
make[1]: bison: Command not found
make[1]: flex: Command not found
	 CC libfdt/fdt.o
	 CC libfdt/fdt_ro.o
	 CC libfdt/fdt_wip.o
	 CC libfdt/fdt_sw.o
	 CC libfdt/fdt_rw.o
	 CC libfdt/fdt_strerror.o
	 CC libfdt/fdt_empty_tree.o
	 CC libfdt/fdt_addresses.o
	 CC libfdt/fdt_overlay.o
	 AR libfdt/libfdt.a
ar: creating libfdt/libfdt.a
a - libfdt/fdt.o
a - libfdt/fdt_ro.o
a - libfdt/fdt_wip.o
a - libfdt/fdt_sw.o
a - libfdt/fdt_rw.o
a - libfdt/fdt_strerror.o
a - libfdt/fdt_empty_tree.o
a - libfdt/fdt_addresses.o
a - libfdt/fdt_overlay.o
	 LEX convert-dtsv0-lexer.lex.c
make[1]: flex: Command not found
	 LEX dtc-lexer.lex.c
make[1]: flex: Command not found
	 BISON dtc-parser.tab.c
make[1]: bison: Command not found
  GEN     qga/qapi-generated/qga-qapi-types.h
  CC      tests/qemu-iotests/socket_scm_helper.o
  GEN     qga/qapi-generated/qga-qapi-visit.h
  GEN     qga/qapi-generated/qga-qmp-commands.h
  GEN     qga/qapi-generated/qga-qapi-visit.c
  GEN     qga/qapi-generated/qga-qmp-marshal.c
  CC      qmp-introspect.o
  GEN     qga/qapi-generated/qga-qapi-types.c
  CC      qapi-types.o
  CC      qapi-visit.o
  CC      qapi-event.o
  CC      qapi/qapi-visit-core.o
  CC      qapi/qapi-dealloc-visitor.o
  CC      qapi/qobject-input-visitor.o
  CC      qapi/qobject-output-visitor.o
  CC      qapi/qmp-registry.o
  CC      qapi/qmp-dispatch.o
  CC      qapi/string-input-visitor.o
  CC      qapi/opts-visitor.o
  CC      qapi/string-output-visitor.o
  CC      qapi/qapi-clone-visitor.o
  CC      qapi/qmp-event.o
  CC      qapi/qapi-util.o
  CC      qobject/qnull.o
  CC      qobject/qint.o
  CC      qobject/qstring.o
  CC      qobject/qdict.o
  CC      qobject/qlist.o
  CC      qobject/qfloat.o
  CC      qobject/qbool.o
  CC      qobject/qjson.o
  CC      qobject/json-lexer.o
  CC      qobject/json-streamer.o
  CC      qobject/qobject.o
  CC      trace/control.o
  CC      qobject/json-parser.o
  CC      util/osdep.o
  CC      trace/qmp.o
  CC      util/cutils.o
  CC      util/unicode.o
  CC      util/lockcnt.o
  CC      util/bufferiszero.o
  CC      util/qemu-timer-common.o
  CC      util/aiocb.o
  CC      util/async.o
  CC      util/thread-pool.o
  CC      util/qemu-timer.o
  CC      util/main-loop.o
  CC      util/iohandler.o
  CC      util/aio-posix.o
  CC      util/compatfd.o
  CC      util/event_notifier-posix.o
  CC      util/mmap-alloc.o
  CC      util/qemu-openpty.o
  CC      util/oslib-posix.o
  CC      util/qemu-thread-posix.o
  CC      util/memfd.o
  CC      util/envlist.o
  CC      util/path.o
  CC      util/module.o
  CC      util/host-utils.o
  CC      util/bitmap.o
  CC      util/bitops.o
  CC      util/hbitmap.o
  CC      util/fifo8.o
  CC      util/acl.o
  CC      util/error.o
  CC      util/qemu-error.o
  CC      util/id.o
  CC      util/iov.o
  CC      util/qemu-config.o
  CC      util/qemu-sockets.o
  CC      util/uri.o
  CC      util/notify.o
  CC      util/qemu-option.o
  CC      util/qemu-progress.o
  CC      util/keyval.o
  CC      util/hexdump.o
  CC      util/crc32c.o
  CC      util/uuid.o
  CC      util/getauxval.o
  CC      util/readline.o
  CC      util/rcu.o
  CC      util/throttle.o
  CC      util/qemu-coroutine.o
  CC      util/qemu-coroutine-lock.o
  CC      util/qemu-coroutine-sleep.o
  CC      util/qemu-coroutine-io.o
  CC      util/coroutine-ucontext.o
  CC      util/buffer.o
  CC      util/timed-average.o
  CC      util/base64.o
  CC      util/log.o
  CC      util/qdist.o
  CC      util/qht.o
  CC      util/range.o
  CC      util/systemd.o
  CC      trace-root.o
  CC      util/trace.o
  CC      crypto/trace.o
  CC      io/trace.o
  CC      migration/trace.o
  CC      block/trace.o
  CC      backends/trace.o
  CC      chardev/trace.o
  CC      hw/block/trace.o
  CC      hw/block/dataplane/trace.o
  CC      hw/char/trace.o
  CC      hw/intc/trace.o
  CC      hw/net/trace.o
  CC      hw/virtio/trace.o
  CC      hw/audio/trace.o
  CC      hw/misc/trace.o
  CC      hw/usb/trace.o
  CC      hw/scsi/trace.o
  CC      hw/nvram/trace.o
  CC      hw/display/trace.o
  CC      hw/input/trace.o
  CC      hw/timer/trace.o
  CC      hw/dma/trace.o
  CC      hw/sparc/trace.o
  CC      hw/sd/trace.o
  CC      hw/mem/trace.o
  CC      hw/isa/trace.o
  CC      hw/i386/trace.o
  CC      hw/i386/xen/trace.o
  CC      hw/9pfs/trace.o
  CC      hw/ppc/trace.o
  CC      hw/pci/trace.o
  CC      hw/vfio/trace.o
  CC      hw/acpi/trace.o
  CC      hw/s390x/trace.o
  CC      hw/arm/trace.o
  CC      hw/alpha/trace.o
  CC      hw/xen/trace.o
  CC      ui/trace.o
  CC      net/trace.o
  CC      audio/trace.o
  CC      target/arm/trace.o
  CC      target/i386/trace.o
  CC      target/mips/trace.o
  CC      target/sparc/trace.o
  CC      target/s390x/trace.o
  CC      target/ppc/trace.o
  CC      qom/trace.o
  CC      linux-user/trace.o
  CC      qapi/trace.o
  CC      crypto/pbkdf-stub.o
  CC      stubs/arch-query-cpu-def.o
  CC      stubs/arch-query-cpu-model-expansion.o
  CC      stubs/arch-query-cpu-model-baseline.o
  CC      stubs/arch-query-cpu-model-comparison.o
  CC      stubs/bdrv-next-monitor-owned.o
  CC      stubs/blk-commit-all.o
  CC      stubs/blockdev-close-all-bdrv-states.o
  CC      stubs/clock-warp.o
  CC      stubs/cpu-get-clock.o
  CC      stubs/cpu-get-icount.o
  CC      stubs/dump.o
  CC      stubs/error-printf.o
  CC      stubs/fdset.o
  CC      stubs/gdbstub.o
  CC      stubs/get-vm-name.o
  CC      stubs/iothread.o
  CC      stubs/iothread-lock.o
  CC      stubs/is-daemonized.o
  CC      stubs/machine-init-done.o
  CC      stubs/migr-blocker.o
  CC      stubs/monitor.o
  CC      stubs/notify-event.o
  CC      stubs/replay.o
  CC      stubs/qtest.o
  CC      stubs/runstate-check.o
  CC      stubs/set-fd-handler.o
  CC      stubs/sysbus.o
  CC      stubs/trace-control.o
  CC      stubs/uuid.o
  CC      stubs/slirp.o
  CC      stubs/vm-stop.o
  CC      stubs/vmstate.o
  CC      stubs/qmp_pc_dimm_device_list.o
  CC      stubs/target-monitor-defs.o
  CC      stubs/target-get-monitor-def.o
  CC      stubs/pc_madt_cpu_entry.o
  CC      stubs/vmgenid.o
  CC      stubs/xen-common.o
  CC      contrib/ivshmem-client/ivshmem-client.o
  CC      stubs/xen-hvm.o
  CC      contrib/ivshmem-client/main.o
  CC      contrib/ivshmem-server/ivshmem-server.o
  CC      contrib/ivshmem-server/main.o
  CC      qemu-nbd.o
  CC      block.o
  CC      blockjob.o
  CC      qemu-io-cmds.o
  CC      block/raw-format.o
  CC      replication.o
  CC      block/qcow.o
  CC      block/vdi.o
  CC      block/vmdk.o
  CC      block/cloop.o
  CC      block/bochs.o
  CC      block/vpc.o
  CC      block/vvfat.o
  CC      block/dmg.o
  CC      block/qcow2.o
  CC      block/qcow2-refcount.o
  CC      block/qcow2-cache.o
  CC      block/qcow2-snapshot.o
  CC      block/qed.o
  CC      block/qcow2-cluster.o
  CC      block/qed-gencb.o
  CC      block/qed-l2-cache.o
  CC      block/qed-table.o
  CC      block/qed-cluster.o
  CC      block/vhdx-endian.o
  CC      block/qed-check.o
  CC      block/vhdx.o
  CC      block/vhdx-log.o
  CC      block/quorum.o
  CC      block/blkverify.o
  CC      block/parallels.o
  CC      block/blkdebug.o
  CC      block/blkreplay.o
  CC      block/block-backend.o
  CC      block/snapshot.o
  CC      block/qapi.o
  CC      block/null.o
  CC      block/file-posix.o
  CC      block/mirror.o
  CC      block/commit.o
  CC      block/io.o
  CC      block/nbd.o
  CC      block/nbd-client.o
  CC      block/throttle-groups.o
  CC      block/sheepdog.o
  CC      block/dirty-bitmap.o
  CC      block/accounting.o
  CC      block/backup.o
  CC      block/write-threshold.o
  CC      block/replication.o
  CC      block/crypto.o
  CC      nbd/client.o
  CC      nbd/server.o
  CC      crypto/hash.o
  CC      nbd/common.o
  CC      crypto/init.o
  CC      crypto/hmac.o
  CC      crypto/hash-glib.o
  CC      crypto/aes.o
  CC      crypto/hmac-glib.o
  CC      crypto/desrfb.o
  CC      crypto/cipher.o
  CC      crypto/tlscredsanon.o
  CC      crypto/tlscreds.o
  CC      crypto/tlscredsx509.o
  CC      crypto/tlssession.o
  CC      crypto/random-platform.o
  CC      crypto/secret.o
  CC      crypto/pbkdf.o
  CC      crypto/ivgen.o
  CC      crypto/ivgen-essiv.o
  CC      crypto/ivgen-plain.o
  CC      crypto/ivgen-plain64.o
  CC      crypto/xts.o
  CC      crypto/afsplit.o
  CC      crypto/block.o
  CC      crypto/block-qcow.o
  CC      crypto/block-luks.o
  CC      io/channel.o
  CC      io/channel-command.o
  CC      io/channel-file.o
  CC      io/channel-socket.o
  CC      io/channel-tls.o
  CC      io/channel-watch.o
  CC      io/channel-websock.o
  CC      io/dns-resolver.o
  CC      io/task.o
  CC      io/channel-util.o
  CC      qom/container.o
  CC      qom/object.o
  CC      qom/qom-qobject.o
  CC      qom/object_interfaces.o
  GEN     qemu-img-cmds.h
  CC      qemu-io.o
  CC      qemu-bridge-helper.o
  CC      blockdev.o
  CC      blockdev-nbd.o
  CC      iothread.o
  CC      qdev-monitor.o
  CC      device-hotplug.o
  CC      accel.o
  CC      bt-host.o
  CC      os-posix.o
  CC      bt-vhci.o
  CC      dma-helpers.o
  CC      vl.o
  CC      tpm.o
  CC      device_tree.o
  CC      qmp-marshal.o
  CC      io/channel-buffer.o
  CC      qmp.o
  CC      hmp.o
  CC      cpus-common.o
  CC      audio/audio.o
  CC      audio/noaudio.o
  CC      audio/wavaudio.o
  CC      audio/mixeng.o
  CC      audio/sdlaudio.o
  CC      audio/ossaudio.o
  CC      audio/wavcapture.o
  CC      backends/rng.o
  CC      backends/rng-egd.o
  CC      backends/rng-random.o
  CC      backends/tpm.o
  CC      backends/hostmem.o
  CC      backends/hostmem-ram.o
  CC      backends/hostmem-file.o
  CC      backends/cryptodev.o
  CC      backends/cryptodev-builtin.o
  CC      block/stream.o
  CC      chardev/msmouse.o
  CC      chardev/wctablet.o
  CC      chardev/testdev.o
  CC      disas/arm.o
  CC      disas/i386.o
  CC      fsdev/qemu-fsdev-dummy.o
  CC      fsdev/qemu-fsdev-opts.o
  CC      fsdev/qemu-fsdev-throttle.o
  CC      hw/acpi/core.o
  CC      hw/acpi/piix4.o
  CC      hw/acpi/pcihp.o
  CC      hw/acpi/ich9.o
  CC      hw/acpi/tco.o
  CC      hw/acpi/cpu_hotplug.o
  CC      hw/acpi/memory_hotplug.o
  CC      hw/acpi/cpu.o
  CC      hw/acpi/nvdimm.o
  CC      hw/acpi/vmgenid.o
  CC      hw/acpi/acpi_interface.o
  CC      hw/acpi/bios-linker-loader.o
  CC      hw/acpi/aml-build.o
  CC      hw/acpi/ipmi.o
  CC      hw/acpi/acpi-stub.o
  CC      hw/acpi/ipmi-stub.o
  CC      hw/audio/sb16.o
  CC      hw/audio/es1370.o
  CC      hw/audio/ac97.o
  CC      hw/audio/fmopl.o
  CC      hw/audio/adlib.o
  CC      hw/audio/gus.o
  CC      hw/audio/gusemu_hal.o
  CC      hw/audio/gusemu_mixer.o
  CC      hw/audio/cs4231a.o
  CC      hw/audio/intel-hda.o
  CC      hw/audio/hda-codec.o
  CC      hw/audio/pcspk.o
  CC      hw/audio/wm8750.o
  CC      hw/audio/pl041.o
  CC      hw/audio/lm4549.o
  CC      hw/audio/marvell_88w8618.o
  CC      hw/audio/soundhw.o
  CC      hw/block/block.o
  CC      hw/block/cdrom.o
  CC      hw/block/hd-geometry.o
  CC      hw/block/fdc.o
  CC      hw/block/m25p80.o
  CC      hw/block/nand.o
  CC      hw/block/pflash_cfi01.o
  CC      hw/block/pflash_cfi02.o
  CC      hw/block/ecc.o
  CC      hw/block/onenand.o
  CC      hw/block/nvme.o
  CC      hw/bt/core.o
  CC      hw/bt/l2cap.o
  CC      hw/bt/sdp.o
  CC      hw/bt/hci.o
  CC      hw/bt/hid.o
  CC      hw/char/ipoctal232.o
  CC      hw/bt/hci-csr.o
  CC      hw/char/parallel.o
  CC      hw/char/pl011.o
  CC      hw/char/serial.o
  CC      hw/char/serial-isa.o
  CC      hw/char/serial-pci.o
  CC      hw/char/virtio-console.o
  CC      hw/char/cadence_uart.o
  CC      hw/char/debugcon.o
  CC      hw/char/imx_serial.o
  CC      hw/core/qdev.o
  CC      hw/core/qdev-properties.o
  CC      hw/core/bus.o
  CC      hw/core/reset.o
  CC      hw/core/fw-path-provider.o
  CC      hw/core/irq.o
  CC      hw/core/hotplug.o
  CC      hw/core/ptimer.o
  CC      hw/core/sysbus.o
  CC      hw/core/machine.o
  CC      hw/core/loader.o
  CC      hw/core/register.o
  CC      hw/core/qdev-properties-system.o
  CC      hw/core/or-irq.o
  CC      hw/core/platform-bus.o
  CC      hw/display/ads7846.o
  CC      hw/display/cirrus_vga.o
  CC      hw/display/pl110.o
  CC      hw/display/ssd0303.o
  CC      hw/display/vga-pci.o
  CC      hw/display/ssd0323.o
  CC      hw/display/vga-isa.o
  CC      hw/display/vmware_vga.o
  CC      hw/display/blizzard.o
  CC      hw/display/exynos4210_fimd.o
  CC      hw/display/framebuffer.o
  CC      hw/display/tc6393xb.o
  CC      hw/dma/pl080.o
  CC      hw/dma/pl330.o
  CC      hw/dma/i8257.o
  CC      hw/dma/xlnx-zynq-devcfg.o
  CC      hw/gpio/max7310.o
  CC      hw/gpio/pl061.o
  CC      hw/gpio/zaurus.o
  CC      hw/gpio/gpio_key.o
  CC      hw/i2c/smbus_eeprom.o
  CC      hw/i2c/core.o
  CC      hw/i2c/smbus.o
  CC      hw/i2c/i2c-ddc.o
  CC      hw/i2c/versatile_i2c.o
  CC      hw/i2c/pm_smbus.o
  CC      hw/i2c/smbus_ich9.o
  CC      hw/i2c/bitbang_i2c.o
  CC      hw/i2c/exynos4210_i2c.o
  CC      hw/i2c/imx_i2c.o
  CC      hw/i2c/aspeed_i2c.o
  CC      hw/ide/core.o
  CC      hw/ide/atapi.o
  CC      hw/ide/qdev.o
  CC      hw/ide/pci.o
  CC      hw/ide/isa.o
  CC      hw/ide/piix.o
  CC      hw/ide/microdrive.o
  CC      hw/ide/ahci.o
  CC      hw/ide/ich.o
  CC      hw/input/hid.o
  CC      hw/input/lm832x.o
  CC      hw/input/pckbd.o
  CC      hw/input/pl050.o
  CC      hw/input/ps2.o
  CC      hw/input/stellaris_input.o
  CC      hw/input/tsc2005.o
  CC      hw/input/vmmouse.o
  CC      hw/input/virtio-input.o
  CC      hw/input/virtio-input-hid.o
  CC      hw/input/virtio-input-host.o
  CC      hw/intc/i8259_common.o
  CC      hw/intc/i8259.o
  CC      hw/intc/pl190.o
  CC      hw/intc/realview_gic.o
  CC      hw/intc/ioapic_common.o
  CC      hw/intc/imx_avic.o
  CC      hw/intc/arm_gic_common.o
  CC      hw/intc/arm_gic.o
  CC      hw/intc/arm_gicv2m.o
  CC      hw/intc/arm_gicv3_common.o
  CC      hw/intc/arm_gicv3.o
  CC      hw/intc/arm_gicv3_dist.o
  CC      hw/intc/arm_gicv3_redist.o
  CC      hw/intc/arm_gicv3_its_common.o
  CC      hw/intc/intc.o
  CC      hw/ipack/ipack.o
  CC      hw/ipack/tpci200.o
  CC      hw/ipmi/ipmi.o
  CC      hw/ipmi/ipmi_bmc_extern.o
  CC      hw/ipmi/ipmi_bmc_sim.o
  CC      hw/ipmi/isa_ipmi_kcs.o
  CC      hw/ipmi/isa_ipmi_bt.o
  CC      hw/isa/isa-bus.o
  CC      hw/mem/pc-dimm.o
  CC      hw/isa/apm.o
  CC      hw/mem/nvdimm.o
  CC      hw/misc/applesmc.o
  CC      hw/misc/tmp105.o
  CC      hw/misc/max111x.o
  CC      hw/misc/debugexit.o
  CC      hw/misc/sga.o
  CC      hw/misc/pc-testdev.o
  CC      hw/misc/pci-testdev.o
  CC      hw/misc/unimp.o
  CC      hw/misc/arm_l2x0.o
  CC      hw/misc/a9scu.o
  CC      hw/misc/arm_integrator_debug.o
  CC      hw/misc/arm11scu.o
  CC      hw/net/ne2000.o
  CC      hw/net/eepro100.o
  CC      hw/net/pcnet.o
  CC      hw/net/pcnet-pci.o
  CC      hw/net/e1000.o
  CC      hw/net/e1000x_common.o
  CC      hw/net/net_tx_pkt.o
  CC      hw/net/net_rx_pkt.o
  CC      hw/net/e1000e.o
  CC      hw/net/e1000e_core.o
  CC      hw/net/vmxnet3.o
  CC      hw/net/rtl8139.o
  CC      hw/net/smc91c111.o
  CC      hw/net/lan9118.o
  CC      hw/net/ne2000-isa.o
  CC      hw/net/xgmac.o
  CC      hw/net/allwinner_emac.o
  CC      hw/net/imx_fec.o
  CC      hw/net/cadence_gem.o
  CC      hw/net/stellaris_enet.o
  CC      hw/net/ftgmac100.o
  CC      hw/net/rocker/rocker.o
  CC      hw/net/rocker/rocker_desc.o
  CC      hw/net/rocker/rocker_fp.o
  CC      hw/net/rocker/rocker_world.o
  CC      hw/net/rocker/rocker_of_dpa.o
  CC      hw/nvram/eeprom93xx.o
  CC      hw/nvram/chrp_nvram.o
  CC      hw/pci-bridge/pci_bridge_dev.o
  CC      hw/pci-bridge/gen_pcie_root_port.o
  CC      hw/nvram/fw_cfg.o
  CC      hw/pci-bridge/pcie_root_port.o
  CC      hw/pci-bridge/pci_expander_bridge.o
  CC      hw/pci-bridge/xio3130_upstream.o
  CC      hw/pci-bridge/xio3130_downstream.o
  CC      hw/pci-bridge/ioh3420.o
  CC      hw/pci-bridge/i82801b11.o
  CC      hw/pci-host/pam.o
  CC      hw/pci-host/versatile.o
  CC      hw/pci-host/q35.o
  CC      hw/pci-host/gpex.o
  CC      hw/pci/pci_bridge.o
  CC      hw/pci-host/piix.o
  CC      hw/pci/pci.o
  CC      hw/pci/msi.o
  CC      hw/pci/msix.o
  CC      hw/pci/shpc.o
  CC      hw/pci/slotid_cap.o
  CC      hw/pci/pci_host.o
  CC      hw/pci/pcie_host.o
  CC      hw/pci/pcie.o
  CC      hw/pci/pcie_aer.o
  CC      hw/pci/pcie_port.o
  CC      hw/pci/pci-stub.o
  CC      hw/pcmcia/pcmcia.o
  CC      hw/scsi/scsi-generic.o
  CC      hw/scsi/scsi-disk.o
  CC      hw/scsi/scsi-bus.o
  CC      hw/scsi/lsi53c895a.o
  CC      hw/scsi/mptsas.o
  CC      hw/scsi/mptconfig.o
  CC      hw/scsi/mptendian.o
  CC      hw/scsi/megasas.o
  CC      hw/scsi/vmw_pvscsi.o
  CC      hw/scsi/esp-pci.o
  CC      hw/sd/pl181.o
  CC      hw/scsi/esp.o
  CC      hw/sd/ssi-sd.o
  CC      hw/sd/sd.o
  CC      hw/sd/sdhci.o
  CC      hw/sd/core.o
  CC      hw/smbios/smbios.o
  CC      hw/smbios/smbios_type_38.o
  CC      hw/smbios/smbios-stub.o
  CC      hw/smbios/smbios_type_38-stub.o
  CC      hw/ssi/pl022.o
  CC      hw/ssi/ssi.o
  CC      hw/ssi/xilinx_spips.o
  CC      hw/timer/arm_timer.o
  CC      hw/ssi/stm32f2xx_spi.o
  CC      hw/ssi/aspeed_smc.o
  CC      hw/timer/arm_mptimer.o
  CC      hw/timer/armv7m_systick.o
  CC      hw/timer/a9gtimer.o
  CC      hw/timer/cadence_ttc.o
  CC      hw/timer/ds1338.o
  CC      hw/timer/hpet.o
  CC      hw/timer/i8254_common.o
  CC      hw/timer/i8254.o
  CC      hw/timer/pl031.o
  CC      hw/timer/imx_epit.o
  CC      hw/timer/imx_gpt.o
  CC      hw/timer/twl92230.o
  CC      hw/timer/stm32f2xx_timer.o
  CC      hw/timer/aspeed_timer.o
  CC      hw/tpm/tpm_tis.o
  CC      hw/tpm/tpm_passthrough.o
  CC      hw/usb/core.o
  CC      hw/tpm/tpm_util.o
  CC      hw/usb/combined-packet.o
  CC      hw/usb/bus.o
  CC      hw/usb/desc-msos.o
  CC      hw/usb/desc.o
  CC      hw/usb/libhw.o
  CC      hw/usb/hcd-ohci.o
  CC      hw/usb/hcd-uhci.o
  CC      hw/usb/hcd-ehci.o
  CC      hw/usb/hcd-ehci-pci.o
  CC      hw/usb/hcd-ehci-sysbus.o
  CC      hw/usb/hcd-xhci.o
  CC      hw/usb/hcd-musb.o
  CC      hw/usb/dev-hid.o
  CC      hw/usb/dev-hub.o
  CC      hw/usb/dev-wacom.o
  CC      hw/usb/dev-storage.o
  CC      hw/usb/dev-uas.o
  CC      hw/usb/dev-audio.o
  CC      hw/usb/dev-serial.o
  CC      hw/usb/dev-bluetooth.o
  CC      hw/usb/dev-network.o
  CC      hw/usb/dev-smartcard-reader.o
  CC      hw/usb/dev-mtp.o
  CC      hw/virtio/virtio-pci.o
  CC      hw/usb/host-stub.o
  CC      hw/virtio/virtio-rng.o
  CC      hw/virtio/virtio-mmio.o
  CC      hw/virtio/virtio-bus.o
  CC      hw/virtio/vhost-stub.o
  CC      hw/watchdog/watchdog.o
  CC      hw/watchdog/wdt_i6300esb.o
  CC      hw/watchdog/wdt_ib700.o
  CC      hw/watchdog/wdt_aspeed.o
  CC      migration/migration.o
  CC      migration/socket.o
  CC      migration/fd.o
  CC      migration/exec.o
  CC      migration/tls.o
  CC      migration/channel.o
  CC      migration/colo-comm.o
  CC      migration/savevm.o
  CC      migration/colo.o
  CC      migration/colo-failover.o
  CC      migration/vmstate.o
  CC      migration/vmstate-types.o
  CC      migration/page_cache.o
  CC      migration/qemu-file.o
  CC      migration/qemu-file-channel.o
  CC      migration/xbzrle.o
  CC      migration/postcopy-ram.o
  CC      migration/qjson.o
  CC      migration/block.o
  CC      net/net.o
  CC      net/queue.o
  CC      net/checksum.o
  CC      net/util.o
  CC      net/hub.o
  CC      net/socket.o
  CC      net/dump.o
  CC      net/eth.o
  CC      net/l2tpv3.o
  CC      net/vhost-user.o
  CC      net/slirp.o
  CC      net/filter.o
  CC      net/filter-mirror.o
  CC      net/filter-buffer.o
  CC      net/colo-compare.o
  CC      net/colo.o
  CC      net/filter-rewriter.o
  CC      net/filter-replay.o
  CC      net/tap.o
  CC      net/tap-linux.o
  CC      qom/cpu.o
  CC      replay/replay.o
  CC      replay/replay-internal.o
/tmp/qemu-test/src/replay/replay-internal.c: In function ‘replay_put_array’:
/tmp/qemu-test/src/replay/replay-internal.c:65: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result
  CC      replay/replay-events.o
  CC      replay/replay-time.o
  CC      replay/replay-input.o
  CC      replay/replay-char.o
  CC      replay/replay-snapshot.o
  CC      replay/replay-net.o
  CC      replay/replay-audio.o
  CC      slirp/cksum.o
  CC      slirp/if.o
  CC      slirp/ip_icmp.o
  CC      slirp/ip6_icmp.o
  CC      slirp/ip6_input.o
  CC      slirp/ip_input.o
  CC      slirp/ip_output.o
  CC      slirp/ip6_output.o
  CC      slirp/dnssearch.o
  CC      slirp/dhcpv6.o
  CC      slirp/mbuf.o
  CC      slirp/misc.o
  CC      slirp/slirp.o
  CC      slirp/socket.o
  CC      slirp/sbuf.o
  CC      slirp/tcp_input.o
/tmp/qemu-test/src/slirp/tcp_input.c: In function ‘tcp_input’:
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_p’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_len’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_tos’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_id’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_off’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_ttl’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_sum’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_src.s_addr’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_dst.s_addr’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:220: warning: ‘save_ip6.ip_nh’ may be used uninitialized in this function
  CC      slirp/tcp_output.o
  CC      slirp/tcp_subr.o
  CC      slirp/tcp_timer.o
  CC      slirp/udp.o
  CC      slirp/udp6.o
  CC      slirp/bootp.o
  CC      slirp/tftp.o
  CC      slirp/arp_table.o
  CC      slirp/ndp_table.o
  CC      slirp/ncsi.o
  CC      ui/keymaps.o
  CC      ui/console.o
  CC      ui/qemu-pixman.o
  CC      ui/cursor.o
  CC      ui/input.o
  CC      ui/input-keymap.o
  CC      ui/input-legacy.o
  CC      ui/sdl.o
  CC      ui/input-linux.o
  CC      ui/sdl_zoom.o
  CC      ui/x_keymap.o
  CC      ui/vnc.o
  CC      ui/vnc-enc-zlib.o
  CC      ui/vnc-enc-hextile.o
  CC      ui/vnc-enc-tight.o
  CC      ui/vnc-palette.o
  CC      ui/vnc-enc-zrle.o
  CC      ui/vnc-auth-vencrypt.o
  CC      ui/vnc-ws.o
  CC      ui/vnc-jobs.o
  CC      chardev/char.o
  CC      chardev/char-fd.o
  CC      chardev/char-fe.o
  CC      chardev/char-file.o
  CC      chardev/char-io.o
  CC      chardev/char-mux.o
  CC      chardev/char-null.o
  CC      chardev/char-parallel.o
  CC      chardev/char-pipe.o
  CC      chardev/char-pty.o
  CC      chardev/char-ringbuf.o
  CC      chardev/char-serial.o
  CC      chardev/char-socket.o
  CC      chardev/char-stdio.o
  CC      chardev/char-udp.o
  AS      optionrom/multiboot.o
  AS      optionrom/linuxboot.o
  CC      optionrom/linuxboot_dma.o
cc: unrecognized option '-no-integrated-as'
cc: unrecognized option '-no-integrated-as'
  AS      optionrom/kvmvapic.o
  BUILD   optionrom/multiboot.img
  BUILD   optionrom/linuxboot.img
  BUILD   optionrom/linuxboot_dma.img
  BUILD   optionrom/kvmvapic.img
  BUILD   optionrom/multiboot.raw
  BUILD   optionrom/linuxboot.raw
  BUILD   optionrom/linuxboot_dma.raw
  BUILD   optionrom/kvmvapic.raw
  LINK    tests/qemu-iotests/socket_scm_helper
  CC      qga/commands.o
  CC      qga/guest-agent-command-state.o
  CC      qga/main.o
  CC      qga/commands-posix.o
  CC      qga/channel-posix.o
  CC      qga/qapi-generated/qga-qapi-types.o
  CC      qga/qapi-generated/qga-qapi-visit.o
  CC      qga/qapi-generated/qga-qmp-marshal.o
  AR      libqemuutil.a
  AR      libqemustub.a
  CC      qemu-img.o
  SIGN    optionrom/linuxboot_dma.bin
  SIGN    optionrom/multiboot.bin
  SIGN    optionrom/kvmvapic.bin
  SIGN    optionrom/linuxboot.bin
  LINK    qemu-io
  LINK    qemu-bridge-helper
  LINK    qemu-ga
  LINK    ivshmem-client
  LINK    ivshmem-server
  LINK    qemu-nbd
  LINK    qemu-img
  GEN     x86_64-softmmu/hmp-commands-info.h
  GEN     x86_64-softmmu/hmp-commands.h
  GEN     x86_64-softmmu/config-target.h
  GEN     aarch64-softmmu/hmp-commands-info.h
  GEN     aarch64-softmmu/config-target.h
  GEN     aarch64-softmmu/hmp-commands.h
  CC      aarch64-softmmu/exec.o
  CC      aarch64-softmmu/cpu-exec.o
  CC      aarch64-softmmu/translate-common.o
  CC      aarch64-softmmu/translate-all.o
  CC      aarch64-softmmu/cpu-exec-common.o
  CC      aarch64-softmmu/tcg/tcg.o
  CC      aarch64-softmmu/tcg/tcg-op.o
  CC      x86_64-softmmu/exec.o
  CC      x86_64-softmmu/translate-all.o
  CC      x86_64-softmmu/cpu-exec.o
  CC      x86_64-softmmu/translate-common.o
  CC      x86_64-softmmu/cpu-exec-common.o
  CC      x86_64-softmmu/tcg/tcg.o
  CC      x86_64-softmmu/tcg/tcg-op.o
  CC      aarch64-softmmu/tcg/optimize.o
  CC      x86_64-softmmu/tcg/optimize.o
  CC      x86_64-softmmu/tcg/tcg-common.o
  CC      aarch64-softmmu/tcg/tcg-common.o
  CC      x86_64-softmmu/fpu/softfloat.o
  CC      aarch64-softmmu/fpu/softfloat.o
  CC      x86_64-softmmu/disas.o
  CC      x86_64-softmmu/tcg-runtime.o
  GEN     x86_64-softmmu/gdbstub-xml.c
  CC      x86_64-softmmu/hax-stub.o
  CC      x86_64-softmmu/arch_init.o
  CC      x86_64-softmmu/cpus.o
  CC      x86_64-softmmu/monitor.o
  CC      aarch64-softmmu/disas.o
  CC      x86_64-softmmu/gdbstub.o
  CC      x86_64-softmmu/balloon.o
  CC      aarch64-softmmu/tcg-runtime.o
  CC      x86_64-softmmu/ioport.o
  GEN     aarch64-softmmu/gdbstub-xml.c
  CC      aarch64-softmmu/hax-stub.o
  CC      aarch64-softmmu/kvm-stub.o
  CC      aarch64-softmmu/arch_init.o
  CC      aarch64-softmmu/cpus.o
  CC      aarch64-softmmu/monitor.o
  CC      aarch64-softmmu/gdbstub.o
  CC      x86_64-softmmu/numa.o
  CC      aarch64-softmmu/balloon.o
  CC      aarch64-softmmu/ioport.o
  CC      aarch64-softmmu/numa.o
  CC      aarch64-softmmu/qtest.o
  CC      aarch64-softmmu/bootdevice.o
  CC      aarch64-softmmu/memory.o
  CC      aarch64-softmmu/cputlb.o
  CC      x86_64-softmmu/qtest.o
  CC      x86_64-softmmu/bootdevice.o
  CC      x86_64-softmmu/kvm-all.o
  CC      aarch64-softmmu/memory_mapping.o
  CC      aarch64-softmmu/dump.o
  CC      aarch64-softmmu/migration/ram.o
  CC      aarch64-softmmu/hw/adc/stm32f2xx_adc.o
  CC      aarch64-softmmu/hw/block/virtio-blk.o
  CC      aarch64-softmmu/hw/block/dataplane/virtio-blk.o
  CC      x86_64-softmmu/memory.o
  CC      x86_64-softmmu/cputlb.o
  CC      aarch64-softmmu/hw/char/exynos4210_uart.o
  CC      aarch64-softmmu/hw/char/omap_uart.o
  CC      x86_64-softmmu/memory_mapping.o
  CC      x86_64-softmmu/dump.o
  CC      x86_64-softmmu/migration/ram.o
  CC      aarch64-softmmu/hw/char/digic-uart.o
  CC      x86_64-softmmu/hw/block/virtio-blk.o
  CC      aarch64-softmmu/hw/char/stm32f2xx_usart.o
  CC      x86_64-softmmu/hw/block/dataplane/virtio-blk.o
  CC      aarch64-softmmu/hw/char/bcm2835_aux.o
  CC      x86_64-softmmu/hw/char/virtio-serial-bus.o
  CC      aarch64-softmmu/hw/char/virtio-serial-bus.o
  CC      x86_64-softmmu/hw/core/nmi.o
  CC      x86_64-softmmu/hw/core/generic-loader.o
  CC      aarch64-softmmu/hw/core/nmi.o
  CC      aarch64-softmmu/hw/core/generic-loader.o
  CC      aarch64-softmmu/hw/core/null-machine.o
  CC      aarch64-softmmu/hw/cpu/arm11mpcore.o
  CC      x86_64-softmmu/hw/core/null-machine.o
  CC      aarch64-softmmu/hw/cpu/realview_mpcore.o
  CC      aarch64-softmmu/hw/cpu/a15mpcore.o
  CC      aarch64-softmmu/hw/cpu/a9mpcore.o
  CC      x86_64-softmmu/hw/cpu/core.o
  CC      aarch64-softmmu/hw/cpu/core.o
  CC      x86_64-softmmu/hw/display/vga.o
  CC      x86_64-softmmu/hw/display/virtio-gpu.o
  CC      aarch64-softmmu/hw/display/omap_dss.o
  CC      aarch64-softmmu/hw/display/omap_lcdc.o
  CC      x86_64-softmmu/hw/display/virtio-gpu-3d.o
  CC      aarch64-softmmu/hw/display/pxa2xx_lcd.o
  CC      aarch64-softmmu/hw/display/bcm2835_fb.o
  CC      x86_64-softmmu/hw/display/virtio-gpu-pci.o
  CC      aarch64-softmmu/hw/display/vga.o
  CC      x86_64-softmmu/hw/display/virtio-vga.o
  CC      aarch64-softmmu/hw/display/virtio-gpu.o
  CC      aarch64-softmmu/hw/display/virtio-gpu-3d.o
  CC      aarch64-softmmu/hw/display/xlnx_dp.o
  CC      aarch64-softmmu/hw/display/dpcd.o
  CC      x86_64-softmmu/hw/intc/apic.o
  CC      aarch64-softmmu/hw/display/virtio-gpu-pci.o
  CC      aarch64-softmmu/hw/dma/xlnx_dpdma.o
  CC      x86_64-softmmu/hw/intc/apic_common.o
  CC      x86_64-softmmu/hw/intc/ioapic.o
  CC      x86_64-softmmu/hw/isa/lpc_ich9.o
  CC      aarch64-softmmu/hw/dma/omap_dma.o
  CC      x86_64-softmmu/hw/misc/vmport.o
  CC      aarch64-softmmu/hw/dma/soc_dma.o
  CC      aarch64-softmmu/hw/dma/pxa2xx_dma.o
  CC      aarch64-softmmu/hw/dma/bcm2835_dma.o
  CC      aarch64-softmmu/hw/gpio/omap_gpio.o
  CC      aarch64-softmmu/hw/gpio/imx_gpio.o
  CC      aarch64-softmmu/hw/gpio/bcm2835_gpio.o
  CC      aarch64-softmmu/hw/i2c/omap_i2c.o
  CC      x86_64-softmmu/hw/misc/ivshmem.o
  CC      aarch64-softmmu/hw/input/pxa2xx_keypad.o
  CC      aarch64-softmmu/hw/input/tsc210x.o
  CC      aarch64-softmmu/hw/intc/armv7m_nvic.o
  CC      aarch64-softmmu/hw/intc/exynos4210_gic.o
  CC      aarch64-softmmu/hw/intc/exynos4210_combiner.o
  CC      aarch64-softmmu/hw/intc/omap_intc.o
  CC      aarch64-softmmu/hw/intc/bcm2835_ic.o
  CC      x86_64-softmmu/hw/misc/pvpanic.o
  CC      x86_64-softmmu/hw/misc/edu.o
  CC      x86_64-softmmu/hw/net/virtio-net.o
  CC      x86_64-softmmu/hw/misc/hyperv_testdev.o
  CC      aarch64-softmmu/hw/intc/bcm2836_control.o
  CC      aarch64-softmmu/hw/intc/allwinner-a10-pic.o
  CC      aarch64-softmmu/hw/intc/aspeed_vic.o
  CC      aarch64-softmmu/hw/intc/arm_gicv3_cpuif.o
  CC      x86_64-softmmu/hw/net/vhost_net.o
  CC      aarch64-softmmu/hw/misc/ivshmem.o
  CC      aarch64-softmmu/hw/misc/arm_sysctl.o
  CC      aarch64-softmmu/hw/misc/cbus.o
  CC      aarch64-softmmu/hw/misc/exynos4210_pmu.o
  CC      aarch64-softmmu/hw/misc/exynos4210_clk.o
  CC      aarch64-softmmu/hw/misc/imx_ccm.o
  CC      aarch64-softmmu/hw/misc/imx31_ccm.o
  CC      aarch64-softmmu/hw/misc/imx25_ccm.o
  CC      x86_64-softmmu/hw/scsi/virtio-scsi.o
  CC      aarch64-softmmu/hw/misc/imx6_ccm.o
  CC      aarch64-softmmu/hw/misc/imx6_src.o
  CC      aarch64-softmmu/hw/misc/mst_fpga.o
  CC      aarch64-softmmu/hw/misc/omap_clk.o
  CC      x86_64-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      aarch64-softmmu/hw/misc/omap_gpmc.o
  CC      aarch64-softmmu/hw/misc/omap_l4.o
  CC      aarch64-softmmu/hw/misc/omap_sdrc.o
  CC      aarch64-softmmu/hw/misc/omap_tap.o
  CC      x86_64-softmmu/hw/scsi/vhost-scsi-common.o
  CC      aarch64-softmmu/hw/misc/bcm2835_mbox.o
  CC      aarch64-softmmu/hw/misc/bcm2835_property.o
  CC      aarch64-softmmu/hw/misc/bcm2835_rng.o
  CC      aarch64-softmmu/hw/misc/zynq_slcr.o
  CC      aarch64-softmmu/hw/misc/zynq-xadc.o
  CC      aarch64-softmmu/hw/misc/stm32f2xx_syscfg.o
  CC      x86_64-softmmu/hw/scsi/vhost-scsi.o
  CC      aarch64-softmmu/hw/misc/edu.o
  CC      aarch64-softmmu/hw/misc/auxbus.o
  CC      aarch64-softmmu/hw/misc/aspeed_scu.o
  CC      x86_64-softmmu/hw/timer/mc146818rtc.o
  CC      aarch64-softmmu/hw/misc/aspeed_sdmc.o
  CC      aarch64-softmmu/hw/net/virtio-net.o
  CC      aarch64-softmmu/hw/net/vhost_net.o
  CC      aarch64-softmmu/hw/pcmcia/pxa2xx.o
  CC      aarch64-softmmu/hw/scsi/virtio-scsi.o
  CC      aarch64-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      aarch64-softmmu/hw/scsi/vhost-scsi-common.o
  CC      aarch64-softmmu/hw/scsi/vhost-scsi.o
  CC      aarch64-softmmu/hw/sd/omap_mmc.o
  CC      aarch64-softmmu/hw/sd/pxa2xx_mmci.o
  CC      aarch64-softmmu/hw/sd/bcm2835_sdhost.o
  CC      aarch64-softmmu/hw/ssi/omap_spi.o
  CC      aarch64-softmmu/hw/ssi/imx_spi.o
  CC      aarch64-softmmu/hw/timer/exynos4210_mct.o
  CC      x86_64-softmmu/hw/vfio/common.o
  CC      aarch64-softmmu/hw/timer/exynos4210_pwm.o
  CC      aarch64-softmmu/hw/timer/exynos4210_rtc.o
  CC      x86_64-softmmu/hw/vfio/pci.o
  CC      aarch64-softmmu/hw/timer/omap_gptimer.o
  CC      x86_64-softmmu/hw/vfio/pci-quirks.o
  CC      x86_64-softmmu/hw/vfio/platform.o
  CC      x86_64-softmmu/hw/vfio/spapr.o
  CC      x86_64-softmmu/hw/virtio/virtio.o
  CC      x86_64-softmmu/hw/virtio/vhost.o
  CC      aarch64-softmmu/hw/timer/pxa2xx_timer.o
  CC      x86_64-softmmu/hw/virtio/virtio-balloon.o
  CC      aarch64-softmmu/hw/timer/omap_synctimer.o
  CC      x86_64-softmmu/hw/virtio/vhost-backend.o
  CC      x86_64-softmmu/hw/virtio/vhost-user.o
  CC      aarch64-softmmu/hw/timer/digic-timer.o
  CC      aarch64-softmmu/hw/timer/allwinner-a10-pit.o
  CC      x86_64-softmmu/hw/virtio/vhost-vsock.o
  CC      aarch64-softmmu/hw/usb/tusb6010.o
  CC      x86_64-softmmu/hw/virtio/virtio-crypto.o
  CC      aarch64-softmmu/hw/vfio/common.o
  CC      x86_64-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      x86_64-softmmu/hw/i386/multiboot.o
  CC      aarch64-softmmu/hw/vfio/pci.o
  CC      aarch64-softmmu/hw/vfio/pci-quirks.o
  CC      x86_64-softmmu/hw/i386/pc.o
  CC      aarch64-softmmu/hw/vfio/platform.o
  CC      x86_64-softmmu/hw/i386/pc_piix.o
  CC      x86_64-softmmu/hw/i386/pc_sysfw.o
  CC      x86_64-softmmu/hw/i386/pc_q35.o
  CC      x86_64-softmmu/hw/i386/x86-iommu.o
  CC      aarch64-softmmu/hw/vfio/calxeda-xgmac.o
/tmp/qemu-test/src/hw/i386/pc_piix.c: In function ‘igd_passthrough_isa_bridge_create’:
/tmp/qemu-test/src/hw/i386/pc_piix.c:1067: warning: ‘pch_rev_id’ may be used uninitialized in this function
  CC      aarch64-softmmu/hw/vfio/spapr.o
  CC      x86_64-softmmu/hw/i386/intel_iommu.o
  CC      aarch64-softmmu/hw/vfio/amd-xgbe.o
  CC      x86_64-softmmu/hw/i386/kvmvapic.o
  CC      x86_64-softmmu/hw/i386/amd_iommu.o
  CC      aarch64-softmmu/hw/virtio/virtio.o
  CC      aarch64-softmmu/hw/virtio/virtio-balloon.o
  CC      x86_64-softmmu/hw/i386/acpi-build.o
  CC      aarch64-softmmu/hw/virtio/vhost.o
  CC      x86_64-softmmu/hw/i386/pci-assign-load-rom.o
  CC      aarch64-softmmu/hw/virtio/vhost-backend.o
  CC      x86_64-softmmu/hw/i386/kvm/clock.o
  CC      aarch64-softmmu/hw/virtio/vhost-user.o
  CC      x86_64-softmmu/hw/i386/kvm/apic.o
/tmp/qemu-test/src/hw/i386/acpi-build.c: In function ‘build_append_pci_bus_devices’:
/tmp/qemu-test/src/hw/i386/acpi-build.c:525: warning: ‘notify_method’ may be used uninitialized in this function
  CC      x86_64-softmmu/hw/i386/kvm/i8259.o
  CC      x86_64-softmmu/hw/i386/kvm/ioapic.o
  CC      x86_64-softmmu/hw/i386/kvm/i8254.o
  CC      aarch64-softmmu/hw/virtio/vhost-vsock.o
  CC      x86_64-softmmu/hw/i386/kvm/pci-assign.o
  CC      aarch64-softmmu/hw/virtio/virtio-crypto.o
  CC      aarch64-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      x86_64-softmmu/target/i386/translate.o
  CC      x86_64-softmmu/target/i386/helper.o
  CC      aarch64-softmmu/hw/arm/boot.o
  CC      x86_64-softmmu/target/i386/cpu.o
  CC      aarch64-softmmu/hw/arm/collie.o
  CC      x86_64-softmmu/target/i386/bpt_helper.o
  CC      aarch64-softmmu/hw/arm/exynos4_boards.o
  CC      x86_64-softmmu/target/i386/excp_helper.o
  CC      x86_64-softmmu/target/i386/cc_helper.o
  CC      x86_64-softmmu/target/i386/fpu_helper.o
  CC      x86_64-softmmu/target/i386/int_helper.o
  CC      x86_64-softmmu/target/i386/svm_helper.o
  CC      aarch64-softmmu/hw/arm/gumstix.o
  CC      x86_64-softmmu/target/i386/smm_helper.o
  CC      aarch64-softmmu/hw/arm/highbank.o
  CC      x86_64-softmmu/target/i386/misc_helper.o
  CC      aarch64-softmmu/hw/arm/digic_boards.o
  CC      x86_64-softmmu/target/i386/mem_helper.o
  CC      aarch64-softmmu/hw/arm/integratorcp.o
  CC      aarch64-softmmu/hw/arm/mainstone.o
  CC      aarch64-softmmu/hw/arm/musicpal.o
  CC      x86_64-softmmu/target/i386/seg_helper.o
  CC      x86_64-softmmu/target/i386/mpx_helper.o
  CC      x86_64-softmmu/target/i386/gdbstub.o
  CC      x86_64-softmmu/target/i386/machine.o
  CC      x86_64-softmmu/target/i386/arch_memory_mapping.o
  CC      x86_64-softmmu/target/i386/arch_dump.o
  CC      x86_64-softmmu/target/i386/monitor.o
  CC      x86_64-softmmu/target/i386/kvm.o
  CC      x86_64-softmmu/target/i386/hyperv.o
  CC      aarch64-softmmu/hw/arm/nseries.o
  CC      aarch64-softmmu/hw/arm/omap_sx1.o
  GEN     trace/generated-helpers.c
  CC      x86_64-softmmu/trace/control-target.o
  CC      x86_64-softmmu/gdbstub-xml.o
  CC      x86_64-softmmu/trace/generated-helpers.o
  CC      aarch64-softmmu/hw/arm/palm.o
  CC      aarch64-softmmu/hw/arm/realview.o
  CC      aarch64-softmmu/hw/arm/spitz.o
  CC      aarch64-softmmu/hw/arm/stellaris.o
  CC      aarch64-softmmu/hw/arm/tosa.o
  CC      aarch64-softmmu/hw/arm/versatilepb.o
  CC      aarch64-softmmu/hw/arm/vexpress.o
  CC      aarch64-softmmu/hw/arm/xilinx_zynq.o
  CC      aarch64-softmmu/hw/arm/z2.o
  CC      aarch64-softmmu/hw/arm/virt.o
  CC      aarch64-softmmu/hw/arm/virt-acpi-build.o
  CC      aarch64-softmmu/hw/arm/netduino2.o
  CC      aarch64-softmmu/hw/arm/sysbus-fdt.o
  CC      aarch64-softmmu/hw/arm/armv7m.o
  CC      aarch64-softmmu/hw/arm/exynos4210.o
  CC      aarch64-softmmu/hw/arm/pxa2xx.o
  CC      aarch64-softmmu/hw/arm/pxa2xx_gpio.o
  CC      aarch64-softmmu/hw/arm/pxa2xx_pic.o
  CC      aarch64-softmmu/hw/arm/digic.o
  CC      aarch64-softmmu/hw/arm/omap1.o
  CC      aarch64-softmmu/hw/arm/omap2.o
  CC      aarch64-softmmu/hw/arm/strongarm.o
  CC      aarch64-softmmu/hw/arm/allwinner-a10.o
  CC      aarch64-softmmu/hw/arm/cubieboard.o
  LINK    x86_64-softmmu/qemu-system-x86_64
  CC      aarch64-softmmu/hw/arm/bcm2835_peripherals.o
  CC      aarch64-softmmu/hw/arm/bcm2836.o
  CC      aarch64-softmmu/hw/arm/raspi.o
  CC      aarch64-softmmu/hw/arm/stm32f205_soc.o
  CC      aarch64-softmmu/hw/arm/xlnx-zynqmp.o
  CC      aarch64-softmmu/hw/arm/xlnx-ep108.o
  CC      aarch64-softmmu/hw/arm/fsl-imx25.o
  CC      aarch64-softmmu/hw/arm/imx25_pdk.o
  CC      aarch64-softmmu/hw/arm/fsl-imx31.o
  CC      aarch64-softmmu/hw/arm/kzm.o
  CC      aarch64-softmmu/hw/arm/fsl-imx6.o
  CC      aarch64-softmmu/hw/arm/sabrelite.o
  CC      aarch64-softmmu/hw/arm/aspeed_soc.o
  CC      aarch64-softmmu/hw/arm/aspeed.o
  CC      aarch64-softmmu/target/arm/arm-semi.o
  CC      aarch64-softmmu/target/arm/machine.o
  CC      aarch64-softmmu/target/arm/psci.o
  CC      aarch64-softmmu/target/arm/arch_dump.o
  CC      aarch64-softmmu/target/arm/monitor.o
  CC      aarch64-softmmu/target/arm/kvm-stub.o
  CC      aarch64-softmmu/target/arm/op_helper.o
  CC      aarch64-softmmu/target/arm/translate.o
  CC      aarch64-softmmu/target/arm/helper.o
  CC      aarch64-softmmu/target/arm/cpu.o
  CC      aarch64-softmmu/target/arm/neon_helper.o
  CC      aarch64-softmmu/target/arm/iwmmxt_helper.o
  CC      aarch64-softmmu/target/arm/gdbstub.o
  CC      aarch64-softmmu/target/arm/cpu64.o
  CC      aarch64-softmmu/target/arm/translate-a64.o
  CC      aarch64-softmmu/target/arm/helper-a64.o
  CC      aarch64-softmmu/target/arm/gdbstub64.o
  CC      aarch64-softmmu/target/arm/crypto_helper.o
  CC      aarch64-softmmu/target/arm/arm-powerctl.o
  CC      aarch64-softmmu/trace/control-target.o
  GEN     trace/generated-helpers.c
  CC      aarch64-softmmu/gdbstub-xml.o
  CC      aarch64-softmmu/trace/generated-helpers.o
/tmp/qemu-test/src/target/arm/translate-a64.c: In function ‘handle_shri_with_rndacc’:
/tmp/qemu-test/src/target/arm/translate-a64.c:6359: warning: ‘tcg_src_hi’ may be used uninitialized in this function
/tmp/qemu-test/src/target/arm/translate-a64.c: In function ‘disas_simd_scalar_two_reg_misc’:
/tmp/qemu-test/src/target/arm/translate-a64.c:8086: warning: ‘rmode’ may be used uninitialized in this function
  LINK    aarch64-softmmu/qemu-system-aarch64
	 LEX convert-dtsv0-lexer.lex.c
	 BISON dtc-parser.tab.c
	 LEX dtc-lexer.lex.c
make[1]: flex: Command not found
make[1]: bison: Command not found
make[1]: flex: Command not found
  TEST    tests/qapi-schema/alternate-array.out
  TEST    tests/qapi-schema/alternate-any.out
  TEST    tests/qapi-schema/alternate-clash.out
  TEST    tests/qapi-schema/alternate-base.out
  TEST    tests/qapi-schema/alternate-conflict-dict.out
  TEST    tests/qapi-schema/alternate-empty.out
  TEST    tests/qapi-schema/alternate-nested.out
  TEST    tests/qapi-schema/alternate-conflict-string.out
  TEST    tests/qapi-schema/alternate-unknown.out
  TEST    tests/qapi-schema/args-alternate.out
  TEST    tests/qapi-schema/args-any.out
  TEST    tests/qapi-schema/args-bad-boxed.out
  TEST    tests/qapi-schema/args-array-empty.out
  TEST    tests/qapi-schema/args-boxed-empty.out
  TEST    tests/qapi-schema/args-boxed-anon.out
  TEST    tests/qapi-schema/args-array-unknown.out
  TEST    tests/qapi-schema/args-boxed-string.out
  TEST    tests/qapi-schema/args-int.out
  TEST    tests/qapi-schema/args-invalid.out
  TEST    tests/qapi-schema/args-member-array-bad.out
  TEST    tests/qapi-schema/args-member-case.out
  TEST    tests/qapi-schema/args-member-unknown.out
  TEST    tests/qapi-schema/args-name-clash.out
  TEST    tests/qapi-schema/args-union.out
  TEST    tests/qapi-schema/args-unknown.out
  TEST    tests/qapi-schema/bad-base.out
  TEST    tests/qapi-schema/bad-data.out
  TEST    tests/qapi-schema/bad-ident.out
  TEST    tests/qapi-schema/bad-type-bool.out
  TEST    tests/qapi-schema/bad-type-dict.out
  TEST    tests/qapi-schema/bad-type-int.out
  TEST    tests/qapi-schema/base-cycle-direct.out
  TEST    tests/qapi-schema/base-cycle-indirect.out
  TEST    tests/qapi-schema/command-int.out
  TEST    tests/qapi-schema/comments.out
  TEST    tests/qapi-schema/doc-bad-alternate-member.out
  TEST    tests/qapi-schema/doc-bad-command-arg.out
  TEST    tests/qapi-schema/doc-bad-symbol.out
  TEST    tests/qapi-schema/doc-bad-union-member.out
  TEST    tests/qapi-schema/doc-before-include.out
  TEST    tests/qapi-schema/doc-before-pragma.out
  TEST    tests/qapi-schema/doc-duplicated-arg.out
  TEST    tests/qapi-schema/doc-duplicated-return.out
  TEST    tests/qapi-schema/doc-duplicated-since.out
  TEST    tests/qapi-schema/doc-empty-arg.out
  TEST    tests/qapi-schema/doc-empty-section.out
  TEST    tests/qapi-schema/doc-empty-symbol.out
  TEST    tests/qapi-schema/doc-good.out
  TEST    tests/qapi-schema/doc-interleaved-section.out
  TEST    tests/qapi-schema/doc-invalid-end.out
  TEST    tests/qapi-schema/doc-invalid-end2.out
  TEST    tests/qapi-schema/doc-invalid-return.out
  TEST    tests/qapi-schema/doc-invalid-section.out
  TEST    tests/qapi-schema/doc-invalid-start.out
  TEST    tests/qapi-schema/doc-missing.out
  TEST    tests/qapi-schema/doc-missing-colon.out
  TEST    tests/qapi-schema/doc-missing-expr.out
  TEST    tests/qapi-schema/doc-missing-space.out
  TEST    tests/qapi-schema/doc-no-symbol.out
  TEST    tests/qapi-schema/double-data.out
  TEST    tests/qapi-schema/double-type.out
  TEST    tests/qapi-schema/duplicate-key.out
  TEST    tests/qapi-schema/empty.out
  TEST    tests/qapi-schema/enum-bad-name.out
  TEST    tests/qapi-schema/enum-bad-prefix.out
  TEST    tests/qapi-schema/enum-clash-member.out
  TEST    tests/qapi-schema/enum-dict-member.out
  TEST    tests/qapi-schema/enum-int-member.out
  TEST    tests/qapi-schema/enum-member-case.out
  TEST    tests/qapi-schema/enum-missing-data.out
  TEST    tests/qapi-schema/enum-wrong-data.out
  TEST    tests/qapi-schema/escape-outside-string.out
  TEST    tests/qapi-schema/escape-too-big.out
  TEST    tests/qapi-schema/escape-too-short.out
  TEST    tests/qapi-schema/event-boxed-empty.out
  TEST    tests/qapi-schema/event-case.out
  TEST    tests/qapi-schema/event-nest-struct.out
  TEST    tests/qapi-schema/flat-union-array-branch.out
  TEST    tests/qapi-schema/flat-union-bad-base.out
  TEST    tests/qapi-schema/flat-union-bad-discriminator.out
  TEST    tests/qapi-schema/flat-union-base-any.out
  TEST    tests/qapi-schema/flat-union-base-union.out
  TEST    tests/qapi-schema/flat-union-clash-member.out
  TEST    tests/qapi-schema/flat-union-empty.out
  TEST    tests/qapi-schema/flat-union-incomplete-branch.out
  TEST    tests/qapi-schema/flat-union-inline.out
  TEST    tests/qapi-schema/flat-union-int-branch.out
  TEST    tests/qapi-schema/flat-union-invalid-branch-key.out
  TEST    tests/qapi-schema/flat-union-invalid-discriminator.out
  TEST    tests/qapi-schema/flat-union-no-base.out
  TEST    tests/qapi-schema/flat-union-optional-discriminator.out
  TEST    tests/qapi-schema/flat-union-string-discriminator.out
  TEST    tests/qapi-schema/funny-char.out
  TEST    tests/qapi-schema/ident-with-escape.out
  TEST    tests/qapi-schema/include-before-err.out
  TEST    tests/qapi-schema/include-cycle.out
  TEST    tests/qapi-schema/include-extra-junk.out
  TEST    tests/qapi-schema/include-format-err.out
  TEST    tests/qapi-schema/include-nested-err.out
  TEST    tests/qapi-schema/include-no-file.out
  TEST    tests/qapi-schema/include-non-file.out
  TEST    tests/qapi-schema/include-relpath.out
  TEST    tests/qapi-schema/include-repetition.out
  TEST    tests/qapi-schema/include-self-cycle.out
  TEST    tests/qapi-schema/include-simple.out
  TEST    tests/qapi-schema/indented-expr.out
  TEST    tests/qapi-schema/leading-comma-list.out
  TEST    tests/qapi-schema/leading-comma-object.out
  TEST    tests/qapi-schema/missing-colon.out
  TEST    tests/qapi-schema/missing-comma-list.out
  TEST    tests/qapi-schema/missing-comma-object.out
  TEST    tests/qapi-schema/missing-type.out
  TEST    tests/qapi-schema/nested-struct-data.out
  TEST    tests/qapi-schema/non-objects.out
  TEST    tests/qapi-schema/pragma-doc-required-crap.out
  TEST    tests/qapi-schema/pragma-extra-junk.out
  TEST    tests/qapi-schema/pragma-name-case-whitelist-crap.out
  TEST    tests/qapi-schema/pragma-non-dict.out
  TEST    tests/qapi-schema/pragma-returns-whitelist-crap.out
  TEST    tests/qapi-schema/qapi-schema-test.out
  TEST    tests/qapi-schema/quoted-structural-chars.out
  TEST    tests/qapi-schema/redefined-builtin.out
  TEST    tests/qapi-schema/redefined-command.out
  TEST    tests/qapi-schema/redefined-event.out
  TEST    tests/qapi-schema/redefined-type.out
  TEST    tests/qapi-schema/reserved-command-q.out
  TEST    tests/qapi-schema/reserved-enum-q.out
  TEST    tests/qapi-schema/reserved-member-has.out
  TEST    tests/qapi-schema/reserved-member-q.out
  TEST    tests/qapi-schema/reserved-member-u.out
  TEST    tests/qapi-schema/reserved-member-underscore.out
  TEST    tests/qapi-schema/reserved-type-kind.out
  TEST    tests/qapi-schema/reserved-type-list.out
  TEST    tests/qapi-schema/returns-alternate.out
  TEST    tests/qapi-schema/returns-array-bad.out
  TEST    tests/qapi-schema/returns-dict.out
  TEST    tests/qapi-schema/returns-unknown.out
  TEST    tests/qapi-schema/returns-whitelist.out
  TEST    tests/qapi-schema/struct-base-clash-deep.out
  TEST    tests/qapi-schema/struct-base-clash.out
  TEST    tests/qapi-schema/struct-data-invalid.out
  TEST    tests/qapi-schema/struct-member-invalid.out
  TEST    tests/qapi-schema/trailing-comma-list.out
  TEST    tests/qapi-schema/trailing-comma-object.out
  TEST    tests/qapi-schema/type-bypass-bad-gen.out
  TEST    tests/qapi-schema/unclosed-list.out
  TEST    tests/qapi-schema/unclosed-object.out
  TEST    tests/qapi-schema/unclosed-string.out
  TEST    tests/qapi-schema/unicode-str.out
  TEST    tests/qapi-schema/union-base-empty.out
  TEST    tests/qapi-schema/union-base-no-discriminator.out
  TEST    tests/qapi-schema/union-branch-case.out
  TEST    tests/qapi-schema/union-clash-branches.out
  TEST    tests/qapi-schema/union-empty.out
  TEST    tests/qapi-schema/union-optional-branch.out
  TEST    tests/qapi-schema/union-invalid-base.out
  TEST    tests/qapi-schema/union-unknown.out
  TEST    tests/qapi-schema/unknown-escape.out
  TEST    tests/qapi-schema/unknown-expr-key.out
  CC      tests/check-qdict.o
  GEN     tests/qapi-schema/doc-good.test.texi
  CC      tests/test-char.o
  CC      tests/check-qfloat.o
  CC      tests/check-qint.o
  CC      tests/check-qstring.o
  CC      tests/check-qlist.o
  CC      tests/check-qnull.o
  CC      tests/check-qjson.o
  CC      tests/test-qobject-output-visitor.o
  GEN     tests/test-qapi-visit.c
  GEN     tests/test-qapi-types.c
  GEN     tests/test-qapi-event.c
  GEN     tests/test-qmp-introspect.c
  CC      tests/test-clone-visitor.o
  CC      tests/test-qobject-input-visitor.o
  CC      tests/test-qmp-commands.o
  GEN     tests/test-qmp-marshal.c
  CC      tests/test-string-input-visitor.o
  CC      tests/test-string-output-visitor.o
  CC      tests/test-qmp-event.o
  CC      tests/test-opts-visitor.o
  CC      tests/test-coroutine.o
  CC      tests/iothread.o
  CC      tests/test-iov.o
  CC      tests/test-visitor-serialization.o
  CC      tests/test-aio-multithread.o
  CC      tests/test-aio.o
  CC      tests/test-throttle.o
  CC      tests/test-hbitmap.o
  CC      tests/test-thread-pool.o
  CC      tests/test-blockjob.o
  CC      tests/test-blockjob-txn.o
  CC      tests/test-x86-cpuid.o
  CC      tests/test-xbzrle.o
  CC      tests/test-vmstate.o
  CC      tests/test-shift128.o
  CC      tests/test-mul64.o
  CC      tests/test-cutils.o
  CC      tests/test-int128.o
  CC      tests/rcutorture.o
  CC      tests/test-rcu-list.o
  CC      tests/test-qdist.o
  CC      tests/test-qht-par.o
/tmp/qemu-test/src/tests/test-int128.c:180: warning: ‘__noclone__’ attribute directive ignored
  CC      tests/test-qht.o
  CC      tests/qht-bench.o
  CC      tests/test-bitops.o
  CC      tests/check-qom-interface.o
  CC      tests/test-bitcnt.o
  CC      tests/check-qom-proplist.o
  CC      tests/test-qemu-opts.o
  CC      tests/test-keyval.o
  CC      tests/test-write-threshold.o
  CC      tests/test-crypto-hash.o
  CC      tests/test-crypto-hmac.o
  CC      tests/test-crypto-cipher.o
  CC      tests/libqtest.o
  CC      tests/test-crypto-secret.o
  CC      tests/test-timed-average.o
  CC      tests/test-io-task.o
  CC      tests/test-qga.o
  CC      tests/test-io-channel-socket.o
  CC      tests/io-channel-helpers.o
  CC      tests/test-io-channel-file.o
  CC      tests/test-io-channel-command.o
  CC      tests/test-io-channel-buffer.o
  CC      tests/test-base64.o
  CC      tests/test-crypto-ivgen.o
  CC      tests/test-crypto-afsplit.o
  CC      tests/test-crypto-xts.o
  CC      tests/test-crypto-block.o
  CC      tests/test-logging.o
  CC      tests/test-replication.o
  CC      tests/test-bufferiszero.o
  CC      tests/test-uuid.o
  CC      tests/ptimer-test.o
  CC      tests/ptimer-test-stubs.o
  CC      tests/test-qapi-util.o
  CC      tests/vhost-user-test.o
  CC      tests/libqos/pci.o
  CC      tests/libqos/fw_cfg.o
  CC      tests/libqos/malloc.o
  CC      tests/libqos/i2c.o
  CC      tests/libqos/libqos.o
  CC      tests/libqos/malloc-spapr.o
  CC      tests/libqos/libqos-spapr.o
  CC      tests/libqos/rtas.o
  CC      tests/libqos/pci-spapr.o
  CC      tests/libqos/pci-pc.o
  CC      tests/libqos/malloc-pc.o
  CC      tests/libqos/libqos-pc.o
  CC      tests/libqos/ahci.o
  CC      tests/libqos/virtio.o
  CC      tests/libqos/virtio-pci.o
  CC      tests/libqos/virtio-mmio.o
  CC      tests/libqos/malloc-generic.o
  CC      tests/endianness-test.o
  CC      tests/fdc-test.o
  CC      tests/ide-test.o
  CC      tests/ahci-test.o
/tmp/qemu-test/src/tests/ide-test.c: In function ‘cdrom_pio_impl’:
/tmp/qemu-test/src/tests/ide-test.c:803: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result
/tmp/qemu-test/src/tests/ide-test.c: In function ‘test_cdrom_dma’:
/tmp/qemu-test/src/tests/ide-test.c:899: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result
  CC      tests/hd-geo-test.o
  CC      tests/boot-order-test.o
  CC      tests/bios-tables-test.o
  CC      tests/boot-sector.o
  CC      tests/acpi-utils.o
  CC      tests/boot-serial-test.o
  CC      tests/pxe-test.o
  CC      tests/rtc-test.o
  CC      tests/ipmi-kcs-test.o
  CC      tests/ipmi-bt-test.o
  CC      tests/i440fx-test.o
  CC      tests/fw_cfg-test.o
  CC      tests/wdt_ib700-test.o
  CC      tests/drive_del-test.o
  CC      tests/tco-test.o
  CC      tests/e1000-test.o
  CC      tests/e1000e-test.o
  CC      tests/rtl8139-test.o
  CC      tests/pcnet-test.o
  CC      tests/ne2000-test.o
  CC      tests/nvme-test.o
  CC      tests/eepro100-test.o
  CC      tests/ac97-test.o
  CC      tests/es1370-test.o
  CC      tests/virtio-net-test.o
  CC      tests/virtio-balloon-test.o
  CC      tests/virtio-blk-test.o
  CC      tests/virtio-rng-test.o
  CC      tests/virtio-scsi-test.o
  CC      tests/virtio-console-test.o
  CC      tests/virtio-serial-test.o
  CC      tests/tpci200-test.o
  CC      tests/ipoctal232-test.o
  CC      tests/display-vga-test.o
  CC      tests/intel-hda-test.o
  CC      tests/ivshmem-test.o
  CC      tests/vmxnet3-test.o
  CC      tests/pvpanic-test.o
  CC      tests/i82801b11-test.o
  CC      tests/ioh3420-test.o
  CC      tests/usb-hcd-ohci-test.o
  CC      tests/libqos/usb.o
  CC      tests/usb-hcd-uhci-test.o
  CC      tests/usb-hcd-ehci-test.o
  CC      tests/usb-hcd-xhci-test.o
  CC      tests/q35-test.o
  CC      tests/pc-cpu-test.o
  CC      tests/test-netfilter.o
  CC      tests/test-filter-mirror.o
  CC      tests/test-filter-redirector.o
  CC      tests/postcopy-test.o
  CC      tests/test-x86-cpuid-compat.o
  CC      tests/numa-test.o
  CC      tests/device-introspect-test.o
  CC      tests/qmp-test.o
  CC      tests/qom-test.o
  CC      tests/test-hmp.o
  LINK    tests/check-qdict
  LINK    tests/test-char
  LINK    tests/check-qfloat
  LINK    tests/check-qint
  LINK    tests/check-qstring
  LINK    tests/check-qlist
  LINK    tests/check-qnull
  LINK    tests/check-qjson
  CC      tests/test-qapi-visit.o
  CC      tests/test-qapi-types.o
  CC      tests/test-qapi-event.o
  CC      tests/test-qmp-introspect.o
  CC      tests/test-qmp-marshal.o
  LINK    tests/test-coroutine
  LINK    tests/test-iov
  LINK    tests/test-aio
  LINK    tests/test-aio-multithread
  LINK    tests/test-throttle
  LINK    tests/test-thread-pool
  LINK    tests/test-hbitmap
  LINK    tests/test-blockjob
  LINK    tests/test-blockjob-txn
  LINK    tests/test-x86-cpuid
  LINK    tests/test-xbzrle
  LINK    tests/test-vmstate
  LINK    tests/test-cutils
  LINK    tests/test-shift128
  LINK    tests/test-mul64
  LINK    tests/test-int128
  LINK    tests/rcutorture
  LINK    tests/test-rcu-list
  LINK    tests/test-qdist
  LINK    tests/test-qht
  LINK    tests/qht-bench
  LINK    tests/test-bitops
  LINK    tests/test-bitcnt
  LINK    tests/check-qom-interface
  LINK    tests/check-qom-proplist
  LINK    tests/test-qemu-opts
  LINK    tests/test-keyval
  LINK    tests/test-write-threshold
  LINK    tests/test-crypto-hash
  LINK    tests/test-crypto-hmac
  LINK    tests/test-crypto-cipher
  LINK    tests/test-crypto-secret
  LINK    tests/test-qga
  LINK    tests/test-timed-average
  LINK    tests/test-io-task
  LINK    tests/test-io-channel-socket
  LINK    tests/test-io-channel-file
  LINK    tests/test-io-channel-command
  LINK    tests/test-io-channel-buffer
  LINK    tests/test-base64
  LINK    tests/test-crypto-ivgen
  LINK    tests/test-crypto-afsplit
  LINK    tests/test-crypto-xts
  LINK    tests/test-crypto-block
  LINK    tests/test-logging
  LINK    tests/test-replication
  LINK    tests/test-bufferiszero
  LINK    tests/test-uuid
  LINK    tests/ptimer-test
  LINK    tests/test-qapi-util
  LINK    tests/vhost-user-test
  LINK    tests/endianness-test
  LINK    tests/fdc-test
  LINK    tests/ide-test
  LINK    tests/ahci-test
  LINK    tests/hd-geo-test
  LINK    tests/boot-order-test
  LINK    tests/bios-tables-test
  LINK    tests/boot-serial-test
  LINK    tests/pxe-test
  LINK    tests/rtc-test
  LINK    tests/ipmi-kcs-test
  LINK    tests/ipmi-bt-test
  LINK    tests/i440fx-test
  LINK    tests/fw_cfg-test
  LINK    tests/drive_del-test
  LINK    tests/wdt_ib700-test
  LINK    tests/tco-test
  LINK    tests/e1000-test
  LINK    tests/e1000e-test
  LINK    tests/rtl8139-test
  LINK    tests/pcnet-test
  LINK    tests/eepro100-test
  LINK    tests/ne2000-test
  LINK    tests/nvme-test
  LINK    tests/ac97-test
  LINK    tests/es1370-test
  LINK    tests/virtio-net-test
  LINK    tests/virtio-balloon-test
  LINK    tests/virtio-blk-test
  LINK    tests/virtio-rng-test
  LINK    tests/virtio-scsi-test
  LINK    tests/virtio-serial-test
  LINK    tests/virtio-console-test
  LINK    tests/tpci200-test
  LINK    tests/ipoctal232-test
  LINK    tests/display-vga-test
  LINK    tests/intel-hda-test
  LINK    tests/ivshmem-test
  LINK    tests/vmxnet3-test
  LINK    tests/pvpanic-test
  LINK    tests/i82801b11-test
  LINK    tests/ioh3420-test
  LINK    tests/usb-hcd-ohci-test
  LINK    tests/usb-hcd-uhci-test
  LINK    tests/usb-hcd-ehci-test
  LINK    tests/usb-hcd-xhci-test
  LINK    tests/pc-cpu-test
  LINK    tests/q35-test
  LINK    tests/test-netfilter
  LINK    tests/test-filter-mirror
  LINK    tests/test-filter-redirector
  LINK    tests/postcopy-test
  LINK    tests/test-x86-cpuid-compat
  LINK    tests/numa-test
  LINK    tests/qmp-test
  LINK    tests/device-introspect-test
  LINK    tests/qom-test
  LINK    tests/test-hmp
  GTESTER tests/test-char
  GTESTER tests/check-qdict
  GTESTER tests/check-qfloat
  GTESTER tests/check-qint
  GTESTER tests/check-qstring
  GTESTER tests/check-qlist
  GTESTER tests/check-qnull
  GTESTER tests/check-qjson
  LINK    tests/test-qobject-output-visitor
  LINK    tests/test-clone-visitor
  LINK    tests/test-qobject-input-visitor
  LINK    tests/test-qmp-commands
  LINK    tests/test-string-input-visitor
  LINK    tests/test-string-output-visitor
  LINK    tests/test-qmp-event
  LINK    tests/test-opts-visitor
  GTESTER tests/test-coroutine
  LINK    tests/test-visitor-serialization
  GTESTER tests/test-iov
  GTESTER tests/test-aio
  GTESTER tests/test-aio-multithread
  GTESTER tests/test-throttle
  GTESTER tests/test-thread-pool
  GTESTER tests/test-hbitmap
  GTESTER tests/test-blockjob
  GTESTER tests/test-blockjob-txn
  GTESTER tests/test-xbzrle
  GTESTER tests/test-x86-cpuid
  GTESTER tests/test-vmstate
Failed to load simple/primitive:b_1
Failed to load simple/primitive:i64_2
Failed to load simple/primitive:i32_1
Failed to load simple/primitive:i32_1
Failed to load test/with_tmp:a
Failed to load test/tmp_child_parent:f
Failed to load test/tmp_child:parent
Failed to load test/with_tmp:tmp
Failed to load test/tmp_child:diff
Failed to load test/with_tmp:tmp
Failed to load test/tmp_child:diff
Failed to load test/with_tmp:tmp
  GTESTER tests/test-cutils
  GTESTER tests/test-shift128
  GTESTER tests/test-mul64
  GTESTER tests/rcutorture
  GTESTER tests/test-int128
  GTESTER tests/test-rcu-list
  GTESTER tests/test-qdist
  GTESTER tests/test-qht
  LINK    tests/test-qht-par
  GTESTER tests/test-bitops
  GTESTER tests/test-bitcnt
  GTESTER tests/check-qom-interface
  GTESTER tests/check-qom-proplist
  GTESTER tests/test-qemu-opts
  GTESTER tests/test-keyval
  GTESTER tests/test-write-threshold
  GTESTER tests/test-crypto-hash
  GTESTER tests/test-crypto-hmac
  GTESTER tests/test-crypto-cipher
  GTESTER tests/test-crypto-secret
  GTESTER tests/test-qga
  GTESTER tests/test-timed-average
  GTESTER tests/test-io-task
  GTESTER tests/test-io-channel-socket
  GTESTER tests/test-io-channel-file
  GTESTER tests/test-io-channel-command
  GTESTER tests/test-io-channel-buffer
  GTESTER tests/test-base64
  GTESTER tests/test-crypto-ivgen
  GTESTER tests/test-crypto-afsplit
  GTESTER tests/test-crypto-xts
  GTESTER tests/test-crypto-block
  GTESTER tests/test-logging
  GTESTER tests/test-replication
  GTESTER tests/test-bufferiszero
  GTESTER tests/test-uuid
  GTESTER tests/ptimer-test
  GTESTER tests/test-qapi-util
  GTESTER check-qtest-x86_64
  GTESTER check-qtest-aarch64
  GTESTER tests/test-qobject-output-visitor
  GTESTER tests/test-clone-visitor
  GTESTER tests/test-qobject-input-visitor
  GTESTER tests/test-qmp-commands
  GTESTER tests/test-string-input-visitor
  GTESTER tests/test-string-output-visitor
  GTESTER tests/test-qmp-event
  GTESTER tests/test-opts-visitor
  GTESTER tests/test-visitor-serialization
  GTESTER tests/test-qht-par
qemu-system-aarch64: warning: CPU(s) not present in any NUMA nodes: CPU 2 [thread-id: 2], CPU 3 [thread-id: 3], CPU 6 [thread-id: 6], CPU 7 [thread-id: 7]
qemu-system-aarch64: warning: All CPU(s) up to maxcpus should be described in NUMA config, ability to start up with partial NUMA mappings is obsoleted and will be removed in future
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
Back to tcg accelerator.
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
Back to tcg accelerator.
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
Back to tcg accelerator.
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
Back to tcg accelerator.
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
Back to tcg accelerator.
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
Back to tcg accelerator.
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
Back to tcg accelerator.
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
Back to tcg accelerator.
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
Back to tcg accelerator.
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
Back to tcg accelerator.
qemu-system-x86_64: warning: CPU(s) not present in any NUMA nodes: CPU 2 [socket-id: 2, core-id: 0, thread-id: 0], CPU 3 [socket-id: 3, core-id: 0, thread-id: 0], CPU 6 [socket-id: 6, core-id: 0, thread-id: 0], CPU 7 [socket-id: 7, core-id: 0, thread-id: 0]
qemu-system-x86_64: warning: All CPU(s) up to maxcpus should be described in NUMA config, ability to start up with partial NUMA mappings is obsoleted and will be removed in future
make[1]: Leaving directory '/var/tmp/patchew-tester-tmp-i0aq57qp/src'

real	12m32.960s
user	0m4.080s
sys	0m1.322s
  BUILD   fedora
make[1]: Entering directory '/var/tmp/patchew-tester-tmp-i0aq57qp/src'
  ARCHIVE qemu.tgz
  ARCHIVE dtc.tgz
  COPY    RUNNER
    RUN test-mingw in qemu:fedora 
Packages installed:
PyYAML-3.11-13.fc25.x86_64
SDL-devel-1.2.15-21.fc24.x86_64
bc-1.06.95-16.fc24.x86_64
bison-3.0.4-4.fc24.x86_64
ccache-3.3.4-1.fc25.x86_64
clang-3.9.1-2.fc25.x86_64
findutils-4.6.0-8.fc25.x86_64
flex-2.6.0-3.fc25.x86_64
gcc-6.3.1-1.fc25.x86_64
gcc-c++-6.3.1-1.fc25.x86_64
git-2.9.3-2.fc25.x86_64
glib2-devel-2.50.3-1.fc25.x86_64
libfdt-devel-1.4.2-1.fc25.x86_64
make-4.1-5.fc24.x86_64
mingw32-SDL-1.2.15-7.fc24.noarch
mingw32-bzip2-1.0.6-7.fc24.noarch
mingw32-curl-7.47.0-1.fc24.noarch
mingw32-glib2-2.50.1-1.fc25.noarch
mingw32-gmp-6.1.1-1.fc25.noarch
mingw32-gnutls-3.5.5-2.fc25.noarch
mingw32-gtk2-2.24.31-2.fc25.noarch
mingw32-gtk3-3.22.2-1.fc25.noarch
mingw32-libjpeg-turbo-1.5.1-1.fc25.noarch
mingw32-libpng-1.6.27-1.fc25.noarch
mingw32-libssh2-1.4.3-5.fc24.noarch
mingw32-libtasn1-4.9-1.fc25.noarch
mingw32-nettle-3.3-1.fc25.noarch
mingw32-pixman-0.34.0-1.fc25.noarch
mingw32-pkg-config-0.28-6.fc24.x86_64
mingw64-SDL-1.2.15-7.fc24.noarch
mingw64-bzip2-1.0.6-7.fc24.noarch
mingw64-curl-7.47.0-1.fc24.noarch
mingw64-glib2-2.50.1-1.fc25.noarch
mingw64-gmp-6.1.1-1.fc25.noarch
mingw64-gnutls-3.5.5-2.fc25.noarch
mingw64-gtk2-2.24.31-2.fc25.noarch
mingw64-gtk3-3.22.2-1.fc25.noarch
mingw64-libjpeg-turbo-1.5.1-1.fc25.noarch
mingw64-libpng-1.6.27-1.fc25.noarch
mingw64-libssh2-1.4.3-5.fc24.noarch
mingw64-libtasn1-4.9-1.fc25.noarch
mingw64-nettle-3.3-1.fc25.noarch
mingw64-pixman-0.34.0-1.fc25.noarch
mingw64-pkg-config-0.28-6.fc24.x86_64
package python2 is not installed
perl-5.24.1-385.fc25.x86_64
pixman-devel-0.34.0-2.fc24.x86_64
sparse-0.5.0-10.fc25.x86_64
tar-1.29-3.fc25.x86_64
which-2.21-1.fc25.x86_64
zlib-devel-1.2.8-10.fc24.x86_64

Environment variables:
FBR=f25
PACKAGES=ccache git tar PyYAML sparse flex bison python2     glib2-devel pixman-devel zlib-devel SDL-devel libfdt-devel     gcc gcc-c++ clang make perl which bc findutils     mingw32-pixman mingw32-glib2 mingw32-gmp mingw32-SDL mingw32-pkg-config     mingw32-gtk2 mingw32-gtk3 mingw32-gnutls mingw32-nettle mingw32-libtasn1     mingw32-libjpeg-turbo mingw32-libpng mingw32-curl mingw32-libssh2     mingw32-bzip2     mingw64-pixman mingw64-glib2 mingw64-gmp mingw64-SDL mingw64-pkg-config     mingw64-gtk2 mingw64-gtk3 mingw64-gnutls mingw64-nettle mingw64-libtasn1     mingw64-libjpeg-turbo mingw64-libpng mingw64-curl mingw64-libssh2     mingw64-bzip2
HOSTNAME=
TERM=xterm
MAKEFLAGS= -j8
HISTSIZE=1000
J=8
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:
CCACHE_DIR=/var/tmp/ccache
EXTRA_CONFIGURE_OPTS=
V=
SHOW_ENV=1
MAIL=/var/spool/mail/root
PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
TARGET_LIST=
HISTCONTROL=ignoredups
FGC=f25
SHLVL=1
HOME=/root
TEST_DIR=/tmp/qemu-test
DISTTAG=f25docker
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
FEATURES=mingw clang pyyaml dtc
DEBUG=
_=/usr/bin/env

Configure options:
--enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/var/tmp/qemu-build/install --cross-prefix=x86_64-w64-mingw32- --enable-trace-backends=simple --enable-debug --enable-gnutls --enable-nettle --enable-curl --enable-vnc --enable-bzip2 --enable-guest-agent --with-sdlabi=1.2 --with-gtkabi=2.0
Install prefix    /var/tmp/qemu-build/install
BIOS directory    /var/tmp/qemu-build/install
binary directory  /var/tmp/qemu-build/install
library directory /var/tmp/qemu-build/install/lib
module directory  /var/tmp/qemu-build/install/lib
libexec directory /var/tmp/qemu-build/install/libexec
include directory /var/tmp/qemu-build/install/include
config directory  /var/tmp/qemu-build/install
local state directory   queried at runtime
Windows SDK       no
Source path       /tmp/qemu-test/src
C compiler        x86_64-w64-mingw32-gcc
Host C compiler   cc
C++ compiler      x86_64-w64-mingw32-g++
Objective-C compiler clang
ARFLAGS           rv
CFLAGS            -g 
QEMU_CFLAGS       -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/pixman-1  -I$(SRC_PATH)/dtc/libfdt -Werror -mms-bitfields -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/glib-2.0 -I/usr/x86_64-w64-mingw32/sys-root/mingw/lib/glib-2.0/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include  -m64 -mcx16 -mthreads -D__USE_MINGW_ANSI_STDIO=1 -DWIN32_LEAN_AND_MEAN -DWINVER=0x501 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv  -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/p11-kit-1 -I/usr/x86_64-w64-mingw32/sys-root/mingw/include  -I/usr/x86_64-w64-mingw32/sys-root/mingw/include   -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/libpng16 
LDFLAGS           -Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase -Wl,--warn-common -m64 -g 
make              make
install           install
python            python -B
smbd              /usr/sbin/smbd
module support    no
host CPU          x86_64
host big endian   no
target list       x86_64-softmmu aarch64-softmmu
tcg debug enabled yes
gprof enabled     no
sparse enabled    no
strip binaries    no
profiler          no
static build      no
pixman            system
SDL support       yes (1.2.15)
GTK support       yes (2.24.31)
GTK GL support    no
VTE support       no 
TLS priority      NORMAL
GNUTLS support    yes
GNUTLS rnd        yes
libgcrypt         no
libgcrypt kdf     no
nettle            yes (3.3)
nettle kdf        yes
libtasn1          yes
curses support    no
virgl support     no
curl support      yes
mingw32 support   yes
Audio drivers     dsound
Block whitelist (rw) 
Block whitelist (ro) 
VirtFS support    no
VNC support       yes
VNC SASL support  no
VNC JPEG support  yes
VNC PNG support   yes
xen support       no
brlapi support    no
bluez  support    no
Documentation     no
PIE               no
vde support       no
netmap support    no
Linux AIO support no
ATTR/XATTR support no
Install blobs     yes
KVM support       no
HAX support       yes
RDMA support      no
TCG interpreter   no
fdt support       yes
preadv support    no
fdatasync         no
madvise           no
posix_madvise     no
libcap-ng support no
vhost-net support no
vhost-scsi support no
vhost-vsock support no
Trace backends    simple
Trace output file trace-<pid>
spice support     no 
rbd support       no
xfsctl support    no
smartcard support no
libusb            no
usb net redir     no
OpenGL support    no
OpenGL dmabufs    no
libiscsi support  no
libnfs support    no
build guest agent yes
QGA VSS support   no
QGA w32 disk info yes
QGA MSI support   no
seccomp support   no
coroutine backend win32
coroutine pool    yes
debug stack usage no
GlusterFS support no
gcov              gcov
gcov enabled      no
TPM support       yes
libssh2 support   yes
TPM passthrough   no
QOM debugging     yes
Live block migration yes
lzo support       no
snappy support    no
bzip2 support     yes
NUMA host support no
tcmalloc support  no
jemalloc support  no
avx2 optimization yes
replication support yes
VxHS block device no
mkdir -p dtc/libfdt
mkdir -p dtc/tests
  GEN     x86_64-softmmu/config-devices.mak.tmp
  GEN     aarch64-softmmu/config-devices.mak.tmp
  GEN     config-host.h
  GEN     qemu-options.def
  GEN     qapi-visit.h
  GEN     qmp-commands.h
  GEN     qapi-types.h
  GEN     qapi-event.h
  GEN     x86_64-softmmu/config-devices.mak
  GEN     qmp-marshal.c
  GEN     qapi-types.c
  GEN     aarch64-softmmu/config-devices.mak
  GEN     qapi-visit.c
  GEN     qapi-event.c
  GEN     qmp-introspect.h
  GEN     qmp-introspect.c
  GEN     trace/generated-tcg-tracers.h
  GEN     trace/generated-helpers-wrappers.h
  GEN     trace/generated-helpers.h
  GEN     trace/generated-helpers.c
  GEN     module_block.h
  GEN     tests/test-qapi-types.h
  GEN     tests/test-qapi-visit.h
  GEN     tests/test-qmp-commands.h
  GEN     tests/test-qapi-event.h
  GEN     tests/test-qmp-introspect.h
  GEN     trace-root.h
  GEN     util/trace.h
  GEN     crypto/trace.h
  GEN     io/trace.h
  GEN     migration/trace.h
  GEN     block/trace.h
  GEN     backends/trace.h
  GEN     chardev/trace.h
  GEN     hw/block/trace.h
  GEN     hw/block/dataplane/trace.h
  GEN     hw/char/trace.h
  GEN     hw/intc/trace.h
  GEN     hw/net/trace.h
  GEN     hw/virtio/trace.h
  GEN     hw/audio/trace.h
  GEN     hw/misc/trace.h
  GEN     hw/usb/trace.h
  GEN     hw/scsi/trace.h
  GEN     hw/nvram/trace.h
  GEN     hw/display/trace.h
  GEN     hw/input/trace.h
  GEN     hw/timer/trace.h
  GEN     hw/dma/trace.h
  GEN     hw/sparc/trace.h
  GEN     hw/sd/trace.h
  GEN     hw/isa/trace.h
  GEN     hw/mem/trace.h
  GEN     hw/i386/trace.h
  GEN     hw/i386/xen/trace.h
  GEN     hw/9pfs/trace.h
  GEN     hw/ppc/trace.h
  GEN     hw/pci/trace.h
  GEN     hw/s390x/trace.h
  GEN     hw/vfio/trace.h
  GEN     hw/acpi/trace.h
  GEN     hw/arm/trace.h
  GEN     hw/alpha/trace.h
  GEN     hw/xen/trace.h
  GEN     ui/trace.h
  GEN     audio/trace.h
  GEN     net/trace.h
  GEN     target/arm/trace.h
  GEN     target/i386/trace.h
  GEN     target/mips/trace.h
  GEN     target/sparc/trace.h
  GEN     target/s390x/trace.h
  GEN     target/ppc/trace.h
  GEN     qom/trace.h
  GEN     linux-user/trace.h
  GEN     qapi/trace.h
  GEN     trace-root.c
  GEN     util/trace.c
  GEN     crypto/trace.c
  GEN     io/trace.c
  GEN     migration/trace.c
  GEN     block/trace.c
  GEN     backends/trace.c
  GEN     chardev/trace.c
  GEN     hw/block/trace.c
  GEN     hw/block/dataplane/trace.c
  GEN     hw/char/trace.c
  GEN     hw/intc/trace.c
  GEN     hw/net/trace.c
  GEN     hw/virtio/trace.c
  GEN     hw/audio/trace.c
  GEN     hw/misc/trace.c
  GEN     hw/usb/trace.c
  GEN     hw/scsi/trace.c
  GEN     hw/nvram/trace.c
  GEN     hw/display/trace.c
  GEN     hw/input/trace.c
  GEN     hw/timer/trace.c
  GEN     hw/dma/trace.c
  GEN     hw/sparc/trace.c
  GEN     hw/sd/trace.c
  GEN     hw/isa/trace.c
  GEN     hw/mem/trace.c
  GEN     hw/i386/trace.c
  GEN     hw/i386/xen/trace.c
  GEN     hw/9pfs/trace.c
  GEN     hw/ppc/trace.c
  GEN     hw/pci/trace.c
  GEN     hw/s390x/trace.c
  GEN     hw/vfio/trace.c
  GEN     hw/acpi/trace.c
  GEN     hw/arm/trace.c
  GEN     hw/alpha/trace.c
  GEN     hw/xen/trace.c
  GEN     ui/trace.c
  GEN     audio/trace.c
  GEN     net/trace.c
  GEN     target/arm/trace.c
  GEN     target/i386/trace.c
  GEN     target/mips/trace.c
  GEN     target/sparc/trace.c
  GEN     target/s390x/trace.c
  GEN     target/ppc/trace.c
  GEN     qom/trace.c
  GEN     linux-user/trace.c
  GEN     qapi/trace.c
  GEN     config-all-devices.mak
	 DEP /tmp/qemu-test/src/dtc/tests/dumptrees.c
	 DEP /tmp/qemu-test/src/dtc/tests/trees.S
	 DEP /tmp/qemu-test/src/dtc/tests/testutils.c
	 DEP /tmp/qemu-test/src/dtc/tests/value-labels.c
	 DEP /tmp/qemu-test/src/dtc/tests/asm_tree_dump.c
	 DEP /tmp/qemu-test/src/dtc/tests/truncated_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/check_path.c
	 DEP /tmp/qemu-test/src/dtc/tests/overlay_bad_fixup.c
	 DEP /tmp/qemu-test/src/dtc/tests/overlay.c
	 DEP /tmp/qemu-test/src/dtc/tests/subnode_iterate.c
	 DEP /tmp/qemu-test/src/dtc/tests/property_iterate.c
	 DEP /tmp/qemu-test/src/dtc/tests/integer-expressions.c
	 DEP /tmp/qemu-test/src/dtc/tests/utilfdt_test.c
	 DEP /tmp/qemu-test/src/dtc/tests/path_offset_aliases.c
	 DEP /tmp/qemu-test/src/dtc/tests/add_subnode_with_nops.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_unordered.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtb_reverse.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_ordered.c
	 DEP /tmp/qemu-test/src/dtc/tests/extra-terminating-null.c
	 DEP /tmp/qemu-test/src/dtc/tests/incbin.c
	 DEP /tmp/qemu-test/src/dtc/tests/boot-cpuid.c
	 DEP /tmp/qemu-test/src/dtc/tests/phandle_format.c
	 DEP /tmp/qemu-test/src/dtc/tests/path-references.c
	 DEP /tmp/qemu-test/src/dtc/tests/references.c
	 DEP /tmp/qemu-test/src/dtc/tests/string_escapes.c
	 DEP /tmp/qemu-test/src/dtc/tests/del_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/propname_escapes.c
	 DEP /tmp/qemu-test/src/dtc/tests/appendprop2.c
	 DEP /tmp/qemu-test/src/dtc/tests/appendprop1.c
	 DEP /tmp/qemu-test/src/dtc/tests/del_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/setprop.c
	 DEP /tmp/qemu-test/src/dtc/tests/set_name.c
	 DEP /tmp/qemu-test/src/dtc/tests/rw_tree1.c
	 DEP /tmp/qemu-test/src/dtc/tests/open_pack.c
	 DEP /tmp/qemu-test/src/dtc/tests/nopulate.c
	 DEP /tmp/qemu-test/src/dtc/tests/mangle-layout.c
	 DEP /tmp/qemu-test/src/dtc/tests/move_and_save.c
	 DEP /tmp/qemu-test/src/dtc/tests/sw_tree1.c
	 DEP /tmp/qemu-test/src/dtc/tests/nop_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/nop_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/setprop_inplace.c
	 DEP /tmp/qemu-test/src/dtc/tests/stringlist.c
	 DEP /tmp/qemu-test/src/dtc/tests/addr_size_cells.c
	 DEP /tmp/qemu-test/src/dtc/tests/notfound.c
	 DEP /tmp/qemu-test/src/dtc/tests/sized_cells.c
	 DEP /tmp/qemu-test/src/dtc/tests/char_literal.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_alias.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_compatible.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_check_compatible.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_phandle.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_prop_value.c
	 DEP /tmp/qemu-test/src/dtc/tests/parent_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/supernode_atdepth_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_phandle.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_path.c
	 DEP /tmp/qemu-test/src/dtc/tests/getprop.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_name.c
	 DEP /tmp/qemu-test/src/dtc/tests/path_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/subnode_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/find_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/root_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_mem_rsv.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_overlay.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_addresses.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_empty_tree.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_strerror.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_rw.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_sw.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_wip.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_ro.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt.c
	 DEP /tmp/qemu-test/src/dtc/util.c
	 DEP /tmp/qemu-test/src/dtc/fdtput.c
	 DEP /tmp/qemu-test/src/dtc/fdtget.c
	 DEP /tmp/qemu-test/src/dtc/fdtdump.c
	 LEX convert-dtsv0-lexer.lex.c
	 DEP /tmp/qemu-test/src/dtc/srcpos.c
	 BISON dtc-parser.tab.c
	 LEX dtc-lexer.lex.c
	 DEP /tmp/qemu-test/src/dtc/treesource.c
	 DEP /tmp/qemu-test/src/dtc/livetree.c
	 DEP /tmp/qemu-test/src/dtc/fstree.c
	 DEP /tmp/qemu-test/src/dtc/flattree.c
	 DEP /tmp/qemu-test/src/dtc/dtc.c
	 DEP /tmp/qemu-test/src/dtc/data.c
	 DEP /tmp/qemu-test/src/dtc/checks.c
	 DEP convert-dtsv0-lexer.lex.c
	 DEP dtc-parser.tab.c
	 DEP dtc-lexer.lex.c
	CHK version_gen.h
	UPD version_gen.h
	 DEP /tmp/qemu-test/src/dtc/util.c
	 CC libfdt/fdt.o
	 CC libfdt/fdt_ro.o
	 CC libfdt/fdt_wip.o
	 CC libfdt/fdt_sw.o
	 CC libfdt/fdt_rw.o
	 CC libfdt/fdt_strerror.o
	 CC libfdt/fdt_empty_tree.o
	 CC libfdt/fdt_addresses.o
	 CC libfdt/fdt_overlay.o
	 AR libfdt/libfdt.a
x86_64-w64-mingw32-ar: creating libfdt/libfdt.a
a - libfdt/fdt.o
a - libfdt/fdt_ro.o
a - libfdt/fdt_wip.o
a - libfdt/fdt_sw.o
a - libfdt/fdt_rw.o
a - libfdt/fdt_strerror.o
a - libfdt/fdt_empty_tree.o
a - libfdt/fdt_addresses.o
a - libfdt/fdt_overlay.o
  RC      version.o
  GEN     qga/qapi-generated/qga-qapi-visit.h
  GEN     qga/qapi-generated/qga-qmp-commands.h
  GEN     qga/qapi-generated/qga-qapi-types.h
  GEN     qga/qapi-generated/qga-qapi-types.c
  GEN     qga/qapi-generated/qga-qmp-marshal.c
  GEN     qga/qapi-generated/qga-qapi-visit.c
  CC      qmp-introspect.o
  CC      qapi-types.o
  CC      qapi-visit.o
  CC      qapi-event.o
  CC      qapi/qapi-visit-core.o
  CC      qapi/qapi-dealloc-visitor.o
  CC      qapi/qobject-input-visitor.o
  CC      qapi/qobject-output-visitor.o
  CC      qapi/qmp-registry.o
  CC      qapi/qmp-dispatch.o
  CC      qapi/string-input-visitor.o
  CC      qapi/string-output-visitor.o
  CC      qapi/opts-visitor.o
  CC      qapi/qapi-clone-visitor.o
  CC      qapi/qmp-event.o
  CC      qapi/qapi-util.o
  CC      qobject/qnull.o
  CC      qobject/qstring.o
  CC      qobject/qint.o
  CC      qobject/qdict.o
  CC      qobject/qfloat.o
  CC      qobject/qlist.o
  CC      qobject/qbool.o
  CC      qobject/qjson.o
  CC      qobject/qobject.o
  CC      qobject/json-lexer.o
  CC      qobject/json-streamer.o
  CC      qobject/json-parser.o
  CC      trace/simple.o
  CC      trace/control.o
  CC      trace/qmp.o
  CC      util/osdep.o
  CC      util/cutils.o
  CC      util/unicode.o
  CC      util/qemu-timer-common.o
  CC      util/bufferiszero.o
  CC      util/lockcnt.o
  CC      util/aiocb.o
  CC      util/async.o
  CC      util/thread-pool.o
  CC      util/qemu-timer.o
  CC      util/main-loop.o
  CC      util/iohandler.o
  CC      util/aio-win32.o
  CC      util/event_notifier-win32.o
  CC      util/oslib-win32.o
  CC      util/qemu-thread-win32.o
  CC      util/envlist.o
  CC      util/path.o
  CC      util/module.o
  CC      util/host-utils.o
  CC      util/bitmap.o
  CC      util/bitops.o
  CC      util/hbitmap.o
  CC      util/fifo8.o
  CC      util/acl.o
  CC      util/error.o
  CC      util/qemu-error.o
  CC      util/id.o
  CC      util/iov.o
  CC      util/qemu-config.o
  CC      util/qemu-sockets.o
  CC      util/uri.o
  CC      util/notify.o
  CC      util/qemu-option.o
  CC      util/qemu-progress.o
  CC      util/keyval.o
  CC      util/hexdump.o
  CC      util/crc32c.o
  CC      util/uuid.o
  CC      util/throttle.o
  CC      util/getauxval.o
  CC      util/readline.o
  CC      util/rcu.o
  CC      util/qemu-coroutine.o
  CC      util/qemu-coroutine-lock.o
  CC      util/qemu-coroutine-io.o
  CC      util/qemu-coroutine-sleep.o
  CC      util/coroutine-win32.o
  CC      util/buffer.o
  CC      util/timed-average.o
  CC      util/base64.o
  CC      util/log.o
  CC      util/qdist.o
  CC      util/qht.o
  CC      util/range.o
  CC      util/systemd.o
  CC      trace-root.o
  CC      crypto/trace.o
  CC      util/trace.o
  CC      io/trace.o
  CC      migration/trace.o
  CC      block/trace.o
  CC      backends/trace.o
  CC      chardev/trace.o
  CC      hw/block/trace.o
  CC      hw/char/trace.o
  CC      hw/block/dataplane/trace.o
  CC      hw/intc/trace.o
  CC      hw/net/trace.o
  CC      hw/virtio/trace.o
  CC      hw/audio/trace.o
  CC      hw/misc/trace.o
  CC      hw/scsi/trace.o
  CC      hw/usb/trace.o
  CC      hw/nvram/trace.o
  CC      hw/display/trace.o
  CC      hw/input/trace.o
  CC      hw/timer/trace.o
  CC      hw/dma/trace.o
  CC      hw/sparc/trace.o
  CC      hw/sd/trace.o
  CC      hw/isa/trace.o
  CC      hw/mem/trace.o
  CC      hw/i386/trace.o
  CC      hw/i386/xen/trace.o
  CC      hw/9pfs/trace.o
  CC      hw/pci/trace.o
  CC      hw/ppc/trace.o
  CC      hw/s390x/trace.o
  CC      hw/vfio/trace.o
  CC      hw/acpi/trace.o
  CC      hw/arm/trace.o
  CC      hw/alpha/trace.o
  CC      hw/xen/trace.o
  CC      ui/trace.o
  CC      audio/trace.o
  CC      net/trace.o
  CC      target/arm/trace.o
  CC      target/i386/trace.o
  CC      target/mips/trace.o
  CC      target/sparc/trace.o
  CC      target/s390x/trace.o
  CC      target/ppc/trace.o
  CC      qom/trace.o
  CC      linux-user/trace.o
  CC      qapi/trace.o
  CC      crypto/pbkdf-stub.o
  CC      stubs/arch-query-cpu-def.o
  CC      stubs/arch-query-cpu-model-expansion.o
  CC      stubs/arch-query-cpu-model-comparison.o
  CC      stubs/arch-query-cpu-model-baseline.o
  CC      stubs/bdrv-next-monitor-owned.o
  CC      stubs/blk-commit-all.o
  CC      stubs/blockdev-close-all-bdrv-states.o
  CC      stubs/clock-warp.o
  CC      stubs/cpu-get-clock.o
  CC      stubs/cpu-get-icount.o
  CC      stubs/dump.o
  CC      stubs/fdset.o
  CC      stubs/gdbstub.o
  CC      stubs/get-vm-name.o
  CC      stubs/error-printf.o
  CC      stubs/iothread.o
  CC      stubs/iothread-lock.o
  CC      stubs/is-daemonized.o
  CC      stubs/machine-init-done.o
  CC      stubs/migr-blocker.o
  CC      stubs/monitor.o
  CC      stubs/notify-event.o
  CC      stubs/replay.o
  CC      stubs/qtest.o
  CC      stubs/runstate-check.o
  CC      stubs/set-fd-handler.o
  CC      stubs/slirp.o
  CC      stubs/sysbus.o
  CC      stubs/uuid.o
  CC      stubs/trace-control.o
  CC      stubs/vmstate.o
  CC      stubs/vm-stop.o
  CC      stubs/fd-register.o
  CC      stubs/qmp_pc_dimm_device_list.o
  CC      stubs/target-monitor-defs.o
  CC      stubs/pc_madt_cpu_entry.o
  CC      stubs/target-get-monitor-def.o
  CC      stubs/vmgenid.o
  CC      block.o
  CC      stubs/xen-hvm.o
  GEN     qemu-img-cmds.h
  CC      stubs/xen-common.o
  CC      blockjob.o
  CC      qemu-io-cmds.o
  CC      replication.o
  CC      block/raw-format.o
  CC      block/qcow.o
  CC      block/vmdk.o
  CC      block/vdi.o
  CC      block/bochs.o
  CC      block/cloop.o
  CC      block/vpc.o
  CC      block/vvfat.o
  CC      block/dmg.o
  CC      block/qcow2.o
  CC      block/qcow2-refcount.o
  CC      block/qcow2-cluster.o
  CC      block/qcow2-cache.o
  CC      block/qcow2-snapshot.o
  CC      block/qed.o
  CC      block/qed-gencb.o
  CC      block/qed-l2-cache.o
  CC      block/qed-table.o
  CC      block/qed-cluster.o
  CC      block/qed-check.o
  CC      block/vhdx.o
  CC      block/vhdx-endian.o
  CC      block/vhdx-log.o
  CC      block/quorum.o
  CC      block/parallels.o
  CC      block/blkdebug.o
  CC      block/blkverify.o
  CC      block/blkreplay.o
  CC      block/block-backend.o
  CC      block/snapshot.o
  CC      block/qapi.o
  CC      block/file-win32.o
  CC      block/win32-aio.o
  CC      block/null.o
  CC      block/mirror.o
  CC      block/commit.o
  CC      block/throttle-groups.o
  CC      block/nbd.o
  CC      block/nbd-client.o
  CC      block/accounting.o
  CC      block/sheepdog.o
  CC      block/dirty-bitmap.o
  CC      block/write-threshold.o
  CC      block/backup.o
  CC      block/replication.o
  CC      block/crypto.o
  CC      nbd/server.o
  CC      nbd/client.o
  CC      nbd/common.o
  CC      block/curl.o
  CC      block/io.o
  CC      block/ssh.o
  CC      block/dmg-bz2.o
  CC      crypto/init.o
  CC      crypto/hash.o
  CC      crypto/hash-nettle.o
  CC      crypto/hmac.o
  CC      crypto/hmac-nettle.o
  CC      crypto/aes.o
  CC      crypto/desrfb.o
  CC      crypto/cipher.o
  CC      crypto/tlscreds.o
  CC      crypto/tlscredsanon.o
  CC      crypto/tlscredsx509.o
  CC      crypto/tlssession.o
  CC      crypto/secret.o
  CC      crypto/random-gnutls.o
  CC      crypto/pbkdf.o
  CC      crypto/pbkdf-nettle.o
  CC      crypto/ivgen.o
  CC      crypto/ivgen-essiv.o
  CC      crypto/ivgen-plain.o
  CC      crypto/ivgen-plain64.o
  CC      crypto/afsplit.o
  CC      crypto/xts.o
  CC      crypto/block.o
  CC      crypto/block-qcow.o
  CC      crypto/block-luks.o
  CC      io/channel.o
  CC      io/channel-buffer.o
  CC      io/channel-command.o
  CC      io/channel-file.o
  CC      io/channel-socket.o
  CC      io/channel-watch.o
  CC      io/channel-tls.o
  CC      io/channel-websock.o
  CC      io/channel-util.o
  CC      io/dns-resolver.o
  CC      io/task.o
  CC      qom/object.o
  CC      qom/qom-qobject.o
  CC      qom/container.o
  CC      qemu-io.o
  CC      blockdev.o
  CC      qom/object_interfaces.o
  CC      blockdev-nbd.o
  CC      iothread.o
  CC      qdev-monitor.o
  CC      device-hotplug.o
  CC      os-win32.o
  CC      bt-host.o
  CC      accel.o
  CC      bt-vhci.o
  CC      dma-helpers.o
  CC      vl.o
  CC      tpm.o
  CC      device_tree.o
  CC      qmp-marshal.o
  CC      cpus-common.o
  CC      qmp.o
  CC      hmp.o
  CC      audio/audio.o
  CC      audio/noaudio.o
  CC      audio/wavaudio.o
  CC      audio/mixeng.o
  CC      audio/sdlaudio.o
  CC      audio/dsoundaudio.o
  CC      audio/audio_win_int.o
  CC      audio/wavcapture.o
  CC      backends/rng.o
  CC      backends/rng-egd.o
  CC      backends/tpm.o
  CC      backends/hostmem.o
  CC      backends/hostmem-ram.o
  CC      backends/cryptodev.o
  CC      backends/cryptodev-builtin.o
  CC      block/stream.o
  CC      chardev/msmouse.o
  CC      chardev/wctablet.o
  CC      chardev/testdev.o
  CC      disas/arm.o
  CXX     disas/arm-a64.o
  CC      disas/i386.o
  CXX     disas/libvixl/vixl/utils.o
  CXX     disas/libvixl/vixl/compiler-intrinsics.o
  CXX     disas/libvixl/vixl/a64/instructions-a64.o
  CXX     disas/libvixl/vixl/a64/decoder-a64.o
  CXX     disas/libvixl/vixl/a64/disasm-a64.o
  CC      hw/acpi/core.o
  CC      hw/acpi/pcihp.o
  CC      hw/acpi/piix4.o
  CC      hw/acpi/tco.o
  CC      hw/acpi/cpu_hotplug.o
  CC      hw/acpi/ich9.o
  CC      hw/acpi/memory_hotplug.o
  CC      hw/acpi/cpu.o
  CC      hw/acpi/nvdimm.o
  CC      hw/acpi/vmgenid.o
  CC      hw/acpi/acpi_interface.o
  CC      hw/acpi/bios-linker-loader.o
  CC      hw/acpi/aml-build.o
  CC      hw/acpi/ipmi.o
  CC      hw/acpi/acpi-stub.o
  CC      hw/acpi/ipmi-stub.o
  CC      hw/audio/sb16.o
  CC      hw/audio/es1370.o
  CC      hw/audio/ac97.o
  CC      hw/audio/fmopl.o
  CC      hw/audio/adlib.o
  CC      hw/audio/gus.o
  CC      hw/audio/gusemu_hal.o
  CC      hw/audio/gusemu_mixer.o
  CC      hw/audio/cs4231a.o
  CC      hw/audio/intel-hda.o
  CC      hw/audio/hda-codec.o
  CC      hw/audio/pcspk.o
  CC      hw/audio/wm8750.o
  CC      hw/audio/pl041.o
  CC      hw/audio/lm4549.o
  CC      hw/audio/marvell_88w8618.o
  CC      hw/audio/soundhw.o
  CC      hw/block/block.o
  CC      hw/block/cdrom.o
  CC      hw/block/hd-geometry.o
  CC      hw/block/fdc.o
  CC      hw/block/m25p80.o
  CC      hw/block/nand.o
  CC      hw/block/pflash_cfi01.o
  CC      hw/block/pflash_cfi02.o
  CC      hw/block/ecc.o
  CC      hw/block/onenand.o
  CC      hw/block/nvme.o
  CC      hw/bt/core.o
  CC      hw/bt/l2cap.o
  CC      hw/bt/sdp.o
  CC      hw/bt/hci.o
  CC      hw/bt/hid.o
  CC      hw/bt/hci-csr.o
  CC      hw/char/ipoctal232.o
  CC      hw/char/parallel.o
  CC      hw/char/serial.o
  CC      hw/char/pl011.o
  CC      hw/char/serial-isa.o
  CC      hw/char/serial-pci.o
  CC      hw/char/virtio-console.o
  CC      hw/char/cadence_uart.o
  CC      hw/char/debugcon.o
  CC      hw/char/imx_serial.o
  CC      hw/core/qdev.o
  CC      hw/core/qdev-properties.o
  CC      hw/core/bus.o
  CC      hw/core/reset.o
  CC      hw/core/fw-path-provider.o
  CC      hw/core/irq.o
  CC      hw/core/hotplug.o
  CC      hw/core/ptimer.o
  CC      hw/core/sysbus.o
  CC      hw/core/machine.o
  CC      hw/core/loader.o
  CC      hw/core/qdev-properties-system.o
  CC      hw/core/register.o
  CC      hw/core/or-irq.o
  CC      hw/core/platform-bus.o
  CC      hw/display/ads7846.o
  CC      hw/display/cirrus_vga.o
  CC      hw/display/pl110.o
  CC      hw/display/ssd0303.o
  CC      hw/display/ssd0323.o
  CC      hw/display/vga-pci.o
  CC      hw/display/vga-isa.o
  CC      hw/display/vmware_vga.o
  CC      hw/display/blizzard.o
  CC      hw/display/exynos4210_fimd.o
  CC      hw/display/framebuffer.o
  CC      hw/display/tc6393xb.o
  CC      hw/dma/pl330.o
  CC      hw/dma/pl080.o
  CC      hw/dma/i8257.o
  CC      hw/gpio/max7310.o
  CC      hw/dma/xlnx-zynq-devcfg.o
  CC      hw/gpio/pl061.o
  CC      hw/gpio/zaurus.o
  CC      hw/gpio/gpio_key.o
  CC      hw/i2c/core.o
  CC      hw/i2c/smbus.o
  CC      hw/i2c/smbus_eeprom.o
  CC      hw/i2c/i2c-ddc.o
  CC      hw/i2c/versatile_i2c.o
  CC      hw/i2c/smbus_ich9.o
  CC      hw/i2c/pm_smbus.o
  CC      hw/i2c/bitbang_i2c.o
  CC      hw/i2c/imx_i2c.o
  CC      hw/i2c/exynos4210_i2c.o
  CC      hw/i2c/aspeed_i2c.o
  CC      hw/ide/core.o
  CC      hw/ide/atapi.o
  CC      hw/ide/qdev.o
  CC      hw/ide/isa.o
  CC      hw/ide/pci.o
  CC      hw/ide/microdrive.o
  CC      hw/ide/piix.o
  CC      hw/ide/ahci.o
  CC      hw/ide/ich.o
  CC      hw/input/hid.o
  CC      hw/input/lm832x.o
  CC      hw/input/pckbd.o
  CC      hw/input/pl050.o
  CC      hw/input/ps2.o
  CC      hw/input/stellaris_input.o
  CC      hw/input/tsc2005.o
  CC      hw/input/vmmouse.o
  CC      hw/input/virtio-input.o
  CC      hw/input/virtio-input-hid.o
  CC      hw/intc/i8259_common.o
  CC      hw/intc/i8259.o
  CC      hw/intc/pl190.o
  CC      hw/intc/imx_avic.o
  CC      hw/intc/realview_gic.o
  CC      hw/intc/ioapic_common.o
  CC      hw/intc/arm_gic_common.o
  CC      hw/intc/arm_gic.o
  CC      hw/intc/arm_gicv2m.o
  CC      hw/intc/arm_gicv3_common.o
  CC      hw/intc/arm_gicv3.o
  CC      hw/intc/arm_gicv3_dist.o
  CC      hw/intc/arm_gicv3_redist.o
  CC      hw/intc/arm_gicv3_its_common.o
  CC      hw/intc/intc.o
  CC      hw/ipack/ipack.o
  CC      hw/ipack/tpci200.o
  CC      hw/ipmi/ipmi.o
  CC      hw/ipmi/ipmi_bmc_sim.o
  CC      hw/ipmi/ipmi_bmc_extern.o
  CC      hw/ipmi/isa_ipmi_kcs.o
  CC      hw/ipmi/isa_ipmi_bt.o
  CC      hw/isa/isa-bus.o
  CC      hw/isa/apm.o
  CC      hw/mem/pc-dimm.o
  CC      hw/mem/nvdimm.o
  CC      hw/misc/applesmc.o
  CC      hw/misc/max111x.o
  CC      hw/misc/tmp105.o
  CC      hw/misc/debugexit.o
  CC      hw/misc/sga.o
  CC      hw/misc/pc-testdev.o
  CC      hw/misc/pci-testdev.o
  CC      hw/misc/unimp.o
  CC      hw/misc/arm_l2x0.o
  CC      hw/misc/arm_integrator_debug.o
  CC      hw/misc/a9scu.o
  CC      hw/misc/arm11scu.o
  CC      hw/net/eepro100.o
  CC      hw/net/ne2000.o
  CC      hw/net/pcnet-pci.o
  CC      hw/net/pcnet.o
  CC      hw/net/e1000.o
  CC      hw/net/e1000x_common.o
  CC      hw/net/net_tx_pkt.o
  CC      hw/net/net_rx_pkt.o
  CC      hw/net/e1000e.o
  CC      hw/net/e1000e_core.o
  CC      hw/net/rtl8139.o
  CC      hw/net/vmxnet3.o
  CC      hw/net/smc91c111.o
  CC      hw/net/lan9118.o
  CC      hw/net/ne2000-isa.o
  CC      hw/net/xgmac.o
  CC      hw/net/allwinner_emac.o
  CC      hw/net/imx_fec.o
  CC      hw/net/cadence_gem.o
  CC      hw/net/stellaris_enet.o
  CC      hw/net/ftgmac100.o
  CC      hw/net/rocker/rocker.o
  CC      hw/net/rocker/rocker_fp.o
  CC      hw/net/rocker/rocker_desc.o
  CC      hw/net/rocker/rocker_world.o
  CC      hw/net/rocker/rocker_of_dpa.o
  CC      hw/nvram/eeprom93xx.o
  CC      hw/nvram/fw_cfg.o
  CC      hw/nvram/chrp_nvram.o
  CC      hw/pci-bridge/pci_bridge_dev.o
  CC      hw/pci-bridge/pcie_root_port.o
  CC      hw/pci-bridge/gen_pcie_root_port.o
  CC      hw/pci-bridge/pci_expander_bridge.o
  CC      hw/pci-bridge/xio3130_upstream.o
  CC      hw/pci-bridge/xio3130_downstream.o
  CC      hw/pci-bridge/ioh3420.o
  CC      hw/pci-bridge/i82801b11.o
  CC      hw/pci-host/pam.o
  CC      hw/pci-host/versatile.o
  CC      hw/pci-host/piix.o
  CC      hw/pci-host/q35.o
  CC      hw/pci-host/gpex.o
  CC      hw/pci/pci.o
  CC      hw/pci/pci_bridge.o
  CC      hw/pci/msix.o
  CC      hw/pci/msi.o
  CC      hw/pci/shpc.o
  CC      hw/pci/slotid_cap.o
  CC      hw/pci/pci_host.o
  CC      hw/pci/pcie_host.o
  CC      hw/pci/pcie.o
  CC      hw/pci/pcie_aer.o
  CC      hw/pci/pcie_port.o
  CC      hw/pci/pci-stub.o
  CC      hw/pcmcia/pcmcia.o
  CC      hw/scsi/scsi-disk.o
  CC      hw/scsi/scsi-generic.o
  CC      hw/scsi/scsi-bus.o
  CC      hw/scsi/mptsas.o
  CC      hw/scsi/lsi53c895a.o
  CC      hw/scsi/mptconfig.o
  CC      hw/scsi/mptendian.o
  CC      hw/scsi/megasas.o
  CC      hw/scsi/vmw_pvscsi.o
  CC      hw/scsi/esp.o
  CC      hw/scsi/esp-pci.o
  CC      hw/sd/pl181.o
  CC      hw/sd/ssi-sd.o
  CC      hw/sd/sd.o
  CC      hw/sd/core.o
  CC      hw/sd/sdhci.o
  CC      hw/smbios/smbios.o
  CC      hw/smbios/smbios_type_38.o
  CC      hw/smbios/smbios-stub.o
  CC      hw/smbios/smbios_type_38-stub.o
  CC      hw/ssi/pl022.o
  CC      hw/ssi/ssi.o
  CC      hw/ssi/xilinx_spips.o
  CC      hw/ssi/aspeed_smc.o
  CC      hw/ssi/stm32f2xx_spi.o
  CC      hw/timer/arm_timer.o
  CC      hw/timer/arm_mptimer.o
  CC      hw/timer/armv7m_systick.o
  CC      hw/timer/a9gtimer.o
  CC      hw/timer/cadence_ttc.o
  CC      hw/timer/ds1338.o
  CC      hw/timer/hpet.o
  CC      hw/timer/i8254_common.o
  CC      hw/timer/i8254.o
  CC      hw/timer/pl031.o
  CC      hw/timer/twl92230.o
  CC      hw/timer/imx_epit.o
  CC      hw/timer/stm32f2xx_timer.o
  CC      hw/timer/imx_gpt.o
  CC      hw/timer/aspeed_timer.o
  CC      hw/tpm/tpm_tis.o
  CC      hw/usb/core.o
  CC      hw/usb/combined-packet.o
  CC      hw/usb/bus.o
  CC      hw/usb/libhw.o
  CC      hw/usb/desc.o
  CC      hw/usb/desc-msos.o
  CC      hw/usb/hcd-uhci.o
  CC      hw/usb/hcd-ohci.o
  CC      hw/usb/hcd-ehci.o
  CC      hw/usb/hcd-ehci-sysbus.o
  CC      hw/usb/hcd-ehci-pci.o
  CC      hw/usb/hcd-xhci.o
  CC      hw/usb/dev-hub.o
  CC      hw/usb/hcd-musb.o
  CC      hw/usb/dev-hid.o
  CC      hw/usb/dev-storage.o
  CC      hw/usb/dev-wacom.o
  CC      hw/usb/dev-uas.o
  CC      hw/usb/dev-audio.o
  CC      hw/usb/dev-serial.o
  CC      hw/usb/dev-network.o
  CC      hw/usb/dev-bluetooth.o
  CC      hw/usb/dev-smartcard-reader.o
  CC      hw/usb/host-stub.o
  CC      hw/virtio/virtio-rng.o
  CC      hw/virtio/virtio-pci.o
  CC      hw/virtio/virtio-bus.o
  CC      hw/virtio/vhost-stub.o
  CC      hw/virtio/virtio-mmio.o
  CC      hw/watchdog/watchdog.o
  CC      hw/watchdog/wdt_i6300esb.o
  CC      hw/watchdog/wdt_ib700.o
  CC      migration/migration.o
  CC      hw/watchdog/wdt_aspeed.o
  CC      migration/socket.o
  CC      migration/fd.o
  CC      migration/exec.o
  CC      migration/tls.o
  CC      migration/channel.o
  CC      migration/savevm.o
  CC      migration/colo-comm.o
  CC      migration/colo.o
  CC      migration/colo-failover.o
  CC      migration/vmstate.o
  CC      migration/vmstate-types.o
  CC      migration/page_cache.o
  CC      migration/qemu-file.o
  CC      migration/qemu-file-channel.o
  CC      migration/xbzrle.o
  CC      migration/postcopy-ram.o
  CC      migration/qjson.o
  CC      migration/block.o
  CC      net/net.o
  CC      net/checksum.o
  CC      net/queue.o
  CC      net/util.o
  CC      net/hub.o
  CC      net/socket.o
  CC      net/dump.o
  CC      net/eth.o
  CC      net/slirp.o
  CC      net/filter.o
  CC      net/filter-buffer.o
  CC      net/filter-mirror.o
  CC      net/colo-compare.o
  CC      net/colo.o
  CC      net/filter-rewriter.o
  CC      net/filter-replay.o
  CC      net/tap-win32.o
  CC      qom/cpu.o
  CC      replay/replay.o
  CC      replay/replay-internal.o
  CC      replay/replay-events.o
  CC      replay/replay-time.o
  CC      replay/replay-input.o
  CC      replay/replay-char.o
  CC      replay/replay-snapshot.o
  CC      replay/replay-net.o
  CC      replay/replay-audio.o
  CC      slirp/if.o
  CC      slirp/cksum.o
  CC      slirp/ip_icmp.o
  CC      slirp/ip6_icmp.o
  CC      slirp/ip6_input.o
  CC      slirp/ip6_output.o
  CC      slirp/ip_input.o
  CC      slirp/ip_output.o
  CC      slirp/dnssearch.o
  CC      slirp/dhcpv6.o
  CC      slirp/slirp.o
  CC      slirp/mbuf.o
  CC      slirp/misc.o
  CC      slirp/sbuf.o
  CC      slirp/socket.o
  CC      slirp/tcp_input.o
  CC      slirp/tcp_output.o
  CC      slirp/tcp_subr.o
  CC      slirp/tcp_timer.o
  CC      slirp/udp.o
  CC      slirp/udp6.o
  CC      slirp/bootp.o
  CC      slirp/tftp.o
  CC      slirp/arp_table.o
  CC      slirp/ndp_table.o
  CC      slirp/ncsi.o
  CC      ui/keymaps.o
  CC      ui/console.o
  CC      ui/cursor.o
  CC      ui/qemu-pixman.o
  CC      ui/input.o
  CC      ui/input-keymap.o
  CC      ui/input-legacy.o
  CC      ui/sdl.o
  CC      ui/sdl_zoom.o
  CC      ui/x_keymap.o
  CC      ui/vnc.o
  CC      ui/vnc-enc-zlib.o
  CC      ui/vnc-enc-hextile.o
  CC      ui/vnc-enc-tight.o
  CC      ui/vnc-palette.o
  CC      ui/vnc-enc-zrle.o
  CC      ui/vnc-auth-vencrypt.o
  CC      ui/vnc-ws.o
  CC      ui/vnc-jobs.o
  CC      ui/gtk.o
  CC      chardev/char.o
  CC      chardev/char-console.o
  CC      chardev/char-fe.o
  CC      chardev/char-file.o
  CC      chardev/char-io.o
  CC      chardev/char-mux.o
  CC      chardev/char-null.o
  CC      chardev/char-pipe.o
  CC      chardev/char-ringbuf.o
  CC      chardev/char-serial.o
  CC      chardev/char-socket.o
  CC      chardev/char-stdio.o
  CC      chardev/char-udp.o
  CC      chardev/char-win.o
  CC      chardev/char-win-stdio.o
  AS      optionrom/multiboot.o
  AS      optionrom/linuxboot.o
  CC      optionrom/linuxboot_dma.o
  AS      optionrom/kvmvapic.o
  BUILD   optionrom/multiboot.img
  CC      qga/commands.o
  BUILD   optionrom/linuxboot.img
  BUILD   optionrom/linuxboot_dma.img
  BUILD   optionrom/kvmvapic.img
  CC      qga/guest-agent-command-state.o
  BUILD   optionrom/multiboot.raw
  BUILD   optionrom/linuxboot.raw
  BUILD   optionrom/linuxboot_dma.raw
  BUILD   optionrom/kvmvapic.raw
  CC      qga/main.o
  CC      qga/commands-win32.o
  CC      qga/channel-win32.o
  CC      qga/service-win32.o
  CC      qga/vss-win32.o
  CC      qga/qapi-generated/qga-qapi-types.o
  CC      qga/qapi-generated/qga-qapi-visit.o
  CC      qga/qapi-generated/qga-qmp-marshal.o
  AR      libqemuutil.a
  AR      libqemustub.a
  CC      qemu-img.o
  SIGN    optionrom/multiboot.bin
  SIGN    optionrom/linuxboot.bin
  SIGN    optionrom/kvmvapic.bin
  SIGN    optionrom/linuxboot_dma.bin
  LINK    qemu-io.exe
  LINK    qemu-img.exe
  LINK    qemu-ga.exe
  GEN     x86_64-softmmu/hmp-commands.h
  GEN     x86_64-softmmu/config-target.h
  GEN     x86_64-softmmu/hmp-commands-info.h
  CC      x86_64-softmmu/exec.o
  CC      x86_64-softmmu/cpu-exec.o
  CC      x86_64-softmmu/translate-all.o
  CC      x86_64-softmmu/cpu-exec-common.o
  CC      x86_64-softmmu/tcg/tcg.o
  CC      x86_64-softmmu/tcg/tcg-op.o
  CC      x86_64-softmmu/translate-common.o
  CC      x86_64-softmmu/tcg/optimize.o
  GEN     aarch64-softmmu/hmp-commands.h
  CC      x86_64-softmmu/tcg/tcg-common.o
  CC      x86_64-softmmu/fpu/softfloat.o
  CC      x86_64-softmmu/disas.o
  CC      x86_64-softmmu/tcg-runtime.o
  GEN     x86_64-softmmu/gdbstub-xml.c
  GEN     aarch64-softmmu/hmp-commands-info.h
  CC      x86_64-softmmu/kvm-stub.o
  GEN     aarch64-softmmu/config-target.h
  CC      x86_64-softmmu/arch_init.o
  CC      aarch64-softmmu/exec.o
  CC      aarch64-softmmu/translate-all.o
  CC      aarch64-softmmu/cpu-exec.o
  CC      aarch64-softmmu/translate-common.o
  CC      x86_64-softmmu/cpus.o
  CC      x86_64-softmmu/monitor.o
  CC      aarch64-softmmu/tcg/tcg.o
  CC      aarch64-softmmu/cpu-exec-common.o
  CC      x86_64-softmmu/gdbstub.o
  CC      x86_64-softmmu/balloon.o
  CC      x86_64-softmmu/ioport.o
  CC      aarch64-softmmu/tcg/tcg-op.o
  CC      x86_64-softmmu/numa.o
  CC      aarch64-softmmu/tcg/optimize.o
  CC      aarch64-softmmu/tcg/tcg-common.o
  CC      x86_64-softmmu/qtest.o
  CC      aarch64-softmmu/fpu/softfloat.o
  CC      aarch64-softmmu/disas.o
  CC      aarch64-softmmu/tcg-runtime.o
  GEN     aarch64-softmmu/gdbstub-xml.c
  CC      aarch64-softmmu/hax-stub.o
  CC      x86_64-softmmu/memory.o
  CC      aarch64-softmmu/kvm-stub.o
  CC      x86_64-softmmu/bootdevice.o
  CC      x86_64-softmmu/cputlb.o
  CC      aarch64-softmmu/arch_init.o
  CC      x86_64-softmmu/memory_mapping.o
  CC      x86_64-softmmu/dump.o
  CC      aarch64-softmmu/cpus.o
  CC      x86_64-softmmu/migration/ram.o
  CC      aarch64-softmmu/monitor.o
  CC      aarch64-softmmu/gdbstub.o
  CC      x86_64-softmmu/hw/block/virtio-blk.o
  CC      aarch64-softmmu/balloon.o
  CC      aarch64-softmmu/ioport.o
  CC      aarch64-softmmu/numa.o
  CC      aarch64-softmmu/qtest.o
  CC      x86_64-softmmu/hw/block/dataplane/virtio-blk.o
  CC      x86_64-softmmu/hw/char/virtio-serial-bus.o
  CC      x86_64-softmmu/hw/core/nmi.o
  CC      aarch64-softmmu/bootdevice.o
  CC      aarch64-softmmu/memory.o
  CC      aarch64-softmmu/cputlb.o
  CC      aarch64-softmmu/memory_mapping.o
  CC      aarch64-softmmu/dump.o
  CC      aarch64-softmmu/migration/ram.o
  CC      x86_64-softmmu/hw/core/generic-loader.o
  CC      x86_64-softmmu/hw/core/null-machine.o
  CC      aarch64-softmmu/hw/adc/stm32f2xx_adc.o
  CC      x86_64-softmmu/hw/cpu/core.o
  CC      aarch64-softmmu/hw/block/virtio-blk.o
  CC      aarch64-softmmu/hw/block/dataplane/virtio-blk.o
  CC      x86_64-softmmu/hw/display/vga.o
  CC      x86_64-softmmu/hw/display/virtio-gpu.o
  CC      aarch64-softmmu/hw/char/exynos4210_uart.o
  CC      x86_64-softmmu/hw/display/virtio-gpu-3d.o
  CC      aarch64-softmmu/hw/char/omap_uart.o
  CC      aarch64-softmmu/hw/char/digic-uart.o
  CC      x86_64-softmmu/hw/display/virtio-gpu-pci.o
  CC      aarch64-softmmu/hw/char/stm32f2xx_usart.o
  CC      x86_64-softmmu/hw/display/virtio-vga.o
  CC      aarch64-softmmu/hw/char/bcm2835_aux.o
  CC      x86_64-softmmu/hw/intc/apic.o
  CC      x86_64-softmmu/hw/intc/apic_common.o
  CC      x86_64-softmmu/hw/intc/ioapic.o
  CC      x86_64-softmmu/hw/isa/lpc_ich9.o
  CC      x86_64-softmmu/hw/misc/vmport.o
  CC      x86_64-softmmu/hw/misc/pvpanic.o
  CC      x86_64-softmmu/hw/misc/edu.o
  CC      x86_64-softmmu/hw/net/virtio-net.o
  CC      x86_64-softmmu/hw/net/vhost_net.o
  CC      x86_64-softmmu/hw/scsi/virtio-scsi.o
  CC      x86_64-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      x86_64-softmmu/hw/timer/mc146818rtc.o
  CC      x86_64-softmmu/hw/virtio/virtio.o
  CC      x86_64-softmmu/hw/virtio/virtio-balloon.o
  CC      x86_64-softmmu/hw/virtio/virtio-crypto.o
  CC      x86_64-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      x86_64-softmmu/hw/i386/multiboot.o
  CC      aarch64-softmmu/hw/char/virtio-serial-bus.o
  CC      x86_64-softmmu/hw/i386/pc.o
  CC      x86_64-softmmu/hw/i386/pc_piix.o
  CC      x86_64-softmmu/hw/i386/pc_q35.o
  CC      x86_64-softmmu/hw/i386/pc_sysfw.o
  CC      x86_64-softmmu/hw/i386/x86-iommu.o
  CC      x86_64-softmmu/hw/i386/intel_iommu.o
  CC      aarch64-softmmu/hw/core/nmi.o
  CC      aarch64-softmmu/hw/core/generic-loader.o
  CC      x86_64-softmmu/hw/i386/amd_iommu.o
  CC      x86_64-softmmu/hw/i386/kvmvapic.o
  CC      aarch64-softmmu/hw/core/null-machine.o
  CC      x86_64-softmmu/hw/i386/acpi-build.o
  CC      x86_64-softmmu/hw/i386/pci-assign-load-rom.o
  CC      aarch64-softmmu/hw/cpu/arm11mpcore.o
  CC      x86_64-softmmu/target/i386/translate.o
  CC      aarch64-softmmu/hw/cpu/realview_mpcore.o
  CC      aarch64-softmmu/hw/cpu/a9mpcore.o
  CC      x86_64-softmmu/target/i386/helper.o
  CC      aarch64-softmmu/hw/cpu/a15mpcore.o
  CC      x86_64-softmmu/target/i386/cpu.o
  CC      x86_64-softmmu/target/i386/bpt_helper.o
  CC      x86_64-softmmu/target/i386/excp_helper.o
  CC      x86_64-softmmu/target/i386/fpu_helper.o
  CC      x86_64-softmmu/target/i386/cc_helper.o
  CC      aarch64-softmmu/hw/cpu/core.o
  CC      x86_64-softmmu/target/i386/int_helper.o
  CC      x86_64-softmmu/target/i386/svm_helper.o
  CC      aarch64-softmmu/hw/display/omap_dss.o
  CC      x86_64-softmmu/target/i386/smm_helper.o
  CC      x86_64-softmmu/target/i386/misc_helper.o
  CC      aarch64-softmmu/hw/display/omap_lcdc.o
  CC      aarch64-softmmu/hw/display/bcm2835_fb.o
  CC      x86_64-softmmu/target/i386/mem_helper.o
  CC      aarch64-softmmu/hw/display/pxa2xx_lcd.o
  CC      x86_64-softmmu/target/i386/seg_helper.o
  CC      aarch64-softmmu/hw/display/vga.o
  CC      aarch64-softmmu/hw/display/virtio-gpu.o
  CC      aarch64-softmmu/hw/display/virtio-gpu-3d.o
  CC      x86_64-softmmu/target/i386/mpx_helper.o
  CC      x86_64-softmmu/target/i386/gdbstub.o
  CC      aarch64-softmmu/hw/display/virtio-gpu-pci.o
  CC      x86_64-softmmu/target/i386/machine.o
  CC      aarch64-softmmu/hw/display/dpcd.o
  CC      x86_64-softmmu/target/i386/arch_memory_mapping.o
  CC      aarch64-softmmu/hw/display/xlnx_dp.o
  CC      aarch64-softmmu/hw/dma/xlnx_dpdma.o
  CC      aarch64-softmmu/hw/dma/omap_dma.o
  CC      x86_64-softmmu/target/i386/arch_dump.o
  CC      x86_64-softmmu/target/i386/monitor.o
  CC      x86_64-softmmu/target/i386/kvm-stub.o
  CC      x86_64-softmmu/target/i386/hax-all.o
  CC      aarch64-softmmu/hw/dma/soc_dma.o
  CC      x86_64-softmmu/target/i386/hax-mem.o
  CC      x86_64-softmmu/target/i386/hax-windows.o
  GEN     trace/generated-helpers.c
  CC      x86_64-softmmu/trace/control-target.o
  CC      aarch64-softmmu/hw/dma/pxa2xx_dma.o
  CC      aarch64-softmmu/hw/dma/bcm2835_dma.o
  CC      aarch64-softmmu/hw/gpio/omap_gpio.o
  CC      aarch64-softmmu/hw/gpio/imx_gpio.o
  CC      x86_64-softmmu/gdbstub-xml.o
  CC      x86_64-softmmu/trace/generated-helpers.o
  CC      aarch64-softmmu/hw/gpio/bcm2835_gpio.o
  CC      aarch64-softmmu/hw/i2c/omap_i2c.o
  LINK    x86_64-softmmu/qemu-system-x86_64w.exe
  CC      aarch64-softmmu/hw/input/pxa2xx_keypad.o
  CC      aarch64-softmmu/hw/input/tsc210x.o
  CC      aarch64-softmmu/hw/intc/armv7m_nvic.o
  CC      aarch64-softmmu/hw/intc/exynos4210_gic.o
  CC      aarch64-softmmu/hw/intc/exynos4210_combiner.o
  CC      aarch64-softmmu/hw/intc/omap_intc.o
  CC      aarch64-softmmu/hw/intc/bcm2835_ic.o
  CC      aarch64-softmmu/hw/intc/bcm2836_control.o
  CC      aarch64-softmmu/hw/intc/allwinner-a10-pic.o
  CC      aarch64-softmmu/hw/intc/aspeed_vic.o
  CC      aarch64-softmmu/hw/misc/arm_sysctl.o
  CC      aarch64-softmmu/hw/intc/arm_gicv3_cpuif.o
  CC      aarch64-softmmu/hw/misc/cbus.o
  CC      aarch64-softmmu/hw/misc/exynos4210_pmu.o
  CC      aarch64-softmmu/hw/misc/exynos4210_clk.o
  CC      aarch64-softmmu/hw/misc/imx_ccm.o
  CC      aarch64-softmmu/hw/misc/imx31_ccm.o
  CC      aarch64-softmmu/hw/misc/imx6_ccm.o
  CC      aarch64-softmmu/hw/misc/imx6_src.o
  CC      aarch64-softmmu/hw/misc/imx25_ccm.o
  CC      aarch64-softmmu/hw/misc/mst_fpga.o
  CC      aarch64-softmmu/hw/misc/omap_clk.o
  CC      aarch64-softmmu/hw/misc/omap_gpmc.o
  CC      aarch64-softmmu/hw/misc/omap_l4.o
  CC      aarch64-softmmu/hw/misc/omap_sdrc.o
  CC      aarch64-softmmu/hw/misc/omap_tap.o
  CC      aarch64-softmmu/hw/misc/bcm2835_mbox.o
  CC      aarch64-softmmu/hw/misc/bcm2835_property.o
  CC      aarch64-softmmu/hw/misc/bcm2835_rng.o
  CC      aarch64-softmmu/hw/misc/zynq_slcr.o
  CC      aarch64-softmmu/hw/misc/zynq-xadc.o
  CC      aarch64-softmmu/hw/misc/stm32f2xx_syscfg.o
  CC      aarch64-softmmu/hw/misc/edu.o
  CC      aarch64-softmmu/hw/misc/auxbus.o
  CC      aarch64-softmmu/hw/misc/aspeed_scu.o
  CC      aarch64-softmmu/hw/misc/aspeed_sdmc.o
  CC      aarch64-softmmu/hw/net/virtio-net.o
  CC      aarch64-softmmu/hw/net/vhost_net.o
  CC      aarch64-softmmu/hw/pcmcia/pxa2xx.o
  CC      aarch64-softmmu/hw/scsi/virtio-scsi.o
  CC      aarch64-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      aarch64-softmmu/hw/sd/omap_mmc.o
  CC      aarch64-softmmu/hw/sd/pxa2xx_mmci.o
  CC      aarch64-softmmu/hw/sd/bcm2835_sdhost.o
  CC      aarch64-softmmu/hw/ssi/omap_spi.o
  CC      aarch64-softmmu/hw/ssi/imx_spi.o
  CC      aarch64-softmmu/hw/timer/exynos4210_mct.o
  CC      aarch64-softmmu/hw/timer/exynos4210_pwm.o
  CC      aarch64-softmmu/hw/timer/exynos4210_rtc.o
  CC      aarch64-softmmu/hw/timer/omap_gptimer.o
  CC      aarch64-softmmu/hw/timer/omap_synctimer.o
  CC      aarch64-softmmu/hw/timer/digic-timer.o
  CC      aarch64-softmmu/hw/timer/pxa2xx_timer.o
  CC      aarch64-softmmu/hw/timer/allwinner-a10-pit.o
  CC      aarch64-softmmu/hw/usb/tusb6010.o
  CC      aarch64-softmmu/hw/virtio/virtio.o
  CC      aarch64-softmmu/hw/virtio/virtio-balloon.o
  CC      aarch64-softmmu/hw/virtio/virtio-crypto.o
  CC      aarch64-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      aarch64-softmmu/hw/arm/boot.o
  CC      aarch64-softmmu/hw/arm/collie.o
  CC      aarch64-softmmu/hw/arm/exynos4_boards.o
  CC      aarch64-softmmu/hw/arm/gumstix.o
  CC      aarch64-softmmu/hw/arm/highbank.o
  CC      aarch64-softmmu/hw/arm/digic_boards.o
  CC      aarch64-softmmu/hw/arm/integratorcp.o
  CC      aarch64-softmmu/hw/arm/mainstone.o
  CC      aarch64-softmmu/hw/arm/musicpal.o
  CC      aarch64-softmmu/hw/arm/nseries.o
  CC      aarch64-softmmu/hw/arm/omap_sx1.o
  CC      aarch64-softmmu/hw/arm/palm.o
  CC      aarch64-softmmu/hw/arm/realview.o
  CC      aarch64-softmmu/hw/arm/spitz.o
  CC      aarch64-softmmu/hw/arm/tosa.o
  CC      aarch64-softmmu/hw/arm/stellaris.o
  CC      aarch64-softmmu/hw/arm/versatilepb.o
  CC      aarch64-softmmu/hw/arm/vexpress.o
  CC      aarch64-softmmu/hw/arm/virt.o
  CC      aarch64-softmmu/hw/arm/xilinx_zynq.o
  CC      aarch64-softmmu/hw/arm/z2.o
  CC      aarch64-softmmu/hw/arm/virt-acpi-build.o
  CC      aarch64-softmmu/hw/arm/netduino2.o
  CC      aarch64-softmmu/hw/arm/sysbus-fdt.o
  CC      aarch64-softmmu/hw/arm/armv7m.o
  CC      aarch64-softmmu/hw/arm/exynos4210.o
  CC      aarch64-softmmu/hw/arm/pxa2xx.o
  CC      aarch64-softmmu/hw/arm/pxa2xx_gpio.o
  CC      aarch64-softmmu/hw/arm/pxa2xx_pic.o
  CC      aarch64-softmmu/hw/arm/digic.o
  CC      aarch64-softmmu/hw/arm/omap1.o
  CC      aarch64-softmmu/hw/arm/omap2.o
  CC      aarch64-softmmu/hw/arm/strongarm.o
  CC      aarch64-softmmu/hw/arm/allwinner-a10.o
  CC      aarch64-softmmu/hw/arm/cubieboard.o
  CC      aarch64-softmmu/hw/arm/bcm2835_peripherals.o
  CC      aarch64-softmmu/hw/arm/bcm2836.o
  CC      aarch64-softmmu/hw/arm/raspi.o
  CC      aarch64-softmmu/hw/arm/stm32f205_soc.o
  GEN     x86_64-softmmu/qemu-system-x86_64.exe
  CC      aarch64-softmmu/hw/arm/xlnx-zynqmp.o
  CC      aarch64-softmmu/hw/arm/xlnx-ep108.o
  CC      aarch64-softmmu/hw/arm/fsl-imx25.o
  CC      aarch64-softmmu/hw/arm/imx25_pdk.o
  CC      aarch64-softmmu/hw/arm/fsl-imx31.o
  CC      aarch64-softmmu/hw/arm/kzm.o
  CC      aarch64-softmmu/hw/arm/fsl-imx6.o
  CC      aarch64-softmmu/hw/arm/sabrelite.o
  CC      aarch64-softmmu/hw/arm/aspeed_soc.o
  CC      aarch64-softmmu/hw/arm/aspeed.o
  CC      aarch64-softmmu/target/arm/arm-semi.o
  CC      aarch64-softmmu/target/arm/machine.o
  CC      aarch64-softmmu/target/arm/psci.o
  CC      aarch64-softmmu/target/arm/arch_dump.o
  CC      aarch64-softmmu/target/arm/monitor.o
  CC      aarch64-softmmu/target/arm/kvm-stub.o
  CC      aarch64-softmmu/target/arm/translate.o
  CC      aarch64-softmmu/target/arm/op_helper.o
  CC      aarch64-softmmu/target/arm/helper.o
  CC      aarch64-softmmu/target/arm/cpu.o
  CC      aarch64-softmmu/target/arm/neon_helper.o
  CC      aarch64-softmmu/target/arm/iwmmxt_helper.o
  CC      aarch64-softmmu/target/arm/gdbstub.o
  CC      aarch64-softmmu/target/arm/cpu64.o
  CC      aarch64-softmmu/target/arm/translate-a64.o
  CC      aarch64-softmmu/target/arm/helper-a64.o
  CC      aarch64-softmmu/target/arm/gdbstub64.o
  CC      aarch64-softmmu/target/arm/crypto_helper.o
  CC      aarch64-softmmu/target/arm/arm-powerctl.o
  GEN     trace/generated-helpers.c
  CC      aarch64-softmmu/trace/control-target.o
  CC      aarch64-softmmu/gdbstub-xml.o
  CC      aarch64-softmmu/trace/generated-helpers.o
  LINK    aarch64-softmmu/qemu-system-aarch64w.exe
  GEN     aarch64-softmmu/qemu-system-aarch64.exe
rm -f *.timestamp
make -C tests/tcg clean
make[1]: Entering directory '/var/tmp/qemu-build/tests/tcg'
rm -f *.timestamp
rm -f *~ *.o test-i386.out test-i386.ref \
           test-x86_64.log test-x86_64.ref qruncom test_path hello-i386 linux-test testthread sha1-i386 test-i386 test-i386-fprem test-mmap  run-test-x86_64
make[1]: Leaving directory '/var/tmp/qemu-build/tests/tcg'
rm -rf tests/check-qdict.exe tests/test-char.exe tests/check-qfloat.exe tests/check-qint.exe tests/check-qstring.exe tests/check-qlist.exe tests/check-qnull.exe tests/check-qjson.exe tests/test-qobject-output-visitor.exe tests/test-clone-visitor.exe tests/test-qobject-input-visitor.exe tests/test-qmp-commands.exe tests/test-string-input-visitor.exe tests/test-string-output-visitor.exe tests/test-qmp-event.exe tests/test-opts-visitor.exe tests/test-coroutine.exe tests/test-visitor-serialization.exe tests/test-iov.exe tests/test-aio.exe tests/test-aio-multithread.exe tests/test-throttle.exe tests/test-thread-pool.exe tests/test-hbitmap.exe tests/test-blockjob.exe tests/test-blockjob-txn.exe tests/test-x86-cpuid.exe tests/test-xbzrle.exe tests/test-cutils.exe tests/test-shift128.exe tests/test-mul64.exe tests/test-int128.exe tests/rcutorture.exe tests/test-rcu-list.exe tests/test-qdist.exe tests/test-qht.exe tests/test-qht-par.exe tests/test-bitops.exe tests/test-bitcnt.exe tests/test-qdev-global-props.exe tests/check-qom-interface.exe tests/check-qom-proplist.exe tests/test-qemu-opts.exe tests/test-keyval.exe tests/test-write-threshold.exe tests/test-crypto-hash.exe tests/test-crypto-hmac.exe tests/test-crypto-cipher.exe tests/test-crypto-secret.exe tests/test-crypto-tlscredsx509.exe tests/test-crypto-tlssession.exe tests/test-timed-average.exe tests/test-io-task.exe tests/test-io-channel-socket.exe tests/test-io-channel-file.exe tests/test-io-channel-tls.exe tests/test-io-channel-command.exe tests/test-io-channel-buffer.exe tests/test-base64.exe tests/test-crypto-pbkdf.exe tests/test-crypto-ivgen.exe tests/test-crypto-afsplit.exe tests/test-crypto-xts.exe tests/test-crypto-block.exe tests/test-logging.exe tests/test-replication.exe tests/test-bufferiszero.exe tests/test-uuid.exe tests/ptimer-test.exe tests/test-qapi-util.exe tests/*.o 
rm -rf tests/ac97-test.exe tests/ahci-test.exe tests/bios-tables-test.exe tests/boot-order-test.exe tests/boot-serial-test.exe tests/device-introspect-test.exe tests/display-vga-test.exe tests/drive_del-test.exe tests/ds1338-test.exe tests/e1000-test.exe tests/e1000e-test.exe tests/eepro100-test.exe tests/endianness-test.exe tests/es1370-test.exe tests/fdc-test.exe tests/fw_cfg-test.exe tests/hd-geo-test.exe tests/i440fx-test.exe tests/i82801b11-test.exe tests/ide-test.exe tests/intel-hda-test.exe tests/ioh3420-test.exe tests/ipmi-bt-test.exe tests/ipmi-kcs-test.exe tests/ipoctal232-test.exe tests/m25p80-test.exe tests/ne2000-test.exe tests/numa-test.exe tests/nvme-test.exe tests/pc-cpu-test.exe tests/pcnet-test.exe tests/pnv-xscom-test.exe tests/postcopy-test.exe tests/prom-env-test.exe tests/pvpanic-test.exe tests/pxe-test.exe tests/q35-test.exe tests/qmp-test.exe tests/qom-test.exe tests/rtas-test.exe tests/rtc-test.exe tests/rtl8139-test.exe tests/spapr-phb-test.exe tests/tco-test.exe tests/test-arm-mptimer.exe tests/test-filter-mirror.exe tests/test-filter-redirector.exe tests/test-hmp.exe tests/test-netfilter.exe tests/test-x86-cpuid-compat.exe tests/tmp105-test.exe tests/tpci200-test.exe tests/usb-hcd-ehci-test.exe tests/usb-hcd-ohci-test.exe tests/usb-hcd-uhci-test.exe tests/usb-hcd-xhci-test.exe tests/virtio-balloon-test.exe tests/virtio-blk-test.exe tests/virtio-console-test.exe tests/virtio-net-test.exe tests/virtio-rng-test.exe tests/virtio-scsi-test.exe tests/virtio-serial-test.exe tests/vmxnet3-test.exe tests/wdt_ib700-test.exe
rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
rm -f qemu-options.def
rm -f *.msi
find . \( -name '*.so' -o -name '*.dll' -o -name '*.mo' -o -name '*.[oda]' \) -type f -exec rm {} +
rm -f qemu-ga qemu-img.exe qemu-io.exe  qemu-ga TAGS cscope.* *.pod *~ */*~
rm -f fsdev/*.pod
rm -f qemu-img-cmds.h
rm -f ui/shader/*-vert.h ui/shader/*-frag.h
rm -f trace/generated-tracers-dtrace.dtrace*
rm -f trace/generated-tracers-dtrace.h*
rm -f qemu-version.h qemu-version.h-timestamp config-host.h config-host.h-timestamp qemu-options.def qemu-options.def-timestamp qmp-commands.h qmp-commands.h-timestamp qapi-types.h qapi-types.h-timestamp qapi-visit.h qapi-visit.h-timestamp qapi-event.h qapi-event.h-timestamp qmp-marshal.c qmp-marshal.c-timestamp qapi-types.c qapi-types.c-timestamp qapi-visit.c qapi-visit.c-timestamp qapi-event.c qapi-event.c-timestamp qmp-introspect.h qmp-introspect.h-timestamp qmp-introspect.c qmp-introspect.c-timestamp trace/generated-tcg-tracers.h trace/generated-tcg-tracers.h-timestamp trace/generated-helpers-wrappers.h trace/generated-helpers-wrappers.h-timestamp trace/generated-helpers.h trace/generated-helpers.h-timestamp trace/generated-helpers.c trace/generated-helpers.c-timestamp module_block.h module_block.h-timestamp trace-root.h trace-root.h-timestamp util/trace.h util/trace.h-timestamp crypto/trace.h crypto/trace.h-timestamp io/trace.h io/trace.h-timestamp migration/trace.h migration/trace.h-timestamp block/trace.h block/trace.h-timestamp backends/trace.h backends/trace.h-timestamp chardev/trace.h chardev/trace.h-timestamp hw/block/trace.h hw/block/trace.h-timestamp hw/block/dataplane/trace.h hw/block/dataplane/trace.h-timestamp hw/char/trace.h hw/char/trace.h-timestamp hw/intc/trace.h hw/intc/trace.h-timestamp hw/net/trace.h hw/net/trace.h-timestamp hw/virtio/trace.h hw/virtio/trace.h-timestamp hw/audio/trace.h hw/audio/trace.h-timestamp hw/misc/trace.h hw/misc/trace.h-timestamp hw/usb/trace.h hw/usb/trace.h-timestamp hw/scsi/trace.h hw/scsi/trace.h-timestamp hw/nvram/trace.h hw/nvram/trace.h-timestamp hw/display/trace.h hw/display/trace.h-timestamp hw/input/trace.h hw/input/trace.h-timestamp hw/timer/trace.h hw/timer/trace.h-timestamp hw/dma/trace.h hw/dma/trace.h-timestamp hw/sparc/trace.h hw/sparc/trace.h-timestamp hw/sd/trace.h hw/sd/trace.h-timestamp hw/isa/trace.h hw/isa/trace.h-timestamp hw/mem/trace.h hw/mem/trace.h-timestamp hw/i386/trace.h hw/i386/trace.h-timestamp hw/i386/xen/trace.h hw/i386/xen/trace.h-timestamp hw/9pfs/trace.h hw/9pfs/trace.h-timestamp hw/ppc/trace.h hw/ppc/trace.h-timestamp hw/pci/trace.h hw/pci/trace.h-timestamp hw/s390x/trace.h hw/s390x/trace.h-timestamp hw/vfio/trace.h hw/vfio/trace.h-timestamp hw/acpi/trace.h hw/acpi/trace.h-timestamp hw/arm/trace.h hw/arm/trace.h-timestamp hw/alpha/trace.h hw/alpha/trace.h-timestamp hw/xen/trace.h hw/xen/trace.h-timestamp ui/trace.h ui/trace.h-timestamp audio/trace.h audio/trace.h-timestamp net/trace.h net/trace.h-timestamp target/arm/trace.h target/arm/trace.h-timestamp target/i386/trace.h target/i386/trace.h-timestamp target/mips/trace.h target/mips/trace.h-timestamp target/sparc/trace.h target/sparc/trace.h-timestamp target/s390x/trace.h target/s390x/trace.h-timestamp target/ppc/trace.h target/ppc/trace.h-timestamp qom/trace.h qom/trace.h-timestamp linux-user/trace.h linux-user/trace.h-timestamp qapi/trace.h qapi/trace.h-timestamp trace-root.c trace-root.c-timestamp util/trace.c util/trace.c-timestamp crypto/trace.c crypto/trace.c-timestamp io/trace.c io/trace.c-timestamp migration/trace.c migration/trace.c-timestamp block/trace.c block/trace.c-timestamp backends/trace.c backends/trace.c-timestamp chardev/trace.c chardev/trace.c-timestamp hw/block/trace.c hw/block/trace.c-timestamp hw/block/dataplane/trace.c hw/block/dataplane/trace.c-timestamp hw/char/trace.c hw/char/trace.c-timestamp hw/intc/trace.c hw/intc/trace.c-timestamp hw/net/trace.c hw/net/trace.c-timestamp hw/virtio/trace.c hw/virtio/trace.c-timestamp hw/audio/trace.c hw/audio/trace.c-timestamp hw/misc/trace.c hw/misc/trace.c-timestamp hw/usb/trace.c hw/usb/trace.c-timestamp hw/scsi/trace.c hw/scsi/trace.c-timestamp hw/nvram/trace.c hw/nvram/trace.c-timestamp hw/display/trace.c hw/display/trace.c-timestamp hw/input/trace.c hw/input/trace.c-timestamp hw/timer/trace.c hw/timer/trace.c-timestamp hw/dma/trace.c hw/dma/trace.c-timestamp hw/sparc/trace.c hw/sparc/trace.c-timestamp hw/sd/trace.c hw/sd/trace.c-timestamp hw/isa/trace.c hw/isa/trace.c-timestamp hw/mem/trace.c hw/mem/trace.c-timestamp hw/i386/trace.c hw/i386/trace.c-timestamp hw/i386/xen/trace.c hw/i386/xen/trace.c-timestamp hw/9pfs/trace.c hw/9pfs/trace.c-timestamp hw/ppc/trace.c hw/ppc/trace.c-timestamp hw/pci/trace.c hw/pci/trace.c-timestamp hw/s390x/trace.c hw/s390x/trace.c-timestamp hw/vfio/trace.c hw/vfio/trace.c-timestamp hw/acpi/trace.c hw/acpi/trace.c-timestamp hw/arm/trace.c hw/arm/trace.c-timestamp hw/alpha/trace.c hw/alpha/trace.c-timestamp hw/xen/trace.c hw/xen/trace.c-timestamp ui/trace.c ui/trace.c-timestamp audio/trace.c audio/trace.c-timestamp net/trace.c net/trace.c-timestamp target/arm/trace.c target/arm/trace.c-timestamp target/i386/trace.c target/i386/trace.c-timestamp target/mips/trace.c target/mips/trace.c-timestamp target/sparc/trace.c target/sparc/trace.c-timestamp target/s390x/trace.c target/s390x/trace.c-timestamp target/ppc/trace.c target/ppc/trace.c-timestamp qom/trace.c qom/trace.c-timestamp linux-user/trace.c linux-user/trace.c-timestamp qapi/trace.c qapi/trace.c-timestamp /var/tmp/qemu-build/trace-events-all /var/tmp/qemu-build/trace-events-all-timestamp tests/test-qapi-types.h tests/test-qapi-types.h-timestamp tests/test-qapi-visit.h tests/test-qapi-visit.h-timestamp tests/test-qmp-commands.h tests/test-qmp-commands.h-timestamp tests/test-qapi-event.h tests/test-qapi-event.h-timestamp tests/test-qmp-introspect.h tests/test-qmp-introspect.h-timestamp
rm -rf qapi-generated
rm -rf qga/qapi-generated
for d in x86_64-softmmu aarch64-softmmu pc-bios/optionrom; do \
if test -d $d; then make -C $d clean || exit 1; fi; \
rm -f $d/qemu-options.def; \
        done
make[1]: Entering directory '/var/tmp/qemu-build/x86_64-softmmu'
rm -f *.timestamp
rm -f *.a *~ qemu-system-x86_64.exe qemu-system-x86_64w.exe
rm -f 
rm -f hmp-commands.h gdbstub-xml.c
make[1]: Leaving directory '/var/tmp/qemu-build/x86_64-softmmu'
make[1]: Entering directory '/var/tmp/qemu-build/aarch64-softmmu'
rm -f *.timestamp
rm -f *.a *~ qemu-system-aarch64.exe qemu-system-aarch64w.exe
rm -f 
rm -f hmp-commands.h gdbstub-xml.c
make[1]: Leaving directory '/var/tmp/qemu-build/aarch64-softmmu'
make[1]: Entering directory '/var/tmp/qemu-build/pc-bios/optionrom'
rm -f *.timestamp
rm -f *.o *.d *.raw *.img *.bin *~
make[1]: Leaving directory '/var/tmp/qemu-build/pc-bios/optionrom'
rm -f  x86_64-softmmu/config-devices.mak  aarch64-softmmu/config-devices.mak config-all-devices.mak
Configure options:
--enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/var/tmp/qemu-build/install --cross-prefix=i686-w64-mingw32- --enable-trace-backends=simple --enable-debug --enable-gnutls --enable-nettle --enable-curl --enable-vnc --enable-bzip2 --enable-guest-agent --with-sdlabi=1.2 --with-gtkabi=2.0
Install prefix    /var/tmp/qemu-build/install
BIOS directory    /var/tmp/qemu-build/install
binary directory  /var/tmp/qemu-build/install
library directory /var/tmp/qemu-build/install/lib
module directory  /var/tmp/qemu-build/install/lib
libexec directory /var/tmp/qemu-build/install/libexec
include directory /var/tmp/qemu-build/install/include
config directory  /var/tmp/qemu-build/install
local state directory   queried at runtime
Windows SDK       no
Source path       /tmp/qemu-test/src
C compiler        i686-w64-mingw32-gcc
Host C compiler   cc
C++ compiler      i686-w64-mingw32-g++
Objective-C compiler clang
ARFLAGS           rv
CFLAGS            -g 
QEMU_CFLAGS       -I/usr/i686-w64-mingw32/sys-root/mingw/include/pixman-1  -I$(SRC_PATH)/dtc/libfdt -Werror -mms-bitfields -I/usr/i686-w64-mingw32/sys-root/mingw/include/glib-2.0 -I/usr/i686-w64-mingw32/sys-root/mingw/lib/glib-2.0/include -I/usr/i686-w64-mingw32/sys-root/mingw/include  -m32 -mthreads -D__USE_MINGW_ANSI_STDIO=1 -DWIN32_LEAN_AND_MEAN -DWINVER=0x501 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv  -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong -I/usr/i686-w64-mingw32/sys-root/mingw/include -I/usr/i686-w64-mingw32/sys-root/mingw/include/p11-kit-1 -I/usr/i686-w64-mingw32/sys-root/mingw/include  -I/usr/i686-w64-mingw32/sys-root/mingw/include   -I/usr/i686-w64-mingw32/sys-root/mingw/include/libpng16 
LDFLAGS           -Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase -Wl,--warn-common -m32 -g 
make              make
install           install
python            python -B
smbd              /usr/sbin/smbd
module support    no
host CPU          i386
host big endian   no
target list       x86_64-softmmu aarch64-softmmu
tcg debug enabled yes
gprof enabled     no
sparse enabled    no
strip binaries    no
profiler          no
static build      no
pixman            system
SDL support       yes (1.2.15)
GTK support       yes (2.24.31)
GTK GL support    no
VTE support       no 
TLS priority      NORMAL
GNUTLS support    yes
GNUTLS rnd        yes
libgcrypt         no
libgcrypt kdf     no
nettle            yes (3.3)
nettle kdf        yes
libtasn1          yes
curses support    no
virgl support     no
curl support      yes
mingw32 support   yes
Audio drivers     dsound
Block whitelist (rw) 
Block whitelist (ro) 
VirtFS support    no
VNC support       yes
VNC SASL support  no
VNC JPEG support  yes
VNC PNG support   yes
xen support       no
brlapi support    no
bluez  support    no
Documentation     no
PIE               no
vde support       no
netmap support    no
Linux AIO support no
ATTR/XATTR support no
Install blobs     yes
KVM support       no
HAX support       yes
RDMA support      no
TCG interpreter   no
fdt support       yes
preadv support    no
fdatasync         no
madvise           no
posix_madvise     no
libcap-ng support no
vhost-net support no
vhost-scsi support no
vhost-vsock support no
Trace backends    simple
Trace output file trace-<pid>
spice support     no 
rbd support       no
xfsctl support    no
smartcard support no
libusb            no
usb net redir     no
OpenGL support    no
OpenGL dmabufs    no
libiscsi support  no
libnfs support    no
build guest agent yes
QGA VSS support   no
QGA w32 disk info yes
QGA MSI support   no
seccomp support   no
coroutine backend win32
coroutine pool    yes
debug stack usage no
GlusterFS support no
gcov              gcov
gcov enabled      no
TPM support       yes
libssh2 support   yes
TPM passthrough   no
QOM debugging     yes
Live block migration yes
lzo support       no
snappy support    no
bzip2 support     yes
NUMA host support no
tcmalloc support  no
jemalloc support  no
avx2 optimization yes
replication support yes
VxHS block device no
  GEN     x86_64-softmmu/config-devices.mak.tmp
  GEN     config-host.h
  GEN     aarch64-softmmu/config-devices.mak.tmp
  GEN     qemu-options.def
  GEN     qmp-commands.h
  GEN     qapi-types.h
  GEN     qapi-visit.h
	 DEP /tmp/qemu-test/src/dtc/tests/dumptrees.c
  GEN     x86_64-softmmu/config-devices.mak
  GEN     aarch64-softmmu/config-devices.mak
  GEN     qapi-event.h
  GEN     qmp-marshal.c
	 DEP /tmp/qemu-test/src/dtc/tests/trees.S
	 DEP /tmp/qemu-test/src/dtc/tests/testutils.c
  GEN     qapi-types.c
	 DEP /tmp/qemu-test/src/dtc/tests/value-labels.c
	 DEP /tmp/qemu-test/src/dtc/tests/asm_tree_dump.c
	 DEP /tmp/qemu-test/src/dtc/tests/truncated_property.c
  GEN     qapi-visit.c
	 DEP /tmp/qemu-test/src/dtc/tests/check_path.c
	 DEP /tmp/qemu-test/src/dtc/tests/overlay_bad_fixup.c
	 DEP /tmp/qemu-test/src/dtc/tests/overlay.c
	 DEP /tmp/qemu-test/src/dtc/tests/subnode_iterate.c
	 DEP /tmp/qemu-test/src/dtc/tests/property_iterate.c
	 DEP /tmp/qemu-test/src/dtc/tests/integer-expressions.c
	 DEP /tmp/qemu-test/src/dtc/tests/utilfdt_test.c
	 DEP /tmp/qemu-test/src/dtc/tests/path_offset_aliases.c
	 DEP /tmp/qemu-test/src/dtc/tests/add_subnode_with_nops.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_unordered.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtb_reverse.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_ordered.c
  GEN     qapi-event.c
	 DEP /tmp/qemu-test/src/dtc/tests/extra-terminating-null.c
	 DEP /tmp/qemu-test/src/dtc/tests/incbin.c
	 DEP /tmp/qemu-test/src/dtc/tests/boot-cpuid.c
	 DEP /tmp/qemu-test/src/dtc/tests/phandle_format.c
  GEN     qmp-introspect.h
	 DEP /tmp/qemu-test/src/dtc/tests/path-references.c
	 DEP /tmp/qemu-test/src/dtc/tests/references.c
	 DEP /tmp/qemu-test/src/dtc/tests/string_escapes.c
  GEN     qmp-introspect.c
  GEN     trace/generated-tcg-tracers.h
	 DEP /tmp/qemu-test/src/dtc/tests/propname_escapes.c
	 DEP /tmp/qemu-test/src/dtc/tests/appendprop2.c
  GEN     trace/generated-helpers-wrappers.h
	 DEP /tmp/qemu-test/src/dtc/tests/appendprop1.c
  GEN     trace/generated-helpers.h
	 DEP /tmp/qemu-test/src/dtc/tests/del_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/del_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/setprop.c
  GEN     trace/generated-helpers.c
  GEN     module_block.h
	 DEP /tmp/qemu-test/src/dtc/tests/set_name.c
	 DEP /tmp/qemu-test/src/dtc/tests/rw_tree1.c
	 DEP /tmp/qemu-test/src/dtc/tests/open_pack.c
  GEN     tests/test-qapi-types.h
	 DEP /tmp/qemu-test/src/dtc/tests/nopulate.c
  GEN     tests/test-qapi-visit.h
  GEN     tests/test-qmp-commands.h
	 DEP /tmp/qemu-test/src/dtc/tests/mangle-layout.c
	 DEP /tmp/qemu-test/src/dtc/tests/move_and_save.c
	 DEP /tmp/qemu-test/src/dtc/tests/sw_tree1.c
	 DEP /tmp/qemu-test/src/dtc/tests/nop_node.c
  GEN     tests/test-qapi-event.h
  GEN     tests/test-qmp-introspect.h
	 DEP /tmp/qemu-test/src/dtc/tests/nop_property.c
  GEN     trace-root.h
  GEN     util/trace.h
	 DEP /tmp/qemu-test/src/dtc/tests/setprop_inplace.c
  GEN     crypto/trace.h
	 DEP /tmp/qemu-test/src/dtc/tests/stringlist.c
  GEN     io/trace.h
	 DEP /tmp/qemu-test/src/dtc/tests/addr_size_cells.c
	 DEP /tmp/qemu-test/src/dtc/tests/notfound.c
	 DEP /tmp/qemu-test/src/dtc/tests/sized_cells.c
	 DEP /tmp/qemu-test/src/dtc/tests/char_literal.c
  GEN     migration/trace.h
	 DEP /tmp/qemu-test/src/dtc/tests/get_alias.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_compatible.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_check_compatible.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_phandle.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_prop_value.c
  GEN     block/trace.h
	 DEP /tmp/qemu-test/src/dtc/tests/parent_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/supernode_atdepth_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_path.c
  GEN     backends/trace.h
	 DEP /tmp/qemu-test/src/dtc/tests/get_phandle.c
	 DEP /tmp/qemu-test/src/dtc/tests/getprop.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_name.c
	 DEP /tmp/qemu-test/src/dtc/tests/path_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/subnode_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/find_property.c
  GEN     chardev/trace.h
	 DEP /tmp/qemu-test/src/dtc/tests/root_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_mem_rsv.c
  GEN     hw/block/trace.h
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_overlay.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_addresses.c
  GEN     hw/block/dataplane/trace.h
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_empty_tree.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_strerror.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_rw.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_sw.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_wip.c
  GEN     hw/char/trace.h
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_ro.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt.c
	 DEP /tmp/qemu-test/src/dtc/util.c
	 DEP /tmp/qemu-test/src/dtc/fdtput.c
  GEN     hw/intc/trace.h
  GEN     hw/net/trace.h
	 DEP /tmp/qemu-test/src/dtc/fdtget.c
	 DEP /tmp/qemu-test/src/dtc/fdtdump.c
	 DEP convert-dtsv0-lexer.lex.c
  GEN     hw/virtio/trace.h
	 DEP /tmp/qemu-test/src/dtc/srcpos.c
  GEN     hw/audio/trace.h
	 DEP dtc-parser.tab.c
	 DEP dtc-lexer.lex.c
  GEN     hw/misc/trace.h
	 DEP /tmp/qemu-test/src/dtc/treesource.c
	 DEP /tmp/qemu-test/src/dtc/livetree.c
  GEN     hw/usb/trace.h
	 DEP /tmp/qemu-test/src/dtc/fstree.c
	 DEP /tmp/qemu-test/src/dtc/flattree.c
  GEN     hw/scsi/trace.h
	 DEP /tmp/qemu-test/src/dtc/dtc.c
	 DEP /tmp/qemu-test/src/dtc/data.c
  GEN     hw/nvram/trace.h
	 DEP /tmp/qemu-test/src/dtc/checks.c
  GEN     hw/display/trace.h
  GEN     hw/input/trace.h
  GEN     hw/timer/trace.h
  GEN     hw/dma/trace.h
  GEN     hw/sparc/trace.h
  GEN     hw/sd/trace.h
	 CC libfdt/fdt.o
	 CC libfdt/fdt_ro.o
  GEN     hw/isa/trace.h
	 CC libfdt/fdt_wip.o
  GEN     hw/mem/trace.h
	 CC libfdt/fdt_sw.o
	 CC libfdt/fdt_rw.o
	 CC libfdt/fdt_empty_tree.o
	 CC libfdt/fdt_strerror.o
  GEN     hw/i386/trace.h
	 CC libfdt/fdt_addresses.o
	 CC libfdt/fdt_overlay.o
  GEN     hw/i386/xen/trace.h
	 AR libfdt/libfdt.a
  GEN     hw/9pfs/trace.h
  GEN     hw/ppc/trace.h
i686-w64-mingw32-ar: creating libfdt/libfdt.a
a - libfdt/fdt.o
a - libfdt/fdt_ro.o
a - libfdt/fdt_wip.o
a - libfdt/fdt_sw.o
a - libfdt/fdt_rw.o
a - libfdt/fdt_strerror.o
a - libfdt/fdt_empty_tree.o
a - libfdt/fdt_addresses.o
a - libfdt/fdt_overlay.o
  GEN     hw/pci/trace.h
  GEN     hw/s390x/trace.h
  GEN     hw/vfio/trace.h
  GEN     hw/acpi/trace.h
  GEN     hw/arm/trace.h
  GEN     hw/alpha/trace.h
  GEN     hw/xen/trace.h
  GEN     ui/trace.h
  GEN     audio/trace.h
  GEN     net/trace.h
  GEN     target/arm/trace.h
  GEN     target/i386/trace.h
  GEN     target/mips/trace.h
  GEN     target/sparc/trace.h
  GEN     target/s390x/trace.h
  GEN     target/ppc/trace.h
  GEN     qom/trace.h
  GEN     linux-user/trace.h
  GEN     trace-root.c
  GEN     qapi/trace.h
  GEN     util/trace.c
  GEN     crypto/trace.c
  GEN     io/trace.c
  GEN     migration/trace.c
  GEN     block/trace.c
  GEN     backends/trace.c
  GEN     chardev/trace.c
  GEN     hw/block/trace.c
  GEN     hw/block/dataplane/trace.c
  GEN     hw/char/trace.c
  GEN     hw/intc/trace.c
  GEN     hw/net/trace.c
  GEN     hw/virtio/trace.c
  GEN     hw/audio/trace.c
  GEN     hw/misc/trace.c
  GEN     hw/usb/trace.c
  GEN     hw/scsi/trace.c
  GEN     hw/nvram/trace.c
  GEN     hw/display/trace.c
  GEN     hw/input/trace.c
  GEN     hw/timer/trace.c
  GEN     hw/dma/trace.c
  GEN     hw/sparc/trace.c
  GEN     hw/sd/trace.c
  GEN     hw/isa/trace.c
  GEN     hw/mem/trace.c
  GEN     hw/i386/trace.c
  GEN     hw/i386/xen/trace.c
  GEN     hw/9pfs/trace.c
  GEN     hw/ppc/trace.c
  GEN     hw/pci/trace.c
  GEN     hw/s390x/trace.c
  GEN     hw/vfio/trace.c
  GEN     hw/acpi/trace.c
  GEN     hw/arm/trace.c
  GEN     hw/alpha/trace.c
  GEN     hw/xen/trace.c
  GEN     ui/trace.c
  GEN     audio/trace.c
  GEN     net/trace.c
  GEN     target/arm/trace.c
  GEN     target/i386/trace.c
  GEN     target/mips/trace.c
  GEN     target/sparc/trace.c
  GEN     target/s390x/trace.c
  GEN     target/ppc/trace.c
  GEN     qom/trace.c
  GEN     linux-user/trace.c
  GEN     config-all-devices.mak
  GEN     qapi/trace.c
  RC      version.o
  GEN     qga/qapi-generated/qga-qapi-types.h
  GEN     qga/qapi-generated/qga-qapi-visit.h
  GEN     qga/qapi-generated/qga-qmp-commands.h
  GEN     qga/qapi-generated/qga-qmp-marshal.c
  GEN     qga/qapi-generated/qga-qapi-types.c
  CC      qmp-introspect.o
  CC      qapi-types.o
  GEN     qga/qapi-generated/qga-qapi-visit.c
  CC      qapi-event.o
  CC      qapi-visit.o
  CC      qapi/qapi-visit-core.o
  CC      qapi/qapi-dealloc-visitor.o
  CC      qapi/qobject-input-visitor.o
  CC      qapi/qobject-output-visitor.o
  CC      qapi/qmp-registry.o
  CC      qapi/qmp-dispatch.o
  CC      qapi/string-input-visitor.o
  CC      qapi/string-output-visitor.o
  CC      qapi/opts-visitor.o
  CC      qapi/qapi-clone-visitor.o
  CC      qapi/qapi-util.o
  CC      qapi/qmp-event.o
  CC      qobject/qnull.o
  CC      qobject/qint.o
  CC      qobject/qstring.o
  CC      qobject/qlist.o
  CC      qobject/qdict.o
  CC      qobject/qbool.o
  CC      qobject/qjson.o
  CC      qobject/qfloat.o
  CC      qobject/qobject.o
  CC      qobject/json-streamer.o
  CC      qobject/json-parser.o
  CC      qobject/json-lexer.o
  CC      trace/simple.o
  CC      trace/control.o
  CC      trace/qmp.o
  CC      util/osdep.o
  CC      util/unicode.o
  CC      util/qemu-timer-common.o
  CC      util/bufferiszero.o
  CC      util/cutils.o
  CC      util/lockcnt.o
  CC      util/aiocb.o
  CC      util/async.o
  CC      util/thread-pool.o
  CC      util/qemu-timer.o
  CC      util/main-loop.o
  CC      util/iohandler.o
  CC      util/aio-win32.o
  CC      util/event_notifier-win32.o
  CC      util/oslib-win32.o
  CC      util/qemu-thread-win32.o
  CC      util/envlist.o
  CC      util/path.o
  CC      util/module.o
  CC      util/host-utils.o
  CC      util/bitmap.o
  CC      util/bitops.o
  CC      util/hbitmap.o
  CC      util/fifo8.o
  CC      util/acl.o
  CC      util/error.o
  CC      util/qemu-error.o
  CC      util/id.o
  CC      util/iov.o
  CC      util/qemu-config.o
  CC      util/qemu-sockets.o
  CC      util/uri.o
  CC      util/notify.o
  CC      util/qemu-option.o
  CC      util/qemu-progress.o
  CC      util/keyval.o
  CC      util/hexdump.o
  CC      util/crc32c.o
  CC      util/uuid.o
  CC      util/throttle.o
  CC      util/getauxval.o
  CC      util/readline.o
  CC      util/rcu.o
  CC      util/qemu-coroutine.o
  CC      util/qemu-coroutine-lock.o
  CC      util/qemu-coroutine-io.o
  CC      util/qemu-coroutine-sleep.o
  CC      util/coroutine-win32.o
  CC      util/buffer.o
  CC      util/timed-average.o
  CC      util/base64.o
  CC      util/log.o
  CC      util/qdist.o
  CC      util/qht.o
  CC      util/systemd.o
  CC      util/range.o
  CC      trace-root.o
  CC      util/trace.o
  CC      crypto/trace.o
  CC      io/trace.o
  CC      migration/trace.o
  CC      block/trace.o
  CC      backends/trace.o
  CC      chardev/trace.o
  CC      hw/block/trace.o
  CC      hw/block/dataplane/trace.o
  CC      hw/char/trace.o
  CC      hw/intc/trace.o
  CC      hw/net/trace.o
  CC      hw/audio/trace.o
  CC      hw/virtio/trace.o
  CC      hw/usb/trace.o
  CC      hw/misc/trace.o
  CC      hw/scsi/trace.o
  CC      hw/nvram/trace.o
  CC      hw/display/trace.o
  CC      hw/input/trace.o
  CC      hw/timer/trace.o
  CC      hw/dma/trace.o
  CC      hw/sparc/trace.o
  CC      hw/sd/trace.o
  CC      hw/isa/trace.o
  CC      hw/mem/trace.o
  CC      hw/i386/trace.o
  CC      hw/i386/xen/trace.o
  CC      hw/9pfs/trace.o
  CC      hw/ppc/trace.o
  CC      hw/pci/trace.o
  CC      hw/s390x/trace.o
  CC      hw/vfio/trace.o
  CC      hw/acpi/trace.o
  CC      hw/arm/trace.o
  CC      hw/xen/trace.o
  CC      hw/alpha/trace.o
  CC      ui/trace.o
  CC      audio/trace.o
  CC      net/trace.o
  CC      target/arm/trace.o
  CC      target/i386/trace.o
  CC      target/mips/trace.o
  CC      target/sparc/trace.o
  CC      target/s390x/trace.o
  CC      target/ppc/trace.o
  CC      qom/trace.o
  CC      linux-user/trace.o
  CC      qapi/trace.o
  CC      stubs/arch-query-cpu-def.o
  CC      crypto/pbkdf-stub.o
  CC      stubs/arch-query-cpu-model-expansion.o
  CC      stubs/arch-query-cpu-model-comparison.o
  CC      stubs/arch-query-cpu-model-baseline.o
  CC      stubs/bdrv-next-monitor-owned.o
  CC      stubs/blk-commit-all.o
  CC      stubs/blockdev-close-all-bdrv-states.o
  CC      stubs/clock-warp.o
  CC      stubs/cpu-get-clock.o
  CC      stubs/cpu-get-icount.o
  CC      stubs/dump.o
  CC      stubs/error-printf.o
  CC      stubs/fdset.o
  CC      stubs/gdbstub.o
  CC      stubs/get-vm-name.o
  CC      stubs/iothread.o
  CC      stubs/iothread-lock.o
  CC      stubs/is-daemonized.o
  CC      stubs/machine-init-done.o
  CC      stubs/migr-blocker.o
  CC      stubs/monitor.o
  CC      stubs/notify-event.o
  CC      stubs/replay.o
  CC      stubs/qtest.o
  CC      stubs/runstate-check.o
  CC      stubs/set-fd-handler.o
  CC      stubs/slirp.o
  CC      stubs/sysbus.o
  CC      stubs/trace-control.o
  CC      stubs/uuid.o
  CC      stubs/vm-stop.o
  CC      stubs/vmstate.o
  CC      stubs/fd-register.o
  CC      stubs/qmp_pc_dimm_device_list.o
  CC      stubs/target-monitor-defs.o
  CC      stubs/pc_madt_cpu_entry.o
  CC      stubs/target-get-monitor-def.o
  CC      stubs/vmgenid.o
  CC      stubs/xen-common.o
  CC      stubs/xen-hvm.o
  GEN     qemu-img-cmds.h
  CC      block.o
  CC      blockjob.o
  CC      qemu-io-cmds.o
  CC      replication.o
  CC      block/raw-format.o
  CC      block/qcow.o
  CC      block/vmdk.o
  CC      block/vdi.o
  CC      block/cloop.o
  CC      block/bochs.o
  CC      block/vpc.o
  CC      block/vvfat.o
  CC      block/dmg.o
  CC      block/qcow2.o
  CC      block/qcow2-refcount.o
  CC      block/qcow2-cluster.o
  CC      block/qcow2-snapshot.o
  CC      block/qcow2-cache.o
  CC      block/qed.o
  CC      block/qed-gencb.o
  CC      block/qed-l2-cache.o
  CC      block/qed-table.o
  CC      block/qed-cluster.o
  CC      block/qed-check.o
  CC      block/vhdx.o
  CC      block/vhdx-endian.o
  CC      block/quorum.o
  CC      block/vhdx-log.o
  CC      block/parallels.o
  CC      block/blkdebug.o
  CC      block/blkverify.o
  CC      block/blkreplay.o
  CC      block/block-backend.o
  CC      block/snapshot.o
  CC      block/qapi.o
  CC      block/file-win32.o
  CC      block/null.o
  CC      block/win32-aio.o
  CC      block/mirror.o
  CC      block/commit.o
  CC      block/io.o
  CC      block/throttle-groups.o
  CC      block/nbd.o
  CC      block/nbd-client.o
  CC      block/sheepdog.o
  CC      block/accounting.o
  CC      block/dirty-bitmap.o
  CC      block/write-threshold.o
  CC      block/backup.o
  CC      block/replication.o
  CC      block/crypto.o
  CC      nbd/server.o
  CC      nbd/common.o
  CC      nbd/client.o
  CC      block/curl.o
  CC      block/ssh.o
  CC      crypto/init.o
  CC      crypto/hash.o
  CC      block/dmg-bz2.o
  CC      crypto/hash-nettle.o
  CC      crypto/hmac.o
  CC      crypto/hmac-nettle.o
  CC      crypto/aes.o
  CC      crypto/desrfb.o
  CC      crypto/cipher.o
  CC      crypto/tlscreds.o
  CC      crypto/tlscredsanon.o
  CC      crypto/tlscredsx509.o
  CC      crypto/tlssession.o
  CC      crypto/secret.o
  CC      crypto/random-gnutls.o
  CC      crypto/pbkdf.o
  CC      crypto/pbkdf-nettle.o
  CC      crypto/ivgen.o
  CC      crypto/ivgen-essiv.o
  CC      crypto/ivgen-plain.o
  CC      crypto/ivgen-plain64.o
  CC      crypto/afsplit.o
  CC      crypto/xts.o
  CC      crypto/block.o
  CC      crypto/block-luks.o
  CC      crypto/block-qcow.o
  CC      io/channel.o
  CC      io/channel-buffer.o
  CC      io/channel-command.o
  CC      io/channel-file.o
  CC      io/channel-socket.o
  CC      io/channel-tls.o
  CC      io/channel-watch.o
  CC      io/channel-websock.o
  CC      io/channel-util.o
  CC      io/dns-resolver.o
  CC      io/task.o
  CC      qom/object.o
  CC      qom/container.o
  CC      qom/qom-qobject.o
  CC      qom/object_interfaces.o
  CC      qemu-io.o
  CC      blockdev.o
  CC      blockdev-nbd.o
  CC      iothread.o
  CC      qdev-monitor.o
  CC      device-hotplug.o
  CC      accel.o
  CC      os-win32.o
  CC      bt-host.o
  CC      bt-vhci.o
  CC      dma-helpers.o
  CC      vl.o
  CC      tpm.o
  CC      device_tree.o
  CC      qmp-marshal.o
  CC      qmp.o
  CC      hmp.o
  CC      cpus-common.o
  CC      audio/audio.o
  CC      audio/noaudio.o
  CC      audio/wavaudio.o
  CC      audio/mixeng.o
  CC      audio/dsoundaudio.o
  CC      audio/sdlaudio.o
  CC      audio/audio_win_int.o
  CC      audio/wavcapture.o
  CC      backends/rng.o
  CC      backends/rng-egd.o
  CC      backends/tpm.o
  CC      backends/hostmem-ram.o
  CC      backends/hostmem.o
  CC      backends/cryptodev.o
  CC      backends/cryptodev-builtin.o
  CC      block/stream.o
  CC      chardev/msmouse.o
  CC      chardev/wctablet.o
  CC      chardev/testdev.o
  CC      disas/arm.o
  CXX     disas/arm-a64.o
  CC      disas/i386.o
  CXX     disas/libvixl/vixl/utils.o
  CXX     disas/libvixl/vixl/compiler-intrinsics.o
  CXX     disas/libvixl/vixl/a64/instructions-a64.o
  CXX     disas/libvixl/vixl/a64/decoder-a64.o
  CXX     disas/libvixl/vixl/a64/disasm-a64.o
  CC      hw/acpi/core.o
  CC      hw/acpi/piix4.o
  CC      hw/acpi/pcihp.o
  CC      hw/acpi/ich9.o
  CC      hw/acpi/tco.o
  CC      hw/acpi/cpu_hotplug.o
  CC      hw/acpi/memory_hotplug.o
  CC      hw/acpi/cpu.o
  CC      hw/acpi/nvdimm.o
  CC      hw/acpi/vmgenid.o
  CC      hw/acpi/acpi_interface.o
  CC      hw/acpi/bios-linker-loader.o
  CC      hw/acpi/aml-build.o
  CC      hw/acpi/ipmi.o
  CC      hw/acpi/acpi-stub.o
  CC      hw/acpi/ipmi-stub.o
  CC      hw/audio/sb16.o
  CC      hw/audio/es1370.o
  CC      hw/audio/ac97.o
  CC      hw/audio/fmopl.o
  CC      hw/audio/adlib.o
  CC      hw/audio/gus.o
  CC      hw/audio/gusemu_hal.o
  CC      hw/audio/gusemu_mixer.o
  CC      hw/audio/cs4231a.o
  CC      hw/audio/intel-hda.o
  CC      hw/audio/hda-codec.o
  CC      hw/audio/pcspk.o
  CC      hw/audio/wm8750.o
  CC      hw/audio/pl041.o
  CC      hw/audio/lm4549.o
  CC      hw/audio/marvell_88w8618.o
  CC      hw/audio/soundhw.o
  CC      hw/block/block.o
  CC      hw/block/cdrom.o
  CC      hw/block/hd-geometry.o
  CC      hw/block/fdc.o
  CC      hw/block/m25p80.o
  CC      hw/block/nand.o
  CC      hw/block/pflash_cfi01.o
  CC      hw/block/pflash_cfi02.o
  CC      hw/block/ecc.o
  CC      hw/block/onenand.o
  CC      hw/block/nvme.o
  CC      hw/bt/core.o
  CC      hw/bt/sdp.o
  CC      hw/bt/l2cap.o
  CC      hw/bt/hci.o
  CC      hw/bt/hid.o
  CC      hw/char/ipoctal232.o
  CC      hw/bt/hci-csr.o
  CC      hw/char/parallel.o
  CC      hw/char/pl011.o
  CC      hw/char/serial.o
  CC      hw/char/serial-isa.o
  CC      hw/char/serial-pci.o
  CC      hw/char/virtio-console.o
  CC      hw/char/cadence_uart.o
  CC      hw/char/debugcon.o
  CC      hw/char/imx_serial.o
  CC      hw/core/qdev.o
  CC      hw/core/qdev-properties.o
  CC      hw/core/bus.o
  CC      hw/core/reset.o
  CC      hw/core/fw-path-provider.o
  CC      hw/core/irq.o
  CC      hw/core/hotplug.o
  CC      hw/core/ptimer.o
  CC      hw/core/sysbus.o
  CC      hw/core/machine.o
  CC      hw/core/loader.o
  CC      hw/core/qdev-properties-system.o
  CC      hw/core/register.o
  CC      hw/core/or-irq.o
  CC      hw/core/platform-bus.o
  CC      hw/display/ads7846.o
  CC      hw/display/cirrus_vga.o
  CC      hw/display/pl110.o
  CC      hw/display/ssd0303.o
  CC      hw/display/ssd0323.o
  CC      hw/display/vga-pci.o
  CC      hw/display/vga-isa.o
  CC      hw/display/vmware_vga.o
  CC      hw/display/blizzard.o
  CC      hw/display/exynos4210_fimd.o
  CC      hw/display/framebuffer.o
  CC      hw/display/tc6393xb.o
  CC      hw/dma/pl080.o
  CC      hw/dma/pl330.o
  CC      hw/dma/i8257.o
  CC      hw/dma/xlnx-zynq-devcfg.o
  CC      hw/gpio/max7310.o
  CC      hw/gpio/pl061.o
  CC      hw/gpio/zaurus.o
  CC      hw/gpio/gpio_key.o
  CC      hw/i2c/core.o
  CC      hw/i2c/smbus.o
  CC      hw/i2c/i2c-ddc.o
  CC      hw/i2c/smbus_eeprom.o
  CC      hw/i2c/versatile_i2c.o
  CC      hw/i2c/smbus_ich9.o
  CC      hw/i2c/pm_smbus.o
  CC      hw/i2c/bitbang_i2c.o
  CC      hw/i2c/exynos4210_i2c.o
  CC      hw/i2c/imx_i2c.o
  CC      hw/i2c/aspeed_i2c.o
  CC      hw/ide/core.o
  CC      hw/ide/atapi.o
  CC      hw/ide/qdev.o
  CC      hw/ide/pci.o
  CC      hw/ide/isa.o
  CC      hw/ide/piix.o
  CC      hw/ide/microdrive.o
  CC      hw/ide/ahci.o
  CC      hw/ide/ich.o
  CC      hw/input/hid.o
  CC      hw/input/lm832x.o
  CC      hw/input/pckbd.o
  CC      hw/input/pl050.o
  CC      hw/input/ps2.o
  CC      hw/input/stellaris_input.o
  CC      hw/input/tsc2005.o
  CC      hw/input/vmmouse.o
  CC      hw/input/virtio-input.o
  CC      hw/input/virtio-input-hid.o
  CC      hw/intc/i8259_common.o
  CC      hw/intc/i8259.o
  CC      hw/intc/pl190.o
  CC      hw/intc/imx_avic.o
  CC      hw/intc/realview_gic.o
  CC      hw/intc/ioapic_common.o
  CC      hw/intc/arm_gic_common.o
  CC      hw/intc/arm_gic.o
  CC      hw/intc/arm_gicv2m.o
  CC      hw/intc/arm_gicv3_common.o
  CC      hw/intc/arm_gicv3.o
  CC      hw/intc/arm_gicv3_dist.o
  CC      hw/intc/arm_gicv3_redist.o
  CC      hw/intc/arm_gicv3_its_common.o
  CC      hw/intc/intc.o
  CC      hw/ipack/ipack.o
  CC      hw/ipack/tpci200.o
  CC      hw/ipmi/ipmi.o
  CC      hw/ipmi/ipmi_bmc_sim.o
  CC      hw/ipmi/ipmi_bmc_extern.o
  CC      hw/ipmi/isa_ipmi_kcs.o
  CC      hw/ipmi/isa_ipmi_bt.o
  CC      hw/isa/isa-bus.o
  CC      hw/mem/pc-dimm.o
  CC      hw/isa/apm.o
  CC      hw/mem/nvdimm.o
  CC      hw/misc/applesmc.o
  CC      hw/misc/max111x.o
  CC      hw/misc/tmp105.o
  CC      hw/misc/debugexit.o
  CC      hw/misc/sga.o
  CC      hw/misc/pc-testdev.o
  CC      hw/misc/pci-testdev.o
  CC      hw/misc/unimp.o
  CC      hw/misc/arm_l2x0.o
  CC      hw/misc/arm_integrator_debug.o
  CC      hw/misc/a9scu.o
  CC      hw/misc/arm11scu.o
  CC      hw/net/ne2000.o
  CC      hw/net/eepro100.o
  CC      hw/net/pcnet-pci.o
  CC      hw/net/pcnet.o
  CC      hw/net/e1000.o
  CC      hw/net/e1000x_common.o
  CC      hw/net/net_tx_pkt.o
  CC      hw/net/net_rx_pkt.o
  CC      hw/net/e1000e.o
  CC      hw/net/rtl8139.o
  CC      hw/net/e1000e_core.o
  CC      hw/net/vmxnet3.o
  CC      hw/net/smc91c111.o
  CC      hw/net/lan9118.o
  CC      hw/net/ne2000-isa.o
  CC      hw/net/xgmac.o
  CC      hw/net/allwinner_emac.o
  CC      hw/net/imx_fec.o
  CC      hw/net/cadence_gem.o
  CC      hw/net/stellaris_enet.o
  CC      hw/net/ftgmac100.o
  CC      hw/net/rocker/rocker.o
  CC      hw/net/rocker/rocker_fp.o
  CC      hw/net/rocker/rocker_desc.o
  CC      hw/net/rocker/rocker_world.o
  CC      hw/net/rocker/rocker_of_dpa.o
  CC      hw/nvram/eeprom93xx.o
  CC      hw/nvram/fw_cfg.o
  CC      hw/nvram/chrp_nvram.o
  CC      hw/pci-bridge/pci_bridge_dev.o
  CC      hw/pci-bridge/pcie_root_port.o
  CC      hw/pci-bridge/gen_pcie_root_port.o
  CC      hw/pci-bridge/pci_expander_bridge.o
  CC      hw/pci-bridge/xio3130_upstream.o
  CC      hw/pci-bridge/xio3130_downstream.o
  CC      hw/pci-bridge/ioh3420.o
  CC      hw/pci-bridge/i82801b11.o
  CC      hw/pci-host/pam.o
  CC      hw/pci-host/versatile.o
  CC      hw/pci-host/piix.o
  CC      hw/pci-host/q35.o
  CC      hw/pci-host/gpex.o
  CC      hw/pci/pci.o
  CC      hw/pci/pci_bridge.o
  CC      hw/pci/msix.o
  CC      hw/pci/msi.o
  CC      hw/pci/slotid_cap.o
  CC      hw/pci/shpc.o
  CC      hw/pci/pci_host.o
  CC      hw/pci/pcie_host.o
  CC      hw/pci/pcie.o
  CC      hw/pci/pcie_aer.o
  CC      hw/pci/pcie_port.o
  CC      hw/pci/pci-stub.o
  CC      hw/pcmcia/pcmcia.o
  CC      hw/scsi/scsi-disk.o
  CC      hw/scsi/scsi-generic.o
  CC      hw/scsi/lsi53c895a.o
  CC      hw/scsi/scsi-bus.o
  CC      hw/scsi/mptsas.o
  CC      hw/scsi/mptconfig.o
  CC      hw/scsi/mptendian.o
  CC      hw/scsi/megasas.o
  CC      hw/scsi/vmw_pvscsi.o
  CC      hw/scsi/esp.o
  CC      hw/sd/pl181.o
  CC      hw/scsi/esp-pci.o
  CC      hw/sd/ssi-sd.o
  CC      hw/sd/sd.o
  CC      hw/sd/core.o
  CC      hw/sd/sdhci.o
  CC      hw/smbios/smbios.o
  CC      hw/smbios/smbios_type_38.o
  CC      hw/smbios/smbios-stub.o
  CC      hw/smbios/smbios_type_38-stub.o
  CC      hw/ssi/pl022.o
  CC      hw/ssi/ssi.o
  CC      hw/ssi/xilinx_spips.o
  CC      hw/ssi/aspeed_smc.o
  CC      hw/ssi/stm32f2xx_spi.o
  CC      hw/timer/arm_timer.o
  CC      hw/timer/arm_mptimer.o
  CC      hw/timer/armv7m_systick.o
  CC      hw/timer/a9gtimer.o
  CC      hw/timer/ds1338.o
  CC      hw/timer/cadence_ttc.o
  CC      hw/timer/hpet.o
  CC      hw/timer/i8254_common.o
  CC      hw/timer/i8254.o
  CC      hw/timer/pl031.o
  CC      hw/timer/twl92230.o
  CC      hw/timer/imx_epit.o
  CC      hw/timer/imx_gpt.o
  CC      hw/timer/stm32f2xx_timer.o
  CC      hw/timer/aspeed_timer.o
  CC      hw/tpm/tpm_tis.o
  CC      hw/usb/core.o
  CC      hw/usb/combined-packet.o
  CC      hw/usb/bus.o
  CC      hw/usb/libhw.o
  CC      hw/usb/desc.o
  CC      hw/usb/desc-msos.o
  CC      hw/usb/hcd-uhci.o
  CC      hw/usb/hcd-ohci.o
  CC      hw/usb/hcd-ehci.o
  CC      hw/usb/hcd-ehci-pci.o
  CC      hw/usb/hcd-xhci.o
  CC      hw/usb/hcd-ehci-sysbus.o
  CC      hw/usb/hcd-musb.o
  CC      hw/usb/dev-hub.o
  CC      hw/usb/dev-hid.o
  CC      hw/usb/dev-wacom.o
  CC      hw/usb/dev-storage.o
  CC      hw/usb/dev-uas.o
  CC      hw/usb/dev-audio.o
  CC      hw/usb/dev-serial.o
  CC      hw/usb/dev-network.o
  CC      hw/usb/dev-bluetooth.o
  CC      hw/usb/dev-smartcard-reader.o
  CC      hw/usb/host-stub.o
  CC      hw/virtio/virtio-pci.o
  CC      hw/virtio/virtio-rng.o
  CC      hw/virtio/virtio-bus.o
  CC      hw/virtio/virtio-mmio.o
  CC      hw/virtio/vhost-stub.o
  CC      hw/watchdog/watchdog.o
  CC      hw/watchdog/wdt_i6300esb.o
  CC      hw/watchdog/wdt_ib700.o
  CC      hw/watchdog/wdt_aspeed.o
  CC      migration/migration.o
  CC      migration/socket.o
  CC      migration/fd.o
  CC      migration/exec.o
  CC      migration/tls.o
  CC      migration/channel.o
  CC      migration/savevm.o
  CC      migration/colo-comm.o
  CC      migration/colo.o
  CC      migration/colo-failover.o
  CC      migration/vmstate.o
  CC      migration/vmstate-types.o
  CC      migration/page_cache.o
  CC      migration/qemu-file.o
  CC      migration/qemu-file-channel.o
  CC      migration/xbzrle.o
  CC      migration/postcopy-ram.o
  CC      migration/qjson.o
  CC      migration/block.o
  CC      net/net.o
  CC      net/queue.o
  CC      net/checksum.o
  CC      net/util.o
  CC      net/hub.o
  CC      net/socket.o
  CC      net/dump.o
  CC      net/eth.o
  CC      net/slirp.o
  CC      net/filter.o
  CC      net/filter-buffer.o
  CC      net/filter-mirror.o
  CC      net/colo-compare.o
  CC      net/colo.o
  CC      net/filter-rewriter.o
  CC      net/filter-replay.o
  CC      net/tap-win32.o
  CC      qom/cpu.o
  CC      replay/replay.o
  CC      replay/replay-internal.o
  CC      replay/replay-events.o
  CC      replay/replay-time.o
  CC      replay/replay-input.o
  CC      replay/replay-char.o
  CC      replay/replay-snapshot.o
  CC      replay/replay-net.o
  CC      replay/replay-audio.o
  CC      slirp/cksum.o
  CC      slirp/if.o
  CC      slirp/ip_icmp.o
  CC      slirp/ip6_icmp.o
  CC      slirp/ip6_input.o
  CC      slirp/ip6_output.o
  CC      slirp/ip_input.o
  CC      slirp/ip_output.o
  CC      slirp/dnssearch.o
  CC      slirp/dhcpv6.o
  CC      slirp/slirp.o
  CC      slirp/mbuf.o
  CC      slirp/misc.o
  CC      slirp/sbuf.o
  CC      slirp/socket.o
  CC      slirp/tcp_input.o
  CC      slirp/tcp_output.o
  CC      slirp/tcp_subr.o
  CC      slirp/tcp_timer.o
  CC      slirp/udp.o
  CC      slirp/udp6.o
  CC      slirp/bootp.o
  CC      slirp/tftp.o
  CC      slirp/arp_table.o
  CC      slirp/ndp_table.o
  CC      slirp/ncsi.o
  CC      ui/keymaps.o
  CC      ui/console.o
  CC      ui/cursor.o
  CC      ui/qemu-pixman.o
  CC      ui/input.o
  CC      ui/input-keymap.o
  CC      ui/input-legacy.o
  CC      ui/sdl.o
  CC      ui/sdl_zoom.o
  CC      ui/x_keymap.o
  CC      ui/vnc.o
  CC      ui/vnc-enc-zlib.o
  CC      ui/vnc-enc-hextile.o
  CC      ui/vnc-enc-tight.o
  CC      ui/vnc-palette.o
  CC      ui/vnc-enc-zrle.o
  CC      ui/vnc-auth-vencrypt.o
  CC      ui/vnc-ws.o
  CC      ui/vnc-jobs.o
  CC      ui/gtk.o
  CC      chardev/char.o
  CC      chardev/char-console.o
  CC      chardev/char-fe.o
  CC      chardev/char-file.o
  CC      chardev/char-io.o
/tmp/qemu-test/src/chardev/char.c: In function 'chardev_name_foreach':
/tmp/qemu-test/src/chardev/char.c:546:19: error: comparison of unsigned expression < 0 is always false [-Werror=type-limits]
     for (i = 0; i < ARRAY_SIZE(chardev_alias_table); i++) {
                   ^
/tmp/qemu-test/src/chardev/char.c: In function 'qemu_chr_new_from_opts':
/tmp/qemu-test/src/chardev/char.c:592:19: error: comparison of unsigned expression < 0 is always false [-Werror=type-limits]
     for (i = 0; i < ARRAY_SIZE(chardev_alias_table); i++) {
                   ^
cc1: all warnings being treated as errors
/tmp/qemu-test/src/rules.mak:69: recipe for target 'chardev/char.o' failed
make: *** [chardev/char.o] Error 1
make: *** Waiting for unfinished jobs....
tests/docker/Makefile.include:118: recipe for target 'docker-run' failed
make[1]: *** [docker-run] Error 2
make[1]: Leaving directory '/var/tmp/patchew-tester-tmp-i0aq57qp/src'
tests/docker/Makefile.include:149: recipe for target 'docker-run-test-mingw@fedora' failed
make: *** [docker-run-test-mingw@fedora] Error 2
=== OUTPUT END ===

Test command exited with code: 2


---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@freelists.org

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 06/14] Remove/replace sysemu/char.h inclusion
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 06/14] Remove/replace sysemu/char.h inclusion Marc-André Lureau
@ 2017-05-29 20:57   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 33+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-05-29 20:57 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: pbonzini

On 05/29/2017 05:45 AM, Marc-André Lureau wrote:
> Those are apparently unnecessary includes.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
>  hw/arm/bcm2835_peripherals.c | 1 -
>  hw/char/imx_serial.c         | 1 -
>  hw/display/xenfb.c           | 1 -
>  hw/i386/xen/xen-hvm.c        | 1 -
>  hw/mips/mips_fulong2e.c      | 1 -
>  hw/mips/mips_malta.c         | 1 -
>  hw/net/xgmac.c               | 1 -
>  hw/ppc/spapr_events.c        | 1 -
>  hw/ppc/spapr_rtas.c          | 1 -
>  hw/sparc/leon3.c             | 1 -
>  hw/usb/ccid-card-emulated.c  | 2 +-
>  hw/xen/xen_backend.c         | 1 -
>  util/event_notifier-posix.c  | 1 -
>  13 files changed, 1 insertion(+), 13 deletions(-)
>
> diff --git a/hw/arm/bcm2835_peripherals.c b/hw/arm/bcm2835_peripherals.c
> index 369ef1e3bd..502f04c02a 100644
> --- a/hw/arm/bcm2835_peripherals.c
> +++ b/hw/arm/bcm2835_peripherals.c
> @@ -13,7 +13,6 @@
>  #include "hw/arm/bcm2835_peripherals.h"
>  #include "hw/misc/bcm2835_mbox_defs.h"
>  #include "hw/arm/raspi_platform.h"
> -#include "sysemu/char.h"
>  #include "sysemu/sysemu.h"
>
>  /* Peripheral base address on the VC (GPU) system bus */
> diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c
> index 52e67f8dc9..af250305be 100644
> --- a/hw/char/imx_serial.c
> +++ b/hw/char/imx_serial.c
> @@ -21,7 +21,6 @@
>  #include "qemu/osdep.h"
>  #include "hw/char/imx_serial.h"
>  #include "sysemu/sysemu.h"
> -#include "sysemu/char.h"
>  #include "qemu/log.h"
>
>  #ifndef DEBUG_IMX_UART
> diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c
> index 7a8727aa21..e76c0d805c 100644
> --- a/hw/display/xenfb.c
> +++ b/hw/display/xenfb.c
> @@ -28,7 +28,6 @@
>
>  #include "hw/hw.h"
>  #include "ui/console.h"
> -#include "sysemu/char.h"
>  #include "hw/xen/xen_backend.h"
>
>  #include <xen/event_channel.h>
> diff --git a/hw/i386/xen/xen-hvm.c b/hw/i386/xen/xen-hvm.c
> index b1c05ffb86..321cf36b67 100644
> --- a/hw/i386/xen/xen-hvm.c
> +++ b/hw/i386/xen/xen-hvm.c
> @@ -18,7 +18,6 @@
>  #include "hw/xen/xen_backend.h"
>  #include "qmp-commands.h"
>
> -#include "sysemu/char.h"
>  #include "qemu/error-report.h"
>  #include "qemu/range.h"
>  #include "sysemu/xen-mapcache.h"
> diff --git a/hw/mips/mips_fulong2e.c b/hw/mips/mips_fulong2e.c
> index e636c3abaa..dbe2805acb 100644
> --- a/hw/mips/mips_fulong2e.c
> +++ b/hw/mips/mips_fulong2e.c
> @@ -32,7 +32,6 @@
>  #include "hw/mips/mips.h"
>  #include "hw/mips/cpudevs.h"
>  #include "hw/pci/pci.h"
> -#include "sysemu/char.h"
>  #include "sysemu/sysemu.h"
>  #include "audio/audio.h"
>  #include "qemu/log.h"
> diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c
> index 5dd177e961..6fcdd9c6c1 100644
> --- a/hw/mips/mips_malta.c
> +++ b/hw/mips/mips_malta.c
> @@ -37,7 +37,6 @@
>  #include "hw/mips/mips.h"
>  #include "hw/mips/cpudevs.h"
>  #include "hw/pci/pci.h"
> -#include "sysemu/char.h"
>  #include "sysemu/sysemu.h"
>  #include "sysemu/arch_init.h"
>  #include "qemu/log.h"
> diff --git a/hw/net/xgmac.c b/hw/net/xgmac.c
> index 46b1aa17fa..0843bf185c 100644
> --- a/hw/net/xgmac.c
> +++ b/hw/net/xgmac.c
> @@ -26,7 +26,6 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/sysbus.h"
> -#include "sysemu/char.h"
>  #include "qemu/log.h"
>  #include "net/net.h"
>  #include "net/checksum.h"
> diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c
> index f0b28d8112..8a5f1d321a 100644
> --- a/hw/ppc/spapr_events.c
> +++ b/hw/ppc/spapr_events.c
> @@ -28,7 +28,6 @@
>  #include "qapi/error.h"
>  #include "cpu.h"
>  #include "sysemu/sysemu.h"
> -#include "sysemu/char.h"
>  #include "hw/qdev.h"
>  #include "sysemu/device_tree.h"
>
> diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
> index 619f32c054..dd1633a104 100644
> --- a/hw/ppc/spapr_rtas.c
> +++ b/hw/ppc/spapr_rtas.c
> @@ -29,7 +29,6 @@
>  #include "qemu/log.h"
>  #include "qemu/error-report.h"
>  #include "sysemu/sysemu.h"
> -#include "sysemu/char.h"
>  #include "hw/qdev.h"
>  #include "sysemu/device_tree.h"
>  #include "sysemu/cpus.h"
> diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c
> index 6e16478413..f415997649 100644
> --- a/hw/sparc/leon3.c
> +++ b/hw/sparc/leon3.c
> @@ -28,7 +28,6 @@
>  #include "hw/hw.h"
>  #include "qemu/timer.h"
>  #include "hw/ptimer.h"
> -#include "sysemu/char.h"
>  #include "sysemu/sysemu.h"
>  #include "sysemu/qtest.h"
>  #include "hw/boards.h"
> diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c
> index 99627860a3..e646eb243b 100644
> --- a/hw/usb/ccid-card-emulated.c
> +++ b/hw/usb/ccid-card-emulated.c
> @@ -33,7 +33,7 @@
>  #include <vcard_emul.h>
>
>  #include "qemu/thread.h"
> -#include "sysemu/char.h"
> +#include "qemu/main-loop.h"
>  #include "ccid.h"
>
>  #define DPRINTF(card, lvl, fmt, ...) \
> diff --git a/hw/xen/xen_backend.c b/hw/xen/xen_backend.c
> index 3570f37e56..c46cbb0759 100644
> --- a/hw/xen/xen_backend.c
> +++ b/hw/xen/xen_backend.c
> @@ -28,7 +28,6 @@
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
>  #include "hw/boards.h"
> -#include "sysemu/char.h"
>  #include "qemu/log.h"
>  #include "qapi/error.h"
>  #include "hw/xen/xen_backend.h"
> diff --git a/util/event_notifier-posix.c b/util/event_notifier-posix.c
> index acdbe3b483..73c4046b58 100644
> --- a/util/event_notifier-posix.c
> +++ b/util/event_notifier-posix.c
> @@ -14,7 +14,6 @@
>  #include "qemu-common.h"
>  #include "qemu/cutils.h"
>  #include "qemu/event_notifier.h"
> -#include "sysemu/char.h"
>  #include "qemu/main-loop.h"
>
>  #ifdef CONFIG_EVENTFD
>

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 07/14] chardev: move headers to include/chardev
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 07/14] chardev: move headers to include/chardev Marc-André Lureau
@ 2017-05-29 21:02   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 33+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-05-29 21:02 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: pbonzini

On 05/29/2017 05:45 AM, Marc-André Lureau wrote:
> So they are all in one place. The following patch will move serial &
> parallel declarations to the respective headers.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
>  {chardev => include/chardev}/char-fd.h        |  2 +-
>  {chardev => include/chardev}/char-io.h        |  2 +-
>  {chardev => include/chardev}/char-mux.h       |  2 +-
>  {chardev => include/chardev}/char-parallel.h  |  0
>  {chardev => include/chardev}/char-serial.h    |  0
>  {chardev => include/chardev}/char-win-stdio.h |  0
>  {chardev => include/chardev}/char-win.h       |  2 +-
>  include/{sysemu => chardev}/char.h            |  0
>  include/hw/char/bcm2835_aux.h                 |  2 +-
>  include/hw/char/cadence_uart.h                |  2 +-
>  include/hw/char/digic-uart.h                  |  2 +-
>  include/hw/char/imx_serial.h                  |  2 +-
>  include/hw/char/serial.h                      |  4 ++--
>  include/hw/char/stm32f2xx_usart.h             |  2 +-
>  backends/baum.c                               |  2 +-
>  backends/msmouse.c                            |  2 +-
>  backends/rng-egd.c                            |  2 +-
>  backends/testdev.c                            |  2 +-
>  backends/wctablet.c                           |  2 +-
>  chardev/char-console.c                        |  2 +-
>  chardev/char-fd.c                             |  6 +++---
>  chardev/char-file.c                           |  6 +++---
>  chardev/char-io.c                             |  2 +-
>  chardev/char-mux.c                            |  4 ++--
>  chardev/char-null.c                           |  2 +-
>  chardev/char-parallel.c                       |  6 +++---
>  chardev/char-pipe.c                           |  6 +++---
>  chardev/char-pty.c                            |  4 ++--
>  chardev/char-ringbuf.c                        |  2 +-
>  chardev/char-serial.c                         |  6 +++---
>  chardev/char-socket.c                         |  4 ++--
>  chardev/char-stdio.c                          |  8 ++++----
>  chardev/char-udp.c                            |  4 ++--
>  chardev/char-win-stdio.c                      |  4 ++--
>  chardev/char-win.c                            |  2 +-
>  chardev/char.c                                | 10 +++++-----
>  gdbstub.c                                     |  2 +-
>  hmp.c                                         |  2 +-
>  hw/arm/fsl-imx25.c                            |  2 +-
>  hw/arm/fsl-imx31.c                            |  2 +-
>  hw/arm/fsl-imx6.c                             |  2 +-
>  hw/arm/omap2.c                                |  2 +-
>  hw/arm/pxa2xx.c                               |  2 +-
>  hw/arm/strongarm.c                            |  2 +-
>  hw/bt/hci-csr.c                               |  2 +-
>  hw/char/cadence_uart.c                        |  2 +-
>  hw/char/debugcon.c                            |  2 +-
>  hw/char/digic-uart.c                          |  2 +-
>  hw/char/escc.c                                |  2 +-
>  hw/char/etraxfs_ser.c                         |  2 +-
>  hw/char/exynos4210_uart.c                     |  2 +-
>  hw/char/grlib_apbuart.c                       |  2 +-
>  hw/char/ipoctal232.c                          |  2 +-
>  hw/char/lm32_juart.c                          |  2 +-
>  hw/char/lm32_uart.c                           |  2 +-
>  hw/char/mcf_uart.c                            |  2 +-
>  hw/char/milkymist-uart.c                      |  2 +-
>  hw/char/omap_uart.c                           |  2 +-
>  hw/char/parallel.c                            |  2 +-
>  hw/char/pl011.c                               |  2 +-
>  hw/char/sclpconsole-lm.c                      |  2 +-
>  hw/char/sclpconsole.c                         |  2 +-
>  hw/char/serial.c                              |  2 +-
>  hw/char/sh_serial.c                           |  2 +-
>  hw/char/spapr_vty.c                           |  2 +-
>  hw/char/terminal3270.c                        |  2 +-
>  hw/char/virtio-console.c                      |  2 +-
>  hw/char/xen_console.c                         |  2 +-
>  hw/char/xilinx_uartlite.c                     |  2 +-
>  hw/core/qdev-properties-system.c              |  2 +-
>  hw/core/qdev-properties.c                     |  2 +-
>  hw/ipmi/ipmi_bmc_extern.c                     |  2 +-
>  hw/isa/pc87312.c                              |  2 +-
>  hw/mips/boston.c                              |  2 +-
>  hw/misc/ivshmem.c                             |  2 +-
>  hw/usb/ccid-card-passthru.c                   |  2 +-
>  hw/usb/dev-serial.c                           |  2 +-
>  hw/usb/redirect.c                             |  2 +-
>  hw/virtio/vhost-user.c                        |  2 +-
>  hw/xen/xen-common.c                           |  2 +-
>  hw/xtensa/xtfpga.c                            |  2 +-
>  monitor.c                                     |  2 +-
>  net/colo-compare.c                            |  2 +-
>  net/filter-mirror.c                           |  2 +-
>  net/slirp.c                                   |  2 +-
>  net/vhost-user.c                              |  2 +-
>  qmp.c                                         |  2 +-
>  qtest.c                                       |  2 +-
>  replay/replay-char.c                          |  2 +-
>  slirp/slirp.c                                 |  2 +-
>  spice-qemu-char.c                             |  2 +-
>  tests/postcopy-test.c                         |  2 +-
>  tests/test-char.c                             |  2 +-
>  tests/vhost-user-test.c                       |  2 +-
>  ui/console.c                                  |  2 +-
>  ui/gtk.c                                      |  2 +-
>  vl.c                                          |  2 +-
>  MAINTAINERS                                   |  1 +
>  98 files changed, 117 insertions(+), 116 deletions(-)
>  rename {chardev => include/chardev}/char-fd.h (98%)
>  rename {chardev => include/chardev}/char-io.h (98%)
>  rename {chardev => include/chardev}/char-mux.h (98%)
>  rename {chardev => include/chardev}/char-parallel.h (100%)
>  rename {chardev => include/chardev}/char-serial.h (100%)
>  rename {chardev => include/chardev}/char-win-stdio.h (100%)
>  rename {chardev => include/chardev}/char-win.h (98%)
>  rename include/{sysemu => chardev}/char.h (100%)
>
> diff --git a/chardev/char-fd.h b/include/chardev/char-fd.h
> similarity index 98%
> rename from chardev/char-fd.h
> rename to include/chardev/char-fd.h
> index d8327982fb..55ae5b47b0 100644
> --- a/chardev/char-fd.h
> +++ b/include/chardev/char-fd.h
> @@ -25,7 +25,7 @@
>  #define CHAR_FD_H
>
>  #include "io/channel.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  typedef struct FDChardev {
>      Chardev parent;
> diff --git a/chardev/char-io.h b/include/chardev/char-io.h
> similarity index 98%
> rename from chardev/char-io.h
> rename to include/chardev/char-io.h
> index 55973a7671..9638da5100 100644
> --- a/chardev/char-io.h
> +++ b/include/chardev/char-io.h
> @@ -26,7 +26,7 @@
>
>  #include "qemu-common.h"
>  #include "io/channel.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  /* Can only be used for read */
>  GSource *io_add_watch_poll(Chardev *chr,
> diff --git a/chardev/char-mux.h b/include/chardev/char-mux.h
> similarity index 98%
> rename from chardev/char-mux.h
> rename to include/chardev/char-mux.h
> index 3f41dfcfd2..45cdfc7e67 100644
> --- a/chardev/char-mux.h
> +++ b/include/chardev/char-mux.h
> @@ -24,7 +24,7 @@
>  #ifndef CHAR_MUX_H
>  #define CHAR_MUX_H
>
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  extern bool muxes_realized;
>
> diff --git a/chardev/char-parallel.h b/include/chardev/char-parallel.h
> similarity index 100%
> rename from chardev/char-parallel.h
> rename to include/chardev/char-parallel.h
> diff --git a/chardev/char-serial.h b/include/chardev/char-serial.h
> similarity index 100%
> rename from chardev/char-serial.h
> rename to include/chardev/char-serial.h
> diff --git a/chardev/char-win-stdio.h b/include/chardev/char-win-stdio.h
> similarity index 100%
> rename from chardev/char-win-stdio.h
> rename to include/chardev/char-win-stdio.h
> diff --git a/chardev/char-win.h b/include/chardev/char-win.h
> similarity index 98%
> rename from chardev/char-win.h
> rename to include/chardev/char-win.h
> index 4994425e9e..fa59e9e423 100644
> --- a/chardev/char-win.h
> +++ b/include/chardev/char-win.h
> @@ -24,7 +24,7 @@
>  #ifndef CHAR_WIN_H
>  #define CHAR_WIN_H
>
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  typedef struct {
>      Chardev parent;
> diff --git a/include/sysemu/char.h b/include/chardev/char.h
> similarity index 100%
> rename from include/sysemu/char.h
> rename to include/chardev/char.h
> diff --git a/include/hw/char/bcm2835_aux.h b/include/hw/char/bcm2835_aux.h
> index 6865f154bc..2a051c5646 100644
> --- a/include/hw/char/bcm2835_aux.h
> +++ b/include/hw/char/bcm2835_aux.h
> @@ -9,7 +9,7 @@
>  #define BCM2835_AUX_H
>
>  #include "hw/sysbus.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #define TYPE_BCM2835_AUX "bcm2835-aux"
>  #define BCM2835_AUX(obj) OBJECT_CHECK(BCM2835AuxState, (obj), TYPE_BCM2835_AUX)
> diff --git a/include/hw/char/cadence_uart.h b/include/hw/char/cadence_uart.h
> index c836db4b74..eed7d8d358 100644
> --- a/include/hw/char/cadence_uart.h
> +++ b/include/hw/char/cadence_uart.h
> @@ -19,7 +19,7 @@
>  #ifndef CADENCE_UART_H
>
>  #include "hw/sysbus.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/timer.h"
>
>  #define CADENCE_UART_RX_FIFO_SIZE           16
> diff --git a/include/hw/char/digic-uart.h b/include/hw/char/digic-uart.h
> index 340c8e1111..370b48a6c5 100644
> --- a/include/hw/char/digic-uart.h
> +++ b/include/hw/char/digic-uart.h
> @@ -19,7 +19,7 @@
>  #define HW_CHAR_DIGIC_UART_H
>
>  #include "hw/sysbus.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #define TYPE_DIGIC_UART "digic-uart"
>  #define DIGIC_UART(obj) \
> diff --git a/include/hw/char/imx_serial.h b/include/hw/char/imx_serial.h
> index 4cc3fbc395..05500f5346 100644
> --- a/include/hw/char/imx_serial.h
> +++ b/include/hw/char/imx_serial.h
> @@ -19,7 +19,7 @@
>  #define IMX_SERIAL_H
>
>  #include "hw/sysbus.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #define TYPE_IMX_SERIAL "imx.serial"
>  #define IMX_SERIAL(obj) OBJECT_CHECK(IMXSerialState, (obj), TYPE_IMX_SERIAL)
> diff --git a/include/hw/char/serial.h b/include/hw/char/serial.h
> index daebb076c2..01dcd2a8d2 100644
> --- a/include/hw/char/serial.h
> +++ b/include/hw/char/serial.h
> @@ -28,10 +28,10 @@
>
>  #include "hw/hw.h"
>  #include "sysemu/sysemu.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "exec/memory.h"
>  #include "qemu/fifo8.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #define UART_FIFO_LENGTH    16      /* 16550A Fifo Length */
>
> diff --git a/include/hw/char/stm32f2xx_usart.h b/include/hw/char/stm32f2xx_usart.h
> index 3267523270..4259dbeb1e 100644
> --- a/include/hw/char/stm32f2xx_usart.h
> +++ b/include/hw/char/stm32f2xx_usart.h
> @@ -26,7 +26,7 @@
>  #define HW_STM32F2XX_USART_H
>
>  #include "hw/sysbus.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "hw/hw.h"
>
>  #define USART_SR   0x00
> diff --git a/backends/baum.c b/backends/baum.c
> index 2eddcae119..302dd9666c 100644
> --- a/backends/baum.c
> +++ b/backends/baum.c
> @@ -24,7 +24,7 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
>  #include "qemu-common.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/timer.h"
>  #include "hw/usb.h"
>  #include "ui/console.h"
> diff --git a/backends/msmouse.c b/backends/msmouse.c
> index d2c3162f1e..0ffd137ce8 100644
> --- a/backends/msmouse.c
> +++ b/backends/msmouse.c
> @@ -23,7 +23,7 @@
>   */
>  #include "qemu/osdep.h"
>  #include "qemu-common.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "ui/console.h"
>  #include "ui/input.h"
>
> diff --git a/backends/rng-egd.c b/backends/rng-egd.c
> index 380b19a0a1..5448f6e5f5 100644
> --- a/backends/rng-egd.c
> +++ b/backends/rng-egd.c
> @@ -12,7 +12,7 @@
>
>  #include "qemu/osdep.h"
>  #include "sysemu/rng.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qapi/error.h"
>  #include "qapi/qmp/qerror.h"
>
> diff --git a/backends/testdev.c b/backends/testdev.c
> index 7df9248a13..031e9a23e8 100644
> --- a/backends/testdev.c
> +++ b/backends/testdev.c
> @@ -25,7 +25,7 @@
>   */
>  #include "qemu/osdep.h"
>  #include "qemu-common.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #define BUF_SIZE 32
>
> diff --git a/backends/wctablet.c b/backends/wctablet.c
> index a4d3ae098a..07a4cde956 100644
> --- a/backends/wctablet.c
> +++ b/backends/wctablet.c
> @@ -32,7 +32,7 @@
>
>  #include "qemu/osdep.h"
>  #include "qemu-common.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "ui/console.h"
>  #include "ui/input.h"
>  #include "trace.h"
> diff --git a/chardev/char-console.c b/chardev/char-console.c
> index 8d972c1506..535ed65136 100644
> --- a/chardev/char-console.c
> +++ b/chardev/char-console.c
> @@ -22,7 +22,7 @@
>   * THE SOFTWARE.
>   */
>  #include "qemu/osdep.h"
> -#include "char-win.h"
> +#include "chardev/char-win.h"
>
>  static void qemu_chr_open_win_con(Chardev *chr,
>                                    ChardevBackend *backend,
> diff --git a/chardev/char-fd.c b/chardev/char-fd.c
> index 0b182c552c..1584a3de20 100644
> --- a/chardev/char-fd.c
> +++ b/chardev/char-fd.c
> @@ -25,11 +25,11 @@
>  #include "qemu/sockets.h"
>  #include "qapi/error.h"
>  #include "qemu-common.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "io/channel-file.h"
>
> -#include "char-fd.h"
> -#include "char-io.h"
> +#include "chardev/char-fd.h"
> +#include "chardev/char-io.h"
>
>  /* Called with chr_write_lock held.  */
>  static int fd_chr_write(Chardev *chr, const uint8_t *buf, int len)
> diff --git a/chardev/char-file.c b/chardev/char-file.c
> index aed4ae1569..a57b88aaf2 100644
> --- a/chardev/char-file.c
> +++ b/chardev/char-file.c
> @@ -24,12 +24,12 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
>  #include "qemu-common.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #ifdef _WIN32
> -#include "char-win.h"
> +#include "chardev/char-win.h"
>  #else
> -#include "char-fd.h"
> +#include "chardev/char-fd.h"
>  #endif
>
>  static void qmp_chardev_open_file(Chardev *chr,
> diff --git a/chardev/char-io.c b/chardev/char-io.c
> index b5708eef45..f81052481a 100644
> --- a/chardev/char-io.c
> +++ b/chardev/char-io.c
> @@ -22,7 +22,7 @@
>   * THE SOFTWARE.
>   */
>  #include "qemu/osdep.h"
> -#include "char-io.h"
> +#include "chardev/char-io.h"
>
>  typedef struct IOWatchPoll {
>      GSource parent;
> diff --git a/chardev/char-mux.c b/chardev/char-mux.c
> index 37d42c65c6..106c682e7f 100644
> --- a/chardev/char-mux.c
> +++ b/chardev/char-mux.c
> @@ -24,9 +24,9 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
>  #include "qemu-common.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/block-backend.h"
> -#include "char-mux.h"
> +#include "chardev/char-mux.h"
>
>  /* MUX driver for serial I/O splitting */
>
> diff --git a/chardev/char-null.c b/chardev/char-null.c
> index dc0d68ab2d..90bafe76f4 100644
> --- a/chardev/char-null.c
> +++ b/chardev/char-null.c
> @@ -22,7 +22,7 @@
>   * THE SOFTWARE.
>   */
>  #include "qemu/osdep.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  static void null_chr_open(Chardev *chr,
>                            ChardevBackend *backend,
> diff --git a/chardev/char-parallel.c b/chardev/char-parallel.c
> index 3fa22ce29d..bce89f8c36 100644
> --- a/chardev/char-parallel.c
> +++ b/chardev/char-parallel.c
> @@ -22,7 +22,7 @@
>   * THE SOFTWARE.
>   */
>  #include "qemu/osdep.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qapi/error.h"
>  #include <sys/ioctl.h>
>
> @@ -41,8 +41,8 @@
>  #endif
>  #endif
>
> -#include "char-fd.h"
> -#include "char-parallel.h"
> +#include "chardev/char-fd.h"
> +#include "chardev/char-parallel.h"
>
>  #if defined(__linux__)
>
> diff --git a/chardev/char-pipe.c b/chardev/char-pipe.c
> index aae950a22b..3a95e4c1b2 100644
> --- a/chardev/char-pipe.c
> +++ b/chardev/char-pipe.c
> @@ -23,12 +23,12 @@
>   */
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #ifdef _WIN32
> -#include "char-win.h"
> +#include "chardev/char-win.h"
>  #else
> -#include "char-fd.h"
> +#include "chardev/char-fd.h"
>  #endif
>
>  #ifdef _WIN32
> diff --git a/chardev/char-pty.c b/chardev/char-pty.c
> index 35a175d796..e5d20a0e6a 100644
> --- a/chardev/char-pty.c
> +++ b/chardev/char-pty.c
> @@ -24,12 +24,12 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
>  #include "qemu-common.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "io/channel-file.h"
>  #include "qemu/sockets.h"
>  #include "qemu/error-report.h"
>
> -#include "char-io.h"
> +#include "chardev/char-io.h"
>
>  #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__)      \
>      || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) \
> diff --git a/chardev/char-ringbuf.c b/chardev/char-ringbuf.c
> index d130069e88..df52b04d22 100644
> --- a/chardev/char-ringbuf.c
> +++ b/chardev/char-ringbuf.c
> @@ -22,7 +22,7 @@
>   * THE SOFTWARE.
>   */
>  #include "qemu/osdep.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qmp-commands.h"
>  #include "qemu/base64.h"
>
> diff --git a/chardev/char-serial.c b/chardev/char-serial.c
> index fef3a91c77..2f8f83821d 100644
> --- a/chardev/char-serial.c
> +++ b/chardev/char-serial.c
> @@ -27,14 +27,14 @@
>  #include "qapi/error.h"
>
>  #ifdef _WIN32
> -#include "char-win.h"
> +#include "chardev/char-win.h"
>  #else
>  #include <sys/ioctl.h>
>  #include <termios.h>
> -#include "char-fd.h"
> +#include "chardev/char-fd.h"
>  #endif
>
> -#include "char-serial.h"
> +#include "chardev/char-serial.h"
>
>  #ifdef _WIN32
>
> diff --git a/chardev/char-socket.c b/chardev/char-socket.c
> index e2fb7f7cd5..ccc499cfa1 100644
> --- a/chardev/char-socket.c
> +++ b/chardev/char-socket.c
> @@ -22,14 +22,14 @@
>   * THE SOFTWARE.
>   */
>  #include "qemu/osdep.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "io/channel-socket.h"
>  #include "io/channel-tls.h"
>  #include "qemu/error-report.h"
>  #include "qapi/error.h"
>  #include "qapi/clone-visitor.h"
>
> -#include "char-io.h"
> +#include "chardev/char-io.h"
>
>  /***********************************************************/
>  /* TCP Net console */
> diff --git a/chardev/char-stdio.c b/chardev/char-stdio.c
> index be4a65962c..6f5d798d7b 100644
> --- a/chardev/char-stdio.c
> +++ b/chardev/char-stdio.c
> @@ -25,14 +25,14 @@
>  #include "qemu/sockets.h"
>  #include "qapi/error.h"
>  #include "qemu-common.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #ifdef _WIN32
> -#include "char-win.h"
> -#include "char-win-stdio.h"
> +#include "chardev/char-win.h"
> +#include "chardev/char-win-stdio.h"
>  #else
>  #include <termios.h>
> -#include "char-fd.h"
> +#include "chardev/char-fd.h"
>  #endif
>
>  #ifndef _WIN32
> diff --git a/chardev/char-udp.c b/chardev/char-udp.c
> index 607647642a..4ee11d3ebf 100644
> --- a/chardev/char-udp.c
> +++ b/chardev/char-udp.c
> @@ -22,11 +22,11 @@
>   * THE SOFTWARE.
>   */
>  #include "qemu/osdep.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "io/channel-socket.h"
>  #include "qapi/error.h"
>
> -#include "char-io.h"
> +#include "chardev/char-io.h"
>
>  /***********************************************************/
>  /* UDP Net console */
> diff --git a/chardev/char-win-stdio.c b/chardev/char-win-stdio.c
> index eb44afc17a..efcf7827eb 100644
> --- a/chardev/char-win-stdio.c
> +++ b/chardev/char-win-stdio.c
> @@ -23,8 +23,8 @@
>   */
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
> -#include "char-win.h"
> -#include "char-win-stdio.h"
> +#include "chardev/char-win.h"
> +#include "chardev/char-win-stdio.h"
>
>  typedef struct {
>      Chardev parent;
> diff --git a/chardev/char-win.c b/chardev/char-win.c
> index ec9a731be9..05518e0958 100644
> --- a/chardev/char-win.c
> +++ b/chardev/char-win.c
> @@ -24,7 +24,7 @@
>  #include "qemu/osdep.h"
>  #include "qemu-common.h"
>  #include "qapi/error.h"
> -#include "char-win.h"
> +#include "chardev/char-win.h"
>
>  static void win_chr_read(Chardev *chr, DWORD len)
>  {
> diff --git a/chardev/char.c b/chardev/char.c
> index 4e24dc39af..a747e0279a 100644
> --- a/chardev/char.c
> +++ b/chardev/char.c
> @@ -28,16 +28,16 @@
>  #include "sysemu/sysemu.h"
>  #include "qemu/config-file.h"
>  #include "qemu/error-report.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qmp-commands.h"
>  #include "qapi-visit.h"
>  #include "sysemu/replay.h"
>  #include "qemu/help_option.h"
>
> -#include "char-mux.h"
> -#include "char-io.h"
> -#include "char-parallel.h"
> -#include "char-serial.h"
> +#include "chardev/char-mux.h"
> +#include "chardev/char-io.h"
> +#include "chardev/char-parallel.h"
> +#include "chardev/char-serial.h"
>
>  /***********************************************************/
>  /* character device */
> diff --git a/gdbstub.c b/gdbstub.c
> index 86eed4f97c..6515c635dc 100644
> --- a/gdbstub.c
> +++ b/gdbstub.c
> @@ -25,7 +25,7 @@
>  #include "qemu.h"
>  #else
>  #include "monitor/monitor.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/sysemu.h"
>  #include "exec/gdbstub.h"
>  #endif
> diff --git a/hmp.c b/hmp.c
> index 20f5daba5e..97d4822e52 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -17,7 +17,7 @@
>  #include "hmp.h"
>  #include "net/net.h"
>  #include "net/eth.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/block-backend.h"
>  #include "sysemu/sysemu.h"
>  #include "qemu/config-file.h"
> diff --git a/hw/arm/fsl-imx25.c b/hw/arm/fsl-imx25.c
> index 9056f27bf8..40666b68a3 100644
> --- a/hw/arm/fsl-imx25.c
> +++ b/hw/arm/fsl-imx25.c
> @@ -30,7 +30,7 @@
>  #include "sysemu/sysemu.h"
>  #include "exec/address-spaces.h"
>  #include "hw/boards.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  static void fsl_imx25_init(Object *obj)
>  {
> diff --git a/hw/arm/fsl-imx31.c b/hw/arm/fsl-imx31.c
> index d7e2d832b2..c30130667e 100644
> --- a/hw/arm/fsl-imx31.c
> +++ b/hw/arm/fsl-imx31.c
> @@ -27,7 +27,7 @@
>  #include "sysemu/sysemu.h"
>  #include "exec/address-spaces.h"
>  #include "hw/boards.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  static void fsl_imx31_init(Object *obj)
>  {
> diff --git a/hw/arm/fsl-imx6.c b/hw/arm/fsl-imx6.c
> index 6969e734ad..27773c9c47 100644
> --- a/hw/arm/fsl-imx6.c
> +++ b/hw/arm/fsl-imx6.c
> @@ -24,7 +24,7 @@
>  #include "qemu-common.h"
>  #include "hw/arm/fsl-imx6.h"
>  #include "sysemu/sysemu.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/error-report.h"
>
>  #define NAME_SIZE 20
> diff --git a/hw/arm/omap2.c b/hw/arm/omap2.c
> index cf1b4ba58f..566749a9eb 100644
> --- a/hw/arm/omap2.c
> +++ b/hw/arm/omap2.c
> @@ -30,7 +30,7 @@
>  #include "hw/arm/omap.h"
>  #include "sysemu/sysemu.h"
>  #include "qemu/timer.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "hw/block/flash.h"
>  #include "hw/arm/soc_dma.h"
>  #include "hw/sysbus.h"
> diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
> index eea551dc16..0d43cc707c 100644
> --- a/hw/arm/pxa2xx.c
> +++ b/hw/arm/pxa2xx.c
> @@ -17,7 +17,7 @@
>  #include "hw/char/serial.h"
>  #include "hw/i2c/i2c.h"
>  #include "hw/ssi/ssi.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "qemu/cutils.h"
> diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c
> index 3311cc38a4..66cad198d4 100644
> --- a/hw/arm/strongarm.c
> +++ b/hw/arm/strongarm.c
> @@ -34,7 +34,7 @@
>  #include "strongarm.h"
>  #include "qemu/error-report.h"
>  #include "hw/arm/arm.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/sysemu.h"
>  #include "hw/ssi/ssi.h"
>  #include "qemu/cutils.h"
> diff --git a/hw/bt/hci-csr.c b/hw/bt/hci-csr.c
> index 3c193848fc..cc2087392e 100644
> --- a/hw/bt/hci-csr.c
> +++ b/hw/bt/hci-csr.c
> @@ -20,7 +20,7 @@
>
>  #include "qemu/osdep.h"
>  #include "qemu-common.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/timer.h"
>  #include "qemu/bswap.h"
>  #include "hw/irq.h"
> diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
> index 4dcee571c0..cf4c1d56ff 100644
> --- a/hw/char/cadence_uart.c
> +++ b/hw/char/cadence_uart.c
> @@ -23,7 +23,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/sysbus.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/timer.h"
>  #include "qemu/log.h"
>  #include "hw/char/cadence_uart.h"
> diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c
> index 80dce07e7f..77d91c8558 100644
> --- a/hw/char/debugcon.c
> +++ b/hw/char/debugcon.c
> @@ -27,7 +27,7 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
>  #include "hw/hw.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "hw/isa/isa.h"
>  #include "hw/i386/pc.h"
>
> diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c
> index 029f5bbf5e..4f1dec7f1d 100644
> --- a/hw/char/digic-uart.c
> +++ b/hw/char/digic-uart.c
> @@ -29,7 +29,7 @@
>  #include "qemu/osdep.h"
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/log.h"
>
>  #include "hw/char/digic-uart.h"
> diff --git a/hw/char/escc.c b/hw/char/escc.c
> index 9228091cec..df89d58eed 100644
> --- a/hw/char/escc.c
> +++ b/hw/char/escc.c
> @@ -26,7 +26,7 @@
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
>  #include "hw/char/escc.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "ui/console.h"
>  #include "ui/input.h"
>  #include "trace.h"
> diff --git a/hw/char/etraxfs_ser.c b/hw/char/etraxfs_ser.c
> index 54383878e0..33e3e16397 100644
> --- a/hw/char/etraxfs_ser.c
> +++ b/hw/char/etraxfs_ser.c
> @@ -24,7 +24,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/sysbus.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/log.h"
>
>  #define D(x)
> diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c
> index bff706ab3a..94952fb90f 100644
> --- a/hw/char/exynos4210_uart.c
> +++ b/hw/char/exynos4210_uart.c
> @@ -23,7 +23,7 @@
>  #include "hw/sysbus.h"
>  #include "qemu/error-report.h"
>  #include "sysemu/sysemu.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #include "hw/arm/exynos4210.h"
>
> diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c
> index db686e6a6f..39d1133c61 100644
> --- a/hw/char/grlib_apbuart.c
> +++ b/hw/char/grlib_apbuart.c
> @@ -24,7 +24,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/sysbus.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #include "trace.h"
>
> diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c
> index 93929c2880..b8a3c92c9e 100644
> --- a/hw/char/ipoctal232.c
> +++ b/hw/char/ipoctal232.c
> @@ -11,7 +11,7 @@
>  #include "qemu/osdep.h"
>  #include "hw/ipack/ipack.h"
>  #include "qemu/bitops.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  /* #define DEBUG_IPOCTAL */
>
> diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c
> index f8c1e0d076..6b0633e518 100644
> --- a/hw/char/lm32_juart.c
> +++ b/hw/char/lm32_juart.c
> @@ -21,7 +21,7 @@
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
>  #include "trace.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #include "hw/char/lm32_juart.h"
>
> diff --git a/hw/char/lm32_uart.c b/hw/char/lm32_uart.c
> index 7f3597c4b0..a7610c28ce 100644
> --- a/hw/char/lm32_uart.c
> +++ b/hw/char/lm32_uart.c
> @@ -26,7 +26,7 @@
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
>  #include "trace.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/error-report.h"
>
>  enum {
> diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c
> index e69672f4e9..b639b53c83 100644
> --- a/hw/char/mcf_uart.c
> +++ b/hw/char/mcf_uart.c
> @@ -9,7 +9,7 @@
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
>  #include "hw/m68k/mcf.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "exec/address-spaces.h"
>  #include "qapi/error.h"
>
> diff --git a/hw/char/milkymist-uart.c b/hw/char/milkymist-uart.c
> index ae8e2f3554..5ef847c5eb 100644
> --- a/hw/char/milkymist-uart.c
> +++ b/hw/char/milkymist-uart.c
> @@ -25,7 +25,7 @@
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
>  #include "trace.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/error-report.h"
>
>  enum {
> diff --git a/hw/char/omap_uart.c b/hw/char/omap_uart.c
> index 31ebb1592c..6fd1b9cf6b 100644
> --- a/hw/char/omap_uart.c
> +++ b/hw/char/omap_uart.c
> @@ -18,7 +18,7 @@
>   * with this program; if not, see <http://www.gnu.org/licenses/>.
>   */
>  #include "qemu/osdep.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "hw/hw.h"
>  #include "hw/arm/omap.h"
>  #include "hw/char/serial.h"
> diff --git a/hw/char/parallel.c b/hw/char/parallel.c
> index c71a4a0f4f..c926df0bee 100644
> --- a/hw/char/parallel.c
> +++ b/hw/char/parallel.c
> @@ -25,7 +25,7 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
>  #include "hw/hw.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "hw/isa/isa.h"
>  #include "hw/i386/pc.h"
>  #include "sysemu/sysemu.h"
> diff --git a/hw/char/pl011.c b/hw/char/pl011.c
> index 24ea9738b6..1757035bb3 100644
> --- a/hw/char/pl011.c
> +++ b/hw/char/pl011.c
> @@ -9,7 +9,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/sysbus.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/log.h"
>  #include "trace.h"
>
> diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c
> index 07d6ebd112..755d514188 100644
> --- a/hw/char/sclpconsole-lm.c
> +++ b/hw/char/sclpconsole-lm.c
> @@ -17,7 +17,7 @@
>  #include "hw/qdev.h"
>  #include "qemu/thread.h"
>  #include "qemu/error-report.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #include "hw/s390x/sclp.h"
>  #include "hw/s390x/event-facility.h"
> diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c
> index b78f240a73..0fd3cb4887 100644
> --- a/hw/char/sclpconsole.c
> +++ b/hw/char/sclpconsole.c
> @@ -19,7 +19,7 @@
>
>  #include "hw/s390x/sclp.h"
>  #include "hw/s390x/event-facility.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  typedef struct ASCIIConsoleData {
>      EventBufferHeader ebh;
> diff --git a/hw/char/serial.c b/hw/char/serial.c
> index 03d890ca24..aa336333be 100644
> --- a/hw/char/serial.c
> +++ b/hw/char/serial.c
> @@ -25,7 +25,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/char/serial.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qapi/error.h"
>  #include "qemu/timer.h"
>  #include "exec/address-spaces.h"
> diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c
> index 303eb0a678..80c7696d8d 100644
> --- a/hw/char/sh_serial.c
> +++ b/hw/char/sh_serial.c
> @@ -27,7 +27,7 @@
>  #include "qemu/osdep.h"
>  #include "hw/hw.h"
>  #include "hw/sh4/sh.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "exec/address-spaces.h"
>  #include "qapi/error.h"
>
> diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c
> index e30c8da57c..2317e45404 100644
> --- a/hw/char/spapr_vty.c
> +++ b/hw/char/spapr_vty.c
> @@ -4,7 +4,7 @@
>  #include "qemu-common.h"
>  #include "cpu.h"
>  #include "hw/qdev.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "hw/ppc/spapr.h"
>  #include "hw/ppc/spapr_vio.h"
>
> diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c
> index b2dda01baa..c043104185 100644
> --- a/hw/char/terminal3270.c
> +++ b/hw/char/terminal3270.c
> @@ -13,7 +13,7 @@
>
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "hw/s390x/3270-ccw.h"
>
>  /* Enough spaces for different window sizes. */
> diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c
> index 798d9b69fd..8418db6a07 100644
> --- a/hw/char/virtio-console.c
> +++ b/hw/char/virtio-console.c
> @@ -11,7 +11,7 @@
>   */
>
>  #include "qemu/osdep.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/error-report.h"
>  #include "trace.h"
>  #include "hw/virtio/virtio-serial.h"
> diff --git a/hw/char/xen_console.c b/hw/char/xen_console.c
> index c01f41090e..1cdbe59f8a 100644
> --- a/hw/char/xen_console.c
> +++ b/hw/char/xen_console.c
> @@ -25,7 +25,7 @@
>
>  #include "qapi/error.h"
>  #include "hw/hw.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "hw/xen/xen_backend.h"
>  #include "qapi/error.h"
>
> diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c
> index 37d313b429..bcebdae3da 100644
> --- a/hw/char/xilinx_uartlite.c
> +++ b/hw/char/xilinx_uartlite.c
> @@ -24,7 +24,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/sysbus.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #define DUART(x)
>
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index 79c2014135..4da0c6a24e 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -20,7 +20,7 @@
>  #include "hw/block/block.h"
>  #include "net/hub.h"
>  #include "qapi/visitor.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/iothread.h"
>
>  static void get_pointer(Object *obj, Visitor *v, Property *prop,
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index fa3617db2d..9f1a497322 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -9,7 +9,7 @@
>  #include "hw/block/block.h"
>  #include "net/hub.h"
>  #include "qapi/visitor.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  void qdev_prop_set_after_realize(DeviceState *dev, const char *name,
>                                    Error **errp)
> diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c
> index e8e3d250b6..35285383fd 100644
> --- a/hw/ipmi/ipmi_bmc_extern.c
> +++ b/hw/ipmi/ipmi_bmc_extern.c
> @@ -30,7 +30,7 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
>  #include "qemu/timer.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/sysemu.h"
>  #include "hw/ipmi/ipmi.h"
>
> diff --git a/hw/isa/pc87312.c b/hw/isa/pc87312.c
> index c707d24db4..5ce9f0a062 100644
> --- a/hw/isa/pc87312.c
> +++ b/hw/isa/pc87312.c
> @@ -30,7 +30,7 @@
>  #include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "sysemu/sysemu.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "trace.h"
>
>
> diff --git a/hw/mips/boston.c b/hw/mips/boston.c
> index 83f7b82386..56d22fe49b 100644
> --- a/hw/mips/boston.c
> +++ b/hw/mips/boston.c
> @@ -35,7 +35,7 @@
>  #include "qemu/cutils.h"
>  #include "qemu/error-report.h"
>  #include "qemu/log.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/device_tree.h"
>  #include "sysemu/sysemu.h"
>  #include "sysemu/qtest.h"
> diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> index 475e36a4c7..cd064dcf8c 100644
> --- a/hw/misc/ivshmem.c
> +++ b/hw/misc/ivshmem.c
> @@ -29,7 +29,7 @@
>  #include "qemu/error-report.h"
>  #include "qemu/event_notifier.h"
>  #include "qom/object_interfaces.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/hostmem.h"
>  #include "sysemu/qtest.h"
>  #include "qapi/visitor.h"
> diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
> index a41b0d6ec5..c2096b25ab 100644
> --- a/hw/usb/ccid-card-passthru.c
> +++ b/hw/usb/ccid-card-passthru.c
> @@ -9,7 +9,7 @@
>   */
>
>  #include "qemu/osdep.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/error-report.h"
>  #include "qemu/sockets.h"
>  #include "ccid.h"
> diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
> index 83a4f0e6fb..578760e1b3 100644
> --- a/hw/usb/dev-serial.c
> +++ b/hw/usb/dev-serial.c
> @@ -15,7 +15,7 @@
>  #include "qemu/error-report.h"
>  #include "hw/usb.h"
>  #include "hw/usb/desc.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  //#define DEBUG_Serial
>
> diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
> index ad5ef783a6..c862c1adea 100644
> --- a/hw/usb/redirect.c
> +++ b/hw/usb/redirect.c
> @@ -33,7 +33,7 @@
>  #include "qapi/qmp/qerror.h"
>  #include "qemu/error-report.h"
>  #include "qemu/iov.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  #include <usbredirparser.h>
>  #include <usbredirfilter.h>
> diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
> index b87a176770..ff4cee82e6 100644
> --- a/hw/virtio/vhost-user.c
> +++ b/hw/virtio/vhost-user.c
> @@ -13,7 +13,7 @@
>  #include "hw/virtio/vhost.h"
>  #include "hw/virtio/vhost-backend.h"
>  #include "hw/virtio/virtio-net.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/kvm.h"
>  #include "qemu/error-report.h"
>  #include "qemu/sockets.h"
> diff --git a/hw/xen/xen-common.c b/hw/xen/xen-common.c
> index a9055e9eba..0bed5770c9 100644
> --- a/hw/xen/xen-common.c
> +++ b/hw/xen/xen-common.c
> @@ -11,7 +11,7 @@
>  #include "qemu/osdep.h"
>  #include "hw/xen/xen_backend.h"
>  #include "qmp-commands.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/accel.h"
>  #include "migration/migration.h"
>
> diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c
> index 11176e26bd..5b31cdc566 100644
> --- a/hw/xtensa/xtfpga.c
> +++ b/hw/xtensa/xtfpga.c
> @@ -40,7 +40,7 @@
>  #include "hw/sysbus.h"
>  #include "hw/block/flash.h"
>  #include "sysemu/block-backend.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/device_tree.h"
>  #include "qemu/error-report.h"
>  #include "bootparam.h"
> diff --git a/monitor.c b/monitor.c
> index baa73c98b7..29b71ff2bc 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -35,7 +35,7 @@
>  #include "exec/gdbstub.h"
>  #include "net/net.h"
>  #include "net/slirp.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "ui/qemu-spice.h"
>  #include "sysemu/numa.h"
>  #include "monitor/monitor.h"
> diff --git a/net/colo-compare.c b/net/colo-compare.c
> index 2639c7f0a2..619335d5e8 100644
> --- a/net/colo-compare.c
> +++ b/net/colo-compare.c
> @@ -25,7 +25,7 @@
>  #include "qom/object.h"
>  #include "qemu/typedefs.h"
>  #include "net/queue.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/sockets.h"
>  #include "qapi-visit.h"
>  #include "net/colo.h"
> diff --git a/net/filter-mirror.c b/net/filter-mirror.c
> index 8b1b06977d..7adc2c10d2 100644
> --- a/net/filter-mirror.c
> +++ b/net/filter-mirror.c
> @@ -20,7 +20,7 @@
>  #include "qemu/main-loop.h"
>  #include "qemu/error-report.h"
>  #include "trace.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/iov.h"
>  #include "qemu/sockets.h"
>
> diff --git a/net/slirp.c b/net/slirp.c
> index c705a60b62..af3e8b22ac 100644
> --- a/net/slirp.c
> +++ b/net/slirp.c
> @@ -37,7 +37,7 @@
>  #include "qemu/sockets.h"
>  #include "slirp/libslirp.h"
>  #include "slirp/ip6.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/sysemu.h"
>  #include "qemu/cutils.h"
>  #include "qapi/error.h"
> diff --git a/net/vhost-user.c b/net/vhost-user.c
> index 00a0c1cbc5..77d2ce22a6 100644
> --- a/net/vhost-user.c
> +++ b/net/vhost-user.c
> @@ -12,7 +12,7 @@
>  #include "clients.h"
>  #include "net/vhost_net.h"
>  #include "net/vhost-user.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/config-file.h"
>  #include "qemu/error-report.h"
>  #include "qmp-commands.h"
> diff --git a/qmp.c b/qmp.c
> index f656940769..59448dcd16 100644
> --- a/qmp.c
> +++ b/qmp.c
> @@ -21,7 +21,7 @@
>  #include "qemu/config-file.h"
>  #include "qemu/uuid.h"
>  #include "qmp-commands.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "ui/qemu-spice.h"
>  #include "ui/vnc.h"
>  #include "sysemu/kvm.h"
> diff --git a/qtest.c b/qtest.c
> index 5aa6636ca8..dbf70a7018 100644
> --- a/qtest.c
> +++ b/qtest.c
> @@ -17,7 +17,7 @@
>  #include "cpu.h"
>  #include "sysemu/qtest.h"
>  #include "hw/qdev.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "exec/ioport.h"
>  #include "exec/memory.h"
>  #include "hw/irq.h"
> diff --git a/replay/replay-char.c b/replay/replay-char.c
> index aa65955942..cbf7c04a9f 100755
> --- a/replay/replay-char.c
> +++ b/replay/replay-char.c
> @@ -14,7 +14,7 @@
>  #include "sysemu/replay.h"
>  #include "replay-internal.h"
>  #include "sysemu/sysemu.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>
>  /* Char drivers that generate qemu_chr_be_write events
>     that should be saved into the log. */
> diff --git a/slirp/slirp.c b/slirp/slirp.c
> index 2f2ec2c1b3..3b92cb54ce 100644
> --- a/slirp/slirp.c
> +++ b/slirp/slirp.c
> @@ -25,7 +25,7 @@
>  #include "qemu-common.h"
>  #include "qemu/timer.h"
>  #include "qemu/error-report.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "slirp.h"
>  #include "hw/hw.h"
>  #include "qemu/cutils.h"
> diff --git a/spice-qemu-char.c b/spice-qemu-char.c
> index 4d1c76e8a4..1c6c2e3969 100644
> --- a/spice-qemu-char.c
> +++ b/spice-qemu-char.c
> @@ -1,7 +1,7 @@
>  #include "qemu/osdep.h"
>  #include "trace-root.h"
>  #include "ui/qemu-spice.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/error-report.h"
>  #include <spice.h>
>  #include <spice/protocol.h>
> diff --git a/tests/postcopy-test.c b/tests/postcopy-test.c
> index e86f87656a..8142f2ab90 100644
> --- a/tests/postcopy-test.c
> +++ b/tests/postcopy-test.c
> @@ -16,7 +16,7 @@
>  #include "qemu/option.h"
>  #include "qemu/range.h"
>  #include "qemu/sockets.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/sysemu.h"
>  #include "hw/nvram/chrp_nvram.h"
>
> diff --git a/tests/test-char.c b/tests/test-char.c
> index 124d0c5439..9340c55058 100644
> --- a/tests/test-char.c
> +++ b/tests/test-char.c
> @@ -4,7 +4,7 @@
>  #include "qemu-common.h"
>  #include "qemu/config-file.h"
>  #include "qemu/sockets.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/sysemu.h"
>  #include "qapi/error.h"
>  #include "qom/qom-qobject.h"
> diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
> index 9095af267e..acc392d046 100644
> --- a/tests/vhost-user-test.c
> +++ b/tests/vhost-user-test.c
> @@ -16,7 +16,7 @@
>  #include "qemu/option.h"
>  #include "qemu/range.h"
>  #include "qemu/sockets.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "sysemu/sysemu.h"
>  #include "libqos/libqos.h"
>  #include "libqos/pci-pc.h"
> diff --git a/ui/console.c b/ui/console.c
> index ac66b3c910..6cf795a23d 100644
> --- a/ui/console.c
> +++ b/ui/console.c
> @@ -27,7 +27,7 @@
>  #include "hw/qdev-core.h"
>  #include "qemu/timer.h"
>  #include "qmp-commands.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "trace.h"
>  #include "exec/memory.h"
>
> diff --git a/ui/gtk.c b/ui/gtk.c
> index 0213ad0efc..5bd87c265a 100644
> --- a/ui/gtk.c
> +++ b/ui/gtk.c
> @@ -54,7 +54,7 @@
>  #include "qmp-commands.h"
>  #include "x_keymap.h"
>  #include "keymaps.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qom/object.h"
>
>  #define MAX_VCS 10
> diff --git a/vl.c b/vl.c
> index 3465121217..009dfa58b4 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -81,7 +81,7 @@ int main(int argc, char **argv)
>  #include "sysemu/numa.h"
>  #include "exec/gdbstub.h"
>  #include "qemu/timer.h"
> -#include "sysemu/char.h"
> +#include "chardev/char.h"
>  #include "qemu/bitmap.h"
>  #include "qemu/log.h"
>  #include "sysemu/blockdev.h"
> diff --git a/MAINTAINERS b/MAINTAINERS
> index ef2ec58a94..59e03436ad 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1230,6 +1230,7 @@ M: Paolo Bonzini <pbonzini@redhat.com>
>  M: Marc-André Lureau <marcandre.lureau@redhat.com>
>  S: Maintained
>  F: chardev/
> +F: include/chardev/
>  F: backends/msmouse.c
>  F: backends/testdev.c
>
>

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 08/14] chardev: serial & parallel declaration to own headers
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 08/14] chardev: serial & parallel declaration to own headers Marc-André Lureau
@ 2017-05-29 21:03   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 33+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-05-29 21:03 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: pbonzini

On 05/29/2017 05:45 AM, Marc-André Lureau wrote:
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
>  include/chardev/char-parallel.h | 20 +++++++++++++++++++-
>  include/chardev/char-serial.h   | 22 ++++++++++++++++++++++
>  include/chardev/char.h          | 36 ------------------------------------
>  backends/wctablet.c             |  2 +-
>  hw/arm/strongarm.c              |  2 +-
>  hw/bt/hci-csr.c                 |  2 +-
>  hw/char/cadence_uart.c          |  2 +-
>  hw/char/escc.c                  |  2 +-
>  hw/char/exynos4210_uart.c       |  2 +-
>  hw/char/parallel.c              |  2 +-
>  hw/char/serial.c                |  2 +-
>  hw/usb/dev-serial.c             |  2 +-
>  12 files changed, 50 insertions(+), 46 deletions(-)
>
> diff --git a/include/chardev/char-parallel.h b/include/chardev/char-parallel.h
> index 26742f9d5c..3284a1b96b 100644
> --- a/include/chardev/char-parallel.h
> +++ b/include/chardev/char-parallel.h
> @@ -24,9 +24,27 @@
>  #ifndef CHAR_PARALLEL_H
>  #define CHAR_PARALLEL_H
>
> -#if defined(__linux__) || defined(__FreeBSD__) || \
> +#include "chardev/char.h"
> +
> +#if defined(__linux__) || defined(__FreeBSD__) ||               \
>      defined(__FreeBSD_kernel__) || defined(__DragonFly__)
>  #define HAVE_CHARDEV_PARPORT 1
>  #endif
>
> +#define CHR_IOCTL_PP_READ_DATA        3
> +#define CHR_IOCTL_PP_WRITE_DATA       4
> +#define CHR_IOCTL_PP_READ_CONTROL     5
> +#define CHR_IOCTL_PP_WRITE_CONTROL    6
> +#define CHR_IOCTL_PP_READ_STATUS      7
> +#define CHR_IOCTL_PP_EPP_READ_ADDR    8
> +#define CHR_IOCTL_PP_EPP_READ         9
> +#define CHR_IOCTL_PP_EPP_WRITE_ADDR  10
> +#define CHR_IOCTL_PP_EPP_WRITE       11
> +#define CHR_IOCTL_PP_DATA_DIR        12
> +
> +struct ParallelIOArg {
> +    void *buffer;
> +    int count;
> +};
> +
>  #endif /* CHAR_PARALLEL_H */
> diff --git a/include/chardev/char-serial.h b/include/chardev/char-serial.h
> index 64a27f63b1..cb2e59e82a 100644
> --- a/include/chardev/char-serial.h
> +++ b/include/chardev/char-serial.h
> @@ -24,6 +24,8 @@
>  #ifndef CHAR_SERIAL_H
>  #define CHAR_SERIAL_H
>
> +#include "chardev/char.h"
> +
>  #ifdef _WIN32
>  #define HAVE_CHARDEV_SERIAL 1
>  #elif defined(__linux__) || defined(__sun__) || defined(__FreeBSD__)    \
> @@ -32,4 +34,24 @@
>  #define HAVE_CHARDEV_SERIAL 1
>  #endif
>
> +#define CHR_IOCTL_SERIAL_SET_PARAMS   1
> +typedef struct {
> +    int speed;
> +    int parity;
> +    int data_bits;
> +    int stop_bits;
> +} QEMUSerialSetParams;
> +
> +#define CHR_IOCTL_SERIAL_SET_BREAK    2
> +
> +#define CHR_IOCTL_SERIAL_SET_TIOCM   13
> +#define CHR_IOCTL_SERIAL_GET_TIOCM   14
> +
> +#define CHR_TIOCM_CTS   0x020
> +#define CHR_TIOCM_CAR   0x040
> +#define CHR_TIOCM_DSR   0x100
> +#define CHR_TIOCM_RI    0x080
> +#define CHR_TIOCM_DTR   0x002
> +#define CHR_TIOCM_RTS   0x004
> +
>  #endif
> diff --git a/include/chardev/char.h b/include/chardev/char.h
> index fffc0f40d4..95273e10ae 100644
> --- a/include/chardev/char.h
> +++ b/include/chardev/char.h
> @@ -27,42 +27,6 @@ typedef enum {
>
>  #define CHR_READ_BUF_LEN 4096
>
> -#define CHR_IOCTL_SERIAL_SET_PARAMS   1
> -typedef struct {
> -    int speed;
> -    int parity;
> -    int data_bits;
> -    int stop_bits;
> -} QEMUSerialSetParams;
> -
> -#define CHR_IOCTL_SERIAL_SET_BREAK    2
> -
> -#define CHR_IOCTL_PP_READ_DATA        3
> -#define CHR_IOCTL_PP_WRITE_DATA       4
> -#define CHR_IOCTL_PP_READ_CONTROL     5
> -#define CHR_IOCTL_PP_WRITE_CONTROL    6
> -#define CHR_IOCTL_PP_READ_STATUS      7
> -#define CHR_IOCTL_PP_EPP_READ_ADDR    8
> -#define CHR_IOCTL_PP_EPP_READ         9
> -#define CHR_IOCTL_PP_EPP_WRITE_ADDR  10
> -#define CHR_IOCTL_PP_EPP_WRITE       11
> -#define CHR_IOCTL_PP_DATA_DIR        12
> -
> -struct ParallelIOArg {
> -    void *buffer;
> -    int count;
> -};
> -
> -#define CHR_IOCTL_SERIAL_SET_TIOCM   13
> -#define CHR_IOCTL_SERIAL_GET_TIOCM   14
> -
> -#define CHR_TIOCM_CTS	0x020
> -#define CHR_TIOCM_CAR	0x040
> -#define CHR_TIOCM_DSR	0x100
> -#define CHR_TIOCM_RI	0x080
> -#define CHR_TIOCM_DTR	0x002
> -#define CHR_TIOCM_RTS	0x004
> -
>  typedef void IOEventHandler(void *opaque, int event);
>
>  typedef enum {
> diff --git a/backends/wctablet.c b/backends/wctablet.c
> index 07a4cde956..6c13c2c58a 100644
> --- a/backends/wctablet.c
> +++ b/backends/wctablet.c
> @@ -32,7 +32,7 @@
>
>  #include "qemu/osdep.h"
>  #include "qemu-common.h"
> -#include "chardev/char.h"
> +#include "chardev/char-serial.h"
>  #include "ui/console.h"
>  #include "ui/input.h"
>  #include "trace.h"
> diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c
> index 66cad198d4..967caea749 100644
> --- a/hw/arm/strongarm.c
> +++ b/hw/arm/strongarm.c
> @@ -34,7 +34,7 @@
>  #include "strongarm.h"
>  #include "qemu/error-report.h"
>  #include "hw/arm/arm.h"
> -#include "chardev/char.h"
> +#include "chardev/char-serial.h"
>  #include "sysemu/sysemu.h"
>  #include "hw/ssi/ssi.h"
>  #include "qemu/cutils.h"
> diff --git a/hw/bt/hci-csr.c b/hw/bt/hci-csr.c
> index cc2087392e..0f2021086d 100644
> --- a/hw/bt/hci-csr.c
> +++ b/hw/bt/hci-csr.c
> @@ -20,7 +20,7 @@
>
>  #include "qemu/osdep.h"
>  #include "qemu-common.h"
> -#include "chardev/char.h"
> +#include "chardev/char-serial.h"
>  #include "qemu/timer.h"
>  #include "qemu/bswap.h"
>  #include "hw/irq.h"
> diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
> index cf4c1d56ff..4bfc185376 100644
> --- a/hw/char/cadence_uart.c
> +++ b/hw/char/cadence_uart.c
> @@ -23,7 +23,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/sysbus.h"
> -#include "chardev/char.h"
> +#include "chardev/char-serial.h"
>  #include "qemu/timer.h"
>  #include "qemu/log.h"
>  #include "hw/char/cadence_uart.h"
> diff --git a/hw/char/escc.c b/hw/char/escc.c
> index df89d58eed..81d792cb47 100644
> --- a/hw/char/escc.c
> +++ b/hw/char/escc.c
> @@ -26,7 +26,7 @@
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
>  #include "hw/char/escc.h"
> -#include "chardev/char.h"
> +#include "chardev/char-serial.h"
>  #include "ui/console.h"
>  #include "ui/input.h"
>  #include "trace.h"
> diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c
> index 94952fb90f..d93125645a 100644
> --- a/hw/char/exynos4210_uart.c
> +++ b/hw/char/exynos4210_uart.c
> @@ -23,7 +23,7 @@
>  #include "hw/sysbus.h"
>  #include "qemu/error-report.h"
>  #include "sysemu/sysemu.h"
> -#include "chardev/char.h"
> +#include "chardev/char-serial.h"
>
>  #include "hw/arm/exynos4210.h"
>
> diff --git a/hw/char/parallel.c b/hw/char/parallel.c
> index c926df0bee..1d6c6e9f33 100644
> --- a/hw/char/parallel.c
> +++ b/hw/char/parallel.c
> @@ -25,7 +25,7 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
>  #include "hw/hw.h"
> -#include "chardev/char.h"
> +#include "chardev/char-parallel.h"
>  #include "hw/isa/isa.h"
>  #include "hw/i386/pc.h"
>  #include "sysemu/sysemu.h"
> diff --git a/hw/char/serial.c b/hw/char/serial.c
> index aa336333be..23e5fe9d18 100644
> --- a/hw/char/serial.c
> +++ b/hw/char/serial.c
> @@ -25,7 +25,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/char/serial.h"
> -#include "chardev/char.h"
> +#include "chardev/char-serial.h"
>  #include "qapi/error.h"
>  #include "qemu/timer.h"
>  #include "exec/address-spaces.h"
> diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
> index 578760e1b3..a145c919e9 100644
> --- a/hw/usb/dev-serial.c
> +++ b/hw/usb/dev-serial.c
> @@ -15,7 +15,7 @@
>  #include "qemu/error-report.h"
>  #include "hw/usb.h"
>  #include "hw/usb/desc.h"
> -#include "chardev/char.h"
> +#include "chardev/char-serial.h"
>
>  //#define DEBUG_Serial
>
>

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 10/14] char: generalize qemu_chr_write_all()
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 10/14] char: generalize qemu_chr_write_all() Marc-André Lureau
@ 2017-05-29 21:09   ` Philippe Mathieu-Daudé
  2017-05-30  5:59     ` Marc-André Lureau
  0 siblings, 1 reply; 33+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-05-29 21:09 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: pbonzini

Hi Marc-André,

On 05/29/2017 05:45 AM, Marc-André Lureau wrote:
> qemu_chr_fe_write() is similar to qemu_chr_write_all(): the later write
> all with a chardev backend.
>
> Make qemu_chr_write() and qemu_chr_fe_write_buffer() take an 'all'
> argument. If false, handle 'partial' write the way qemu_chr_fe_write()
> use to, and call qemu_chr_write() from qemu_chr_fe_write().
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  chardev/char.c | 70 +++++++++++++++++++++++-----------------------------------
>  1 file changed, 28 insertions(+), 42 deletions(-)
>
> diff --git a/chardev/char.c b/chardev/char.c
> index a747e0279a..9a7c70c7aa 100644
> --- a/chardev/char.c
> +++ b/chardev/char.c
> @@ -96,7 +96,8 @@ static void qemu_chr_fe_write_log(Chardev *s,
>  }
>
>  static int qemu_chr_fe_write_buffer(Chardev *s,
> -                                    const uint8_t *buf, int len, int *offset)
> +                                    const uint8_t *buf, int len,
> +                                    int *offset, bool write_all)
>  {
>      ChardevClass *cc = CHARDEV_GET_CLASS(s);
>      int res = 0;
> @@ -106,7 +107,7 @@ static int qemu_chr_fe_write_buffer(Chardev *s,
>      while (*offset < len) {
>      retry:
>          res = cc->chr_write(s, buf + *offset, len - *offset);
> -        if (res < 0 && errno == EAGAIN) {
> +        if (res < 0 && errno == EAGAIN && write_all) {
>              g_usleep(100);
>              goto retry;
>          }
> @@ -116,6 +117,9 @@ static int qemu_chr_fe_write_buffer(Chardev *s,
>          }
>
>          *offset += res;
> +        if (!write_all) {
> +            break;
> +        }
>      }
>      if (*offset > 0) {
>          qemu_chr_fe_write_log(s, buf, *offset);
> @@ -130,54 +134,20 @@ static bool qemu_chr_replay(Chardev *chr)
>      return qemu_chr_has_feature(chr, QEMU_CHAR_FEATURE_REPLAY);
>  }
>
> -int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len)
> +static int qemu_chr_write(Chardev *s, const uint8_t *buf, int len,
> +                          bool write_all)
>  {
> -    Chardev *s = be->chr;
> -    ChardevClass *cc;
> -    int ret;
> -
> -    if (!s) {
> -        return 0;
> -    }
> -
> -    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_PLAY) {
> -        int offset;
> -        replay_char_write_event_load(&ret, &offset);
> -        assert(offset <= len);
> -        qemu_chr_fe_write_buffer(s, buf, offset, &offset);
> -        return ret;
> -    }
> -
> -    cc = CHARDEV_GET_CLASS(s);
> -    qemu_mutex_lock(&s->chr_write_lock);
> -    ret = cc->chr_write(s, buf, len);
> -
> -    if (ret > 0) {
> -        qemu_chr_fe_write_log(s, buf, ret);
> -    }
> -
> -    qemu_mutex_unlock(&s->chr_write_lock);
> -
> -    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
> -        replay_char_write_event_save(ret, ret < 0 ? 0 : ret);
> -    }
> -
> -    return ret;
> -}
> -
> -int qemu_chr_write_all(Chardev *s, const uint8_t *buf, int len)
> -{
> -    int offset;
> +    int offset = 0;
>      int res;
>
>      if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_PLAY) {
>          replay_char_write_event_load(&res, &offset);
>          assert(offset <= len);
> -        qemu_chr_fe_write_buffer(s, buf, offset, &offset);
> +        qemu_chr_fe_write_buffer(s, buf, offset, &offset, true);
>          return res;
>      }
>
> -    res = qemu_chr_fe_write_buffer(s, buf, len, &offset);
> +    res = qemu_chr_fe_write_buffer(s, buf, len, &offset, write_all);
>
>      if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
>          replay_char_write_event_save(res, offset);
> @@ -189,6 +159,22 @@ int qemu_chr_write_all(Chardev *s, const uint8_t *buf, int len)
>      return offset;
>  }
>
> +int qemu_chr_write_all(Chardev *s, const uint8_t *buf, int len)
> +{
> +    return qemu_chr_write(s, buf, len, true);
> +}
> +
> +int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len)
> +{
> +    Chardev *s = be->chr;
> +
> +    if (!s) {
> +        return 0;
> +    }
> +
> +    return qemu_chr_write(s, buf, len, false);
> +}
> +
>  int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len)
>  {
>      Chardev *s = be->chr;
> @@ -197,7 +183,7 @@ int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len)
>          return 0;
>      }
>
> -    return qemu_chr_write_all(s, buf, len);
> +    return qemu_chr_write(s, buf, len, true);

I think calling qemu_chr_write_all() is more readable.

Either ways:
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

>  }
>
>  int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len)
>

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 11/14] char: move CharBackend handling in char-fe unit
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 11/14] char: move CharBackend handling in char-fe unit Marc-André Lureau
@ 2017-05-29 21:25   ` Philippe Mathieu-Daudé
  2017-06-07 16:41     ` Anthony PERARD
  1 sibling, 0 replies; 33+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-05-29 21:25 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: pbonzini

Hi Marc-André,

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

On 05/29/2017 05:45 AM, Marc-André Lureau wrote:
> Move all the fronted struct and methods to a seperate unit. This avoids

"frontend, separate"

> accidentally mixing backend and frontend calls, and helps with readibilty.

"readability"

Indeed this patch makes it much cleaner.

> Make qemu_chr_replay() a macro shared by both char and char-fe.
>
> Export qemu_chr_write(), and use a macro for qemu_chr_write_all()

This change seems related to the previous commit, is it possible to move 
it there?

> (nb: yes, CharBackend is for char frontend :)
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/chardev/char-fe.h         | 249 ++++++++++++++++++++++++++
>  include/chardev/char-mux.h        |   1 +
>  include/chardev/char.h            | 242 +-------------------------
>  include/hw/char/bcm2835_aux.h     |   2 +-
>  include/hw/char/cadence_uart.h    |   2 +-
>  include/hw/char/digic-uart.h      |   2 +-
>  include/hw/char/imx_serial.h      |   2 +-
>  include/hw/char/serial.h          |   2 +-
>  include/hw/char/stm32f2xx_usart.h |   2 +-
>  backends/rng-egd.c                |   2 +-
>  chardev/char-fe.c                 | 358 ++++++++++++++++++++++++++++++++++++++
>  chardev/char.c                    | 343 +-----------------------------------
>  gdbstub.c                         |   1 +
>  hw/arm/omap2.c                    |   2 +-
>  hw/arm/pxa2xx.c                   |   2 +-
>  hw/arm/strongarm.c                |   1 +
>  hw/char/cadence_uart.c            |   1 +
>  hw/char/debugcon.c                |   2 +-
>  hw/char/digic-uart.c              |   2 +-
>  hw/char/escc.c                    |   1 +
>  hw/char/etraxfs_ser.c             |   2 +-
>  hw/char/exynos4210_uart.c         |   1 +
>  hw/char/grlib_apbuart.c           |   2 +-
>  hw/char/ipoctal232.c              |   2 +-
>  hw/char/lm32_juart.c              |   2 +-
>  hw/char/lm32_uart.c               |   2 +-
>  hw/char/mcf_uart.c                |   2 +-
>  hw/char/milkymist-uart.c          |   2 +-
>  hw/char/parallel.c                |   1 +
>  hw/char/pl011.c                   |   2 +-
>  hw/char/sclpconsole-lm.c          |   2 +-
>  hw/char/sclpconsole.c             |   2 +-
>  hw/char/sh_serial.c               |   2 +-
>  hw/char/spapr_vty.c               |   2 +-
>  hw/char/terminal3270.c            |   2 +-
>  hw/char/virtio-console.c          |   2 +-
>  hw/char/xen_console.c             |   2 +-
>  hw/char/xilinx_uartlite.c         |   2 +-
>  hw/core/qdev-properties-system.c  |   2 +-
>  hw/ipmi/ipmi_bmc_extern.c         |   2 +-
>  hw/misc/ivshmem.c                 |   2 +-
>  hw/usb/ccid-card-passthru.c       |   2 +-
>  hw/usb/dev-serial.c               |   1 +
>  hw/usb/redirect.c                 |   2 +-
>  hw/virtio/vhost-user.c            |   2 +-
>  monitor.c                         |   2 +-
>  net/colo-compare.c                |   2 +-
>  net/filter-mirror.c               |   2 +-
>  net/slirp.c                       |   2 +-
>  net/vhost-user.c                  |   2 +-
>  qtest.c                           |   2 +-
>  slirp/slirp.c                     |   2 +-
>  tests/test-char.c                 |   2 +-
>  tests/vhost-user-test.c           |   2 +-
>  ui/console.c                      |   2 +-
>  chardev/Makefile.objs             |   1 +
>  56 files changed, 664 insertions(+), 623 deletions(-)
>  create mode 100644 include/chardev/char-fe.h
>  create mode 100644 chardev/char-fe.c
>
> diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h
> new file mode 100644
> index 0000000000..bd82093218
> --- /dev/null
> +++ b/include/chardev/char-fe.h
> @@ -0,0 +1,249 @@
> +#ifndef QEMU_CHAR_FE_H
> +#define QEMU_CHAR_FE_H
> +
> +#include "chardev/char.h"
> +
> +typedef void IOEventHandler(void *opaque, int event);
> +
> +/* This is the backend as seen by frontend, the actual backend is
> + * Chardev */
> +struct CharBackend {
> +    Chardev *chr;
> +    IOEventHandler *chr_event;
> +    IOCanReadHandler *chr_can_read;
> +    IOReadHandler *chr_read;
> +    void *opaque;
> +    int tag;
> +    int fe_open;
> +};
> +
> +/**
> + * @qemu_chr_fe_init:
> + *
> + * Initializes a front end for the given CharBackend and
> + * Chardev. Call qemu_chr_fe_deinit() to remove the association and
> + * release the driver.
> + *
> + * Returns: false on error.
> + */
> +bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp);
> +
> +/**
> + * @qemu_chr_fe_deinit:
> + *
> + * Dissociate the CharBackend from the Chardev.
> + *
> + * Safe to call without associated Chardev.
> + */
> +void qemu_chr_fe_deinit(CharBackend *b);
> +
> +/**
> + * @qemu_chr_fe_get_driver:
> + *
> + * Returns the driver associated with a CharBackend or NULL if no
> + * associated Chardev.
> + */
> +Chardev *qemu_chr_fe_get_driver(CharBackend *be);
> +
> +/**
> + * @qemu_chr_fe_set_handlers:
> + * @b: a CharBackend
> + * @fd_can_read: callback to get the amount of data the frontend may
> + *               receive
> + * @fd_read: callback to receive data from char
> + * @fd_event: event callback
> + * @opaque: an opaque pointer for the callbacks
> + * @context: a main loop context or NULL for the default
> + * @set_open: whether to call qemu_chr_fe_set_open() implicitely when
> + * any of the handler is non-NULL
> + *
> + * Set the front end char handlers. The front end takes the focus if
> + * any of the handler is non-NULL.
> + *
> + * Without associated Chardev, nothing is changed.
> + */
> +void qemu_chr_fe_set_handlers(CharBackend *b,
> +                              IOCanReadHandler *fd_can_read,
> +                              IOReadHandler *fd_read,
> +                              IOEventHandler *fd_event,
> +                              void *opaque,
> +                              GMainContext *context,
> +                              bool set_open);
> +
> +/**
> + * @qemu_chr_fe_take_focus:
> + *
> + * Take the focus (if the front end is muxed).
> + *
> + * Without associated Chardev, nothing is changed.
> + */
> +void qemu_chr_fe_take_focus(CharBackend *b);
> +
> +/**
> + * @qemu_chr_fe_accept_input:
> + *
> + * Notify that the frontend is ready to receive data
> + */
> +void qemu_chr_fe_accept_input(CharBackend *be);
> +
> +/**
> + * @qemu_chr_fe_disconnect:
> + *
> + * Close a fd accpeted by character backend.
> + * Without associated Chardev, do nothing.
> + */
> +void qemu_chr_fe_disconnect(CharBackend *be);
> +
> +/**
> + * @qemu_chr_fe_wait_connected:
> + *
> + * Wait for characted backend to be connected, return < 0 on error or
> + * if no assicated Chardev.
> + */
> +int qemu_chr_fe_wait_connected(CharBackend *be, Error **errp);
> +
> +/**
> + * @qemu_chr_fe_set_echo:
> + *
> + * Ask the backend to override its normal echo setting.  This only really
> + * applies to the stdio backend and is used by the QMP server such that you
> + * can see what you type if you try to type QMP commands.
> + * Without associated Chardev, do nothing.
> + *
> + * @echo true to enable echo, false to disable echo
> + */
> +void qemu_chr_fe_set_echo(CharBackend *be, bool echo);
> +
> +/**
> + * @qemu_chr_fe_set_open:
> + *
> + * Set character frontend open status.  This is an indication that the
> + * front end is ready (or not) to begin doing I/O.
> + * Without associated Chardev, do nothing.
> + */
> +void qemu_chr_fe_set_open(CharBackend *be, int fe_open);
> +
> +/**
> + * @qemu_chr_fe_printf:
> + *
> + * Write to a character backend using a printf style interface.  This
> + * function is thread-safe. It does nothing without associated
> + * Chardev.
> + *
> + * @fmt see #printf
> + */
> +void qemu_chr_fe_printf(CharBackend *be, const char *fmt, ...)
> +    GCC_FMT_ATTR(2, 3);
> +
> +/**
> + * @qemu_chr_fe_add_watch:
> + *
> + * If the backend is connected, create and add a #GSource that fires
> + * when the given condition (typically G_IO_OUT|G_IO_HUP or G_IO_HUP)
> + * is active; return the #GSource's tag.  If it is disconnected,
> + * or without associated Chardev, return 0.
> + *
> + * @cond the condition to poll for
> + * @func the function to call when the condition happens
> + * @user_data the opaque pointer to pass to @func
> + *
> + * Returns: the source tag
> + */
> +guint qemu_chr_fe_add_watch(CharBackend *be, GIOCondition cond,
> +                            GIOFunc func, void *user_data);
> +
> +/**
> + * @qemu_chr_fe_write:
> + *
> + * Write data to a character backend from the front end.  This function
> + * will send data from the front end to the back end.  This function
> + * is thread-safe.
> + *
> + * @buf the data
> + * @len the number of bytes to send
> + *
> + * Returns: the number of bytes consumed (0 if no assicated Chardev)
> + */
> +int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len);
> +
> +/**
> + * @qemu_chr_fe_write_all:
> + *
> + * Write data to a character backend from the front end.  This function will
> + * send data from the front end to the back end.  Unlike @qemu_chr_fe_write,
> + * this function will block if the back end cannot consume all of the data
> + * attempted to be written.  This function is thread-safe.
> + *
> + * @buf the data
> + * @len the number of bytes to send
> + *
> + * Returns: the number of bytes consumed (0 if no assicated Chardev)
> + */
> +int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len);
> +
> +/**
> + * @qemu_chr_fe_read_all:
> + *
> + * Read data to a buffer from the back end.
> + *
> + * @buf the data buffer
> + * @len the number of bytes to read
> + *
> + * Returns: the number of bytes read (0 if no assicated Chardev)
> + */
> +int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len);
> +
> +/**
> + * @qemu_chr_fe_ioctl:
> + *
> + * Issue a device specific ioctl to a backend.  This function is thread-safe.
> + *
> + * @cmd see CHR_IOCTL_*
> + * @arg the data associated with @cmd
> + *
> + * Returns: if @cmd is not supported by the backend or there is no
> + *          associated Chardev, -ENOTSUP, otherwise the return
> + *          value depends on the semantics of @cmd
> + */
> +int qemu_chr_fe_ioctl(CharBackend *be, int cmd, void *arg);
> +
> +/**
> + * @qemu_chr_fe_get_msgfd:
> + *
> + * For backends capable of fd passing, return the latest file descriptor passed
> + * by a client.
> + *
> + * Returns: -1 if fd passing isn't supported or there is no pending file
> + *          descriptor.  If a file descriptor is returned, subsequent calls to
> + *          this function will return -1 until a client sends a new file
> + *          descriptor.
> + */
> +int qemu_chr_fe_get_msgfd(CharBackend *be);
> +
> +/**
> + * @qemu_chr_fe_get_msgfds:
> + *
> + * For backends capable of fd passing, return the number of file received
> + * descriptors and fills the fds array up to num elements
> + *
> + * Returns: -1 if fd passing isn't supported or there are no pending file
> + *          descriptors.  If file descriptors are returned, subsequent calls to
> + *          this function will return -1 until a client sends a new set of file
> + *          descriptors.
> + */
> +int qemu_chr_fe_get_msgfds(CharBackend *be, int *fds, int num);
> +
> +/**
> + * @qemu_chr_fe_set_msgfds:
> + *
> + * For backends capable of fd passing, set an array of fds to be passed with
> + * the next send operation.
> + * A subsequent call to this function before calling a write function will
> + * result in overwriting the fd array with the new value without being send.
> + * Upon writing the message the fd array is freed.
> + *
> + * Returns: -1 if fd passing isn't supported or no associated Chardev.
> + */
> +int qemu_chr_fe_set_msgfds(CharBackend *be, int *fds, int num);
> +
> +#endif /* QEMU_CHAR_FE_H */
> diff --git a/include/chardev/char-mux.h b/include/chardev/char-mux.h
> index 45cdfc7e67..8928977897 100644
> --- a/include/chardev/char-mux.h
> +++ b/include/chardev/char-mux.h
> @@ -25,6 +25,7 @@
>  #define CHAR_MUX_H
>
>  #include "chardev/char.h"
> +#include "chardev/char-fe.h"
>
>  extern bool muxes_realized;
>
> diff --git a/include/chardev/char.h b/include/chardev/char.h
> index 95273e10ae..8a9ade4931 100644
> --- a/include/chardev/char.h
> +++ b/include/chardev/char.h
> @@ -16,6 +16,7 @@
>  #define IAC 255
>
>  /* character device */
> +typedef struct CharBackend CharBackend;
>
>  typedef enum {
>      CHR_EVENT_BREAK, /* serial break char */
> @@ -27,8 +28,6 @@ typedef enum {
>
>  #define CHR_READ_BUF_LEN 4096
>
> -typedef void IOEventHandler(void *opaque, int event);
> -
>  typedef enum {
>      /* Whether the chardev peer is able to close and
>       * reopen the data channel, thus requiring support
> @@ -44,17 +43,7 @@ typedef enum {
>      QEMU_CHAR_FEATURE_LAST,
>  } ChardevFeature;
>
> -/* This is the backend as seen by frontend, the actual backend is
> - * Chardev */
> -typedef struct CharBackend {
> -    Chardev *chr;
> -    IOEventHandler *chr_event;
> -    IOCanReadHandler *chr_can_read;
> -    IOReadHandler *chr_read;
> -    void *opaque;
> -    int tag;
> -    int fe_open;
> -} CharBackend;
> +#define qemu_chr_replay(chr) qemu_chr_has_feature(chr, QEMU_CHAR_FEATURE_REPLAY)
>
>  struct Chardev {
>      Object parent_obj;
> @@ -103,15 +92,6 @@ void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend);
>   */
>  Chardev *qemu_chr_new(const char *label, const char *filename);
>
> -
> -/**
> - * @qemu_chr_fe_disconnect:
> - *
> - * Close a fd accpeted by character backend.
> - * Without associated Chardev, do nothing.
> - */
> -void qemu_chr_fe_disconnect(CharBackend *be);
> -
>  /**
>   * @qemu_chr_cleanup:
>   *
> @@ -120,14 +100,6 @@ void qemu_chr_fe_disconnect(CharBackend *be);
>  void qemu_chr_cleanup(void);
>
>  /**
> - * @qemu_chr_fe_wait_connected:
> - *
> - * Wait for characted backend to be connected, return < 0 on error or
> - * if no assicated Chardev.
> - */
> -int qemu_chr_fe_wait_connected(CharBackend *be, Error **errp);
> -
> -/**
>   * @qemu_chr_new_noreplay:
>   *
>   * Create a new character backend from a URI.
> @@ -142,150 +114,6 @@ int qemu_chr_fe_wait_connected(CharBackend *be, Error **errp);
>  Chardev *qemu_chr_new_noreplay(const char *label, const char *filename);
>
>  /**
> - * @qemu_chr_fe_set_echo:
> - *
> - * Ask the backend to override its normal echo setting.  This only really
> - * applies to the stdio backend and is used by the QMP server such that you
> - * can see what you type if you try to type QMP commands.
> - * Without associated Chardev, do nothing.
> - *
> - * @echo true to enable echo, false to disable echo
> - */
> -void qemu_chr_fe_set_echo(CharBackend *be, bool echo);
> -
> -/**
> - * @qemu_chr_fe_set_open:
> - *
> - * Set character frontend open status.  This is an indication that the
> - * front end is ready (or not) to begin doing I/O.
> - * Without associated Chardev, do nothing.
> - */
> -void qemu_chr_fe_set_open(CharBackend *be, int fe_open);
> -
> -/**
> - * @qemu_chr_fe_printf:
> - *
> - * Write to a character backend using a printf style interface.  This
> - * function is thread-safe. It does nothing without associated
> - * Chardev.
> - *
> - * @fmt see #printf
> - */
> -void qemu_chr_fe_printf(CharBackend *be, const char *fmt, ...)
> -    GCC_FMT_ATTR(2, 3);
> -
> -/**
> - * @qemu_chr_fe_add_watch:
> - *
> - * If the backend is connected, create and add a #GSource that fires
> - * when the given condition (typically G_IO_OUT|G_IO_HUP or G_IO_HUP)
> - * is active; return the #GSource's tag.  If it is disconnected,
> - * or without associated Chardev, return 0.
> - *
> - * @cond the condition to poll for
> - * @func the function to call when the condition happens
> - * @user_data the opaque pointer to pass to @func
> - *
> - * Returns: the source tag
> - */
> -guint qemu_chr_fe_add_watch(CharBackend *be, GIOCondition cond,
> -                            GIOFunc func, void *user_data);
> -
> -/**
> - * @qemu_chr_fe_write:
> - *
> - * Write data to a character backend from the front end.  This function
> - * will send data from the front end to the back end.  This function
> - * is thread-safe.
> - *
> - * @buf the data
> - * @len the number of bytes to send
> - *
> - * Returns: the number of bytes consumed (0 if no assicated Chardev)
> - */
> -int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len);
> -
> -/**
> - * @qemu_chr_fe_write_all:
> - *
> - * Write data to a character backend from the front end.  This function will
> - * send data from the front end to the back end.  Unlike @qemu_chr_fe_write,
> - * this function will block if the back end cannot consume all of the data
> - * attempted to be written.  This function is thread-safe.
> - *
> - * @buf the data
> - * @len the number of bytes to send
> - *
> - * Returns: the number of bytes consumed (0 if no assicated Chardev)
> - */
> -int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len);
> -
> -/**
> - * @qemu_chr_fe_read_all:
> - *
> - * Read data to a buffer from the back end.
> - *
> - * @buf the data buffer
> - * @len the number of bytes to read
> - *
> - * Returns: the number of bytes read (0 if no assicated Chardev)
> - */
> -int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len);
> -
> -/**
> - * @qemu_chr_fe_ioctl:
> - *
> - * Issue a device specific ioctl to a backend.  This function is thread-safe.
> - *
> - * @cmd see CHR_IOCTL_*
> - * @arg the data associated with @cmd
> - *
> - * Returns: if @cmd is not supported by the backend or there is no
> - *          associated Chardev, -ENOTSUP, otherwise the return
> - *          value depends on the semantics of @cmd
> - */
> -int qemu_chr_fe_ioctl(CharBackend *be, int cmd, void *arg);
> -
> -/**
> - * @qemu_chr_fe_get_msgfd:
> - *
> - * For backends capable of fd passing, return the latest file descriptor passed
> - * by a client.
> - *
> - * Returns: -1 if fd passing isn't supported or there is no pending file
> - *          descriptor.  If a file descriptor is returned, subsequent calls to
> - *          this function will return -1 until a client sends a new file
> - *          descriptor.
> - */
> -int qemu_chr_fe_get_msgfd(CharBackend *be);
> -
> -/**
> - * @qemu_chr_fe_get_msgfds:
> - *
> - * For backends capable of fd passing, return the number of file received
> - * descriptors and fills the fds array up to num elements
> - *
> - * Returns: -1 if fd passing isn't supported or there are no pending file
> - *          descriptors.  If file descriptors are returned, subsequent calls to
> - *          this function will return -1 until a client sends a new set of file
> - *          descriptors.
> - */
> -int qemu_chr_fe_get_msgfds(CharBackend *be, int *fds, int num);
> -
> -/**
> - * @qemu_chr_fe_set_msgfds:
> - *
> - * For backends capable of fd passing, set an array of fds to be passed with
> - * the next send operation.
> - * A subsequent call to this function before calling a write function will
> - * result in overwriting the fd array with the new value without being send.
> - * Upon writing the message the fd array is freed.
> - *
> - * Returns: -1 if fd passing isn't supported or no associated Chardev.
> - */
> -int qemu_chr_fe_set_msgfds(CharBackend *be, int *fds, int num);
> -
> -/**
>   * @qemu_chr_be_can_write:
>   *
>   * Determine how much data the front end can currently accept.  This function
> @@ -328,69 +156,6 @@ void qemu_chr_be_write_impl(Chardev *s, uint8_t *buf, int len);
>   */
>  void qemu_chr_be_event(Chardev *s, int event);
>
> -/**
> - * @qemu_chr_fe_init:
> - *
> - * Initializes a front end for the given CharBackend and
> - * Chardev. Call qemu_chr_fe_deinit() to remove the association and
> - * release the driver.
> - *
> - * Returns: false on error.
> - */
> -bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp);
> -
> -/**
> - * @qemu_chr_fe_get_driver:
> - *
> - * Returns the driver associated with a CharBackend or NULL if no
> - * associated Chardev.
> - */
> -Chardev *qemu_chr_fe_get_driver(CharBackend *be);
> -
> -/**
> - * @qemu_chr_fe_deinit:
> - *
> - * Dissociate the CharBackend from the Chardev.
> - *
> - * Safe to call without associated Chardev.
> - */
> -void qemu_chr_fe_deinit(CharBackend *b);
> -
> -/**
> - * @qemu_chr_fe_set_handlers:
> - * @b: a CharBackend
> - * @fd_can_read: callback to get the amount of data the frontend may
> - *               receive
> - * @fd_read: callback to receive data from char
> - * @fd_event: event callback
> - * @opaque: an opaque pointer for the callbacks
> - * @context: a main loop context or NULL for the default
> - * @set_open: whether to call qemu_chr_fe_set_open() implicitely when
> - * any of the handler is non-NULL
> - *
> - * Set the front end char handlers. The front end takes the focus if
> - * any of the handler is non-NULL.
> - *
> - * Without associated Chardev, nothing is changed.
> - */
> -void qemu_chr_fe_set_handlers(CharBackend *b,
> -                              IOCanReadHandler *fd_can_read,
> -                              IOReadHandler *fd_read,
> -                              IOEventHandler *fd_event,
> -                              void *opaque,
> -                              GMainContext *context,
> -                              bool set_open);
> -
> -/**
> - * @qemu_chr_fe_take_focus:
> - *
> - * Take the focus (if the front end is muxed).
> - *
> - * Without associated Chardev, nothing is changed.
> - */
> -void qemu_chr_fe_take_focus(CharBackend *b);
> -
> -void qemu_chr_fe_accept_input(CharBackend *be);
>  int qemu_chr_add_client(Chardev *s, int fd);
>  Chardev *qemu_chr_find(const char *name);
>
> @@ -399,7 +164,8 @@ bool qemu_chr_has_feature(Chardev *chr,
>  void qemu_chr_set_feature(Chardev *chr,
>                            ChardevFeature feature);
>  QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename);
> -int qemu_chr_write_all(Chardev *s, const uint8_t *buf, int len);
> +int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all);
> +#define qemu_chr_write_all(s, buf, len) qemu_chr_write(s, buf, len, true)

(change to move to previous commit?)

>  int qemu_chr_wait_connected(Chardev *chr, Error **errp);
>
>  #define TYPE_CHARDEV "chardev"
> diff --git a/include/hw/char/bcm2835_aux.h b/include/hw/char/bcm2835_aux.h
> index 2a051c5646..cdbf7e3e37 100644
> --- a/include/hw/char/bcm2835_aux.h
> +++ b/include/hw/char/bcm2835_aux.h
> @@ -9,7 +9,7 @@
>  #define BCM2835_AUX_H
>
>  #include "hw/sysbus.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>
>  #define TYPE_BCM2835_AUX "bcm2835-aux"
>  #define BCM2835_AUX(obj) OBJECT_CHECK(BCM2835AuxState, (obj), TYPE_BCM2835_AUX)
> diff --git a/include/hw/char/cadence_uart.h b/include/hw/char/cadence_uart.h
> index eed7d8d358..118e3f10de 100644
> --- a/include/hw/char/cadence_uart.h
> +++ b/include/hw/char/cadence_uart.h
> @@ -19,7 +19,7 @@
>  #ifndef CADENCE_UART_H
>
>  #include "hw/sysbus.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "qemu/timer.h"
>
>  #define CADENCE_UART_RX_FIFO_SIZE           16
> diff --git a/include/hw/char/digic-uart.h b/include/hw/char/digic-uart.h
> index 370b48a6c5..de9a3e3551 100644
> --- a/include/hw/char/digic-uart.h
> +++ b/include/hw/char/digic-uart.h
> @@ -19,7 +19,7 @@
>  #define HW_CHAR_DIGIC_UART_H
>
>  #include "hw/sysbus.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>
>  #define TYPE_DIGIC_UART "digic-uart"
>  #define DIGIC_UART(obj) \
> diff --git a/include/hw/char/imx_serial.h b/include/hw/char/imx_serial.h
> index 05500f5346..baeec3183f 100644
> --- a/include/hw/char/imx_serial.h
> +++ b/include/hw/char/imx_serial.h
> @@ -19,7 +19,7 @@
>  #define IMX_SERIAL_H
>
>  #include "hw/sysbus.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>
>  #define TYPE_IMX_SERIAL "imx.serial"
>  #define IMX_SERIAL(obj) OBJECT_CHECK(IMXSerialState, (obj), TYPE_IMX_SERIAL)
> diff --git a/include/hw/char/serial.h b/include/hw/char/serial.h
> index 01dcd2a8d2..c4daf11a14 100644
> --- a/include/hw/char/serial.h
> +++ b/include/hw/char/serial.h
> @@ -28,7 +28,7 @@
>
>  #include "hw/hw.h"
>  #include "sysemu/sysemu.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "exec/memory.h"
>  #include "qemu/fifo8.h"
>  #include "chardev/char.h"
> diff --git a/include/hw/char/stm32f2xx_usart.h b/include/hw/char/stm32f2xx_usart.h
> index 4259dbeb1e..9d03a7527c 100644
> --- a/include/hw/char/stm32f2xx_usart.h
> +++ b/include/hw/char/stm32f2xx_usart.h
> @@ -26,7 +26,7 @@
>  #define HW_STM32F2XX_USART_H
>
>  #include "hw/sysbus.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "hw/hw.h"
>
>  #define USART_SR   0x00
> diff --git a/backends/rng-egd.c b/backends/rng-egd.c
> index 5448f6e5f5..ad3e1e5edf 100644
> --- a/backends/rng-egd.c
> +++ b/backends/rng-egd.c
> @@ -12,7 +12,7 @@
>
>  #include "qemu/osdep.h"
>  #include "sysemu/rng.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "qapi/error.h"
>  #include "qapi/qmp/qerror.h"
>
> diff --git a/chardev/char-fe.c b/chardev/char-fe.c
> new file mode 100644
> index 0000000000..341221d029
> --- /dev/null
> +++ b/chardev/char-fe.c
> @@ -0,0 +1,358 @@
> +/*
> + * QEMU System Emulator
> + *
> + * Copyright (c) 2003-2008 Fabrice Bellard
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> + * of this software and associated documentation files (the "Software"), to deal
> + * in the Software without restriction, including without limitation the rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +#include "qemu/osdep.h"
> +#include "qemu/error-report.h"
> +#include "qapi/error.h"
> +#include "qapi-visit.h"
> +#include "sysemu/replay.h"
> +
> +#include "chardev/char-fe.h"
> +#include "chardev/char-io.h"
> +#include "chardev/char-mux.h"
> +
> +int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len)
> +{
> +    Chardev *s = be->chr;
> +
> +    if (!s) {
> +        return 0;
> +    }
> +
> +    return qemu_chr_write(s, buf, len, false);
> +}
> +
> +int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len)
> +{
> +    Chardev *s = be->chr;
> +
> +    if (!s) {
> +        return 0;
> +    }
> +
> +    return qemu_chr_write(s, buf, len, true);
> +}
> +
> +int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len)
> +{
> +    Chardev *s = be->chr;
> +    int offset = 0, counter = 10;
> +    int res;
> +
> +    if (!s || !CHARDEV_GET_CLASS(s)->chr_sync_read) {
> +        return 0;
> +    }
> +
> +    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_PLAY) {
> +        return replay_char_read_all_load(buf);
> +    }
> +
> +    while (offset < len) {
> +    retry:
> +        res = CHARDEV_GET_CLASS(s)->chr_sync_read(s, buf + offset,
> +                                                  len - offset);
> +        if (res == -1 && errno == EAGAIN) {
> +            g_usleep(100);
> +            goto retry;
> +        }
> +
> +        if (res == 0) {
> +            break;
> +        }
> +
> +        if (res < 0) {
> +            if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
> +                replay_char_read_all_save_error(res);
> +            }
> +            return res;
> +        }
> +
> +        offset += res;
> +
> +        if (!counter--) {
> +            break;
> +        }
> +    }
> +
> +    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
> +        replay_char_read_all_save_buf(buf, offset);
> +    }
> +    return offset;
> +}
> +
> +int qemu_chr_fe_ioctl(CharBackend *be, int cmd, void *arg)
> +{
> +    Chardev *s = be->chr;
> +    int res;
> +
> +    if (!s || !CHARDEV_GET_CLASS(s)->chr_ioctl || qemu_chr_replay(s)) {
> +        res = -ENOTSUP;
> +    } else {
> +        res = CHARDEV_GET_CLASS(s)->chr_ioctl(s, cmd, arg);
> +    }
> +
> +    return res;
> +}
> +
> +int qemu_chr_fe_get_msgfd(CharBackend *be)
> +{
> +    Chardev *s = be->chr;
> +    int fd;
> +    int res = (qemu_chr_fe_get_msgfds(be, &fd, 1) == 1) ? fd : -1;
> +    if (s && qemu_chr_replay(s)) {
> +        error_report("Replay: get msgfd is not supported "
> +                     "for serial devices yet");
> +        exit(1);
> +    }
> +    return res;
> +}
> +
> +int qemu_chr_fe_get_msgfds(CharBackend *be, int *fds, int len)
> +{
> +    Chardev *s = be->chr;
> +
> +    if (!s) {
> +        return -1;
> +    }
> +
> +    return CHARDEV_GET_CLASS(s)->get_msgfds ?
> +        CHARDEV_GET_CLASS(s)->get_msgfds(s, fds, len) : -1;
> +}
> +
> +int qemu_chr_fe_set_msgfds(CharBackend *be, int *fds, int num)
> +{
> +    Chardev *s = be->chr;
> +
> +    if (!s) {
> +        return -1;
> +    }
> +
> +    return CHARDEV_GET_CLASS(s)->set_msgfds ?
> +        CHARDEV_GET_CLASS(s)->set_msgfds(s, fds, num) : -1;
> +}
> +
> +void qemu_chr_fe_accept_input(CharBackend *be)
> +{
> +    Chardev *s = be->chr;
> +
> +    if (!s) {
> +        return;
> +    }
> +
> +    if (CHARDEV_GET_CLASS(s)->chr_accept_input) {
> +        CHARDEV_GET_CLASS(s)->chr_accept_input(s);
> +    }
> +    qemu_notify_event();
> +}
> +
> +void qemu_chr_fe_printf(CharBackend *be, const char *fmt, ...)
> +{
> +    char buf[CHR_READ_BUF_LEN];
> +    va_list ap;
> +    va_start(ap, fmt);
> +    vsnprintf(buf, sizeof(buf), fmt, ap);
> +    /* XXX this blocks entire thread. Rewrite to use
> +     * qemu_chr_fe_write and background I/O callbacks */
> +    qemu_chr_fe_write_all(be, (uint8_t *)buf, strlen(buf));
> +    va_end(ap);
> +}
> +
> +Chardev *qemu_chr_fe_get_driver(CharBackend *be)
> +{
> +    return be->chr;
> +}
> +
> +bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp)
> +{
> +    int tag = 0;
> +
> +    if (CHARDEV_IS_MUX(s)) {
> +        MuxChardev *d = MUX_CHARDEV(s);
> +
> +        if (d->mux_cnt >= MAX_MUX) {
> +            goto unavailable;
> +        }
> +
> +        d->backends[d->mux_cnt] = b;
> +        tag = d->mux_cnt++;
> +    } else if (s->be) {
> +        goto unavailable;
> +    } else {
> +        s->be = b;
> +    }
> +
> +    b->fe_open = false;
> +    b->tag = tag;
> +    b->chr = s;
> +    return true;
> +
> +unavailable:
> +    error_setg(errp, QERR_DEVICE_IN_USE, s->label);
> +    return false;
> +}
> +
> +void qemu_chr_fe_deinit(CharBackend *b)
> +{
> +    assert(b);
> +
> +    if (b->chr) {
> +        qemu_chr_fe_set_handlers(b, NULL, NULL, NULL, NULL, NULL, true);
> +        if (b->chr->be == b) {
> +            b->chr->be = NULL;
> +        }
> +        if (CHARDEV_IS_MUX(b->chr)) {
> +            MuxChardev *d = MUX_CHARDEV(b->chr);
> +            d->backends[b->tag] = NULL;
> +        }
> +        b->chr = NULL;
> +    }
> +}
> +
> +void qemu_chr_fe_set_handlers(CharBackend *b,
> +                              IOCanReadHandler *fd_can_read,
> +                              IOReadHandler *fd_read,
> +                              IOEventHandler *fd_event,
> +                              void *opaque,
> +                              GMainContext *context,
> +                              bool set_open)
> +{
> +    Chardev *s;
> +    ChardevClass *cc;
> +    int fe_open;
> +
> +    s = b->chr;
> +    if (!s) {
> +        return;
> +    }
> +
> +    cc = CHARDEV_GET_CLASS(s);
> +    if (!opaque && !fd_can_read && !fd_read && !fd_event) {
> +        fe_open = 0;
> +        remove_fd_in_watch(s);
> +    } else {
> +        fe_open = 1;
> +    }
> +    b->chr_can_read = fd_can_read;
> +    b->chr_read = fd_read;
> +    b->chr_event = fd_event;
> +    b->opaque = opaque;
> +    if (cc->chr_update_read_handler) {
> +        cc->chr_update_read_handler(s, context);
> +    }
> +
> +    if (set_open) {
> +        qemu_chr_fe_set_open(b, fe_open);
> +    }
> +
> +    if (fe_open) {
> +        qemu_chr_fe_take_focus(b);
> +        /* We're connecting to an already opened device, so let's make sure we
> +           also get the open event */
> +        if (s->be_open) {
> +            qemu_chr_be_event(s, CHR_EVENT_OPENED);
> +        }
> +    }
> +
> +    if (CHARDEV_IS_MUX(s)) {
> +        mux_chr_set_handlers(s, context);
> +    }
> +}
> +
> +void qemu_chr_fe_take_focus(CharBackend *b)
> +{
> +    if (!b->chr) {
> +        return;
> +    }
> +
> +    if (CHARDEV_IS_MUX(b->chr)) {
> +        mux_set_focus(b->chr, b->tag);
> +    }
> +}
> +
> +int qemu_chr_fe_wait_connected(CharBackend *be, Error **errp)
> +{
> +    if (!be->chr) {
> +        error_setg(errp, "missing associated backend");
> +        return -1;
> +    }
> +
> +    return qemu_chr_wait_connected(be->chr, errp);
> +}
> +
> +void qemu_chr_fe_set_echo(CharBackend *be, bool echo)
> +{
> +    Chardev *chr = be->chr;
> +
> +    if (chr && CHARDEV_GET_CLASS(chr)->chr_set_echo) {
> +        CHARDEV_GET_CLASS(chr)->chr_set_echo(chr, echo);
> +    }
> +}
> +
> +void qemu_chr_fe_set_open(CharBackend *be, int fe_open)
> +{
> +    Chardev *chr = be->chr;
> +
> +    if (!chr) {
> +        return;
> +    }
> +
> +    if (be->fe_open == fe_open) {
> +        return;
> +    }
> +    be->fe_open = fe_open;
> +    if (CHARDEV_GET_CLASS(chr)->chr_set_fe_open) {
> +        CHARDEV_GET_CLASS(chr)->chr_set_fe_open(chr, fe_open);
> +    }
> +}
> +
> +guint qemu_chr_fe_add_watch(CharBackend *be, GIOCondition cond,
> +                            GIOFunc func, void *user_data)
> +{
> +    Chardev *s = be->chr;
> +    GSource *src;
> +    guint tag;
> +
> +    if (!s || CHARDEV_GET_CLASS(s)->chr_add_watch == NULL) {
> +        return 0;
> +    }
> +
> +    src = CHARDEV_GET_CLASS(s)->chr_add_watch(s, cond);
> +    if (!src) {
> +        return 0;
> +    }
> +
> +    g_source_set_callback(src, (GSourceFunc)func, user_data, NULL);
> +    tag = g_source_attach(src, NULL);
> +    g_source_unref(src);
> +
> +    return tag;
> +}
> +
> +void qemu_chr_fe_disconnect(CharBackend *be)
> +{
> +    Chardev *chr = be->chr;
> +
> +    if (chr && CHARDEV_GET_CLASS(chr)->chr_disconnect) {
> +        CHARDEV_GET_CLASS(chr)->chr_disconnect(chr);
> +    }
> +}
> diff --git a/chardev/char.c b/chardev/char.c
> index 9a7c70c7aa..3d5316166e 100644
> --- a/chardev/char.c
> +++ b/chardev/char.c
> @@ -22,7 +22,6 @@
>   * THE SOFTWARE.
>   */
>  #include "qemu/osdep.h"
> -#include "qemu-common.h"
>  #include "qemu/cutils.h"
>  #include "monitor/monitor.h"
>  #include "sysemu/sysemu.h"
> @@ -35,9 +34,6 @@
>  #include "qemu/help_option.h"
>
>  #include "chardev/char-mux.h"
> -#include "chardev/char-io.h"
> -#include "chardev/char-parallel.h"
> -#include "chardev/char-serial.h"
>
>  /***********************************************************/
>  /* character device */
> @@ -129,13 +125,7 @@ static int qemu_chr_fe_write_buffer(Chardev *s,
>      return res;
>  }
>
> -static bool qemu_chr_replay(Chardev *chr)
> -{
> -    return qemu_chr_has_feature(chr, QEMU_CHAR_FEATURE_REPLAY);
> -}
> -
> -static int qemu_chr_write(Chardev *s, const uint8_t *buf, int len,
> -                          bool write_all)
> +int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all)
>  {
>      int offset = 0;
>      int res;
> @@ -159,94 +149,6 @@ static int qemu_chr_write(Chardev *s, const uint8_t *buf, int len,
>      return offset;
>  }
>
> -int qemu_chr_write_all(Chardev *s, const uint8_t *buf, int len)
> -{
> -    return qemu_chr_write(s, buf, len, true);
> -}
> -
> -int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len)
> -{
> -    Chardev *s = be->chr;
> -
> -    if (!s) {
> -        return 0;
> -    }
> -
> -    return qemu_chr_write(s, buf, len, false);
> -}
> -
> -int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len)
> -{
> -    Chardev *s = be->chr;
> -
> -    if (!s) {
> -        return 0;
> -    }
> -
> -    return qemu_chr_write(s, buf, len, true);
> -}
> -
> -int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len)
> -{
> -    Chardev *s = be->chr;
> -    int offset = 0, counter = 10;
> -    int res;
> -
> -    if (!s || !CHARDEV_GET_CLASS(s)->chr_sync_read) {
> -        return 0;
> -    }
> -
> -    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_PLAY) {
> -        return replay_char_read_all_load(buf);
> -    }
> -
> -    while (offset < len) {
> -    retry:
> -        res = CHARDEV_GET_CLASS(s)->chr_sync_read(s, buf + offset,
> -                                                  len - offset);
> -        if (res == -1 && errno == EAGAIN) {
> -            g_usleep(100);
> -            goto retry;
> -        }
> -
> -        if (res == 0) {
> -            break;
> -        }
> -
> -        if (res < 0) {
> -            if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
> -                replay_char_read_all_save_error(res);
> -            }
> -            return res;
> -        }
> -
> -        offset += res;
> -
> -        if (!counter--) {
> -            break;
> -        }
> -    }
> -
> -    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
> -        replay_char_read_all_save_buf(buf, offset);
> -    }
> -    return offset;
> -}
> -
> -int qemu_chr_fe_ioctl(CharBackend *be, int cmd, void *arg)
> -{
> -    Chardev *s = be->chr;
> -    int res;
> -
> -    if (!s || !CHARDEV_GET_CLASS(s)->chr_ioctl || qemu_chr_replay(s)) {
> -        res = -ENOTSUP;
> -    } else {
> -        res = CHARDEV_GET_CLASS(s)->chr_ioctl(s, cmd, arg);
> -    }
> -
> -    return res;
> -}
> -
>  int qemu_chr_be_can_write(Chardev *s)
>  {
>      CharBackend *be = s->be;
> @@ -279,75 +181,12 @@ void qemu_chr_be_write(Chardev *s, uint8_t *buf, int len)
>      }
>  }
>
> -int qemu_chr_fe_get_msgfd(CharBackend *be)
> -{
> -    Chardev *s = be->chr;
> -    int fd;
> -    int res = (qemu_chr_fe_get_msgfds(be, &fd, 1) == 1) ? fd : -1;
> -    if (s && qemu_chr_replay(s)) {
> -        error_report("Replay: get msgfd is not supported "
> -                     "for serial devices yet");
> -        exit(1);
> -    }
> -    return res;
> -}
> -
> -int qemu_chr_fe_get_msgfds(CharBackend *be, int *fds, int len)
> -{
> -    Chardev *s = be->chr;
> -
> -    if (!s) {
> -        return -1;
> -    }
> -
> -    return CHARDEV_GET_CLASS(s)->get_msgfds ?
> -        CHARDEV_GET_CLASS(s)->get_msgfds(s, fds, len) : -1;
> -}
> -
> -int qemu_chr_fe_set_msgfds(CharBackend *be, int *fds, int num)
> -{
> -    Chardev *s = be->chr;
> -
> -    if (!s) {
> -        return -1;
> -    }
> -
> -    return CHARDEV_GET_CLASS(s)->set_msgfds ?
> -        CHARDEV_GET_CLASS(s)->set_msgfds(s, fds, num) : -1;
> -}
> -
>  int qemu_chr_add_client(Chardev *s, int fd)
>  {
>      return CHARDEV_GET_CLASS(s)->chr_add_client ?
>          CHARDEV_GET_CLASS(s)->chr_add_client(s, fd) : -1;
>  }
>
> -void qemu_chr_fe_accept_input(CharBackend *be)
> -{
> -    Chardev *s = be->chr;
> -
> -    if (!s) {
> -        return;
> -    }
> -
> -    if (CHARDEV_GET_CLASS(s)->chr_accept_input) {
> -        CHARDEV_GET_CLASS(s)->chr_accept_input(s);
> -    }
> -    qemu_notify_event();
> -}
> -
> -void qemu_chr_fe_printf(CharBackend *be, const char *fmt, ...)
> -{
> -    char buf[CHR_READ_BUF_LEN];
> -    va_list ap;
> -    va_start(ap, fmt);
> -    vsnprintf(buf, sizeof(buf), fmt, ap);
> -    /* XXX this blocks entire thread. Rewrite to use
> -     * qemu_chr_fe_write and background I/O callbacks */
> -    qemu_chr_fe_write_all(be, (uint8_t *)buf, strlen(buf));
> -    va_end(ap);
> -}
> -
>  static void qemu_char_open(Chardev *chr, ChardevBackend *backend,
>                             bool *be_opened, Error **errp)
>  {
> @@ -459,40 +298,6 @@ static Notifier muxes_realize_notify = {
>      .notify = muxes_realize_done,
>  };
>
> -Chardev *qemu_chr_fe_get_driver(CharBackend *be)
> -{
> -    return be->chr;
> -}
> -
> -bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp)
> -{
> -    int tag = 0;
> -
> -    if (CHARDEV_IS_MUX(s)) {
> -        MuxChardev *d = MUX_CHARDEV(s);
> -
> -        if (d->mux_cnt >= MAX_MUX) {
> -            goto unavailable;
> -        }
> -
> -        d->backends[d->mux_cnt] = b;
> -        tag = d->mux_cnt++;
> -    } else if (s->be) {
> -        goto unavailable;
> -    } else {
> -        s->be = b;
> -    }
> -
> -    b->fe_open = false;
> -    b->tag = tag;
> -    b->chr = s;
> -    return true;
> -
> -unavailable:
> -    error_setg(errp, QERR_DEVICE_IN_USE, s->label);
> -    return false;
> -}
> -
>  static bool qemu_chr_is_busy(Chardev *s)
>  {
>      if (CHARDEV_IS_MUX(s)) {
> @@ -503,84 +308,6 @@ static bool qemu_chr_is_busy(Chardev *s)
>      }
>  }
>
> -void qemu_chr_fe_deinit(CharBackend *b)
> -{
> -    assert(b);
> -
> -    if (b->chr) {
> -        qemu_chr_fe_set_handlers(b, NULL, NULL, NULL, NULL, NULL, true);
> -        if (b->chr->be == b) {
> -            b->chr->be = NULL;
> -        }
> -        if (CHARDEV_IS_MUX(b->chr)) {
> -            MuxChardev *d = MUX_CHARDEV(b->chr);
> -            d->backends[b->tag] = NULL;
> -        }
> -        b->chr = NULL;
> -    }
> -}
> -
> -void qemu_chr_fe_set_handlers(CharBackend *b,
> -                              IOCanReadHandler *fd_can_read,
> -                              IOReadHandler *fd_read,
> -                              IOEventHandler *fd_event,
> -                              void *opaque,
> -                              GMainContext *context,
> -                              bool set_open)
> -{
> -    Chardev *s;
> -    ChardevClass *cc;
> -    int fe_open;
> -
> -    s = b->chr;
> -    if (!s) {
> -        return;
> -    }
> -
> -    cc = CHARDEV_GET_CLASS(s);
> -    if (!opaque && !fd_can_read && !fd_read && !fd_event) {
> -        fe_open = 0;
> -        remove_fd_in_watch(s);
> -    } else {
> -        fe_open = 1;
> -    }
> -    b->chr_can_read = fd_can_read;
> -    b->chr_read = fd_read;
> -    b->chr_event = fd_event;
> -    b->opaque = opaque;
> -    if (cc->chr_update_read_handler) {
> -        cc->chr_update_read_handler(s, context);
> -    }
> -
> -    if (set_open) {
> -        qemu_chr_fe_set_open(b, fe_open);
> -    }
> -
> -    if (fe_open) {
> -        qemu_chr_fe_take_focus(b);
> -        /* We're connecting to an already opened device, so let's make sure we
> -           also get the open event */
> -        if (s->be_open) {
> -            qemu_chr_be_event(s, CHR_EVENT_OPENED);
> -        }
> -    }
> -
> -    if (CHARDEV_IS_MUX(s)) {
> -        mux_chr_set_handlers(s, context);
> -    }
> -}
> -
> -void qemu_chr_fe_take_focus(CharBackend *b)
> -{
> -    if (!b->chr) {
> -        return;
> -    }
> -
> -    if (CHARDEV_IS_MUX(b->chr)) {
> -        mux_set_focus(b->chr, b->tag);
> -    }
> -}
> -
>  int qemu_chr_wait_connected(Chardev *chr, Error **errp)
>  {
>      ChardevClass *cc = CHARDEV_GET_CLASS(chr);
> @@ -592,16 +319,6 @@ int qemu_chr_wait_connected(Chardev *chr, Error **errp)
>      return 0;
>  }
>
> -int qemu_chr_fe_wait_connected(CharBackend *be, Error **errp)
> -{
> -    if (!be->chr) {
> -        error_setg(errp, "missing associated backend");
> -        return -1;
> -    }
> -
> -    return qemu_chr_wait_connected(be->chr, errp);
> -}
> -
>  QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename)
>  {
>      char host[65], port[33], width[8], height[8];
> @@ -978,64 +695,6 @@ Chardev *qemu_chr_new(const char *label, const char *filename)
>      return chr;
>  }
>
> -void qemu_chr_fe_set_echo(CharBackend *be, bool echo)
> -{
> -    Chardev *chr = be->chr;
> -
> -    if (chr && CHARDEV_GET_CLASS(chr)->chr_set_echo) {
> -        CHARDEV_GET_CLASS(chr)->chr_set_echo(chr, echo);
> -    }
> -}
> -
> -void qemu_chr_fe_set_open(CharBackend *be, int fe_open)
> -{
> -    Chardev *chr = be->chr;
> -
> -    if (!chr) {
> -        return;
> -    }
> -
> -    if (be->fe_open == fe_open) {
> -        return;
> -    }
> -    be->fe_open = fe_open;
> -    if (CHARDEV_GET_CLASS(chr)->chr_set_fe_open) {
> -        CHARDEV_GET_CLASS(chr)->chr_set_fe_open(chr, fe_open);
> -    }
> -}
> -
> -guint qemu_chr_fe_add_watch(CharBackend *be, GIOCondition cond,
> -                            GIOFunc func, void *user_data)
> -{
> -    Chardev *s = be->chr;
> -    GSource *src;
> -    guint tag;
> -
> -    if (!s || CHARDEV_GET_CLASS(s)->chr_add_watch == NULL) {
> -        return 0;
> -    }
> -
> -    src = CHARDEV_GET_CLASS(s)->chr_add_watch(s, cond);
> -    if (!src) {
> -        return 0;
> -    }
> -
> -    g_source_set_callback(src, (GSourceFunc)func, user_data, NULL);
> -    tag = g_source_attach(src, NULL);
> -    g_source_unref(src);
> -
> -    return tag;
> -}
> -
> -void qemu_chr_fe_disconnect(CharBackend *be)
> -{
> -    Chardev *chr = be->chr;
> -
> -    if (chr && CHARDEV_GET_CLASS(chr)->chr_disconnect) {
> -        CHARDEV_GET_CLASS(chr)->chr_disconnect(chr);
> -    }
> -}
> -
>  static int qmp_query_chardev_foreach(Object *obj, void *data)
>  {
>      Chardev *chr = CHARDEV(obj);
> diff --git a/gdbstub.c b/gdbstub.c
> index 6515c635dc..4251d23898 100644
> --- a/gdbstub.c
> +++ b/gdbstub.c
> @@ -26,6 +26,7 @@
>  #else
>  #include "monitor/monitor.h"
>  #include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "sysemu/sysemu.h"
>  #include "exec/gdbstub.h"
>  #endif
> diff --git a/hw/arm/omap2.c b/hw/arm/omap2.c
> index 566749a9eb..4b4c024693 100644
> --- a/hw/arm/omap2.c
> +++ b/hw/arm/omap2.c
> @@ -30,7 +30,7 @@
>  #include "hw/arm/omap.h"
>  #include "sysemu/sysemu.h"
>  #include "qemu/timer.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "hw/block/flash.h"
>  #include "hw/arm/soc_dma.h"
>  #include "hw/sysbus.h"
> diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
> index 0d43cc707c..629e6c64e6 100644
> --- a/hw/arm/pxa2xx.c
> +++ b/hw/arm/pxa2xx.c
> @@ -17,7 +17,7 @@
>  #include "hw/char/serial.h"
>  #include "hw/i2c/i2c.h"
>  #include "hw/ssi/ssi.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "qemu/cutils.h"
> diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c
> index 967caea749..7683edc9e5 100644
> --- a/hw/arm/strongarm.c
> +++ b/hw/arm/strongarm.c
> @@ -34,6 +34,7 @@
>  #include "strongarm.h"
>  #include "qemu/error-report.h"
>  #include "hw/arm/arm.h"
> +#include "chardev/char-fe.h"
>  #include "chardev/char-serial.h"
>  #include "sysemu/sysemu.h"
>  #include "hw/ssi/ssi.h"
> diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
> index 4bfc185376..4a2c124104 100644
> --- a/hw/char/cadence_uart.c
> +++ b/hw/char/cadence_uart.c
> @@ -23,6 +23,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/sysbus.h"
> +#include "chardev/char-fe.h"
>  #include "chardev/char-serial.h"
>  #include "qemu/timer.h"
>  #include "qemu/log.h"
> diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c
> index 77d91c8558..762e3d8ada 100644
> --- a/hw/char/debugcon.c
> +++ b/hw/char/debugcon.c
> @@ -27,7 +27,7 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
>  #include "hw/hw.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "hw/isa/isa.h"
>  #include "hw/i386/pc.h"
>
> diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c
> index 4f1dec7f1d..34306e11ff 100644
> --- a/hw/char/digic-uart.c
> +++ b/hw/char/digic-uart.c
> @@ -29,7 +29,7 @@
>  #include "qemu/osdep.h"
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "qemu/log.h"
>
>  #include "hw/char/digic-uart.h"
> diff --git a/hw/char/escc.c b/hw/char/escc.c
> index 81d792cb47..3f787632c7 100644
> --- a/hw/char/escc.c
> +++ b/hw/char/escc.c
> @@ -26,6 +26,7 @@
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
>  #include "hw/char/escc.h"
> +#include "chardev/char-fe.h"
>  #include "chardev/char-serial.h"
>  #include "ui/console.h"
>  #include "ui/input.h"
> diff --git a/hw/char/etraxfs_ser.c b/hw/char/etraxfs_ser.c
> index 33e3e16397..c1fba9f50f 100644
> --- a/hw/char/etraxfs_ser.c
> +++ b/hw/char/etraxfs_ser.c
> @@ -24,7 +24,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/sysbus.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "qemu/log.h"
>
>  #define D(x)
> diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c
> index d93125645a..b51d44a321 100644
> --- a/hw/char/exynos4210_uart.c
> +++ b/hw/char/exynos4210_uart.c
> @@ -23,6 +23,7 @@
>  #include "hw/sysbus.h"
>  #include "qemu/error-report.h"
>  #include "sysemu/sysemu.h"
> +#include "chardev/char-fe.h"
>  #include "chardev/char-serial.h"
>
>  #include "hw/arm/exynos4210.h"
> diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c
> index 39d1133c61..32d98edf49 100644
> --- a/hw/char/grlib_apbuart.c
> +++ b/hw/char/grlib_apbuart.c
> @@ -24,7 +24,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/sysbus.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>
>  #include "trace.h"
>
> diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c
> index b8a3c92c9e..337a3e566a 100644
> --- a/hw/char/ipoctal232.c
> +++ b/hw/char/ipoctal232.c
> @@ -11,7 +11,7 @@
>  #include "qemu/osdep.h"
>  #include "hw/ipack/ipack.h"
>  #include "qemu/bitops.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>
>  /* #define DEBUG_IPOCTAL */
>
> diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c
> index 6b0633e518..3948dcd332 100644
> --- a/hw/char/lm32_juart.c
> +++ b/hw/char/lm32_juart.c
> @@ -21,7 +21,7 @@
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
>  #include "trace.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>
>  #include "hw/char/lm32_juart.h"
>
> diff --git a/hw/char/lm32_uart.c b/hw/char/lm32_uart.c
> index a7610c28ce..cff8c38f90 100644
> --- a/hw/char/lm32_uart.c
> +++ b/hw/char/lm32_uart.c
> @@ -26,7 +26,7 @@
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
>  #include "trace.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "qemu/error-report.h"
>
>  enum {
> diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c
> index b639b53c83..fe12ad5ccb 100644
> --- a/hw/char/mcf_uart.c
> +++ b/hw/char/mcf_uart.c
> @@ -9,7 +9,7 @@
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
>  #include "hw/m68k/mcf.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "exec/address-spaces.h"
>  #include "qapi/error.h"
>
> diff --git a/hw/char/milkymist-uart.c b/hw/char/milkymist-uart.c
> index 5ef847c5eb..e19d0f6520 100644
> --- a/hw/char/milkymist-uart.c
> +++ b/hw/char/milkymist-uart.c
> @@ -25,7 +25,7 @@
>  #include "hw/hw.h"
>  #include "hw/sysbus.h"
>  #include "trace.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "qemu/error-report.h"
>
>  enum {
> diff --git a/hw/char/parallel.c b/hw/char/parallel.c
> index 1d6c6e9f33..75a1a2f55e 100644
> --- a/hw/char/parallel.c
> +++ b/hw/char/parallel.c
> @@ -26,6 +26,7 @@
>  #include "qapi/error.h"
>  #include "hw/hw.h"
>  #include "chardev/char-parallel.h"
> +#include "chardev/char-fe.h"
>  #include "hw/isa/isa.h"
>  #include "hw/i386/pc.h"
>  #include "sysemu/sysemu.h"
> diff --git a/hw/char/pl011.c b/hw/char/pl011.c
> index 1757035bb3..33802f00c8 100644
> --- a/hw/char/pl011.c
> +++ b/hw/char/pl011.c
> @@ -9,7 +9,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/sysbus.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "qemu/log.h"
>  #include "trace.h"
>
> diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c
> index 755d514188..1b15046690 100644
> --- a/hw/char/sclpconsole-lm.c
> +++ b/hw/char/sclpconsole-lm.c
> @@ -17,7 +17,7 @@
>  #include "hw/qdev.h"
>  #include "qemu/thread.h"
>  #include "qemu/error-report.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>
>  #include "hw/s390x/sclp.h"
>  #include "hw/s390x/event-facility.h"
> diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c
> index 0fd3cb4887..4a107a268d 100644
> --- a/hw/char/sclpconsole.c
> +++ b/hw/char/sclpconsole.c
> @@ -19,7 +19,7 @@
>
>  #include "hw/s390x/sclp.h"
>  #include "hw/s390x/event-facility.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>
>  typedef struct ASCIIConsoleData {
>      EventBufferHeader ebh;
> diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c
> index 80c7696d8d..ca9816d045 100644
> --- a/hw/char/sh_serial.c
> +++ b/hw/char/sh_serial.c
> @@ -27,7 +27,7 @@
>  #include "qemu/osdep.h"
>  #include "hw/hw.h"
>  #include "hw/sh4/sh.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "exec/address-spaces.h"
>  #include "qapi/error.h"
>
> diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c
> index 2317e45404..8f02f3a612 100644
> --- a/hw/char/spapr_vty.c
> +++ b/hw/char/spapr_vty.c
> @@ -4,7 +4,7 @@
>  #include "qemu-common.h"
>  #include "cpu.h"
>  #include "hw/qdev.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "hw/ppc/spapr.h"
>  #include "hw/ppc/spapr_vio.h"
>
> diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c
> index c043104185..7b10a04f18 100644
> --- a/hw/char/terminal3270.c
> +++ b/hw/char/terminal3270.c
> @@ -13,7 +13,7 @@
>
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "hw/s390x/3270-ccw.h"
>
>  /* Enough spaces for different window sizes. */
> diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c
> index 8418db6a07..0cb1668c8a 100644
> --- a/hw/char/virtio-console.c
> +++ b/hw/char/virtio-console.c
> @@ -11,7 +11,7 @@
>   */
>
>  #include "qemu/osdep.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "qemu/error-report.h"
>  #include "trace.h"
>  #include "hw/virtio/virtio-serial.h"
> diff --git a/hw/char/xen_console.c b/hw/char/xen_console.c
> index 1cdbe59f8a..cb849c2e3e 100644
> --- a/hw/char/xen_console.c
> +++ b/hw/char/xen_console.c
> @@ -25,7 +25,7 @@
>
>  #include "qapi/error.h"
>  #include "hw/hw.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "hw/xen/xen_backend.h"
>  #include "qapi/error.h"
>
> diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c
> index bcebdae3da..71ed2fc1be 100644
> --- a/hw/char/xilinx_uartlite.c
> +++ b/hw/char/xilinx_uartlite.c
> @@ -24,7 +24,7 @@
>
>  #include "qemu/osdep.h"
>  #include "hw/sysbus.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>
>  #define DUART(x)
>
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index 4da0c6a24e..a549d39030 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -20,7 +20,7 @@
>  #include "hw/block/block.h"
>  #include "net/hub.h"
>  #include "qapi/visitor.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "sysemu/iothread.h"
>
>  static void get_pointer(Object *obj, Visitor *v, Property *prop,
> diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c
> index 35285383fd..329b03e17f 100644
> --- a/hw/ipmi/ipmi_bmc_extern.c
> +++ b/hw/ipmi/ipmi_bmc_extern.c
> @@ -30,7 +30,7 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
>  #include "qemu/timer.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "sysemu/sysemu.h"
>  #include "hw/ipmi/ipmi.h"
>
> diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> index cd064dcf8c..6367d041f0 100644
> --- a/hw/misc/ivshmem.c
> +++ b/hw/misc/ivshmem.c
> @@ -29,7 +29,7 @@
>  #include "qemu/error-report.h"
>  #include "qemu/event_notifier.h"
>  #include "qom/object_interfaces.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "sysemu/hostmem.h"
>  #include "sysemu/qtest.h"
>  #include "qapi/visitor.h"
> diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
> index c2096b25ab..fed3683a50 100644
> --- a/hw/usb/ccid-card-passthru.c
> +++ b/hw/usb/ccid-card-passthru.c
> @@ -9,7 +9,7 @@
>   */
>
>  #include "qemu/osdep.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "qemu/error-report.h"
>  #include "qemu/sockets.h"
>  #include "ccid.h"
> diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
> index a145c919e9..17d650f35a 100644
> --- a/hw/usb/dev-serial.c
> +++ b/hw/usb/dev-serial.c
> @@ -16,6 +16,7 @@
>  #include "hw/usb.h"
>  #include "hw/usb/desc.h"
>  #include "chardev/char-serial.h"
> +#include "chardev/char-fe.h"
>
>  //#define DEBUG_Serial
>
> diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
> index c862c1adea..d2b3a84a03 100644
> --- a/hw/usb/redirect.c
> +++ b/hw/usb/redirect.c
> @@ -33,7 +33,7 @@
>  #include "qapi/qmp/qerror.h"
>  #include "qemu/error-report.h"
>  #include "qemu/iov.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>
>  #include <usbredirparser.h>
>  #include <usbredirfilter.h>
> diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
> index ff4cee82e6..e60a7a1cfe 100644
> --- a/hw/virtio/vhost-user.c
> +++ b/hw/virtio/vhost-user.c
> @@ -13,7 +13,7 @@
>  #include "hw/virtio/vhost.h"
>  #include "hw/virtio/vhost-backend.h"
>  #include "hw/virtio/virtio-net.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "sysemu/kvm.h"
>  #include "qemu/error-report.h"
>  #include "qemu/sockets.h"
> diff --git a/monitor.c b/monitor.c
> index 29b71ff2bc..37f8d5645f 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -35,7 +35,7 @@
>  #include "exec/gdbstub.h"
>  #include "net/net.h"
>  #include "net/slirp.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "ui/qemu-spice.h"
>  #include "sysemu/numa.h"
>  #include "monitor/monitor.h"
> diff --git a/net/colo-compare.c b/net/colo-compare.c
> index 619335d5e8..2fb75bcca4 100644
> --- a/net/colo-compare.c
> +++ b/net/colo-compare.c
> @@ -25,7 +25,7 @@
>  #include "qom/object.h"
>  #include "qemu/typedefs.h"
>  #include "net/queue.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "qemu/sockets.h"
>  #include "qapi-visit.h"
>  #include "net/colo.h"
> diff --git a/net/filter-mirror.c b/net/filter-mirror.c
> index 7adc2c10d2..a20330475c 100644
> --- a/net/filter-mirror.c
> +++ b/net/filter-mirror.c
> @@ -20,7 +20,7 @@
>  #include "qemu/main-loop.h"
>  #include "qemu/error-report.h"
>  #include "trace.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "qemu/iov.h"
>  #include "qemu/sockets.h"
>
> diff --git a/net/slirp.c b/net/slirp.c
> index af3e8b22ac..6a6d727999 100644
> --- a/net/slirp.c
> +++ b/net/slirp.c
> @@ -37,7 +37,7 @@
>  #include "qemu/sockets.h"
>  #include "slirp/libslirp.h"
>  #include "slirp/ip6.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "sysemu/sysemu.h"
>  #include "qemu/cutils.h"
>  #include "qapi/error.h"
> diff --git a/net/vhost-user.c b/net/vhost-user.c
> index 77d2ce22a6..526290d8c1 100644
> --- a/net/vhost-user.c
> +++ b/net/vhost-user.c
> @@ -12,7 +12,7 @@
>  #include "clients.h"
>  #include "net/vhost_net.h"
>  #include "net/vhost-user.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "qemu/config-file.h"
>  #include "qemu/error-report.h"
>  #include "qmp-commands.h"
> diff --git a/qtest.c b/qtest.c
> index dbf70a7018..9a5d1dc50d 100644
> --- a/qtest.c
> +++ b/qtest.c
> @@ -17,7 +17,7 @@
>  #include "cpu.h"
>  #include "sysemu/qtest.h"
>  #include "hw/qdev.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "exec/ioport.h"
>  #include "exec/memory.h"
>  #include "hw/irq.h"
> diff --git a/slirp/slirp.c b/slirp/slirp.c
> index 3b92cb54ce..e79345bdfc 100644
> --- a/slirp/slirp.c
> +++ b/slirp/slirp.c
> @@ -25,7 +25,7 @@
>  #include "qemu-common.h"
>  #include "qemu/timer.h"
>  #include "qemu/error-report.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "slirp.h"
>  #include "hw/hw.h"
>  #include "qemu/cutils.h"
> diff --git a/tests/test-char.c b/tests/test-char.c
> index 9340c55058..d7ecf1056a 100644
> --- a/tests/test-char.c
> +++ b/tests/test-char.c
> @@ -4,7 +4,7 @@
>  #include "qemu-common.h"
>  #include "qemu/config-file.h"
>  #include "qemu/sockets.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "sysemu/sysemu.h"
>  #include "qapi/error.h"
>  #include "qom/qom-qobject.h"
> diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
> index acc392d046..4ca11ae28d 100644
> --- a/tests/vhost-user-test.c
> +++ b/tests/vhost-user-test.c
> @@ -16,7 +16,7 @@
>  #include "qemu/option.h"
>  #include "qemu/range.h"
>  #include "qemu/sockets.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "sysemu/sysemu.h"
>  #include "libqos/libqos.h"
>  #include "libqos/pci-pc.h"
> diff --git a/ui/console.c b/ui/console.c
> index 6cf795a23d..d914cced53 100644
> --- a/ui/console.c
> +++ b/ui/console.c
> @@ -27,7 +27,7 @@
>  #include "hw/qdev-core.h"
>  #include "qemu/timer.h"
>  #include "qmp-commands.h"
> -#include "chardev/char.h"
> +#include "chardev/char-fe.h"
>  #include "trace.h"
>  #include "exec/memory.h"
>
> diff --git a/chardev/Makefile.objs b/chardev/Makefile.objs
> index 1feda0f0ed..e0b37dbfd8 100644
> --- a/chardev/Makefile.objs
> +++ b/chardev/Makefile.objs
> @@ -1,6 +1,7 @@
>  chardev-obj-y += char.o
>  chardev-obj-$(CONFIG_WIN32) += char-console.o
>  chardev-obj-$(CONFIG_POSIX) += char-fd.o
> +chardev-obj-y += char-fe.o
>  chardev-obj-y += char-file.o
>  chardev-obj-y += char-io.o
>  chardev-obj-y += char-mux.o

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 14/14] char: move char devices to chardev/
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 14/14] char: move char devices to chardev/ Marc-André Lureau
@ 2017-05-29 21:31   ` Philippe Mathieu-Daudé
  2017-05-30 15:18     ` Eric Blake
  0 siblings, 1 reply; 33+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-05-29 21:31 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: pbonzini

On 05/29/2017 05:45 AM, Marc-André Lureau wrote:
> Suggested by Paolo Bonizini during series review.

Bonzini ;) "serie" singular

> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
>  {backends => chardev}/baum.c         |  0
>  {backends => chardev}/msmouse.c      |  0
>  spice-qemu-char.c => chardev/spice.c |  2 +-
>  {backends => chardev}/testdev.c      |  0
>  {backends => chardev}/wctablet.c     |  0
>  MAINTAINERS                          |  4 +---
>  Makefile.objs                        |  4 ++--
>  backends/Makefile.objs               |  4 ----
>  backends/trace-events                | 10 ----------
>  chardev/Makefile.objs                |  6 ++++++
>  chardev/trace-events                 | 18 ++++++++++++++++++
>  trace-events                         |  7 -------
>  12 files changed, 28 insertions(+), 27 deletions(-)
>  rename {backends => chardev}/baum.c (100%)
>  rename {backends => chardev}/msmouse.c (100%)
>  rename spice-qemu-char.c => chardev/spice.c (99%)
>  rename {backends => chardev}/testdev.c (100%)
>  rename {backends => chardev}/wctablet.c (100%)
>  create mode 100644 chardev/trace-events
>
> diff --git a/backends/baum.c b/chardev/baum.c
> similarity index 100%
> rename from backends/baum.c
> rename to chardev/baum.c
> diff --git a/backends/msmouse.c b/chardev/msmouse.c
> similarity index 100%
> rename from backends/msmouse.c
> rename to chardev/msmouse.c
> diff --git a/spice-qemu-char.c b/chardev/spice.c
> similarity index 99%
> rename from spice-qemu-char.c
> rename to chardev/spice.c
> index 1c6c2e3969..a312078812 100644
> --- a/spice-qemu-char.c
> +++ b/chardev/spice.c
> @@ -1,5 +1,5 @@
>  #include "qemu/osdep.h"
> -#include "trace-root.h"
> +#include "trace.h"
>  #include "ui/qemu-spice.h"
>  #include "chardev/char.h"
>  #include "qemu/error-report.h"
> diff --git a/backends/testdev.c b/chardev/testdev.c
> similarity index 100%
> rename from backends/testdev.c
> rename to chardev/testdev.c
> diff --git a/backends/wctablet.c b/chardev/wctablet.c
> similarity index 100%
> rename from backends/wctablet.c
> rename to chardev/wctablet.c
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 59e03436ad..7ee69d0e42 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1231,13 +1231,11 @@ M: Marc-André Lureau <marcandre.lureau@redhat.com>
>  S: Maintained
>  F: chardev/
>  F: include/chardev/
> -F: backends/msmouse.c
> -F: backends/testdev.c
>
>  Character Devices (Braille)
>  M: Samuel Thibault <samuel.thibault@ens-lyon.org>
>  S: Maintained
> -F: backends/baum.c
> +F: chardev/baum.c
>
>  Command line option argument parsing
>  M: Markus Armbruster <armbru@redhat.com>
> diff --git a/Makefile.objs b/Makefile.objs
> index 2100845ce2..0575802440 100644
> --- a/Makefile.objs
> +++ b/Makefile.objs
> @@ -50,8 +50,6 @@ common-obj-$(CONFIG_LINUX) += fsdev/
>
>  common-obj-y += migration/
>
> -common-obj-$(CONFIG_SPICE) += spice-qemu-char.o
> -
>  common-obj-y += audio/
>  common-obj-y += hw/
>  common-obj-y += accel.o
> @@ -70,6 +68,7 @@ common-obj-y += tpm.o
>  common-obj-$(CONFIG_SLIRP) += slirp/
>
>  common-obj-y += backends/
> +common-obj-y += chardev/
>
>  common-obj-$(CONFIG_SECCOMP) += qemu-seccomp.o
>
> @@ -121,6 +120,7 @@ trace-events-subdirs += io
>  trace-events-subdirs += migration
>  trace-events-subdirs += block
>  trace-events-subdirs += backends
> +trace-events-subdirs += chardev
>  trace-events-subdirs += hw/block
>  trace-events-subdirs += hw/block/dataplane
>  trace-events-subdirs += hw/char
> diff --git a/backends/Makefile.objs b/backends/Makefile.objs
> index 0e0f1567b2..0400799efd 100644
> --- a/backends/Makefile.objs
> +++ b/backends/Makefile.objs
> @@ -1,10 +1,6 @@
>  common-obj-y += rng.o rng-egd.o
>  common-obj-$(CONFIG_POSIX) += rng-random.o
>
> -common-obj-y += msmouse.o wctablet.o testdev.o
> -common-obj-$(CONFIG_BRLAPI) += baum.o
> -baum.o-cflags := $(SDL_CFLAGS)
> -
>  common-obj-$(CONFIG_TPM) += tpm.o
>
>  common-obj-y += hostmem.o hostmem-ram.o
> diff --git a/backends/trace-events b/backends/trace-events
> index 8c3289a3f9..e69de29bb2 100644
> --- a/backends/trace-events
> +++ b/backends/trace-events
> @@ -1,10 +0,0 @@
> -# See docs/tracing.txt for syntax documentation.
> -
> -# backends/wctablet.c
> -wct_init(void) ""
> -wct_cmd_re(void) ""
> -wct_cmd_st(void) ""
> -wct_cmd_sp(void) ""
> -wct_cmd_ts(int input) "0x%02x"
> -wct_cmd_other(const char *cmd) "%s"
> -wct_speed(int speed) "%d"
> diff --git a/chardev/Makefile.objs b/chardev/Makefile.objs
> index e0b37dbfd8..52a8127606 100644
> --- a/chardev/Makefile.objs
> +++ b/chardev/Makefile.objs
> @@ -16,3 +16,9 @@ chardev-obj-y += char-stdio.o
>  chardev-obj-y += char-udp.o
>  chardev-obj-$(CONFIG_WIN32) += char-win.o
>  chardev-obj-$(CONFIG_WIN32) += char-win-stdio.o
> +
> +common-obj-y += msmouse.o wctablet.o testdev.o
> +common-obj-$(CONFIG_BRLAPI) += baum.o
> +baum.o-cflags := $(SDL_CFLAGS)
> +
> +common-obj-$(CONFIG_SPICE) += spice.o
> diff --git a/chardev/trace-events b/chardev/trace-events
> new file mode 100644
> index 0000000000..822dde668b
> --- /dev/null
> +++ b/chardev/trace-events
> @@ -0,0 +1,18 @@
> +# See docs/tracing.txt for syntax documentation.
> +
> +# chardev/wctablet.c
> +wct_init(void) ""
> +wct_cmd_re(void) ""
> +wct_cmd_st(void) ""
> +wct_cmd_sp(void) ""
> +wct_cmd_ts(int input) "0x%02x"
> +wct_cmd_other(const char *cmd) "%s"
> +wct_speed(int speed) "%d"
> +
> +# chardev/spice.c
> +spice_vmc_write(ssize_t out, int len) "spice wrote %zd of requested %d"
> +spice_vmc_read(int bytes, int len) "spice read %d of requested %d"
> +spice_vmc_register_interface(void *scd) "spice vmc registered interface %p"
> +spice_vmc_unregister_interface(void *scd) "spice vmc unregistered interface %p"
> +spice_vmc_event(int event) "spice vmc event %d"
> +
> diff --git a/trace-events b/trace-events
> index e582d6315d..c785af294a 100644
> --- a/trace-events
> +++ b/trace-events
> @@ -41,13 +41,6 @@ system_wakeup_request(int reason) "reason=%d"
>  qemu_system_shutdown_request(void) ""
>  qemu_system_powerdown_request(void) ""
>
> -# spice-qemu-char.c
> -spice_vmc_write(ssize_t out, int len) "spice wrote %zd of requested %d"
> -spice_vmc_read(int bytes, int len) "spice read %d of requested %d"
> -spice_vmc_register_interface(void *scd) "spice vmc registered interface %p"
> -spice_vmc_unregister_interface(void *scd) "spice vmc unregistered interface %p"
> -spice_vmc_event(int event) "spice vmc event %d"
> -
>  # monitor.c
>  monitor_protocol_event_handler(uint32_t event, void *qdict) "event=%d data=%p"
>  monitor_protocol_event_emit(uint32_t event, void *data) "event=%d data=%p"
>

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 10/14] char: generalize qemu_chr_write_all()
  2017-05-29 21:09   ` Philippe Mathieu-Daudé
@ 2017-05-30  5:59     ` Marc-André Lureau
  0 siblings, 0 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-30  5:59 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel; +Cc: pbonzini

Hi

On Tue, May 30, 2017 at 1:09 AM Philippe Mathieu-Daudé <f4bug@amsat.org>
wrote:

> Hi Marc-André,
>
> On 05/29/2017 05:45 AM, Marc-André Lureau wrote:
> > qemu_chr_fe_write() is similar to qemu_chr_write_all(): the later write
> > all with a chardev backend.
> >
> > Make qemu_chr_write() and qemu_chr_fe_write_buffer() take an 'all'
> > argument. If false, handle 'partial' write the way qemu_chr_fe_write()
> > use to, and call qemu_chr_write() from qemu_chr_fe_write().
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> >  chardev/char.c | 70
> +++++++++++++++++++++++-----------------------------------
> >  1 file changed, 28 insertions(+), 42 deletions(-)
> >
> > diff --git a/chardev/char.c b/chardev/char.c
> > index a747e0279a..9a7c70c7aa 100644
> > --- a/chardev/char.c
> > +++ b/chardev/char.c
> > @@ -96,7 +96,8 @@ static void qemu_chr_fe_write_log(Chardev *s,
> >  }
> >
> >  static int qemu_chr_fe_write_buffer(Chardev *s,
> > -                                    const uint8_t *buf, int len, int
> *offset)
> > +                                    const uint8_t *buf, int len,
> > +                                    int *offset, bool write_all)
> >  {
> >      ChardevClass *cc = CHARDEV_GET_CLASS(s);
> >      int res = 0;
> > @@ -106,7 +107,7 @@ static int qemu_chr_fe_write_buffer(Chardev *s,
> >      while (*offset < len) {
> >      retry:
> >          res = cc->chr_write(s, buf + *offset, len - *offset);
> > -        if (res < 0 && errno == EAGAIN) {
> > +        if (res < 0 && errno == EAGAIN && write_all) {
> >              g_usleep(100);
> >              goto retry;
> >          }
> > @@ -116,6 +117,9 @@ static int qemu_chr_fe_write_buffer(Chardev *s,
> >          }
> >
> >          *offset += res;
> > +        if (!write_all) {
> > +            break;
> > +        }
> >      }
> >      if (*offset > 0) {
> >          qemu_chr_fe_write_log(s, buf, *offset);
> > @@ -130,54 +134,20 @@ static bool qemu_chr_replay(Chardev *chr)
> >      return qemu_chr_has_feature(chr, QEMU_CHAR_FEATURE_REPLAY);
> >  }
> >
> > -int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len)
> > +static int qemu_chr_write(Chardev *s, const uint8_t *buf, int len,
> > +                          bool write_all)
> >  {
> > -    Chardev *s = be->chr;
> > -    ChardevClass *cc;
> > -    int ret;
> > -
> > -    if (!s) {
> > -        return 0;
> > -    }
> > -
> > -    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_PLAY) {
> > -        int offset;
> > -        replay_char_write_event_load(&ret, &offset);
> > -        assert(offset <= len);
> > -        qemu_chr_fe_write_buffer(s, buf, offset, &offset);
> > -        return ret;
> > -    }
> > -
> > -    cc = CHARDEV_GET_CLASS(s);
> > -    qemu_mutex_lock(&s->chr_write_lock);
> > -    ret = cc->chr_write(s, buf, len);
> > -
> > -    if (ret > 0) {
> > -        qemu_chr_fe_write_log(s, buf, ret);
> > -    }
> > -
> > -    qemu_mutex_unlock(&s->chr_write_lock);
> > -
> > -    if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
> > -        replay_char_write_event_save(ret, ret < 0 ? 0 : ret);
> > -    }
> > -
> > -    return ret;
> > -}
> > -
> > -int qemu_chr_write_all(Chardev *s, const uint8_t *buf, int len)
> > -{
> > -    int offset;
> > +    int offset = 0;
> >      int res;
> >
> >      if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_PLAY) {
> >          replay_char_write_event_load(&res, &offset);
> >          assert(offset <= len);
> > -        qemu_chr_fe_write_buffer(s, buf, offset, &offset);
> > +        qemu_chr_fe_write_buffer(s, buf, offset, &offset, true);
> >          return res;
> >      }
> >
> > -    res = qemu_chr_fe_write_buffer(s, buf, len, &offset);
> > +    res = qemu_chr_fe_write_buffer(s, buf, len, &offset, write_all);
> >
> >      if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
> >          replay_char_write_event_save(res, offset);
> > @@ -189,6 +159,22 @@ int qemu_chr_write_all(Chardev *s, const uint8_t
> *buf, int len)
> >      return offset;
> >  }
> >
> > +int qemu_chr_write_all(Chardev *s, const uint8_t *buf, int len)
> > +{
> > +    return qemu_chr_write(s, buf, len, true);
> > +}
> > +
> > +int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len)
> > +{
> > +    Chardev *s = be->chr;
> > +
> > +    if (!s) {
> > +        return 0;
> > +    }
> > +
> > +    return qemu_chr_write(s, buf, len, false);
> > +}
> > +
> >  int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len)
> >  {
> >      Chardev *s = be->chr;
> > @@ -197,7 +183,7 @@ int qemu_chr_fe_write_all(CharBackend *be, const
> uint8_t *buf, int len)
> >          return 0;
> >      }
> >
> > -    return qemu_chr_write_all(s, buf, len);
> > +    return qemu_chr_write(s, buf, len, true);
>
> I think calling qemu_chr_write_all() is more readable.
>

 qemu_chr_write_all() would imply that you cannot change the 'all'
behaviour to me, but this is a matter of taste I guess


> Either ways:
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>

thanks
-- 
Marc-André Lureau

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [Qemu-devel] [PATCH] char: cast ARRAY_SIZE() as signed to silent warning on empty array
  2017-05-29  9:23 ` [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups no-reply
@ 2017-05-30 12:09   ` Philippe Mathieu-Daudé
  2017-05-30 12:38     ` Marc-André Lureau
  0 siblings, 1 reply; 33+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-05-30 12:09 UTC (permalink / raw)
  To: qemu-devel, Marc-André Lureau; +Cc: Philippe Mathieu-Daudé

chardev/char.c: In function 'chardev_name_foreach':
chardev/char.c:546:19: error: comparison of unsigned expression < 0 is always false [-Werror=type-limits]
     for (i = 0; i < ARRAY_SIZE(chardev_alias_table); i++) {
                   ^

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 chardev/char.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/chardev/char.c b/chardev/char.c
index 4e3808aefc..7aa0210765 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -543,7 +543,7 @@ chardev_name_foreach(void (*fn)(const char *name, void *opaque), void *opaque)
 
     object_class_foreach(chardev_class_foreach, TYPE_CHARDEV, false, &fe);
 
-    for (i = 0; i < ARRAY_SIZE(chardev_alias_table); i++) {
+    for (i = 0; i < (int)ARRAY_SIZE(chardev_alias_table); i++) {
         fn(chardev_alias_table[i].alias, opaque);
     }
 }
@@ -589,7 +589,7 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts,
         return NULL;
     }
 
-    for (i = 0; i < ARRAY_SIZE(chardev_alias_table); i++) {
+    for (i = 0; i < (int)ARRAY_SIZE(chardev_alias_table); i++) {
         if (g_strcmp0(chardev_alias_table[i].alias, name) == 0) {
             name = chardev_alias_table[i].typename;
             break;
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH] char: cast ARRAY_SIZE() as signed to silent warning on empty array
  2017-05-30 12:09   ` [Qemu-devel] [PATCH] char: cast ARRAY_SIZE() as signed to silent warning on empty array Philippe Mathieu-Daudé
@ 2017-05-30 12:38     ` Marc-André Lureau
  0 siblings, 0 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-30 12:38 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé; +Cc: qemu-devel



----- Original Message -----
> chardev/char.c: In function 'chardev_name_foreach':
> chardev/char.c:546:19: error: comparison of unsigned expression < 0 is always
> false [-Werror=type-limits]
>      for (i = 0; i < ARRAY_SIZE(chardev_alias_table); i++) {
>                    ^
> 
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

> ---
>  chardev/char.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/chardev/char.c b/chardev/char.c
> index 4e3808aefc..7aa0210765 100644
> --- a/chardev/char.c
> +++ b/chardev/char.c
> @@ -543,7 +543,7 @@ chardev_name_foreach(void (*fn)(const char *name, void
> *opaque), void *opaque)
>  
>      object_class_foreach(chardev_class_foreach, TYPE_CHARDEV, false, &fe);
>  
> -    for (i = 0; i < ARRAY_SIZE(chardev_alias_table); i++) {
> +    for (i = 0; i < (int)ARRAY_SIZE(chardev_alias_table); i++) {
>          fn(chardev_alias_table[i].alias, opaque);
>      }
>  }
> @@ -589,7 +589,7 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts,
>          return NULL;
>      }
>  
> -    for (i = 0; i < ARRAY_SIZE(chardev_alias_table); i++) {
> +    for (i = 0; i < (int)ARRAY_SIZE(chardev_alias_table); i++) {
>          if (g_strcmp0(chardev_alias_table[i].alias, name) == 0) {
>              name = chardev_alias_table[i].typename;
>              break;
> --
> 2.11.0
> 
> 

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 14/14] char: move char devices to chardev/
  2017-05-29 21:31   ` Philippe Mathieu-Daudé
@ 2017-05-30 15:18     ` Eric Blake
  2017-05-31 14:01       ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 33+ messages in thread
From: Eric Blake @ 2017-05-30 15:18 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, Marc-André Lureau, qemu-devel; +Cc: pbonzini

[-- Attachment #1: Type: text/plain, Size: 472 bytes --]

On 05/29/2017 04:31 PM, Philippe Mathieu-Daudé wrote:
> On 05/29/2017 05:45 AM, Marc-André Lureau wrote:
>> Suggested by Paolo Bonizini during series review.
> 
> Bonzini ;) "serie" singular

No, "serie" is not a word.  "series" is one of those weird English words
that is both singular and plural (another such word is "sheep").

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 13/14] char: make chr_fe_deinit() optionaly delete backend
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 13/14] char: make chr_fe_deinit() optionaly delete backend Marc-André Lureau
@ 2017-05-31 13:09   ` Marc-André Lureau
  2017-06-02  4:52   ` Philippe Mathieu-Daudé
  1 sibling, 0 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-05-31 13:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, f4bug

ping, only patch left in the series without review

thanks

On Mon, May 29, 2017 at 12:56 PM Marc-André Lureau <
marcandre.lureau@redhat.com> wrote:

> This simplifies removing a backend for a frontend user (no need to
> retrive the associated driver and seperate delete call etc).
>
> NB: many frontends have questionable handling of ending a chardev. They
> should probably delete the backend to prevent broken reusage.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/chardev/char-fe.h        |  6 ++++--
>  backends/rng-egd.c               |  2 +-
>  chardev/char-fe.c                |  5 ++++-
>  chardev/char-mux.c               |  2 +-
>  gdbstub.c                        | 15 ++-------------
>  hw/char/serial.c                 |  2 +-
>  hw/char/xen_console.c            |  2 +-
>  hw/core/qdev-properties-system.c |  2 +-
>  hw/usb/ccid-card-passthru.c      |  5 +----
>  hw/usb/redirect.c                |  4 +---
>  monitor.c                        |  2 +-
>  net/colo-compare.c               |  8 +++-----
>  net/filter-mirror.c              |  6 +++---
>  net/vhost-user.c                 |  5 +----
>  tests/test-char.c                | 22 ++++++++--------------
>  tests/vhost-user-test.c          |  4 +---
>  16 files changed, 34 insertions(+), 58 deletions(-)
>
> diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h
> index bd82093218..2cbb262f66 100644
> --- a/include/chardev/char-fe.h
> +++ b/include/chardev/char-fe.h
> @@ -30,12 +30,14 @@ bool qemu_chr_fe_init(CharBackend *b, Chardev *s,
> Error **errp);
>
>  /**
>   * @qemu_chr_fe_deinit:
> - *
> + * @b: a CharBackend
> + * @del: if true, delete the chardev backend
> +*
>   * Dissociate the CharBackend from the Chardev.
>   *
>   * Safe to call without associated Chardev.
>   */
> -void qemu_chr_fe_deinit(CharBackend *b);
> +void qemu_chr_fe_deinit(CharBackend *b, bool del);
>
>  /**
>   * @qemu_chr_fe_get_driver:
> diff --git a/backends/rng-egd.c b/backends/rng-egd.c
> index ad3e1e5edf..e7ce2cac80 100644
> --- a/backends/rng-egd.c
> +++ b/backends/rng-egd.c
> @@ -145,7 +145,7 @@ static void rng_egd_finalize(Object *obj)
>  {
>      RngEgd *s = RNG_EGD(obj);
>
> -    qemu_chr_fe_deinit(&s->chr);
> +    qemu_chr_fe_deinit(&s->chr, false);
>      g_free(s->chr_name);
>  }
>
> diff --git a/chardev/char-fe.c b/chardev/char-fe.c
> index 341221d029..3f90f0567c 100644
> --- a/chardev/char-fe.c
> +++ b/chardev/char-fe.c
> @@ -211,7 +211,7 @@ unavailable:
>      return false;
>  }
>
> -void qemu_chr_fe_deinit(CharBackend *b)
> +void qemu_chr_fe_deinit(CharBackend *b, bool del)
>  {
>      assert(b);
>
> @@ -224,6 +224,9 @@ void qemu_chr_fe_deinit(CharBackend *b)
>              MuxChardev *d = MUX_CHARDEV(b->chr);
>              d->backends[b->tag] = NULL;
>          }
> +        if (del) {
> +            object_unparent(OBJECT(b->chr));
> +        }
>          b->chr = NULL;
>      }
>  }
> diff --git a/chardev/char-mux.c b/chardev/char-mux.c
> index 106c682e7f..08570b915e 100644
> --- a/chardev/char-mux.c
> +++ b/chardev/char-mux.c
> @@ -266,7 +266,7 @@ static void char_mux_finalize(Object *obj)
>              be->chr = NULL;
>          }
>      }
> -    qemu_chr_fe_deinit(&d->chr);
> +    qemu_chr_fe_deinit(&d->chr, false);
>  }
>
>  void mux_chr_set_handlers(Chardev *chr, GMainContext *context)
> diff --git a/gdbstub.c b/gdbstub.c
> index 4251d23898..ec4e4b25be 100644
> --- a/gdbstub.c
> +++ b/gdbstub.c
> @@ -1678,9 +1678,6 @@ void gdb_exit(CPUArchState *env, int code)
>  {
>    GDBState *s;
>    char buf[4];
> -#ifndef CONFIG_USER_ONLY
> -  Chardev *chr;
> -#endif
>
>    s = gdbserver_state;
>    if (!s) {
> @@ -1690,19 +1687,13 @@ void gdb_exit(CPUArchState *env, int code)
>    if (gdbserver_fd < 0 || s->fd < 0) {
>        return;
>    }
> -#else
> -  chr = qemu_chr_fe_get_driver(&s->chr);
> -  if (!chr) {
> -      return;
> -  }
>  #endif
>
>    snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
>    put_packet(s, buf);
>
>  #ifndef CONFIG_USER_ONLY
> -  qemu_chr_fe_deinit(&s->chr);
> -  object_unparent(OBJECT(chr));
> +  qemu_chr_fe_deinit(&s->chr, true);
>  #endif
>  }
>
> @@ -2002,9 +1993,7 @@ int gdbserver_start(const char *device)
>                                     NULL, &error_abort);
>          monitor_init(mon_chr, 0);
>      } else {
> -        if (qemu_chr_fe_get_driver(&s->chr)) {
> -            object_unparent(OBJECT(qemu_chr_fe_get_driver(&s->chr)));
> -        }
> +        qemu_chr_fe_deinit(&s->chr, true);
>          mon_chr = s->mon_chr;
>          memset(s, 0, sizeof(GDBState));
>          s->mon_chr = mon_chr;
> diff --git a/hw/char/serial.c b/hw/char/serial.c
> index 23e5fe9d18..e1f12507bf 100644
> --- a/hw/char/serial.c
> +++ b/hw/char/serial.c
> @@ -905,7 +905,7 @@ void serial_realize_core(SerialState *s, Error **errp)
>
>  void serial_exit_core(SerialState *s)
>  {
> -    qemu_chr_fe_deinit(&s->chr);
> +    qemu_chr_fe_deinit(&s->chr, false);
>
>      timer_del(s->modem_status_poll);
>      timer_free(s->modem_status_poll);
> diff --git a/hw/char/xen_console.c b/hw/char/xen_console.c
> index cb849c2e3e..f9af8cadf4 100644
> --- a/hw/char/xen_console.c
> +++ b/hw/char/xen_console.c
> @@ -261,7 +261,7 @@ static void con_disconnect(struct XenDevice *xendev)
>  {
>      struct XenConsole *con = container_of(xendev, struct XenConsole,
> xendev);
>
> -    qemu_chr_fe_deinit(&con->chr);
> +    qemu_chr_fe_deinit(&con->chr, false);
>      xen_pv_unbind_evtchn(&con->xendev);
>
>      if (con->sring) {
> diff --git a/hw/core/qdev-properties-system.c
> b/hw/core/qdev-properties-system.c
> index a549d39030..3bef41914d 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -225,7 +225,7 @@ static void release_chr(Object *obj, const char *name,
> void *opaque)
>      Property *prop = opaque;
>      CharBackend *be = qdev_get_prop_ptr(dev, prop);
>
> -    qemu_chr_fe_deinit(be);
> +    qemu_chr_fe_deinit(be, false);
>  }
>
>  PropertyInfo qdev_prop_chr = {
> diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
> index fed3683a50..ac1725eeae 100644
> --- a/hw/usb/ccid-card-passthru.c
> +++ b/hw/usb/ccid-card-passthru.c
> @@ -264,10 +264,7 @@ static void
> ccid_card_vscard_handle_message(PassthruState *card,
>
>  static void ccid_card_vscard_drop_connection(PassthruState *card)
>  {
> -    Chardev *chr = qemu_chr_fe_get_driver(&card->cs);
> -
> -    qemu_chr_fe_deinit(&card->cs);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&card->cs, true);
>      card->vscard_in_pos = card->vscard_in_hdr = 0;
>  }
>
> diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
> index d2b3a84a03..aa22d69216 100644
> --- a/hw/usb/redirect.c
> +++ b/hw/usb/redirect.c
> @@ -1419,10 +1419,8 @@ static void
> usbredir_cleanup_device_queues(USBRedirDevice *dev)
>  static void usbredir_unrealize(USBDevice *udev, Error **errp)
>  {
>      USBRedirDevice *dev = USB_REDIRECT(udev);
> -    Chardev *chr = qemu_chr_fe_get_driver(&dev->cs);
>
> -    qemu_chr_fe_deinit(&dev->cs);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&dev->cs, true);
>
>      /* Note must be done after qemu_chr_close, as that causes a close
> event */
>      qemu_bh_delete(dev->chardev_close_bh);
> diff --git a/monitor.c b/monitor.c
> index 37f8d5645f..75e7cd26d0 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -578,7 +578,7 @@ static void monitor_data_init(Monitor *mon)
>
>  static void monitor_data_destroy(Monitor *mon)
>  {
> -    qemu_chr_fe_deinit(&mon->chr);
> +    qemu_chr_fe_deinit(&mon->chr, false);
>      if (monitor_is_qmp(mon)) {
>          json_message_parser_destroy(&mon->qmp.parser);
>      }
> diff --git a/net/colo-compare.c b/net/colo-compare.c
> index 2fb75bcca4..6d500e1dc4 100644
> --- a/net/colo-compare.c
> +++ b/net/colo-compare.c
> @@ -801,11 +801,9 @@ static void colo_compare_finalize(Object *obj)
>  {
>      CompareState *s = COLO_COMPARE(obj);
>
> -    qemu_chr_fe_set_handlers(&s->chr_pri_in, NULL, NULL, NULL, NULL,
> -                             s->worker_context, true);
> -    qemu_chr_fe_set_handlers(&s->chr_sec_in, NULL, NULL, NULL, NULL,
> -                             s->worker_context, true);
> -    qemu_chr_fe_deinit(&s->chr_out);
> +    qemu_chr_fe_deinit(&s->chr_pri_in, false);
> +    qemu_chr_fe_deinit(&s->chr_sec_in, false);
> +    qemu_chr_fe_deinit(&s->chr_out, false);
>
>      g_main_loop_quit(s->compare_loop);
>      qemu_thread_join(&s->thread);
> diff --git a/net/filter-mirror.c b/net/filter-mirror.c
> index a20330475c..52d978fce2 100644
> --- a/net/filter-mirror.c
> +++ b/net/filter-mirror.c
> @@ -178,15 +178,15 @@ static void filter_mirror_cleanup(NetFilterState *nf)
>  {
>      MirrorState *s = FILTER_MIRROR(nf);
>
> -    qemu_chr_fe_deinit(&s->chr_out);
> +    qemu_chr_fe_deinit(&s->chr_out, false);
>  }
>
>  static void filter_redirector_cleanup(NetFilterState *nf)
>  {
>      MirrorState *s = FILTER_REDIRECTOR(nf);
>
> -    qemu_chr_fe_deinit(&s->chr_in);
> -    qemu_chr_fe_deinit(&s->chr_out);
> +    qemu_chr_fe_deinit(&s->chr_in, false);
> +    qemu_chr_fe_deinit(&s->chr_out, false);
>  }
>
>  static void filter_mirror_setup(NetFilterState *nf, Error **errp)
> diff --git a/net/vhost-user.c b/net/vhost-user.c
> index 526290d8c1..a042ec6a34 100644
> --- a/net/vhost-user.c
> +++ b/net/vhost-user.c
> @@ -151,10 +151,7 @@ static void vhost_user_cleanup(NetClientState *nc)
>          s->vhost_net = NULL;
>      }
>      if (nc->queue_index == 0) {
> -        Chardev *chr = qemu_chr_fe_get_driver(&s->chr);
> -
> -        qemu_chr_fe_deinit(&s->chr);
> -        object_unparent(OBJECT(chr));
> +        qemu_chr_fe_deinit(&s->chr, true);
>      }
>
>      qemu_purge_queued_packets(nc);
> diff --git a/tests/test-char.c b/tests/test-char.c
> index d7ecf1056a..dfe856cb85 100644
> --- a/tests/test-char.c
> +++ b/tests/test-char.c
> @@ -97,8 +97,7 @@ static void char_stdio_test_subprocess(void)
>      ret = qemu_chr_fe_write(&be, (void *)"buf", 4);
>      g_assert_cmpint(ret, ==, 4);
>
> -    qemu_chr_fe_deinit(&be);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&be, true);
>  }
>
>  static void char_stdio_test(void)
> @@ -146,8 +145,7 @@ static void char_ringbuf_test(void)
>      g_assert_cmpstr(data, ==, "");
>      g_free(data);
>
> -    qemu_chr_fe_deinit(&be);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&be, true);
>
>      /* check alias */
>      opts = qemu_opts_create(qemu_find_opts("chardev"), "memory-label",
> @@ -231,9 +229,8 @@ static void char_mux_test(void)
>      g_assert_cmpint(strlen(data), !=, 0);
>      g_free(data);
>
> -    qemu_chr_fe_deinit(&chr_be1);
> -    qemu_chr_fe_deinit(&chr_be2);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&chr_be1, false);
> +    qemu_chr_fe_deinit(&chr_be2, true);
>  }
>
>  typedef struct SocketIdleData {
> @@ -396,8 +393,7 @@ static void char_pipe_test(void)
>      g_assert_cmpint(fe.read_count, ==, 8);
>      g_assert_cmpstr(fe.read_buf, ==, "pipe-in");
>
> -    qemu_chr_fe_deinit(&be);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&be, true);
>
>      g_assert(g_unlink(in) == 0);
>      g_assert(g_unlink(out) == 0);
> @@ -511,8 +507,7 @@ static void char_file_test(void)
>
>          g_assert_cmpint(fe.read_count, ==, 8);
>          g_assert_cmpstr(fe.read_buf, ==, "fifo-in");
> -        qemu_chr_fe_deinit(&be);
> -        object_unref(OBJECT(chr));
> +        qemu_chr_fe_deinit(&be, true);
>          g_unlink(fifo);
>          g_free(fifo);
>      }
> @@ -549,7 +544,7 @@ static void char_null_test(void)
>      error_free_or_abort(&err);
>
>      /* deinit & reinit */
> -    qemu_chr_fe_deinit(&be);
> +    qemu_chr_fe_deinit(&be, false);
>      qemu_chr_fe_init(&be, chr, &error_abort);
>
>      qemu_chr_fe_set_open(&be, true);
> @@ -563,8 +558,7 @@ static void char_null_test(void)
>      ret = qemu_chr_fe_write(&be, (void *)"buf", 4);
>      g_assert_cmpint(ret, ==, 4);
>
> -    qemu_chr_fe_deinit(&be);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&be, true);
>  }
>
>  static void char_invalid_test(void)
> diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
> index 4ca11ae28d..b3cc045765 100644
> --- a/tests/vhost-user-test.c
> +++ b/tests/vhost-user-test.c
> @@ -488,10 +488,8 @@ static inline void test_server_connect(TestServer
> *server)
>  static gboolean _test_server_free(TestServer *server)
>  {
>      int i;
> -    Chardev *chr = qemu_chr_fe_get_driver(&server->chr);
>
> -    qemu_chr_fe_deinit(&server->chr);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&server->chr, true);
>
>      for (i = 0; i < server->fds_num; i++) {
>          close(server->fds[i]);
> --
> 2.13.0.91.g00982b8dd
>
>
> --
Marc-André Lureau

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 14/14] char: move char devices to chardev/
  2017-05-30 15:18     ` Eric Blake
@ 2017-05-31 14:01       ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 33+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-05-31 14:01 UTC (permalink / raw)
  To: Eric Blake, Marc-André Lureau, qemu-devel; +Cc: pbonzini

On 05/30/2017 12:18 PM, Eric Blake wrote:
> On 05/29/2017 04:31 PM, Philippe Mathieu-Daudé wrote:
>> On 05/29/2017 05:45 AM, Marc-André Lureau wrote:
>>> Suggested by Paolo Bonizini during series review.
>>
>> Bonzini ;) "serie" singular
>
> No, "serie" is not a word.  "series" is one of those weird English words
> that is both singular and plural (another such word is "sheep").

Oh, I thought it was describing "this" particular series so no need to 
plural. Thank for the clarification :)

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 13/14] char: make chr_fe_deinit() optionaly delete backend
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 13/14] char: make chr_fe_deinit() optionaly delete backend Marc-André Lureau
  2017-05-31 13:09   ` Marc-André Lureau
@ 2017-06-02  4:52   ` Philippe Mathieu-Daudé
  1 sibling, 0 replies; 33+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-06-02  4:52 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: pbonzini

Hi Marc-André,

The new boolean argument bothered me at first but I couldn't find nicer 
way (that's why I kept this patch review so long).

On 05/29/2017 05:45 AM, Marc-André Lureau wrote:
> This simplifies removing a backend for a frontend user (no need to
> retrive the associated driver and seperate delete call etc).

retrieve, separate

>
> NB: many frontends have questionable handling of ending a chardev. They
> should probably delete the backend to prevent broken reusage.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
>  include/chardev/char-fe.h        |  6 ++++--
>  backends/rng-egd.c               |  2 +-
>  chardev/char-fe.c                |  5 ++++-
>  chardev/char-mux.c               |  2 +-
>  gdbstub.c                        | 15 ++-------------
>  hw/char/serial.c                 |  2 +-
>  hw/char/xen_console.c            |  2 +-
>  hw/core/qdev-properties-system.c |  2 +-
>  hw/usb/ccid-card-passthru.c      |  5 +----
>  hw/usb/redirect.c                |  4 +---
>  monitor.c                        |  2 +-
>  net/colo-compare.c               |  8 +++-----
>  net/filter-mirror.c              |  6 +++---
>  net/vhost-user.c                 |  5 +----
>  tests/test-char.c                | 22 ++++++++--------------
>  tests/vhost-user-test.c          |  4 +---
>  16 files changed, 34 insertions(+), 58 deletions(-)
>
> diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h
> index bd82093218..2cbb262f66 100644
> --- a/include/chardev/char-fe.h
> +++ b/include/chardev/char-fe.h
> @@ -30,12 +30,14 @@ bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp);
>
>  /**
>   * @qemu_chr_fe_deinit:
> - *
> + * @b: a CharBackend
> + * @del: if true, delete the chardev backend
> +*
>   * Dissociate the CharBackend from the Chardev.
>   *
>   * Safe to call without associated Chardev.
>   */
> -void qemu_chr_fe_deinit(CharBackend *b);
> +void qemu_chr_fe_deinit(CharBackend *b, bool del);
>
>  /**
>   * @qemu_chr_fe_get_driver:
> diff --git a/backends/rng-egd.c b/backends/rng-egd.c
> index ad3e1e5edf..e7ce2cac80 100644
> --- a/backends/rng-egd.c
> +++ b/backends/rng-egd.c
> @@ -145,7 +145,7 @@ static void rng_egd_finalize(Object *obj)
>  {
>      RngEgd *s = RNG_EGD(obj);
>
> -    qemu_chr_fe_deinit(&s->chr);
> +    qemu_chr_fe_deinit(&s->chr, false);
>      g_free(s->chr_name);
>  }
>
> diff --git a/chardev/char-fe.c b/chardev/char-fe.c
> index 341221d029..3f90f0567c 100644
> --- a/chardev/char-fe.c
> +++ b/chardev/char-fe.c
> @@ -211,7 +211,7 @@ unavailable:
>      return false;
>  }
>
> -void qemu_chr_fe_deinit(CharBackend *b)
> +void qemu_chr_fe_deinit(CharBackend *b, bool del)
>  {
>      assert(b);
>
> @@ -224,6 +224,9 @@ void qemu_chr_fe_deinit(CharBackend *b)
>              MuxChardev *d = MUX_CHARDEV(b->chr);
>              d->backends[b->tag] = NULL;
>          }
> +        if (del) {
> +            object_unparent(OBJECT(b->chr));
> +        }
>          b->chr = NULL;
>      }
>  }
> diff --git a/chardev/char-mux.c b/chardev/char-mux.c
> index 106c682e7f..08570b915e 100644
> --- a/chardev/char-mux.c
> +++ b/chardev/char-mux.c
> @@ -266,7 +266,7 @@ static void char_mux_finalize(Object *obj)
>              be->chr = NULL;
>          }
>      }
> -    qemu_chr_fe_deinit(&d->chr);
> +    qemu_chr_fe_deinit(&d->chr, false);
>  }
>
>  void mux_chr_set_handlers(Chardev *chr, GMainContext *context)
> diff --git a/gdbstub.c b/gdbstub.c
> index 4251d23898..ec4e4b25be 100644
> --- a/gdbstub.c
> +++ b/gdbstub.c
> @@ -1678,9 +1678,6 @@ void gdb_exit(CPUArchState *env, int code)
>  {
>    GDBState *s;
>    char buf[4];
> -#ifndef CONFIG_USER_ONLY
> -  Chardev *chr;
> -#endif
>
>    s = gdbserver_state;
>    if (!s) {
> @@ -1690,19 +1687,13 @@ void gdb_exit(CPUArchState *env, int code)
>    if (gdbserver_fd < 0 || s->fd < 0) {
>        return;
>    }
> -#else
> -  chr = qemu_chr_fe_get_driver(&s->chr);
> -  if (!chr) {
> -      return;
> -  }
>  #endif
>
>    snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
>    put_packet(s, buf);
>
>  #ifndef CONFIG_USER_ONLY
> -  qemu_chr_fe_deinit(&s->chr);
> -  object_unparent(OBJECT(chr));
> +  qemu_chr_fe_deinit(&s->chr, true);
>  #endif
>  }
>
> @@ -2002,9 +1993,7 @@ int gdbserver_start(const char *device)
>                                     NULL, &error_abort);
>          monitor_init(mon_chr, 0);
>      } else {
> -        if (qemu_chr_fe_get_driver(&s->chr)) {
> -            object_unparent(OBJECT(qemu_chr_fe_get_driver(&s->chr)));
> -        }
> +        qemu_chr_fe_deinit(&s->chr, true);
>          mon_chr = s->mon_chr;
>          memset(s, 0, sizeof(GDBState));
>          s->mon_chr = mon_chr;
> diff --git a/hw/char/serial.c b/hw/char/serial.c
> index 23e5fe9d18..e1f12507bf 100644
> --- a/hw/char/serial.c
> +++ b/hw/char/serial.c
> @@ -905,7 +905,7 @@ void serial_realize_core(SerialState *s, Error **errp)
>
>  void serial_exit_core(SerialState *s)
>  {
> -    qemu_chr_fe_deinit(&s->chr);
> +    qemu_chr_fe_deinit(&s->chr, false);
>
>      timer_del(s->modem_status_poll);
>      timer_free(s->modem_status_poll);
> diff --git a/hw/char/xen_console.c b/hw/char/xen_console.c
> index cb849c2e3e..f9af8cadf4 100644
> --- a/hw/char/xen_console.c
> +++ b/hw/char/xen_console.c
> @@ -261,7 +261,7 @@ static void con_disconnect(struct XenDevice *xendev)
>  {
>      struct XenConsole *con = container_of(xendev, struct XenConsole, xendev);
>
> -    qemu_chr_fe_deinit(&con->chr);
> +    qemu_chr_fe_deinit(&con->chr, false);
>      xen_pv_unbind_evtchn(&con->xendev);
>
>      if (con->sring) {
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index a549d39030..3bef41914d 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -225,7 +225,7 @@ static void release_chr(Object *obj, const char *name, void *opaque)
>      Property *prop = opaque;
>      CharBackend *be = qdev_get_prop_ptr(dev, prop);
>
> -    qemu_chr_fe_deinit(be);
> +    qemu_chr_fe_deinit(be, false);
>  }
>
>  PropertyInfo qdev_prop_chr = {
> diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
> index fed3683a50..ac1725eeae 100644
> --- a/hw/usb/ccid-card-passthru.c
> +++ b/hw/usb/ccid-card-passthru.c
> @@ -264,10 +264,7 @@ static void ccid_card_vscard_handle_message(PassthruState *card,
>
>  static void ccid_card_vscard_drop_connection(PassthruState *card)
>  {
> -    Chardev *chr = qemu_chr_fe_get_driver(&card->cs);
> -
> -    qemu_chr_fe_deinit(&card->cs);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&card->cs, true);
>      card->vscard_in_pos = card->vscard_in_hdr = 0;
>  }
>
> diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
> index d2b3a84a03..aa22d69216 100644
> --- a/hw/usb/redirect.c
> +++ b/hw/usb/redirect.c
> @@ -1419,10 +1419,8 @@ static void usbredir_cleanup_device_queues(USBRedirDevice *dev)
>  static void usbredir_unrealize(USBDevice *udev, Error **errp)
>  {
>      USBRedirDevice *dev = USB_REDIRECT(udev);
> -    Chardev *chr = qemu_chr_fe_get_driver(&dev->cs);
>
> -    qemu_chr_fe_deinit(&dev->cs);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&dev->cs, true);
>
>      /* Note must be done after qemu_chr_close, as that causes a close event */
>      qemu_bh_delete(dev->chardev_close_bh);
> diff --git a/monitor.c b/monitor.c
> index 37f8d5645f..75e7cd26d0 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -578,7 +578,7 @@ static void monitor_data_init(Monitor *mon)
>
>  static void monitor_data_destroy(Monitor *mon)
>  {
> -    qemu_chr_fe_deinit(&mon->chr);
> +    qemu_chr_fe_deinit(&mon->chr, false);
>      if (monitor_is_qmp(mon)) {
>          json_message_parser_destroy(&mon->qmp.parser);
>      }
> diff --git a/net/colo-compare.c b/net/colo-compare.c
> index 2fb75bcca4..6d500e1dc4 100644
> --- a/net/colo-compare.c
> +++ b/net/colo-compare.c
> @@ -801,11 +801,9 @@ static void colo_compare_finalize(Object *obj)
>  {
>      CompareState *s = COLO_COMPARE(obj);
>
> -    qemu_chr_fe_set_handlers(&s->chr_pri_in, NULL, NULL, NULL, NULL,
> -                             s->worker_context, true);
> -    qemu_chr_fe_set_handlers(&s->chr_sec_in, NULL, NULL, NULL, NULL,
> -                             s->worker_context, true);
> -    qemu_chr_fe_deinit(&s->chr_out);
> +    qemu_chr_fe_deinit(&s->chr_pri_in, false);
> +    qemu_chr_fe_deinit(&s->chr_sec_in, false);
> +    qemu_chr_fe_deinit(&s->chr_out, false);
>
>      g_main_loop_quit(s->compare_loop);
>      qemu_thread_join(&s->thread);
> diff --git a/net/filter-mirror.c b/net/filter-mirror.c
> index a20330475c..52d978fce2 100644
> --- a/net/filter-mirror.c
> +++ b/net/filter-mirror.c
> @@ -178,15 +178,15 @@ static void filter_mirror_cleanup(NetFilterState *nf)
>  {
>      MirrorState *s = FILTER_MIRROR(nf);
>
> -    qemu_chr_fe_deinit(&s->chr_out);
> +    qemu_chr_fe_deinit(&s->chr_out, false);
>  }
>
>  static void filter_redirector_cleanup(NetFilterState *nf)
>  {
>      MirrorState *s = FILTER_REDIRECTOR(nf);
>
> -    qemu_chr_fe_deinit(&s->chr_in);
> -    qemu_chr_fe_deinit(&s->chr_out);
> +    qemu_chr_fe_deinit(&s->chr_in, false);
> +    qemu_chr_fe_deinit(&s->chr_out, false);
>  }
>
>  static void filter_mirror_setup(NetFilterState *nf, Error **errp)
> diff --git a/net/vhost-user.c b/net/vhost-user.c
> index 526290d8c1..a042ec6a34 100644
> --- a/net/vhost-user.c
> +++ b/net/vhost-user.c
> @@ -151,10 +151,7 @@ static void vhost_user_cleanup(NetClientState *nc)
>          s->vhost_net = NULL;
>      }
>      if (nc->queue_index == 0) {
> -        Chardev *chr = qemu_chr_fe_get_driver(&s->chr);
> -
> -        qemu_chr_fe_deinit(&s->chr);
> -        object_unparent(OBJECT(chr));
> +        qemu_chr_fe_deinit(&s->chr, true);
>      }
>
>      qemu_purge_queued_packets(nc);
> diff --git a/tests/test-char.c b/tests/test-char.c
> index d7ecf1056a..dfe856cb85 100644
> --- a/tests/test-char.c
> +++ b/tests/test-char.c
> @@ -97,8 +97,7 @@ static void char_stdio_test_subprocess(void)
>      ret = qemu_chr_fe_write(&be, (void *)"buf", 4);
>      g_assert_cmpint(ret, ==, 4);
>
> -    qemu_chr_fe_deinit(&be);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&be, true);
>  }
>
>  static void char_stdio_test(void)
> @@ -146,8 +145,7 @@ static void char_ringbuf_test(void)
>      g_assert_cmpstr(data, ==, "");
>      g_free(data);
>
> -    qemu_chr_fe_deinit(&be);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&be, true);
>
>      /* check alias */
>      opts = qemu_opts_create(qemu_find_opts("chardev"), "memory-label",
> @@ -231,9 +229,8 @@ static void char_mux_test(void)
>      g_assert_cmpint(strlen(data), !=, 0);
>      g_free(data);
>
> -    qemu_chr_fe_deinit(&chr_be1);
> -    qemu_chr_fe_deinit(&chr_be2);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&chr_be1, false);
> +    qemu_chr_fe_deinit(&chr_be2, true);
>  }
>
>  typedef struct SocketIdleData {
> @@ -396,8 +393,7 @@ static void char_pipe_test(void)
>      g_assert_cmpint(fe.read_count, ==, 8);
>      g_assert_cmpstr(fe.read_buf, ==, "pipe-in");
>
> -    qemu_chr_fe_deinit(&be);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&be, true);
>
>      g_assert(g_unlink(in) == 0);
>      g_assert(g_unlink(out) == 0);
> @@ -511,8 +507,7 @@ static void char_file_test(void)
>
>          g_assert_cmpint(fe.read_count, ==, 8);
>          g_assert_cmpstr(fe.read_buf, ==, "fifo-in");
> -        qemu_chr_fe_deinit(&be);
> -        object_unref(OBJECT(chr));
> +        qemu_chr_fe_deinit(&be, true);
>          g_unlink(fifo);
>          g_free(fifo);
>      }
> @@ -549,7 +544,7 @@ static void char_null_test(void)
>      error_free_or_abort(&err);
>
>      /* deinit & reinit */
> -    qemu_chr_fe_deinit(&be);
> +    qemu_chr_fe_deinit(&be, false);
>      qemu_chr_fe_init(&be, chr, &error_abort);
>
>      qemu_chr_fe_set_open(&be, true);
> @@ -563,8 +558,7 @@ static void char_null_test(void)
>      ret = qemu_chr_fe_write(&be, (void *)"buf", 4);
>      g_assert_cmpint(ret, ==, 4);
>
> -    qemu_chr_fe_deinit(&be);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&be, true);
>  }
>
>  static void char_invalid_test(void)
> diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
> index 4ca11ae28d..b3cc045765 100644
> --- a/tests/vhost-user-test.c
> +++ b/tests/vhost-user-test.c
> @@ -488,10 +488,8 @@ static inline void test_server_connect(TestServer *server)
>  static gboolean _test_server_free(TestServer *server)
>  {
>      int i;
> -    Chardev *chr = qemu_chr_fe_get_driver(&server->chr);
>
> -    qemu_chr_fe_deinit(&server->chr);
> -    object_unparent(OBJECT(chr));
> +    qemu_chr_fe_deinit(&server->chr, true);
>
>      for (i = 0; i < server->fds_num; i++) {
>          close(server->fds[i]);
>

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 11/14] char: move CharBackend handling in char-fe unit
  2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 11/14] char: move CharBackend handling in char-fe unit Marc-André Lureau
@ 2017-06-07 16:41     ` Anthony PERARD
  2017-06-07 16:41     ` Anthony PERARD
  1 sibling, 0 replies; 33+ messages in thread
From: Anthony PERARD @ 2017-06-07 16:41 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, pbonzini, f4bug, xen-devel

On Mon, May 29, 2017 at 12:45:43PM +0400, Marc-André Lureau wrote:
> Move all the fronted struct and methods to a seperate unit. This avoids
> accidentally mixing backend and frontend calls, and helps with readibilty.
> 
> Make qemu_chr_replay() a macro shared by both char and char-fe.
> 
> Export qemu_chr_write(), and use a macro for qemu_chr_write_all()
> 
> (nb: yes, CharBackend is for char frontend :)

Hi Marc-André,

Following this patch, we are not able anymore to launch QEMU with
-monitor /dev/null.
> qemu-system-i386: -monitor /dev/null: 'tty' is not a valid char driver name

FYI, the full command line used:
/usr/lib/xen/bin/qemu-system-i386 -xen-domid 0 \
    -xen-attach -name dom0 -nographic -M xenpv -daemonize \
    -monitor /dev/null -serial /dev/null -parallel /dev/null \
    -nodefaults -no-user-config \
    -pidfile /var/run/xen/qemu-dom0.pid

Regards,

-- 
Anthony PERARD

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 11/14] char: move CharBackend handling in char-fe unit
@ 2017-06-07 16:41     ` Anthony PERARD
  0 siblings, 0 replies; 33+ messages in thread
From: Anthony PERARD @ 2017-06-07 16:41 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: pbonzini, xen-devel, qemu-devel, f4bug

On Mon, May 29, 2017 at 12:45:43PM +0400, Marc-André Lureau wrote:
> Move all the fronted struct and methods to a seperate unit. This avoids
> accidentally mixing backend and frontend calls, and helps with readibilty.
> 
> Make qemu_chr_replay() a macro shared by both char and char-fe.
> 
> Export qemu_chr_write(), and use a macro for qemu_chr_write_all()
> 
> (nb: yes, CharBackend is for char frontend :)

Hi Marc-André,

Following this patch, we are not able anymore to launch QEMU with
-monitor /dev/null.
> qemu-system-i386: -monitor /dev/null: 'tty' is not a valid char driver name

FYI, the full command line used:
/usr/lib/xen/bin/qemu-system-i386 -xen-domid 0 \
    -xen-attach -name dom0 -nographic -M xenpv -daemonize \
    -monitor /dev/null -serial /dev/null -parallel /dev/null \
    -nodefaults -no-user-config \
    -pidfile /var/run/xen/qemu-dom0.pid

Regards,

-- 
Anthony PERARD

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 11/14] char: move CharBackend handling in char-fe unit
  2017-06-07 16:41     ` Anthony PERARD
@ 2017-06-07 17:20       ` Marc-André Lureau
  -1 siblings, 0 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-06-07 17:20 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: pbonzini, xen-devel, qemu-devel, f4bug

Hi

On Wed, Jun 7, 2017 at 8:57 PM Anthony PERARD <anthony.perard@citrix.com>
wrote:

> On Mon, May 29, 2017 at 12:45:43PM +0400, Marc-André Lureau wrote:
> > Move all the fronted struct and methods to a seperate unit. This avoids
> > accidentally mixing backend and frontend calls, and helps with
> readibilty.
> >
> > Make qemu_chr_replay() a macro shared by both char and char-fe.
> >
> > Export qemu_chr_write(), and use a macro for qemu_chr_write_all()
> >
> > (nb: yes, CharBackend is for char frontend :)
>
> Hi Marc-André,
>
> Following this patch, we are not able anymore to launch QEMU with
> -monitor /dev/null.
> > qemu-system-i386: -monitor /dev/null: 'tty' is not a valid char driver
> name
>
> FYI, the full command line used:
> /usr/lib/xen/bin/qemu-system-i386 -xen-domid 0 \
>     -xen-attach -name dom0 -nographic -M xenpv -daemonize \
>     -monitor /dev/null -serial /dev/null -parallel /dev/null \
>     -nodefaults -no-user-config \
>     -pidfile /var/run/xen/qemu-dom0.pid
>
>
My bad, and the worse is that CI actually gave me some hints of the
regression because the ChardevAlias array was empty.

I dropped char-serial.h and char-parellel.h in this patch, it shouldn't be.
I'll send fixes and add some tests.

Thanks for the report!
-- 
Marc-André Lureau

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Qemu-devel] [PATCH v2 11/14] char: move CharBackend handling in char-fe unit
@ 2017-06-07 17:20       ` Marc-André Lureau
  0 siblings, 0 replies; 33+ messages in thread
From: Marc-André Lureau @ 2017-06-07 17:20 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: pbonzini, f4bug, qemu-devel, xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 1325 bytes --]

Hi

On Wed, Jun 7, 2017 at 8:57 PM Anthony PERARD <anthony.perard@citrix.com>
wrote:

> On Mon, May 29, 2017 at 12:45:43PM +0400, Marc-André Lureau wrote:
> > Move all the fronted struct and methods to a seperate unit. This avoids
> > accidentally mixing backend and frontend calls, and helps with
> readibilty.
> >
> > Make qemu_chr_replay() a macro shared by both char and char-fe.
> >
> > Export qemu_chr_write(), and use a macro for qemu_chr_write_all()
> >
> > (nb: yes, CharBackend is for char frontend :)
>
> Hi Marc-André,
>
> Following this patch, we are not able anymore to launch QEMU with
> -monitor /dev/null.
> > qemu-system-i386: -monitor /dev/null: 'tty' is not a valid char driver
> name
>
> FYI, the full command line used:
> /usr/lib/xen/bin/qemu-system-i386 -xen-domid 0 \
>     -xen-attach -name dom0 -nographic -M xenpv -daemonize \
>     -monitor /dev/null -serial /dev/null -parallel /dev/null \
>     -nodefaults -no-user-config \
>     -pidfile /var/run/xen/qemu-dom0.pid
>
>
My bad, and the worse is that CI actually gave me some hints of the
regression because the ChardevAlias array was empty.

I dropped char-serial.h and char-parellel.h in this patch, it shouldn't be.
I'll send fixes and add some tests.

Thanks for the report!
-- 
Marc-André Lureau

[-- Attachment #1.2: Type: text/html, Size: 1814 bytes --]

[-- Attachment #2: Type: text/plain, Size: 127 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2017-06-07 17:21 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-29  8:45 [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups Marc-André Lureau
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 01/14] char-win: simplify win_chr_read() Marc-André Lureau
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 02/14] char-win: remove WinChardev.len Marc-André Lureau
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 03/14] char-win: rename win_chr_init/poll win_chr_serial_init/poll Marc-André Lureau
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 04/14] char-win: rename hcom->file Marc-André Lureau
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 05/14] char-win: close file handle except with console Marc-André Lureau
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 06/14] Remove/replace sysemu/char.h inclusion Marc-André Lureau
2017-05-29 20:57   ` Philippe Mathieu-Daudé
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 07/14] chardev: move headers to include/chardev Marc-André Lureau
2017-05-29 21:02   ` Philippe Mathieu-Daudé
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 08/14] chardev: serial & parallel declaration to own headers Marc-André Lureau
2017-05-29 21:03   ` Philippe Mathieu-Daudé
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 09/14] be-hci: use backend functions Marc-André Lureau
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 10/14] char: generalize qemu_chr_write_all() Marc-André Lureau
2017-05-29 21:09   ` Philippe Mathieu-Daudé
2017-05-30  5:59     ` Marc-André Lureau
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 11/14] char: move CharBackend handling in char-fe unit Marc-André Lureau
2017-05-29 21:25   ` Philippe Mathieu-Daudé
2017-06-07 16:41   ` Anthony PERARD
2017-06-07 16:41     ` Anthony PERARD
2017-06-07 17:20     ` Marc-André Lureau
2017-06-07 17:20       ` Marc-André Lureau
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 12/14] char: rename functions that are not part of fe Marc-André Lureau
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 13/14] char: make chr_fe_deinit() optionaly delete backend Marc-André Lureau
2017-05-31 13:09   ` Marc-André Lureau
2017-06-02  4:52   ` Philippe Mathieu-Daudé
2017-05-29  8:45 ` [Qemu-devel] [PATCH v2 14/14] char: move char devices to chardev/ Marc-André Lureau
2017-05-29 21:31   ` Philippe Mathieu-Daudé
2017-05-30 15:18     ` Eric Blake
2017-05-31 14:01       ` Philippe Mathieu-Daudé
2017-05-29  9:23 ` [Qemu-devel] [PATCH v2 00/14] chardev: misc clean-ups no-reply
2017-05-30 12:09   ` [Qemu-devel] [PATCH] char: cast ARRAY_SIZE() as signed to silent warning on empty array Philippe Mathieu-Daudé
2017-05-30 12:38     ` Marc-André Lureau

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.