* [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.