All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up
@ 2017-08-23 16:19 Marc-André Lureau
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 01/27] glib-compat: move G_SOURCE_CONTINUE/REMOVE there Marc-André Lureau
                   ` (30 more replies)
  0 siblings, 31 replies; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Hi,

While reviewing vhost-user-blk, I realized a lot of code was based on
vhost-user-scsi, and I found a number of improvements could be
made. As a result in this series, I tried to move common glib code in
libvhost-user-glib. (I originally made libvhost-user glib-free, so if
external projects want to play with it, they don't have to depend on
glib, for ex vhost-user-bridge doesn't use glib).

I haven't done extensive testing, I tried to setup a LUN with help
from https://fedoraproject.org/wiki/Scsi-target-utils_Quickstart_Guide, but
the guest says "Unexpected response from lun 1 while scanning, scan
aborted" (before or after the series). Help welcome!

Thanks

Marc-André Lureau (27):
  glib-compat: move G_SOURCE_CONTINUE/REMOVE there
  libvhost-user: drop dependency on glib
  libvhost-user: improve vu_queue_pop() doc
  vhost-user-scsi: use g_strdup()
  vhost-user-scsi: connect unix socket before allocating
  vhost-user-scsi: code style fixes
  vhost-user-scsi: use glib allocation
  vhost-user-scsi: glib calls that allocate don't return NULL
  vhost-user-scsi: also free the gtree
  vhost-user-scsi: remove vdev_scsi_find_by_vu()
  vhost-user-scsi: simplify unix path cleanup
  vhost-user-scsi: use NULL pointer
  vhost-user-scsi: use glib watch directly
  vhost-user-scsi: assert() in iscsi_add_lun()
  vhost-user-scsi: remove vdev_scsi_add_iscsi_lun()
  vhost-user-scsi: remove VUS_MAX_LUNS
  vhost-user-scsi: remove unimplemented functions
  vhost-user-scsi: rename VUS types
  vhost-user-scsi: avoid use of iscsi_ namespace
  vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h
  vhost-user-scsi: drop extra callback pointer
  vhost-user-scsi: simplify source handling
  vhost-user-scsi: use glib logging
  libvhost-user: add glib source helper
  build-sys: fix libvhost-user.a build
  vhost-user-scsi: use libvhost-user glib helper
  vhost-user-scsi: remove server_sock from VusDev

 contrib/libvhost-user/libvhost-user-glib.h |  32 ++
 contrib/libvhost-user/libvhost-user.h      |   3 +-
 include/glib-compat.h                      |   7 +
 contrib/libvhost-user/libvhost-user-glib.c | 145 +++++++
 contrib/libvhost-user/libvhost-user.c      |  25 +-
 contrib/vhost-user-scsi/vhost-user-scsi.c  | 619 +++++------------------------
 Makefile                                   |   3 +-
 Makefile.objs                              |   3 +-
 contrib/libvhost-user/Makefile.objs        |   2 +-
 tests/Makefile.include                     |   2 +-
 10 files changed, 320 insertions(+), 521 deletions(-)
 create mode 100644 contrib/libvhost-user/libvhost-user-glib.h
 create mode 100644 contrib/libvhost-user/libvhost-user-glib.c

-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 01/27] glib-compat: move G_SOURCE_CONTINUE/REMOVE there
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-09-12 12:22   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 02/27] libvhost-user: drop dependency on glib Marc-André Lureau
                   ` (29 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/glib-compat.h                     | 7 +++++++
 contrib/vhost-user-scsi/vhost-user-scsi.c | 8 --------
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/include/glib-compat.h b/include/glib-compat.h
index fcffcd3f07..d35d641b7f 100644
--- a/include/glib-compat.h
+++ b/include/glib-compat.h
@@ -354,5 +354,12 @@ g_test_add_data_func_full(const char *path,
 }
 #endif
 
+/* Small compat shim from glib 2.32 */
+#ifndef G_SOURCE_CONTINUE
+#define G_SOURCE_CONTINUE TRUE
+#endif
+#ifndef G_SOURCE_REMOVE
+#define G_SOURCE_REMOVE FALSE
+#endif
 
 #endif
diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index b5ae02c96f..78bcc65f5a 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -17,14 +17,6 @@
 
 #include <glib.h>
 
-/* Small compat shim from glib 2.32 */
-#ifndef G_SOURCE_CONTINUE
-#define G_SOURCE_CONTINUE TRUE
-#endif
-#ifndef G_SOURCE_REMOVE
-#define G_SOURCE_REMOVE FALSE
-#endif
-
 /* #define VUS_DEBUG 1 */
 
 /** Log helpers **/
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 02/27] libvhost-user: drop dependency on glib
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 01/27] glib-compat: move G_SOURCE_CONTINUE/REMOVE there Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-09-12 12:24   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 03/27] libvhost-user: improve vu_queue_pop() doc Marc-André Lureau
                   ` (28 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

libvhost-user is meant to be free of glib dependency. Make sure it is
by droping qemu/osdep.h (which included glib.h)

This fixes a bad malloc()/g_free() pair.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/libvhost-user/libvhost-user.c | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/contrib/libvhost-user/libvhost-user.c b/contrib/libvhost-user/libvhost-user.c
index 35fa0c5e56..bb294c6ef7 100644
--- a/contrib/libvhost-user/libvhost-user.c
+++ b/contrib/libvhost-user/libvhost-user.c
@@ -13,11 +13,22 @@
  * later.  See the COPYING file in the top-level directory.
  */
 
-#include <qemu/osdep.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <string.h>
+#include <assert.h>
+#include <inttypes.h>
+#include <sys/types.h>
+#include <sys/socket.h>
 #include <sys/eventfd.h>
+#include <sys/mman.h>
 #include <linux/vhost.h>
 
 #include "qemu/atomic.h"
+#include "qemu/compiler.h"
 
 #include "libvhost-user.h"
 
@@ -34,6 +45,14 @@
         }                                       \
     } while (0)
 
+#ifndef MIN
+#define MIN(x, y) ({                            \
+        typeof(x) _min1 = (x);                  \
+        typeof(y) _min2 = (y);                  \
+        (void) (&_min1 == &_min2);              \
+        _min1 < _min2 ? _min1 : _min2; })
+#endif
+
 static const char *
 vu_request_to_string(int req)
 {
@@ -81,7 +100,7 @@ vu_panic(VuDev *dev, const char *msg, ...)
     va_list ap;
 
     va_start(ap, msg);
-    buf = g_strdup_vprintf(msg, ap);
+    vasprintf(&buf, msg, ap);
     va_end(ap);
 
     dev->broken = true;
@@ -840,7 +859,7 @@ vu_dispatch(VuDev *dev)
     success = true;
 
 end:
-    g_free(vmsg.data);
+    free(vmsg.data);
     return success;
 }
 
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 03/27] libvhost-user: improve vu_queue_pop() doc
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 01/27] glib-compat: move G_SOURCE_CONTINUE/REMOVE there Marc-André Lureau
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 02/27] libvhost-user: drop dependency on glib Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-09-19 13:43   ` Paolo Bonzini
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 04/27] vhost-user-scsi: use g_strdup() Marc-André Lureau
                   ` (27 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/libvhost-user/libvhost-user.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/contrib/libvhost-user/libvhost-user.h b/contrib/libvhost-user/libvhost-user.h
index 53ef222c0b..9b9b00e191 100644
--- a/contrib/libvhost-user/libvhost-user.h
+++ b/contrib/libvhost-user/libvhost-user.h
@@ -351,7 +351,8 @@ void vu_queue_notify(VuDev *dev, VuVirtq *vq);
  * @vq: a VuVirtq queue
  * @sz: the size of struct to return (must be >= VuVirtqElement)
  *
- * Returns: a VuVirtqElement filled from the queue or NULL.
+ * Returns: a VuVirtqElement filled from the queue or NULL. The
+ * returned element must be free() by the caller.
  */
 void *vu_queue_pop(VuDev *dev, VuVirtq *vq, size_t sz);
 
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 04/27] vhost-user-scsi: use g_strdup()
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (2 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 03/27] libvhost-user: improve vu_queue_pop() doc Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-08-23 17:50   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 05/27] vhost-user-scsi: connect unix socket before allocating Marc-André Lureau
                   ` (26 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Since vhost-user-scsi uses glib.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 78bcc65f5a..1fb57da2da 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -822,10 +822,10 @@ int main(int argc, char **argv)
         case 'h':
             goto help;
         case 'u':
-            unix_fn = strdup(optarg);
+            unix_fn = g_strdup(optarg);
             break;
         case 'i':
-            iscsi_uri = strdup(optarg);
+            iscsi_uri = g_strdup(optarg);
             break;
         default:
             goto help;
@@ -854,12 +854,8 @@ out:
         vdev_scsi_deinit(vdev_scsi);
         free(vdev_scsi);
     }
-    if (unix_fn) {
-        free(unix_fn);
-    }
-    if (iscsi_uri) {
-        free(iscsi_uri);
-    }
+    g_free(unix_fn);
+    g_free(iscsi_uri);
 
     return err;
 
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 05/27] vhost-user-scsi: connect unix socket before allocating
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (3 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 04/27] vhost-user-scsi: use g_strdup() Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-09-12 16:37   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 06/27] vhost-user-scsi: code style fixes Marc-André Lureau
                   ` (25 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

This simplify a little bit memory management in the following patches.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 1fb57da2da..cddaaf8995 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -715,11 +715,11 @@ static void vdev_scsi_deinit(vhost_scsi_dev_t *vdev_scsi)
     }
 }
 
-static vhost_scsi_dev_t *vdev_scsi_new(char *unix_fn)
+static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
 {
     vhost_scsi_dev_t *vdev_scsi = NULL;
 
-    assert(unix_fn);
+    assert(server_sock >= 0);
 
     vdev_scsi = calloc(1, sizeof(vhost_scsi_dev_t));
     if (!vdev_scsi) {
@@ -727,11 +727,7 @@ static vhost_scsi_dev_t *vdev_scsi_new(char *unix_fn)
         return NULL;
     }
 
-    vdev_scsi->server_sock = unix_sock_new(unix_fn);
-    if (vdev_scsi->server_sock < 0) {
-        goto err;
-    }
-
+    vdev_scsi->server_sock = server_sock;
     vdev_scsi->loop = g_main_loop_new(NULL, FALSE);
     if (!vdev_scsi->loop) {
         PERR("Error creating glib event loop");
@@ -815,7 +811,7 @@ int main(int argc, char **argv)
     vhost_scsi_dev_t *vdev_scsi = NULL;
     char *unix_fn = NULL;
     char *iscsi_uri = NULL;
-    int opt, err = EXIT_SUCCESS;
+    int sock, opt, err = EXIT_SUCCESS;
 
     while ((opt = getopt(argc, argv, "u:i:")) != -1) {
         switch (opt) {
@@ -835,7 +831,11 @@ int main(int argc, char **argv)
         goto help;
     }
 
-    vdev_scsi = vdev_scsi_new(unix_fn);
+    sock = unix_sock_new(unix_fn);
+    if (sock < 0) {
+        goto err;
+    }
+    vdev_scsi = vdev_scsi_new(sock);
     if (!vdev_scsi) {
         goto err;
     }
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 06/27] vhost-user-scsi: code style fixes
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (4 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 05/27] vhost-user-scsi: connect unix socket before allocating Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-08-24  2:54   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 07/27] vhost-user-scsi: use glib allocation Marc-André Lureau
                   ` (24 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index cddaaf8995..8d6ff18cc4 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -305,7 +305,8 @@ fail:
 }
 
 static struct scsi_task *scsi_task_new(int cdb_len, uint8_t *cdb, int dir,
-                                       int xfer_len) {
+                                       int xfer_len)
+{
     struct scsi_task *task;
 
     assert(cdb_len > 0);
@@ -344,7 +345,8 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
                            VirtIOSCSICmdReq *req,
                            struct iovec *out, unsigned int out_len,
                            VirtIOSCSICmdResp *rsp,
-                           struct iovec *in, unsigned int in_len) {
+                           struct iovec *in, unsigned int in_len)
+{
     struct scsi_task *task;
     uint32_t dir;
     uint32_t len;
@@ -454,7 +456,8 @@ static void vus_panic_cb(VuDev *vu_dev, const char *buf)
 }
 
 static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
-                             void *pvt) {
+                             void *pvt)
+{
     vhost_scsi_dev_t *vdev_scsi;
     guint id;
 
@@ -529,7 +532,7 @@ static void vus_proc_req(VuDev *vu_dev, int idx)
         return;
     }
 
-    if ((idx < 0) || (idx >= VHOST_MAX_NR_VIRTQUEUE)) {
+    if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
         PERR("VQ Index out of range: %d", idx);
         vus_panic_cb(vu_dev, NULL);
         return;
@@ -556,8 +559,8 @@ static void vus_proc_req(VuDev *vu_dev, int idx)
         }
         PDBG("Popped elem@%p", elem);
 
-        assert(!((elem->out_num > 1) && (elem->in_num > 1)));
-        assert((elem->out_num > 0) && (elem->in_num > 0));
+        assert(!(elem->out_num > 1 && elem->in_num > 1));
+        assert(elem->out_num > 0 && elem->in_num > 0);
 
         if (elem->out_sg[0].iov_len < sizeof(VirtIOSCSICmdReq)) {
             PERR("Invalid virtio-scsi req header");
@@ -593,7 +596,7 @@ static void vus_queue_set_started(VuDev *vu_dev, int idx, bool started)
 
     assert(vu_dev);
 
-    if ((idx < 0) || (idx >= VHOST_MAX_NR_VIRTQUEUE)) {
+    if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
         PERR("VQ Index out of range: %d", idx);
         vus_panic_cb(vu_dev, NULL);
         return;
@@ -750,7 +753,8 @@ err:
 }
 
 static int vdev_scsi_add_iscsi_lun(vhost_scsi_dev_t *vdev_scsi,
-                                   char *iscsi_uri, uint32_t lun) {
+                                   char *iscsi_uri, uint32_t lun)
+{
     assert(vdev_scsi);
     assert(iscsi_uri);
     assert(lun < VUS_MAX_LUNS);
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 07/27] vhost-user-scsi: use glib allocation
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (5 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 06/27] vhost-user-scsi: code style fixes Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-08-23 17:53   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 08/27] vhost-user-scsi: glib calls that allocate don't return NULL Marc-André Lureau
                   ` (23 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Use g_new/g_free instead of plain malloc. This simplify a bit memory
handling since glib will abort if it cannot allocate.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 35 ++++++++-----------------------
 1 file changed, 9 insertions(+), 26 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 8d6ff18cc4..f3fc8c23c6 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -312,12 +312,7 @@ static struct scsi_task *scsi_task_new(int cdb_len, uint8_t *cdb, int dir,
     assert(cdb_len > 0);
     assert(cdb);
 
-    task = calloc(1, sizeof(struct scsi_task));
-    if (!task) {
-        PERR("Error allocating task: %s", strerror(errno));
-        return NULL;
-    }
-
+    task = g_new0(struct scsi_task, 1);
     memcpy(task->cdb, cdb, cdb_len);
     task->cdb_size = cdb_len;
     task->xfer_dir = dir;
@@ -393,10 +388,6 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
     }
 
     task = scsi_task_new(cdb_len, req->cdb, dir, len);
-    if (!task) {
-        PERR("Unable to create iscsi task");
-        return -1;
-    }
 
     if (dir == SCSI_XFER_TO_DEV) {
         task->iovector_out.iov = (struct scsi_iovec *)out;
@@ -410,7 +401,7 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
          cdb_len, dir, task);
     if (!iscsi_scsi_command_sync(ctx, 0, task, NULL)) {
         PERR("Error serving SCSI command");
-        free(task);
+        g_free(task);
         return -1;
     }
 
@@ -425,7 +416,7 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
         memcpy(rsp->sense, &task->datain.data[2], rsp->sense_len);
     }
 
-    free(task);
+    g_free(task);
 
     PDBG("Filled in rsp: status=%hhX, resid=%u, response=%hhX, sense_len=%u",
          rsp->status, rsp->resid, rsp->response, rsp->sense_len);
@@ -692,7 +683,7 @@ static vhost_scsi_dev_t *vdev_scsi_find_by_vu(VuDev *vu_dev)
     return NULL;
 }
 
-static void vdev_scsi_deinit(vhost_scsi_dev_t *vdev_scsi)
+static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
 {
     if (!vdev_scsi) {
         return;
@@ -716,20 +707,16 @@ static void vdev_scsi_deinit(vhost_scsi_dev_t *vdev_scsi)
         g_main_loop_unref(vdev_scsi->loop);
         vdev_scsi->loop = NULL;
     }
+    g_free(vdev_scsi);
 }
 
 static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
 {
-    vhost_scsi_dev_t *vdev_scsi = NULL;
+    vhost_scsi_dev_t *vdev_scsi;
 
     assert(server_sock >= 0);
 
-    vdev_scsi = calloc(1, sizeof(vhost_scsi_dev_t));
-    if (!vdev_scsi) {
-        PERR("calloc: %s", strerror(errno));
-        return NULL;
-    }
-
+    vdev_scsi = g_new0(vhost_scsi_dev_t, 1);
     vdev_scsi->server_sock = server_sock;
     vdev_scsi->loop = g_main_loop_new(NULL, FALSE);
     if (!vdev_scsi->loop) {
@@ -746,8 +733,7 @@ static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
     return vdev_scsi;
 
 err:
-    vdev_scsi_deinit(vdev_scsi);
-    free(vdev_scsi);
+    vdev_scsi_free(vdev_scsi);
 
     return NULL;
 }
@@ -854,10 +840,7 @@ int main(int argc, char **argv)
     }
 
 out:
-    if (vdev_scsi) {
-        vdev_scsi_deinit(vdev_scsi);
-        free(vdev_scsi);
-    }
+    vdev_scsi_free(vdev_scsi);
     g_free(unix_fn);
     g_free(iscsi_uri);
 
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 08/27] vhost-user-scsi: glib calls that allocate don't return NULL
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (6 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 07/27] vhost-user-scsi: use glib allocation Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-09-19 13:44   ` Paolo Bonzini
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 09/27] vhost-user-scsi: also free the gtree Marc-André Lureau
                   ` (22 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

They abort instead, so get rid of failure conditions.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 52 +++++--------------------------
 1 file changed, 7 insertions(+), 45 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index f3fc8c23c6..5f8ff9d9e5 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -139,8 +139,8 @@ static GSourceFuncs vus_gsrc_funcs = {
     NULL
 };
 
-static int vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
-                        vu_watch_cb vu_cb, GSourceFunc gsrc_cb, gpointer data)
+static void vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
+                         vu_watch_cb vu_cb, GSourceFunc gsrc_cb, gpointer data)
 {
     GSource *vus_gsrc;
     vus_gsrc_t *vus_src;
@@ -152,10 +152,6 @@ static int vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
     assert(!(vu_cb && gsrc_cb));
 
     vus_gsrc = g_source_new(&vus_gsrc_funcs, sizeof(vus_gsrc_t));
-    if (!vus_gsrc) {
-        PERR("Error creating GSource for new watch");
-        return -1;
-    }
     vus_src = (vus_gsrc_t *)vus_gsrc;
 
     vus_src->vdev_scsi = vdev_scsi;
@@ -171,8 +167,6 @@ static int vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
 
     g_tree_insert(vdev_scsi->fdmap, (gpointer)(uintptr_t)fd,
                                     (gpointer)(uintptr_t)id);
-
-    return 0;
 }
 
 /* from libiscsi's scsi-lowlevel.h **
@@ -440,10 +434,7 @@ static void vus_panic_cb(VuDev *vu_dev, const char *buf)
         PERR("vu_panic: %s", buf);
     }
 
-    if (vdev_scsi) {
-        assert(vdev_scsi->loop);
-        g_main_loop_quit(vdev_scsi->loop);
-    }
+    g_main_loop_quit(vdev_scsi->loop);
 }
 
 static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
@@ -471,9 +462,7 @@ static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
         (void)g_tree_remove(vdev_scsi->fdmap, (gpointer)(uintptr_t)fd);
     }
 
-    if (vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, NULL, pvt)) {
-        vus_panic_cb(vu_dev, NULL);
-    }
+    vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, NULL, pvt);
 }
 
 static void vus_del_watch_cb(VuDev *vu_dev, int fd)
@@ -703,10 +692,7 @@ static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
         vdev_scsi->server_sock = -1;
     }
 
-    if (vdev_scsi->loop) {
-        g_main_loop_unref(vdev_scsi->loop);
-        vdev_scsi->loop = NULL;
-    }
+    g_main_loop_unref(vdev_scsi->loop);
     g_free(vdev_scsi);
 }
 
@@ -719,23 +705,9 @@ static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
     vdev_scsi = g_new0(vhost_scsi_dev_t, 1);
     vdev_scsi->server_sock = server_sock;
     vdev_scsi->loop = g_main_loop_new(NULL, FALSE);
-    if (!vdev_scsi->loop) {
-        PERR("Error creating glib event loop");
-        goto err;
-    }
-
     vdev_scsi->fdmap = g_tree_new(vus_fdmap_compare);
-    if (!vdev_scsi->fdmap) {
-        PERR("Error creating glib tree for fdmap");
-        goto err;
-    }
 
     return vdev_scsi;
-
-err:
-    vdev_scsi_free(vdev_scsi);
-
-    return NULL;
 }
 
 static int vdev_scsi_add_iscsi_lun(vhost_scsi_dev_t *vdev_scsi,
@@ -779,21 +751,14 @@ static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
             vus_del_watch_cb,
             &vus_iface);
 
-    if (vus_gsrc_new(vdev_scsi, cli_sock, G_IO_IN, NULL, vus_vhost_cb,
-                     &vdev_scsi->vu_dev)) {
-        goto fail;
-    }
+    vus_gsrc_new(vdev_scsi, cli_sock, G_IO_IN, NULL, vus_vhost_cb,
+                 &vdev_scsi->vu_dev);
 
     g_main_loop_run(vdev_scsi->loop);
 
-out:
     vu_deinit(&vdev_scsi->vu_dev);
 
     return ret;
-
-fail:
-    ret = -1;
-    goto out;
 }
 
 int main(int argc, char **argv)
@@ -826,9 +791,6 @@ int main(int argc, char **argv)
         goto err;
     }
     vdev_scsi = vdev_scsi_new(sock);
-    if (!vdev_scsi) {
-        goto err;
-    }
     vhost_scsi_devs[0] = vdev_scsi;
 
     if (vdev_scsi_add_iscsi_lun(vdev_scsi, iscsi_uri, 0) != 0) {
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 09/27] vhost-user-scsi: also free the gtree
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (7 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 08/27] vhost-user-scsi: glib calls that allocate don't return NULL Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-09-12 16:40   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 10/27] vhost-user-scsi: remove vdev_scsi_find_by_vu() Marc-André Lureau
                   ` (21 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 5f8ff9d9e5..d0456a5e7c 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -693,6 +693,7 @@ static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
     }
 
     g_main_loop_unref(vdev_scsi->loop);
+    g_tree_destroy(vdev_scsi->fdmap);
     g_free(vdev_scsi);
 }
 
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 10/27] vhost-user-scsi: remove vdev_scsi_find_by_vu()
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (8 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 09/27] vhost-user-scsi: also free the gtree Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-09-19 13:44   ` Paolo Bonzini
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 11/27] vhost-user-scsi: simplify unix path cleanup Marc-André Lureau
                   ` (20 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

The *dev pointer belongs to the vhost_scsi_dev_t parent.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 47 +++----------------------------
 1 file changed, 4 insertions(+), 43 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index d0456a5e7c..bb10848cd2 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -55,8 +55,6 @@
 
  /* Only 1 LUN and device supported today */
 #define VUS_MAX_LUNS 1
-#define VUS_MAX_DEVS 1
-
 #define VUS_ISCSI_INITIATOR "iqn.2016-11.com.nutanix:vhost-user-scsi"
 
 typedef struct iscsi_lun {
@@ -72,8 +70,6 @@ typedef struct vhost_scsi_dev {
     iscsi_lun_t luns[VUS_MAX_LUNS];
 } vhost_scsi_dev_t;
 
-static vhost_scsi_dev_t *vhost_scsi_devs[VUS_MAX_DEVS];
-
 /** glib event loop integration for libvhost-user and misc callbacks **/
 
 QEMU_BUILD_BUG_ON((int)G_IO_IN != (int)VU_WATCH_IN);
@@ -420,16 +416,13 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
 
 /** libvhost-user callbacks **/
 
-static vhost_scsi_dev_t *vdev_scsi_find_by_vu(VuDev *vu_dev);
-
 static void vus_panic_cb(VuDev *vu_dev, const char *buf)
 {
     vhost_scsi_dev_t *vdev_scsi;
 
     assert(vu_dev);
 
-    vdev_scsi = vdev_scsi_find_by_vu(vu_dev);
-
+    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
     if (buf) {
         PERR("vu_panic: %s", buf);
     }
@@ -447,12 +440,7 @@ static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
     assert(fd >= 0);
     assert(cb);
 
-    vdev_scsi = vdev_scsi_find_by_vu(vu_dev);
-    if (!vdev_scsi) {
-        vus_panic_cb(vu_dev, NULL);
-        return;
-    }
-
+    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
     id = (guint)(uintptr_t)g_tree_lookup(vdev_scsi->fdmap,
                                          (gpointer)(uintptr_t)fd);
     if (id) {
@@ -473,12 +461,7 @@ static void vus_del_watch_cb(VuDev *vu_dev, int fd)
     assert(vu_dev);
     assert(fd >= 0);
 
-    vdev_scsi = vdev_scsi_find_by_vu(vu_dev);
-    if (!vdev_scsi) {
-        vus_panic_cb(vu_dev, NULL);
-        return;
-    }
-
+    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
     id = (guint)(uintptr_t)g_tree_lookup(vdev_scsi->fdmap,
                                          (gpointer)(uintptr_t)fd);
     if (id) {
@@ -506,12 +489,7 @@ static void vus_proc_req(VuDev *vu_dev, int idx)
 
     assert(vu_dev);
 
-    vdev_scsi = vdev_scsi_find_by_vu(vu_dev);
-    if (!vdev_scsi) {
-        vus_panic_cb(vu_dev, NULL);
-        return;
-    }
-
+    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
     if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
         PERR("VQ Index out of range: %d", idx);
         vus_panic_cb(vu_dev, NULL);
@@ -656,22 +634,6 @@ fail:
 
 /** vhost-user-scsi **/
 
-static vhost_scsi_dev_t *vdev_scsi_find_by_vu(VuDev *vu_dev)
-{
-    int i;
-
-    assert(vu_dev);
-
-    for (i = 0; i < VUS_MAX_DEVS; i++) {
-        if (&vhost_scsi_devs[i]->vu_dev == vu_dev) {
-            return vhost_scsi_devs[i];
-        }
-    }
-
-    PERR("Unknown VuDev %p", vu_dev);
-    return NULL;
-}
-
 static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
 {
     if (!vdev_scsi) {
@@ -792,7 +754,6 @@ int main(int argc, char **argv)
         goto err;
     }
     vdev_scsi = vdev_scsi_new(sock);
-    vhost_scsi_devs[0] = vdev_scsi;
 
     if (vdev_scsi_add_iscsi_lun(vdev_scsi, iscsi_uri, 0) != 0) {
         goto err;
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 11/27] vhost-user-scsi: simplify unix path cleanup
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (9 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 10/27] vhost-user-scsi: remove vdev_scsi_find_by_vu() Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-09-19 13:45   ` Paolo Bonzini
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 12/27] vhost-user-scsi: use NULL pointer Marc-André Lureau
                   ` (19 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Always remove the unix path when leaving the program (instead of when
freeing scsi_dev). Note that unix_sock_new() also unlink() exisiting
path before creating the socket.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 22 +++++-----------------
 1 file changed, 5 insertions(+), 17 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index bb10848cd2..624efc24ca 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -636,24 +636,9 @@ fail:
 
 static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
 {
-    if (!vdev_scsi) {
-        return;
-    }
-
     if (vdev_scsi->server_sock >= 0) {
-        struct sockaddr_storage ss;
-        socklen_t sslen = sizeof(ss);
-
-        if (getsockname(vdev_scsi->server_sock, (struct sockaddr *)&ss,
-                        &sslen) == 0) {
-            struct sockaddr_un *su = (struct sockaddr_un *)&ss;
-            (void)unlink(su->sun_path);
-        }
-
-        (void)close(vdev_scsi->server_sock);
-        vdev_scsi->server_sock = -1;
+        close(vdev_scsi->server_sock);
     }
-
     g_main_loop_unref(vdev_scsi->loop);
     g_tree_destroy(vdev_scsi->fdmap);
     g_free(vdev_scsi);
@@ -764,7 +749,10 @@ int main(int argc, char **argv)
     }
 
 out:
-    vdev_scsi_free(vdev_scsi);
+    if (vdev_scsi) {
+        vdev_scsi_free(vdev_scsi);
+        unlink(unix_fn);
+    }
     g_free(unix_fn);
     g_free(iscsi_uri);
 
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 12/27] vhost-user-scsi: use NULL pointer
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (10 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 11/27] vhost-user-scsi: simplify unix path cleanup Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-08-23 17:47   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 13/27] vhost-user-scsi: use glib watch directly Marc-André Lureau
                   ` (18 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 624efc24ca..596c1effa1 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -686,7 +686,7 @@ static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
     assert(vdev_scsi->server_sock >= 0);
     assert(vdev_scsi->loop);
 
-    cli_sock = accept(vdev_scsi->server_sock, (void *)0, (void *)0);
+    cli_sock = accept(vdev_scsi->server_sock, NULL, NULL);
     if (cli_sock < 0) {
         perror("accept");
         return -1;
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 13/27] vhost-user-scsi: use glib watch directly
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (11 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 12/27] vhost-user-scsi: use NULL pointer Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-09-19 13:54   ` Paolo Bonzini
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 14/27] vhost-user-scsi: assert() in iscsi_add_lun() Marc-André Lureau
                   ` (17 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

The following patches is going to remove the custom VUS source.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 596c1effa1..b40009e234 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -136,7 +136,7 @@ static GSourceFuncs vus_gsrc_funcs = {
 };
 
 static void vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
-                         vu_watch_cb vu_cb, GSourceFunc gsrc_cb, gpointer data)
+                         vu_watch_cb vu_cb, gpointer data)
 {
     GSource *vus_gsrc;
     vus_gsrc_t *vus_src;
@@ -144,8 +144,7 @@ static void vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
 
     assert(vdev_scsi);
     assert(fd >= 0);
-    assert(vu_cb || gsrc_cb);
-    assert(!(vu_cb && gsrc_cb));
+    assert(vu_cb);
 
     vus_gsrc = g_source_new(&vus_gsrc_funcs, sizeof(vus_gsrc_t));
     vus_src = (vus_gsrc_t *)vus_gsrc;
@@ -156,7 +155,6 @@ static void vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
     vus_src->vu_cb = vu_cb;
 
     g_source_add_poll(vus_gsrc, &vus_src->gfd);
-    g_source_set_callback(vus_gsrc, gsrc_cb, data, NULL);
     id = g_source_attach(vus_gsrc, NULL);
     assert(id);
     g_source_unref(vus_gsrc);
@@ -450,7 +448,7 @@ static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
         (void)g_tree_remove(vdev_scsi->fdmap, (gpointer)(uintptr_t)fd);
     }
 
-    vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, NULL, pvt);
+    vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, pvt);
 }
 
 static void vus_del_watch_cb(VuDev *vu_dev, int fd)
@@ -578,7 +576,8 @@ static const VuDevIface vus_iface = {
     .queue_set_started = vus_queue_set_started,
 };
 
-static gboolean vus_vhost_cb(gpointer data)
+static gboolean vus_vhost_cb(GIOChannel *source, GIOCondition condition,
+                             gpointer data)
 {
     VuDev *vu_dev = (VuDev *)data;
 
@@ -679,6 +678,7 @@ static int vdev_scsi_add_iscsi_lun(vhost_scsi_dev_t *vdev_scsi,
 
 static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
 {
+    GIOChannel *chan;
     int cli_sock;
     int ret = 0;
 
@@ -699,10 +699,10 @@ static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
             vus_del_watch_cb,
             &vus_iface);
 
-    vus_gsrc_new(vdev_scsi, cli_sock, G_IO_IN, NULL, vus_vhost_cb,
-                 &vdev_scsi->vu_dev);
-
+    chan = g_io_channel_unix_new(cli_sock);
+    g_io_add_watch(chan, G_IO_IN, vus_vhost_cb, &vdev_scsi->vu_dev);
     g_main_loop_run(vdev_scsi->loop);
+    g_io_channel_unref(chan);
 
     vu_deinit(&vdev_scsi->vu_dev);
 
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 14/27] vhost-user-scsi: assert() in iscsi_add_lun()
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (12 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 13/27] vhost-user-scsi: use glib watch directly Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-08-23 17:56   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 15/27] vhost-user-scsi: remove vdev_scsi_add_iscsi_lun() Marc-André Lureau
                   ` (16 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Instead of a preliminary check, add an assert to the function that has
the pre-condition.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index b40009e234..988417393f 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -255,6 +255,7 @@ static int iscsi_add_lun(iscsi_lun_t *lun, char *iscsi_uri)
 
     assert(lun);
     assert(iscsi_uri);
+    assert(!lun->iscsi_ctx);
 
     iscsi_ctx = iscsi_create_context(VUS_ISCSI_INITIATOR);
     if (!iscsi_ctx) {
@@ -664,11 +665,6 @@ static int vdev_scsi_add_iscsi_lun(vhost_scsi_dev_t *vdev_scsi,
     assert(iscsi_uri);
     assert(lun < VUS_MAX_LUNS);
 
-    if (vdev_scsi->luns[lun].iscsi_ctx) {
-        PERR("Lun %d already configured", lun);
-        return -1;
-    }
-
     if (iscsi_add_lun(&vdev_scsi->luns[lun], iscsi_uri) != 0) {
         return -1;
     }
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 15/27] vhost-user-scsi: remove vdev_scsi_add_iscsi_lun()
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (13 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 14/27] vhost-user-scsi: assert() in iscsi_add_lun() Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-08-23 17:57   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 16/27] vhost-user-scsi: remove VUS_MAX_LUNS Marc-André Lureau
                   ` (15 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 16 +---------------
 1 file changed, 1 insertion(+), 15 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 988417393f..f6f9e7b192 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -658,20 +658,6 @@ static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
     return vdev_scsi;
 }
 
-static int vdev_scsi_add_iscsi_lun(vhost_scsi_dev_t *vdev_scsi,
-                                   char *iscsi_uri, uint32_t lun)
-{
-    assert(vdev_scsi);
-    assert(iscsi_uri);
-    assert(lun < VUS_MAX_LUNS);
-
-    if (iscsi_add_lun(&vdev_scsi->luns[lun], iscsi_uri) != 0) {
-        return -1;
-    }
-
-    return 0;
-}
-
 static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
 {
     GIOChannel *chan;
@@ -736,7 +722,7 @@ int main(int argc, char **argv)
     }
     vdev_scsi = vdev_scsi_new(sock);
 
-    if (vdev_scsi_add_iscsi_lun(vdev_scsi, iscsi_uri, 0) != 0) {
+    if (iscsi_add_lun(&vdev_scsi->luns[0], iscsi_uri) != 0) {
         goto err;
     }
 
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 16/27] vhost-user-scsi: remove VUS_MAX_LUNS
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (14 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 15/27] vhost-user-scsi: remove vdev_scsi_add_iscsi_lun() Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-08-24  0:08   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 17/27] vhost-user-scsi: remove unimplemented functions Marc-André Lureau
                   ` (14 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

There is no code to support more than 1 yet, no need for that today.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index f6f9e7b192..429e3065ea 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -53,8 +53,6 @@
 
 /** vhost-user-scsi specific definitions **/
 
- /* Only 1 LUN and device supported today */
-#define VUS_MAX_LUNS 1
 #define VUS_ISCSI_INITIATOR "iqn.2016-11.com.nutanix:vhost-user-scsi"
 
 typedef struct iscsi_lun {
@@ -67,7 +65,7 @@ typedef struct vhost_scsi_dev {
     int server_sock;
     GMainLoop *loop;
     GTree *fdmap;   /* fd -> gsource context id */
-    iscsi_lun_t luns[VUS_MAX_LUNS];
+    iscsi_lun_t lun;
 } vhost_scsi_dev_t;
 
 /** glib event loop integration for libvhost-user and misc callbacks **/
@@ -533,7 +531,7 @@ static void vus_proc_req(VuDev *vu_dev, int idx)
         }
         rsp = (VirtIOSCSICmdResp *)elem->in_sg[0].iov_base;
 
-        if (handle_cmd_sync(vdev_scsi->luns[0].iscsi_ctx,
+        if (handle_cmd_sync(vdev_scsi->lun.iscsi_ctx,
                             req, &elem->out_sg[1], elem->out_num - 1,
                             rsp, &elem->in_sg[1], elem->in_num - 1) != 0) {
             vus_panic_cb(vu_dev, NULL);
@@ -722,7 +720,7 @@ int main(int argc, char **argv)
     }
     vdev_scsi = vdev_scsi_new(sock);
 
-    if (iscsi_add_lun(&vdev_scsi->luns[0], iscsi_uri) != 0) {
+    if (iscsi_add_lun(&vdev_scsi->lun, iscsi_uri) != 0) {
         goto err;
     }
 
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 17/27] vhost-user-scsi: remove unimplemented functions
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (15 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 16/27] vhost-user-scsi: remove VUS_MAX_LUNS Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-09-19 13:54   ` Paolo Bonzini
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 18/27] vhost-user-scsi: rename VUS types Marc-André Lureau
                   ` (13 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 21 +++------------------
 1 file changed, 3 insertions(+), 18 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 429e3065ea..882d887a32 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -469,16 +469,6 @@ static void vus_del_watch_cb(VuDev *vu_dev, int fd)
     }
 }
 
-static void vus_proc_ctl(VuDev *vu_dev, int idx)
-{
-    /* Control VQ not implemented */
-}
-
-static void vus_proc_evt(VuDev *vu_dev, int idx)
-{
-    /* Event VQ not implemented */
-}
-
 static void vus_proc_req(VuDev *vu_dev, int idx)
 {
     vhost_scsi_dev_t *vdev_scsi;
@@ -559,14 +549,9 @@ static void vus_queue_set_started(VuDev *vu_dev, int idx, bool started)
 
     vq = vu_get_queue(vu_dev, idx);
 
-    switch (idx) {
-    case 0:
-        vu_set_queue_handler(vu_dev, vq, started ? vus_proc_ctl : NULL);
-        break;
-    case 1:
-        vu_set_queue_handler(vu_dev, vq, started ? vus_proc_evt : NULL);
-        break;
-    default:
+    if (idx == 0 || idx == 1) {
+        PDBG("queue %d unimplemented", idx);
+    } else {
         vu_set_queue_handler(vu_dev, vq, started ? vus_proc_req : NULL);
     }
 }
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 18/27] vhost-user-scsi: rename VUS types
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (16 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 17/27] vhost-user-scsi: remove unimplemented functions Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-08-23 17:59   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 19/27] vhost-user-scsi: avoid use of iscsi_ namespace Marc-André Lureau
                   ` (12 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

- use Vus prefix consistently
- use CamelCase, since that's glib & libvhost-user style
- avoid _t postfix, usually for system headers

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 46 +++++++++++++++----------------
 1 file changed, 23 insertions(+), 23 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 882d887a32..2ceca964f4 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -55,18 +55,18 @@
 
 #define VUS_ISCSI_INITIATOR "iqn.2016-11.com.nutanix:vhost-user-scsi"
 
-typedef struct iscsi_lun {
+typedef struct VusIscsiLun {
     struct iscsi_context *iscsi_ctx;
     int iscsi_lun;
-} iscsi_lun_t;
+} VusIscsiLun;
 
-typedef struct vhost_scsi_dev {
+typedef struct VusDev {
     VuDev vu_dev;
     int server_sock;
     GMainLoop *loop;
     GTree *fdmap;   /* fd -> gsource context id */
-    iscsi_lun_t lun;
-} vhost_scsi_dev_t;
+    VusIscsiLun lun;
+} VusDev;
 
 /** glib event loop integration for libvhost-user and misc callbacks **/
 
@@ -78,7 +78,7 @@ QEMU_BUILD_BUG_ON((int)G_IO_HUP != (int)VU_WATCH_HUP);
 
 typedef struct vus_gsrc {
     GSource parent;
-    vhost_scsi_dev_t *vdev_scsi;
+    VusDev *vdev_scsi;
     GPollFD gfd;
     vu_watch_cb vu_cb;
 } vus_gsrc_t;
@@ -107,7 +107,7 @@ static gboolean vus_gsrc_check(GSource *src)
 
 static gboolean vus_gsrc_dispatch(GSource *src, GSourceFunc cb, gpointer data)
 {
-    vhost_scsi_dev_t *vdev_scsi;
+    VusDev *vdev_scsi;
     vus_gsrc_t *vus_src = (vus_gsrc_t *)src;
 
     assert(vus_src);
@@ -133,7 +133,7 @@ static GSourceFuncs vus_gsrc_funcs = {
     NULL
 };
 
-static void vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
+static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
                          vu_watch_cb vu_cb, gpointer data)
 {
     GSource *vus_gsrc;
@@ -245,7 +245,7 @@ struct scsi_task {
 
 /** libiscsi integration **/
 
-static int iscsi_add_lun(iscsi_lun_t *lun, char *iscsi_uri)
+static int iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri)
 {
     struct iscsi_url *iscsi_url;
     struct iscsi_context *iscsi_ctx;
@@ -415,11 +415,11 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
 
 static void vus_panic_cb(VuDev *vu_dev, const char *buf)
 {
-    vhost_scsi_dev_t *vdev_scsi;
+    VusDev *vdev_scsi;
 
     assert(vu_dev);
 
-    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
+    vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
     if (buf) {
         PERR("vu_panic: %s", buf);
     }
@@ -430,14 +430,14 @@ static void vus_panic_cb(VuDev *vu_dev, const char *buf)
 static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
                              void *pvt)
 {
-    vhost_scsi_dev_t *vdev_scsi;
+    VusDev *vdev_scsi;
     guint id;
 
     assert(vu_dev);
     assert(fd >= 0);
     assert(cb);
 
-    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
+    vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
     id = (guint)(uintptr_t)g_tree_lookup(vdev_scsi->fdmap,
                                          (gpointer)(uintptr_t)fd);
     if (id) {
@@ -452,13 +452,13 @@ static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
 
 static void vus_del_watch_cb(VuDev *vu_dev, int fd)
 {
-    vhost_scsi_dev_t *vdev_scsi;
+    VusDev *vdev_scsi;
     guint id;
 
     assert(vu_dev);
     assert(fd >= 0);
 
-    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
+    vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
     id = (guint)(uintptr_t)g_tree_lookup(vdev_scsi->fdmap,
                                          (gpointer)(uintptr_t)fd);
     if (id) {
@@ -471,12 +471,12 @@ static void vus_del_watch_cb(VuDev *vu_dev, int fd)
 
 static void vus_proc_req(VuDev *vu_dev, int idx)
 {
-    vhost_scsi_dev_t *vdev_scsi;
+    VusDev *vdev_scsi;
     VuVirtq *vq;
 
     assert(vu_dev);
 
-    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
+    vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
     if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
         PERR("VQ Index out of range: %d", idx);
         vus_panic_cb(vu_dev, NULL);
@@ -617,7 +617,7 @@ fail:
 
 /** vhost-user-scsi **/
 
-static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
+static void vdev_scsi_free(VusDev *vdev_scsi)
 {
     if (vdev_scsi->server_sock >= 0) {
         close(vdev_scsi->server_sock);
@@ -627,13 +627,13 @@ static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
     g_free(vdev_scsi);
 }
 
-static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
+static VusDev *vdev_scsi_new(int server_sock)
 {
-    vhost_scsi_dev_t *vdev_scsi;
+    VusDev *vdev_scsi;
 
     assert(server_sock >= 0);
 
-    vdev_scsi = g_new0(vhost_scsi_dev_t, 1);
+    vdev_scsi = g_new0(VusDev, 1);
     vdev_scsi->server_sock = server_sock;
     vdev_scsi->loop = g_main_loop_new(NULL, FALSE);
     vdev_scsi->fdmap = g_tree_new(vus_fdmap_compare);
@@ -641,7 +641,7 @@ static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
     return vdev_scsi;
 }
 
-static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
+static int vdev_scsi_run(VusDev *vdev_scsi)
 {
     GIOChannel *chan;
     int cli_sock;
@@ -676,7 +676,7 @@ static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
 
 int main(int argc, char **argv)
 {
-    vhost_scsi_dev_t *vdev_scsi = NULL;
+    VusDev *vdev_scsi = NULL;
     char *unix_fn = NULL;
     char *iscsi_uri = NULL;
     int sock, opt, err = EXIT_SUCCESS;
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 19/27] vhost-user-scsi: avoid use of iscsi_ namespace
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (17 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 18/27] vhost-user-scsi: rename VUS types Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-08-24  0:07   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 20/27] vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h Marc-André Lureau
                   ` (11 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

It is confusing and could easily conflict with future versions.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 2ceca964f4..2ab14f1a83 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -245,7 +245,7 @@ struct scsi_task {
 
 /** libiscsi integration **/
 
-static int iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri)
+static int vus_iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri)
 {
     struct iscsi_url *iscsi_url;
     struct iscsi_context *iscsi_ctx;
@@ -705,7 +705,7 @@ int main(int argc, char **argv)
     }
     vdev_scsi = vdev_scsi_new(sock);
 
-    if (iscsi_add_lun(&vdev_scsi->lun, iscsi_uri) != 0) {
+    if (vus_iscsi_add_lun(&vdev_scsi->lun, iscsi_uri) != 0) {
         goto err;
     }
 
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 20/27] vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (18 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 19/27] vhost-user-scsi: avoid use of iscsi_ namespace Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-09-12 16:41   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 21/27] vhost-user-scsi: drop extra callback pointer Marc-André Lureau
                   ` (10 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

There is no need to include hw/virtio/virtio-scsi.h, then the conflict
with SCSI_XFER enum goes away.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 96 +++----------------------------
 1 file changed, 9 insertions(+), 87 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 2ab14f1a83..795799ec14 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -12,8 +12,9 @@
 
 #include "qemu/osdep.h"
 #include "contrib/libvhost-user/libvhost-user.h"
-#include "hw/virtio/virtio-scsi.h"
+#include "standard-headers/linux/virtio_scsi.h"
 #include "iscsi/iscsi.h"
+#include "iscsi/scsi-lowlevel.h"
 
 #include <glib.h>
 
@@ -161,90 +162,11 @@ static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
                                     (gpointer)(uintptr_t)id);
 }
 
-/* from libiscsi's scsi-lowlevel.h **
- *
- * nb. We can't directly include scsi-lowlevel.h due to a namespace conflict:
- *     QEMU's scsi.h also defines "SCSI_XFER_NONE".
- */
-
-#define SCSI_CDB_MAX_SIZE           16
-
-struct scsi_iovector {
-    struct scsi_iovec *iov;
-    int niov;
-    int nalloc;
-    size_t offset;
-    int consumed;
-};
-
-struct scsi_allocated_memory {
-    struct scsi_allocated_memory *next;
-    char buf[0];
-};
-
-struct scsi_data {
-    int            size;
-    unsigned char *data;
-};
-
-enum scsi_sense_key {
-    SCSI_SENSE_NO_SENSE            = 0x00,
-    SCSI_SENSE_RECOVERED_ERROR     = 0x01,
-    SCSI_SENSE_NOT_READY           = 0x02,
-    SCSI_SENSE_MEDIUM_ERROR        = 0x03,
-    SCSI_SENSE_HARDWARE_ERROR      = 0x04,
-    SCSI_SENSE_ILLEGAL_REQUEST     = 0x05,
-    SCSI_SENSE_UNIT_ATTENTION      = 0x06,
-    SCSI_SENSE_DATA_PROTECTION     = 0x07,
-    SCSI_SENSE_BLANK_CHECK         = 0x08,
-    SCSI_SENSE_VENDOR_SPECIFIC     = 0x09,
-    SCSI_SENSE_COPY_ABORTED        = 0x0a,
-    SCSI_SENSE_COMMAND_ABORTED     = 0x0b,
-    SCSI_SENSE_OBSOLETE_ERROR_CODE = 0x0c,
-    SCSI_SENSE_OVERFLOW_COMMAND    = 0x0d,
-    SCSI_SENSE_MISCOMPARE          = 0x0e
-};
-
-struct scsi_sense {
-    unsigned char       error_type;
-    enum scsi_sense_key key;
-    int                 ascq;
-    unsigned            sense_specific:1;
-    unsigned            ill_param_in_cdb:1;
-    unsigned            bit_pointer_valid:1;
-    unsigned char       bit_pointer;
-    uint16_t            field_pointer;
-};
-
-enum scsi_residual {
-    SCSI_RESIDUAL_NO_RESIDUAL = 0,
-    SCSI_RESIDUAL_UNDERFLOW,
-    SCSI_RESIDUAL_OVERFLOW
-};
-
-struct scsi_task {
-    int status;
-    int cdb_size;
-    int xfer_dir;
-    int expxferlen;
-    unsigned char cdb[SCSI_CDB_MAX_SIZE];
-    enum scsi_residual residual_status;
-    size_t residual;
-    struct scsi_sense sense;
-    struct scsi_data datain;
-    struct scsi_allocated_memory *mem;
-    void *ptr;
-
-    uint32_t itt;
-    uint32_t cmdsn;
-    uint32_t lun;
-
-    struct scsi_iovector iovector_in;
-    struct scsi_iovector iovector_out;
-};
-
 /** libiscsi integration **/
 
+typedef struct virtio_scsi_cmd_req VirtIOSCSICmdReq;
+typedef struct virtio_scsi_cmd_resp VirtIOSCSICmdResp;
+
 static int vus_iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri)
 {
     struct iscsi_url *iscsi_url;
@@ -363,12 +285,12 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
     if (!out_len && !in_len) {
         dir = SCSI_XFER_NONE;
     } else if (out_len) {
-        dir = SCSI_XFER_TO_DEV;
+        dir = SCSI_XFER_WRITE;
         for (i = 0; i < out_len; i++) {
             len += out[i].iov_len;
         }
     } else {
-        dir = SCSI_XFER_FROM_DEV;
+        dir = SCSI_XFER_READ;
         for (i = 0; i < in_len; i++) {
             len += in[i].iov_len;
         }
@@ -376,10 +298,10 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
 
     task = scsi_task_new(cdb_len, req->cdb, dir, len);
 
-    if (dir == SCSI_XFER_TO_DEV) {
+    if (dir == SCSI_XFER_WRITE) {
         task->iovector_out.iov = (struct scsi_iovec *)out;
         task->iovector_out.niov = out_len;
-    } else if (dir == SCSI_XFER_FROM_DEV) {
+    } else if (dir == SCSI_XFER_READ) {
         task->iovector_in.iov = (struct scsi_iovec *)in;
         task->iovector_in.niov = in_len;
     }
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 21/27] vhost-user-scsi: drop extra callback pointer
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (19 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 20/27] vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-08-23 23:59   ` Philippe Mathieu-Daudé
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 22/27] vhost-user-scsi: simplify source handling Marc-André Lureau
                   ` (9 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Use the one from the source with casting, like any other glib source.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 795799ec14..102d910e8f 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -81,7 +81,6 @@ typedef struct vus_gsrc {
     GSource parent;
     VusDev *vdev_scsi;
     GPollFD gfd;
-    vu_watch_cb vu_cb;
 } vus_gsrc_t;
 
 static gint vus_fdmap_compare(gconstpointer a, gconstpointer b)
@@ -112,18 +111,13 @@ static gboolean vus_gsrc_dispatch(GSource *src, GSourceFunc cb, gpointer data)
     vus_gsrc_t *vus_src = (vus_gsrc_t *)src;
 
     assert(vus_src);
-    assert(!(vus_src->vu_cb && cb));
 
     vdev_scsi = vus_src->vdev_scsi;
 
     assert(vdev_scsi);
 
-    if (cb) {
-        return cb(data);
-    }
-    if (vus_src->vu_cb) {
-        vus_src->vu_cb(&vdev_scsi->vu_dev, vus_src->gfd.revents, data);
-    }
+    ((vu_watch_cb)cb) (&vdev_scsi->vu_dev, vus_src->gfd.revents, data);
+
     return G_SOURCE_CONTINUE;
 }
 
@@ -146,12 +140,12 @@ static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
     assert(vu_cb);
 
     vus_gsrc = g_source_new(&vus_gsrc_funcs, sizeof(vus_gsrc_t));
+    g_source_set_callback(vus_gsrc, (GSourceFunc) vu_cb, data, NULL);
     vus_src = (vus_gsrc_t *)vus_gsrc;
 
     vus_src->vdev_scsi = vdev_scsi;
     vus_src->gfd.fd = fd;
     vus_src->gfd.events = cond;
-    vus_src->vu_cb = vu_cb;
 
     g_source_add_poll(vus_gsrc, &vus_src->gfd);
     id = g_source_attach(vus_gsrc, NULL);
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 22/27] vhost-user-scsi: simplify source handling
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (20 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 21/27] vhost-user-scsi: drop extra callback pointer Marc-André Lureau
@ 2017-08-23 16:19 ` Marc-André Lureau
  2017-09-19 14:45   ` Paolo Bonzini
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 23/27] vhost-user-scsi: use glib logging Marc-André Lureau
                   ` (8 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Using a hashtable.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 45 +++++++++----------------------
 1 file changed, 12 insertions(+), 33 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 102d910e8f..516a9d3966 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -65,7 +65,7 @@ typedef struct VusDev {
     VuDev vu_dev;
     int server_sock;
     GMainLoop *loop;
-    GTree *fdmap;   /* fd -> gsource context id */
+    GHashTable *fdmap;   /* fd -> gsource */
     VusIscsiLun lun;
 } VusDev;
 
@@ -83,11 +83,6 @@ typedef struct vus_gsrc {
     GPollFD gfd;
 } vus_gsrc_t;
 
-static gint vus_fdmap_compare(gconstpointer a, gconstpointer b)
-{
-    return (b > a) - (b < a);
-}
-
 static gboolean vus_gsrc_prepare(GSource *src, gint *timeout)
 {
     assert(timeout);
@@ -128,8 +123,8 @@ static GSourceFuncs vus_gsrc_funcs = {
     NULL
 };
 
-static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
-                         vu_watch_cb vu_cb, gpointer data)
+static GSource *vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
+                             vu_watch_cb vu_cb, gpointer data)
 {
     GSource *vus_gsrc;
     vus_gsrc_t *vus_src;
@@ -142,7 +137,6 @@ static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
     vus_gsrc = g_source_new(&vus_gsrc_funcs, sizeof(vus_gsrc_t));
     g_source_set_callback(vus_gsrc, (GSourceFunc) vu_cb, data, NULL);
     vus_src = (vus_gsrc_t *)vus_gsrc;
-
     vus_src->vdev_scsi = vdev_scsi;
     vus_src->gfd.fd = fd;
     vus_src->gfd.events = cond;
@@ -152,8 +146,7 @@ static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
     assert(id);
     g_source_unref(vus_gsrc);
 
-    g_tree_insert(vdev_scsi->fdmap, (gpointer)(uintptr_t)fd,
-                                    (gpointer)(uintptr_t)id);
+    return vus_gsrc;
 }
 
 /** libiscsi integration **/
@@ -346,43 +339,27 @@ static void vus_panic_cb(VuDev *vu_dev, const char *buf)
 static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
                              void *pvt)
 {
+    GSource *src;
     VusDev *vdev_scsi;
-    guint id;
 
     assert(vu_dev);
     assert(fd >= 0);
     assert(cb);
 
     vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
-    id = (guint)(uintptr_t)g_tree_lookup(vdev_scsi->fdmap,
-                                         (gpointer)(uintptr_t)fd);
-    if (id) {
-        GSource *vus_src = g_main_context_find_source_by_id(NULL, id);
-        assert(vus_src);
-        g_source_destroy(vus_src);
-        (void)g_tree_remove(vdev_scsi->fdmap, (gpointer)(uintptr_t)fd);
-    }
-
-    vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, pvt);
+    src = vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, pvt);
+    g_hash_table_replace(vdev_scsi->fdmap, GINT_TO_POINTER(fd), src);
 }
 
 static void vus_del_watch_cb(VuDev *vu_dev, int fd)
 {
     VusDev *vdev_scsi;
-    guint id;
 
     assert(vu_dev);
     assert(fd >= 0);
 
     vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
-    id = (guint)(uintptr_t)g_tree_lookup(vdev_scsi->fdmap,
-                                         (gpointer)(uintptr_t)fd);
-    if (id) {
-        GSource *vus_src = g_main_context_find_source_by_id(NULL, id);
-        assert(vus_src);
-        g_source_destroy(vus_src);
-        (void)g_tree_remove(vdev_scsi->fdmap, (gpointer)(uintptr_t)fd);
-    }
+    g_hash_table_remove(vdev_scsi->fdmap, GINT_TO_POINTER(fd));
 }
 
 static void vus_proc_req(VuDev *vu_dev, int idx)
@@ -539,7 +516,7 @@ static void vdev_scsi_free(VusDev *vdev_scsi)
         close(vdev_scsi->server_sock);
     }
     g_main_loop_unref(vdev_scsi->loop);
-    g_tree_destroy(vdev_scsi->fdmap);
+    g_hash_table_unref(vdev_scsi->fdmap);
     g_free(vdev_scsi);
 }
 
@@ -552,7 +529,9 @@ static VusDev *vdev_scsi_new(int server_sock)
     vdev_scsi = g_new0(VusDev, 1);
     vdev_scsi->server_sock = server_sock;
     vdev_scsi->loop = g_main_loop_new(NULL, FALSE);
-    vdev_scsi->fdmap = g_tree_new(vus_fdmap_compare);
+    vdev_scsi->fdmap =
+        g_hash_table_new_full(NULL, NULL, NULL,
+                              (GDestroyNotify) g_source_destroy);
 
     return vdev_scsi;
 }
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 23/27] vhost-user-scsi: use glib logging
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (21 preceding siblings ...)
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 22/27] vhost-user-scsi: simplify source handling Marc-André Lureau
@ 2017-08-23 16:20 ` Marc-André Lureau
  2017-08-24  0:00   ` Philippe Mathieu-Daudé
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 24/27] libvhost-user: add glib source helper Marc-André Lureau
                   ` (7 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:20 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

- PLOG is unused
- code is compiled out unless debug is enabled
- logging is too verbose
- you can pipe to ts to have timestamp if needed, or use structured
  logging with more recent glib

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 77 +++++++++----------------------
 1 file changed, 21 insertions(+), 56 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 516a9d3966..e3ec8b9b2c 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -18,42 +18,6 @@
 
 #include <glib.h>
 
-/* #define VUS_DEBUG 1 */
-
-/** Log helpers **/
-
-#define PPRE                                                          \
-    struct timespec ts;                                               \
-    char   timebuf[64];                                               \
-    struct tm tm;                                                     \
-    (void)clock_gettime(CLOCK_REALTIME, &ts);                         \
-    (void)strftime(timebuf, 64, "%Y%m%d %T", gmtime_r(&ts.tv_sec, &tm))
-
-#define PEXT(lvl, msg, ...) do {                                      \
-    PPRE;                                                             \
-    fprintf(stderr, "%s.%06ld " lvl ": %s:%s():%d: " msg "\n",        \
-            timebuf, ts.tv_nsec / 1000,                               \
-            __FILE__, __func__, __LINE__, ## __VA_ARGS__);            \
-} while (0)
-
-#define PNOR(lvl, msg, ...) do {                                      \
-    PPRE;                                                             \
-    fprintf(stderr, "%s.%06ld " lvl ": " msg "\n",                    \
-            timebuf, ts.tv_nsec / 1000, ## __VA_ARGS__);              \
-} while (0)
-
-#ifdef VUS_DEBUG
-#define PDBG(msg, ...) PEXT("DBG", msg, ## __VA_ARGS__)
-#define PERR(msg, ...) PEXT("ERR", msg, ## __VA_ARGS__)
-#define PLOG(msg, ...) PEXT("LOG", msg, ## __VA_ARGS__)
-#else
-#define PDBG(msg, ...) { }
-#define PERR(msg, ...) PNOR("ERR", msg, ## __VA_ARGS__)
-#define PLOG(msg, ...) PNOR("LOG", msg, ## __VA_ARGS__)
-#endif
-
-/** vhost-user-scsi specific definitions **/
-
 #define VUS_ISCSI_INITIATOR "iqn.2016-11.com.nutanix:vhost-user-scsi"
 
 typedef struct VusIscsiLun {
@@ -166,27 +130,28 @@ static int vus_iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri)
 
     iscsi_ctx = iscsi_create_context(VUS_ISCSI_INITIATOR);
     if (!iscsi_ctx) {
-        PERR("Unable to create iSCSI context");
+        g_warning("Unable to create iSCSI context");
         return -1;
     }
 
     iscsi_url = iscsi_parse_full_url(iscsi_ctx, iscsi_uri);
     if (!iscsi_url) {
-        PERR("Unable to parse iSCSI URL: %s", iscsi_get_error(iscsi_ctx));
+        g_warning("Unable to parse iSCSI URL: %s", iscsi_get_error(iscsi_ctx));
         goto fail;
     }
 
     iscsi_set_session_type(iscsi_ctx, ISCSI_SESSION_NORMAL);
     iscsi_set_header_digest(iscsi_ctx, ISCSI_HEADER_DIGEST_NONE_CRC32C);
     if (iscsi_full_connect_sync(iscsi_ctx, iscsi_url->portal, iscsi_url->lun)) {
-        PERR("Unable to login to iSCSI portal: %s", iscsi_get_error(iscsi_ctx));
+        g_warning("Unable to login to iSCSI portal: %s",
+                  iscsi_get_error(iscsi_ctx));
         goto fail;
     }
 
     lun->iscsi_ctx = iscsi_ctx;
     lun->iscsi_lun = iscsi_url->lun;
 
-    PDBG("Context %p created for lun 0: %s", iscsi_ctx, iscsi_uri);
+    g_debug("Context %p created for lun 0: %s", iscsi_ctx, iscsi_uri);
 
 out:
     if (iscsi_url) {
@@ -228,7 +193,7 @@ static int get_cdb_len(uint8_t *cdb)
     case 4: return 16;
     case 5: return 12;
     }
-    PERR("Unable to determine cdb len (0x%02hhX)", cdb[0] >> 5);
+    g_warning("Unable to determine cdb len (0x%02hhX)", cdb[0] >> 5);
     return -1;
 }
 
@@ -250,7 +215,7 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
 
     if (!(!req->lun[1] && req->lun[2] == 0x40 && !req->lun[3])) {
         /* Ignore anything different than target=0, lun=0 */
-        PDBG("Ignoring unconnected lun (0x%hhX, 0x%hhX)",
+        g_debug("Ignoring unconnected lun (0x%hhX, 0x%hhX)",
              req->lun[1], req->lun[3]);
         rsp->status = SCSI_STATUS_CHECK_CONDITION;
         memset(rsp->sense, 0, sizeof(rsp->sense));
@@ -293,10 +258,10 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
         task->iovector_in.niov = in_len;
     }
 
-    PDBG("Sending iscsi cmd (cdb_len=%d, dir=%d, task=%p)",
+    g_debug("Sending iscsi cmd (cdb_len=%d, dir=%d, task=%p)",
          cdb_len, dir, task);
     if (!iscsi_scsi_command_sync(ctx, 0, task, NULL)) {
-        PERR("Error serving SCSI command");
+        g_warning("Error serving SCSI command");
         g_free(task);
         return -1;
     }
@@ -314,7 +279,7 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
 
     g_free(task);
 
-    PDBG("Filled in rsp: status=%hhX, resid=%u, response=%hhX, sense_len=%u",
+    g_debug("Filled in rsp: status=%hhX, resid=%u, response=%hhX, sense_len=%u",
          rsp->status, rsp->resid, rsp->response, rsp->sense_len);
 
     return 0;
@@ -330,7 +295,7 @@ static void vus_panic_cb(VuDev *vu_dev, const char *buf)
 
     vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
     if (buf) {
-        PERR("vu_panic: %s", buf);
+        g_warning("vu_panic: %s", buf);
     }
 
     g_main_loop_quit(vdev_scsi->loop);
@@ -371,19 +336,19 @@ static void vus_proc_req(VuDev *vu_dev, int idx)
 
     vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
     if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
-        PERR("VQ Index out of range: %d", idx);
+        g_warning("VQ Index out of range: %d", idx);
         vus_panic_cb(vu_dev, NULL);
         return;
     }
 
     vq = vu_get_queue(vu_dev, idx);
     if (!vq) {
-        PERR("Error fetching VQ (dev=%p, idx=%d)", vu_dev, idx);
+        g_warning("Error fetching VQ (dev=%p, idx=%d)", vu_dev, idx);
         vus_panic_cb(vu_dev, NULL);
         return;
     }
 
-    PDBG("Got kicked on vq[%d]@%p", idx, vq);
+    g_debug("Got kicked on vq[%d]@%p", idx, vq);
 
     while (1) {
         VuVirtqElement *elem;
@@ -392,23 +357,23 @@ static void vus_proc_req(VuDev *vu_dev, int idx)
 
         elem = vu_queue_pop(vu_dev, vq, sizeof(VuVirtqElement));
         if (!elem) {
-            PDBG("No more elements pending on vq[%d]@%p", idx, vq);
+            g_debug("No more elements pending on vq[%d]@%p", idx, vq);
             break;
         }
-        PDBG("Popped elem@%p", elem);
+        g_debug("Popped elem@%p", elem);
 
         assert(!(elem->out_num > 1 && elem->in_num > 1));
         assert(elem->out_num > 0 && elem->in_num > 0);
 
         if (elem->out_sg[0].iov_len < sizeof(VirtIOSCSICmdReq)) {
-            PERR("Invalid virtio-scsi req header");
+            g_warning("Invalid virtio-scsi req header");
             vus_panic_cb(vu_dev, NULL);
             break;
         }
         req = (VirtIOSCSICmdReq *)elem->out_sg[0].iov_base;
 
         if (elem->in_sg[0].iov_len < sizeof(VirtIOSCSICmdResp)) {
-            PERR("Invalid virtio-scsi rsp header");
+            g_warning("Invalid virtio-scsi rsp header");
             vus_panic_cb(vu_dev, NULL);
             break;
         }
@@ -435,7 +400,7 @@ static void vus_queue_set_started(VuDev *vu_dev, int idx, bool started)
     assert(vu_dev);
 
     if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
-        PERR("VQ Index out of range: %d", idx);
+        g_warning("VQ Index out of range: %d", idx);
         vus_panic_cb(vu_dev, NULL);
         return;
     }
@@ -443,7 +408,7 @@ static void vus_queue_set_started(VuDev *vu_dev, int idx, bool started)
     vq = vu_get_queue(vu_dev, idx);
 
     if (idx == 0 || idx == 1) {
-        PDBG("queue %d unimplemented", idx);
+        g_debug("queue %d unimplemented", idx);
     } else {
         vu_set_queue_handler(vu_dev, vq, started ? vus_proc_req : NULL);
     }
@@ -461,7 +426,7 @@ static gboolean vus_vhost_cb(GIOChannel *source, GIOCondition condition,
     assert(vu_dev);
 
     if (!vu_dispatch(vu_dev) != 0) {
-        PERR("Error processing vhost message");
+        g_warning("Error processing vhost message");
         vus_panic_cb(vu_dev, NULL);
         return G_SOURCE_REMOVE;
     }
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 24/27] libvhost-user: add glib source helper
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (22 preceding siblings ...)
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 23/27] vhost-user-scsi: use glib logging Marc-André Lureau
@ 2017-08-23 16:20 ` Marc-André Lureau
  2017-09-19 14:45   ` Paolo Bonzini
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 25/27] build-sys: fix libvhost-user.a build Marc-André Lureau
                   ` (6 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:20 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/libvhost-user/libvhost-user-glib.h |  32 +++++++
 contrib/libvhost-user/libvhost-user-glib.c | 145 +++++++++++++++++++++++++++++
 contrib/libvhost-user/Makefile.objs        |   2 +-
 3 files changed, 178 insertions(+), 1 deletion(-)
 create mode 100644 contrib/libvhost-user/libvhost-user-glib.h
 create mode 100644 contrib/libvhost-user/libvhost-user-glib.c

diff --git a/contrib/libvhost-user/libvhost-user-glib.h b/contrib/libvhost-user/libvhost-user-glib.h
new file mode 100644
index 0000000000..a4b30824a1
--- /dev/null
+++ b/contrib/libvhost-user/libvhost-user-glib.h
@@ -0,0 +1,32 @@
+/*
+ * Vhost User library
+ *
+ * Copyright (c) 2016 Nutanix Inc. All rights reserved.
+ * Copyright (c) 2017 Red Hat, Inc.
+ *
+ * Authors:
+ *  Marc-André Lureau <mlureau@redhat.com>
+ *  Felipe Franciosi <felipe@nutanix.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or
+ * later.  See the COPYING file in the top-level directory.
+ */
+
+#ifndef LIBVHOST_USER_GLIB_H
+#define LIBVHOST_USER_GLIB_H
+
+#include <glib.h>
+#include "libvhost-user.h"
+
+typedef struct VugDev {
+    VuDev parent;
+
+    GMainLoop *loop;
+    GHashTable *fdmap; /* fd -> gsource */
+} VugDev;
+
+void vug_init(VugDev *dev, int socket, GMainLoop *loop,
+              vu_panic_cb panic, const VuDevIface *iface);
+void vug_deinit(VugDev *dev);
+
+#endif /* LIBVHOST_USER_GLIB_H */
diff --git a/contrib/libvhost-user/libvhost-user-glib.c b/contrib/libvhost-user/libvhost-user-glib.c
new file mode 100644
index 0000000000..13e095b8e7
--- /dev/null
+++ b/contrib/libvhost-user/libvhost-user-glib.c
@@ -0,0 +1,145 @@
+/*
+ * Vhost User library
+ *
+ * Copyright (c) 2016 Nutanix Inc. All rights reserved.
+ * Copyright (c) 2017 Red Hat, Inc.
+ *
+ * Authors:
+ *  Marc-André Lureau <mlureau@redhat.com>
+ *  Felipe Franciosi <felipe@nutanix.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or
+ * later.  See the COPYING file in the top-level directory.
+ */
+
+#include "qemu/osdep.h"
+
+#include "libvhost-user-glib.h"
+
+/* glib event loop integration for libvhost-user and misc callbacks */
+
+G_STATIC_ASSERT((int)G_IO_IN == (int)VU_WATCH_IN);
+G_STATIC_ASSERT((int)G_IO_OUT == (int)VU_WATCH_OUT);
+G_STATIC_ASSERT((int)G_IO_PRI == (int)VU_WATCH_PRI);
+G_STATIC_ASSERT((int)G_IO_ERR == (int)VU_WATCH_ERR);
+G_STATIC_ASSERT((int)G_IO_HUP == (int)VU_WATCH_HUP);
+
+typedef struct vus_gsrc {
+    GSource parent;
+    VuDev *dev;
+    GPollFD gfd;
+} vus_gsrc_t;
+
+static gboolean
+vus_gsrc_prepare(GSource *src, gint *timeout)
+{
+    g_assert(timeout);
+
+    *timeout = -1;
+    return FALSE;
+}
+
+static gboolean
+vus_gsrc_check(GSource *src)
+{
+    vus_gsrc_t *vus_src = (vus_gsrc_t *)src;
+
+    g_assert(vus_src);
+
+    return vus_src->gfd.revents & vus_src->gfd.events;
+}
+
+static gboolean
+vus_gsrc_dispatch(GSource *src, GSourceFunc cb, gpointer data)
+{
+    vus_gsrc_t *vus_src = (vus_gsrc_t *)src;
+
+    g_assert(vus_src);
+
+    ((vu_watch_cb)cb) (vus_src->dev, vus_src->gfd.revents, data);
+
+    return G_SOURCE_CONTINUE;
+}
+
+static GSourceFuncs vus_gsrc_funcs = {
+    vus_gsrc_prepare,
+    vus_gsrc_check,
+    vus_gsrc_dispatch,
+    NULL
+};
+
+static GSource *
+vug_source_new(VuDev *dev, int fd, GIOCondition cond,
+               vu_watch_cb vu_cb, gpointer data)
+{
+    GSource *vus_gsrc;
+    vus_gsrc_t *vus_src;
+    guint id;
+
+    g_assert(dev);
+    g_assert(fd >= 0);
+    g_assert(vu_cb);
+
+    vus_gsrc = g_source_new(&vus_gsrc_funcs, sizeof(vus_gsrc_t));
+    g_source_set_callback(vus_gsrc, (GSourceFunc) vu_cb, data, NULL);
+    vus_src = (vus_gsrc_t *)vus_gsrc;
+    vus_src->dev = dev;
+    vus_src->gfd.fd = fd;
+    vus_src->gfd.events = cond;
+
+    g_source_add_poll(vus_gsrc, &vus_src->gfd);
+    id = g_source_attach(vus_gsrc, NULL);
+    g_assert(id);
+    g_source_unref(vus_gsrc);
+
+    return vus_gsrc;
+}
+
+static void
+set_watch(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb, void *pvt)
+{
+    GSource *src;
+    VugDev *dev;
+
+    g_assert(vu_dev);
+    g_assert(fd >= 0);
+    g_assert(cb);
+
+    dev = container_of(vu_dev, VugDev, parent);
+    src = vug_source_new(vu_dev, fd, vu_evt, cb, pvt);
+    g_hash_table_replace(dev->fdmap, GINT_TO_POINTER(fd), src);
+}
+
+static void
+remove_watch(VuDev *vu_dev, int fd)
+{
+    VugDev *dev;
+
+    g_assert(vu_dev);
+    g_assert(fd >= 0);
+
+    dev = container_of(vu_dev, VugDev, parent);
+    g_hash_table_remove(dev->fdmap, GINT_TO_POINTER(fd));
+}
+
+void
+vug_init(VugDev *dev, int socket, GMainLoop *loop,
+         vu_panic_cb panic, const VuDevIface *iface)
+{
+    g_assert(dev);
+    g_assert(loop);
+    g_assert(iface);
+
+    vu_init(&dev->parent, socket, panic, set_watch, remove_watch, iface);
+    dev->loop = loop;
+    dev->fdmap = g_hash_table_new_full(NULL, NULL, NULL,
+                                       (GDestroyNotify) g_source_destroy);
+}
+
+void
+vug_deinit(VugDev *dev)
+{
+    g_assert(dev);
+
+    g_hash_table_unref(dev->fdmap);
+}
diff --git a/contrib/libvhost-user/Makefile.objs b/contrib/libvhost-user/Makefile.objs
index cef1ad6e31..ef3778edd4 100644
--- a/contrib/libvhost-user/Makefile.objs
+++ b/contrib/libvhost-user/Makefile.objs
@@ -1 +1 @@
-libvhost-user-obj-y = libvhost-user.o
+libvhost-user-obj-y += libvhost-user.o libvhost-user-glib.o
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 25/27] build-sys: fix libvhost-user.a build
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (23 preceding siblings ...)
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 24/27] libvhost-user: add glib source helper Marc-André Lureau
@ 2017-08-23 16:20 ` Marc-André Lureau
  2017-09-12 16:43   ` Philippe Mathieu-Daudé
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 26/27] vhost-user-scsi: use libvhost-user glib helper Marc-André Lureau
                   ` (5 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:20 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

And actually link to it from vhost-user-bridge.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 Makefile               | 3 ++-
 tests/Makefile.include | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index 81447b1f08..654b47b9d9 100644
--- a/Makefile
+++ b/Makefile
@@ -345,7 +345,7 @@ dtc/%:
 	mkdir -p $@
 
 $(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y) $(chardev-obj-y) \
-	$(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY))
+	$(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY)) libvhost-user.a
 
 ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
 # Only keep -O and -g cflags
@@ -366,6 +366,7 @@ Makefile: $(version-obj-y)
 
 libqemustub.a: $(stub-obj-y)
 libqemuutil.a: $(util-obj-y) $(trace-obj-y)
+libvhost-user.a: $(libvhost-user-obj-y)
 
 ######################################################################
 
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 37c1bed683..1ca88ef9d2 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -786,7 +786,7 @@ tests/test-filter-redirector$(EXESUF): tests/test-filter-redirector.o $(qtest-ob
 tests/test-x86-cpuid-compat$(EXESUF): tests/test-x86-cpuid-compat.o $(qtest-obj-y)
 tests/ivshmem-test$(EXESUF): tests/ivshmem-test.o contrib/ivshmem-server/ivshmem-server.o $(libqos-pc-obj-y) $(libqos-spapr-obj-y)
 tests/megasas-test$(EXESUF): tests/megasas-test.o $(libqos-spapr-obj-y) $(libqos-pc-obj-y)
-tests/vhost-user-bridge$(EXESUF): tests/vhost-user-bridge.o contrib/libvhost-user/libvhost-user.o $(test-util-obj-y)
+tests/vhost-user-bridge$(EXESUF): tests/vhost-user-bridge.o $(test-util-obj-y) libvhost-user.a
 tests/test-uuid$(EXESUF): tests/test-uuid.o $(test-util-obj-y)
 tests/test-arm-mptimer$(EXESUF): tests/test-arm-mptimer.o
 tests/test-qapi-util$(EXESUF): tests/test-qapi-util.o $(test-util-obj-y)
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 26/27] vhost-user-scsi: use libvhost-user glib helper
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (24 preceding siblings ...)
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 25/27] build-sys: fix libvhost-user.a build Marc-André Lureau
@ 2017-08-23 16:20 ` Marc-André Lureau
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 27/27] vhost-user-scsi: remove server_sock from VusDev Marc-André Lureau
                   ` (4 subsequent siblings)
  30 siblings, 0 replies; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:20 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 155 +++++-------------------------
 Makefile.objs                             |   3 +-
 2 files changed, 23 insertions(+), 135 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index e3ec8b9b2c..cfd62b46ce 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -11,7 +11,7 @@
  */
 
 #include "qemu/osdep.h"
-#include "contrib/libvhost-user/libvhost-user.h"
+#include "contrib/libvhost-user/libvhost-user-glib.h"
 #include "standard-headers/linux/virtio_scsi.h"
 #include "iscsi/iscsi.h"
 #include "iscsi/scsi-lowlevel.h"
@@ -26,93 +26,12 @@ typedef struct VusIscsiLun {
 } VusIscsiLun;
 
 typedef struct VusDev {
-    VuDev vu_dev;
+    VugDev parent;
+
     int server_sock;
-    GMainLoop *loop;
-    GHashTable *fdmap;   /* fd -> gsource */
     VusIscsiLun lun;
 } VusDev;
 
-/** glib event loop integration for libvhost-user and misc callbacks **/
-
-QEMU_BUILD_BUG_ON((int)G_IO_IN != (int)VU_WATCH_IN);
-QEMU_BUILD_BUG_ON((int)G_IO_OUT != (int)VU_WATCH_OUT);
-QEMU_BUILD_BUG_ON((int)G_IO_PRI != (int)VU_WATCH_PRI);
-QEMU_BUILD_BUG_ON((int)G_IO_ERR != (int)VU_WATCH_ERR);
-QEMU_BUILD_BUG_ON((int)G_IO_HUP != (int)VU_WATCH_HUP);
-
-typedef struct vus_gsrc {
-    GSource parent;
-    VusDev *vdev_scsi;
-    GPollFD gfd;
-} vus_gsrc_t;
-
-static gboolean vus_gsrc_prepare(GSource *src, gint *timeout)
-{
-    assert(timeout);
-
-    *timeout = -1;
-    return FALSE;
-}
-
-static gboolean vus_gsrc_check(GSource *src)
-{
-    vus_gsrc_t *vus_src = (vus_gsrc_t *)src;
-
-    assert(vus_src);
-
-    return vus_src->gfd.revents & vus_src->gfd.events;
-}
-
-static gboolean vus_gsrc_dispatch(GSource *src, GSourceFunc cb, gpointer data)
-{
-    VusDev *vdev_scsi;
-    vus_gsrc_t *vus_src = (vus_gsrc_t *)src;
-
-    assert(vus_src);
-
-    vdev_scsi = vus_src->vdev_scsi;
-
-    assert(vdev_scsi);
-
-    ((vu_watch_cb)cb) (&vdev_scsi->vu_dev, vus_src->gfd.revents, data);
-
-    return G_SOURCE_CONTINUE;
-}
-
-static GSourceFuncs vus_gsrc_funcs = {
-    vus_gsrc_prepare,
-    vus_gsrc_check,
-    vus_gsrc_dispatch,
-    NULL
-};
-
-static GSource *vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
-                             vu_watch_cb vu_cb, gpointer data)
-{
-    GSource *vus_gsrc;
-    vus_gsrc_t *vus_src;
-    guint id;
-
-    assert(vdev_scsi);
-    assert(fd >= 0);
-    assert(vu_cb);
-
-    vus_gsrc = g_source_new(&vus_gsrc_funcs, sizeof(vus_gsrc_t));
-    g_source_set_callback(vus_gsrc, (GSourceFunc) vu_cb, data, NULL);
-    vus_src = (vus_gsrc_t *)vus_gsrc;
-    vus_src->vdev_scsi = vdev_scsi;
-    vus_src->gfd.fd = fd;
-    vus_src->gfd.events = cond;
-
-    g_source_add_poll(vus_gsrc, &vus_src->gfd);
-    id = g_source_attach(vus_gsrc, NULL);
-    assert(id);
-    g_source_unref(vus_gsrc);
-
-    return vus_gsrc;
-}
-
 /** libiscsi integration **/
 
 typedef struct virtio_scsi_cmd_req VirtIOSCSICmdReq;
@@ -289,52 +208,28 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
 
 static void vus_panic_cb(VuDev *vu_dev, const char *buf)
 {
-    VusDev *vdev_scsi;
+    VugDev *gdev;
 
     assert(vu_dev);
 
-    vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
+    gdev = container_of(vu_dev, VugDev, parent);
     if (buf) {
         g_warning("vu_panic: %s", buf);
     }
 
-    g_main_loop_quit(vdev_scsi->loop);
-}
-
-static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
-                             void *pvt)
-{
-    GSource *src;
-    VusDev *vdev_scsi;
-
-    assert(vu_dev);
-    assert(fd >= 0);
-    assert(cb);
-
-    vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
-    src = vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, pvt);
-    g_hash_table_replace(vdev_scsi->fdmap, GINT_TO_POINTER(fd), src);
-}
-
-static void vus_del_watch_cb(VuDev *vu_dev, int fd)
-{
-    VusDev *vdev_scsi;
-
-    assert(vu_dev);
-    assert(fd >= 0);
-
-    vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
-    g_hash_table_remove(vdev_scsi->fdmap, GINT_TO_POINTER(fd));
+    g_main_loop_quit(gdev->loop);
 }
 
 static void vus_proc_req(VuDev *vu_dev, int idx)
 {
+    VugDev *gdev;
     VusDev *vdev_scsi;
     VuVirtq *vq;
 
     assert(vu_dev);
 
-    vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
+    gdev = container_of(vu_dev, VugDev, parent);
+    vdev_scsi = container_of(gdev, VusDev, parent);
     if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
         g_warning("VQ Index out of range: %d", idx);
         vus_panic_cb(vu_dev, NULL);
@@ -421,9 +316,8 @@ static const VuDevIface vus_iface = {
 static gboolean vus_vhost_cb(GIOChannel *source, GIOCondition condition,
                              gpointer data)
 {
-    VuDev *vu_dev = (VuDev *)data;
-
-    assert(vu_dev);
+    VusDev *vdev_scsi = data;
+    VuDev *vu_dev = &vdev_scsi->parent.parent;
 
     if (!vu_dispatch(vu_dev) != 0) {
         g_warning("Error processing vhost message");
@@ -480,8 +374,6 @@ static void vdev_scsi_free(VusDev *vdev_scsi)
     if (vdev_scsi->server_sock >= 0) {
         close(vdev_scsi->server_sock);
     }
-    g_main_loop_unref(vdev_scsi->loop);
-    g_hash_table_unref(vdev_scsi->fdmap);
     g_free(vdev_scsi);
 }
 
@@ -493,23 +385,19 @@ static VusDev *vdev_scsi_new(int server_sock)
 
     vdev_scsi = g_new0(VusDev, 1);
     vdev_scsi->server_sock = server_sock;
-    vdev_scsi->loop = g_main_loop_new(NULL, FALSE);
-    vdev_scsi->fdmap =
-        g_hash_table_new_full(NULL, NULL, NULL,
-                              (GDestroyNotify) g_source_destroy);
 
     return vdev_scsi;
 }
 
 static int vdev_scsi_run(VusDev *vdev_scsi)
 {
+    GMainLoop *loop;
     GIOChannel *chan;
     int cli_sock;
     int ret = 0;
 
     assert(vdev_scsi);
     assert(vdev_scsi->server_sock >= 0);
-    assert(vdev_scsi->loop);
 
     cli_sock = accept(vdev_scsi->server_sock, NULL, NULL);
     if (cli_sock < 0) {
@@ -517,19 +405,20 @@ static int vdev_scsi_run(VusDev *vdev_scsi)
         return -1;
     }
 
-    vu_init(&vdev_scsi->vu_dev,
-            cli_sock,
-            vus_panic_cb,
-            vus_add_watch_cb,
-            vus_del_watch_cb,
-            &vus_iface);
+    loop = g_main_loop_new(NULL, FALSE);
+    vug_init(&vdev_scsi->parent,
+             cli_sock,
+             loop,
+             vus_panic_cb,
+             &vus_iface);
 
     chan = g_io_channel_unix_new(cli_sock);
-    g_io_add_watch(chan, G_IO_IN, vus_vhost_cb, &vdev_scsi->vu_dev);
-    g_main_loop_run(vdev_scsi->loop);
+    g_io_add_watch(chan, G_IO_IN, vus_vhost_cb, vdev_scsi);
+    g_main_loop_run(loop);
     g_io_channel_unref(chan);
+    g_main_loop_unref(loop);
 
-    vu_deinit(&vdev_scsi->vu_dev);
+    vug_deinit(&vdev_scsi->parent);
 
     return ret;
 }
diff --git a/Makefile.objs b/Makefile.objs
index 24a4ea08b8..88da7d88e9 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -111,9 +111,8 @@ ivshmem-client-obj-$(CONFIG_IVSHMEM) = contrib/ivshmem-client/
 ivshmem-server-obj-$(CONFIG_IVSHMEM) = contrib/ivshmem-server/
 libvhost-user-obj-y = contrib/libvhost-user/
 vhost-user-scsi.o-cflags := $(LIBISCSI_CFLAGS)
-vhost-user-scsi.o-libs := $(LIBISCSI_LIBS)
+vhost-user-scsi.o-libs := $(LIBISCSI_LIBS) libvhost-user.a
 vhost-user-scsi-obj-y = contrib/vhost-user-scsi/
-vhost-user-scsi-obj-y += contrib/libvhost-user/libvhost-user.o
 
 ######################################################################
 trace-events-subdirs =
-- 
2.14.1.146.gd35faa819

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

* [Qemu-devel] [PATCH 27/27] vhost-user-scsi: remove server_sock from VusDev
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (25 preceding siblings ...)
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 26/27] vhost-user-scsi: use libvhost-user glib helper Marc-André Lureau
@ 2017-08-23 16:20 ` Marc-André Lureau
  2017-08-24  0:06   ` Philippe Mathieu-Daudé
  2017-08-23 16:52 ` [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up no-reply
                   ` (3 subsequent siblings)
  30 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-08-23 16:20 UTC (permalink / raw)
  To: qemu-devel; +Cc: changpeng.liu, felipe, Marc-André Lureau

It is unneeded in the VusDev device structure, and also simplify a bit
the code.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 52 ++++++++++++++-----------------
 1 file changed, 23 insertions(+), 29 deletions(-)

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index cfd62b46ce..3166331856 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -28,7 +28,6 @@ typedef struct VusIscsiLun {
 typedef struct VusDev {
     VugDev parent;
 
-    int server_sock;
     VusIscsiLun lun;
 } VusDev;
 
@@ -371,48 +370,30 @@ fail:
 
 static void vdev_scsi_free(VusDev *vdev_scsi)
 {
-    if (vdev_scsi->server_sock >= 0) {
-        close(vdev_scsi->server_sock);
-    }
     g_free(vdev_scsi);
 }
 
-static VusDev *vdev_scsi_new(int server_sock)
+static VusDev *vdev_scsi_new(void)
 {
-    VusDev *vdev_scsi;
-
-    assert(server_sock >= 0);
-
-    vdev_scsi = g_new0(VusDev, 1);
-    vdev_scsi->server_sock = server_sock;
-
-    return vdev_scsi;
+    return g_new0(VusDev, 1);
 }
 
-static int vdev_scsi_run(VusDev *vdev_scsi)
+static int vdev_scsi_run(VusDev *vdev_scsi, int sock)
 {
     GMainLoop *loop;
     GIOChannel *chan;
-    int cli_sock;
     int ret = 0;
 
     assert(vdev_scsi);
-    assert(vdev_scsi->server_sock >= 0);
-
-    cli_sock = accept(vdev_scsi->server_sock, NULL, NULL);
-    if (cli_sock < 0) {
-        perror("accept");
-        return -1;
-    }
 
     loop = g_main_loop_new(NULL, FALSE);
     vug_init(&vdev_scsi->parent,
-             cli_sock,
+             sock,
              loop,
              vus_panic_cb,
              &vus_iface);
 
-    chan = g_io_channel_unix_new(cli_sock);
+    chan = g_io_channel_unix_new(sock);
     g_io_add_watch(chan, G_IO_IN, vus_vhost_cb, vdev_scsi);
     g_main_loop_run(loop);
     g_io_channel_unref(chan);
@@ -428,7 +409,7 @@ int main(int argc, char **argv)
     VusDev *vdev_scsi = NULL;
     char *unix_fn = NULL;
     char *iscsi_uri = NULL;
-    int sock, opt, err = EXIT_SUCCESS;
+    int lsock = -1, csock = -1, opt, err = EXIT_SUCCESS;
 
     while ((opt = getopt(argc, argv, "u:i:")) != -1) {
         switch (opt) {
@@ -448,17 +429,24 @@ int main(int argc, char **argv)
         goto help;
     }
 
-    sock = unix_sock_new(unix_fn);
-    if (sock < 0) {
+    lsock = unix_sock_new(unix_fn);
+    if (lsock < 0) {
+        goto err;
+    }
+
+    csock = accept(lsock, NULL, NULL);
+    if (csock < 0) {
+        perror("accept");
         goto err;
     }
-    vdev_scsi = vdev_scsi_new(sock);
+
+    vdev_scsi = vdev_scsi_new();
 
     if (vus_iscsi_add_lun(&vdev_scsi->lun, iscsi_uri) != 0) {
         goto err;
     }
 
-    if (vdev_scsi_run(vdev_scsi) != 0) {
+    if (vdev_scsi_run(vdev_scsi, csock) != 0) {
         goto err;
     }
 
@@ -467,6 +455,12 @@ out:
         vdev_scsi_free(vdev_scsi);
         unlink(unix_fn);
     }
+    if (csock >= 0) {
+        close(csock);
+    }
+    if (lsock >= 0) {
+        close(lsock);
+    }
     g_free(unix_fn);
     g_free(iscsi_uri);
 
-- 
2.14.1.146.gd35faa819

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

* Re: [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (26 preceding siblings ...)
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 27/27] vhost-user-scsi: remove server_sock from VusDev Marc-André Lureau
@ 2017-08-23 16:52 ` no-reply
  2017-08-23 16:53 ` no-reply
                   ` (2 subsequent siblings)
  30 siblings, 0 replies; 67+ messages in thread
From: no-reply @ 2017-08-23 16:52 UTC (permalink / raw)
  To: marcandre.lureau; +Cc: famz, qemu-devel, changpeng.liu, felipe

Hi,

This series failed build test on s390x host. Please find the details below.

Message-id: 20170823162004.27337-1-marcandre.lureau@redhat.com
Subject: [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up
Type: series

=== TEST SCRIPT BEGIN ===
#!/bin/bash
# Testing script will be invoked under the git checkout with
# HEAD pointing to a commit that has the patches applied on top of "base"
# branch
set -e
echo "=== ENV ==="
env
echo "=== PACKAGES ==="
rpm -qa
echo "=== TEST BEGIN ==="
CC=$HOME/bin/cc
INSTALL=$PWD/install
BUILD=$PWD/build
echo -n "Using CC: "
realpath $CC
mkdir -p $BUILD $INSTALL
SRC=$PWD
cd $BUILD
$SRC/configure --cc=$CC --prefix=$INSTALL
make -j4
# XXX: we need reliable clean up
# make check -j4 V=1
make install
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
 - [tag update]      patchew/1503471071-2233-1-git-send-email-peterx@redhat.com -> patchew/1503471071-2233-1-git-send-email-peterx@redhat.com
 - [tag update]      patchew/20170822125113.5025-1-stefanha@redhat.com -> patchew/20170822125113.5025-1-stefanha@redhat.com
 - [tag update]      patchew/20170823155458.19601-1-cohuck@redhat.com -> patchew/20170823155458.19601-1-cohuck@redhat.com
 * [new tag]         patchew/20170823162004.27337-1-marcandre.lureau@redhat.com -> patchew/20170823162004.27337-1-marcandre.lureau@redhat.com
Switched to a new branch 'test'
a883bf7 vhost-user-scsi: remove server_sock from VusDev
86da7da vhost-user-scsi: use libvhost-user glib helper
52f12bd build-sys: fix libvhost-user.a build
e634f63 libvhost-user: add glib source helper
1bfdeb5 vhost-user-scsi: use glib logging
b524aeb vhost-user-scsi: simplify source handling
2d4e0af vhost-user-scsi: drop extra callback pointer
c24a456 vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h
c7c5c6e vhost-user-scsi: avoid use of iscsi_ namespace
1b91a7a vhost-user-scsi: rename VUS types
316c7d7 vhost-user-scsi: remove unimplemented functions
13109b9 vhost-user-scsi: remove VUS_MAX_LUNS
936b68c vhost-user-scsi: remove vdev_scsi_add_iscsi_lun()
61fa351 vhost-user-scsi: assert() in iscsi_add_lun()
c3e0520 vhost-user-scsi: use glib watch directly
af33a18 vhost-user-scsi: use NULL pointer
ce03f16 vhost-user-scsi: simplify unix path cleanup
87b438b vhost-user-scsi: remove vdev_scsi_find_by_vu()
788bdf1 vhost-user-scsi: also free the gtree
615f11b vhost-user-scsi: glib calls that allocate don't return NULL
b28edd7 vhost-user-scsi: use glib allocation
82ef84b vhost-user-scsi: code style fixes
ed3cbb0 vhost-user-scsi: connect unix socket before allocating
ed8c208 vhost-user-scsi: use g_strdup()
5495c50 libvhost-user: improve vu_queue_pop() doc
98ad152 libvhost-user: drop dependency on glib
5fa9fff glib-compat: move G_SOURCE_CONTINUE/REMOVE there

=== OUTPUT BEGIN ===
=== ENV ===
XDG_SESSION_ID=39560
SHELL=/bin/sh
USER=fam
PATCHEW=/home/fam/patchew/patchew-cli -s http://patchew.org --nodebug
PATH=/usr/bin:/bin
PWD=/var/tmp/patchew-tester-tmp-rieff5oi/src
LANG=en_US.UTF-8
HOME=/home/fam
SHLVL=2
LOGNAME=fam
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1012/bus
XDG_RUNTIME_DIR=/run/user/1012
_=/usr/bin/env
=== PACKAGES ===
gpg-pubkey-873529b8-54e386ff
xz-libs-5.2.2-2.fc24.s390x
libxshmfence-1.2-3.fc24.s390x
giflib-4.1.6-15.fc24.s390x
trousers-lib-0.3.13-6.fc24.s390x
ncurses-base-6.0-6.20160709.fc25.noarch
gmp-6.1.1-1.fc25.s390x
libidn-1.33-1.fc25.s390x
slang-2.3.0-7.fc25.s390x
pkgconfig-0.29.1-1.fc25.s390x
alsa-lib-1.1.1-2.fc25.s390x
yum-metadata-parser-1.1.4-17.fc25.s390x
python3-slip-dbus-0.6.4-4.fc25.noarch
python2-cssselect-0.9.2-1.fc25.noarch
createrepo_c-libs-0.10.0-6.fc25.s390x
initscripts-9.69-1.fc25.s390x
parted-3.2-21.fc25.s390x
flex-2.6.0-3.fc25.s390x
colord-libs-1.3.4-1.fc25.s390x
python-osbs-client-0.33-3.fc25.noarch
perl-Pod-Simple-3.35-1.fc25.noarch
python2-simplejson-3.10.0-1.fc25.s390x
brltty-5.4-2.fc25.s390x
librados2-10.2.4-2.fc25.s390x
tcp_wrappers-7.6-83.fc25.s390x
libcephfs_jni1-10.2.4-2.fc25.s390x
nettle-devel-3.3-1.fc25.s390x
bzip2-devel-1.0.6-21.fc25.s390x
libuuid-2.28.2-2.fc25.s390x
python3-dnf-1.1.10-6.fc25.noarch
texlive-kpathsea-doc-svn41139-33.fc25.1.noarch
openssh-7.4p1-4.fc25.s390x
texlive-kpathsea-bin-svn40473-33.20160520.fc25.1.s390x
texlive-graphics-svn41015-33.fc25.1.noarch
texlive-dvipdfmx-def-svn40328-33.fc25.1.noarch
texlive-mfware-svn40768-33.fc25.1.noarch
texlive-texlive-scripts-svn41433-33.fc25.1.noarch
texlive-euro-svn22191.1.1-33.fc25.1.noarch
texlive-etex-svn37057.0-33.fc25.1.noarch
texlive-iftex-svn29654.0.2-33.fc25.1.noarch
texlive-palatino-svn31835.0-33.fc25.1.noarch
texlive-texlive-docindex-svn41430-33.fc25.1.noarch
texlive-xunicode-svn30466.0.981-33.fc25.1.noarch
texlive-koma-script-svn41508-33.fc25.1.noarch
texlive-pst-grad-svn15878.1.06-33.fc25.1.noarch
texlive-pst-blur-svn15878.2.0-33.fc25.1.noarch
texlive-jknapltx-svn19440.0-33.fc25.1.noarch
texinfo-6.1-4.fc25.s390x
openssl-devel-1.0.2k-1.fc25.s390x
gdk-pixbuf2-2.36.6-1.fc25.s390x
nspr-4.14.0-2.fc25.s390x
nss-softokn-freebl-3.30.2-1.0.fc25.s390x
jansson-2.10-2.fc25.s390x
fedora-repos-25-4.noarch
python3-libs-3.5.3-6.fc25.s390x
perl-Errno-1.25-387.fc25.s390x
acl-2.2.52-13.fc25.s390x
pcre2-utf16-10.23-8.fc25.s390x
pango-1.40.5-1.fc25.s390x
systemd-pam-231-17.fc25.s390x
python2-gluster-3.10.4-1.fc25.s390x
NetworkManager-libnm-1.4.4-5.fc25.s390x
selinux-policy-3.13.1-225.18.fc25.noarch
poppler-0.45.0-5.fc25.s390x
ccache-3.3.4-1.fc25.s390x
valgrind-3.12.0-9.fc25.s390x
perl-open-1.10-387.fc25.noarch
libaio-0.3.110-6.fc24.s390x
libfontenc-1.1.3-3.fc24.s390x
lzo-2.08-8.fc24.s390x
isl-0.14-5.fc24.s390x
libXau-1.0.8-6.fc24.s390x
linux-atm-libs-2.5.1-14.fc24.s390x
libXext-1.3.3-4.fc24.s390x
libXxf86vm-1.1.4-3.fc24.s390x
bison-3.0.4-4.fc24.s390x
perl-srpm-macros-1-20.fc25.noarch
gawk-4.1.3-8.fc25.s390x
libwayland-client-1.12.0-1.fc25.s390x
perl-Exporter-5.72-366.fc25.noarch
perl-version-0.99.17-1.fc25.s390x
fftw-libs-double-3.3.5-3.fc25.s390x
libssh2-1.8.0-1.fc25.s390x
ModemManager-glib-1.6.4-1.fc25.s390x
newt-python3-0.52.19-2.fc25.s390x
python-munch-2.0.4-3.fc25.noarch
python-bugzilla-1.2.2-4.fc25.noarch
libedit-3.1-16.20160618cvs.fc25.s390x
createrepo_c-0.10.0-6.fc25.s390x
device-mapper-multipath-libs-0.4.9-83.fc25.s390x
yum-3.4.3-510.fc25.noarch
dracut-config-rescue-044-78.fc25.s390x
mozjs17-17.0.0-16.fc25.s390x
libselinux-2.5-13.fc25.s390x
libgo-devel-6.3.1-1.fc25.s390x
python2-pyparsing-2.1.10-1.fc25.noarch
cairo-gobject-1.14.8-1.fc25.s390x
ethtool-4.8-1.fc25.s390x
xorg-x11-proto-devel-7.7-20.fc25.noarch
brlapi-0.6.5-2.fc25.s390x
librados-devel-10.2.4-2.fc25.s390x
libXinerama-devel-1.1.3-6.fc24.s390x
lua-posix-33.3.1-3.fc25.s390x
usbredir-devel-0.7.1-2.fc24.s390x
libepoxy-1.4.1-1.fc25.s390x
python3-dnf-plugins-core-0.1.21-5.fc25.noarch
texlive-pdftex-doc-svn41149-33.fc25.1.noarch
openssh-clients-7.4p1-4.fc25.s390x
iptables-1.6.0-3.fc25.s390x
texlive-texlive.infra-svn41280-33.fc25.1.noarch
texlive-graphics-cfg-svn40269-33.fc25.1.noarch
texlive-bibtex-svn40768-33.fc25.1.noarch
texlive-mfware-bin-svn40473-33.20160520.fc25.1.s390x
texlive-texlive-scripts-bin-svn29741.0-33.20160520.fc25.1.noarch
texlive-sauerj-svn15878.0-33.fc25.1.noarch
texlive-enctex-svn34957.0-33.fc25.1.noarch
texlive-ifetex-svn24853.1.2-33.fc25.1.noarch
texlive-ntgclass-svn15878.2.1a-33.fc25.1.noarch
texlive-tex-gyre-math-svn41264-33.fc25.1.noarch
texlive-bera-svn20031.0-33.fc25.1.noarch
texlive-ms-svn29849.0-33.fc25.1.noarch
texlive-pst-fill-svn15878.1.01-33.fc25.1.noarch
texlive-ctable-svn38672-33.fc25.1.noarch
texlive-extsizes-svn17263.1.4a-33.fc25.1.noarch
texlive-collection-latexrecommended-svn35765.0-33.20160520.fc25.1.noarch
perl-Filter-1.57-1.fc25.s390x
krb5-workstation-1.14.4-7.fc25.s390x
python2-rpm-macros-3-12.fc25.noarch
libglvnd-egl-0.2.999-14.20170308git8e6e102.fc25.s390x
libglvnd-opengl-0.2.999-14.20170308git8e6e102.fc25.s390x
gdbm-1.13-1.fc25.s390x
nss-util-3.30.2-1.0.fc25.s390x
libcrypt-nss-2.24-9.fc25.s390x
libtasn1-4.12-1.fc25.s390x
fedora-release-25-2.noarch
gdb-headless-7.12.1-48.fc25.s390x
perl-macros-5.24.2-387.fc25.s390x
sqlite-devel-3.14.2-2.fc25.s390x
pcre-devel-8.41-1.fc25.s390x
libX11-1.6.5-1.fc25.s390x
coreutils-8.25-17.fc25.s390x
python2-openidc-client-0-3.20170523git77cb3ee.fc25.noarch
nss-sysinit-3.30.2-1.1.fc25.s390x
systemtap-client-3.1-5.fc25.s390x
nss-devel-3.30.2-1.1.fc25.s390x
firewalld-0.4.4.5-1.fc25.noarch
rpmlint-1.9-9.fc25.noarch
system-python-3.5.3-6.fc25.s390x
gpg-pubkey-efe550f5-5220ba41
gpg-pubkey-81b46521-55b3ca9a
filesystem-3.2-37.fc24.s390x
libffi-3.1-9.fc24.s390x
keyutils-libs-1.5.9-8.fc24.s390x
libnfnetlink-1.0.1-8.fc24.s390x
libtheora-1.1.1-14.fc24.s390x
xml-common-0.6.3-44.fc24.noarch
autoconf-2.69-22.fc24.noarch
libXt-1.1.5-3.fc24.s390x
kbd-legacy-2.0.3-3.fc24.noarch
ghostscript-fonts-5.50-35.fc24.noarch
libXevie-1.0.3-11.fc24.s390x
libcap-2.25-2.fc25.s390x
mpfr-3.1.5-1.fc25.s390x
perl-Carp-1.40-365.fc25.noarch
libmnl-1.0.4-1.fc25.s390x
perl-Unicode-EastAsianWidth-1.33-8.fc25.noarch
libwayland-cursor-1.12.0-1.fc25.s390x
python-krbV-1.0.90-12.fc25.s390x
python2-urllib3-1.15.1-3.fc25.noarch
fipscheck-1.4.1-11.fc25.s390x
libndp-1.6-1.fc25.s390x
gnupg2-2.1.13-2.fc25.s390x
libXfixes-5.0.3-1.fc25.s390x
adwaita-icon-theme-3.22.0-1.fc25.noarch
dconf-0.26.0-1.fc25.s390x
ncurses-devel-6.0-6.20160709.fc25.s390x
dejagnu-1.6-1.fc25.noarch
libstdc++-devel-6.3.1-1.fc25.s390x
device-mapper-1.02.136-3.fc25.s390x
subversion-1.9.5-1.fc25.s390x
libtool-ltdl-2.4.6-13.fc25.s390x
libevent-2.0.22-1.fc25.s390x
atk-devel-2.22.0-1.fc25.s390x
libev-4.24-1.fc25.s390x
xorg-x11-fonts-Type1-7.5-16.fc24.noarch
brlapi-devel-0.6.5-2.fc25.s390x
pulseaudio-libs-10.0-2.fc25.s390x
glib2-2.50.3-1.fc25.s390x
python2-rpm-4.13.0.1-1.fc25.s390x
dnf-1.1.10-6.fc25.noarch
texlive-metafont-bin-svn40987-33.20160520.fc25.1.s390x
texlive-xkeyval-svn35741.2.7a-33.fc25.1.noarch
texlive-euler-svn17261.2.5-33.fc25.1.noarch
texlive-mptopdf-svn41282-33.fc25.1.noarch
texlive-wasy-svn35831.0-33.fc25.1.noarch
texlive-avantgar-svn31835.0-33.fc25.1.noarch
texlive-eurosym-svn17265.1.4_subrfix-33.fc25.1.noarch
texlive-knuth-lib-svn35820.0-33.fc25.1.noarch
texlive-parallel-svn15878.0-33.fc25.1.noarch
texlive-texlive-msg-translations-svn41431-33.fc25.1.noarch
texlive-latex-svn40218-33.fc25.1.noarch
texlive-lualatex-math-svn40621-33.fc25.1.noarch
texlive-auto-pst-pdf-svn23723.0.6-33.fc25.1.noarch
texlive-powerdot-svn38984-33.fc25.1.noarch
texlive-wasysym-svn15878.2.0-33.fc25.1.noarch
ImageMagick-libs-6.9.3.0-6.fc25.s390x
geoclue2-2.4.5-1.fc25.s390x
perl-IO-Socket-IP-0.39-1.fc25.noarch
python2-pyasn1-0.2.3-1.fc25.noarch
libglvnd-0.2.999-14.20170308git8e6e102.fc25.s390x
libglvnd-gles-0.2.999-14.20170308git8e6e102.fc25.s390x
gdk-pixbuf2-devel-2.36.6-1.fc25.s390x
at-spi2-core-devel-2.22.1-1.fc25.s390x
libacl-2.2.52-13.fc25.s390x
perl-libs-5.24.2-387.fc25.s390x
mesa-libglapi-17.0.5-3.fc25.s390x
kernel-headers-4.11.10-200.fc25.s390x
p11-kit-devel-0.23.2-4.fc25.s390x
python3-rpmconf-1.0.19-1.fc25.noarch
sqlite-3.14.2-2.fc25.s390x
pcre-utf32-8.41-1.fc25.s390x
libX11-common-1.6.5-1.fc25.noarch
coreutils-common-8.25-17.fc25.s390x
mesa-libEGL-17.0.5-3.fc25.s390x
nss-3.30.2-1.1.fc25.s390x
systemtap-runtime-3.1-5.fc25.s390x
NetworkManager-glib-1.4.4-5.fc25.s390x
audit-2.7.7-1.fc25.s390x
perl-Time-HiRes-1.9742-1.fc25.s390x
libsolv-0.6.28-1.fc25.s390x
gpg-pubkey-34ec9cba-54e38751
gpg-pubkey-030d5aed-55b577f0
basesystem-11-2.fc24.noarch
libmpc-1.0.2-5.fc24.s390x
libunistring-0.9.4-3.fc24.s390x
libmodman-2.0.1-12.fc24.s390x
lsscsi-0.28-3.fc24.s390x
kbd-misc-2.0.3-3.fc24.noarch
kmod-23-1.fc25.s390x
newt-0.52.19-2.fc25.s390x
perl-Text-Unidecode-1.27-3.fc25.noarch
plymouth-core-libs-0.9.3-0.6.20160620git0e65b86c.fc25.s390x
which-2.21-1.fc25.s390x
python3-slip-0.6.4-4.fc25.noarch
python3-systemd-232-1.fc25.s390x
python-lockfile-0.11.0-4.fc25.noarch
python2-requests-2.10.0-4.fc25.noarch
libnghttp2-1.13.0-2.fc25.s390x
python-urlgrabber-3.10.1-9.fc25.noarch
iputils-20161105-1.fc25.s390x
rest-0.8.0-1.fc25.s390x
adwaita-cursor-theme-3.22.0-1.fc25.noarch
authconfig-6.2.10-14.fc25.s390x
automake-1.15-7.fc25.noarch
shared-mime-info-1.8-1.fc25.s390x
pigz-2.3.4-1.fc25.s390x
device-mapper-libs-1.02.136-3.fc25.s390x
dnsmasq-2.76-2.fc25.s390x
fedora-packager-0.6.0.1-1.fc25.noarch
gcc-c++-6.3.1-1.fc25.s390x
libwebp-0.5.2-1.fc25.s390x
boost-system-1.60.0-10.fc25.s390x
libasyncns-0.8-10.fc24.s390x
libXau-devel-1.0.8-6.fc24.s390x
libverto-libev-0.2.6-6.fc24.s390x
python3-html5lib-0.999-9.fc25.noarch
ttmkfdir-3.0.9-48.fc24.s390x
pulseaudio-libs-glib2-10.0-2.fc25.s390x
wpa_supplicant-2.6-1.fc25.s390x
texlive-lib-2016-33.20160520.fc25.s390x
libXi-devel-1.7.9-1.fc25.s390x
python3-distro-1.0.3-1.fc25.noarch
rpm-plugin-systemd-inhibit-4.13.0.1-1.fc25.s390x
texlive-texlive-common-doc-svn40682-33.fc25.1.noarch
packagedb-cli-2.14.1-1.fc25.noarch
texlive-metafont-svn40793-33.fc25.1.noarch
texlive-tools-svn40934-33.fc25.1.noarch
texlive-enumitem-svn24146.3.5.2-33.fc25.1.noarch
texlive-mptopdf-bin-svn18674.0-33.20160520.fc25.1.noarch
texlive-underscore-svn18261.0-33.fc25.1.noarch
texlive-anysize-svn15878.0-33.fc25.1.noarch
texlive-euenc-svn19795.0.1h-33.fc25.1.noarch
texlive-kastrup-svn15878.0-33.fc25.1.noarch
texlive-paralist-svn39247-33.fc25.1.noarch
texlive-texlive-en-svn41185-33.fc25.1.noarch
texlive-tipa-svn29349.1.3-33.fc25.1.noarch
texlive-currfile-svn40725-33.fc25.1.noarch
texlive-pst-node-svn40743-33.fc25.1.noarch
texlive-pst-slpe-svn24391.1.31-33.fc25.1.noarch
texlive-typehtml-svn17134.0-33.fc25.1.noarch
SDL2-devel-2.0.5-3.fc25.s390x
libcroco-0.6.11-3.fc25.s390x
bluez-libs-devel-5.44-1.fc25.s390x
kernel-4.10.8-200.fc25.s390x
expat-2.2.1-1.fc25.s390x
system-python-libs-3.5.3-6.fc25.s390x
pcre2-10.23-8.fc25.s390x
firewalld-filesystem-0.4.4.5-1.fc25.noarch
pcre-cpp-8.41-1.fc25.s390x
python3-firewall-0.4.4.5-1.fc25.noarch
freetype-devel-2.6.5-9.fc25.s390x
pcre-utf16-8.41-1.fc25.s390x
linux-firmware-20170605-74.git37857004.fc25.noarch
distribution-gpg-keys-1.12-1.fc25.noarch
kernel-modules-4.11.10-200.fc25.s390x
gnutls-devel-3.5.14-1.fc25.s390x
systemtap-devel-3.1-5.fc25.s390x
java-1.8.0-openjdk-1.8.0.131-1.b12.fc25.s390x
polkit-0.113-8.fc25.s390x
perl-SelfLoader-1.23-387.fc25.noarch
libdb-utils-5.3.28-24.fc25.s390x
fontpackages-filesystem-1.44-17.fc24.noarch
groff-base-1.22.3-8.fc24.s390x
ilmbase-2.2.0-5.fc24.s390x
OpenEXR-libs-2.2.0-5.fc24.s390x
hesiod-3.2.1-6.fc24.s390x
sysfsutils-2.1.0-19.fc24.s390x
ocaml-srpm-macros-2-4.fc24.noarch
mailx-12.5-19.fc24.s390x
ncurses-libs-6.0-6.20160709.fc25.s390x
ipset-libs-6.29-1.fc25.s390x
gmp-devel-6.1.1-1.fc25.s390x
python-pip-8.1.2-2.fc25.noarch
harfbuzz-1.3.2-1.fc25.s390x
python2-iniparse-0.4-20.fc25.noarch
python3-iniparse-0.4-20.fc25.noarch
python3-kickstart-2.32-1.fc25.noarch
perl-Net-SSLeay-1.78-1.fc25.s390x
drpm-0.3.0-3.fc25.s390x
glib-networking-2.50.0-1.fc25.s390x
webkitgtk3-2.4.11-3.fc25.s390x
libXaw-1.0.13-4.fc25.s390x
xorg-x11-font-utils-7.5-32.fc25.s390x
hardlink-1.1-1.fc25.s390x
libcom_err-1.43.3-1.fc25.s390x
python2-dateutil-2.6.0-1.fc25.noarch
libXpm-3.5.12-1.fc25.s390x
python2-smmap-2.0.1-1.fc25.noarch
poppler-data-0.4.7-6.fc25.noarch
librbd1-10.2.4-2.fc25.s390x
perl-Digest-MD5-2.55-2.fc25.s390x
wayland-protocols-devel-1.7-1.fc25.noarch
texi2html-5.0-4.fc24.noarch
libxkbcommon-0.7.1-1.fc25.s390x
libuuid-devel-2.28.2-2.fc25.s390x
libcacard-2.5.3-1.fc25.s390x
libwmf-lite-0.2.8.4-50.fc25.s390x
texlive-tetex-svn41059-33.fc25.1.noarch
texlive-thumbpdf-svn34621.3.16-33.fc25.1.noarch
texlive-carlisle-svn18258.0-33.fc25.1.noarch
texlive-makeindex-bin-svn40473-33.20160520.fc25.1.s390x
texlive-pdftex-svn41149-33.fc25.1.noarch
texlive-csquotes-svn39538-33.fc25.1.noarch
texlive-courier-svn35058.0-33.fc25.1.noarch
texlive-helvetic-svn31835.0-33.fc25.1.noarch
texlive-mfnfss-svn19410.0-33.fc25.1.noarch
texlive-sepnum-svn20186.2.0-33.fc25.1.noarch
texlive-utopia-svn15878.0-33.fc25.1.noarch
texlive-luatexbase-svn38550-33.fc25.1.noarch
texlive-pst-3d-svn17257.1.10-33.fc25.1.noarch
texlive-latex-bin-bin-svn14050.0-33.20160520.fc25.1.noarch
texlive-l3experimental-svn41163-33.fc25.1.noarch
net-tools-2.0-0.40.20160329git.fc25.s390x
perl-Pod-Perldoc-3.28-1.fc25.noarch
openssl-1.0.2k-1.fc25.s390x
man-pages-4.06-4.fc25.noarch
python3-magic-5.29-4.fc25.noarch
libxml2-2.9.4-2.fc25.s390x
nss-softokn-3.30.2-1.0.fc25.s390x
p11-kit-trust-0.23.2-4.fc25.s390x
emacs-filesystem-25.2-2.fc25.noarch
python3-dateutil-2.6.0-1.fc25.noarch
perl-threads-shared-1.57-1.fc25.s390x
libnotify-0.7.7-1.fc25.s390x
unzip-6.0-32.fc25.s390x
pango-devel-1.40.5-1.fc25.s390x
libdrm-2.4.81-1.fc25.s390x
python-beautifulsoup4-4.6.0-1.fc25.noarch
libcurl-7.51.0-7.fc25.s390x
dhcp-client-4.3.5-3.fc25.s390x
python2-fedora-0.9.0-6.fc25.noarch
emacs-25.2-2.fc25.s390x
gdb-7.12.1-48.fc25.s390x
expat-devel-2.2.1-1.fc25.s390x
gpg-pubkey-95a43f54-5284415a
dejavu-fonts-common-2.35-3.fc24.noarch
libSM-1.2.2-4.fc24.s390x
diffutils-3.3-13.fc24.s390x
libogg-1.3.2-5.fc24.s390x
hunspell-en-US-0.20140811.1-5.fc24.noarch
libdaemon-0.14-10.fc24.s390x
patch-2.7.5-3.fc24.s390x
libsysfs-2.1.0-19.fc24.s390x
procmail-3.22-39.fc24.s390x
libXdamage-1.1.4-8.fc24.s390x
libotf-0.9.13-7.fc24.s390x
urw-fonts-2.4-22.fc24.noarch
crontabs-1.11-12.20150630git.fc24.noarch
ppp-2.4.7-9.fc24.s390x
cyrus-sasl-2.1.26-26.2.fc24.s390x
zlib-devel-1.2.8-10.fc24.s390x
time-1.7-49.fc24.s390x
gpg-pubkey-fdb19c98-56fd6333
libcap-ng-0.7.8-1.fc25.s390x
binutils-2.26.1-1.fc25.s390x
lcms2-2.8-2.fc25.s390x
libcomps-0.1.7-5.fc25.s390x
apr-1.5.2-4.fc25.s390x
perl-constant-1.33-367.fc25.noarch
perl-Data-Dumper-2.161-1.fc25.s390x
ipcalc-0.1.8-1.fc25.s390x
gmp-c++-6.1.1-1.fc25.s390x
fontconfig-2.12.1-1.fc25.s390x
enchant-1.6.0-14.fc25.s390x
pyliblzma-0.5.3-16.fc25.s390x
libsepol-devel-2.5-10.fc25.s390x
python3-ordered-set-2.0.0-4.fc25.noarch
python-ipaddress-1.0.16-3.fc25.noarch
python2-kerberos-1.2.5-1.fc25.s390x
python2-pysocks-1.5.6-5.fc25.noarch
fipscheck-lib-1.4.1-11.fc25.s390x
libatomic_ops-7.4.4-1.fc25.s390x
net-snmp-agent-libs-5.7.3-13.fc25.s390x
dracut-044-78.fc25.s390x
python2-pygpgme-0.3-18.fc25.s390x
orc-0.4.26-1.fc25.s390x
yum-utils-1.1.31-511.fc25.noarch
libXrender-0.9.10-1.fc25.s390x
libXrandr-1.5.1-1.fc25.s390x
go-srpm-macros-2-7.fc25.noarch
gnupg2-smime-2.1.13-2.fc25.s390x
guile-devel-2.0.13-1.fc25.s390x
uboot-tools-2016.09.01-2.fc25.s390x
pykickstart-2.32-1.fc25.noarch
python-bunch-1.0.1-9.fc25.noarch
perl-generators-1.10-1.fc25.noarch
perl-Mozilla-CA-20160104-3.fc25.noarch
bzip2-libs-1.0.6-21.fc25.s390x
libpng-1.6.27-1.fc25.s390x
desktop-file-utils-0.23-2.fc25.s390x
python2-cccolutils-1.4-1.fc25.s390x
python2-lxml-3.7.2-1.fc25.s390x
redhat-rpm-config-45-1.fc25.noarch
device-mapper-event-libs-1.02.136-3.fc25.s390x
lvm2-libs-2.02.167-3.fc25.s390x
python2-gitdb-2.0.0-1.fc25.noarch
gcc-gfortran-6.3.1-1.fc25.s390x
libselinux-python-2.5-13.fc25.s390x
openjpeg2-2.1.2-3.fc25.s390x
boost-thread-1.60.0-10.fc25.s390x
librbd-devel-10.2.4-2.fc25.s390x
libXcursor-devel-1.1.14-6.fc24.s390x
latex2html-2012-7.fc24.noarch
lksctp-tools-1.0.16-5.fc24.s390x
libfdt-1.4.2-1.fc25.s390x
libXft-devel-2.3.2-4.fc24.s390x
libattr-devel-2.4.47-16.fc24.s390x
libiscsi-devel-1.15.0-2.fc24.s390x
gettext-0.19.8.1-3.fc25.s390x
libjpeg-turbo-devel-1.5.1-0.fc25.s390x
pulseaudio-libs-devel-10.0-2.fc25.s390x
libepoxy-devel-1.4.1-1.fc25.s390x
krb5-libs-1.14.4-7.fc25.s390x
libmount-2.28.2-2.fc25.s390x
python3-decorator-4.0.11-1.fc25.noarch
rpm-plugin-selinux-4.13.0.1-1.fc25.s390x
tzdata-java-2017b-1.fc25.noarch
python-srpm-macros-3-12.fc25.noarch
libsmartcols-2.28.2-2.fc25.s390x
kernel-core-4.10.5-200.fc25.s390x
kernel-modules-4.10.5-200.fc25.s390x
texlive-kpathsea-svn41139-33.fc25.1.noarch
texlive-amsmath-svn41561-33.fc25.1.noarch
texlive-thumbpdf-bin-svn6898.0-33.20160520.fc25.1.noarch
texlive-psnfss-svn33946.9.2a-33.fc25.1.noarch
texlive-subfig-svn15878.1.3-33.fc25.1.noarch
texlive-fancybox-svn18304.1.4-33.fc25.1.noarch
texlive-lua-alt-getopt-svn29349.0.7.0-33.fc25.1.noarch
texlive-natbib-svn20668.8.31b-33.fc25.1.noarch
texlive-pdftex-bin-svn40987-33.20160520.fc25.1.s390x
texlive-xdvi-svn40768-33.fc25.1.noarch
texlive-crop-svn15878.1.5-33.fc25.1.noarch
texlive-babel-english-svn30264.3.3p-33.fc25.1.noarch
texlive-cmextra-svn32831.0-33.fc25.1.noarch
texlive-fancyhdr-svn15878.3.1-33.fc25.1.noarch
texlive-luatex-svn40963-33.fc25.1.noarch
texlive-knuth-local-svn38627-33.fc25.1.noarch
texlive-mflogo-font-svn36898.1.002-33.fc25.1.noarch
texlive-parskip-svn19963.2.0-33.fc25.1.noarch
texlive-section-svn20180.0-33.fc25.1.noarch
texlive-textcase-svn15878.0-33.fc25.1.noarch
texlive-updmap-map-svn41159-33.fc25.1.noarch
texlive-attachfile-svn38830-33.fc25.1.noarch
libglvnd-glx-0.2.999-14.20170308git8e6e102.fc25.s390x
libglvnd-core-devel-0.2.999-14.20170308git8e6e102.fc25.s390x
python-magic-5.29-4.fc25.noarch
glibc-common-2.24-9.fc25.s390x
sqlite-libs-3.14.2-2.fc25.s390x
libtiff-4.0.8-1.fc25.s390x
libdb-5.3.28-24.fc25.s390x
glusterfs-client-xlators-3.10.4-1.fc25.s390x
nss-util-devel-3.30.2-1.0.fc25.s390x
gnutls-3.5.14-1.fc25.s390x
bind-license-9.10.5-2.P2.fc25.noarch
mesa-libGLES-17.0.5-3.fc25.s390x
python3-requests-kerberos-0.10.0-2.fc25.noarch
python3-pyOpenSSL-16.2.0-1.fc25.noarch
perl-threads-2.16-1.fc25.s390x
cryptsetup-libs-1.7.5-1.fc25.s390x
vim-minimal-8.0.705-1.fc25.s390x
netpbm-10.79.00-1.fc25.s390x
qrencode-libs-3.4.4-1.fc25.s390x
mariadb-config-10.1.24-3.fc25.s390x
gstreamer1-plugins-base-1.10.5-1.fc25.s390x
elfutils-default-yama-scope-0.169-1.fc25.noarch
glusterfs-3.10.4-1.fc25.s390x
systemd-udev-231-17.fc25.s390x
python2-koji-1.13.0-2.fc25.noarch
unbound-libs-1.6.3-1.fc25.s390x
openldap-2.4.44-11.fc25.s390x
koji-1.13.0-2.fc25.noarch
bind99-libs-9.9.10-2.P3.fc25.s390x
libcurl-devel-7.51.0-7.fc25.s390x
mesa-libGL-devel-17.0.5-3.fc25.s390x
python2-sssdconfig-1.15.2-5.fc25.noarch
webkitgtk4-plugin-process-gtk2-2.16.5-1.fc25.s390x
graphite2-devel-1.3.10-1.fc25.s390x
systemtap-sdt-devel-3.1-5.fc25.s390x
iproute-tc-4.11.0-1.fc25.s390x
libarchive-3.2.2-2.fc25.s390x
publicsuffix-list-dafsa-20170424-1.fc25.noarch
texlive-luaotfload-svn40902-33.fc25.1.noarch
texlive-unicode-math-svn38462-33.fc25.1.noarch
texlive-fancyvrb-svn18492.2.8-33.fc25.1.noarch
texlive-pst-pdf-bin-svn7838.0-33.20160520.fc25.1.noarch
texlive-amscls-svn36804.0-33.fc25.1.noarch
texlive-ltxmisc-svn21927.0-33.fc25.1.noarch
texlive-breqn-svn38099.0.98d-33.fc25.1.noarch
texlive-xetex-def-svn40327-33.fc25.1.noarch
openssh-server-7.4p1-4.fc25.s390x
sendmail-8.15.2-8.fc25.s390x
tzdata-2017b-1.fc25.noarch
hunspell-1.4.1-2.fc25.s390x
gpg-pubkey-8e1431d5-53bcbac7
zlib-1.2.8-10.fc24.s390x
sed-4.2.2-15.fc24.s390x
psmisc-22.21-8.fc24.s390x
gpm-libs-1.20.7-9.fc24.s390x
zip-3.0-16.fc24.s390x
libyubikey-1.13-2.fc24.s390x
sg3_utils-libs-1.41-3.fc24.s390x
polkit-pkla-compat-0.1-7.fc24.s390x
passwd-0.79-8.fc24.s390x
trousers-0.3.13-6.fc24.s390x
grubby-8.40-3.fc24.s390x
rootfiles-8.1-19.fc24.noarch
nettle-3.3-1.fc25.s390x
libksba-1.3.5-1.fc25.s390x
perl-Text-ParseWords-3.30-365.fc25.noarch
perl-PathTools-3.63-366.fc25.s390x
perl-File-Temp-0.23.04-365.fc25.noarch
fuse-libs-2.9.7-1.fc25.s390x
perl-Pod-Escapes-1.07-365.fc25.noarch
perl-Term-ANSIColor-4.05-2.fc25.noarch
perl-URI-1.71-5.fc25.noarch
libXfont-1.5.2-1.fc25.s390x
python-six-1.10.0-3.fc25.noarch
dbus-glib-0.108-1.fc25.s390x
gobject-introspection-1.50.0-1.fc25.s390x
libpwquality-1.3.0-6.fc25.s390x
python-gobject-base-3.22.0-1.fc25.s390x
python-html5lib-0.999-9.fc25.noarch
python3-dbus-1.2.4-2.fc25.s390x
python3-chardet-2.3.0-1.fc25.noarch
python3-urllib3-1.15.1-3.fc25.noarch
python-offtrac-0.1.0-7.fc25.noarch
python2-cryptography-1.5.3-3.fc25.s390x
python2-requests-kerberos-0.10.0-2.fc25.noarch
libserf-1.3.9-1.fc25.s390x
libdatrie-0.2.9-3.fc25.s390x
s390utils-base-1.36.0-1.fc25.s390x
kpartx-0.4.9-83.fc25.s390x
s390utils-cpuplugd-1.36.0-1.fc25.s390x
s390utils-osasnmpd-1.36.0-1.fc25.s390x
python-dnf-plugins-extras-common-0.0.12-4.fc25.noarch
fpc-srpm-macros-1.0-1.fc25.noarch
libuser-0.62-4.fc25.s390x
man-db-2.7.5-3.fc25.s390x
python-systemd-doc-232-1.fc25.s390x
lz4-1.7.5-1.fc25.s390x
tar-1.29-3.fc25.s390x
bodhi-client-0.9.12.2-6.fc25.noarch
cairo-1.14.8-1.fc25.s390x
gcc-go-6.3.1-1.fc25.s390x
cracklib-dicts-2.9.6-4.fc25.s390x
libselinux-python3-2.5-13.fc25.s390x
python2-enchant-1.6.8-1.fc25.noarch
boost-iostreams-1.60.0-10.fc25.s390x
userspace-rcu-0.9.2-2.fc25.s390x
libXext-devel-1.3.3-4.fc24.s390x
libXrandr-devel-1.5.1-1.fc25.s390x
perl-XML-XPath-1.39-1.fc25.noarch
python3-lxml-3.7.2-1.fc25.s390x
libiscsi-1.15.0-2.fc24.s390x
fontconfig-devel-2.12.1-1.fc25.s390x
libfdt-devel-1.4.2-1.fc25.s390x
ceph-devel-compat-10.2.4-2.fc25.s390x
zlib-static-1.2.8-10.fc24.s390x
chrpath-0.16-3.fc24.s390x
info-6.1-4.fc25.s390x
iptables-libs-1.6.0-3.fc25.s390x
libfdisk-2.28.2-2.fc25.s390x
dnf-plugins-core-0.1.21-5.fc25.noarch
perl-Storable-2.56-368.fc25.s390x
python2-decorator-4.0.11-1.fc25.noarch
libnetfilter_conntrack-1.0.6-2.fc25.s390x
texlive-texlive.infra-bin-svn40312-33.20160520.fc25.1.s390x
texlive-ifluatex-svn41346-33.fc25.1.noarch
texlive-fp-svn15878.0-33.fc25.1.noarch
texlive-latex-fonts-svn28888.0-33.fc25.1.noarch
texlive-bibtex-bin-svn40473-33.20160520.fc25.1.s390x
texlive-glyphlist-svn28576.0-33.fc25.1.noarch
texlive-marvosym-svn29349.2.2a-33.fc25.1.noarch
texlive-tex-bin-svn40987-33.20160520.fc25.1.s390x
texlive-texconfig-svn40768-33.fc25.1.noarch
texlive-wasy2-ps-svn35830.0-33.fc25.1.noarch
texlive-psfrag-svn15878.3.04-33.fc25.1.noarch
texlive-charter-svn15878.0-33.fc25.1.noarch
texlive-ec-svn25033.1.0-33.fc25.1.noarch
texlive-lineno-svn21442.4.41-33.fc25.1.noarch
texlive-hyphen-base-svn41138-33.fc25.1.noarch
texlive-manfnt-font-svn35799.0-33.fc25.1.noarch
texlive-ncntrsbk-svn31835.0-33.fc25.1.noarch
texlive-pst-math-svn34786.0.63-33.fc25.1.noarch
texlive-symbol-svn31835.0-33.fc25.1.noarch
texlive-environ-svn33821.0.3-33.fc25.1.noarch
texlive-algorithms-svn38085.0.1-33.fc25.1.noarch
kernel-core-4.10.8-200.fc25.s390x
libglvnd-devel-0.2.999-14.20170308git8e6e102.fc25.s390x
python3-hawkey-0.6.4-3.fc25.s390x
glibc-all-langpacks-2.24-9.fc25.s390x
freetype-2.6.5-9.fc25.s390x
mesa-libwayland-egl-17.0.5-3.fc25.s390x
libicu-57.1-5.fc25.s390x
nspr-devel-4.14.0-2.fc25.s390x
libnl3-cli-3.2.29-3.fc25.s390x
cups-libs-2.2.0-9.fc25.s390x
bind-libs-lite-9.10.5-2.P2.fc25.s390x
ca-certificates-2017.2.14-1.0.fc25.noarch
python3-kerberos-1.2.5-1.fc25.s390x
python3-cryptography-1.5.3-3.fc25.s390x
perl-IO-1.36-387.fc25.s390x
dhcp-libs-4.3.5-3.fc25.s390x
rsync-3.1.2-4.fc25.s390x
make-4.1-6.fc25.s390x
pcre2-devel-10.23-8.fc25.s390x
quota-4.03-8.fc25.s390x
libX11-devel-1.6.5-1.fc25.s390x
ghostscript-9.20-9.fc25.s390x
dbus-1.11.14-1.fc25.s390x
rpcbind-0.2.4-6.rc2.fc25.s390x
pyOpenSSL-16.2.0-1.fc25.noarch
glusterfs-devel-3.10.4-1.fc25.s390x
nss-tools-3.30.2-1.1.fc25.s390x
python3-pycurl-7.43.0-6.fc25.s390x
bind99-license-9.9.10-2.P3.fc25.noarch
curl-7.51.0-7.fc25.s390x
glusterfs-api-devel-3.10.4-1.fc25.s390x
python-firewall-0.4.4.5-1.fc25.noarch
netpbm-progs-10.79.00-1.fc25.s390x
libsndfile-1.0.28-3.fc25.s390x
python3-sssdconfig-1.15.2-5.fc25.noarch
wget-1.18-3.fc25.s390x
libsemanage-2.5-9.fc25.s390x
telnet-0.17-68.fc25.s390x
texlive-ifplatform-svn21156.0.4-33.fc25.1.noarch
texlive-eso-pic-svn37925.2.0g-33.fc25.1.noarch
texlive-xcolor-svn41044-33.fc25.1.noarch
texlive-pst-eps-svn15878.1.0-33.fc25.1.noarch
texlive-pst-text-svn15878.1.00-33.fc25.1.noarch
texlive-rotating-svn16832.2.16b-33.fc25.1.noarch
texlive-pdfpages-svn40638-33.fc25.1.noarch
texlive-cm-super-svn15878.0-33.fc25.1.noarch
texlive-xetex-svn41438-33.fc25.1.noarch
dnf-yum-1.1.10-6.fc25.noarch
libseccomp-devel-2.3.2-1.fc25.s390x
gpgme-1.8.0-10.fc25.s390x
apr-util-1.5.4-3.fc24.s390x
jbigkit-libs-2.1-5.fc24.s390x
pixman-0.34.0-2.fc24.s390x
dwz-0.12-2.fc24.s390x
expect-5.45-22.fc24.s390x
libsigsegv-2.10-10.fc24.s390x
fakeroot-libs-1.20.2-4.fc24.s390x
m17n-lib-1.7.0-5.fc24.s390x
libverto-0.2.6-6.fc24.s390x
libXmu-1.1.2-4.fc24.s390x
libXcursor-1.1.14-6.fc24.s390x
python-kitchen-1.2.4-2.fc24.noarch
fakeroot-1.20.2-4.fc24.s390x
blktrace-1.1.0-3.fc24.s390x
usermode-1.111-8.fc24.s390x
kbd-2.0.3-3.fc24.s390x
libaio-devel-0.3.110-6.fc24.s390x
web-assets-filesystem-5-4.fc24.noarch
libgpg-error-1.24-1.fc25.s390x
findutils-4.6.0-8.fc25.s390x
libassuan-2.4.3-1.fc25.s390x
libusbx-1.0.21-1.fc25.s390x
libxslt-1.1.28-13.fc25.s390x
libmetalink-0.1.3-1.fc25.s390x
perl-MIME-Base64-3.15-365.fc25.s390x
ncurses-6.0-6.20160709.fc25.s390x
libwayland-server-1.12.0-1.fc25.s390x
perl-Fedora-VSP-0.001-4.fc25.noarch
perl-libintl-perl-1.26-1.fc25.s390x
shadow-utils-4.2.1-11.fc25.s390x
atk-2.22.0-1.fc25.s390x
pam-1.3.0-1.fc25.s390x
harfbuzz-icu-1.3.2-1.fc25.s390x
libsecret-0.18.5-2.fc25.s390x
s390utils-iucvterm-1.36.0-1.fc25.s390x
python3-requests-2.10.0-4.fc25.noarch
pyusb-1.0.0-2.fc25.noarch
python-enum34-1.0.4-6.fc25.noarch
pyxattr-0.5.3-8.fc25.s390x
libbabeltrace-1.4.0-3.fc25.s390x
libthai-0.1.25-1.fc25.s390x
deltarpm-3.6-17.fc25.s390x
s390utils-mon_statd-1.36.0-1.fc25.s390x
device-mapper-multipath-0.4.9-83.fc25.s390x
python3-pygpgme-0.3-18.fc25.s390x
libreport-filesystem-2.8.0-1.fc25.s390x
ghc-srpm-macros-1.4.2-4.fc25.noarch
rpmdevtools-8.9-1.fc25.noarch
python-dnf-plugins-extras-migrate-0.0.12-4.fc25.noarch
perl-IO-Socket-SSL-2.038-1.fc25.noarch
perl-File-ShareDir-1.102-7.fc25.noarch
tcl-8.6.6-1.fc25.s390x
bzip2-1.0.6-21.fc25.s390x
libss-1.43.3-1.fc25.s390x
libselinux-utils-2.5-13.fc25.s390x
python3-enchant-1.6.8-1.fc25.noarch
python2-dockerfile-parse-0.0.5-7.fc25.noarch
systemd-bootchart-231-2.fc25.s390x
gcc-objc-6.3.1-1.fc25.s390x
e2fsprogs-1.43.3-1.fc25.s390x
libstdc++-static-6.3.1-1.fc25.s390x
libpng-devel-1.6.27-1.fc25.s390x
perl-XML-Parser-2.44-5.fc25.s390x
lttng-ust-2.8.1-2.fc25.s390x
libXfixes-devel-5.0.3-1.fc25.s390x
libXcomposite-devel-0.4.4-8.fc24.s390x
python3-javapackages-4.7.0-6.1.fc25.noarch
libcephfs_jni-devel-10.2.4-2.fc25.s390x
keyutils-libs-devel-1.5.9-8.fc24.s390x
harfbuzz-devel-1.3.2-1.fc25.s390x
libidn-devel-1.33-1.fc25.s390x
libnfs-1.9.8-2.fc24.s390x
libssh2-devel-1.8.0-1.fc25.s390x
qemu-sanity-check-nodeps-1.1.5-5.fc24.s390x
alsa-lib-devel-1.1.1-2.fc25.s390x
libpsl-0.17.0-1.fc25.s390x
libseccomp-2.3.2-1.fc25.s390x
copy-jdk-configs-2.2-2.fc25.noarch
json-glib-1.2.6-1.fc25.s390x
python2-dnf-1.1.10-6.fc25.noarch
python2-GitPython-2.1.3-1.fc25.noarch
texlive-tetex-bin-svn36770.0-33.20160520.fc25.1.noarch
texlive-amsfonts-svn29208.3.04-33.fc25.1.noarch
texlive-babel-svn40706-33.fc25.1.noarch
texlive-colortbl-svn29803.v1.0a-33.fc25.1.noarch
texlive-babelbib-svn25245.1.31-33.fc25.1.noarch
texlive-footmisc-svn23330.5.5b-33.fc25.1.noarch
texlive-makeindex-svn40768-33.fc25.1.noarch
texlive-plain-svn40274-33.fc25.1.noarch
texlive-texconfig-bin-svn29741.0-33.20160520.fc25.1.noarch
texlive-zapfding-svn31835.0-33.fc25.1.noarch
texlive-microtype-svn41127-33.fc25.1.noarch
texlive-bookman-svn31835.0-33.fc25.1.noarch
texlive-dvisvgm-def-svn41011-33.fc25.1.noarch
texlive-finstrut-svn21719.0.5-33.fc25.1.noarch
texlive-hyph-utf8-svn41189-33.fc25.1.noarch
texlive-lualibs-svn40370-33.fc25.1.noarch
kernel-modules-4.10.8-200.fc25.s390x
python2-hawkey-0.6.4-3.fc25.s390x
glibc-2.24-9.fc25.s390x
elfutils-libelf-0.169-1.fc25.s390x
libsoup-2.56.0-3.fc25.s390x
libnl3-3.2.29-3.fc25.s390x
gstreamer1-1.10.5-1.fc25.s390x
polkit-libs-0.113-8.fc25.s390x
libtirpc-1.0.2-0.fc25.s390x
emacs-common-25.2-2.fc25.s390x
libteam-1.27-1.fc25.s390x
python3-3.5.3-6.fc25.s390x
python3-pyasn1-0.2.3-1.fc25.noarch
perl-File-Path-2.12-366.fc25.noarch
mesa-libwayland-egl-devel-17.0.5-3.fc25.s390x
libacl-devel-2.2.52-13.fc25.s390x
lua-libs-5.3.4-3.fc25.s390x
pcre2-utf32-10.23-8.fc25.s390x
quota-nls-4.03-8.fc25.noarch
gtk3-3.22.16-1.fc25.s390x
ghostscript-x11-9.20-9.fc25.s390x
systemd-231-17.fc25.s390x
glusterfs-api-3.10.4-1.fc25.s390x
glusterfs-extra-xlators-3.10.4-1.fc25.s390x
glusterfs-server-3.10.4-1.fc25.s390x
java-1.8.0-openjdk-headless-1.8.0.131-1.b12.fc25.s390x
git-2.9.4-1.fc25.s390x
dhcp-common-4.3.5-3.fc25.noarch
python2-rpkg-1.49-5.fc25.noarch
vte291-devel-0.46.2-1.fc25.s390x
python-devel-2.7.13-2.fc25.s390x
elfutils-0.169-1.fc25.s390x
lua-5.3.4-3.fc25.s390x
python3-beautifulsoup4-4.6.0-1.fc25.noarch
libmicrohttpd-0.9.55-1.fc25.s390x
screen-4.6.1-1.fc25.s390x
strace-4.18-1.fc25.s390x
texlive-mparhack-svn15878.1.4-33.fc25.1.noarch
texlive-pspicture-svn15878.0-33.fc25.1.noarch
texlive-soul-svn15878.2.4-33.fc25.1.noarch
texlive-trimspaces-svn15878.1.1-33.fc25.1.noarch
texlive-varwidth-svn24104.0.92-33.fc25.1.noarch
texlive-geometry-svn19716.5.6-33.fc25.1.noarch
texlive-memoir-svn41203-33.fc25.1.noarch
texlive-pgf-svn40966-33.fc25.1.noarch
texlive-pst-coil-svn37377.1.07-33.fc25.1.noarch
texlive-pst-plot-svn41242-33.fc25.1.noarch
texlive-latex-bin-svn41438-33.fc25.1.noarch
texlive-ucs-svn35853.2.2-33.fc25.1.noarch
texlive-ae-svn15878.1.4-33.fc25.1.noarch
texlive-xetex-bin-svn41091-33.20160520.fc25.1.s390x
fedora-upgrade-26.1-1.fc25.noarch
fedpkg-1.28-1.fc25.noarch
perl-Thread-Queue-3.12-1.fc25.noarch
cdparanoia-libs-10.2-21.fc24.s390x
ustr-1.0.4-21.fc24.s390x
libusb-0.1.5-7.fc24.s390x
readline-devel-6.3-8.fc24.s390x
chkconfig-1.8-1.fc25.s390x
avahi-libs-0.6.32-4.fc25.s390x
perl-Unicode-Normalize-1.25-365.fc25.s390x
perl-libnet-3.10-1.fc25.noarch
perl-podlators-4.09-1.fc25.noarch
dbus-python-1.2.4-2.fc25.s390x
libgnome-keyring-3.12.0-7.fc25.s390x
python-backports-1.0-8.fc25.s390x
python-pycparser-2.14-7.fc25.noarch
plymouth-scripts-0.9.3-0.6.20160620git0e65b86c.fc25.s390x
cronie-1.5.1-2.fc25.s390x
python2-librepo-1.7.18-3.fc25.s390x
libXv-1.0.11-1.fc25.s390x
python2-ndg_httpsclient-0.4.0-4.fc25.noarch
btrfs-progs-4.6.1-1.fc25.s390x
libgcc-6.3.1-1.fc25.s390x
libgomp-6.3.1-1.fc25.s390x
perl-Encode-2.88-5.fc25.s390x
cracklib-2.9.6-4.fc25.s390x
libobjc-6.3.1-1.fc25.s390x
gcc-6.3.1-1.fc25.s390x
python3-dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch
boost-random-1.60.0-10.fc25.s390x
libref_array-0.1.5-29.fc25.s390x
libXrender-devel-0.9.10-1.fc25.s390x
javapackages-tools-4.7.0-6.1.fc25.noarch
keyutils-1.5.9-8.fc24.s390x
libcom_err-devel-1.43.3-1.fc25.s390x
lzo-minilzo-2.08-8.fc24.s390x
libusbx-devel-1.0.21-1.fc25.s390x
virglrenderer-devel-0.5.0-1.20160411git61846f92f.fc25.s390x
acpica-tools-20160831-1.fc25.s390x
grep-2.27-2.fc25.s390x
dnf-conf-1.1.10-6.fc25.noarch
crypto-policies-20160921-4.gitf3018dd.fc25.noarch
rpm-build-libs-4.13.0.1-1.fc25.s390x
libnfsidmap-0.27-1.fc25.s390x
SDL2-2.0.5-3.fc25.s390x
texlive-etex-pkg-svn39355-33.fc25.1.noarch
texlive-multido-svn18302.1.42-33.fc25.1.noarch
texlive-gsftopk-svn40768-33.fc25.1.noarch
texlive-pst-ovl-svn40873-33.fc25.1.noarch
texlive-ltabptch-svn17533.1.74d-33.fc25.1.noarch
texlive-cite-svn36428.5.5-33.fc25.1.noarch
texlive-fpl-svn15878.1.002-33.fc25.1.noarch
texlive-mathpazo-svn15878.1.003-33.fc25.1.noarch
texlive-rcs-svn15878.0-33.fc25.1.noarch
texlive-type1cm-svn21820.0-33.fc25.1.noarch
texlive-l3kernel-svn41246-33.fc25.1.noarch
texlive-hyperref-svn41396-33.fc25.1.noarch
texlive-pst-tree-svn24142.1.12-33.fc25.1.noarch
texlive-sansmathaccent-svn30187.0-33.fc25.1.noarch
texlive-dvipdfmx-bin-svn40273-33.20160520.fc25.1.s390x
texlive-zapfchan-svn31835.0-33.fc25.1.noarch
glib2-static-2.50.3-1.fc25.s390x
bash-completion-2.5-1.fc25.noarch
glusterfs-libs-3.10.4-1.fc25.s390x
p11-kit-0.23.2-4.fc25.s390x
hyphen-2.8.8-4.fc24.s390x
gnutls-c++-3.5.14-1.fc25.s390x
python3-idna-2.5-1.fc25.noarch
nss-softokn-devel-3.30.2-1.0.fc25.s390x
less-481-7.fc25.s390x
rpmconf-base-1.0.19-1.fc25.noarch
gtk2-2.24.31-2.fc25.s390x
mesa-libgbm-17.0.5-3.fc25.s390x
nfs-utils-2.1.1-5.rc4.fc25.s390x
perl-Git-2.9.4-1.fc25.noarch
mock-1.4.2-1.fc25.noarch
mc-4.8.19-5.fc25.s390x
pcre-static-8.41-1.fc25.s390x
bind-libs-9.10.5-2.P2.fc25.s390x
libproxy-0.4.15-2.fc25.s390x
gpg-pubkey-a29cb19c-53bcbba6
m4-1.4.17-9.fc24.s390x
liblockfile-1.09-4.fc24.s390x
sg3_utils-1.41-3.fc24.s390x
libXinerama-1.1.3-6.fc24.s390x
libXft-2.3.2-4.fc24.s390x
tcp_wrappers-libs-7.6-83.fc25.s390x
perl-Text-Tabs+Wrap-2013.0523-365.fc25.noarch
perl-Error-0.17024-7.fc25.noarch
perl-Term-Cap-1.17-365.fc25.noarch
perl-Pod-Usage-1.69-1.fc25.noarch
device-mapper-persistent-data-0.6.3-1.fc25.s390x
net-snmp-libs-5.7.3-13.fc25.s390x
python3-six-1.10.0-3.fc25.noarch
python3-pysocks-1.5.6-5.fc25.noarch
python-chardet-2.3.0-1.fc25.noarch
python2-cffi-1.7.0-2.fc25.s390x
gc-devel-7.4.4-1.fc25.s390x
plymouth-0.9.3-0.6.20160620git0e65b86c.fc25.s390x
ebtables-2.0.10-21.fc25.s390x
python3-librepo-1.7.18-3.fc25.s390x
net-snmp-5.7.3-13.fc25.s390x
at-spi2-atk-2.22.0-1.fc25.s390x
avahi-autoipd-0.6.32-4.fc25.s390x
libgo-6.3.1-1.fc25.s390x
cpp-6.3.1-1.fc25.s390x
pyparsing-2.1.10-1.fc25.noarch
python3-pyparsing-2.1.10-1.fc25.noarch
libcollection-0.7.0-29.fc25.s390x
libcephfs-devel-10.2.4-2.fc25.s390x
libXdamage-devel-1.1.4-8.fc24.s390x
libverto-devel-0.2.6-6.fc24.s390x
snappy-1.1.3-2.fc24.s390x
cairo-gobject-devel-1.14.8-1.fc25.s390x
cyrus-sasl-devel-2.1.26-26.2.fc24.s390x
libXi-1.7.9-1.fc25.s390x
texlive-base-2016-33.20160520.fc25.noarch
python3-rpm-4.13.0.1-1.fc25.s390x
texlive-booktabs-svn40846-33.fc25.1.noarch
texlive-lm-svn28119.2.004-33.fc25.1.noarch
texlive-gsftopk-bin-svn40473-33.20160520.fc25.1.s390x
texlive-tex-svn40793-33.fc25.1.noarch
texlive-fancyref-svn15878.0.9c-33.fc25.1.noarch
texlive-chngcntr-svn17157.1.0a-33.fc25.1.noarch
texlive-fix2col-svn38770-33.fc25.1.noarch
texlive-marginnote-svn41382-33.fc25.1.noarch
texlive-pxfonts-svn15878.0-33.fc25.1.noarch
texlive-txfonts-svn15878.0-33.fc25.1.noarch
texlive-l3packages-svn41246-33.fc25.1.noarch
texlive-oberdiek-svn41346-33.fc25.1.noarch
texlive-pst-tools-svn34067.0.05-33.fc25.1.noarch
texlive-tex-gyre-svn18651.2.004-33.fc25.1.noarch
texlive-dvipdfmx-svn41149-33.fc25.1.noarch
texlive-collection-fontsrecommended-svn35830.0-33.20160520.fc25.1.noarch
libcacard-devel-2.5.3-1.fc25.s390x
ykpers-1.18.0-2.fc25.s390x
python2-idna-2.5-1.fc25.noarch
file-libs-5.29-4.fc25.s390x
policycoreutils-2.5-20.fc25.s390x
libgcrypt-1.7.8-1.fc25.s390x
pcre-8.41-1.fc25.s390x
GeoIP-1.6.11-1.fc25.s390x
ghostscript-core-9.20-9.fc25.s390x
python3-cffi-1.7.0-2.fc25.s390x
nss-softokn-freebl-devel-3.30.2-1.0.fc25.s390x
json-c-0.12.1-2.fc25.s390x
vim-common-8.0.705-1.fc25.s390x
vte291-0.46.2-1.fc25.s390x
libdrm-devel-2.4.81-1.fc25.s390x
gssproxy-0.7.0-9.fc25.s390x
git-core-doc-2.9.4-1.fc25.s390x
systemtap-3.1-5.fc25.s390x
mesa-libgbm-devel-17.0.5-3.fc25.s390x
vim-enhanced-8.0.705-1.fc25.s390x
glibc-static-2.24-9.fc25.s390x
libgusb-0.2.10-1.fc25.s390x
python-async-0.6.1-9.fc22.s390x
dejavu-sans-mono-fonts-2.35-3.fc24.noarch
popt-1.16-7.fc24.s390x
cyrus-sasl-lib-2.1.26-26.2.fc24.s390x
xz-5.2.2-2.fc24.s390x
libpipeline-1.4.1-2.fc24.s390x
pinentry-0.9.7-2.fc24.s390x
pth-2.0.7-27.fc24.s390x
libsepol-2.5-10.fc25.s390x
libxcb-1.12-1.fc25.s390x
perl-Getopt-Long-2.49.1-1.fc25.noarch
avahi-glib-0.6.32-4.fc25.s390x
python3-pip-8.1.2-2.fc25.noarch
python3-libcomps-0.1.7-5.fc25.s390x
python-slip-0.6.4-4.fc25.noarch
python2-libcomps-0.1.7-5.fc25.s390x
gc-7.4.4-1.fc25.s390x
s390utils-cmsfs-1.36.0-1.fc25.s390x
newt-python-0.52.19-2.fc25.s390x
qt5-srpm-macros-5.7.1-1.fc25.noarch
device-mapper-event-1.02.136-3.fc25.s390x
perl-Class-Inspector-1.31-2.fc25.noarch
libbasicobjects-0.1.1-29.fc25.s390x
libradosstriper1-10.2.4-2.fc25.s390x
libXxf86vm-devel-1.1.4-3.fc24.s390x
zziplib-0.13.62-7.fc24.s390x
libpaper-1.1.24-12.fc24.s390x
libini_config-1.3.0-29.fc25.s390x
snappy-devel-1.1.3-2.fc24.s390x
libcap-ng-devel-0.7.8-1.fc25.s390x
libxkbcommon-devel-0.7.1-1.fc25.s390x
openssl-libs-1.0.2k-1.fc25.s390x
libkadm5-1.14.4-7.fc25.s390x
rpm-libs-4.13.0.1-1.fc25.s390x
util-linux-2.28.2-2.fc25.s390x
texlive-etoolbox-svn38031.2.2a-33.fc25.1.noarch
texlive-dvips-svn41149-33.fc25.1.noarch
texlive-latexconfig-svn40274-33.fc25.1.noarch
texlive-tex-ini-files-svn40533-33.fc25.1.noarch
texlive-qstest-svn15878.0-33.fc25.1.noarch
texlive-cmap-svn41168-33.fc25.1.noarch
texlive-luatex-bin-svn41091-33.20160520.fc25.1.s390x
texlive-mflogo-svn38628-33.fc25.1.noarch
texlive-sansmath-svn17997.1.1-33.fc25.1.noarch
texlive-unicode-data-svn39808-33.fc25.1.noarch
texlive-luaotfload-bin-svn34647.0-33.20160520.fc25.1.noarch
texlive-listings-svn37534.1.6-33.fc25.1.noarch
texlive-pstricks-svn41321-33.fc25.1.noarch
texlive-metalogo-svn18611.0.12-33.fc25.1.noarch
texlive-collection-latex-svn41011-33.20160520.fc25.1.noarch
kernel-4.10.5-200.fc25.s390x
python2-dnf-plugins-core-0.1.21-5.fc25.noarch
xkeyboard-config-2.20-2.fc25.noarch
file-5.29-4.fc25.s390x
perl-Test-Harness-3.39-1.fc25.noarch
systemd-libs-231-17.fc25.s390x
webkitgtk4-jsc-2.16.5-1.fc25.s390x
gtk-update-icon-cache-3.22.16-1.fc25.s390x
glibc-devel-2.24-9.fc25.s390x
python3-pycparser-2.14-7.fc25.noarch
kernel-devel-4.11.10-200.fc25.s390x
gsm-1.0.17-1.fc25.s390x
vim-filesystem-8.0.705-1.fc25.s390x
webkitgtk4-2.16.5-1.fc25.s390x
python-2.7.13-2.fc25.s390x
glusterfs-fuse-3.10.4-1.fc25.s390x
git-core-2.9.4-1.fc25.s390x
selinux-policy-targeted-3.13.1-225.18.fc25.noarch
kernel-4.11.10-200.fc25.s390x
rpmconf-1.0.19-1.fc25.noarch
teamd-1.27-1.fc25.s390x
jasper-libs-1.900.13-4.fc25.s390x
libattr-2.4.47-16.fc24.s390x
libvisual-0.4.0-20.fc24.s390x
libpcap-1.7.4-2.fc24.s390x
libutempter-1.1.6-8.fc24.s390x
libgudev-230-3.fc24.s390x
popt-devel-1.16-7.fc24.s390x
hicolor-icon-theme-0.15-3.fc24.noarch
setup-2.10.4-1.fc25.noarch
bash-4.3.43-4.fc25.s390x
libjpeg-turbo-1.5.1-0.fc25.s390x
perl-Socket-2.024-1.fc25.s390x
perl-HTTP-Tiny-0.070-1.fc25.noarch
ipset-6.29-1.fc25.s390x
python2-setuptools-25.1.1-1.fc25.noarch
gsettings-desktop-schemas-3.22.0-1.fc25.s390x
python3-setuptools-25.1.1-1.fc25.noarch
python-slip-dbus-0.6.4-4.fc25.noarch
python2-ply-3.8-2.fc25.noarch
dtc-1.4.2-1.fc25.s390x
guile-2.0.13-1.fc25.s390x
cronie-anacron-1.5.1-2.fc25.s390x
libXtst-1.2.3-1.fc25.s390x
iso-codes-3.70-1.fc25.noarch
s390utils-1.36.0-1.fc25.s390x
python-backports-ssl_match_hostname-3.5.0.1-3.fc25.noarch
fedora-cert-0.6.0.1-1.fc25.noarch
libstdc++-6.3.1-1.fc25.s390x
subversion-libs-1.9.5-1.fc25.s390x
libgfortran-6.3.1-1.fc25.s390x
dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch
lvm2-2.02.167-3.fc25.s390x
libselinux-devel-2.5-13.fc25.s390x
perl-Time-Local-1.250-1.fc25.noarch
libradosstriper-devel-10.2.4-2.fc25.s390x
flac-libs-1.3.2-1.fc25.s390x
perl-Digest-1.17-366.fc25.noarch
teckit-2.5.1-15.fc24.s390x
libpath_utils-0.2.1-29.fc25.s390x
attr-2.4.47-16.fc24.s390x
usbredir-0.7.1-2.fc24.s390x
cairo-devel-1.14.8-1.fc25.s390x
lzo-devel-2.08-8.fc24.s390x
libcap-devel-2.25-2.fc25.s390x
krb5-devel-1.14.4-7.fc25.s390x
rpm-4.13.0.1-1.fc25.s390x
kernel-devel-4.10.5-200.fc25.s390x
libbsd-0.8.3-1.fc25.s390x
texlive-url-svn32528.3.4-33.fc25.1.noarch
texlive-dvips-bin-svn40987-33.20160520.fc25.1.s390x
texlive-index-svn24099.4.1beta-33.fc25.1.noarch
texlive-setspace-svn24881.6.7a-33.fc25.1.noarch
texlive-mathtools-svn38833-33.fc25.1.noarch
texlive-cm-svn32865.0-33.fc25.1.noarch
texlive-graphics-def-svn41879-33.fc25.1.noarch
texlive-mdwtools-svn15878.1.05.4-33.fc25.1.noarch
texlive-rsfs-svn15878.0-33.fc25.1.noarch
texlive-ucharcat-svn38907-33.fc25.1.noarch
texlive-fontspec-svn41262-33.fc25.1.noarch
texlive-showexpl-svn32737.v0.3l-33.fc25.1.noarch
texlive-pstricks-add-svn40744-33.fc25.1.noarch
texlive-beamer-svn36461.3.36-33.fc25.1.noarch
texlive-collection-basic-svn41149-33.20160520.fc25.1.noarch
rpm-build-4.13.0.1-1.fc25.s390x
xemacs-filesystem-21.5.34-20.20170124hgf412e9f093d4.fc25.noarch
hawkey-0.6.4-3.fc25.s390x
gdk-pixbuf2-modules-2.36.6-1.fc25.s390x
bluez-libs-5.44-1.fc25.s390x
audit-libs-2.7.7-1.fc25.s390x
iproute-4.11.0-1.fc25.s390x
libICE-1.0.9-9.fc25.s390x
glibc-headers-2.24-9.fc25.s390x
python3-ply-3.8-2.fc25.noarch
perl-5.24.2-387.fc25.s390x
graphite2-1.3.10-1.fc25.s390x
vte-profile-0.46.2-1.fc25.s390x
gtk3-devel-3.22.16-1.fc25.s390x
python-libs-2.7.13-2.fc25.s390x
mesa-libGL-17.0.5-3.fc25.s390x
python2-pycurl-7.43.0-6.fc25.s390x
NetworkManager-1.4.4-5.fc25.s390x
mesa-libEGL-devel-17.0.5-3.fc25.s390x
mariadb-libs-10.1.24-3.fc25.s390x
mesa-libGLES-devel-17.0.5-3.fc25.s390x
hostname-3.15-8.fc25.s390x
gpg-pubkey-a0a7badb-52844296
readline-6.3-8.fc24.s390x
cpio-2.12-3.fc24.s390x
libXcomposite-0.4.4-8.fc24.s390x
procps-ng-3.3.10-11.fc24.s390x
GConf2-3.2.6-16.fc24.s390x
xz-devel-5.2.2-2.fc24.s390x
fedora-logos-22.0.0-3.fc24.s390x
gpg-pubkey-e372e838-56fd7943
kmod-libs-23-1.fc25.s390x
perl-parent-0.236-1.fc25.noarch
perl-TermReadKey-2.37-1.fc25.s390x
ncurses-c++-libs-6.0-6.20160709.fc25.s390x
gzip-1.8-1.fc25.s390x
python3-gobject-base-3.22.0-1.fc25.s390x
python2-yubico-1.3.2-3.fc25.noarch
s390utils-ziomon-1.36.0-1.fc25.s390x
librepo-1.7.18-3.fc25.s390x
librsvg2-2.40.16-2.fc25.s390x
gnat-srpm-macros-4-1.fc25.noarch
python-decoratortools-1.8-12.fc25.noarch
m17n-db-1.7.0-7.fc25.noarch
e2fsprogs-libs-1.43.3-1.fc25.s390x
libvorbis-1.3.5-1.fc25.s390x
gcc-gdb-plugin-6.3.1-1.fc25.s390x
npth-1.3-1.fc25.s390x
libcephfs1-10.2.4-2.fc25.s390x
wayland-devel-1.12.0-1.fc25.s390x
libxcb-devel-1.12-1.fc25.s390x
perl-encoding-2.19-5.fc25.s390x
python3-cssselect-0.9.2-1.fc25.noarch
gettext-libs-0.19.8.1-3.fc25.s390x
at-spi2-atk-devel-2.22.0-1.fc25.s390x
virglrenderer-0.5.0-1.20160411git61846f92f.fc25.s390x
pixman-devel-0.34.0-2.fc24.s390x
libnfs-devel-1.9.8-2.fc24.s390x
libblkid-2.28.2-2.fc25.s390x
glib2-devel-2.50.3-1.fc25.s390x
texlive-ifxetex-svn19685.0.5-33.fc25.1.noarch
texlive-caption-svn41409-33.fc25.1.noarch
texlive-float-svn15878.1.3d-33.fc25.1.noarch
texlive-pdftex-def-svn22653.0.06d-33.fc25.1.noarch
texlive-xdvi-bin-svn40750-33.20160520.fc25.1.s390x
texlive-beton-svn15878.0-33.fc25.1.noarch
texlive-filecontents-svn24250.1.3-33.fc25.1.noarch
texlive-lm-math-svn36915.1.959-33.fc25.1.noarch
texlive-pslatex-svn16416.0-33.fc25.1.noarch
texlive-times-svn35058.0-33.fc25.1.noarch
texlive-breakurl-svn29901.1.40-33.fc25.1.noarch
texlive-filehook-svn24280.0.5d-33.fc25.1.noarch
texlive-pst-pdf-svn31660.1.1v-33.fc25.1.noarch
texlive-seminar-svn34011.1.62-33.fc25.1.noarch
texlive-xetexconfig-svn41133-33.fc25.1.noarch
python-rpm-macros-3-12.fc25.noarch
rpm-devel-4.13.0.1-1.fc25.s390x
nss-pem-1.0.3-3.fc25.s390x
at-spi2-core-2.22.1-1.fc25.s390x
GeoIP-GeoLite-data-2017.04-1.fc25.noarch
kernel-devel-4.10.8-200.fc25.s390x
dbus-libs-1.11.14-1.fc25.s390x
perl-Scalar-List-Utils-1.48-1.fc25.s390x
libidn2-2.0.2-1.fc25.s390x
libtasn1-devel-4.12-1.fc25.s390x
python3-koji-1.13.0-2.fc25.noarch
glusterfs-cli-3.10.4-1.fc25.s390x
opus-1.1.5-1.fc25.s390x
mariadb-common-10.1.24-3.fc25.s390x
elfutils-libs-0.169-1.fc25.s390x
kernel-core-4.11.10-200.fc25.s390x
gnutls-dane-3.5.14-1.fc25.s390x
systemd-container-231-17.fc25.s390x
sudo-1.8.20p2-1.fc25.s390x
dbus-devel-1.11.14-1.fc25.s390x
perl-Module-CoreList-5.20170621-1.fc25.noarch
libicu-devel-57.1-5.fc25.s390x
js-jquery-2.2.4-3.fc25.noarch
=== TEST BEGIN ===
Using CC: /home/fam/bin/cc
Install prefix    /var/tmp/patchew-tester-tmp-rieff5oi/src/install
BIOS directory    /var/tmp/patchew-tester-tmp-rieff5oi/src/install/share/qemu
binary directory  /var/tmp/patchew-tester-tmp-rieff5oi/src/install/bin
library directory /var/tmp/patchew-tester-tmp-rieff5oi/src/install/lib
module directory  /var/tmp/patchew-tester-tmp-rieff5oi/src/install/lib/qemu
libexec directory /var/tmp/patchew-tester-tmp-rieff5oi/src/install/libexec
include directory /var/tmp/patchew-tester-tmp-rieff5oi/src/install/include
config directory  /var/tmp/patchew-tester-tmp-rieff5oi/src/install/etc
local state directory   /var/tmp/patchew-tester-tmp-rieff5oi/src/install/var
Manual directory  /var/tmp/patchew-tester-tmp-rieff5oi/src/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /var/tmp/patchew-tester-tmp-rieff5oi/src
C compiler        /home/fam/bin/cc
Host C compiler   cc
C++ compiler      c++
Objective-C compiler /home/fam/bin/cc
ARFLAGS           rv
CFLAGS            -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g 
QEMU_CFLAGS       -I/usr/include/pixman-1  -Werror -DHAS_LIBSSH2_SFTP_FSYNC -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -DNCURSES_WIDECHAR -D_GNU_SOURCE -m64 -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/include/p11-kit-1    -I/usr/include/libpng16 -I/usr/include/libdrm  -I/usr/include/cacard -I/usr/include/nss3 -I/usr/include/nspr4 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/libusb-1.0 
LDFLAGS           -Wl,--warn-common -m64 -g 
make              make
install           install
python            python -B
smbd              /usr/sbin/smbd
module support    no
host CPU          s390x
host big endian   yes
target list       aarch64-softmmu alpha-softmmu arm-softmmu cris-softmmu i386-softmmu lm32-softmmu m68k-softmmu microblazeel-softmmu microblaze-softmmu mips64el-softmmu mips64-softmmu mipsel-softmmu mips-softmmu moxie-softmmu nios2-softmmu or1k-softmmu ppc64-softmmu ppcemb-softmmu ppc-softmmu s390x-softmmu sh4eb-softmmu sh4-softmmu sparc64-softmmu sparc-softmmu tricore-softmmu unicore32-softmmu x86_64-softmmu xtensaeb-softmmu xtensa-softmmu aarch64-linux-user alpha-linux-user armeb-linux-user arm-linux-user cris-linux-user hppa-linux-user i386-linux-user m68k-linux-user microblazeel-linux-user microblaze-linux-user mips64el-linux-user mips64-linux-user mipsel-linux-user mips-linux-user mipsn32el-linux-user mipsn32-linux-user nios2-linux-user or1k-linux-user ppc64abi32-linux-user ppc64le-linux-user ppc64-linux-user ppc-linux-user s390x-linux-user sh4eb-linux-user sh4-linux-user sparc32plus-linux-user sparc64-linux-user sparc-linux-user tilegx-linux-user x86_64-linux-user
gprof enabled     no
sparse enabled    no
strip binaries    yes
profiler          no
static build      no
pixman            system
SDL support       yes (2.0.5)
GTK support       yes (3.22.16)
GTK GL support    yes
VTE support       yes (0.46.2)
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    yes
virgl support     yes
curl support      yes
mingw32 support   no
Audio drivers     oss
Block whitelist (rw) 
Block whitelist (ro) 
VirtFS support    yes
VNC support       yes
VNC SASL support  yes
VNC JPEG support  yes
VNC PNG support   yes
xen support       no
brlapi support    yes
bluez  support    yes
Documentation     yes
PIE               no
vde support       no
netmap support    no
Linux AIO support yes
ATTR/XATTR support yes
Install blobs     yes
KVM support       yes
HAX support       no
TCG support       yes
TCG debug enabled no
TCG interpreter   no
RDMA support      no
fdt support       yes
preadv support    yes
fdatasync         yes
madvise           yes
posix_madvise     yes
libcap-ng support yes
vhost-net support yes
vhost-scsi support yes
vhost-vsock support yes
vhost-user support yes
Trace backends    log
spice support     no 
rbd support       yes
xfsctl support    no
smartcard support yes
libusb            yes
usb net redir     yes
OpenGL support    yes
OpenGL dmabufs    yes
libiscsi support  yes
libnfs support    yes
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
crypto afalg      no
GlusterFS support yes
gcov              gcov
gcov enabled      no
TPM support       yes
libssh2 support   yes
TPM passthrough   no
QOM debugging     yes
Live block migration yes
lzo support       yes
snappy support    yes
bzip2 support     yes
NUMA host support no
tcmalloc support  no
jemalloc support  no
avx2 optimization no
replication support yes
VxHS block device no
  GEN     aarch64-softmmu/config-devices.mak.tmp
  GEN     alpha-softmmu/config-devices.mak.tmp
  GEN     cris-softmmu/config-devices.mak.tmp
  GEN     arm-softmmu/config-devices.mak.tmp
  GEN     cris-softmmu/config-devices.mak
  GEN     alpha-softmmu/config-devices.mak
  GEN     arm-softmmu/config-devices.mak
  GEN     i386-softmmu/config-devices.mak.tmp
  GEN     aarch64-softmmu/config-devices.mak
  GEN     lm32-softmmu/config-devices.mak.tmp
  GEN     m68k-softmmu/config-devices.mak.tmp
  GEN     microblazeel-softmmu/config-devices.mak.tmp
  GEN     lm32-softmmu/config-devices.mak
  GEN     m68k-softmmu/config-devices.mak
  GEN     microblaze-softmmu/config-devices.mak.tmp
  GEN     i386-softmmu/config-devices.mak
  GEN     mips64el-softmmu/config-devices.mak.tmp
  GEN     microblazeel-softmmu/config-devices.mak
  GEN     mips64-softmmu/config-devices.mak.tmp
  GEN     microblaze-softmmu/config-devices.mak
  GEN     mipsel-softmmu/config-devices.mak.tmp
  GEN     mips-softmmu/config-devices.mak.tmp
  GEN     mips64-softmmu/config-devices.mak
  GEN     moxie-softmmu/config-devices.mak.tmp
  GEN     mips64el-softmmu/config-devices.mak
  GEN     mips-softmmu/config-devices.mak
  GEN     mipsel-softmmu/config-devices.mak
  GEN     nios2-softmmu/config-devices.mak.tmp
  GEN     or1k-softmmu/config-devices.mak.tmp
  GEN     ppc64-softmmu/config-devices.mak.tmp
  GEN     moxie-softmmu/config-devices.mak
  GEN     nios2-softmmu/config-devices.mak
  GEN     ppcemb-softmmu/config-devices.mak.tmp
  GEN     or1k-softmmu/config-devices.mak
  GEN     ppc-softmmu/config-devices.mak.tmp
  GEN     s390x-softmmu/config-devices.mak.tmp
  GEN     ppc64-softmmu/config-devices.mak
  GEN     s390x-softmmu/config-devices.mak
  GEN     sh4eb-softmmu/config-devices.mak.tmp
  GEN     ppcemb-softmmu/config-devices.mak
  GEN     sh4-softmmu/config-devices.mak.tmp
  GEN     ppc-softmmu/config-devices.mak
  GEN     sparc64-softmmu/config-devices.mak.tmp
  GEN     sparc-softmmu/config-devices.mak.tmp
  GEN     sh4eb-softmmu/config-devices.mak
  GEN     sh4-softmmu/config-devices.mak
  GEN     sparc64-softmmu/config-devices.mak
  GEN     tricore-softmmu/config-devices.mak.tmp
  GEN     sparc-softmmu/config-devices.mak
  GEN     unicore32-softmmu/config-devices.mak.tmp
  GEN     x86_64-softmmu/config-devices.mak.tmp
  GEN     xtensaeb-softmmu/config-devices.mak.tmp
  GEN     unicore32-softmmu/config-devices.mak
  GEN     tricore-softmmu/config-devices.mak
  GEN     xtensa-softmmu/config-devices.mak.tmp
  GEN     xtensaeb-softmmu/config-devices.mak
  GEN     aarch64-linux-user/config-devices.mak.tmp
  GEN     x86_64-softmmu/config-devices.mak
  GEN     armeb-linux-user/config-devices.mak.tmp
  GEN     alpha-linux-user/config-devices.mak.tmp
  GEN     xtensa-softmmu/config-devices.mak
  GEN     aarch64-linux-user/config-devices.mak
  GEN     arm-linux-user/config-devices.mak.tmp
  GEN     cris-linux-user/config-devices.mak.tmp
  GEN     armeb-linux-user/config-devices.mak
  GEN     hppa-linux-user/config-devices.mak.tmp
  GEN     alpha-linux-user/config-devices.mak
  GEN     cris-linux-user/config-devices.mak
  GEN     arm-linux-user/config-devices.mak
  GEN     i386-linux-user/config-devices.mak.tmp
  GEN     m68k-linux-user/config-devices.mak.tmp
  GEN     microblazeel-linux-user/config-devices.mak.tmp
  GEN     hppa-linux-user/config-devices.mak
  GEN     i386-linux-user/config-devices.mak
  GEN     microblaze-linux-user/config-devices.mak.tmp
  GEN     m68k-linux-user/config-devices.mak
  GEN     microblazeel-linux-user/config-devices.mak
  GEN     mips64el-linux-user/config-devices.mak.tmp
  GEN     mips64-linux-user/config-devices.mak.tmp
  GEN     mipsel-linux-user/config-devices.mak.tmp
  GEN     microblaze-linux-user/config-devices.mak
  GEN     mips64-linux-user/config-devices.mak
  GEN     mips-linux-user/config-devices.mak.tmp
  GEN     mips64el-linux-user/config-devices.mak
  GEN     mipsn32el-linux-user/config-devices.mak.tmp
  GEN     mipsel-linux-user/config-devices.mak
  GEN     mipsn32-linux-user/config-devices.mak.tmp
  GEN     nios2-linux-user/config-devices.mak.tmp
  GEN     mips-linux-user/config-devices.mak
  GEN     mipsn32el-linux-user/config-devices.mak
  GEN     or1k-linux-user/config-devices.mak.tmp
  GEN     mipsn32-linux-user/config-devices.mak
  GEN     ppc64abi32-linux-user/config-devices.mak.tmp
  GEN     nios2-linux-user/config-devices.mak
  GEN     ppc64le-linux-user/config-devices.mak.tmp
  GEN     ppc64-linux-user/config-devices.mak.tmp
  GEN     or1k-linux-user/config-devices.mak
  GEN     ppc64abi32-linux-user/config-devices.mak
  GEN     ppc-linux-user/config-devices.mak.tmp
  GEN     ppc64-linux-user/config-devices.mak
  GEN     s390x-linux-user/config-devices.mak.tmp
  GEN     ppc64le-linux-user/config-devices.mak
  GEN     sh4eb-linux-user/config-devices.mak.tmp
  GEN     ppc-linux-user/config-devices.mak
  GEN     sh4-linux-user/config-devices.mak.tmp
  GEN     s390x-linux-user/config-devices.mak
  GEN     sparc32plus-linux-user/config-devices.mak.tmp
  GEN     sparc64-linux-user/config-devices.mak.tmp
  GEN     sh4eb-linux-user/config-devices.mak
  GEN     sh4-linux-user/config-devices.mak
  GEN     sparc-linux-user/config-devices.mak.tmp
  GEN     tilegx-linux-user/config-devices.mak.tmp
  GEN     sparc32plus-linux-user/config-devices.mak
  GEN     sparc64-linux-user/config-devices.mak
  GEN     x86_64-linux-user/config-devices.mak.tmp
  GEN     sparc-linux-user/config-devices.mak
  GEN     tilegx-linux-user/config-devices.mak
  GEN     config-host.h
  GEN     qemu-options.def
  GEN     x86_64-linux-user/config-devices.mak
  GEN     qmp-commands.h
  GEN     qapi-visit.h
  GEN     qapi-types.h
  GEN     qapi-event.h
  GEN     qmp-marshal.c
  GEN     qapi-types.c
  GEN     qapi-visit.c
  GEN     qmp-introspect.h
  GEN     qapi-event.c
  GEN     trace/generated-tcg-tracers.h
  GEN     trace/generated-helpers-wrappers.h
  GEN     qmp-introspect.c
  GEN     trace/generated-helpers.h
  GEN     module_block.h
  GEN     trace/generated-helpers.c
  GEN     tests/test-qapi-types.h
  GEN     tests/test-qapi-visit.h
  GEN     tests/test-qapi-event.h
  GEN     tests/test-qmp-commands.h
  GEN     tests/test-qmp-introspect.h
  GEN     trace-root.h
  GEN     crypto/trace.h
  GEN     util/trace.h
  GEN     io/trace.h
  GEN     migration/trace.h
  GEN     block/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/virtio/trace.h
  GEN     hw/net/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     accel/tcg/trace.h
  GEN     accel/kvm/trace.h
  GEN     trace-root.c
  GEN     nbd/trace.h
  GEN     util/trace.c
  GEN     crypto/trace.c
  GEN     io/trace.c
  GEN     migration/trace.c
  GEN     block/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/virtio/trace.c
  GEN     hw/net/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     net/trace.c
  GEN     audio/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     accel/tcg/trace.c
  GEN     accel/kvm/trace.c
  GEN     nbd/trace.c
  GEN     config-all-devices.mak
  GEN     docs/version.texi
  GEN     qemu-monitor.texi
  CC      tests/qemu-iotests/socket_scm_helper.o
  GEN     qemu-img-cmds.texi
  GEN     qemu-options.texi
  GEN     qemu-monitor-info.texi
  GEN     qemu-nbd.8
  GEN     qemu-ga.8
  GEN     docs/interop/qemu-qmp-qapi.texi
  GEN     docs/interop/qemu-ga-qapi.texi
  GEN     fsdev/virtfs-proxy-helper.1
  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-qapi-types.c
  GEN     qga/qapi-generated/qga-qapi-visit.c
  GEN     qga/qapi-generated/qga-qmp-marshal.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/qnum.o
  CC      qobject/qstring.o
  CC      qobject/qdict.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/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-posix.o
  CC      util/compatfd.o
  CC      util/event_notifier-posix.o
  CC      util/mmap-alloc.o
  CC      util/oslib-posix.o
  CC      util/qemu-openpty.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/cacheinfo.o
  CC      util/error.o
  CC      util/qemu-error.o
  CC      util/iov.o
  CC      util/id.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-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/stats64.o
  CC      util/systemd.o
  CC      trace-root.o
  CC      util/trace.o
  CC      crypto/trace.o
  CC      io/trace.o
  CC      block/trace.o
  CC      migration/trace.o
  CC      chardev/trace.o
  CC      hw/block/dataplane/trace.o
  CC      hw/char/trace.o
  CC      hw/block/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/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/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/mips/trace.o
  CC      target/i386/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      accel/tcg/trace.o
  CC      accel/kvm/trace.o
  CC      nbd/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/blk-commit-all.o
  CC      stubs/bdrv-next-monitor-owned.o
  CC      stubs/clock-warp.o
  CC      stubs/blockdev-close-all-bdrv-states.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/linux-aio.o
  CC      stubs/migr-blocker.o
  CC      stubs/change-state-handler.o
  CC      stubs/monitor.o
  CC      stubs/notify-event.o
  CC      stubs/qtest.o
  CC      stubs/replay.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/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      stubs/xen-hvm.o
  CC      contrib/ivshmem-client/ivshmem-client.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      replication.o
  CC      block/raw-format.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-cluster.o
  CC      block/qcow2-snapshot.o
  CC      block/qcow2-cache.o
  CC      block/qcow2-bitmap.o
  CC      block/qed.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-posix.o
  CC      block/linux-aio.o
  CC      block/null.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/iscsi-opts.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/client.o
  CC      nbd/common.o
  CC      block/iscsi.o
  CC      block/nfs.o
  CC      block/rbd.o
  CC      block/curl.o
  CC      block/gluster.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-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/qom-qobject.o
  CC      qom/container.o
  GEN     qemu-img-cmds.h
  CC      qemu-io.o
  CC      qom/object_interfaces.o
  CC      fsdev/virtfs-proxy-helper.o
  CC      fsdev/9p-marshal.o
  CC      fsdev/9p-iov-marshal.o
  CC      qemu-bridge-helper.o
  CC      blockdev-nbd.o
  CC      blockdev.o
  CC      bootdevice.o
  CC      iothread.o
  CC      qdev-monitor.o
  CC      device-hotplug.o
  CC      os-posix.o
  CC      bt-vhci.o
  CC      bt-host.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/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      chardev/baum.o
  CC      disas/alpha.o
  CC      disas/arm.o
  CXX     disas/arm-a64.o
  CC      disas/cris.o
  CC      disas/hppa.o
  CC      disas/i386.o
  CC      disas/m68k.o
  CC      disas/microblaze.o
  CC      disas/mips.o
  CC      disas/nios2.o
  CC      disas/moxie.o
  CC      disas/ppc.o
  CC      disas/s390.o
  CC      disas/sh4.o
  CC      disas/sparc.o
  CC      disas/lm32.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      fsdev/qemu-fsdev.o
  CC      fsdev/qemu-fsdev-opts.o
  CC      fsdev/qemu-fsdev-throttle.o
  CC      fsdev/qemu-fsdev-dummy.o
  CC      hw/9pfs/9p.o
  CC      hw/9pfs/9p-util.o
  CC      hw/9pfs/9p-local.o
  CC      hw/9pfs/9p-xattr.o
  CC      hw/9pfs/9p-xattr-user.o
  CC      hw/9pfs/9p-posix-acl.o
  CC      hw/9pfs/coth.o
  CC      hw/9pfs/cofs.o
  CC      hw/9pfs/codir.o
  CC      hw/9pfs/cofile.o
  CC      hw/9pfs/coxattr.o
  CC      hw/9pfs/9p-synth.o
  CC      hw/9pfs/9p-handle.o
  CC      hw/9pfs/9p-proxy.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/cs4231.o
  CC      hw/audio/marvell_88w8618.o
  CC      hw/audio/milkymist-ac97.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/onenand.o
  CC      hw/block/ecc.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/escc.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/xilinx_uartlite.o
  CC      hw/char/cadence_uart.o
  CC      hw/char/cmsdk-apb-uart.o
  CC      hw/char/etraxfs_ser.o
  CC      hw/char/debugcon.o
  CC      hw/char/grlib_apbuart.o
  CC      hw/char/imx_serial.o
  CC      hw/char/lm32_juart.o
  CC      hw/char/lm32_uart.o
  CC      hw/char/sclpconsole.o
  CC      hw/char/milkymist-uart.o
  CC      hw/char/sclpconsole-lm.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/irq.o
  CC      hw/core/fw-path-provider.o
  CC      hw/core/hotplug.o
  CC      hw/core/nmi.o
  CC      hw/core/empty_slot.o
  CC      hw/core/stream.o
  CC      hw/core/ptimer.o
  CC      hw/core/sysbus.o
  CC      hw/core/machine.o
  CC      hw/core/loader.o
  CC      hw/core/loader-fit.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/cpu/core.o
  CC      hw/display/ads7846.o
  CC      hw/display/cirrus_vga.o
  CC      hw/display/g364fb.o
  CC      hw/display/jazz_led.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/vga-isa-mm.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/milkymist-vgafb.o
  CC      hw/display/tc6393xb.o
  CC      hw/display/milkymist-tmu2.o
  CC      hw/dma/puv3_dma.o
  CC      hw/dma/rc4030.o
  CC      hw/dma/pl080.o
  CC      hw/dma/pl330.o
  CC      hw/dma/i82374.o
  CC      hw/dma/i8257.o
  CC      hw/dma/xilinx_axidma.o
  CC      hw/dma/xlnx-zynq-devcfg.o
  CC      hw/dma/etraxfs_dma.o
  CC      hw/dma/sparc32_dma.o
  CC      hw/dma/sun4m_iommu.o
  CC      hw/gpio/max7310.o
  CC      hw/gpio/pl061.o
  CC      hw/gpio/puv3_gpio.o
  CC      hw/gpio/zaurus.o
  CC      hw/gpio/mpc8xxx.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/exynos4210_i2c.o
  CC      hw/i2c/bitbang_i2c.o
  CC      hw/i2c/imx_i2c.o
  CC      hw/ide/core.o
  CC      hw/i2c/aspeed_i2c.o
  CC      hw/ide/atapi.o
  CC      hw/ide/qdev.o
  CC      hw/ide/isa.o
  CC      hw/ide/pci.o
  CC      hw/ide/piix.o
  CC      hw/ide/cmd646.o
  CC      hw/ide/macio.o
  CC      hw/ide/mmio.o
  CC      hw/ide/via.o
  CC      hw/ide/microdrive.o
  CC      hw/ide/ahci.o
  CC      hw/ide/ich.o
  CC      hw/input/adb.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/heathrow_pic.o
  CC      hw/intc/i8259_common.o
  CC      hw/intc/i8259.o
  CC      hw/intc/pl190.o
  CC      hw/intc/puv3_intc.o
  CC      hw/intc/xilinx_intc.o
  CC      hw/intc/etraxfs_pic.o
  CC      hw/intc/imx_avic.o
  CC      hw/intc/lm32_pic.o
  CC      hw/intc/realview_gic.o
  CC      hw/intc/slavio_intctl.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/openpic.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/isa/i82378.o
  CC      hw/isa/pc87312.o
  CC      hw/isa/piix4.o
  CC      hw/isa/vt82c686.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/tmp421.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/edu.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/misc/puv3_pm.o
  CC      hw/misc/macio/macio.o
  CC      hw/misc/macio/cuda.o
  CC      hw/misc/macio/mac_dbdma.o
  CC      hw/net/dp8393x.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/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/opencores_eth.o
  CC      hw/net/mipsnet.o
  CC      hw/net/xgmac.o
  CC      hw/net/xilinx_axienet.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/lance.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/ds1225y.o
  CC      hw/nvram/eeprom93xx.o
  CC      hw/nvram/fw_cfg.o
  CC      hw/nvram/chrp_nvram.o
  CC      hw/nvram/mac_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-bridge/dec.o
  CC      hw/pci-host/pam.o
  CC      hw/pci-host/prep.o
  CC      hw/pci-host/grackle.o
  CC      hw/pci-host/uninorth.o
  CC      hw/pci-host/ppce500.o
  CC      hw/pci-host/versatile.o
  CC      hw/pci-host/apb.o
  CC      hw/pci-host/bonito.o
  CC      hw/pci-host/piix.o
  CC      hw/pci-host/q35.o
  CC      hw/pci-host/gpex.o
  CC      hw/pci-host/xilinx-pcie.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/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.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_spi.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/m48t59.o
  CC      hw/timer/m48t59-isa.o
  CC      hw/timer/pl031.o
  CC      hw/timer/puv3_ost.o
  CC      hw/timer/twl92230.o
  CC      hw/timer/xilinx_timer.o
  CC      hw/timer/slavio_timer.o
  CC      hw/timer/etraxfs_timer.o
  CC      hw/timer/grlib_gptimer.o
  CC      hw/timer/imx_epit.o
  CC      hw/timer/imx_gpt.o
  CC      hw/timer/lm32_timer.o
  CC      hw/timer/milkymist-sysctl.o
  CC      hw/timer/stm32f2xx_timer.o
  CC      hw/timer/aspeed_timer.o
  CC      hw/timer/sun4v-rtc.o
  CC      hw/timer/cmsdk-apb-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-ehci-sysbus.o
  CC      hw/usb/hcd-xhci.o
  CC      hw/usb/hcd-xhci-nec.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/ccid-card-passthru.o
  CC      hw/usb/ccid-card-emulated.o
  CC      hw/usb/dev-mtp.o
  CC      hw/usb/redirect.o
  CC      hw/usb/quirks.o
  CC      hw/usb/host-libusb.o
  CC      hw/usb/host-legacy.o
  CC      hw/virtio/virtio-rng.o
  CC      hw/virtio/virtio-pci.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_diag288.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/global_state.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-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.o
  CC      net/tap-linux.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-net.o
  CC      replay/replay-snapshot.o
  CC      replay/replay-audio.o
  CC      slirp/cksum.o
  CC      slirp/ip_icmp.o
  CC      slirp/if.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/input-linux.o
  CC      ui/sdl2.o
  CC      ui/sdl2-input.o
  CC      ui/sdl2-gl.o
  CC      ui/sdl2-2d.o
  CC      ui/x_keymap.o
  CC      ui/curses.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-auth-sasl.o
  CC      ui/vnc-ws.o
  CC      ui/vnc-jobs.o
  CC      ui/gtk.o
  CC      ui/shader.o
  VERT    ui/shader/texture-blit-vert.h
  FRAG    ui/shader/texture-blit-frag.h
  CC      ui/egl-helpers.o
  CC      ui/egl-context.o
  CC      ui/egl-headless.o
  CC      ui/gtk-gl-area.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
  CC      contrib/libvhost-user/libvhost-user.o
  CC      contrib/libvhost-user/libvhost-user-glib.o
  LINK    tests/qemu-iotests/socket_scm_helper
  GEN     qemu-doc.html
  CCAS    s390-ccw/start.o
  CC      s390-ccw/main.o
/var/tmp/patchew-tester-tmp-rieff5oi/src/contrib/libvhost-user/libvhost-user.c: In function ‘vu_panic’:
/var/tmp/patchew-tester-tmp-rieff5oi/src/contrib/libvhost-user/libvhost-user.c:103:5: error: ignoring return value of ‘vasprintf’, declared with attribute warn_unused_result [-Werror=unused-result]
     vasprintf(&buf, msg, ap);
     ^~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
/var/tmp/patchew-tester-tmp-rieff5oi/src/rules.mak:66: recipe for target 'contrib/libvhost-user/libvhost-user.o' failed
make: *** [contrib/libvhost-user/libvhost-user.o] Error 1
make: *** Waiting for unfinished jobs....
  CC      s390-ccw/bootmap.o
  CC      s390-ccw/sclp.o
  CC      s390-ccw/virtio.o
  CC      s390-ccw/virtio-scsi.o
s390-netboot.img not built since roms/SLOF/ is not available.
  CC      s390-ccw/virtio-blkdev.o
  BUILD   s390-ccw/s390-ccw.elf
  STRIP   s390-ccw/s390-ccw.img
=== 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] 67+ messages in thread

* Re: [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (27 preceding siblings ...)
  2017-08-23 16:52 ` [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up no-reply
@ 2017-08-23 16:53 ` no-reply
  2017-08-23 16:59 ` no-reply
  2017-08-24  0:40 ` Liu, Changpeng
  30 siblings, 0 replies; 67+ messages in thread
From: no-reply @ 2017-08-23 16:53 UTC (permalink / raw)
  To: marcandre.lureau; +Cc: famz, qemu-devel, changpeng.liu, felipe

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
Message-id: 20170823162004.27337-1-marcandre.lureau@redhat.com
Subject: [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up

=== 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-build@min-glib
time make docker-test-mingw@fedora
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
 t [tag update]            patchew/1503471071-2233-1-git-send-email-peterx@redhat.com -> patchew/1503471071-2233-1-git-send-email-peterx@redhat.com
 t [tag update]            patchew/20170823155458.19601-1-cohuck@redhat.com -> patchew/20170823155458.19601-1-cohuck@redhat.com
 * [new tag]               patchew/20170823162004.27337-1-marcandre.lureau@redhat.com -> patchew/20170823162004.27337-1-marcandre.lureau@redhat.com
 * [new tag]               patchew/20170823163349.11663-1-eblake@redhat.com -> patchew/20170823163349.11663-1-eblake@redhat.com
Switched to a new branch 'test'
a883bf7a19 vhost-user-scsi: remove server_sock from VusDev
86da7daef9 vhost-user-scsi: use libvhost-user glib helper
52f12bd905 build-sys: fix libvhost-user.a build
e634f63645 libvhost-user: add glib source helper
1bfdeb521c vhost-user-scsi: use glib logging
b524aeb589 vhost-user-scsi: simplify source handling
2d4e0af4d3 vhost-user-scsi: drop extra callback pointer
c24a45697e vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h
c7c5c6edb0 vhost-user-scsi: avoid use of iscsi_ namespace
1b91a7ac7a vhost-user-scsi: rename VUS types
316c7d7236 vhost-user-scsi: remove unimplemented functions
13109b9981 vhost-user-scsi: remove VUS_MAX_LUNS
936b68c895 vhost-user-scsi: remove vdev_scsi_add_iscsi_lun()
61fa351c7a vhost-user-scsi: assert() in iscsi_add_lun()
c3e0520f9f vhost-user-scsi: use glib watch directly
af33a18b9d vhost-user-scsi: use NULL pointer
ce03f163db vhost-user-scsi: simplify unix path cleanup
87b438b7ef vhost-user-scsi: remove vdev_scsi_find_by_vu()
788bdf15a6 vhost-user-scsi: also free the gtree
615f11bdb3 vhost-user-scsi: glib calls that allocate don't return NULL
b28edd7b58 vhost-user-scsi: use glib allocation
82ef84b450 vhost-user-scsi: code style fixes
ed3cbb009a vhost-user-scsi: connect unix socket before allocating
ed8c20810f vhost-user-scsi: use g_strdup()
5495c50c09 libvhost-user: improve vu_queue_pop() doc
98ad1525ce libvhost-user: drop dependency on glib
5fa9ffff1f glib-compat: move G_SOURCE_CONTINUE/REMOVE there

=== OUTPUT BEGIN ===
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into '/var/tmp/patchew-tester-tmp-drh2hc96/src/dtc'...
Submodule path 'dtc': checked out '558cd81bdd432769b59bff01240c44f82cfb1a9d'
  BUILD   centos6
make[1]: Entering directory '/var/tmp/patchew-tester-tmp-drh2hc96/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
bison-2.4.1-5.el6.x86_64
bzip2-devel-1.0.5-7.el6_0.x86_64
ccache-3.1.6-2.el6.x86_64
csnappy-devel-0-6.20150729gitd7bc683.el6.x86_64
flex-2.5.35-9.el6.x86_64
gcc-4.4.7-18.el6.x86_64
git-1.7.1-8.el6.x86_64
glib2-devel-2.28.8-9.el6.x86_64
libepoxy-devel-1.2-3.el6.x86_64
libfdt-devel-1.4.0-1.el6.x86_64
librdmacm-devel-1.0.21-0.el6.x86_64
lzo-devel-2.03-3.1.el6_5.1.x86_64
make-3.81-23.el6.x86_64
mesa-libEGL-devel-11.0.7-4.el6.x86_64
mesa-libgbm-devel-11.0.7-4.el6.x86_64
package g++ is not installed
pixman-devel-0.32.8-1.el6.x86_64
spice-glib-devel-0.26-8.el6.x86_64
spice-server-devel-0.12.4-16.el6.x86_64
tar-1.23-15.el6_8.x86_64
vte-devel-0.25.1-9.el6.x86_64
xen-devel-4.6.3-15.el6.x86_64
zlib-devel-1.2.3-29.el6.x86_64

Environment variables:
PACKAGES=bison     bzip2-devel     ccache     csnappy-devel     flex     g++     gcc     git     glib2-devel     libepoxy-devel     libfdt-devel     librdmacm-devel     lzo-devel     make     mesa-libEGL-devel     mesa-libgbm-devel     pixman-devel     SDL-devel     spice-glib-devel     spice-server-devel     tar     vte-devel     xen-devel     zlib-devel
HOSTNAME=1648bded1f4b
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:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=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:*.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:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=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:*.axa=01;36:*.oga=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=/
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   -DNCURSES_WIDECHAR   -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  -I/usr/include/libpng12   -I/usr/include/libdrm     -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/nss3 -I/usr/include/nspr4 -I/usr/include/spice-1   -I/usr/include/cacard -I/usr/include/nss3 -I/usr/include/nspr4  
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
gprof enabled     no
sparse enabled    no
strip binaries    yes
profiler          no
static build      no
pixman            system
SDL support       yes (1.2.14)
GTK support       yes (2.24.23)
GTK GL support    no
VTE support       yes (0.25.1)
TLS priority      NORMAL
GNUTLS support    no
GNUTLS rnd        no
libgcrypt         no
libgcrypt kdf     no
nettle            no 
nettle kdf        no
libtasn1          no
curses support    yes
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  yes
VNC PNG support   yes
xen support       yes
xen ctrl version  40600
pv dom build      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
TCG support       yes
TCG debug enabled no
TCG interpreter   no
RDMA support      yes
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
vhost-user support yes
Trace backends    log
spice support     yes (0.12.6/0.12.4)
rbd support       no
xfsctl support    no
smartcard support yes
libusb            no
usb net redir     no
OpenGL support    yes
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
crypto afalg      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       yes
snappy support    no
bzip2 support     yes
NUMA host support no
tcmalloc support  no
jemalloc support  no
avx2 optimization no
replication support yes
VxHS block device no
mkdir -p dtc/libfdt
mkdir -p dtc/tests
  GEN     aarch64-softmmu/config-devices.mak.tmp
  GEN     x86_64-softmmu/config-devices.mak.tmp
  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     aarch64-softmmu/config-devices.mak
  GEN     x86_64-softmmu/config-devices.mak
  GEN     qmp-marshal.c
  GEN     qapi-types.c
  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     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     accel/tcg/trace.h
  GEN     accel/kvm/trace.h
  GEN     nbd/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     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     accel/tcg/trace.c
  GEN     accel/kvm/trace.c
  GEN     nbd/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/propname_escapes.c
	 DEP /tmp/qemu-test/src/dtc/tests/appendprop2.c
	 DEP /tmp/qemu-test/src/dtc/tests/del_node.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/move_and_save.c
	 DEP /tmp/qemu-test/src/dtc/tests/mangle-layout.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/get_alias.c
	 DEP /tmp/qemu-test/src/dtc/tests/char_literal.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/getprop.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_phandle.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_strerror.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_empty_tree.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/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
	 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_sw.o
	 CC libfdt/fdt_strerror.o
	 CC libfdt/fdt_empty_tree.o
	 CC libfdt/fdt_wip.o
	 CC libfdt/fdt_rw.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
  CC      tests/qemu-iotests/socket_scm_helper.o
  GEN     qga/qapi-generated/qga-qapi-visit.h
  GEN     qga/qapi-generated/qga-qapi-types.h
  GEN     qga/qapi-generated/qga-qapi-types.c
  GEN     qga/qapi-generated/qga-qmp-commands.h
  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/qnum.o
  CC      qobject/qstring.o
  CC      qobject/qdict.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/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/qemu-timer.o
  CC      util/thread-pool.o
  CC      util/iohandler.o
  CC      util/main-loop.o
  CC      util/aio-posix.o
  CC      util/compatfd.o
  CC      util/event_notifier-posix.o
  CC      util/mmap-alloc.o
  CC      util/oslib-posix.o
  CC      util/qemu-openpty.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/cacheinfo.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/hexdump.o
  CC      util/keyval.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-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/stats64.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      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/misc/trace.o
  CC      hw/audio/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/isa/trace.o
  CC      hw/sd/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/vfio/trace.o
  CC      hw/s390x/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      qom/trace.o
  CC      target/ppc/trace.o
  CC      linux-user/trace.o
  CC      qapi/trace.o
  CC      accel/tcg/trace.o
  CC      accel/kvm/trace.o
  CC      nbd/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/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/change-state-handler.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/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      stubs/xen-hvm.o
  CC      contrib/ivshmem-client/ivshmem-client.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      replication.o
  CC      block/qcow.o
  CC      block/raw-format.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-cluster.o
  CC      block/qcow2-snapshot.o
  CC      block/qcow2-cache.o
  CC      block/qcow2-bitmap.o
  CC      block/qed.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-posix.o
  CC      block/null.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/client.o
  CC      nbd/common.o
  CC      block/dmg-bz2.o
  CC      crypto/init.o
  CC      crypto/hash.o
  CC      crypto/hash-glib.o
  CC      crypto/hmac.o
  CC      crypto/hmac-glib.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-platform.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/afsplit.o
  CC      crypto/xts.o
  CC      crypto/block.o
  CC      crypto/block-qcow.o
  CC      io/channel.o
  CC      crypto/block-luks.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
  GEN     qemu-img-cmds.h
  CC      qemu-io.o
  CC      qemu-bridge-helper.o
  CC      blockdev.o
  CC      blockdev-nbd.o
  CC      bootdevice.o
  CC      iothread.o
  CC      qdev-monitor.o
  CC      device-hotplug.o
  CC      os-posix.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/sdlaudio.o
  CC      audio/spiceaudio.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      chardev/spice.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/xen_disk.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/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/xen_console.o
  CC      hw/char/cadence_uart.o
  CC      hw/char/cmsdk-apb-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/nmi.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/cpu/core.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/xenfb.o
  CC      hw/display/vga-pci.o
  CC      hw/display/vga-isa.o
  CC      hw/display/blizzard.o
  CC      hw/display/vmware_vga.o
  CC      hw/display/exynos4210_fimd.o
  CC      hw/display/framebuffer.o
  CC      hw/display/tc6393xb.o
  CC      hw/display/qxl.o
  CC      hw/display/qxl-logger.o
  CC      hw/display/qxl-render.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/smbus_eeprom.o
  CC      hw/i2c/versatile_i2c.o
  CC      hw/i2c/smbus_ich9.o
  CC      hw/i2c/i2c-ddc.o
  CC      hw/i2c/pm_smbus.o
  CC      hw/i2c/bitbang_i2c.o
  CC      hw/i2c/imx_i2c.o
  CC      hw/i2c/aspeed_i2c.o
  CC      hw/i2c/exynos4210_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/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/tpci200.o
  CC      hw/ipmi/ipmi.o
  CC      hw/ipack/ipack.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/tmp421.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/edu.o
  CC      hw/misc/unimp.o
  CC      hw/misc/arm_integrator_debug.o
  CC      hw/misc/arm_l2x0.o
  CC      hw/misc/a9scu.o
  CC      hw/misc/arm11scu.o
  CC      hw/net/xen_nic.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/rtl8139.o
  CC      hw/net/vmxnet3.o
  CC      hw/net/smc91c111.o
  CC      hw/net/ne2000-isa.o
  CC      hw/net/lan9118.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/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.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/i8254_common.o
  CC      hw/timer/hpet.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/timer/cmsdk-apb-timer.o
  CC      hw/tpm/tpm_tis.o
  CC      hw/tpm/tpm_passthrough.o
  CC      hw/tpm/tpm_util.o
  CC      hw/usb/core.o
  CC      hw/usb/combined-packet.o
  CC      hw/usb/bus.o
  CC      hw/usb/desc.o
  CC      hw/usb/libhw.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-ehci-sysbus.o
  CC      hw/usb/hcd-xhci.o
  CC      hw/usb/hcd-xhci-nec.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/ccid-card-passthru.o
  CC      hw/usb/ccid-card-emulated.o
  CC      hw/usb/dev-mtp.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/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      hw/xen/xen_backend.o
  CC      hw/xen/xen_devconfig.o
  CC      hw/xen/xen_pvdev.o
  CC      hw/xen/xen-common.o
  CC      migration/socket.o
  CC      migration/migration.o
  CC      migration/exec.o
  CC      migration/fd.o
  CC      migration/tls.o
  CC      migration/savevm.o
  CC      migration/channel.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/global_state.o
  CC      migration/qemu-file-channel.o
  CC      migration/xbzrle.o
  CC      migration/postcopy-ram.o
  CC      migration/qjson.o
  CC      migration/rdma.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-buffer.o
  CC      net/filter-mirror.o
  CC      net/colo-compare.o
  CC      net/colo.o
  CC      net/filter-replay.o
  CC      net/filter-rewriter.o
  CC      net/tap.o
  CC      net/tap-linux.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
/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-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_output.o
  CC      slirp/tcp_input.o
  CC      slirp/tcp_timer.o
  CC      slirp/tcp_subr.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
/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      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/input-linux.o
  CC      ui/spice-core.o
  CC      ui/spice-input.o
  CC      ui/spice-display.o
  CC      ui/sdl.o
  CC      ui/sdl_zoom.o
  CC      ui/x_keymap.o
  CC      ui/curses.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      ui/shader.o
  VERT    ui/shader/texture-blit-vert.h
  FRAG    ui/shader/texture-blit-frag.h
  CC      ui/egl-helpers.o
  CC      ui/egl-context.o
  CC      chardev/char.o
  CC      ui/gtk-egl.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
In file included from /usr/include/gtk-2.0/gtk/gtk.h:235,
                 from /tmp/qemu-test/src/include/ui/gtk.h:10,
                 from /tmp/qemu-test/src/ui/gtk.c:43:
/usr/include/gtk-2.0/gtk/gtkitemfactory.h:47: warning: function declaration isn’t a prototype
  CC      chardev/char-socket.o
  CC      chardev/char-stdio.o
  CC      chardev/char-udp.o
In file included from /usr/include/gtk-2.0/gtk/gtk.h:235,
                 from /tmp/qemu-test/src/include/ui/gtk.h:10,
                 from /tmp/qemu-test/src/ui/gtk-egl.c:21:
/usr/include/gtk-2.0/gtk/gtkitemfactory.h:47: warning: function declaration isn’t a prototype
  CC      contrib/libvhost-user/libvhost-user.o
  CC      contrib/libvhost-user/libvhost-user-glib.o
  LINK    tests/qemu-iotests/socket_scm_helper
  CC      qga/commands.o
  CC      qga/guest-agent-command-state.o
In file included from /tmp/qemu-test/src/contrib/libvhost-user/libvhost-user.c:30:
/tmp/qemu-test/src/include/qemu/atomic.h:235:6: warning: "QEMU_GNUC_PREREQ" is not defined
/tmp/qemu-test/src/include/qemu/atomic.h:235:22: error: missing binary operator before token "("
/tmp/qemu-test/src/contrib/libvhost-user/libvhost-user.c: In function ‘vu_panic’:
/tmp/qemu-test/src/contrib/libvhost-user/libvhost-user.c:103: warning: ignoring return value of ‘vasprintf’, declared with attribute warn_unused_result
make: *** [contrib/libvhost-user/libvhost-user.o] Error 1
make: *** Waiting for unfinished jobs....
  AS      optionrom/linuxboot.o
  AS      optionrom/multiboot.o
  CC      optionrom/linuxboot_dma.o
  AS      optionrom/kvmvapic.o
  BUILD   optionrom/multiboot.img
  BUILD   optionrom/linuxboot.img
  BUILD   optionrom/multiboot.raw
  BUILD   optionrom/kvmvapic.img
  SIGN    optionrom/multiboot.bin
  BUILD   optionrom/linuxboot.raw
cc: unrecognized option '-no-integrated-as'
cc: unrecognized option '-no-integrated-as'
  BUILD   optionrom/linuxboot_dma.img
  BUILD   optionrom/kvmvapic.raw
  SIGN    optionrom/linuxboot.bin
  BUILD   optionrom/linuxboot_dma.raw
  SIGN    optionrom/kvmvapic.bin
  SIGN    optionrom/linuxboot_dma.bin
Traceback (most recent call last):
  File "./tests/docker/docker.py", line 382, in <module>
    sys.exit(main())
  File "./tests/docker/docker.py", line 379, in main
    return args.cmdobj.run(args, argv)
  File "./tests/docker/docker.py", line 237, in run
    return Docker().run(argv, args.keep, quiet=args.quiet)
  File "./tests/docker/docker.py", line 205, in run
    quiet=quiet)
  File "./tests/docker/docker.py", line 123, in _do_check
    return subprocess.check_call(self._command + cmd, **kwargs)
  File "/usr/lib64/python2.7/subprocess.py", line 186, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['docker', 'run', '--label', 'com.qemu.instance.uuid=5027aa9e882311e7ba9652540069c830', '-u', '0', '-t', '--rm', '--net=none', '-e', 'TARGET_LIST=', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=8', '-e', 'DEBUG=', '-e', 'SHOW_ENV=1', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/var/tmp/patchew-tester-tmp-drh2hc96/src/docker-src.2017-08-23-12.51.27.23828:/var/tmp/qemu:z,ro', '-v', '/root/.cache/qemu-docker-ccache:/var/tmp/ccache:z', 'qemu:centos6', '/var/tmp/qemu/run', 'test-quick']' returned non-zero exit status 2
make[1]: *** [tests/docker/Makefile.include:139: docker-run] Error 1
make[1]: Leaving directory '/var/tmp/patchew-tester-tmp-drh2hc96/src'
make: *** [tests/docker/Makefile.include:168: docker-run-test-quick@centos6] Error 2

real	2m29.852s
user	0m4.938s
sys	0m2.041s
=== 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] 67+ messages in thread

* Re: [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (28 preceding siblings ...)
  2017-08-23 16:53 ` no-reply
@ 2017-08-23 16:59 ` no-reply
  2017-08-24  0:40 ` Liu, Changpeng
  30 siblings, 0 replies; 67+ messages in thread
From: no-reply @ 2017-08-23 16:59 UTC (permalink / raw)
  To: marcandre.lureau; +Cc: famz, qemu-devel, changpeng.liu, felipe

Hi,

This series failed build test on FreeBSD host. Please find the details below.

Message-id: 20170823162004.27337-1-marcandre.lureau@redhat.com
Type: series
Subject: [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up

=== TEST SCRIPT BEGIN ===
#!/bin/sh
# Testing script will be invoked under the git checkout with
# HEAD pointing to a commit that has the patches applied on top of "base"
# branch
set -e
echo "=== ENV ==="
env
echo "=== PACKAGES ==="
pkg info
echo "=== TEST BEGIN ==="
CC=/usr/local/libexec/ccache/cc
INSTALL=$PWD/install
BUILD=$PWD/build
echo -n "Using CC: "
realpath $CC
mkdir -p $BUILD $INSTALL
SRC=$PWD
cd $BUILD
$SRC/configure --cc=$CC --prefix=$INSTALL --target-list=x86_64-softmmu
gmake -j4
# XXX: we need reliable clean up
# make check -j4 V=1
gmake install
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
a883bf7a19 vhost-user-scsi: remove server_sock from VusDev
86da7daef9 vhost-user-scsi: use libvhost-user glib helper
52f12bd905 build-sys: fix libvhost-user.a build
e634f63645 libvhost-user: add glib source helper
1bfdeb521c vhost-user-scsi: use glib logging
b524aeb589 vhost-user-scsi: simplify source handling
2d4e0af4d3 vhost-user-scsi: drop extra callback pointer
c24a45697e vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h
c7c5c6edb0 vhost-user-scsi: avoid use of iscsi_ namespace
1b91a7ac7a vhost-user-scsi: rename VUS types
316c7d7236 vhost-user-scsi: remove unimplemented functions
13109b9981 vhost-user-scsi: remove VUS_MAX_LUNS
936b68c895 vhost-user-scsi: remove vdev_scsi_add_iscsi_lun()
61fa351c7a vhost-user-scsi: assert() in iscsi_add_lun()
c3e0520f9f vhost-user-scsi: use glib watch directly
af33a18b9d vhost-user-scsi: use NULL pointer
ce03f163db vhost-user-scsi: simplify unix path cleanup
87b438b7ef vhost-user-scsi: remove vdev_scsi_find_by_vu()
788bdf15a6 vhost-user-scsi: also free the gtree
615f11bdb3 vhost-user-scsi: glib calls that allocate don't return NULL
b28edd7b58 vhost-user-scsi: use glib allocation
82ef84b450 vhost-user-scsi: code style fixes
ed3cbb009a vhost-user-scsi: connect unix socket before allocating
ed8c20810f vhost-user-scsi: use g_strdup()
5495c50c09 libvhost-user: improve vu_queue_pop() doc
98ad1525ce libvhost-user: drop dependency on glib
5fa9ffff1f glib-compat: move G_SOURCE_CONTINUE/REMOVE there

=== OUTPUT BEGIN ===
=== ENV ===
LOGNAME=patchew-tester
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
PWD=/var/tmp/patchew-tester-tmp-_s1vgw6f/src
HOME=/home/patchew-tester
USER=patchew-tester
SHELL=/bin/sh
PATCHEW=/home/patchew-tester/patchew/patchew-cli -s http://patchew.org --nodebug
=== PACKAGES ===
bash-4.4.12_2                  GNU Project's Bourne Again SHell
binutils-2.28,1                GNU binary tools
bison-3.0.4,1                  Parser generator from FSF, (mostly) compatible with Yacc
ca_root_nss-3.30.2             Root certificate bundle from the Mozilla Project
ccache-3.3.4_3                 Tool to minimize the compile time of C/C++ programs
curl-7.54.0                    Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
cvsps-2.1_2                    Create patchset information from CVS
dtc-1.4.2_1                    Device Tree Compiler
expat-2.2.0_1                  XML 1.0 parser written in C
gcc-5.4.0                      GNU Compiler Collection 5
gcc-ecj-4.5                    Eclipse Java Compiler used to build GCC Java
gettext-runtime-0.19.8.1_1     GNU gettext runtime libraries and programs
git-2.13.0                     Distributed source code management tool
glib-2.46.2_5                  Some useful routines of C programming (current stable version)
gmake-4.2.1_1                  GNU version of 'make' utility
gmp-6.1.2                      Free library for arbitrary precision arithmetic
indexinfo-0.2.6                Utility to regenerate the GNU info page index
libffi-3.2.1                   Foreign Function Interface
libiconv-1.14_10               Character set conversion library
libnghttp2-1.21.0              HTTP/2.0 C Library
m4-1.4.18,1                    GNU M4
mpc-1.0.3                      Library of complex numbers with arbitrarily high precision
mpfr-3.1.5_1                   Library for multiple-precision floating-point computations
p5-Authen-SASL-2.16_1          Perl5 module for SASL authentication
p5-Digest-HMAC-1.03_1          Perl5 interface to HMAC Message-Digest Algorithms
p5-Error-0.17024               Error/exception handling in object-oriented programming style
p5-GSSAPI-0.28_1               Perl extension providing access to the GSSAPIv2 library
pcre-8.40                      Perl Compatible Regular Expressions library
perl5-5.24.1                   Practical Extraction and Report Language
pixman-0.34.0                  Low-level pixel manipulation library
pkg-1.10.1                     Package manager
pkgconf-1.3.0,1                Utility to help to configure compiler and linker flags
python-2.7_3,2                 "meta-port" for the default version of Python interpreter
python2-2_3                    The "meta-port" for version 2 of the Python interpreter
python27-2.7.13_3              Interpreted object-oriented programming language
python3-3_3                    The "meta-port" for version 3 of the Python interpreter
python35-3.5.3_1               Interpreted object-oriented programming language
readline-6.3.8                 Library for editing command lines as they are typed
sudo-1.8.20p1                  Allow others to run commands as root
=== TEST BEGIN ===
Using CC: /usr/local/bin/ccache
Install prefix    /var/tmp/patchew-tester-tmp-_s1vgw6f/src/install
BIOS directory    /var/tmp/patchew-tester-tmp-_s1vgw6f/src/install/share/qemu
binary directory  /var/tmp/patchew-tester-tmp-_s1vgw6f/src/install/bin
library directory /var/tmp/patchew-tester-tmp-_s1vgw6f/src/install/lib
module directory  /var/tmp/patchew-tester-tmp-_s1vgw6f/src/install/lib/qemu
libexec directory /var/tmp/patchew-tester-tmp-_s1vgw6f/src/install/libexec
include directory /var/tmp/patchew-tester-tmp-_s1vgw6f/src/install/include
config directory  /var/tmp/patchew-tester-tmp-_s1vgw6f/src/install/etc
local state directory   /var/tmp/patchew-tester-tmp-_s1vgw6f/src/install/var
Manual directory  /var/tmp/patchew-tester-tmp-_s1vgw6f/src/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /var/tmp/patchew-tester-tmp-_s1vgw6f/src
C compiler        /usr/local/libexec/ccache/cc
Host C compiler   cc
C++ compiler      c++
Objective-C compiler clang
ARFLAGS           rv
CFLAGS            -O2 -g 
QEMU_CFLAGS       -I/usr/local/include/pixman-1   -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include  -DNCURSES_WIDECHAR  -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  -Wno-string-plus-int -Wno-initializer-overrides -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-definition -Wtype-limits -fstack-protector-strong 
LDFLAGS           -Wl,--warn-common -m64 -g 
make              gmake
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
gprof enabled     no
sparse enabled    no
strip binaries    yes
profiler          no
static build      no
pixman            system
SDL support       no 
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    yes
virgl support     no
curl support      yes
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               no
vde support       no
netmap support    yes
Linux AIO support no
ATTR/XATTR support no
Install blobs     yes
KVM support       no
HAX support       no
TCG support       yes
TCG debug enabled no
TCG interpreter   no
RDMA support      no
fdt support       no
preadv support    yes
fdatasync         no
madvise           yes
posix_madvise     yes
libcap-ng support no
vhost-net support no
vhost-scsi support no
vhost-vsock support no
vhost-user support yes
Trace backends    log
spice support     no 
rbd support       no
xfsctl support    no
smartcard support no
libusb            yes
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
crypto afalg      no
GlusterFS support no
gcov              gcov
gcov enabled      no
TPM support       yes
libssh2 support   no
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 no
replication support yes
VxHS block device no
  GEN     x86_64-softmmu/config-devices.mak.tmp
  GEN     config-host.h
  GEN     qemu-options.def
  GEN     x86_64-softmmu/config-devices.mak
  GEN     qapi-types.h
  GEN     qmp-commands.h
  GEN     qapi-visit.h
  GEN     qapi-event.h
  GEN     qmp-marshal.c
  GEN     qapi-types.c
  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     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     accel/tcg/trace.h
  GEN     accel/kvm/trace.h
  GEN     nbd/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     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     accel/tcg/trace.c
  GEN     accel/kvm/trace.c
  GEN     nbd/trace.c
  GEN     config-all-devices.mak
  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-qapi-types.c
  GEN     qga/qapi-generated/qga-qapi-visit.c
  CC      qmp-introspect.o
  GEN     qga/qapi-generated/qga-qmp-marshal.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/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/qnum.o
  CC      qobject/qstring.o
  CC      qobject/qdict.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/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-posix.o
  CC      util/compatfd.o
  CC      util/event_notifier-posix.o
  CC      util/mmap-alloc.o
  CC      util/oslib-posix.o
  CC      util/qemu-openpty.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/cacheinfo.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-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/stats64.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      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/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/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      accel/tcg/trace.o
  CC      accel/kvm/trace.o
  CC      nbd/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/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/change-state-handler.o
  CC      stubs/monitor.o
  CC      stubs/notify-event.o
  CC      stubs/qtest.o
  CC      stubs/replay.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/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      stubs/xen-hvm.o
  CC      qemu-nbd.o
  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/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-cluster.o
  CC      block/qcow2-snapshot.o
  CC      block/qcow2-cache.o
  CC      block/qcow2-bitmap.o
  CC      block/qed.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-posix.o
  CC      block/null.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/client.o
  CC      nbd/common.o
  CC      block/curl.o
  CC      block/dmg-bz2.o
  CC      crypto/init.o
  CC      crypto/hash.o
  CC      crypto/hash-glib.o
  CC      crypto/hmac.o
  CC      crypto/hmac-glib.o
  CC      crypto/aes.o
  CC      crypto/desrfb.o
  CC      crypto/cipher.o
  CC      crypto/tlscreds.o
  CC      crypto/tlscredsanon.o
  CC      crypto/tlssession.o
  CC      crypto/tlscredsx509.o
  CC      crypto/secret.o
  CC      crypto/random-platform.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/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-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
  GEN     qemu-img-cmds.h
  CC      qemu-io.o
  CC      blockdev.o
  CC      blockdev-nbd.o
  CC      bootdevice.o
  CC      iothread.o
  CC      qdev-monitor.o
  CC      device-hotplug.o
  CC      os-posix.o
  CC      bt-host.o
  CC      bt-vhci.o
  CC      dma-helpers.o
  CC      vl.o
  CC      tpm.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/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/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/i386.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/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/pflash_cfi01.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/serial-isa.o
  CC      hw/char/serial-pci.o
  CC      hw/char/virtio-console.o
  CC      hw/char/debugcon.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/nmi.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/cpu/core.o
  CC      hw/display/cirrus_vga.o
  CC      hw/display/vga-pci.o
  CC      hw/display/vga-isa.o
  CC      hw/display/vmware_vga.o
  CC      hw/dma/i8257.o
  CC      hw/i2c/core.o
  CC      hw/i2c/smbus.o
  CC      hw/i2c/smbus_eeprom.o
  CC      hw/i2c/smbus_ich9.o
  CC      hw/i2c/pm_smbus.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/ahci.o
  CC      hw/ide/ich.o
  CC      hw/input/hid.o
  CC      hw/input/pckbd.o
  CC      hw/input/ps2.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/ioapic_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/debugexit.o
  CC      hw/misc/sga.o
  CC      hw/misc/pc-testdev.o
  CC      hw/misc/pci-testdev.o
  CC      hw/misc/edu.o
  CC      hw/misc/unimp.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/e1000e_core.o
  CC      hw/net/rtl8139.o
  CC      hw/net/vmxnet3.o
  CC      hw/net/ne2000-isa.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/piix.o
  CC      hw/pci-host/q35.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/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.o
  CC      hw/scsi/esp-pci.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/timer/hpet.o
  CC      hw/timer/i8254_common.o
  CC      hw/timer/i8254.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-xhci-nec.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/dev-mtp.o
  CC      hw/usb/host-libusb.o
  CC      hw/usb/host-legacy.o
  CC      hw/virtio/virtio-rng.o
  CC      hw/virtio/virtio-pci.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      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/global_state.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/vhost-user.o
  CC      net/slirp.o
  CC      net/netmap.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.o
  CC      net/tap-bsd.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/curses.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
  CC      contrib/libvhost-user/libvhost-user.o
  CC      contrib/libvhost-user/libvhost-user-glib.o
/var/tmp/patchew-tester-tmp-_s1vgw6f/src/contrib/libvhost-user/libvhost-user.c:26:10: fatal error: 'sys/eventfd.h' file not found
#include <sys/eventfd.h>
         ^
1 error generated.
gmake: *** [/var/tmp/patchew-tester-tmp-_s1vgw6f/src/rules.mak:66: contrib/libvhost-user/libvhost-user.o] Error 1
gmake: *** Waiting for unfinished jobs....
In file included from /var/tmp/patchew-tester-tmp-_s1vgw6f/src/contrib/libvhost-user/libvhost-user-glib.c:17:
In file included from /var/tmp/patchew-tester-tmp-_s1vgw6f/src/contrib/libvhost-user/libvhost-user-glib.h:19:
/var/tmp/patchew-tester-tmp-_s1vgw6f/src/contrib/libvhost-user/libvhost-user.h:21:10: fatal error: 'linux/vhost.h' file not found
#include <linux/vhost.h>
         ^
1 error generated.
gmake: *** [/var/tmp/patchew-tester-tmp-_s1vgw6f/src/rules.mak:66: contrib/libvhost-user/libvhost-user-glib.o] Error 1
=== 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] 67+ messages in thread

* Re: [Qemu-devel] [PATCH 12/27] vhost-user-scsi: use NULL pointer
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 12/27] vhost-user-scsi: use NULL pointer Marc-André Lureau
@ 2017-08-23 17:47   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-23 17:47 UTC (permalink / raw)
  To: Marc-André Lureau
  Cc: qemu-devel@nongnu.org Developers, changpeng.liu, felipe

On Wed, Aug 23, 2017 at 1:19 PM, Marc-André Lureau
<marcandre.lureau@redhat.com> wrote:
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

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

> ---
>  contrib/vhost-user-scsi/vhost-user-scsi.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 624efc24ca..596c1effa1 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -686,7 +686,7 @@ static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
>      assert(vdev_scsi->server_sock >= 0);
>      assert(vdev_scsi->loop);
>
> -    cli_sock = accept(vdev_scsi->server_sock, (void *)0, (void *)0);
> +    cli_sock = accept(vdev_scsi->server_sock, NULL, NULL);
>      if (cli_sock < 0) {
>          perror("accept");
>          return -1;
> --
> 2.14.1.146.gd35faa819
>
>

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

* Re: [Qemu-devel] [PATCH 04/27] vhost-user-scsi: use g_strdup()
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 04/27] vhost-user-scsi: use g_strdup() Marc-André Lureau
@ 2017-08-23 17:50   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-23 17:50 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> Since vhost-user-scsi uses glib.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

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

> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 12 ++++--------
>   1 file changed, 4 insertions(+), 8 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 78bcc65f5a..1fb57da2da 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -822,10 +822,10 @@ int main(int argc, char **argv)
>           case 'h':
>               goto help;
>           case 'u':
> -            unix_fn = strdup(optarg);
> +            unix_fn = g_strdup(optarg);
>               break;
>           case 'i':
> -            iscsi_uri = strdup(optarg);
> +            iscsi_uri = g_strdup(optarg);
>               break;
>           default:
>               goto help;
> @@ -854,12 +854,8 @@ out:
>           vdev_scsi_deinit(vdev_scsi);
>           free(vdev_scsi);
>       }
> -    if (unix_fn) {
> -        free(unix_fn);
> -    }
> -    if (iscsi_uri) {
> -        free(iscsi_uri);
> -    }
> +    g_free(unix_fn);
> +    g_free(iscsi_uri);
>   
>       return err;
>   
> 

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

* Re: [Qemu-devel] [PATCH 07/27] vhost-user-scsi: use glib allocation
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 07/27] vhost-user-scsi: use glib allocation Marc-André Lureau
@ 2017-08-23 17:53   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-23 17:53 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> Use g_new/g_free instead of plain malloc. This simplify a bit memory
> handling since glib will abort if it cannot allocate.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 35 ++++++++-----------------------
>   1 file changed, 9 insertions(+), 26 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 8d6ff18cc4..f3fc8c23c6 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -312,12 +312,7 @@ static struct scsi_task *scsi_task_new(int cdb_len, uint8_t *cdb, int dir,
>       assert(cdb_len > 0);
>       assert(cdb);
>   
> -    task = calloc(1, sizeof(struct scsi_task));
> -    if (!task) {
> -        PERR("Error allocating task: %s", strerror(errno));
> -        return NULL;
> -    }
> -
> +    task = g_new0(struct scsi_task, 1);
>       memcpy(task->cdb, cdb, cdb_len);
>       task->cdb_size = cdb_len;
>       task->xfer_dir = dir;
> @@ -393,10 +388,6 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
>       }
>   
>       task = scsi_task_new(cdb_len, req->cdb, dir, len);
> -    if (!task) {
> -        PERR("Unable to create iscsi task");
> -        return -1;
> -    }
>   
>       if (dir == SCSI_XFER_TO_DEV) {
>           task->iovector_out.iov = (struct scsi_iovec *)out;
> @@ -410,7 +401,7 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
>            cdb_len, dir, task);
>       if (!iscsi_scsi_command_sync(ctx, 0, task, NULL)) {
>           PERR("Error serving SCSI command");
> -        free(task);
> +        g_free(task);
>           return -1;
>       }
>   
> @@ -425,7 +416,7 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
>           memcpy(rsp->sense, &task->datain.data[2], rsp->sense_len);
>       }
>   
> -    free(task);
> +    g_free(task);
>   
>       PDBG("Filled in rsp: status=%hhX, resid=%u, response=%hhX, sense_len=%u",
>            rsp->status, rsp->resid, rsp->response, rsp->sense_len);
> @@ -692,7 +683,7 @@ static vhost_scsi_dev_t *vdev_scsi_find_by_vu(VuDev *vu_dev)
>       return NULL;
>   }
>   
> -static void vdev_scsi_deinit(vhost_scsi_dev_t *vdev_scsi)
> +static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
>   {
>       if (!vdev_scsi) {
>           return;
> @@ -716,20 +707,16 @@ static void vdev_scsi_deinit(vhost_scsi_dev_t *vdev_scsi)
>           g_main_loop_unref(vdev_scsi->loop);
>           vdev_scsi->loop = NULL;
>       }
> +    g_free(vdev_scsi);

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

>   }
>   
>   static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
>   {
> -    vhost_scsi_dev_t *vdev_scsi = NULL;
> +    vhost_scsi_dev_t *vdev_scsi;
>   
>       assert(server_sock >= 0);
>   
> -    vdev_scsi = calloc(1, sizeof(vhost_scsi_dev_t));
> -    if (!vdev_scsi) {
> -        PERR("calloc: %s", strerror(errno));
> -        return NULL;
> -    }
> -
> +    vdev_scsi = g_new0(vhost_scsi_dev_t, 1);
>       vdev_scsi->server_sock = server_sock;
>       vdev_scsi->loop = g_main_loop_new(NULL, FALSE);
>       if (!vdev_scsi->loop) {
> @@ -746,8 +733,7 @@ static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
>       return vdev_scsi;
>   
>   err:
> -    vdev_scsi_deinit(vdev_scsi);
> -    free(vdev_scsi);
> +    vdev_scsi_free(vdev_scsi);
>   
>       return NULL;
>   }
> @@ -854,10 +840,7 @@ int main(int argc, char **argv)
>       }
>   
>   out:
> -    if (vdev_scsi) {
> -        vdev_scsi_deinit(vdev_scsi);
> -        free(vdev_scsi);
> -    }
> +    vdev_scsi_free(vdev_scsi);
>       g_free(unix_fn);
>       g_free(iscsi_uri);
>   
> 

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

* Re: [Qemu-devel] [PATCH 14/27] vhost-user-scsi: assert() in iscsi_add_lun()
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 14/27] vhost-user-scsi: assert() in iscsi_add_lun() Marc-André Lureau
@ 2017-08-23 17:56   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-23 17:56 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> Instead of a preliminary check, add an assert to the function that has
> the pre-condition.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 6 +-----
>   1 file changed, 1 insertion(+), 5 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index b40009e234..988417393f 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -255,6 +255,7 @@ static int iscsi_add_lun(iscsi_lun_t *lun, char *iscsi_uri)
>   
>       assert(lun);
>       assert(iscsi_uri);
> +    assert(!lun->iscsi_ctx);
>   
>       iscsi_ctx = iscsi_create_context(VUS_ISCSI_INITIATOR);
>       if (!iscsi_ctx) {
> @@ -664,11 +665,6 @@ static int vdev_scsi_add_iscsi_lun(vhost_scsi_dev_t *vdev_scsi,
>       assert(iscsi_uri);
>       assert(lun < VUS_MAX_LUNS);
>   
> -    if (vdev_scsi->luns[lun].iscsi_ctx) {
> -        PERR("Lun %d already configured", lun);
> -        return -1;
> -    }

the error message is lost :/

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

> -
>       if (iscsi_add_lun(&vdev_scsi->luns[lun], iscsi_uri) != 0) {
>           return -1;
>       }
> 

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

* Re: [Qemu-devel] [PATCH 15/27] vhost-user-scsi: remove vdev_scsi_add_iscsi_lun()
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 15/27] vhost-user-scsi: remove vdev_scsi_add_iscsi_lun() Marc-André Lureau
@ 2017-08-23 17:57   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-23 17:57 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

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

> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 16 +---------------
>   1 file changed, 1 insertion(+), 15 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 988417393f..f6f9e7b192 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -658,20 +658,6 @@ static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
>       return vdev_scsi;
>   }
>   
> -static int vdev_scsi_add_iscsi_lun(vhost_scsi_dev_t *vdev_scsi,
> -                                   char *iscsi_uri, uint32_t lun)
> -{
> -    assert(vdev_scsi);
> -    assert(iscsi_uri);
> -    assert(lun < VUS_MAX_LUNS);
> -
> -    if (iscsi_add_lun(&vdev_scsi->luns[lun], iscsi_uri) != 0) {
> -        return -1;
> -    }
> -
> -    return 0;
> -}
> -
>   static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
>   {
>       GIOChannel *chan;
> @@ -736,7 +722,7 @@ int main(int argc, char **argv)
>       }
>       vdev_scsi = vdev_scsi_new(sock);
>   
> -    if (vdev_scsi_add_iscsi_lun(vdev_scsi, iscsi_uri, 0) != 0) {
> +    if (iscsi_add_lun(&vdev_scsi->luns[0], iscsi_uri) != 0) {
>           goto err;
>       }
>   
> 

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

* Re: [Qemu-devel] [PATCH 18/27] vhost-user-scsi: rename VUS types
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 18/27] vhost-user-scsi: rename VUS types Marc-André Lureau
@ 2017-08-23 17:59   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-23 17:59 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> - use Vus prefix consistently
> - use CamelCase, since that's glib & libvhost-user style
> - avoid _t postfix, usually for system headers
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

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

> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 46 +++++++++++++++----------------
>   1 file changed, 23 insertions(+), 23 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 882d887a32..2ceca964f4 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -55,18 +55,18 @@
>   
>   #define VUS_ISCSI_INITIATOR "iqn.2016-11.com.nutanix:vhost-user-scsi"
>   
> -typedef struct iscsi_lun {
> +typedef struct VusIscsiLun {
>       struct iscsi_context *iscsi_ctx;
>       int iscsi_lun;
> -} iscsi_lun_t;
> +} VusIscsiLun;
>   
> -typedef struct vhost_scsi_dev {
> +typedef struct VusDev {
>       VuDev vu_dev;
>       int server_sock;
>       GMainLoop *loop;
>       GTree *fdmap;   /* fd -> gsource context id */
> -    iscsi_lun_t lun;
> -} vhost_scsi_dev_t;
> +    VusIscsiLun lun;
> +} VusDev;
>   
>   /** glib event loop integration for libvhost-user and misc callbacks **/
>   
> @@ -78,7 +78,7 @@ QEMU_BUILD_BUG_ON((int)G_IO_HUP != (int)VU_WATCH_HUP);
>   
>   typedef struct vus_gsrc {
>       GSource parent;
> -    vhost_scsi_dev_t *vdev_scsi;
> +    VusDev *vdev_scsi;
>       GPollFD gfd;
>       vu_watch_cb vu_cb;
>   } vus_gsrc_t;
> @@ -107,7 +107,7 @@ static gboolean vus_gsrc_check(GSource *src)
>   
>   static gboolean vus_gsrc_dispatch(GSource *src, GSourceFunc cb, gpointer data)
>   {
> -    vhost_scsi_dev_t *vdev_scsi;
> +    VusDev *vdev_scsi;
>       vus_gsrc_t *vus_src = (vus_gsrc_t *)src;
>   
>       assert(vus_src);
> @@ -133,7 +133,7 @@ static GSourceFuncs vus_gsrc_funcs = {
>       NULL
>   };
>   
> -static void vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
> +static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
>                            vu_watch_cb vu_cb, gpointer data)
>   {
>       GSource *vus_gsrc;
> @@ -245,7 +245,7 @@ struct scsi_task {
>   
>   /** libiscsi integration **/
>   
> -static int iscsi_add_lun(iscsi_lun_t *lun, char *iscsi_uri)
> +static int iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri)
>   {
>       struct iscsi_url *iscsi_url;
>       struct iscsi_context *iscsi_ctx;
> @@ -415,11 +415,11 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
>   
>   static void vus_panic_cb(VuDev *vu_dev, const char *buf)
>   {
> -    vhost_scsi_dev_t *vdev_scsi;
> +    VusDev *vdev_scsi;
>   
>       assert(vu_dev);
>   
> -    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
> +    vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
>       if (buf) {
>           PERR("vu_panic: %s", buf);
>       }
> @@ -430,14 +430,14 @@ static void vus_panic_cb(VuDev *vu_dev, const char *buf)
>   static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
>                                void *pvt)
>   {
> -    vhost_scsi_dev_t *vdev_scsi;
> +    VusDev *vdev_scsi;
>       guint id;
>   
>       assert(vu_dev);
>       assert(fd >= 0);
>       assert(cb);
>   
> -    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
> +    vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
>       id = (guint)(uintptr_t)g_tree_lookup(vdev_scsi->fdmap,
>                                            (gpointer)(uintptr_t)fd);
>       if (id) {
> @@ -452,13 +452,13 @@ static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
>   
>   static void vus_del_watch_cb(VuDev *vu_dev, int fd)
>   {
> -    vhost_scsi_dev_t *vdev_scsi;
> +    VusDev *vdev_scsi;
>       guint id;
>   
>       assert(vu_dev);
>       assert(fd >= 0);
>   
> -    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
> +    vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
>       id = (guint)(uintptr_t)g_tree_lookup(vdev_scsi->fdmap,
>                                            (gpointer)(uintptr_t)fd);
>       if (id) {
> @@ -471,12 +471,12 @@ static void vus_del_watch_cb(VuDev *vu_dev, int fd)
>   
>   static void vus_proc_req(VuDev *vu_dev, int idx)
>   {
> -    vhost_scsi_dev_t *vdev_scsi;
> +    VusDev *vdev_scsi;
>       VuVirtq *vq;
>   
>       assert(vu_dev);
>   
> -    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
> +    vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
>       if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
>           PERR("VQ Index out of range: %d", idx);
>           vus_panic_cb(vu_dev, NULL);
> @@ -617,7 +617,7 @@ fail:
>   
>   /** vhost-user-scsi **/
>   
> -static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
> +static void vdev_scsi_free(VusDev *vdev_scsi)
>   {
>       if (vdev_scsi->server_sock >= 0) {
>           close(vdev_scsi->server_sock);
> @@ -627,13 +627,13 @@ static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
>       g_free(vdev_scsi);
>   }
>   
> -static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
> +static VusDev *vdev_scsi_new(int server_sock)
>   {
> -    vhost_scsi_dev_t *vdev_scsi;
> +    VusDev *vdev_scsi;
>   
>       assert(server_sock >= 0);
>   
> -    vdev_scsi = g_new0(vhost_scsi_dev_t, 1);
> +    vdev_scsi = g_new0(VusDev, 1);
>       vdev_scsi->server_sock = server_sock;
>       vdev_scsi->loop = g_main_loop_new(NULL, FALSE);
>       vdev_scsi->fdmap = g_tree_new(vus_fdmap_compare);
> @@ -641,7 +641,7 @@ static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
>       return vdev_scsi;
>   }
>   
> -static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
> +static int vdev_scsi_run(VusDev *vdev_scsi)
>   {
>       GIOChannel *chan;
>       int cli_sock;
> @@ -676,7 +676,7 @@ static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
>   
>   int main(int argc, char **argv)
>   {
> -    vhost_scsi_dev_t *vdev_scsi = NULL;
> +    VusDev *vdev_scsi = NULL;
>       char *unix_fn = NULL;
>       char *iscsi_uri = NULL;
>       int sock, opt, err = EXIT_SUCCESS;
> 

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

* Re: [Qemu-devel] [PATCH 21/27] vhost-user-scsi: drop extra callback pointer
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 21/27] vhost-user-scsi: drop extra callback pointer Marc-André Lureau
@ 2017-08-23 23:59   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-23 23:59 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> Use the one from the source with casting, like any other glib source.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 12 +++---------
>   1 file changed, 3 insertions(+), 9 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 795799ec14..102d910e8f 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -81,7 +81,6 @@ typedef struct vus_gsrc {
>       GSource parent;
>       VusDev *vdev_scsi;
>       GPollFD gfd;
> -    vu_watch_cb vu_cb;
>   } vus_gsrc_t;
>   
>   static gint vus_fdmap_compare(gconstpointer a, gconstpointer b)
> @@ -112,18 +111,13 @@ static gboolean vus_gsrc_dispatch(GSource *src, GSourceFunc cb, gpointer data)
>       vus_gsrc_t *vus_src = (vus_gsrc_t *)src;
>   
>       assert(vus_src);
> -    assert(!(vus_src->vu_cb && cb));
>   
>       vdev_scsi = vus_src->vdev_scsi;
>   
>       assert(vdev_scsi);
>   
> -    if (cb) {
> -        return cb(data);
> -    }
> -    if (vus_src->vu_cb) {
> -        vus_src->vu_cb(&vdev_scsi->vu_dev, vus_src->gfd.revents, data);
> -    }
> +    ((vu_watch_cb)cb) (&vdev_scsi->vu_dev, vus_src->gfd.revents, data);

dropping the space between func/args:
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> +
>       return G_SOURCE_CONTINUE;
>   }
>   
> @@ -146,12 +140,12 @@ static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
>       assert(vu_cb);
>   
>       vus_gsrc = g_source_new(&vus_gsrc_funcs, sizeof(vus_gsrc_t));
> +    g_source_set_callback(vus_gsrc, (GSourceFunc) vu_cb, data, NULL);
>       vus_src = (vus_gsrc_t *)vus_gsrc;
>   
>       vus_src->vdev_scsi = vdev_scsi;
>       vus_src->gfd.fd = fd;
>       vus_src->gfd.events = cond;
> -    vus_src->vu_cb = vu_cb;
>   
>       g_source_add_poll(vus_gsrc, &vus_src->gfd);
>       id = g_source_attach(vus_gsrc, NULL);
> 

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

* Re: [Qemu-devel] [PATCH 23/27] vhost-user-scsi: use glib logging
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 23/27] vhost-user-scsi: use glib logging Marc-André Lureau
@ 2017-08-24  0:00   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-24  0:00 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:20 PM, Marc-André Lureau wrote:
> - PLOG is unused
> - code is compiled out unless debug is enabled
> - logging is too verbose
> - you can pipe to ts to have timestamp if needed, or use structured
>    logging with more recent glib
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

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

> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 77 +++++++++----------------------
>   1 file changed, 21 insertions(+), 56 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 516a9d3966..e3ec8b9b2c 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -18,42 +18,6 @@
>   
>   #include <glib.h>
>   
> -/* #define VUS_DEBUG 1 */
> -
> -/** Log helpers **/
> -
> -#define PPRE                                                          \
> -    struct timespec ts;                                               \
> -    char   timebuf[64];                                               \
> -    struct tm tm;                                                     \
> -    (void)clock_gettime(CLOCK_REALTIME, &ts);                         \
> -    (void)strftime(timebuf, 64, "%Y%m%d %T", gmtime_r(&ts.tv_sec, &tm))
> -
> -#define PEXT(lvl, msg, ...) do {                                      \
> -    PPRE;                                                             \
> -    fprintf(stderr, "%s.%06ld " lvl ": %s:%s():%d: " msg "\n",        \
> -            timebuf, ts.tv_nsec / 1000,                               \
> -            __FILE__, __func__, __LINE__, ## __VA_ARGS__);            \
> -} while (0)
> -
> -#define PNOR(lvl, msg, ...) do {                                      \
> -    PPRE;                                                             \
> -    fprintf(stderr, "%s.%06ld " lvl ": " msg "\n",                    \
> -            timebuf, ts.tv_nsec / 1000, ## __VA_ARGS__);              \
> -} while (0)
> -
> -#ifdef VUS_DEBUG
> -#define PDBG(msg, ...) PEXT("DBG", msg, ## __VA_ARGS__)
> -#define PERR(msg, ...) PEXT("ERR", msg, ## __VA_ARGS__)
> -#define PLOG(msg, ...) PEXT("LOG", msg, ## __VA_ARGS__)
> -#else
> -#define PDBG(msg, ...) { }
> -#define PERR(msg, ...) PNOR("ERR", msg, ## __VA_ARGS__)
> -#define PLOG(msg, ...) PNOR("LOG", msg, ## __VA_ARGS__)
> -#endif
> -
> -/** vhost-user-scsi specific definitions **/
> -
>   #define VUS_ISCSI_INITIATOR "iqn.2016-11.com.nutanix:vhost-user-scsi"
>   
>   typedef struct VusIscsiLun {
> @@ -166,27 +130,28 @@ static int vus_iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri)
>   
>       iscsi_ctx = iscsi_create_context(VUS_ISCSI_INITIATOR);
>       if (!iscsi_ctx) {
> -        PERR("Unable to create iSCSI context");
> +        g_warning("Unable to create iSCSI context");
>           return -1;
>       }
>   
>       iscsi_url = iscsi_parse_full_url(iscsi_ctx, iscsi_uri);
>       if (!iscsi_url) {
> -        PERR("Unable to parse iSCSI URL: %s", iscsi_get_error(iscsi_ctx));
> +        g_warning("Unable to parse iSCSI URL: %s", iscsi_get_error(iscsi_ctx));
>           goto fail;
>       }
>   
>       iscsi_set_session_type(iscsi_ctx, ISCSI_SESSION_NORMAL);
>       iscsi_set_header_digest(iscsi_ctx, ISCSI_HEADER_DIGEST_NONE_CRC32C);
>       if (iscsi_full_connect_sync(iscsi_ctx, iscsi_url->portal, iscsi_url->lun)) {
> -        PERR("Unable to login to iSCSI portal: %s", iscsi_get_error(iscsi_ctx));
> +        g_warning("Unable to login to iSCSI portal: %s",
> +                  iscsi_get_error(iscsi_ctx));
>           goto fail;
>       }
>   
>       lun->iscsi_ctx = iscsi_ctx;
>       lun->iscsi_lun = iscsi_url->lun;
>   
> -    PDBG("Context %p created for lun 0: %s", iscsi_ctx, iscsi_uri);
> +    g_debug("Context %p created for lun 0: %s", iscsi_ctx, iscsi_uri);
>   
>   out:
>       if (iscsi_url) {
> @@ -228,7 +193,7 @@ static int get_cdb_len(uint8_t *cdb)
>       case 4: return 16;
>       case 5: return 12;
>       }
> -    PERR("Unable to determine cdb len (0x%02hhX)", cdb[0] >> 5);
> +    g_warning("Unable to determine cdb len (0x%02hhX)", cdb[0] >> 5);
>       return -1;
>   }
>   
> @@ -250,7 +215,7 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
>   
>       if (!(!req->lun[1] && req->lun[2] == 0x40 && !req->lun[3])) {
>           /* Ignore anything different than target=0, lun=0 */
> -        PDBG("Ignoring unconnected lun (0x%hhX, 0x%hhX)",
> +        g_debug("Ignoring unconnected lun (0x%hhX, 0x%hhX)",
>                req->lun[1], req->lun[3]);
>           rsp->status = SCSI_STATUS_CHECK_CONDITION;
>           memset(rsp->sense, 0, sizeof(rsp->sense));
> @@ -293,10 +258,10 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
>           task->iovector_in.niov = in_len;
>       }
>   
> -    PDBG("Sending iscsi cmd (cdb_len=%d, dir=%d, task=%p)",
> +    g_debug("Sending iscsi cmd (cdb_len=%d, dir=%d, task=%p)",
>            cdb_len, dir, task);
>       if (!iscsi_scsi_command_sync(ctx, 0, task, NULL)) {
> -        PERR("Error serving SCSI command");
> +        g_warning("Error serving SCSI command");
>           g_free(task);
>           return -1;
>       }
> @@ -314,7 +279,7 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
>   
>       g_free(task);
>   
> -    PDBG("Filled in rsp: status=%hhX, resid=%u, response=%hhX, sense_len=%u",
> +    g_debug("Filled in rsp: status=%hhX, resid=%u, response=%hhX, sense_len=%u",
>            rsp->status, rsp->resid, rsp->response, rsp->sense_len);
>   
>       return 0;
> @@ -330,7 +295,7 @@ static void vus_panic_cb(VuDev *vu_dev, const char *buf)
>   
>       vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
>       if (buf) {
> -        PERR("vu_panic: %s", buf);
> +        g_warning("vu_panic: %s", buf);
>       }
>   
>       g_main_loop_quit(vdev_scsi->loop);
> @@ -371,19 +336,19 @@ static void vus_proc_req(VuDev *vu_dev, int idx)
>   
>       vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
>       if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
> -        PERR("VQ Index out of range: %d", idx);
> +        g_warning("VQ Index out of range: %d", idx);
>           vus_panic_cb(vu_dev, NULL);
>           return;
>       }
>   
>       vq = vu_get_queue(vu_dev, idx);
>       if (!vq) {
> -        PERR("Error fetching VQ (dev=%p, idx=%d)", vu_dev, idx);
> +        g_warning("Error fetching VQ (dev=%p, idx=%d)", vu_dev, idx);
>           vus_panic_cb(vu_dev, NULL);
>           return;
>       }
>   
> -    PDBG("Got kicked on vq[%d]@%p", idx, vq);
> +    g_debug("Got kicked on vq[%d]@%p", idx, vq);
>   
>       while (1) {
>           VuVirtqElement *elem;
> @@ -392,23 +357,23 @@ static void vus_proc_req(VuDev *vu_dev, int idx)
>   
>           elem = vu_queue_pop(vu_dev, vq, sizeof(VuVirtqElement));
>           if (!elem) {
> -            PDBG("No more elements pending on vq[%d]@%p", idx, vq);
> +            g_debug("No more elements pending on vq[%d]@%p", idx, vq);
>               break;
>           }
> -        PDBG("Popped elem@%p", elem);
> +        g_debug("Popped elem@%p", elem);
>   
>           assert(!(elem->out_num > 1 && elem->in_num > 1));
>           assert(elem->out_num > 0 && elem->in_num > 0);
>   
>           if (elem->out_sg[0].iov_len < sizeof(VirtIOSCSICmdReq)) {
> -            PERR("Invalid virtio-scsi req header");
> +            g_warning("Invalid virtio-scsi req header");
>               vus_panic_cb(vu_dev, NULL);
>               break;
>           }
>           req = (VirtIOSCSICmdReq *)elem->out_sg[0].iov_base;
>   
>           if (elem->in_sg[0].iov_len < sizeof(VirtIOSCSICmdResp)) {
> -            PERR("Invalid virtio-scsi rsp header");
> +            g_warning("Invalid virtio-scsi rsp header");
>               vus_panic_cb(vu_dev, NULL);
>               break;
>           }
> @@ -435,7 +400,7 @@ static void vus_queue_set_started(VuDev *vu_dev, int idx, bool started)
>       assert(vu_dev);
>   
>       if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
> -        PERR("VQ Index out of range: %d", idx);
> +        g_warning("VQ Index out of range: %d", idx);
>           vus_panic_cb(vu_dev, NULL);
>           return;
>       }
> @@ -443,7 +408,7 @@ static void vus_queue_set_started(VuDev *vu_dev, int idx, bool started)
>       vq = vu_get_queue(vu_dev, idx);
>   
>       if (idx == 0 || idx == 1) {
> -        PDBG("queue %d unimplemented", idx);
> +        g_debug("queue %d unimplemented", idx);
>       } else {
>           vu_set_queue_handler(vu_dev, vq, started ? vus_proc_req : NULL);
>       }
> @@ -461,7 +426,7 @@ static gboolean vus_vhost_cb(GIOChannel *source, GIOCondition condition,
>       assert(vu_dev);
>   
>       if (!vu_dispatch(vu_dev) != 0) {
> -        PERR("Error processing vhost message");
> +        g_warning("Error processing vhost message");
>           vus_panic_cb(vu_dev, NULL);
>           return G_SOURCE_REMOVE;
>       }
> 

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

* Re: [Qemu-devel] [PATCH 27/27] vhost-user-scsi: remove server_sock from VusDev
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 27/27] vhost-user-scsi: remove server_sock from VusDev Marc-André Lureau
@ 2017-08-24  0:06   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-24  0:06 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

Hi Marc-André,

On 08/23/2017 01:20 PM, Marc-André Lureau wrote:
> It is unneeded in the VusDev device structure, and also simplify a bit
> the code.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 52 ++++++++++++++-----------------
>   1 file changed, 23 insertions(+), 29 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index cfd62b46ce..3166331856 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -28,7 +28,6 @@ typedef struct VusIscsiLun {
>   typedef struct VusDev {
>       VugDev parent;
>   
> -    int server_sock;
>       VusIscsiLun lun;
>   } VusDev;
>   
> @@ -371,48 +370,30 @@ fail:
>   
>   static void vdev_scsi_free(VusDev *vdev_scsi)

let's kill vdev_scsi_free(),

>   {
> -    if (vdev_scsi->server_sock >= 0) {
> -        close(vdev_scsi->server_sock);
> -    }
>       g_free(vdev_scsi);
>   }
>   
> -static VusDev *vdev_scsi_new(int server_sock)
> +static VusDev *vdev_scsi_new(void)
>   {
> -    VusDev *vdev_scsi;
> -
> -    assert(server_sock >= 0);
> -
> -    vdev_scsi = g_new0(VusDev, 1);
> -    vdev_scsi->server_sock = server_sock;
> -
> -    return vdev_scsi;
> +    return g_new0(VusDev, 1);

also kill vdev_scsi_new() ...

>   }
>   
> -static int vdev_scsi_run(VusDev *vdev_scsi)
> +static int vdev_scsi_run(VusDev *vdev_scsi, int sock)
>   {
>       GMainLoop *loop;
>       GIOChannel *chan;
> -    int cli_sock;
>       int ret = 0;
>   
>       assert(vdev_scsi);
> -    assert(vdev_scsi->server_sock >= 0);
> -
> -    cli_sock = accept(vdev_scsi->server_sock, NULL, NULL);
> -    if (cli_sock < 0) {
> -        perror("accept");
> -        return -1;
> -    }
>   
>       loop = g_main_loop_new(NULL, FALSE);
>       vug_init(&vdev_scsi->parent,
> -             cli_sock,
> +             sock,
>                loop,
>                vus_panic_cb,
>                &vus_iface);
>   
> -    chan = g_io_channel_unix_new(cli_sock);
> +    chan = g_io_channel_unix_new(sock);
>       g_io_add_watch(chan, G_IO_IN, vus_vhost_cb, vdev_scsi);
>       g_main_loop_run(loop);
>       g_io_channel_unref(chan);
> @@ -428,7 +409,7 @@ int main(int argc, char **argv)
>       VusDev *vdev_scsi = NULL;
>       char *unix_fn = NULL;
>       char *iscsi_uri = NULL;
> -    int sock, opt, err = EXIT_SUCCESS;
> +    int lsock = -1, csock = -1, opt, err = EXIT_SUCCESS;
>   
>       while ((opt = getopt(argc, argv, "u:i:")) != -1) {
>           switch (opt) {
> @@ -448,17 +429,24 @@ int main(int argc, char **argv)
>           goto help;
>       }
>   
> -    sock = unix_sock_new(unix_fn);
> -    if (sock < 0) {
> +    lsock = unix_sock_new(unix_fn);
> +    if (lsock < 0) {
> +        goto err;
> +    }
> +
> +    csock = accept(lsock, NULL, NULL);
> +    if (csock < 0) {
> +        perror("accept");
>           goto err;
>       }
> -    vdev_scsi = vdev_scsi_new(sock);
> +
> +    vdev_scsi = vdev_scsi_new();

... and use g_new0() directly:

        vdev_scsi = g_new0(VusDev, 1);

>   
>       if (vus_iscsi_add_lun(&vdev_scsi->lun, iscsi_uri) != 0) {
>           goto err;
>       }
>   
> -    if (vdev_scsi_run(vdev_scsi) != 0) {
> +    if (vdev_scsi_run(vdev_scsi, csock) != 0) {
>           goto err;
>       }
>   
> @@ -467,6 +455,12 @@ out:
>           vdev_scsi_free(vdev_scsi);

and g_free() here:

             g_free(vdev_scsi);

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

>           unlink(unix_fn);
>       }
> +    if (csock >= 0) {
> +        close(csock);
> +    }
> +    if (lsock >= 0) {
> +        close(lsock);
> +    }
>       g_free(unix_fn);
>       g_free(iscsi_uri);
>   
> 

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

* Re: [Qemu-devel] [PATCH 19/27] vhost-user-scsi: avoid use of iscsi_ namespace
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 19/27] vhost-user-scsi: avoid use of iscsi_ namespace Marc-André Lureau
@ 2017-08-24  0:07   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-24  0:07 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> It is confusing and could easily conflict with future versions.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

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

> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 2ceca964f4..2ab14f1a83 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -245,7 +245,7 @@ struct scsi_task {
>   
>   /** libiscsi integration **/
>   
> -static int iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri)
> +static int vus_iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri)
>   {
>       struct iscsi_url *iscsi_url;
>       struct iscsi_context *iscsi_ctx;
> @@ -705,7 +705,7 @@ int main(int argc, char **argv)
>       }
>       vdev_scsi = vdev_scsi_new(sock);
>   
> -    if (iscsi_add_lun(&vdev_scsi->lun, iscsi_uri) != 0) {
> +    if (vus_iscsi_add_lun(&vdev_scsi->lun, iscsi_uri) != 0) {
>           goto err;
>       }
>   
> 

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

* Re: [Qemu-devel] [PATCH 16/27] vhost-user-scsi: remove VUS_MAX_LUNS
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 16/27] vhost-user-scsi: remove VUS_MAX_LUNS Marc-André Lureau
@ 2017-08-24  0:08   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-24  0:08 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> There is no code to support more than 1 yet, no need for that today.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

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

> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 8 +++-----
>   1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index f6f9e7b192..429e3065ea 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -53,8 +53,6 @@
>   
>   /** vhost-user-scsi specific definitions **/
>   
> - /* Only 1 LUN and device supported today */
> -#define VUS_MAX_LUNS 1
>   #define VUS_ISCSI_INITIATOR "iqn.2016-11.com.nutanix:vhost-user-scsi"
>   
>   typedef struct iscsi_lun {
> @@ -67,7 +65,7 @@ typedef struct vhost_scsi_dev {
>       int server_sock;
>       GMainLoop *loop;
>       GTree *fdmap;   /* fd -> gsource context id */
> -    iscsi_lun_t luns[VUS_MAX_LUNS];
> +    iscsi_lun_t lun;
>   } vhost_scsi_dev_t;
>   
>   /** glib event loop integration for libvhost-user and misc callbacks **/
> @@ -533,7 +531,7 @@ static void vus_proc_req(VuDev *vu_dev, int idx)
>           }
>           rsp = (VirtIOSCSICmdResp *)elem->in_sg[0].iov_base;
>   
> -        if (handle_cmd_sync(vdev_scsi->luns[0].iscsi_ctx,
> +        if (handle_cmd_sync(vdev_scsi->lun.iscsi_ctx,
>                               req, &elem->out_sg[1], elem->out_num - 1,
>                               rsp, &elem->in_sg[1], elem->in_num - 1) != 0) {
>               vus_panic_cb(vu_dev, NULL);
> @@ -722,7 +720,7 @@ int main(int argc, char **argv)
>       }
>       vdev_scsi = vdev_scsi_new(sock);
>   
> -    if (iscsi_add_lun(&vdev_scsi->luns[0], iscsi_uri) != 0) {
> +    if (iscsi_add_lun(&vdev_scsi->lun, iscsi_uri) != 0) {
>           goto err;
>       }
>   
> 

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

* Re: [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up
  2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
                   ` (29 preceding siblings ...)
  2017-08-23 16:59 ` no-reply
@ 2017-08-24  0:40 ` Liu, Changpeng
  2017-09-11 13:18   ` Marc-André Lureau
  30 siblings, 1 reply; 67+ messages in thread
From: Liu, Changpeng @ 2017-08-24  0:40 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: felipe

Thanks for helping the example code clean-up. I can rebase the vhost-user-blk patch
set after your commits. For the issue you mentioned below, I think the vhost-user-scsi example
can only support 1 LUN, so LUN0 is exist, LUN1 reported error should be okay.

> -----Original Message-----
> From: Marc-André Lureau [mailto:marcandre.lureau@redhat.com]
> Sent: Thursday, August 24, 2017 12:20 AM
> To: qemu-devel@nongnu.org
> Cc: Liu, Changpeng <changpeng.liu@intel.com>; felipe@nutanix.com; Marc-André
> Lureau <marcandre.lureau@redhat.com>
> Subject: [PATCH 00/27] vhost-user-scsi: code clean-up
> 
> Hi,
> 
> While reviewing vhost-user-blk, I realized a lot of code was based on
> vhost-user-scsi, and I found a number of improvements could be
> made. As a result in this series, I tried to move common glib code in
> libvhost-user-glib. (I originally made libvhost-user glib-free, so if
> external projects want to play with it, they don't have to depend on
> glib, for ex vhost-user-bridge doesn't use glib).
> 
> I haven't done extensive testing, I tried to setup a LUN with help
> from https://fedoraproject.org/wiki/Scsi-target-utils_Quickstart_Guide, but
> the guest says "Unexpected response from lun 1 while scanning, scan
> aborted" (before or after the series). Help welcome!
> 
> Thanks
> 
> Marc-André Lureau (27):
>   glib-compat: move G_SOURCE_CONTINUE/REMOVE there
>   libvhost-user: drop dependency on glib
>   libvhost-user: improve vu_queue_pop() doc
>   vhost-user-scsi: use g_strdup()
>   vhost-user-scsi: connect unix socket before allocating
>   vhost-user-scsi: code style fixes
>   vhost-user-scsi: use glib allocation
>   vhost-user-scsi: glib calls that allocate don't return NULL
>   vhost-user-scsi: also free the gtree
>   vhost-user-scsi: remove vdev_scsi_find_by_vu()
>   vhost-user-scsi: simplify unix path cleanup
>   vhost-user-scsi: use NULL pointer
>   vhost-user-scsi: use glib watch directly
>   vhost-user-scsi: assert() in iscsi_add_lun()
>   vhost-user-scsi: remove vdev_scsi_add_iscsi_lun()
>   vhost-user-scsi: remove VUS_MAX_LUNS
>   vhost-user-scsi: remove unimplemented functions
>   vhost-user-scsi: rename VUS types
>   vhost-user-scsi: avoid use of iscsi_ namespace
>   vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h
>   vhost-user-scsi: drop extra callback pointer
>   vhost-user-scsi: simplify source handling
>   vhost-user-scsi: use glib logging
>   libvhost-user: add glib source helper
>   build-sys: fix libvhost-user.a build
>   vhost-user-scsi: use libvhost-user glib helper
>   vhost-user-scsi: remove server_sock from VusDev
> 
>  contrib/libvhost-user/libvhost-user-glib.h |  32 ++
>  contrib/libvhost-user/libvhost-user.h      |   3 +-
>  include/glib-compat.h                      |   7 +
>  contrib/libvhost-user/libvhost-user-glib.c | 145 +++++++
>  contrib/libvhost-user/libvhost-user.c      |  25 +-
>  contrib/vhost-user-scsi/vhost-user-scsi.c  | 619 +++++------------------------
>  Makefile                                   |   3 +-
>  Makefile.objs                              |   3 +-
>  contrib/libvhost-user/Makefile.objs        |   2 +-
>  tests/Makefile.include                     |   2 +-
>  10 files changed, 320 insertions(+), 521 deletions(-)
>  create mode 100644 contrib/libvhost-user/libvhost-user-glib.h
>  create mode 100644 contrib/libvhost-user/libvhost-user-glib.c
> 
> --
> 2.14.1.146.gd35faa819


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

* Re: [Qemu-devel] [PATCH 06/27] vhost-user-scsi: code style fixes
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 06/27] vhost-user-scsi: code style fixes Marc-André Lureau
@ 2017-08-24  2:54   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-24  2:54 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

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

> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 20 ++++++++++++--------
>   1 file changed, 12 insertions(+), 8 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index cddaaf8995..8d6ff18cc4 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -305,7 +305,8 @@ fail:
>   }
>   
>   static struct scsi_task *scsi_task_new(int cdb_len, uint8_t *cdb, int dir,
> -                                       int xfer_len) {
> +                                       int xfer_len)
> +{
>       struct scsi_task *task;
>   
>       assert(cdb_len > 0);
> @@ -344,7 +345,8 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
>                              VirtIOSCSICmdReq *req,
>                              struct iovec *out, unsigned int out_len,
>                              VirtIOSCSICmdResp *rsp,
> -                           struct iovec *in, unsigned int in_len) {
> +                           struct iovec *in, unsigned int in_len)
> +{
>       struct scsi_task *task;
>       uint32_t dir;
>       uint32_t len;
> @@ -454,7 +456,8 @@ static void vus_panic_cb(VuDev *vu_dev, const char *buf)
>   }
>   
>   static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
> -                             void *pvt) {
> +                             void *pvt)
> +{
>       vhost_scsi_dev_t *vdev_scsi;
>       guint id;
>   
> @@ -529,7 +532,7 @@ static void vus_proc_req(VuDev *vu_dev, int idx)
>           return;
>       }
>   
> -    if ((idx < 0) || (idx >= VHOST_MAX_NR_VIRTQUEUE)) {
> +    if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
>           PERR("VQ Index out of range: %d", idx);
>           vus_panic_cb(vu_dev, NULL);
>           return;
> @@ -556,8 +559,8 @@ static void vus_proc_req(VuDev *vu_dev, int idx)
>           }
>           PDBG("Popped elem@%p", elem);
>   
> -        assert(!((elem->out_num > 1) && (elem->in_num > 1)));
> -        assert((elem->out_num > 0) && (elem->in_num > 0));
> +        assert(!(elem->out_num > 1 && elem->in_num > 1));
> +        assert(elem->out_num > 0 && elem->in_num > 0);
>   
>           if (elem->out_sg[0].iov_len < sizeof(VirtIOSCSICmdReq)) {
>               PERR("Invalid virtio-scsi req header");
> @@ -593,7 +596,7 @@ static void vus_queue_set_started(VuDev *vu_dev, int idx, bool started)
>   
>       assert(vu_dev);
>   
> -    if ((idx < 0) || (idx >= VHOST_MAX_NR_VIRTQUEUE)) {
> +    if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
>           PERR("VQ Index out of range: %d", idx);
>           vus_panic_cb(vu_dev, NULL);
>           return;
> @@ -750,7 +753,8 @@ err:
>   }
>   
>   static int vdev_scsi_add_iscsi_lun(vhost_scsi_dev_t *vdev_scsi,
> -                                   char *iscsi_uri, uint32_t lun) {
> +                                   char *iscsi_uri, uint32_t lun)
> +{
>       assert(vdev_scsi);
>       assert(iscsi_uri);
>       assert(lun < VUS_MAX_LUNS);
> 

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

* Re: [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up
  2017-08-24  0:40 ` Liu, Changpeng
@ 2017-09-11 13:18   ` Marc-André Lureau
  2017-09-12  1:39     ` Liu, Changpeng
  2017-09-19 12:45     ` Marc-André Lureau
  0 siblings, 2 replies; 67+ messages in thread
From: Marc-André Lureau @ 2017-09-11 13:18 UTC (permalink / raw)
  To: Liu, Changpeng, qemu-devel; +Cc: felipe, Philippe Mathieu-Daudé

Hi

On Thu, Aug 24, 2017 at 2:41 AM Liu, Changpeng <changpeng.liu@intel.com>
wrote:

> Thanks for helping the example code clean-up. I can rebase the
> vhost-user-blk patch
> set after your commits. For the issue you mentioned below, I think the
> vhost-user-scsi example
> can only support 1 LUN, so LUN0 is exist, LUN1 reported error should be
> okay.
>

I think this series should go first before your vhost-user-blk, to avoid
code churn. Please help review.

Patches missing review: 1, 2, 3, 5, 8, 9, 10, 11, 13, 17, 20, 22, 24, 25, 26

Thanks


> > -----Original Message-----
> > From: Marc-André Lureau [mailto:marcandre.lureau@redhat.com]
> > Sent: Thursday, August 24, 2017 12:20 AM
> > To: qemu-devel@nongnu.org
> > Cc: Liu, Changpeng <changpeng.liu@intel.com>; felipe@nutanix.com;
> Marc-André
> > Lureau <marcandre.lureau@redhat.com>
> > Subject: [PATCH 00/27] vhost-user-scsi: code clean-up
> >
> > Hi,
> >
> > While reviewing vhost-user-blk, I realized a lot of code was based on
> > vhost-user-scsi, and I found a number of improvements could be
> > made. As a result in this series, I tried to move common glib code in
> > libvhost-user-glib. (I originally made libvhost-user glib-free, so if
> > external projects want to play with it, they don't have to depend on
> > glib, for ex vhost-user-bridge doesn't use glib).
> >
> > I haven't done extensive testing, I tried to setup a LUN with help
> > from https://fedoraproject.org/wiki/Scsi-target-utils_Quickstart_Guide,
> but
> > the guest says "Unexpected response from lun 1 while scanning, scan
> > aborted" (before or after the series). Help welcome!
> >
> > Thanks
> >
> > Marc-André Lureau (27):
> >   glib-compat: move G_SOURCE_CONTINUE/REMOVE there
> >   libvhost-user: drop dependency on glib
> >   libvhost-user: improve vu_queue_pop() doc
> >   vhost-user-scsi: use g_strdup()
> >   vhost-user-scsi: connect unix socket before allocating
> >   vhost-user-scsi: code style fixes
> >   vhost-user-scsi: use glib allocation
> >   vhost-user-scsi: glib calls that allocate don't return NULL
> >   vhost-user-scsi: also free the gtree
> >   vhost-user-scsi: remove vdev_scsi_find_by_vu()
> >   vhost-user-scsi: simplify unix path cleanup
> >   vhost-user-scsi: use NULL pointer
> >   vhost-user-scsi: use glib watch directly
> >   vhost-user-scsi: assert() in iscsi_add_lun()
> >   vhost-user-scsi: remove vdev_scsi_add_iscsi_lun()
> >   vhost-user-scsi: remove VUS_MAX_LUNS
> >   vhost-user-scsi: remove unimplemented functions
> >   vhost-user-scsi: rename VUS types
> >   vhost-user-scsi: avoid use of iscsi_ namespace
> >   vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h
> >   vhost-user-scsi: drop extra callback pointer
> >   vhost-user-scsi: simplify source handling
> >   vhost-user-scsi: use glib logging
> >   libvhost-user: add glib source helper
> >   build-sys: fix libvhost-user.a build
> >   vhost-user-scsi: use libvhost-user glib helper
> >   vhost-user-scsi: remove server_sock from VusDev
> >
> >  contrib/libvhost-user/libvhost-user-glib.h |  32 ++
> >  contrib/libvhost-user/libvhost-user.h      |   3 +-
> >  include/glib-compat.h                      |   7 +
> >  contrib/libvhost-user/libvhost-user-glib.c | 145 +++++++
> >  contrib/libvhost-user/libvhost-user.c      |  25 +-
> >  contrib/vhost-user-scsi/vhost-user-scsi.c  | 619
> +++++------------------------
> >  Makefile                                   |   3 +-
> >  Makefile.objs                              |   3 +-
> >  contrib/libvhost-user/Makefile.objs        |   2 +-
> >  tests/Makefile.include                     |   2 +-
> >  10 files changed, 320 insertions(+), 521 deletions(-)
> >  create mode 100644 contrib/libvhost-user/libvhost-user-glib.h
> >  create mode 100644 contrib/libvhost-user/libvhost-user-glib.c
> >
> > --
> > 2.14.1.146.gd35faa819
>
> --
Marc-André Lureau

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

* Re: [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up
  2017-09-11 13:18   ` Marc-André Lureau
@ 2017-09-12  1:39     ` Liu, Changpeng
  2017-09-19 12:45     ` Marc-André Lureau
  1 sibling, 0 replies; 67+ messages in thread
From: Liu, Changpeng @ 2017-09-12  1:39 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: felipe, Philippe Mathieu-Daudé

Hi Marcandre,

Of course, I agree your cleanup patch set should go first, just re-post the patch set
after the new Qemu release, I think the first 3 patches don't have dependency on
your  patch set.

From: Marc-André Lureau [mailto:marcandre.lureau@gmail.com] 
Sent: Monday, September 11, 2017 9:18 PM
To: Liu, Changpeng <changpeng.liu@intel.com>; qemu-devel@nongnu.org
Cc: felipe@nutanix.com; Philippe Mathieu-Daudé <f4bug@amsat.org>
Subject: Re: [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up

Hi

On Thu, Aug 24, 2017 at 2:41 AM Liu, Changpeng <changpeng.liu@intel.com> wrote:
Thanks for helping the example code clean-up. I can rebase the vhost-user-blk patch
set after your commits. For the issue you mentioned below, I think the vhost-user-scsi example
can only support 1 LUN, so LUN0 is exist, LUN1 reported error should be okay.

I think this series should go first before your vhost-user-blk, to avoid code churn. Please help review. 

Patches missing review: 1, 2, 3, 5, 8, 9, 10, 11, 13, 17, 20, 22, 24, 25, 26

Thanks


> -----Original Message-----
> From: Marc-André Lureau [mailto:marcandre.lureau@redhat.com]
> Sent: Thursday, August 24, 2017 12:20 AM
> To: qemu-devel@nongnu.org
> Cc: Liu, Changpeng <changpeng.liu@intel.com>; felipe@nutanix.com; Marc-André
> Lureau <marcandre.lureau@redhat.com>
> Subject: [PATCH 00/27] vhost-user-scsi: code clean-up
>
> Hi,
>
> While reviewing vhost-user-blk, I realized a lot of code was based on
> vhost-user-scsi, and I found a number of improvements could be
> made. As a result in this series, I tried to move common glib code in
> libvhost-user-glib. (I originally made libvhost-user glib-free, so if
> external projects want to play with it, they don't have to depend on
> glib, for ex vhost-user-bridge doesn't use glib).
>
> I haven't done extensive testing, I tried to setup a LUN with help
> from https://fedoraproject.org/wiki/Scsi-target-utils_Quickstart_Guide, but
> the guest says "Unexpected response from lun 1 while scanning, scan
> aborted" (before or after the series). Help welcome!
>
> Thanks
>
> Marc-André Lureau (27):
>   glib-compat: move G_SOURCE_CONTINUE/REMOVE there
>   libvhost-user: drop dependency on glib
>   libvhost-user: improve vu_queue_pop() doc
>   vhost-user-scsi: use g_strdup()
>   vhost-user-scsi: connect unix socket before allocating
>   vhost-user-scsi: code style fixes
>   vhost-user-scsi: use glib allocation
>   vhost-user-scsi: glib calls that allocate don't return NULL
>   vhost-user-scsi: also free the gtree
>   vhost-user-scsi: remove vdev_scsi_find_by_vu()
>   vhost-user-scsi: simplify unix path cleanup
>   vhost-user-scsi: use NULL pointer
>   vhost-user-scsi: use glib watch directly
>   vhost-user-scsi: assert() in iscsi_add_lun()
>   vhost-user-scsi: remove vdev_scsi_add_iscsi_lun()
>   vhost-user-scsi: remove VUS_MAX_LUNS
>   vhost-user-scsi: remove unimplemented functions
>   vhost-user-scsi: rename VUS types
>   vhost-user-scsi: avoid use of iscsi_ namespace
>   vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h
>   vhost-user-scsi: drop extra callback pointer
>   vhost-user-scsi: simplify source handling
>   vhost-user-scsi: use glib logging
>   libvhost-user: add glib source helper
>   build-sys: fix libvhost-user.a build
>   vhost-user-scsi: use libvhost-user glib helper
>   vhost-user-scsi: remove server_sock from VusDev
>
>  contrib/libvhost-user/libvhost-user-glib.h |  32 ++
>  contrib/libvhost-user/libvhost-user.h      |   3 +-
>  include/glib-compat.h                      |   7 +
>  contrib/libvhost-user/libvhost-user-glib.c | 145 +++++++
>  contrib/libvhost-user/libvhost-user.c      |  25 +-
>  contrib/vhost-user-scsi/vhost-user-scsi.c  | 619 +++++------------------------
>  Makefile                                   |   3 +-
>  Makefile.objs                              |   3 +-
>  contrib/libvhost-user/Makefile.objs        |   2 +-
>  tests/Makefile.include                     |   2 +-
>  10 files changed, 320 insertions(+), 521 deletions(-)
>  create mode 100644 contrib/libvhost-user/libvhost-user-glib.h
>  create mode 100644 contrib/libvhost-user/libvhost-user-glib.c
>
> --
> 2.14.1.146.gd35faa819
-- 
Marc-André Lureau

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

* Re: [Qemu-devel] [PATCH 01/27] glib-compat: move G_SOURCE_CONTINUE/REMOVE there
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 01/27] glib-compat: move G_SOURCE_CONTINUE/REMOVE there Marc-André Lureau
@ 2017-09-12 12:22   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-09-12 12:22 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

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

> ---
>   include/glib-compat.h                     | 7 +++++++
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 8 --------
>   2 files changed, 7 insertions(+), 8 deletions(-)
> 
> diff --git a/include/glib-compat.h b/include/glib-compat.h
> index fcffcd3f07..d35d641b7f 100644
> --- a/include/glib-compat.h
> +++ b/include/glib-compat.h
> @@ -354,5 +354,12 @@ g_test_add_data_func_full(const char *path,
>   }
>   #endif
>   
> +/* Small compat shim from glib 2.32 */
> +#ifndef G_SOURCE_CONTINUE
> +#define G_SOURCE_CONTINUE TRUE
> +#endif
> +#ifndef G_SOURCE_REMOVE
> +#define G_SOURCE_REMOVE FALSE
> +#endif
>   
>   #endif
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index b5ae02c96f..78bcc65f5a 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -17,14 +17,6 @@
>   
>   #include <glib.h>
>   
> -/* Small compat shim from glib 2.32 */
> -#ifndef G_SOURCE_CONTINUE
> -#define G_SOURCE_CONTINUE TRUE
> -#endif
> -#ifndef G_SOURCE_REMOVE
> -#define G_SOURCE_REMOVE FALSE
> -#endif
> -
>   /* #define VUS_DEBUG 1 */
>   
>   /** Log helpers **/
> 

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

* Re: [Qemu-devel] [PATCH 02/27] libvhost-user: drop dependency on glib
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 02/27] libvhost-user: drop dependency on glib Marc-André Lureau
@ 2017-09-12 12:24   ` Philippe Mathieu-Daudé
  2017-09-12 13:13     ` Marc-André Lureau
  0 siblings, 1 reply; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-09-12 12:24 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

Hi Marc-André,

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> libvhost-user is meant to be free of glib dependency. Make sure it is
> by droping qemu/osdep.h (which included glib.h)
> 
> This fixes a bad malloc()/g_free() pair.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>   contrib/libvhost-user/libvhost-user.c | 25 ++++++++++++++++++++++---
>   1 file changed, 22 insertions(+), 3 deletions(-)
> 
> diff --git a/contrib/libvhost-user/libvhost-user.c b/contrib/libvhost-user/libvhost-user.c
> index 35fa0c5e56..bb294c6ef7 100644
> --- a/contrib/libvhost-user/libvhost-user.c
> +++ b/contrib/libvhost-user/libvhost-user.c
> @@ -13,11 +13,22 @@
>    * later.  See the COPYING file in the top-level directory.
>    */
>   
> -#include <qemu/osdep.h>
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <unistd.h>
> +#include <stdarg.h>
> +#include <errno.h>
> +#include <string.h>
> +#include <assert.h>
> +#include <inttypes.h>
> +#include <sys/types.h>
> +#include <sys/socket.h>
>   #include <sys/eventfd.h>
> +#include <sys/mman.h>
>   #include <linux/vhost.h>
>   
>   #include "qemu/atomic.h"
> +#include "qemu/compiler.h"
>   
>   #include "libvhost-user.h"
>   
> @@ -34,6 +45,14 @@
>           }                                       \
>       } while (0)
>   
> +#ifndef MIN
> +#define MIN(x, y) ({                            \
> +        typeof(x) _min1 = (x);                  \
> +        typeof(y) _min2 = (y);                  \
> +        (void) (&_min1 == &_min2);              \
> +        _min1 < _min2 ? _min1 : _min2; })

why not add this in qemu/compiler.h instead?

> +#endif
> +
>   static const char *
>   vu_request_to_string(int req)
>   {
> @@ -81,7 +100,7 @@ vu_panic(VuDev *dev, const char *msg, ...)
>       va_list ap;
>   
>       va_start(ap, msg);
> -    buf = g_strdup_vprintf(msg, ap);
> +    vasprintf(&buf, msg, ap);
>       va_end(ap);
>   
>       dev->broken = true;
> @@ -840,7 +859,7 @@ vu_dispatch(VuDev *dev)
>       success = true;
>   
>   end:
> -    g_free(vmsg.data);
> +    free(vmsg.data);
>       return success;
>   }
>   
> 

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

* Re: [Qemu-devel] [PATCH 02/27] libvhost-user: drop dependency on glib
  2017-09-12 12:24   ` Philippe Mathieu-Daudé
@ 2017-09-12 13:13     ` Marc-André Lureau
  2017-09-12 13:24       ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-09-12 13:13 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé; +Cc: qemu-devel, changpeng liu, felipe

Hi

----- Original Message -----
> Hi Marc-André,
> 
> On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> > libvhost-user is meant to be free of glib dependency. Make sure it is
> > by droping qemu/osdep.h (which included glib.h)
> > 
> > This fixes a bad malloc()/g_free() pair.
> > 
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> >   contrib/libvhost-user/libvhost-user.c | 25 ++++++++++++++++++++++---
> >   1 file changed, 22 insertions(+), 3 deletions(-)
> > 
> > diff --git a/contrib/libvhost-user/libvhost-user.c
> > b/contrib/libvhost-user/libvhost-user.c
> > index 35fa0c5e56..bb294c6ef7 100644
> > --- a/contrib/libvhost-user/libvhost-user.c
> > +++ b/contrib/libvhost-user/libvhost-user.c
> > @@ -13,11 +13,22 @@
> >    * later.  See the COPYING file in the top-level directory.
> >    */
> >   
> > -#include <qemu/osdep.h>
> > +#include <stdlib.h>
> > +#include <stdio.h>
> > +#include <unistd.h>
> > +#include <stdarg.h>
> > +#include <errno.h>
> > +#include <string.h>
> > +#include <assert.h>
> > +#include <inttypes.h>
> > +#include <sys/types.h>
> > +#include <sys/socket.h>
> >   #include <sys/eventfd.h>
> > +#include <sys/mman.h>
> >   #include <linux/vhost.h>
> >   
> >   #include "qemu/atomic.h"
> > +#include "qemu/compiler.h"
> >   
> >   #include "libvhost-user.h"
> >   
> > @@ -34,6 +45,14 @@
> >           }                                       \
> >       } while (0)
> >   
> > +#ifndef MIN
> > +#define MIN(x, y) ({                            \
> > +        typeof(x) _min1 = (x);                  \
> > +        typeof(y) _min2 = (y);                  \
> > +        (void) (&_min1 == &_min2);              \
> > +        _min1 < _min2 ? _min1 : _min2; })
> 
> why not add this in qemu/compiler.h instead?

It's a special case here, because libvhost-user doesn't depend on glib. The rest of qemu does. Since MIN/MAX is defined by glib, I don't think qemu/compiler.h should define it.

> 
> > +#endif
> > +
> >   static const char *
> >   vu_request_to_string(int req)
> >   {
> > @@ -81,7 +100,7 @@ vu_panic(VuDev *dev, const char *msg, ...)
> >       va_list ap;
> >   
> >       va_start(ap, msg);
> > -    buf = g_strdup_vprintf(msg, ap);
> > +    vasprintf(&buf, msg, ap);
> >       va_end(ap);
> >   
> >       dev->broken = true;
> > @@ -840,7 +859,7 @@ vu_dispatch(VuDev *dev)
> >       success = true;
> >   
> >   end:
> > -    g_free(vmsg.data);
> > +    free(vmsg.data);
> >       return success;
> >   }
> >   
> > 
> 

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

* Re: [Qemu-devel] [PATCH 02/27] libvhost-user: drop dependency on glib
  2017-09-12 13:13     ` Marc-André Lureau
@ 2017-09-12 13:24       ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-09-12 13:24 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, changpeng liu, felipe

On 09/12/2017 10:13 AM, Marc-André Lureau wrote:
> Hi
> 
> ----- Original Message -----
>> Hi Marc-André,
>>
>> On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
>>> libvhost-user is meant to be free of glib dependency. Make sure it is
>>> by droping qemu/osdep.h (which included glib.h)
>>>
>>> This fixes a bad malloc()/g_free() pair.
>>>
>>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>>> ---
>>>    contrib/libvhost-user/libvhost-user.c | 25 ++++++++++++++++++++++---
>>>    1 file changed, 22 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/contrib/libvhost-user/libvhost-user.c
>>> b/contrib/libvhost-user/libvhost-user.c
>>> index 35fa0c5e56..bb294c6ef7 100644
>>> --- a/contrib/libvhost-user/libvhost-user.c
>>> +++ b/contrib/libvhost-user/libvhost-user.c
>>> @@ -13,11 +13,22 @@
>>>     * later.  See the COPYING file in the top-level directory.
>>>     */
>>>    

/* this code avoids GLib dependency */

>>> -#include <qemu/osdep.h>
>>> +#include <stdlib.h>
>>> +#include <stdio.h>
>>> +#include <unistd.h>
>>> +#include <stdarg.h>
>>> +#include <errno.h>
>>> +#include <string.h>
>>> +#include <assert.h>
>>> +#include <inttypes.h>
>>> +#include <sys/types.h>
>>> +#include <sys/socket.h>
>>>    #include <sys/eventfd.h>
>>> +#include <sys/mman.h>
>>>    #include <linux/vhost.h>
>>>    
>>>    #include "qemu/atomic.h"
>>> +#include "qemu/compiler.h"
>>>    
>>>    #include "libvhost-user.h"
>>>    
>>> @@ -34,6 +45,14 @@
>>>            }                                       \
>>>        } while (0)
>>>    
>>> +#ifndef MIN

/* usually provided by GLib */

>>> +#define MIN(x, y) ({                            \
>>> +        typeof(x) _min1 = (x);                  \
>>> +        typeof(y) _min2 = (y);                  \
>>> +        (void) (&_min1 == &_min2);              \
>>> +        _min1 < _min2 ? _min1 : _min2; })
>>
>> why not add this in qemu/compiler.h instead?
> 
> It's a special case here, because libvhost-user doesn't depend on glib. The rest of qemu does. Since MIN/MAX is defined by glib, I don't think qemu/compiler.h should define it.

OK, with some comments about GLib Independence:

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

> 
>>
>>> +#endif
>>> +
>>>    static const char *
>>>    vu_request_to_string(int req)
>>>    {
>>> @@ -81,7 +100,7 @@ vu_panic(VuDev *dev, const char *msg, ...)
>>>        va_list ap;
>>>    
>>>        va_start(ap, msg);
>>> -    buf = g_strdup_vprintf(msg, ap);
>>> +    vasprintf(&buf, msg, ap);
>>>        va_end(ap);
>>>    
>>>        dev->broken = true;
>>> @@ -840,7 +859,7 @@ vu_dispatch(VuDev *dev)
>>>        success = true;
>>>    
>>>    end:
>>> -    g_free(vmsg.data);
>>> +    free(vmsg.data);
>>>        return success;
>>>    }
>>>    
>>>
>>

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

* Re: [Qemu-devel] [PATCH 05/27] vhost-user-scsi: connect unix socket before allocating
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 05/27] vhost-user-scsi: connect unix socket before allocating Marc-André Lureau
@ 2017-09-12 16:37   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-09-12 16:37 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> This simplify a little bit memory management in the following patches.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 18 +++++++++---------
>   1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 1fb57da2da..cddaaf8995 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -715,11 +715,11 @@ static void vdev_scsi_deinit(vhost_scsi_dev_t *vdev_scsi)
>       }
>   }
>   
> -static vhost_scsi_dev_t *vdev_scsi_new(char *unix_fn)
> +static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
>   {
>       vhost_scsi_dev_t *vdev_scsi = NULL;
>   
> -    assert(unix_fn);
> +    assert(server_sock >= 0);

This assert() can't happen anymore.

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

>   
>       vdev_scsi = calloc(1, sizeof(vhost_scsi_dev_t));
>       if (!vdev_scsi) {
> @@ -727,11 +727,7 @@ static vhost_scsi_dev_t *vdev_scsi_new(char *unix_fn)
>           return NULL;
>       }
>   
> -    vdev_scsi->server_sock = unix_sock_new(unix_fn);
> -    if (vdev_scsi->server_sock < 0) {
> -        goto err;
> -    }
> -
> +    vdev_scsi->server_sock = server_sock;
>       vdev_scsi->loop = g_main_loop_new(NULL, FALSE);
>       if (!vdev_scsi->loop) {
>           PERR("Error creating glib event loop");
> @@ -815,7 +811,7 @@ int main(int argc, char **argv)
>       vhost_scsi_dev_t *vdev_scsi = NULL;
>       char *unix_fn = NULL;
>       char *iscsi_uri = NULL;
> -    int opt, err = EXIT_SUCCESS;
> +    int sock, opt, err = EXIT_SUCCESS;
>   
>       while ((opt = getopt(argc, argv, "u:i:")) != -1) {
>           switch (opt) {
> @@ -835,7 +831,11 @@ int main(int argc, char **argv)
>           goto help;
>       }
>   
> -    vdev_scsi = vdev_scsi_new(unix_fn);
> +    sock = unix_sock_new(unix_fn);
> +    if (sock < 0) {
> +        goto err;
> +    }
> +    vdev_scsi = vdev_scsi_new(sock);
>       if (!vdev_scsi) {
>           goto err;
>       }
> 

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

* Re: [Qemu-devel] [PATCH 09/27] vhost-user-scsi: also free the gtree
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 09/27] vhost-user-scsi: also free the gtree Marc-André Lureau
@ 2017-09-12 16:40   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-09-12 16:40 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

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

> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 5f8ff9d9e5..d0456a5e7c 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -693,6 +693,7 @@ static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
>       }
>   
>       g_main_loop_unref(vdev_scsi->loop);
> +    g_tree_destroy(vdev_scsi->fdmap);
>       g_free(vdev_scsi);
>   }
>   
> 

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

* Re: [Qemu-devel] [PATCH 20/27] vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 20/27] vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h Marc-André Lureau
@ 2017-09-12 16:41   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-09-12 16:41 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> There is no need to include hw/virtio/virtio-scsi.h, then the conflict
> with SCSI_XFER enum goes away.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

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

> ---
>   contrib/vhost-user-scsi/vhost-user-scsi.c | 96 +++----------------------------
>   1 file changed, 9 insertions(+), 87 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 2ab14f1a83..795799ec14 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -12,8 +12,9 @@
>   
>   #include "qemu/osdep.h"
>   #include "contrib/libvhost-user/libvhost-user.h"
> -#include "hw/virtio/virtio-scsi.h"
> +#include "standard-headers/linux/virtio_scsi.h"
>   #include "iscsi/iscsi.h"
> +#include "iscsi/scsi-lowlevel.h"
>   
>   #include <glib.h>
>   
> @@ -161,90 +162,11 @@ static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
>                                       (gpointer)(uintptr_t)id);
>   }
>   
> -/* from libiscsi's scsi-lowlevel.h **
> - *
> - * nb. We can't directly include scsi-lowlevel.h due to a namespace conflict:
> - *     QEMU's scsi.h also defines "SCSI_XFER_NONE".
> - */
> -
> -#define SCSI_CDB_MAX_SIZE           16
> -
> -struct scsi_iovector {
> -    struct scsi_iovec *iov;
> -    int niov;
> -    int nalloc;
> -    size_t offset;
> -    int consumed;
> -};
> -
> -struct scsi_allocated_memory {
> -    struct scsi_allocated_memory *next;
> -    char buf[0];
> -};
> -
> -struct scsi_data {
> -    int            size;
> -    unsigned char *data;
> -};
> -
> -enum scsi_sense_key {
> -    SCSI_SENSE_NO_SENSE            = 0x00,
> -    SCSI_SENSE_RECOVERED_ERROR     = 0x01,
> -    SCSI_SENSE_NOT_READY           = 0x02,
> -    SCSI_SENSE_MEDIUM_ERROR        = 0x03,
> -    SCSI_SENSE_HARDWARE_ERROR      = 0x04,
> -    SCSI_SENSE_ILLEGAL_REQUEST     = 0x05,
> -    SCSI_SENSE_UNIT_ATTENTION      = 0x06,
> -    SCSI_SENSE_DATA_PROTECTION     = 0x07,
> -    SCSI_SENSE_BLANK_CHECK         = 0x08,
> -    SCSI_SENSE_VENDOR_SPECIFIC     = 0x09,
> -    SCSI_SENSE_COPY_ABORTED        = 0x0a,
> -    SCSI_SENSE_COMMAND_ABORTED     = 0x0b,
> -    SCSI_SENSE_OBSOLETE_ERROR_CODE = 0x0c,
> -    SCSI_SENSE_OVERFLOW_COMMAND    = 0x0d,
> -    SCSI_SENSE_MISCOMPARE          = 0x0e
> -};
> -
> -struct scsi_sense {
> -    unsigned char       error_type;
> -    enum scsi_sense_key key;
> -    int                 ascq;
> -    unsigned            sense_specific:1;
> -    unsigned            ill_param_in_cdb:1;
> -    unsigned            bit_pointer_valid:1;
> -    unsigned char       bit_pointer;
> -    uint16_t            field_pointer;
> -};
> -
> -enum scsi_residual {
> -    SCSI_RESIDUAL_NO_RESIDUAL = 0,
> -    SCSI_RESIDUAL_UNDERFLOW,
> -    SCSI_RESIDUAL_OVERFLOW
> -};
> -
> -struct scsi_task {
> -    int status;
> -    int cdb_size;
> -    int xfer_dir;
> -    int expxferlen;
> -    unsigned char cdb[SCSI_CDB_MAX_SIZE];
> -    enum scsi_residual residual_status;
> -    size_t residual;
> -    struct scsi_sense sense;
> -    struct scsi_data datain;
> -    struct scsi_allocated_memory *mem;
> -    void *ptr;
> -
> -    uint32_t itt;
> -    uint32_t cmdsn;
> -    uint32_t lun;
> -
> -    struct scsi_iovector iovector_in;
> -    struct scsi_iovector iovector_out;
> -};
> -
>   /** libiscsi integration **/
>   
> +typedef struct virtio_scsi_cmd_req VirtIOSCSICmdReq;
> +typedef struct virtio_scsi_cmd_resp VirtIOSCSICmdResp;
> +
>   static int vus_iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri)
>   {
>       struct iscsi_url *iscsi_url;
> @@ -363,12 +285,12 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
>       if (!out_len && !in_len) {
>           dir = SCSI_XFER_NONE;
>       } else if (out_len) {
> -        dir = SCSI_XFER_TO_DEV;
> +        dir = SCSI_XFER_WRITE;
>           for (i = 0; i < out_len; i++) {
>               len += out[i].iov_len;
>           }
>       } else {
> -        dir = SCSI_XFER_FROM_DEV;
> +        dir = SCSI_XFER_READ;
>           for (i = 0; i < in_len; i++) {
>               len += in[i].iov_len;
>           }
> @@ -376,10 +298,10 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
>   
>       task = scsi_task_new(cdb_len, req->cdb, dir, len);
>   
> -    if (dir == SCSI_XFER_TO_DEV) {
> +    if (dir == SCSI_XFER_WRITE) {
>           task->iovector_out.iov = (struct scsi_iovec *)out;
>           task->iovector_out.niov = out_len;
> -    } else if (dir == SCSI_XFER_FROM_DEV) {
> +    } else if (dir == SCSI_XFER_READ) {
>           task->iovector_in.iov = (struct scsi_iovec *)in;
>           task->iovector_in.niov = in_len;
>       }
> 

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

* Re: [Qemu-devel] [PATCH 25/27] build-sys: fix libvhost-user.a build
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 25/27] build-sys: fix libvhost-user.a build Marc-André Lureau
@ 2017-09-12 16:43   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 67+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-09-12 16:43 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 08/23/2017 01:20 PM, Marc-André Lureau wrote:
> And actually link to it from vhost-user-bridge.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

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

> ---
>   Makefile               | 3 ++-
>   tests/Makefile.include | 2 +-
>   2 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 81447b1f08..654b47b9d9 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -345,7 +345,7 @@ dtc/%:
>   	mkdir -p $@
>   
>   $(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y) $(chardev-obj-y) \
> -	$(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY))
> +	$(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY)) libvhost-user.a
>   
>   ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
>   # Only keep -O and -g cflags
> @@ -366,6 +366,7 @@ Makefile: $(version-obj-y)
>   
>   libqemustub.a: $(stub-obj-y)
>   libqemuutil.a: $(util-obj-y) $(trace-obj-y)
> +libvhost-user.a: $(libvhost-user-obj-y)
>   
>   ######################################################################
>   
> diff --git a/tests/Makefile.include b/tests/Makefile.include
> index 37c1bed683..1ca88ef9d2 100644
> --- a/tests/Makefile.include
> +++ b/tests/Makefile.include
> @@ -786,7 +786,7 @@ tests/test-filter-redirector$(EXESUF): tests/test-filter-redirector.o $(qtest-ob
>   tests/test-x86-cpuid-compat$(EXESUF): tests/test-x86-cpuid-compat.o $(qtest-obj-y)
>   tests/ivshmem-test$(EXESUF): tests/ivshmem-test.o contrib/ivshmem-server/ivshmem-server.o $(libqos-pc-obj-y) $(libqos-spapr-obj-y)
>   tests/megasas-test$(EXESUF): tests/megasas-test.o $(libqos-spapr-obj-y) $(libqos-pc-obj-y)
> -tests/vhost-user-bridge$(EXESUF): tests/vhost-user-bridge.o contrib/libvhost-user/libvhost-user.o $(test-util-obj-y)
> +tests/vhost-user-bridge$(EXESUF): tests/vhost-user-bridge.o $(test-util-obj-y) libvhost-user.a
>   tests/test-uuid$(EXESUF): tests/test-uuid.o $(test-util-obj-y)
>   tests/test-arm-mptimer$(EXESUF): tests/test-arm-mptimer.o
>   tests/test-qapi-util$(EXESUF): tests/test-qapi-util.o $(test-util-obj-y)
> 

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

* Re: [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up
  2017-09-11 13:18   ` Marc-André Lureau
  2017-09-12  1:39     ` Liu, Changpeng
@ 2017-09-19 12:45     ` Marc-André Lureau
  2017-09-19 14:46       ` Paolo Bonzini
  1 sibling, 1 reply; 67+ messages in thread
From: Marc-André Lureau @ 2017-09-19 12:45 UTC (permalink / raw)
  To: Liu, Changpeng, qemu-devel; +Cc: felipe, Philippe Mathieu-Daudé

Hi

On Mon, Sep 11, 2017 at 3:18 PM Marc-André Lureau <
marcandre.lureau@gmail.com> wrote:

> Hi
>
> On Thu, Aug 24, 2017 at 2:41 AM Liu, Changpeng <changpeng.liu@intel.com>
> wrote:
>
>> Thanks for helping the example code clean-up. I can rebase the
>> vhost-user-blk patch
>> set after your commits. For the issue you mentioned below, I think the
>> vhost-user-scsi example
>> can only support 1 LUN, so LUN0 is exist, LUN1 reported error should be
>> okay.
>>
>
> I think this series should go first before your vhost-user-blk, to avoid
> code churn. Please help review.
>
> Patches missing review: 1, 2, 3, 5, 8, 9, 10, 11, 13, 17, 20, 22, 24, 25,
> 26
>

Now missing 3, 8, 10, 11, 13, 17, 22, 24.

Many thanks Philippe so far!

-- 
Marc-André Lureau

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

* Re: [Qemu-devel] [PATCH 03/27] libvhost-user: improve vu_queue_pop() doc
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 03/27] libvhost-user: improve vu_queue_pop() doc Marc-André Lureau
@ 2017-09-19 13:43   ` Paolo Bonzini
  2017-09-19 14:53     ` Eric Blake
  0 siblings, 1 reply; 67+ messages in thread
From: Paolo Bonzini @ 2017-09-19 13:43 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 23/08/2017 18:19, Marc-André Lureau wrote:
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  contrib/libvhost-user/libvhost-user.h | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/contrib/libvhost-user/libvhost-user.h b/contrib/libvhost-user/libvhost-user.h
> index 53ef222c0b..9b9b00e191 100644
> --- a/contrib/libvhost-user/libvhost-user.h
> +++ b/contrib/libvhost-user/libvhost-user.h
> @@ -351,7 +351,8 @@ void vu_queue_notify(VuDev *dev, VuVirtq *vq);
>   * @vq: a VuVirtq queue
>   * @sz: the size of struct to return (must be >= VuVirtqElement)
>   *
> - * Returns: a VuVirtqElement filled from the queue or NULL.
> + * Returns: a VuVirtqElement filled from the queue or NULL. The
> + * returned element must be free() by the caller.

Maybe free()-d or freed.

Otherwise

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

>   */
>  void *vu_queue_pop(VuDev *dev, VuVirtq *vq, size_t sz);
>  
> 

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

* Re: [Qemu-devel] [PATCH 08/27] vhost-user-scsi: glib calls that allocate don't return NULL
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 08/27] vhost-user-scsi: glib calls that allocate don't return NULL Marc-André Lureau
@ 2017-09-19 13:44   ` Paolo Bonzini
  0 siblings, 0 replies; 67+ messages in thread
From: Paolo Bonzini @ 2017-09-19 13:44 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 23/08/2017 18:19, Marc-André Lureau wrote:
> They abort instead, so get rid of failure conditions.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  contrib/vhost-user-scsi/vhost-user-scsi.c | 52 +++++--------------------------
>  1 file changed, 7 insertions(+), 45 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index f3fc8c23c6..5f8ff9d9e5 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -139,8 +139,8 @@ static GSourceFuncs vus_gsrc_funcs = {
>      NULL
>  };
>  
> -static int vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
> -                        vu_watch_cb vu_cb, GSourceFunc gsrc_cb, gpointer data)
> +static void vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
> +                         vu_watch_cb vu_cb, GSourceFunc gsrc_cb, gpointer data)
>  {
>      GSource *vus_gsrc;
>      vus_gsrc_t *vus_src;
> @@ -152,10 +152,6 @@ static int vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
>      assert(!(vu_cb && gsrc_cb));
>  
>      vus_gsrc = g_source_new(&vus_gsrc_funcs, sizeof(vus_gsrc_t));
> -    if (!vus_gsrc) {
> -        PERR("Error creating GSource for new watch");
> -        return -1;
> -    }
>      vus_src = (vus_gsrc_t *)vus_gsrc;
>  
>      vus_src->vdev_scsi = vdev_scsi;
> @@ -171,8 +167,6 @@ static int vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
>  
>      g_tree_insert(vdev_scsi->fdmap, (gpointer)(uintptr_t)fd,
>                                      (gpointer)(uintptr_t)id);
> -
> -    return 0;
>  }
>  
>  /* from libiscsi's scsi-lowlevel.h **
> @@ -440,10 +434,7 @@ static void vus_panic_cb(VuDev *vu_dev, const char *buf)
>          PERR("vu_panic: %s", buf);
>      }
>  
> -    if (vdev_scsi) {
> -        assert(vdev_scsi->loop);
> -        g_main_loop_quit(vdev_scsi->loop);
> -    }
> +    g_main_loop_quit(vdev_scsi->loop);
>  }
>  
>  static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
> @@ -471,9 +462,7 @@ static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
>          (void)g_tree_remove(vdev_scsi->fdmap, (gpointer)(uintptr_t)fd);
>      }
>  
> -    if (vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, NULL, pvt)) {
> -        vus_panic_cb(vu_dev, NULL);
> -    }
> +    vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, NULL, pvt);
>  }
>  
>  static void vus_del_watch_cb(VuDev *vu_dev, int fd)
> @@ -703,10 +692,7 @@ static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
>          vdev_scsi->server_sock = -1;
>      }
>  
> -    if (vdev_scsi->loop) {
> -        g_main_loop_unref(vdev_scsi->loop);
> -        vdev_scsi->loop = NULL;
> -    }
> +    g_main_loop_unref(vdev_scsi->loop);
>      g_free(vdev_scsi);
>  }
>  
> @@ -719,23 +705,9 @@ static vhost_scsi_dev_t *vdev_scsi_new(int server_sock)
>      vdev_scsi = g_new0(vhost_scsi_dev_t, 1);
>      vdev_scsi->server_sock = server_sock;
>      vdev_scsi->loop = g_main_loop_new(NULL, FALSE);
> -    if (!vdev_scsi->loop) {
> -        PERR("Error creating glib event loop");
> -        goto err;
> -    }
> -
>      vdev_scsi->fdmap = g_tree_new(vus_fdmap_compare);
> -    if (!vdev_scsi->fdmap) {
> -        PERR("Error creating glib tree for fdmap");
> -        goto err;
> -    }
>  
>      return vdev_scsi;
> -
> -err:
> -    vdev_scsi_free(vdev_scsi);
> -
> -    return NULL;
>  }
>  
>  static int vdev_scsi_add_iscsi_lun(vhost_scsi_dev_t *vdev_scsi,
> @@ -779,21 +751,14 @@ static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
>              vus_del_watch_cb,
>              &vus_iface);
>  
> -    if (vus_gsrc_new(vdev_scsi, cli_sock, G_IO_IN, NULL, vus_vhost_cb,
> -                     &vdev_scsi->vu_dev)) {
> -        goto fail;
> -    }
> +    vus_gsrc_new(vdev_scsi, cli_sock, G_IO_IN, NULL, vus_vhost_cb,
> +                 &vdev_scsi->vu_dev);
>  
>      g_main_loop_run(vdev_scsi->loop);
>  
> -out:
>      vu_deinit(&vdev_scsi->vu_dev);
>  
>      return ret;
> -
> -fail:
> -    ret = -1;
> -    goto out;
>  }
>  
>  int main(int argc, char **argv)
> @@ -826,9 +791,6 @@ int main(int argc, char **argv)
>          goto err;
>      }
>      vdev_scsi = vdev_scsi_new(sock);
> -    if (!vdev_scsi) {
> -        goto err;
> -    }
>      vhost_scsi_devs[0] = vdev_scsi;
>  
>      if (vdev_scsi_add_iscsi_lun(vdev_scsi, iscsi_uri, 0) != 0) {
> 

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

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

* Re: [Qemu-devel] [PATCH 10/27] vhost-user-scsi: remove vdev_scsi_find_by_vu()
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 10/27] vhost-user-scsi: remove vdev_scsi_find_by_vu() Marc-André Lureau
@ 2017-09-19 13:44   ` Paolo Bonzini
  0 siblings, 0 replies; 67+ messages in thread
From: Paolo Bonzini @ 2017-09-19 13:44 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 23/08/2017 18:19, Marc-André Lureau wrote:
> The *dev pointer belongs to the vhost_scsi_dev_t parent.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  contrib/vhost-user-scsi/vhost-user-scsi.c | 47 +++----------------------------
>  1 file changed, 4 insertions(+), 43 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index d0456a5e7c..bb10848cd2 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -55,8 +55,6 @@
>  
>   /* Only 1 LUN and device supported today */
>  #define VUS_MAX_LUNS 1
> -#define VUS_MAX_DEVS 1
> -
>  #define VUS_ISCSI_INITIATOR "iqn.2016-11.com.nutanix:vhost-user-scsi"
>  
>  typedef struct iscsi_lun {
> @@ -72,8 +70,6 @@ typedef struct vhost_scsi_dev {
>      iscsi_lun_t luns[VUS_MAX_LUNS];
>  } vhost_scsi_dev_t;
>  
> -static vhost_scsi_dev_t *vhost_scsi_devs[VUS_MAX_DEVS];
> -
>  /** glib event loop integration for libvhost-user and misc callbacks **/
>  
>  QEMU_BUILD_BUG_ON((int)G_IO_IN != (int)VU_WATCH_IN);
> @@ -420,16 +416,13 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
>  
>  /** libvhost-user callbacks **/
>  
> -static vhost_scsi_dev_t *vdev_scsi_find_by_vu(VuDev *vu_dev);
> -
>  static void vus_panic_cb(VuDev *vu_dev, const char *buf)
>  {
>      vhost_scsi_dev_t *vdev_scsi;
>  
>      assert(vu_dev);
>  
> -    vdev_scsi = vdev_scsi_find_by_vu(vu_dev);
> -
> +    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
>      if (buf) {
>          PERR("vu_panic: %s", buf);
>      }
> @@ -447,12 +440,7 @@ static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
>      assert(fd >= 0);
>      assert(cb);
>  
> -    vdev_scsi = vdev_scsi_find_by_vu(vu_dev);
> -    if (!vdev_scsi) {
> -        vus_panic_cb(vu_dev, NULL);
> -        return;
> -    }
> -
> +    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
>      id = (guint)(uintptr_t)g_tree_lookup(vdev_scsi->fdmap,
>                                           (gpointer)(uintptr_t)fd);
>      if (id) {
> @@ -473,12 +461,7 @@ static void vus_del_watch_cb(VuDev *vu_dev, int fd)
>      assert(vu_dev);
>      assert(fd >= 0);
>  
> -    vdev_scsi = vdev_scsi_find_by_vu(vu_dev);
> -    if (!vdev_scsi) {
> -        vus_panic_cb(vu_dev, NULL);
> -        return;
> -    }
> -
> +    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
>      id = (guint)(uintptr_t)g_tree_lookup(vdev_scsi->fdmap,
>                                           (gpointer)(uintptr_t)fd);
>      if (id) {
> @@ -506,12 +489,7 @@ static void vus_proc_req(VuDev *vu_dev, int idx)
>  
>      assert(vu_dev);
>  
> -    vdev_scsi = vdev_scsi_find_by_vu(vu_dev);
> -    if (!vdev_scsi) {
> -        vus_panic_cb(vu_dev, NULL);
> -        return;
> -    }
> -
> +    vdev_scsi = container_of(vu_dev, vhost_scsi_dev_t, vu_dev);
>      if (idx < 0 || idx >= VHOST_MAX_NR_VIRTQUEUE) {
>          PERR("VQ Index out of range: %d", idx);
>          vus_panic_cb(vu_dev, NULL);
> @@ -656,22 +634,6 @@ fail:
>  
>  /** vhost-user-scsi **/
>  
> -static vhost_scsi_dev_t *vdev_scsi_find_by_vu(VuDev *vu_dev)
> -{
> -    int i;
> -
> -    assert(vu_dev);
> -
> -    for (i = 0; i < VUS_MAX_DEVS; i++) {
> -        if (&vhost_scsi_devs[i]->vu_dev == vu_dev) {
> -            return vhost_scsi_devs[i];
> -        }
> -    }
> -
> -    PERR("Unknown VuDev %p", vu_dev);
> -    return NULL;
> -}
> -
>  static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
>  {
>      if (!vdev_scsi) {
> @@ -792,7 +754,6 @@ int main(int argc, char **argv)
>          goto err;
>      }
>      vdev_scsi = vdev_scsi_new(sock);
> -    vhost_scsi_devs[0] = vdev_scsi;
>  
>      if (vdev_scsi_add_iscsi_lun(vdev_scsi, iscsi_uri, 0) != 0) {
>          goto err;
> 

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

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

* Re: [Qemu-devel] [PATCH 11/27] vhost-user-scsi: simplify unix path cleanup
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 11/27] vhost-user-scsi: simplify unix path cleanup Marc-André Lureau
@ 2017-09-19 13:45   ` Paolo Bonzini
  0 siblings, 0 replies; 67+ messages in thread
From: Paolo Bonzini @ 2017-09-19 13:45 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 23/08/2017 18:19, Marc-André Lureau wrote:
> Always remove the unix path when leaving the program (instead of when
> freeing scsi_dev). Note that unix_sock_new() also unlink() exisiting
> path before creating the socket.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  contrib/vhost-user-scsi/vhost-user-scsi.c | 22 +++++-----------------
>  1 file changed, 5 insertions(+), 17 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index bb10848cd2..624efc24ca 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -636,24 +636,9 @@ fail:
>  
>  static void vdev_scsi_free(vhost_scsi_dev_t *vdev_scsi)
>  {
> -    if (!vdev_scsi) {
> -        return;
> -    }
> -
>      if (vdev_scsi->server_sock >= 0) {
> -        struct sockaddr_storage ss;
> -        socklen_t sslen = sizeof(ss);
> -
> -        if (getsockname(vdev_scsi->server_sock, (struct sockaddr *)&ss,
> -                        &sslen) == 0) {
> -            struct sockaddr_un *su = (struct sockaddr_un *)&ss;
> -            (void)unlink(su->sun_path);
> -        }
> -
> -        (void)close(vdev_scsi->server_sock);
> -        vdev_scsi->server_sock = -1;
> +        close(vdev_scsi->server_sock);
>      }
> -
>      g_main_loop_unref(vdev_scsi->loop);
>      g_tree_destroy(vdev_scsi->fdmap);
>      g_free(vdev_scsi);
> @@ -764,7 +749,10 @@ int main(int argc, char **argv)
>      }
>  
>  out:
> -    vdev_scsi_free(vdev_scsi);
> +    if (vdev_scsi) {
> +        vdev_scsi_free(vdev_scsi);
> +        unlink(unix_fn);
> +    }
>      g_free(unix_fn);
>      g_free(iscsi_uri);
>  
> 

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

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

* Re: [Qemu-devel] [PATCH 13/27] vhost-user-scsi: use glib watch directly
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 13/27] vhost-user-scsi: use glib watch directly Marc-André Lureau
@ 2017-09-19 13:54   ` Paolo Bonzini
  0 siblings, 0 replies; 67+ messages in thread
From: Paolo Bonzini @ 2017-09-19 13:54 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 23/08/2017 18:19, Marc-André Lureau wrote:
> The following patches is going to remove the custom VUS source.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  contrib/vhost-user-scsi/vhost-user-scsi.c | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 596c1effa1..b40009e234 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -136,7 +136,7 @@ static GSourceFuncs vus_gsrc_funcs = {
>  };
>  
>  static void vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
> -                         vu_watch_cb vu_cb, GSourceFunc gsrc_cb, gpointer data)
> +                         vu_watch_cb vu_cb, gpointer data)
>  {
>      GSource *vus_gsrc;
>      vus_gsrc_t *vus_src;
> @@ -144,8 +144,7 @@ static void vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
>  
>      assert(vdev_scsi);
>      assert(fd >= 0);
> -    assert(vu_cb || gsrc_cb);
> -    assert(!(vu_cb && gsrc_cb));
> +    assert(vu_cb);
>  
>      vus_gsrc = g_source_new(&vus_gsrc_funcs, sizeof(vus_gsrc_t));
>      vus_src = (vus_gsrc_t *)vus_gsrc;
> @@ -156,7 +155,6 @@ static void vus_gsrc_new(vhost_scsi_dev_t *vdev_scsi, int fd, GIOCondition cond,
>      vus_src->vu_cb = vu_cb;
>  
>      g_source_add_poll(vus_gsrc, &vus_src->gfd);
> -    g_source_set_callback(vus_gsrc, gsrc_cb, data, NULL);
>      id = g_source_attach(vus_gsrc, NULL);
>      assert(id);
>      g_source_unref(vus_gsrc);
> @@ -450,7 +448,7 @@ static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
>          (void)g_tree_remove(vdev_scsi->fdmap, (gpointer)(uintptr_t)fd);
>      }
>  
> -    vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, NULL, pvt);
> +    vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, pvt);
>  }
>  
>  static void vus_del_watch_cb(VuDev *vu_dev, int fd)
> @@ -578,7 +576,8 @@ static const VuDevIface vus_iface = {
>      .queue_set_started = vus_queue_set_started,
>  };
>  
> -static gboolean vus_vhost_cb(gpointer data)
> +static gboolean vus_vhost_cb(GIOChannel *source, GIOCondition condition,
> +                             gpointer data)
>  {
>      VuDev *vu_dev = (VuDev *)data;
>  
> @@ -679,6 +678,7 @@ static int vdev_scsi_add_iscsi_lun(vhost_scsi_dev_t *vdev_scsi,
>  
>  static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
>  {
> +    GIOChannel *chan;
>      int cli_sock;
>      int ret = 0;
>  
> @@ -699,10 +699,10 @@ static int vdev_scsi_run(vhost_scsi_dev_t *vdev_scsi)
>              vus_del_watch_cb,
>              &vus_iface);
>  
> -    vus_gsrc_new(vdev_scsi, cli_sock, G_IO_IN, NULL, vus_vhost_cb,
> -                 &vdev_scsi->vu_dev);
> -
> +    chan = g_io_channel_unix_new(cli_sock);
> +    g_io_add_watch(chan, G_IO_IN, vus_vhost_cb, &vdev_scsi->vu_dev);
>      g_main_loop_run(vdev_scsi->loop);
> +    g_io_channel_unref(chan);
>  
>      vu_deinit(&vdev_scsi->vu_dev);
>  
> 

It's a bit weird to use GIOChannel here but still operate on the raw
socket elsewhere.  Maybe keep on open-coding the watch (using
g_source_new+g_source_add_poll) but remove the "vu_watch_cb vu_cb,
GSourceFunc gsrc_cb" ugliness in vus_gsrc_new, and only support the
vu_watch_cb style?  That would be exactly what GIOChannel does with GIOFunc.

Paolo

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

* Re: [Qemu-devel] [PATCH 17/27] vhost-user-scsi: remove unimplemented functions
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 17/27] vhost-user-scsi: remove unimplemented functions Marc-André Lureau
@ 2017-09-19 13:54   ` Paolo Bonzini
  0 siblings, 0 replies; 67+ messages in thread
From: Paolo Bonzini @ 2017-09-19 13:54 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 23/08/2017 18:19, Marc-André Lureau wrote:
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  contrib/vhost-user-scsi/vhost-user-scsi.c | 21 +++------------------
>  1 file changed, 3 insertions(+), 18 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 429e3065ea..882d887a32 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -469,16 +469,6 @@ static void vus_del_watch_cb(VuDev *vu_dev, int fd)
>      }
>  }
>  
> -static void vus_proc_ctl(VuDev *vu_dev, int idx)
> -{
> -    /* Control VQ not implemented */
> -}
> -
> -static void vus_proc_evt(VuDev *vu_dev, int idx)
> -{
> -    /* Event VQ not implemented */
> -}
> -
>  static void vus_proc_req(VuDev *vu_dev, int idx)
>  {
>      vhost_scsi_dev_t *vdev_scsi;
> @@ -559,14 +549,9 @@ static void vus_queue_set_started(VuDev *vu_dev, int idx, bool started)
>  
>      vq = vu_get_queue(vu_dev, idx);
>  
> -    switch (idx) {
> -    case 0:
> -        vu_set_queue_handler(vu_dev, vq, started ? vus_proc_ctl : NULL);
> -        break;
> -    case 1:
> -        vu_set_queue_handler(vu_dev, vq, started ? vus_proc_evt : NULL);
> -        break;
> -    default:
> +    if (idx == 0 || idx == 1) {
> +        PDBG("queue %d unimplemented", idx);
> +    } else {
>          vu_set_queue_handler(vu_dev, vq, started ? vus_proc_req : NULL);
>      }
>  }
> 


Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

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

* Re: [Qemu-devel] [PATCH 22/27] vhost-user-scsi: simplify source handling
  2017-08-23 16:19 ` [Qemu-devel] [PATCH 22/27] vhost-user-scsi: simplify source handling Marc-André Lureau
@ 2017-09-19 14:45   ` Paolo Bonzini
  0 siblings, 0 replies; 67+ messages in thread
From: Paolo Bonzini @ 2017-09-19 14:45 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 23/08/2017 18:19, Marc-André Lureau wrote:
> Using a hashtable.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  contrib/vhost-user-scsi/vhost-user-scsi.c | 45 +++++++++----------------------
>  1 file changed, 12 insertions(+), 33 deletions(-)
> 
> diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
> index 102d910e8f..516a9d3966 100644
> --- a/contrib/vhost-user-scsi/vhost-user-scsi.c
> +++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
> @@ -65,7 +65,7 @@ typedef struct VusDev {
>      VuDev vu_dev;
>      int server_sock;
>      GMainLoop *loop;
> -    GTree *fdmap;   /* fd -> gsource context id */
> +    GHashTable *fdmap;   /* fd -> gsource */
>      VusIscsiLun lun;
>  } VusDev;
>  
> @@ -83,11 +83,6 @@ typedef struct vus_gsrc {
>      GPollFD gfd;
>  } vus_gsrc_t;
>  
> -static gint vus_fdmap_compare(gconstpointer a, gconstpointer b)
> -{
> -    return (b > a) - (b < a);
> -}
> -
>  static gboolean vus_gsrc_prepare(GSource *src, gint *timeout)
>  {
>      assert(timeout);
> @@ -128,8 +123,8 @@ static GSourceFuncs vus_gsrc_funcs = {
>      NULL
>  };
>  
> -static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
> -                         vu_watch_cb vu_cb, gpointer data)
> +static GSource *vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
> +                             vu_watch_cb vu_cb, gpointer data)
>  {
>      GSource *vus_gsrc;
>      vus_gsrc_t *vus_src;
> @@ -142,7 +137,6 @@ static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
>      vus_gsrc = g_source_new(&vus_gsrc_funcs, sizeof(vus_gsrc_t));
>      g_source_set_callback(vus_gsrc, (GSourceFunc) vu_cb, data, NULL);
>      vus_src = (vus_gsrc_t *)vus_gsrc;
> -
>      vus_src->vdev_scsi = vdev_scsi;
>      vus_src->gfd.fd = fd;
>      vus_src->gfd.events = cond;
> @@ -152,8 +146,7 @@ static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
>      assert(id);
>      g_source_unref(vus_gsrc);
>  
> -    g_tree_insert(vdev_scsi->fdmap, (gpointer)(uintptr_t)fd,
> -                                    (gpointer)(uintptr_t)id);
> +    return vus_gsrc;
>  }
>  
>  /** libiscsi integration **/
> @@ -346,43 +339,27 @@ static void vus_panic_cb(VuDev *vu_dev, const char *buf)
>  static void vus_add_watch_cb(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb,
>                               void *pvt)
>  {
> +    GSource *src;
>      VusDev *vdev_scsi;
> -    guint id;
>  
>      assert(vu_dev);
>      assert(fd >= 0);
>      assert(cb);
>  
>      vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
> -    id = (guint)(uintptr_t)g_tree_lookup(vdev_scsi->fdmap,
> -                                         (gpointer)(uintptr_t)fd);
> -    if (id) {
> -        GSource *vus_src = g_main_context_find_source_by_id(NULL, id);
> -        assert(vus_src);
> -        g_source_destroy(vus_src);
> -        (void)g_tree_remove(vdev_scsi->fdmap, (gpointer)(uintptr_t)fd);
> -    }
> -
> -    vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, pvt);
> +    src = vus_gsrc_new(vdev_scsi, fd, vu_evt, cb, pvt);
> +    g_hash_table_replace(vdev_scsi->fdmap, GINT_TO_POINTER(fd), src);
>  }
>  
>  static void vus_del_watch_cb(VuDev *vu_dev, int fd)
>  {
>      VusDev *vdev_scsi;
> -    guint id;
>  
>      assert(vu_dev);
>      assert(fd >= 0);
>  
>      vdev_scsi = container_of(vu_dev, VusDev, vu_dev);
> -    id = (guint)(uintptr_t)g_tree_lookup(vdev_scsi->fdmap,
> -                                         (gpointer)(uintptr_t)fd);
> -    if (id) {
> -        GSource *vus_src = g_main_context_find_source_by_id(NULL, id);
> -        assert(vus_src);
> -        g_source_destroy(vus_src);
> -        (void)g_tree_remove(vdev_scsi->fdmap, (gpointer)(uintptr_t)fd);
> -    }
> +    g_hash_table_remove(vdev_scsi->fdmap, GINT_TO_POINTER(fd));
>  }
>  
>  static void vus_proc_req(VuDev *vu_dev, int idx)
> @@ -539,7 +516,7 @@ static void vdev_scsi_free(VusDev *vdev_scsi)
>          close(vdev_scsi->server_sock);
>      }
>      g_main_loop_unref(vdev_scsi->loop);
> -    g_tree_destroy(vdev_scsi->fdmap);
> +    g_hash_table_unref(vdev_scsi->fdmap);
>      g_free(vdev_scsi);
>  }
>  
> @@ -552,7 +529,9 @@ static VusDev *vdev_scsi_new(int server_sock)
>      vdev_scsi = g_new0(VusDev, 1);
>      vdev_scsi->server_sock = server_sock;
>      vdev_scsi->loop = g_main_loop_new(NULL, FALSE);
> -    vdev_scsi->fdmap = g_tree_new(vus_fdmap_compare);
> +    vdev_scsi->fdmap =
> +        g_hash_table_new_full(NULL, NULL, NULL,
> +                              (GDestroyNotify) g_source_destroy);
>  
>      return vdev_scsi;
>  }
> 

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

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

* Re: [Qemu-devel] [PATCH 24/27] libvhost-user: add glib source helper
  2017-08-23 16:20 ` [Qemu-devel] [PATCH 24/27] libvhost-user: add glib source helper Marc-André Lureau
@ 2017-09-19 14:45   ` Paolo Bonzini
  2017-09-19 15:04     ` Marc-André Lureau
  0 siblings, 1 reply; 67+ messages in thread
From: Paolo Bonzini @ 2017-09-19 14:45 UTC (permalink / raw)
  To: Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

On 23/08/2017 18:20, Marc-André Lureau wrote:
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  contrib/libvhost-user/libvhost-user-glib.h |  32 +++++++
>  contrib/libvhost-user/libvhost-user-glib.c | 145 +++++++++++++++++++++++++++++
>  contrib/libvhost-user/Makefile.objs        |   2 +-
>  3 files changed, 178 insertions(+), 1 deletion(-)
>  create mode 100644 contrib/libvhost-user/libvhost-user-glib.h
>  create mode 100644 contrib/libvhost-user/libvhost-user-glib.c
> 
> diff --git a/contrib/libvhost-user/libvhost-user-glib.h b/contrib/libvhost-user/libvhost-user-glib.h
> new file mode 100644
> index 0000000000..a4b30824a1
> --- /dev/null
> +++ b/contrib/libvhost-user/libvhost-user-glib.h
> @@ -0,0 +1,32 @@
> +/*
> + * Vhost User library
> + *
> + * Copyright (c) 2016 Nutanix Inc. All rights reserved.
> + * Copyright (c) 2017 Red Hat, Inc.
> + *
> + * Authors:
> + *  Marc-André Lureau <mlureau@redhat.com>
> + *  Felipe Franciosi <felipe@nutanix.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or
> + * later.  See the COPYING file in the top-level directory.
> + */
> +
> +#ifndef LIBVHOST_USER_GLIB_H
> +#define LIBVHOST_USER_GLIB_H
> +
> +#include <glib.h>
> +#include "libvhost-user.h"
> +
> +typedef struct VugDev {
> +    VuDev parent;
> +
> +    GMainLoop *loop;
> +    GHashTable *fdmap; /* fd -> gsource */
> +} VugDev;
> +
> +void vug_init(VugDev *dev, int socket, GMainLoop *loop,
> +              vu_panic_cb panic, const VuDevIface *iface);
> +void vug_deinit(VugDev *dev);
> +
> +#endif /* LIBVHOST_USER_GLIB_H */
> diff --git a/contrib/libvhost-user/libvhost-user-glib.c b/contrib/libvhost-user/libvhost-user-glib.c
> new file mode 100644
> index 0000000000..13e095b8e7
> --- /dev/null
> +++ b/contrib/libvhost-user/libvhost-user-glib.c
> @@ -0,0 +1,145 @@
> +/*
> + * Vhost User library
> + *
> + * Copyright (c) 2016 Nutanix Inc. All rights reserved.
> + * Copyright (c) 2017 Red Hat, Inc.
> + *
> + * Authors:
> + *  Marc-André Lureau <mlureau@redhat.com>
> + *  Felipe Franciosi <felipe@nutanix.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or
> + * later.  See the COPYING file in the top-level directory.
> + */
> +
> +#include "qemu/osdep.h"
> +
> +#include "libvhost-user-glib.h"
> +
> +/* glib event loop integration for libvhost-user and misc callbacks */
> +
> +G_STATIC_ASSERT((int)G_IO_IN == (int)VU_WATCH_IN);
> +G_STATIC_ASSERT((int)G_IO_OUT == (int)VU_WATCH_OUT);
> +G_STATIC_ASSERT((int)G_IO_PRI == (int)VU_WATCH_PRI);
> +G_STATIC_ASSERT((int)G_IO_ERR == (int)VU_WATCH_ERR);
> +G_STATIC_ASSERT((int)G_IO_HUP == (int)VU_WATCH_HUP);
> +
> +typedef struct vus_gsrc {
> +    GSource parent;
> +    VuDev *dev;
> +    GPollFD gfd;
> +} vus_gsrc_t;
> +
> +static gboolean
> +vus_gsrc_prepare(GSource *src, gint *timeout)
> +{
> +    g_assert(timeout);
> +
> +    *timeout = -1;
> +    return FALSE;
> +}
> +
> +static gboolean
> +vus_gsrc_check(GSource *src)
> +{
> +    vus_gsrc_t *vus_src = (vus_gsrc_t *)src;
> +
> +    g_assert(vus_src);
> +
> +    return vus_src->gfd.revents & vus_src->gfd.events;
> +}
> +
> +static gboolean
> +vus_gsrc_dispatch(GSource *src, GSourceFunc cb, gpointer data)
> +{
> +    vus_gsrc_t *vus_src = (vus_gsrc_t *)src;
> +
> +    g_assert(vus_src);
> +
> +    ((vu_watch_cb)cb) (vus_src->dev, vus_src->gfd.revents, data);
> +
> +    return G_SOURCE_CONTINUE;
> +}
> +
> +static GSourceFuncs vus_gsrc_funcs = {
> +    vus_gsrc_prepare,
> +    vus_gsrc_check,
> +    vus_gsrc_dispatch,
> +    NULL
> +};
> +
> +static GSource *
> +vug_source_new(VuDev *dev, int fd, GIOCondition cond,
> +               vu_watch_cb vu_cb, gpointer data)
> +{
> +    GSource *vus_gsrc;
> +    vus_gsrc_t *vus_src;
> +    guint id;
> +
> +    g_assert(dev);
> +    g_assert(fd >= 0);
> +    g_assert(vu_cb);
> +
> +    vus_gsrc = g_source_new(&vus_gsrc_funcs, sizeof(vus_gsrc_t));
> +    g_source_set_callback(vus_gsrc, (GSourceFunc) vu_cb, data, NULL);
> +    vus_src = (vus_gsrc_t *)vus_gsrc;
> +    vus_src->dev = dev;
> +    vus_src->gfd.fd = fd;
> +    vus_src->gfd.events = cond;
> +
> +    g_source_add_poll(vus_gsrc, &vus_src->gfd);
> +    id = g_source_attach(vus_gsrc, NULL);
> +    g_assert(id);
> +    g_source_unref(vus_gsrc);
> +
> +    return vus_gsrc;
> +}
> +
> +static void
> +set_watch(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb, void *pvt)
> +{
> +    GSource *src;
> +    VugDev *dev;
> +
> +    g_assert(vu_dev);
> +    g_assert(fd >= 0);
> +    g_assert(cb);
> +
> +    dev = container_of(vu_dev, VugDev, parent);
> +    src = vug_source_new(vu_dev, fd, vu_evt, cb, pvt);
> +    g_hash_table_replace(dev->fdmap, GINT_TO_POINTER(fd), src);
> +}
> +
> +static void
> +remove_watch(VuDev *vu_dev, int fd)
> +{
> +    VugDev *dev;
> +
> +    g_assert(vu_dev);
> +    g_assert(fd >= 0);
> +
> +    dev = container_of(vu_dev, VugDev, parent);
> +    g_hash_table_remove(dev->fdmap, GINT_TO_POINTER(fd));
> +}
> +
> +void
> +vug_init(VugDev *dev, int socket, GMainLoop *loop,
> +         vu_panic_cb panic, const VuDevIface *iface)
> +{
> +    g_assert(dev);
> +    g_assert(loop);
> +    g_assert(iface);
> +
> +    vu_init(&dev->parent, socket, panic, set_watch, remove_watch, iface);
> +    dev->loop = loop;
> +    dev->fdmap = g_hash_table_new_full(NULL, NULL, NULL,
> +                                       (GDestroyNotify) g_source_destroy);
> +}
> +
> +void
> +vug_deinit(VugDev *dev)
> +{
> +    g_assert(dev);
> +
> +    g_hash_table_unref(dev->fdmap);
> +}
> diff --git a/contrib/libvhost-user/Makefile.objs b/contrib/libvhost-user/Makefile.objs
> index cef1ad6e31..ef3778edd4 100644
> --- a/contrib/libvhost-user/Makefile.objs
> +++ b/contrib/libvhost-user/Makefile.objs
> @@ -1 +1 @@
> -libvhost-user-obj-y = libvhost-user.o
> +libvhost-user-obj-y += libvhost-user.o libvhost-user-glib.o
> 

Whatever you do with patch 13, the code here will be fine, so

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

Paolo

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

* Re: [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up
  2017-09-19 12:45     ` Marc-André Lureau
@ 2017-09-19 14:46       ` Paolo Bonzini
  0 siblings, 0 replies; 67+ messages in thread
From: Paolo Bonzini @ 2017-09-19 14:46 UTC (permalink / raw)
  To: Marc-André Lureau, Liu, Changpeng, qemu-devel
  Cc: Philippe Mathieu-Daudé, felipe

On 19/09/2017 14:45, Marc-André Lureau wrote:
> Now missing 3, 8, 10, 11, 13, 17, 22, 24.

Done, only some doubts on patch 13.

Paolo

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

* Re: [Qemu-devel] [PATCH 03/27] libvhost-user: improve vu_queue_pop() doc
  2017-09-19 13:43   ` Paolo Bonzini
@ 2017-09-19 14:53     ` Eric Blake
  2017-09-19 15:01       ` Marc-André Lureau
  0 siblings, 1 reply; 67+ messages in thread
From: Eric Blake @ 2017-09-19 14:53 UTC (permalink / raw)
  To: Paolo Bonzini, Marc-André Lureau, qemu-devel; +Cc: changpeng.liu, felipe

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

On 09/19/2017 08:43 AM, Paolo Bonzini wrote:
> On 23/08/2017 18:19, Marc-André Lureau wrote:
>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>> ---
>>  contrib/libvhost-user/libvhost-user.h | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/contrib/libvhost-user/libvhost-user.h b/contrib/libvhost-user/libvhost-user.h
>> index 53ef222c0b..9b9b00e191 100644
>> --- a/contrib/libvhost-user/libvhost-user.h
>> +++ b/contrib/libvhost-user/libvhost-user.h
>> @@ -351,7 +351,8 @@ void vu_queue_notify(VuDev *dev, VuVirtq *vq);
>>   * @vq: a VuVirtq queue
>>   * @sz: the size of struct to return (must be >= VuVirtqElement)
>>   *
>> - * Returns: a VuVirtqElement filled from the queue or NULL.
>> + * Returns: a VuVirtqElement filled from the queue or NULL. The
>> + * returned element must be free() by the caller.
> 
> Maybe free()-d or freed.

Is it actually free(), or g_free()?

-- 
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: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH 03/27] libvhost-user: improve vu_queue_pop() doc
  2017-09-19 14:53     ` Eric Blake
@ 2017-09-19 15:01       ` Marc-André Lureau
  0 siblings, 0 replies; 67+ messages in thread
From: Marc-André Lureau @ 2017-09-19 15:01 UTC (permalink / raw)
  To: Eric Blake; +Cc: Paolo Bonzini, qemu-devel, changpeng liu, felipe

Hi

----- Original Message -----
> On 09/19/2017 08:43 AM, Paolo Bonzini wrote:
> > On 23/08/2017 18:19, Marc-André Lureau wrote:
> >> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> >> ---
> >>  contrib/libvhost-user/libvhost-user.h | 3 ++-
> >>  1 file changed, 2 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/contrib/libvhost-user/libvhost-user.h
> >> b/contrib/libvhost-user/libvhost-user.h
> >> index 53ef222c0b..9b9b00e191 100644
> >> --- a/contrib/libvhost-user/libvhost-user.h
> >> +++ b/contrib/libvhost-user/libvhost-user.h
> >> @@ -351,7 +351,8 @@ void vu_queue_notify(VuDev *dev, VuVirtq *vq);
> >>   * @vq: a VuVirtq queue
> >>   * @sz: the size of struct to return (must be >= VuVirtqElement)
> >>   *
> >> - * Returns: a VuVirtqElement filled from the queue or NULL.
> >> + * Returns: a VuVirtqElement filled from the queue or NULL. The
> >> + * returned element must be free() by the caller.
> > 
> > Maybe free()-d or freed.
> 
> Is it actually free(), or g_free()?

free(), libvhost-user itself is free of glib, and mostly of qemu headers.

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

* Re: [Qemu-devel] [PATCH 24/27] libvhost-user: add glib source helper
  2017-09-19 14:45   ` Paolo Bonzini
@ 2017-09-19 15:04     ` Marc-André Lureau
  0 siblings, 0 replies; 67+ messages in thread
From: Marc-André Lureau @ 2017-09-19 15:04 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, changpeng liu, felipe



----- Original Message -----
> On 23/08/2017 18:20, Marc-André Lureau wrote:
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> >  contrib/libvhost-user/libvhost-user-glib.h |  32 +++++++
> >  contrib/libvhost-user/libvhost-user-glib.c | 145
> >  +++++++++++++++++++++++++++++
> >  contrib/libvhost-user/Makefile.objs        |   2 +-
> >  3 files changed, 178 insertions(+), 1 deletion(-)
> >  create mode 100644 contrib/libvhost-user/libvhost-user-glib.h
> >  create mode 100644 contrib/libvhost-user/libvhost-user-glib.c
> > 
> > diff --git a/contrib/libvhost-user/libvhost-user-glib.h
> > b/contrib/libvhost-user/libvhost-user-glib.h
> > new file mode 100644
> > index 0000000000..a4b30824a1
> > --- /dev/null
> > +++ b/contrib/libvhost-user/libvhost-user-glib.h
> > @@ -0,0 +1,32 @@
> > +/*
> > + * Vhost User library
> > + *
> > + * Copyright (c) 2016 Nutanix Inc. All rights reserved.
> > + * Copyright (c) 2017 Red Hat, Inc.
> > + *
> > + * Authors:
> > + *  Marc-André Lureau <mlureau@redhat.com>
> > + *  Felipe Franciosi <felipe@nutanix.com>
> > + *
> > + * This work is licensed under the terms of the GNU GPL, version 2 or
> > + * later.  See the COPYING file in the top-level directory.
> > + */
> > +
> > +#ifndef LIBVHOST_USER_GLIB_H
> > +#define LIBVHOST_USER_GLIB_H
> > +
> > +#include <glib.h>
> > +#include "libvhost-user.h"
> > +
> > +typedef struct VugDev {
> > +    VuDev parent;
> > +
> > +    GMainLoop *loop;
> > +    GHashTable *fdmap; /* fd -> gsource */
> > +} VugDev;
> > +
> > +void vug_init(VugDev *dev, int socket, GMainLoop *loop,
> > +              vu_panic_cb panic, const VuDevIface *iface);
> > +void vug_deinit(VugDev *dev);
> > +
> > +#endif /* LIBVHOST_USER_GLIB_H */
> > diff --git a/contrib/libvhost-user/libvhost-user-glib.c
> > b/contrib/libvhost-user/libvhost-user-glib.c
> > new file mode 100644
> > index 0000000000..13e095b8e7
> > --- /dev/null
> > +++ b/contrib/libvhost-user/libvhost-user-glib.c
> > @@ -0,0 +1,145 @@
> > +/*
> > + * Vhost User library
> > + *
> > + * Copyright (c) 2016 Nutanix Inc. All rights reserved.
> > + * Copyright (c) 2017 Red Hat, Inc.
> > + *
> > + * Authors:
> > + *  Marc-André Lureau <mlureau@redhat.com>
> > + *  Felipe Franciosi <felipe@nutanix.com>
> > + *
> > + * This work is licensed under the terms of the GNU GPL, version 2 or
> > + * later.  See the COPYING file in the top-level directory.
> > + */
> > +
> > +#include "qemu/osdep.h"
> > +
> > +#include "libvhost-user-glib.h"
> > +
> > +/* glib event loop integration for libvhost-user and misc callbacks */
> > +
> > +G_STATIC_ASSERT((int)G_IO_IN == (int)VU_WATCH_IN);
> > +G_STATIC_ASSERT((int)G_IO_OUT == (int)VU_WATCH_OUT);
> > +G_STATIC_ASSERT((int)G_IO_PRI == (int)VU_WATCH_PRI);
> > +G_STATIC_ASSERT((int)G_IO_ERR == (int)VU_WATCH_ERR);
> > +G_STATIC_ASSERT((int)G_IO_HUP == (int)VU_WATCH_HUP);
> > +
> > +typedef struct vus_gsrc {
> > +    GSource parent;
> > +    VuDev *dev;
> > +    GPollFD gfd;
> > +} vus_gsrc_t;
> > +
> > +static gboolean
> > +vus_gsrc_prepare(GSource *src, gint *timeout)
> > +{
> > +    g_assert(timeout);
> > +
> > +    *timeout = -1;
> > +    return FALSE;
> > +}
> > +
> > +static gboolean
> > +vus_gsrc_check(GSource *src)
> > +{
> > +    vus_gsrc_t *vus_src = (vus_gsrc_t *)src;
> > +
> > +    g_assert(vus_src);
> > +
> > +    return vus_src->gfd.revents & vus_src->gfd.events;
> > +}
> > +
> > +static gboolean
> > +vus_gsrc_dispatch(GSource *src, GSourceFunc cb, gpointer data)
> > +{
> > +    vus_gsrc_t *vus_src = (vus_gsrc_t *)src;
> > +
> > +    g_assert(vus_src);
> > +
> > +    ((vu_watch_cb)cb) (vus_src->dev, vus_src->gfd.revents, data);
> > +
> > +    return G_SOURCE_CONTINUE;
> > +}
> > +
> > +static GSourceFuncs vus_gsrc_funcs = {
> > +    vus_gsrc_prepare,
> > +    vus_gsrc_check,
> > +    vus_gsrc_dispatch,
> > +    NULL
> > +};
> > +
> > +static GSource *
> > +vug_source_new(VuDev *dev, int fd, GIOCondition cond,
> > +               vu_watch_cb vu_cb, gpointer data)
> > +{
> > +    GSource *vus_gsrc;
> > +    vus_gsrc_t *vus_src;
> > +    guint id;
> > +
> > +    g_assert(dev);
> > +    g_assert(fd >= 0);
> > +    g_assert(vu_cb);
> > +
> > +    vus_gsrc = g_source_new(&vus_gsrc_funcs, sizeof(vus_gsrc_t));
> > +    g_source_set_callback(vus_gsrc, (GSourceFunc) vu_cb, data, NULL);
> > +    vus_src = (vus_gsrc_t *)vus_gsrc;
> > +    vus_src->dev = dev;
> > +    vus_src->gfd.fd = fd;
> > +    vus_src->gfd.events = cond;
> > +
> > +    g_source_add_poll(vus_gsrc, &vus_src->gfd);
> > +    id = g_source_attach(vus_gsrc, NULL);
> > +    g_assert(id);
> > +    g_source_unref(vus_gsrc);
> > +
> > +    return vus_gsrc;
> > +}
> > +
> > +static void
> > +set_watch(VuDev *vu_dev, int fd, int vu_evt, vu_watch_cb cb, void *pvt)
> > +{
> > +    GSource *src;
> > +    VugDev *dev;
> > +
> > +    g_assert(vu_dev);
> > +    g_assert(fd >= 0);
> > +    g_assert(cb);
> > +
> > +    dev = container_of(vu_dev, VugDev, parent);
> > +    src = vug_source_new(vu_dev, fd, vu_evt, cb, pvt);
> > +    g_hash_table_replace(dev->fdmap, GINT_TO_POINTER(fd), src);
> > +}
> > +
> > +static void
> > +remove_watch(VuDev *vu_dev, int fd)
> > +{
> > +    VugDev *dev;
> > +
> > +    g_assert(vu_dev);
> > +    g_assert(fd >= 0);
> > +
> > +    dev = container_of(vu_dev, VugDev, parent);
> > +    g_hash_table_remove(dev->fdmap, GINT_TO_POINTER(fd));
> > +},
> > +
> > +void
> > +vug_init(VugDev *dev, int socket, GMainLoop *loop,
> > +         vu_panic_cb panic, const VuDevIface *iface)
> > +{
> > +    g_assert(dev);
> > +    g_assert(loop);
> > +    g_assert(iface);
> > +
> > +    vu_init(&dev->parent, socket, panic, set_watch, remove_watch, iface);
> > +    dev->loop = loop;
> > +    dev->fdmap = g_hash_table_new_full(NULL, NULL, NULL,
> > +                                       (GDestroyNotify) g_source_destroy);
> > +}
> > +
> > +void
> > +vug_deinit(VugDev *dev)
> > +{
> > +    g_assert(dev);
> > +
> > +    g_hash_table_unref(dev->fdmap);
> > +}
> > diff --git a/contrib/libvhost-user/Makefile.objs
> > b/contrib/libvhost-user/Makefile.objs
> > index cef1ad6e31..ef3778edd4 100644
> > --- a/contrib/libvhost-user/Makefile.objs
> > +++ b/contrib/libvhost-user/Makefile.objs
> > @@ -1 +1 @@
> > -libvhost-user-obj-y = libvhost-user.o
> > +libvhost-user-obj-y += libvhost-user.o libvhost-user-glib.o
> > 
> 
> Whatever you do with patch 13, the code here will be fine, so
> 
> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

I'll probably create a fdsource helper here, similar to and/or wrapping g_unix_fd_source_new() (yet another one.. ;)

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

end of thread, other threads:[~2017-09-19 15:04 UTC | newest]

Thread overview: 67+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-23 16:19 [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up Marc-André Lureau
2017-08-23 16:19 ` [Qemu-devel] [PATCH 01/27] glib-compat: move G_SOURCE_CONTINUE/REMOVE there Marc-André Lureau
2017-09-12 12:22   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 02/27] libvhost-user: drop dependency on glib Marc-André Lureau
2017-09-12 12:24   ` Philippe Mathieu-Daudé
2017-09-12 13:13     ` Marc-André Lureau
2017-09-12 13:24       ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 03/27] libvhost-user: improve vu_queue_pop() doc Marc-André Lureau
2017-09-19 13:43   ` Paolo Bonzini
2017-09-19 14:53     ` Eric Blake
2017-09-19 15:01       ` Marc-André Lureau
2017-08-23 16:19 ` [Qemu-devel] [PATCH 04/27] vhost-user-scsi: use g_strdup() Marc-André Lureau
2017-08-23 17:50   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 05/27] vhost-user-scsi: connect unix socket before allocating Marc-André Lureau
2017-09-12 16:37   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 06/27] vhost-user-scsi: code style fixes Marc-André Lureau
2017-08-24  2:54   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 07/27] vhost-user-scsi: use glib allocation Marc-André Lureau
2017-08-23 17:53   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 08/27] vhost-user-scsi: glib calls that allocate don't return NULL Marc-André Lureau
2017-09-19 13:44   ` Paolo Bonzini
2017-08-23 16:19 ` [Qemu-devel] [PATCH 09/27] vhost-user-scsi: also free the gtree Marc-André Lureau
2017-09-12 16:40   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 10/27] vhost-user-scsi: remove vdev_scsi_find_by_vu() Marc-André Lureau
2017-09-19 13:44   ` Paolo Bonzini
2017-08-23 16:19 ` [Qemu-devel] [PATCH 11/27] vhost-user-scsi: simplify unix path cleanup Marc-André Lureau
2017-09-19 13:45   ` Paolo Bonzini
2017-08-23 16:19 ` [Qemu-devel] [PATCH 12/27] vhost-user-scsi: use NULL pointer Marc-André Lureau
2017-08-23 17:47   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 13/27] vhost-user-scsi: use glib watch directly Marc-André Lureau
2017-09-19 13:54   ` Paolo Bonzini
2017-08-23 16:19 ` [Qemu-devel] [PATCH 14/27] vhost-user-scsi: assert() in iscsi_add_lun() Marc-André Lureau
2017-08-23 17:56   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 15/27] vhost-user-scsi: remove vdev_scsi_add_iscsi_lun() Marc-André Lureau
2017-08-23 17:57   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 16/27] vhost-user-scsi: remove VUS_MAX_LUNS Marc-André Lureau
2017-08-24  0:08   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 17/27] vhost-user-scsi: remove unimplemented functions Marc-André Lureau
2017-09-19 13:54   ` Paolo Bonzini
2017-08-23 16:19 ` [Qemu-devel] [PATCH 18/27] vhost-user-scsi: rename VUS types Marc-André Lureau
2017-08-23 17:59   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 19/27] vhost-user-scsi: avoid use of iscsi_ namespace Marc-André Lureau
2017-08-24  0:07   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 20/27] vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h Marc-André Lureau
2017-09-12 16:41   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 21/27] vhost-user-scsi: drop extra callback pointer Marc-André Lureau
2017-08-23 23:59   ` Philippe Mathieu-Daudé
2017-08-23 16:19 ` [Qemu-devel] [PATCH 22/27] vhost-user-scsi: simplify source handling Marc-André Lureau
2017-09-19 14:45   ` Paolo Bonzini
2017-08-23 16:20 ` [Qemu-devel] [PATCH 23/27] vhost-user-scsi: use glib logging Marc-André Lureau
2017-08-24  0:00   ` Philippe Mathieu-Daudé
2017-08-23 16:20 ` [Qemu-devel] [PATCH 24/27] libvhost-user: add glib source helper Marc-André Lureau
2017-09-19 14:45   ` Paolo Bonzini
2017-09-19 15:04     ` Marc-André Lureau
2017-08-23 16:20 ` [Qemu-devel] [PATCH 25/27] build-sys: fix libvhost-user.a build Marc-André Lureau
2017-09-12 16:43   ` Philippe Mathieu-Daudé
2017-08-23 16:20 ` [Qemu-devel] [PATCH 26/27] vhost-user-scsi: use libvhost-user glib helper Marc-André Lureau
2017-08-23 16:20 ` [Qemu-devel] [PATCH 27/27] vhost-user-scsi: remove server_sock from VusDev Marc-André Lureau
2017-08-24  0:06   ` Philippe Mathieu-Daudé
2017-08-23 16:52 ` [Qemu-devel] [PATCH 00/27] vhost-user-scsi: code clean-up no-reply
2017-08-23 16:53 ` no-reply
2017-08-23 16:59 ` no-reply
2017-08-24  0:40 ` Liu, Changpeng
2017-09-11 13:18   ` Marc-André Lureau
2017-09-12  1:39     ` Liu, Changpeng
2017-09-19 12:45     ` Marc-André Lureau
2017-09-19 14:46       ` Paolo Bonzini

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.