All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/9] nbd block status base:allocation
@ 2018-02-15 13:51 Vladimir Sementsov-Ogievskiy
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 1/9] nbd/server: add nbd_opt_invalid helper Vladimir Sementsov-Ogievskiy
                   ` (13 more replies)
  0 siblings, 14 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-02-15 13:51 UTC (permalink / raw)
  To: qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, eblake, vsementsov, den

Hi all.

Here is minimal realization of base:allocation context of NBD
block-status extension, which allows to get block status through
NBD.

Vladimir Sementsov-Ogievskiy (9):
  nbd/server: add nbd_opt_invalid helper
  nbd: change indenting in nbd.h
  nbd: BLOCK_STATUS for standard get_block_status function: server part
  block/nbd-client: save first fatal error in nbd_iter_error
  nbd/client: fix error messages in nbd_handle_reply_err
  nbd: BLOCK_STATUS for standard get_block_status function: client part
  iotests.py: tiny refactor: move system imports up
  iotests: add file_path helper
  iotests: new test 206 for NBD BLOCK_STATUS

 block/nbd-client.h            |   5 +
 include/block/nbd.h           |  58 +++++--
 block/nbd-client.c            | 143 ++++++++++++++++-
 block/nbd.c                   |   3 +
 nbd/client.c                  | 128 ++++++++++++++-
 nbd/common.c                  |  10 ++
 nbd/server.c                  | 360 ++++++++++++++++++++++++++++++++++++++++--
 tests/qemu-iotests/140.out    |   2 +-
 tests/qemu-iotests/143.out    |   2 +-
 tests/qemu-iotests/205        |   3 +-
 tests/qemu-iotests/206        |  34 ++++
 tests/qemu-iotests/206.out    |   2 +
 tests/qemu-iotests/group      |   1 +
 tests/qemu-iotests/iotests.py |  37 ++++-
 14 files changed, 749 insertions(+), 39 deletions(-)
 create mode 100644 tests/qemu-iotests/206
 create mode 100644 tests/qemu-iotests/206.out

-- 
2.11.1

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

* [Qemu-devel] [PATCH 1/9] nbd/server: add nbd_opt_invalid helper
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
@ 2018-02-15 13:51 ` Vladimir Sementsov-Ogievskiy
  2018-02-15 22:01   ` Eric Blake
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 2/9] nbd: change indenting in nbd.h Vladimir Sementsov-Ogievskiy
                   ` (12 subsequent siblings)
  13 siblings, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-02-15 13:51 UTC (permalink / raw)
  To: qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, eblake, vsementsov, den

NBD_REP_ERR_INVALID is often parameter to nbd_opt_drop and it would
be used more in following patches. So, let's add a helper.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 nbd/server.c | 50 ++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 36 insertions(+), 14 deletions(-)

diff --git a/nbd/server.c b/nbd/server.c
index 112e3f69df..b9860a6dcf 100644
--- a/nbd/server.c
+++ b/nbd/server.c
@@ -218,22 +218,46 @@ nbd_negotiate_send_rep_err(NBDClient *client, uint32_t type,
 /* Drop remainder of the current option, and send a reply with the
  * given error type and message. Return -errno on read or write
  * failure; or 0 if connection is still live. */
-static int GCC_FMT_ATTR(4, 5)
-nbd_opt_drop(NBDClient *client, uint32_t type, Error **errp,
-             const char *fmt, ...)
+static int GCC_FMT_ATTR(4, 0)
+nbd_opt_vdrop(NBDClient *client, uint32_t type, Error **errp,
+              const char *fmt, va_list va)
 {
     int ret = nbd_drop(client->ioc, client->optlen, errp);
-    va_list va;
 
     client->optlen = 0;
     if (!ret) {
-        va_start(va, fmt);
         ret = nbd_negotiate_send_rep_verr(client, type, errp, fmt, va);
-        va_end(va);
     }
     return ret;
 }
 
+static int GCC_FMT_ATTR(4, 5)
+nbd_opt_drop(NBDClient *client, uint32_t type, Error **errp,
+             const char *fmt, ...)
+{
+    int ret;
+    va_list va;
+
+    va_start(va, fmt);
+    ret = nbd_opt_vdrop(client, type, errp, fmt, va);
+    va_end(va);
+
+    return ret;
+}
+
+static int GCC_FMT_ATTR(3, 4)
+nbd_opt_invalid(NBDClient *client, Error **errp, const char *fmt, ...)
+{
+    int ret;
+    va_list va;
+
+    va_start(va, fmt);
+    ret = nbd_opt_vdrop(client, NBD_REP_ERR_INVALID, errp, fmt, va);
+    va_end(va);
+
+    return ret;
+}
+
 /* Read size bytes from the unparsed payload of the current option.
  * Return -errno on I/O error, 0 if option was completely handled by
  * sending a reply about inconsistent lengths, or 1 on success. */
@@ -241,9 +265,9 @@ static int nbd_opt_read(NBDClient *client, void *buffer, size_t size,
                         Error **errp)
 {
     if (size > client->optlen) {
-        return nbd_opt_drop(client, NBD_REP_ERR_INVALID, errp,
-                            "Inconsistent lengths in option %s",
-                            nbd_opt_lookup(client->opt));
+        return nbd_opt_invalid(client, errp,
+                               "Inconsistent lengths in option %s",
+                               nbd_opt_lookup(client->opt));
     }
     client->optlen -= size;
     return qio_channel_read_all(client->ioc, buffer, size, errp) < 0 ? -EIO : 1;
@@ -398,9 +422,8 @@ static int nbd_reject_length(NBDClient *client, bool fatal, Error **errp)
     int ret;
 
     assert(client->optlen);
-    ret = nbd_opt_drop(client, NBD_REP_ERR_INVALID, errp,
-                       "option '%s' has unexpected length",
-                       nbd_opt_lookup(client->opt));
+    ret = nbd_opt_invalid(client, errp, "option '%s' has unexpected length",
+                          nbd_opt_lookup(client->opt));
     if (fatal && !ret) {
         error_setg(errp, "option '%s' has unexpected length",
                    nbd_opt_lookup(client->opt));
@@ -438,8 +461,7 @@ static int nbd_negotiate_handle_info(NBDClient *client, uint16_t myflags,
     }
     be32_to_cpus(&namelen);
     if (namelen >= sizeof(name)) {
-        return nbd_opt_drop(client, NBD_REP_ERR_INVALID, errp,
-                            "name too long for qemu");
+        return nbd_opt_invalid(client, errp, "name too long for qemu");
     }
     rc = nbd_opt_read(client, name, namelen, errp);
     if (rc <= 0) {
-- 
2.11.1

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

* [Qemu-devel] [PATCH 2/9] nbd: change indenting in nbd.h
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 1/9] nbd/server: add nbd_opt_invalid helper Vladimir Sementsov-Ogievskiy
@ 2018-02-15 13:51 ` Vladimir Sementsov-Ogievskiy
  2018-02-15 22:03   ` Eric Blake
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part Vladimir Sementsov-Ogievskiy
                   ` (11 subsequent siblings)
  13 siblings, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-02-15 13:51 UTC (permalink / raw)
  To: qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, eblake, vsementsov, den

Prepared indenting for the following patch.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 include/block/nbd.h | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/include/block/nbd.h b/include/block/nbd.h
index fc50003003..ef1698914b 100644
--- a/include/block/nbd.h
+++ b/include/block/nbd.h
@@ -128,21 +128,21 @@ typedef struct NBDStructuredError {
 #define NBD_FLAG_C_NO_ZEROES      (1 << 1) /* End handshake without zeroes. */
 
 /* Option requests. */
-#define NBD_OPT_EXPORT_NAME      (1)
-#define NBD_OPT_ABORT            (2)
-#define NBD_OPT_LIST             (3)
-/* #define NBD_OPT_PEEK_EXPORT   (4) not in use */
-#define NBD_OPT_STARTTLS         (5)
-#define NBD_OPT_INFO             (6)
-#define NBD_OPT_GO               (7)
-#define NBD_OPT_STRUCTURED_REPLY (8)
+#define NBD_OPT_EXPORT_NAME       (1)
+#define NBD_OPT_ABORT             (2)
+#define NBD_OPT_LIST              (3)
+/* #define NBD_OPT_PEEK_EXPORT    (4) not in use */
+#define NBD_OPT_STARTTLS          (5)
+#define NBD_OPT_INFO              (6)
+#define NBD_OPT_GO                (7)
+#define NBD_OPT_STRUCTURED_REPLY  (8)
 
 /* Option reply types. */
 #define NBD_REP_ERR(value) ((UINT32_C(1) << 31) | (value))
 
-#define NBD_REP_ACK             (1)             /* Data sending finished. */
-#define NBD_REP_SERVER          (2)             /* Export description. */
-#define NBD_REP_INFO            (3)             /* NBD_OPT_INFO/GO. */
+#define NBD_REP_ACK             (1)    /* Data sending finished. */
+#define NBD_REP_SERVER          (2)    /* Export description. */
+#define NBD_REP_INFO            (3)    /* NBD_OPT_INFO/GO. */
 
 #define NBD_REP_ERR_UNSUP           NBD_REP_ERR(1)  /* Unknown option */
 #define NBD_REP_ERR_POLICY          NBD_REP_ERR(2)  /* Server denied */
-- 
2.11.1

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

* [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 1/9] nbd/server: add nbd_opt_invalid helper Vladimir Sementsov-Ogievskiy
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 2/9] nbd: change indenting in nbd.h Vladimir Sementsov-Ogievskiy
@ 2018-02-15 13:51 ` Vladimir Sementsov-Ogievskiy
  2018-02-15 23:02   ` Eric Blake
  2018-02-16 13:21   ` Eric Blake
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 4/9] block/nbd-client: save first fatal error in nbd_iter_error Vladimir Sementsov-Ogievskiy
                   ` (10 subsequent siblings)
  13 siblings, 2 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-02-15 13:51 UTC (permalink / raw)
  To: qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, eblake, vsementsov, den

Minimal realization: only one extent in server answer is supported.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 include/block/nbd.h |  33 ++++++
 nbd/common.c        |  10 ++
 nbd/server.c        | 310 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 352 insertions(+), 1 deletion(-)

diff --git a/include/block/nbd.h b/include/block/nbd.h
index ef1698914b..b16215d17a 100644
--- a/include/block/nbd.h
+++ b/include/block/nbd.h
@@ -41,6 +41,12 @@ struct NBDOptionReply {
 } QEMU_PACKED;
 typedef struct NBDOptionReply NBDOptionReply;
 
+typedef struct NBDOptionReplyMetaContext {
+    NBDOptionReply h; /* h.type = NBD_REP_META_CONTEXT, h.length > 4 */
+    uint32_t context_id;
+    /* meta context name follows */
+} QEMU_PACKED NBDOptionReplyMetaContext;
+
 /* Transmission phase structs
  *
  * Note: these are _NOT_ the same as the network representation of an NBD
@@ -105,6 +111,19 @@ typedef struct NBDStructuredError {
     uint16_t message_length;
 } QEMU_PACKED NBDStructuredError;
 
+/* Header of NBD_REPLY_TYPE_BLOCK_STATUS */
+typedef struct NBDStructuredMeta {
+    NBDStructuredReplyChunk h; /* h.length >= 12 (at least one extent) */
+    uint32_t context_id;
+    /* extents follows */
+} QEMU_PACKED NBDStructuredMeta;
+
+/* Extent chunk for NBD_REPLY_TYPE_BLOCK_STATUS */
+typedef struct NBDExtent {
+    uint32_t length;
+    uint32_t flags; /* NBD_STATE_* */
+} QEMU_PACKED NBDExtent;
+
 /* Transmission (export) flags: sent from server to client during handshake,
    but describe what will happen during transmission */
 #define NBD_FLAG_HAS_FLAGS         (1 << 0) /* Flags are there */
@@ -136,6 +155,8 @@ typedef struct NBDStructuredError {
 #define NBD_OPT_INFO              (6)
 #define NBD_OPT_GO                (7)
 #define NBD_OPT_STRUCTURED_REPLY  (8)
+#define NBD_OPT_LIST_META_CONTEXT (9)
+#define NBD_OPT_SET_META_CONTEXT  (10)
 
 /* Option reply types. */
 #define NBD_REP_ERR(value) ((UINT32_C(1) << 31) | (value))
@@ -143,6 +164,7 @@ typedef struct NBDStructuredError {
 #define NBD_REP_ACK             (1)    /* Data sending finished. */
 #define NBD_REP_SERVER          (2)    /* Export description. */
 #define NBD_REP_INFO            (3)    /* NBD_OPT_INFO/GO. */
+#define NBD_REP_META_CONTEXT    (4)    /* NBD_OPT_{LIST,SET}_META_CONTEXT */
 
 #define NBD_REP_ERR_UNSUP           NBD_REP_ERR(1)  /* Unknown option */
 #define NBD_REP_ERR_POLICY          NBD_REP_ERR(2)  /* Server denied */
@@ -163,6 +185,10 @@ typedef struct NBDStructuredError {
 #define NBD_CMD_FLAG_FUA        (1 << 0) /* 'force unit access' during write */
 #define NBD_CMD_FLAG_NO_HOLE    (1 << 1) /* don't punch hole on zero run */
 #define NBD_CMD_FLAG_DF         (1 << 2) /* don't fragment structured read */
+#define NBD_CMD_FLAG_REQ_ONE    (1 << 3) /* only one extent in BLOCK_STATUS
+                                          * reply chunk */
+
+#define NBD_META_ID_BASE_ALLOCATION 0
 
 /* Supported request types */
 enum {
@@ -173,6 +199,7 @@ enum {
     NBD_CMD_TRIM = 4,
     /* 5 reserved for failed experiment NBD_CMD_CACHE */
     NBD_CMD_WRITE_ZEROES = 6,
+    NBD_CMD_BLOCK_STATUS = 7,
 };
 
 #define NBD_DEFAULT_PORT	10809
@@ -200,9 +227,15 @@ enum {
 #define NBD_REPLY_TYPE_NONE          0
 #define NBD_REPLY_TYPE_OFFSET_DATA   1
 #define NBD_REPLY_TYPE_OFFSET_HOLE   2
+#define NBD_REPLY_TYPE_BLOCK_STATUS  5
 #define NBD_REPLY_TYPE_ERROR         NBD_REPLY_ERR(1)
 #define NBD_REPLY_TYPE_ERROR_OFFSET  NBD_REPLY_ERR(2)
 
+/* Flags for extents (NBDExtent.flags) of NBD_REPLY_TYPE_BLOCK_STATUS,
+ * for base:allocation meta context */
+#define NBD_STATE_HOLE (1 << 0)
+#define NBD_STATE_ZERO (1 << 1)
+
 static inline bool nbd_reply_type_is_error(int type)
 {
     return type & (1 << 15);
diff --git a/nbd/common.c b/nbd/common.c
index 6295526dd1..8c95c1d606 100644
--- a/nbd/common.c
+++ b/nbd/common.c
@@ -75,6 +75,10 @@ const char *nbd_opt_lookup(uint32_t opt)
         return "go";
     case NBD_OPT_STRUCTURED_REPLY:
         return "structured reply";
+    case NBD_OPT_LIST_META_CONTEXT:
+        return "list meta context";
+    case NBD_OPT_SET_META_CONTEXT:
+        return "set meta context";
     default:
         return "<unknown>";
     }
@@ -90,6 +94,8 @@ const char *nbd_rep_lookup(uint32_t rep)
         return "server";
     case NBD_REP_INFO:
         return "info";
+    case NBD_REP_META_CONTEXT:
+        return "meta context";
     case NBD_REP_ERR_UNSUP:
         return "unsupported";
     case NBD_REP_ERR_POLICY:
@@ -144,6 +150,8 @@ const char *nbd_cmd_lookup(uint16_t cmd)
         return "trim";
     case NBD_CMD_WRITE_ZEROES:
         return "write zeroes";
+    case NBD_CMD_BLOCK_STATUS:
+        return "block status";
     default:
         return "<unknown>";
     }
@@ -159,6 +167,8 @@ const char *nbd_reply_type_lookup(uint16_t type)
         return "data";
     case NBD_REPLY_TYPE_OFFSET_HOLE:
         return "hole";
+    case NBD_REPLY_TYPE_BLOCK_STATUS:
+        return "block status";
     case NBD_REPLY_TYPE_ERROR:
         return "generic error";
     case NBD_REPLY_TYPE_ERROR_OFFSET:
diff --git a/nbd/server.c b/nbd/server.c
index b9860a6dcf..f2a750eb97 100644
--- a/nbd/server.c
+++ b/nbd/server.c
@@ -82,6 +82,15 @@ struct NBDExport {
 
 static QTAILQ_HEAD(, NBDExport) exports = QTAILQ_HEAD_INITIALIZER(exports);
 
+/* NBDExportMetaContexts represents list of selected by
+ * NBD_OPT_SET_META_CONTEXT contexts to be exported. */
+typedef struct NBDExportMetaContexts {
+    char export_name[NBD_MAX_NAME_SIZE + 1];
+    bool valid; /* means that negotiation of the option finished without
+                   errors */
+    bool base_allocation; /* export base:allocation context (block status) */
+} NBDExportMetaContexts;
+
 struct NBDClient {
     int refcount;
     void (*close_fn)(NBDClient *client, bool negotiated);
@@ -102,6 +111,7 @@ struct NBDClient {
     bool closing;
 
     bool structured_reply;
+    NBDExportMetaContexts export_meta;
 
     uint32_t opt; /* Current option being negotiated */
     uint32_t optlen; /* remaining length of data in ioc for the option being
@@ -636,6 +646,201 @@ static QIOChannel *nbd_negotiate_handle_starttls(NBDClient *client,
     return QIO_CHANNEL(tioc);
 }
 
+/* nbd_alloc_read_size_string
+ *
+ * Read string in format
+ *   uint32_t len
+ *   len bytes string (not 0-terminated)
+ * String is allocated and pointer returned as @buf
+ *
+ * Return -errno on I/O error, 0 if option was completely handled by
+ * sending a reply about inconsistent lengths, or 1 on success. */
+static int nbd_alloc_read_size_string(NBDClient *client, char **buf,
+                                      Error **errp)
+{
+    int ret;
+    uint32_t len;
+
+    ret = nbd_opt_read(client, &len, sizeof(len), errp);
+    if (ret <= 0) {
+        return ret;
+    }
+    cpu_to_be32s(&len);
+
+    *buf = g_try_malloc(len + 1);
+    if (*buf == NULL) {
+        error_setg(errp, "No memory");
+        return -ENOMEM;
+    }
+    (*buf)[len] = '\0';
+
+    ret = nbd_opt_read(client, *buf, len, errp);
+    if (ret <= 0) {
+        g_free(*buf);
+        *buf = NULL;
+    }
+
+    return ret;
+}
+
+/* nbd_read_size_string
+ *
+ * Read string in format
+ *   uint32_t len
+ *   len bytes string (not 0-terminated)
+ *
+ * @buf should be enough to store @max_len+1
+ *
+ * Return -errno on I/O error, 0 if option was completely handled by
+ * sending a reply about inconsistent lengths, or 1 on success. */
+static int nbd_read_size_string(NBDClient *client, char *buf,
+                                uint32_t max_len, Error **errp)
+{
+    int ret;
+    uint32_t len;
+
+    ret = nbd_opt_read(client, &len, sizeof(len), errp);
+    if (ret <= 0) {
+        return ret;
+    }
+    cpu_to_be32s(&len);
+
+    if (len > max_len) {
+        return nbd_opt_invalid(client, errp, "Invalid string length: %u", len);
+    }
+
+    ret = nbd_opt_read(client, buf, len, errp);
+    if (ret <= 0) {
+        return ret;
+    }
+    buf[len] = '\0';
+
+    return 1;
+}
+
+static int nbd_negotiate_send_meta_context(NBDClient *client,
+                                           const char *context,
+                                           uint32_t context_id,
+                                           Error **errp)
+{
+    NBDOptionReplyMetaContext opt;
+    struct iovec iov[] = {
+        {.iov_base = &opt, .iov_len = sizeof(opt)},
+        {.iov_base = (void *)context, .iov_len = strlen(context)}
+    };
+
+    set_be_option_rep(&opt.h, client->opt, NBD_REP_META_CONTEXT,
+                      sizeof(opt) - sizeof(opt.h) + iov[1].iov_len);
+    stl_be_p(&opt.context_id, context_id);
+
+    return qio_channel_writev_all(client->ioc, iov, 2, errp) < 0 ? -EIO : 0;
+}
+
+static void nbd_meta_base_query(NBDExportMetaContexts *meta, const char *query)
+{
+    if (query[0] == '\0' || strcmp(query, "allocation") == 0) {
+        /* Note: empty query should select all contexts within base
+         * namespace. */
+        meta->base_allocation = true;
+    }
+}
+
+/* nbd_negotiate_meta_query
+ * Return -errno on I/O error, 0 if option was completely handled by
+ * sending a reply about inconsistent lengths, or 1 on success. */
+static int nbd_negotiate_meta_query(NBDClient *client,
+                                    NBDExportMetaContexts *meta, Error **errp)
+{
+    int ret;
+    char *query, *colon, *namespace, *subquery;
+
+    ret = nbd_alloc_read_size_string(client, &query, errp);
+    if (ret <= 0) {
+        return ret;
+    }
+
+    colon = strchr(query, ':');
+    if (colon == NULL) {
+        ret = nbd_opt_invalid(client, errp, "no colon in query");
+        goto out;
+    }
+    *colon = '\0';
+    namespace = query;
+    subquery = colon + 1;
+
+    if (strcmp(namespace, "base") == 0) {
+        nbd_meta_base_query(meta, subquery);
+    }
+
+out:
+    g_free(query);
+    return ret;
+}
+
+/* nbd_negotiate_meta_queries
+ * Handle NBD_OPT_LIST_META_CONTEXT and NBD_OPT_SET_META_CONTEXT
+ *
+ * Return -errno on I/O error, 0 if option was completely handled by
+ * sending a reply about inconsistent lengths, or 1 on success. */
+static int nbd_negotiate_meta_queries(NBDClient *client,
+                                      NBDExportMetaContexts *meta, Error **errp)
+{
+    int ret;
+    NBDExport *exp;
+    NBDExportMetaContexts local_meta;
+    uint32_t nb_queries;
+    int i;
+
+    assert(client->structured_reply);
+
+    if (meta == NULL) {
+        meta = &local_meta;
+    }
+
+    memset(meta, 0, sizeof(*meta));
+
+    ret = nbd_read_size_string(client, meta->export_name,
+                               NBD_MAX_NAME_SIZE, errp);
+    if (ret <= 0) {
+        return ret;
+    }
+
+    exp = nbd_export_find(meta->export_name);
+    if (exp == NULL) {
+        return nbd_opt_invalid(client, errp,
+                               "export '%s' not present", meta->export_name);
+    }
+
+    ret = nbd_opt_read(client, &nb_queries, sizeof(nb_queries), errp);
+    if (ret <= 0) {
+        return ret;
+    }
+    cpu_to_be32s(&nb_queries);
+
+    for (i = 0; i < nb_queries; ++i) {
+        ret = nbd_negotiate_meta_query(client, meta, errp);
+        if (ret <= 0) {
+            return ret;
+        }
+    }
+
+    if (meta->base_allocation) {
+        ret = nbd_negotiate_send_meta_context(client, "base:allocation",
+                                              NBD_META_ID_BASE_ALLOCATION,
+                                              errp);
+        if (ret < 0) {
+            return ret;
+        }
+    }
+
+    ret = nbd_negotiate_send_rep(client, NBD_REP_ACK, errp);
+    if (ret == 0) {
+        meta->valid = true;
+    }
+
+    return ret;
+}
+
 /* nbd_negotiate_options
  * Process all NBD_OPT_* client option commands, during fixed newstyle
  * negotiation.
@@ -826,6 +1031,22 @@ static int nbd_negotiate_options(NBDClient *client, uint16_t myflags,
                 }
                 break;
 
+            case NBD_OPT_LIST_META_CONTEXT:
+            case NBD_OPT_SET_META_CONTEXT:
+                if (!client->structured_reply) {
+                    ret = nbd_opt_invalid(
+                            client, errp,
+                            "request option '%s' when structured reply "
+                            "is not negotiated", nbd_opt_lookup(option));
+                } else if (option == NBD_OPT_LIST_META_CONTEXT) {
+                    ret = nbd_negotiate_meta_queries(client, NULL, errp);
+                } else {
+                    ret = nbd_negotiate_meta_queries(client,
+                                                     &client->export_meta,
+                                                     errp);
+                }
+                break;
+
             default:
                 ret = nbd_opt_drop(client, NBD_REP_ERR_UNSUP, errp,
                                    "Unsupported option 0x%" PRIx32 " (%s)",
@@ -1446,6 +1667,78 @@ static int coroutine_fn nbd_co_send_structured_error(NBDClient *client,
     return nbd_co_send_iov(client, iov, 1 + !!iov[1].iov_len, errp);
 }
 
+static int blockstatus_to_extent_be(BlockDriverState *bs, uint64_t offset,
+                                    uint64_t bytes, NBDExtent *extent)
+{
+    uint64_t tail_bytes = bytes;
+
+    while (tail_bytes) {
+        uint32_t flags;
+        int64_t num;
+        int ret = bdrv_block_status_above(bs, NULL, offset, tail_bytes, &num,
+                                          NULL, NULL);
+        if (ret < 0) {
+            return ret;
+        }
+
+        flags = (ret & BDRV_BLOCK_ALLOCATED ? 0 : NBD_STATE_HOLE) |
+                (ret & BDRV_BLOCK_ZERO      ? NBD_STATE_ZERO : 0);
+
+        if (tail_bytes == bytes) {
+            extent->flags = flags;
+        }
+
+        if (flags != extent->flags) {
+            break;
+        }
+
+        offset += num;
+        tail_bytes -= num;
+    }
+
+    cpu_to_be32s(&extent->flags);
+    extent->length = cpu_to_be32(bytes - tail_bytes);
+
+    return 0;
+}
+
+/* nbd_co_send_extents
+ * @extents should be in big-endian */
+static int nbd_co_send_extents(NBDClient *client, uint64_t handle,
+                               NBDExtent *extents, unsigned nb_extents,
+                               uint32_t context_id, Error **errp)
+{
+    NBDStructuredMeta chunk;
+
+    struct iovec iov[] = {
+        {.iov_base = &chunk, .iov_len = sizeof(chunk)},
+        {.iov_base = extents, .iov_len = nb_extents * sizeof(extents[0])}
+    };
+
+    set_be_chunk(&chunk.h, NBD_REPLY_FLAG_DONE, NBD_REPLY_TYPE_BLOCK_STATUS,
+                 handle, sizeof(chunk) - sizeof(chunk.h) + iov[1].iov_len);
+    stl_be_p(&chunk.context_id, context_id);
+
+    return nbd_co_send_iov(client, iov, 2, errp);
+}
+
+static int nbd_co_send_block_status(NBDClient *client, uint64_t handle,
+                                    BlockDriverState *bs, uint64_t offset,
+                                    uint64_t length, uint32_t context_id,
+                                    Error **errp)
+{
+    int ret;
+    NBDExtent extent;
+
+    ret = blockstatus_to_extent_be(bs, offset, length, &extent);
+    if (ret < 0) {
+        return nbd_co_send_structured_error(
+                client, handle, -ret, "can't get block status", errp);
+    }
+
+    return nbd_co_send_extents(client, handle, &extent, 1, context_id, errp);
+}
+
 /* nbd_co_receive_request
  * Collect a client request. Return 0 if request looks valid, -EIO to drop
  * connection right away, and any other negative value to report an error to
@@ -1523,6 +1816,8 @@ static int nbd_co_receive_request(NBDRequestData *req, NBDRequest *request,
         valid_flags |= NBD_CMD_FLAG_DF;
     } else if (request->type == NBD_CMD_WRITE_ZEROES) {
         valid_flags |= NBD_CMD_FLAG_NO_HOLE;
+    } else if (request->type == NBD_CMD_BLOCK_STATUS) {
+        valid_flags |= NBD_CMD_FLAG_REQ_ONE;
     }
     if (request->flags & ~valid_flags) {
         error_setg(errp, "unsupported flags for command %s (got 0x%x)",
@@ -1650,6 +1945,19 @@ static coroutine_fn void nbd_trip(void *opaque)
         }
 
         break;
+    case NBD_CMD_BLOCK_STATUS:
+        if (client->export_meta.base_allocation) {
+            ret = nbd_co_send_block_status(req->client, request.handle,
+                                           blk_bs(exp->blk), request.from,
+                                           request.len,
+                                           NBD_META_ID_BASE_ALLOCATION,
+                                           &local_err);
+        } else {
+            ret = -EINVAL;
+            error_setg(&local_err, "CMD_BLOCK_STATUS not negotiated");
+        }
+
+        break;
     default:
         error_setg(&local_err, "invalid request type (%" PRIu32 ") received",
                    request.type);
@@ -1680,7 +1988,7 @@ reply:
             ret = nbd_co_send_structured_done(req->client, request.handle,
                                               &local_err);
         }
-    } else {
+    } else if (request.type != NBD_CMD_BLOCK_STATUS) {
         ret = nbd_co_send_simple_reply(req->client, request.handle,
                                        ret < 0 ? -ret : 0,
                                        req->data, reply_data_len, &local_err);
-- 
2.11.1

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

* [Qemu-devel] [PATCH 4/9] block/nbd-client: save first fatal error in nbd_iter_error
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
                   ` (2 preceding siblings ...)
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part Vladimir Sementsov-Ogievskiy
@ 2018-02-15 13:51 ` Vladimir Sementsov-Ogievskiy
  2018-02-16 17:35   ` Eric Blake
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 5/9] nbd/client: fix error messages in nbd_handle_reply_err Vladimir Sementsov-Ogievskiy
                   ` (9 subsequent siblings)
  13 siblings, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-02-15 13:51 UTC (permalink / raw)
  To: qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, eblake, vsementsov, den

It is ok, that fatal error hides previous not fatal, but hiding
first fatal error is a bad feature.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 block/nbd-client.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/block/nbd-client.c b/block/nbd-client.c
index 9206652e45..b1cbe95b13 100644
--- a/block/nbd-client.c
+++ b/block/nbd-client.c
@@ -481,6 +481,7 @@ static coroutine_fn int nbd_co_receive_one_chunk(
 
 typedef struct NBDReplyChunkIter {
     int ret;
+    bool fatal;
     Error *err;
     bool done, only_structured;
 } NBDReplyChunkIter;
@@ -490,11 +491,12 @@ static void nbd_iter_error(NBDReplyChunkIter *iter, bool fatal,
 {
     assert(ret < 0);
 
-    if (fatal || iter->ret == 0) {
+    if ((fatal && !iter->fatal) || iter->ret == 0) {
         if (iter->ret != 0) {
             error_free(iter->err);
             iter->err = NULL;
         }
+        iter->fatal = fatal;
         iter->ret = ret;
         error_propagate(&iter->err, *local_err);
     } else {
-- 
2.11.1

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

* [Qemu-devel] [PATCH 5/9] nbd/client: fix error messages in nbd_handle_reply_err
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
                   ` (3 preceding siblings ...)
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 4/9] block/nbd-client: save first fatal error in nbd_iter_error Vladimir Sementsov-Ogievskiy
@ 2018-02-15 13:51 ` Vladimir Sementsov-Ogievskiy
  2018-02-16 17:38   ` Eric Blake
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 6/9] nbd: BLOCK_STATUS for standard get_block_status function: client part Vladimir Sementsov-Ogievskiy
                   ` (8 subsequent siblings)
  13 siblings, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-02-15 13:51 UTC (permalink / raw)
  To: qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, eblake, vsementsov, den

1. NBD_REP_ERR_INVALID is not only about length, so, make message more
   general

2. hex format is not very good: it's hard to read something like
   "option a (set meta context)", so switch to dec.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 nbd/client.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/nbd/client.c b/nbd/client.c
index 89f80f9590..1f730341c0 100644
--- a/nbd/client.c
+++ b/nbd/client.c
@@ -180,22 +180,22 @@ static int nbd_handle_reply_err(QIOChannel *ioc, NBDOptionReply *reply,
         goto cleanup;
 
     case NBD_REP_ERR_POLICY:
-        error_setg(errp, "Denied by server for option %" PRIx32 " (%s)",
+        error_setg(errp, "Denied by server for option %" PRIu32 " (%s)",
                    reply->option, nbd_opt_lookup(reply->option));
         break;
 
     case NBD_REP_ERR_INVALID:
-        error_setg(errp, "Invalid data length for option %" PRIx32 " (%s)",
+        error_setg(errp, "Invalid parameters for option %" PRIu32 " (%s)",
                    reply->option, nbd_opt_lookup(reply->option));
         break;
 
     case NBD_REP_ERR_PLATFORM:
-        error_setg(errp, "Server lacks support for option %" PRIx32 " (%s)",
+        error_setg(errp, "Server lacks support for option %" PRIu32 " (%s)",
                    reply->option, nbd_opt_lookup(reply->option));
         break;
 
     case NBD_REP_ERR_TLS_REQD:
-        error_setg(errp, "TLS negotiation required before option %" PRIx32
+        error_setg(errp, "TLS negotiation required before option %" PRIu32
                    " (%s)", reply->option, nbd_opt_lookup(reply->option));
         break;
 
@@ -204,17 +204,17 @@ static int nbd_handle_reply_err(QIOChannel *ioc, NBDOptionReply *reply,
         break;
 
     case NBD_REP_ERR_SHUTDOWN:
-        error_setg(errp, "Server shutting down before option %" PRIx32 " (%s)",
+        error_setg(errp, "Server shutting down before option %" PRIu32 " (%s)",
                    reply->option, nbd_opt_lookup(reply->option));
         break;
 
     case NBD_REP_ERR_BLOCK_SIZE_REQD:
-        error_setg(errp, "Server requires INFO_BLOCK_SIZE for option %" PRIx32
+        error_setg(errp, "Server requires INFO_BLOCK_SIZE for option %" PRIu32
                    " (%s)", reply->option, nbd_opt_lookup(reply->option));
         break;
 
     default:
-        error_setg(errp, "Unknown error code when asking for option %" PRIx32
+        error_setg(errp, "Unknown error code when asking for option %" PRIu32
                    " (%s)", reply->option, nbd_opt_lookup(reply->option));
         break;
     }
-- 
2.11.1

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

* [Qemu-devel] [PATCH 6/9] nbd: BLOCK_STATUS for standard get_block_status function: client part
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
                   ` (4 preceding siblings ...)
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 5/9] nbd/client: fix error messages in nbd_handle_reply_err Vladimir Sementsov-Ogievskiy
@ 2018-02-15 13:51 ` Vladimir Sementsov-Ogievskiy
  2018-02-16 20:40   ` Eric Blake
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 7/9] iotests.py: tiny refactor: move system imports up Vladimir Sementsov-Ogievskiy
                   ` (7 subsequent siblings)
  13 siblings, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-02-15 13:51 UTC (permalink / raw)
  To: qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, eblake, vsementsov, den

Minimal realization: only one extent in server answer is supported.
Flag NBD_CMD_FLAG_REQ_ONE is used to force this behavior.

Tests 140, 147 and 205 are fixed due to now server failed on searching
export in context of NBD_OPT_SET_META_CONTEXT option negotiation.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 block/nbd-client.h         |   5 ++
 include/block/nbd.h        |   3 +
 block/nbd-client.c         | 139 +++++++++++++++++++++++++++++++++++++++++++++
 block/nbd.c                |   3 +
 nbd/client.c               | 114 +++++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/140.out |   2 +-
 tests/qemu-iotests/143.out |   2 +-
 tests/qemu-iotests/205     |   3 +-
 8 files changed, 268 insertions(+), 3 deletions(-)

diff --git a/block/nbd-client.h b/block/nbd-client.h
index 612c4c21a0..ca0cc141c0 100644
--- a/block/nbd-client.h
+++ b/block/nbd-client.h
@@ -61,4 +61,9 @@ void nbd_client_detach_aio_context(BlockDriverState *bs);
 void nbd_client_attach_aio_context(BlockDriverState *bs,
                                    AioContext *new_context);
 
+int64_t coroutine_fn nbd_client_co_get_block_status(BlockDriverState *bs,
+                                                    int64_t sector_num,
+                                                    int nb_sectors, int *pnum,
+                                                    BlockDriverState **file);
+
 #endif /* NBD_CLIENT_H */
diff --git a/include/block/nbd.h b/include/block/nbd.h
index b16215d17a..baf12e5428 100644
--- a/include/block/nbd.h
+++ b/include/block/nbd.h
@@ -262,6 +262,7 @@ struct NBDExportInfo {
     /* In-out fields, set by client before nbd_receive_negotiate() and
      * updated by server results during nbd_receive_negotiate() */
     bool structured_reply;
+    bool base_allocation; /* base:allocation context for NBD_CMD_BLOCK_STATUS */
 
     /* Set by server results during nbd_receive_negotiate() */
     uint64_t size;
@@ -269,6 +270,8 @@ struct NBDExportInfo {
     uint32_t min_block;
     uint32_t opt_block;
     uint32_t max_block;
+
+    uint32_t meta_base_allocation_id;
 };
 typedef struct NBDExportInfo NBDExportInfo;
 
diff --git a/block/nbd-client.c b/block/nbd-client.c
index b1cbe95b13..a80d69d3cd 100644
--- a/block/nbd-client.c
+++ b/block/nbd-client.c
@@ -228,6 +228,45 @@ static int nbd_parse_offset_hole_payload(NBDStructuredReplyChunk *chunk,
     return 0;
 }
 
+/* nbd_parse_blockstatus_payload
+ * support only one extent in reply and only for
+ * base:allocation context
+ */
+static int nbd_parse_blockstatus_payload(NBDClientSession *client,
+                                         NBDStructuredReplyChunk *chunk,
+                                         uint8_t *payload, uint64_t orig_length,
+                                         NBDExtent *extent, Error **errp)
+{
+    uint32_t context_id;
+
+    if (chunk->length != sizeof(context_id) + sizeof(extent)) {
+        error_setg(errp, "Protocol error: invalid payload for "
+                         "NBD_REPLY_TYPE_BLOCK_STATUS");
+        return -EINVAL;
+    }
+
+    context_id = payload_advance32(&payload);
+    if (client->info.meta_base_allocation_id != context_id) {
+        error_setg(errp, "Protocol error: unexpected context id: %d for "
+                         "NBD_REPLY_TYPE_BLOCK_STATUS, when negotiated context "
+                         "id is %d", context_id,
+                         client->info.meta_base_allocation_id);
+        return -EINVAL;
+    }
+
+    memcpy(extent, payload, sizeof(*extent));
+    be32_to_cpus(&extent->length);
+    be32_to_cpus(&extent->flags);
+
+    if (extent->length > orig_length) {
+        error_setg(errp, "Protocol error: server sent chunk exceeding requested"
+                         " region");
+        return -EINVAL;
+    }
+
+    return 0;
+}
+
 /* nbd_parse_error_payload
  * on success @errp contains message describing nbd error reply
  */
@@ -642,6 +681,61 @@ static int nbd_co_receive_cmdread_reply(NBDClientSession *s, uint64_t handle,
     return iter.ret;
 }
 
+static int nbd_co_receive_blockstatus_reply(NBDClientSession *s,
+                                            uint64_t handle, uint64_t length,
+                                            NBDExtent *extent, Error **errp)
+{
+    NBDReplyChunkIter iter;
+    NBDReply reply;
+    void *payload = NULL;
+    Error *local_err = NULL;
+    bool received = false;
+
+    NBD_FOREACH_REPLY_CHUNK(s, iter, handle, s->info.structured_reply,
+                            NULL, &reply, &payload)
+    {
+        int ret;
+        NBDStructuredReplyChunk *chunk = &reply.structured;
+
+        assert(nbd_reply_is_structured(&reply));
+
+        switch (chunk->type) {
+        case NBD_REPLY_TYPE_BLOCK_STATUS:
+            if (received) {
+                s->quit = true;
+                error_setg(&local_err, "Several BLOCK_STATUS chunks in reply");
+                nbd_iter_error(&iter, true, -EINVAL, &local_err);
+            }
+            received = true;
+
+            ret = nbd_parse_blockstatus_payload(s, &reply.structured,
+                                                payload, length, extent,
+                                                &local_err);
+            if (ret < 0) {
+                s->quit = true;
+                nbd_iter_error(&iter, true, ret, &local_err);
+            }
+            break;
+        default:
+            if (!nbd_reply_type_is_error(chunk->type)) {
+                /* not allowed reply type */
+                s->quit = true;
+                error_setg(&local_err,
+                           "Unexpected reply type: %d (%s) "
+                           "for CMD_BLOCK_STATUS",
+                           chunk->type, nbd_reply_type_lookup(chunk->type));
+                nbd_iter_error(&iter, true, -EINVAL, &local_err);
+            }
+        }
+
+        g_free(payload);
+        payload = NULL;
+    }
+
+    error_propagate(errp, iter.err);
+    return iter.ret;
+}
+
 static int nbd_co_request(BlockDriverState *bs, NBDRequest *request,
                           QEMUIOVector *write_qiov)
 {
@@ -784,6 +878,50 @@ int nbd_client_co_pdiscard(BlockDriverState *bs, int64_t offset, int bytes)
     return nbd_co_request(bs, &request, NULL);
 }
 
+int64_t coroutine_fn nbd_client_co_get_block_status(BlockDriverState *bs,
+                                                    int64_t sector_num,
+                                                    int nb_sectors, int *pnum,
+                                                    BlockDriverState **file)
+{
+    int64_t ret;
+    NBDExtent extent;
+    NBDClientSession *client = nbd_get_client_session(bs);
+    Error *local_err = NULL;
+
+    uint64_t offset = sector_num << BDRV_SECTOR_BITS;
+    uint32_t bytes = nb_sectors << BDRV_SECTOR_BITS;
+
+    NBDRequest request = {
+        .type = NBD_CMD_BLOCK_STATUS,
+        .from = offset,
+        .len = bytes,
+        .flags = NBD_CMD_FLAG_REQ_ONE,
+    };
+
+    if (!client->info.base_allocation) {
+        *pnum = nb_sectors;
+        return BDRV_BLOCK_DATA;
+    }
+
+    ret = nbd_co_send_request(bs, &request, NULL);
+    if (ret < 0) {
+        return ret;
+    }
+
+    ret = nbd_co_receive_blockstatus_reply(client, request.handle, bytes,
+                                           &extent, &local_err);
+    if (local_err) {
+        error_report_err(local_err);
+    }
+    if (ret < 0) {
+        return ret;
+    }
+
+    *pnum = extent.length >> BDRV_SECTOR_BITS;
+    return (extent.flags & NBD_STATE_HOLE ? 0 : BDRV_BLOCK_DATA) |
+           (extent.flags & NBD_STATE_ZERO ? BDRV_BLOCK_ZERO : 0);
+}
+
 void nbd_client_detach_aio_context(BlockDriverState *bs)
 {
     NBDClientSession *client = nbd_get_client_session(bs);
@@ -828,6 +966,7 @@ int nbd_client_init(BlockDriverState *bs,
 
     client->info.request_sizes = true;
     client->info.structured_reply = true;
+    client->info.base_allocation = true;
     ret = nbd_receive_negotiate(QIO_CHANNEL(sioc), export,
                                 tlscreds, hostname,
                                 &client->ioc, &client->info, errp);
diff --git a/block/nbd.c b/block/nbd.c
index ef81a9f53b..72c90c3c27 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -583,6 +583,7 @@ static BlockDriver bdrv_nbd = {
     .bdrv_detach_aio_context    = nbd_detach_aio_context,
     .bdrv_attach_aio_context    = nbd_attach_aio_context,
     .bdrv_refresh_filename      = nbd_refresh_filename,
+    .bdrv_co_get_block_status   = nbd_client_co_get_block_status,
 };
 
 static BlockDriver bdrv_nbd_tcp = {
@@ -602,6 +603,7 @@ static BlockDriver bdrv_nbd_tcp = {
     .bdrv_detach_aio_context    = nbd_detach_aio_context,
     .bdrv_attach_aio_context    = nbd_attach_aio_context,
     .bdrv_refresh_filename      = nbd_refresh_filename,
+    .bdrv_co_get_block_status   = nbd_client_co_get_block_status,
 };
 
 static BlockDriver bdrv_nbd_unix = {
@@ -621,6 +623,7 @@ static BlockDriver bdrv_nbd_unix = {
     .bdrv_detach_aio_context    = nbd_detach_aio_context,
     .bdrv_attach_aio_context    = nbd_attach_aio_context,
     .bdrv_refresh_filename      = nbd_refresh_filename,
+    .bdrv_co_get_block_status   = nbd_client_co_get_block_status,
 };
 
 static void bdrv_nbd_init(void)
diff --git a/nbd/client.c b/nbd/client.c
index 1f730341c0..61e012ecb0 100644
--- a/nbd/client.c
+++ b/nbd/client.c
@@ -594,6 +594,108 @@ static QIOChannel *nbd_receive_starttls(QIOChannel *ioc,
     return QIO_CHANNEL(tioc);
 }
 
+/* nbd_negotiate_simple_meta_context:
+ * Set one meta context. Simple means that reply must contain zero (not
+ * negotiated) or one (negotiated) contexts. More contexts would be considered
+ * as a protocol error.
+ * return 1 for successful negotiation, context_id is set
+ *        0 if operation is unsupported,
+ *        -errno with errp set for any other error
+ */
+static int nbd_negotiate_simple_meta_context(QIOChannel *ioc,
+                                             const char *export,
+                                             const char *context,
+                                             uint32_t *context_id,
+                                             Error **errp)
+{
+    int ret;
+    NBDOptionReply reply;
+    uint32_t received_id;
+    bool received;
+    size_t export_len = strlen(export);
+    size_t context_len = strlen(context);
+    size_t data_len = 4 + export_len + 4 + 4 + context_len;
+
+    char *data = g_malloc(data_len);
+    char *p = data;
+
+    stl_be_p(p, export_len);
+    memcpy(p += 4, export, export_len);
+    stl_be_p(p += export_len, 1);
+    stl_be_p(p += 4, context_len);
+    memcpy(p += 4, context, context_len);
+
+    ret = nbd_send_option_request(ioc, NBD_OPT_SET_META_CONTEXT, data_len, data,
+                                  errp);
+    g_free(data);
+    if (ret < 0) {
+        return ret;
+    }
+
+    if (nbd_receive_option_reply(ioc, NBD_OPT_SET_META_CONTEXT, &reply,
+                                 errp) < 0)
+    {
+        return -1;
+    }
+
+    ret = nbd_handle_reply_err(ioc, &reply, errp);
+    if (ret <= 0) {
+        return ret;
+    }
+
+    if (reply.type == NBD_REP_META_CONTEXT) {
+        char *name;
+        size_t len;
+
+        if (nbd_read(ioc, &received_id, sizeof(received_id), errp) < 0) {
+            return -EIO;
+        }
+        be32_to_cpus(&received_id);
+
+        len = reply.length - sizeof(received_id);
+        name = g_malloc(len + 1);
+        if (nbd_read(ioc, name, len, errp) < 0) {
+            g_free(name);
+            return -EIO;
+        }
+        name[len] = '\0';
+        if (strcmp(context, name)) {
+            error_setg(errp, "Failed to negotiate meta context '%s', server "
+                       "answered with different context '%s'", context,
+                       name);
+            g_free(name);
+            return -1;
+        }
+        g_free(name);
+
+        received = true;
+
+        /* receive NBD_REP_ACK */
+        if (nbd_receive_option_reply(ioc, NBD_OPT_SET_META_CONTEXT, &reply,
+                                     errp) < 0)
+        {
+            return -1;
+        }
+
+        ret = nbd_handle_reply_err(ioc, &reply, errp);
+        if (ret <= 0) {
+            return ret;
+        }
+    }
+
+    if (reply.type != NBD_REP_ACK) {
+        error_setg(errp, "Unexpected reply type %" PRIx32 " expected %x",
+                   reply.type, NBD_REP_ACK);
+        return -1;
+    }
+
+    if (received) {
+        *context_id = received_id;
+        return 1;
+    }
+
+    return 0;
+}
 
 int nbd_receive_negotiate(QIOChannel *ioc, const char *name,
                           QCryptoTLSCreds *tlscreds, const char *hostname,
@@ -605,10 +707,12 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char *name,
     int rc;
     bool zeroes = true;
     bool structured_reply = info->structured_reply;
+    bool base_allocation = info->base_allocation;
 
     trace_nbd_receive_negotiate(tlscreds, hostname ? hostname : "<null>");
 
     info->structured_reply = false;
+    info->base_allocation = false;
     rc = -EINVAL;
 
     if (outioc) {
@@ -699,6 +803,16 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char *name,
                 info->structured_reply = result == 1;
             }
 
+            if (info->structured_reply && base_allocation) {
+                result = nbd_negotiate_simple_meta_context(
+                        ioc, name, "base:allocation",
+                        &info->meta_base_allocation_id, errp);
+                if (result < 0) {
+                    goto fail;
+                }
+                info->base_allocation = result == 1;
+            }
+
             /* Try NBD_OPT_GO first - if it works, we are done (it
              * also gives us a good message if the server requires
              * TLS).  If it is not available, fall back to
diff --git a/tests/qemu-iotests/140.out b/tests/qemu-iotests/140.out
index 7295b3d975..b083e2effd 100644
--- a/tests/qemu-iotests/140.out
+++ b/tests/qemu-iotests/140.out
@@ -8,7 +8,7 @@ wrote 65536/65536 bytes at offset 0
 read 65536/65536 bytes at offset 0
 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 {"return": {}}
-can't open device nbd+unix:///drv?socket=TEST_DIR/nbd: Requested export not available
+can't open device nbd+unix:///drv?socket=TEST_DIR/nbd: Invalid parameters for option 10 (set meta context)
 server reported: export 'drv' not present
 {"return": {}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
diff --git a/tests/qemu-iotests/143.out b/tests/qemu-iotests/143.out
index 1c7fb45543..ab6b29b8fb 100644
--- a/tests/qemu-iotests/143.out
+++ b/tests/qemu-iotests/143.out
@@ -1,7 +1,7 @@
 QA output created by 143
 {"return": {}}
 {"return": {}}
-can't open device nbd+unix:///no_such_export?socket=TEST_DIR/nbd: Requested export not available
+can't open device nbd+unix:///no_such_export?socket=TEST_DIR/nbd: Invalid parameters for option 10 (set meta context)
 server reported: export 'no_such_export' not present
 {"return": {}}
 {"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
diff --git a/tests/qemu-iotests/205 b/tests/qemu-iotests/205
index e7b2eae51d..8a8e0df40f 100644
--- a/tests/qemu-iotests/205
+++ b/tests/qemu-iotests/205
@@ -79,7 +79,8 @@ class TestNbdServerRemove(iotests.QMPTestCase):
     def assertConnectFailed(self, qemu_io_output):
         self.assertEqual(filter_qemu_io(qemu_io_output).strip(),
                          "can't open device " + nbd_uri +
-                         ": Requested export not available\n"
+                         ": Invalid parameters for option 10 "
+                         "(set meta context)\n"
                          "server reported: export 'exp' not present")
 
     def do_test_connect_after_remove(self, mode=None):
-- 
2.11.1

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

* [Qemu-devel] [PATCH 7/9] iotests.py: tiny refactor: move system imports up
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
                   ` (5 preceding siblings ...)
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 6/9] nbd: BLOCK_STATUS for standard get_block_status function: client part Vladimir Sementsov-Ogievskiy
@ 2018-02-15 13:51 ` Vladimir Sementsov-Ogievskiy
  2018-02-16 20:44   ` Eric Blake
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 8/9] iotests: add file_path helper Vladimir Sementsov-Ogievskiy
                   ` (6 subsequent siblings)
  13 siblings, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-02-15 13:51 UTC (permalink / raw)
  To: qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, eblake, vsementsov, den

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 tests/qemu-iotests/iotests.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index 1bcc9ca57d..c1302a2f9b 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -23,13 +23,14 @@ import subprocess
 import string
 import unittest
 import sys
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts'))
-import qtest
 import struct
 import json
 import signal
 import logging
 
+sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts'))
+import qtest
+
 
 # This will not work if arguments contain spaces but is necessary if we
 # want to support the override options that ./check supports.
-- 
2.11.1

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

* [Qemu-devel] [PATCH 8/9] iotests: add file_path helper
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
                   ` (6 preceding siblings ...)
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 7/9] iotests.py: tiny refactor: move system imports up Vladimir Sementsov-Ogievskiy
@ 2018-02-15 13:51 ` Vladimir Sementsov-Ogievskiy
  2018-02-16 20:46   ` Eric Blake
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 9/9] iotests: new test 206 for NBD BLOCK_STATUS Vladimir Sementsov-Ogievskiy
                   ` (5 subsequent siblings)
  13 siblings, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-02-15 13:51 UTC (permalink / raw)
  To: qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, eblake, vsementsov, den

Simple way to have auto generated filenames with auto clenup. Like
FilePath but without using 'with' statement and without additional
indentation of the whole test.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 tests/qemu-iotests/iotests.py | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index c1302a2f9b..f2d05ca3fd 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -27,6 +27,7 @@ import struct
 import json
 import signal
 import logging
+import atexit
 
 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts'))
 import qtest
@@ -250,6 +251,37 @@ class FilePath(object):
         return False
 
 
+def file_path_remover():
+    for path in reversed(file_path_remover.paths):
+        try:
+            os.remove(path)
+        except OSError:
+            pass
+
+
+def file_path(*names):
+    ''' Another way to get auto-generated filename that cleans itself up.
+
+    Use it as simple as:
+
+    img_a, img_b = file_path('a.img', 'b.img')
+    sock = file_path('socket')
+    '''
+
+    if not hasattr(file_path_remover, 'paths'):
+        file_path_remover.paths = []
+        atexit.register(file_path_remover)
+
+    paths = []
+    for name in names:
+        filename = '{0}-{1}'.format(os.getpid(), name)
+        path = os.path.join(test_dir, filename)
+        file_path_remover.paths.append(path)
+        paths.append(path)
+
+    return paths[0] if len(paths) == 1 else paths
+
+
 class VM(qtest.QEMUQtestMachine):
     '''A QEMU VM'''
 
-- 
2.11.1

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

* [Qemu-devel] [PATCH 9/9] iotests: new test 206 for NBD BLOCK_STATUS
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
                   ` (7 preceding siblings ...)
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 8/9] iotests: add file_path helper Vladimir Sementsov-Ogievskiy
@ 2018-02-15 13:51 ` Vladimir Sementsov-Ogievskiy
  2018-02-16 21:02   ` Eric Blake
  2018-02-22 19:30 ` [Qemu-devel] [PATCH 0/9] nbd block status base:allocation no-reply
                   ` (4 subsequent siblings)
  13 siblings, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-02-15 13:51 UTC (permalink / raw)
  To: qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, eblake, vsementsov, den

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 tests/qemu-iotests/206     | 34 ++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/206.out |  2 ++
 tests/qemu-iotests/group   |  1 +
 3 files changed, 37 insertions(+)
 create mode 100644 tests/qemu-iotests/206
 create mode 100644 tests/qemu-iotests/206.out

diff --git a/tests/qemu-iotests/206 b/tests/qemu-iotests/206
new file mode 100644
index 0000000000..259e991ec6
--- /dev/null
+++ b/tests/qemu-iotests/206
@@ -0,0 +1,34 @@
+#!/usr/bin/env python
+#
+# Tests for NBD BLOCK_STATUS extension
+#
+# Copyright (c) 2018 Virtuozzo International GmbH
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+import iotests
+from iotests import qemu_img_create, qemu_io, qemu_img_verbose, qemu_nbd, \
+                    file_path
+
+iotests.verify_image_format(supported_fmts=['qcow2'])
+
+disk, nbd_sock = file_path('disk', 'nbd-sock')
+nbd_uri = 'nbd+unix:///exp?socket=' + nbd_sock
+
+qemu_img_create('-f', iotests.imgfmt, disk, '1M')
+qemu_io('-f', iotests.imgfmt, '-c', 'write 0 512K', disk)
+
+qemu_nbd('-k', nbd_sock, '-x', 'exp', '-f', iotests.imgfmt, disk)
+qemu_img_verbose('map', '-f', 'raw', '--output=json', nbd_uri)
diff --git a/tests/qemu-iotests/206.out b/tests/qemu-iotests/206.out
new file mode 100644
index 0000000000..0d29724e84
--- /dev/null
+++ b/tests/qemu-iotests/206.out
@@ -0,0 +1,2 @@
+[{ "start": 0, "length": 524288, "depth": 0, "zero": false, "data": true},
+{ "start": 524288, "length": 524288, "depth": 0, "zero": true, "data": false}]
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index a2dfe79d86..2c3925566a 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -202,3 +202,4 @@
 203 rw auto
 204 rw auto quick
 205 rw auto quick
+206 rw auto quick
-- 
2.11.1

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

* Re: [Qemu-devel] [PATCH 1/9] nbd/server: add nbd_opt_invalid helper
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 1/9] nbd/server: add nbd_opt_invalid helper Vladimir Sementsov-Ogievskiy
@ 2018-02-15 22:01   ` Eric Blake
  2018-03-02 12:40     ` Vladimir Sementsov-Ogievskiy
  0 siblings, 1 reply; 50+ messages in thread
From: Eric Blake @ 2018-02-15 22:01 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> NBD_REP_ERR_INVALID is often parameter to nbd_opt_drop and it would
> be used more in following patches. So, let's add a helper.
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>   nbd/server.c | 50 ++++++++++++++++++++++++++++++++++++--------------
>   1 file changed, 36 insertions(+), 14 deletions(-)

More than twice the lines added compared to what was removed, so it's a 
tough call whether this refactoring makes a common pattern easier or 
just adds burden in tracing what gets executed, just to remove a 
parameter.  I'm not opposed to the patch, but want to see how it helps 
the rest of the series.

At any rate, the conversion itself is done correctly, so if we keep the 
patch, it has earned:

Reviewed-by: Eric Blake <eblake@redhat.com>


>   
> +static int GCC_FMT_ATTR(4, 5)
> +nbd_opt_drop(NBDClient *client, uint32_t type, Error **errp,
> +             const char *fmt, ...)
> +{
> +    int ret;
> +    va_list va;
> +
> +    va_start(va, fmt);
> +    ret = nbd_opt_vdrop(client, type, errp, fmt, va);
> +    va_end(va);
> +
> +    return ret;
> +}
> +
> +static int GCC_FMT_ATTR(3, 4)
> +nbd_opt_invalid(NBDClient *client, Error **errp, const char *fmt, ...)

No documentation comments?

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

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

* Re: [Qemu-devel] [PATCH 2/9] nbd: change indenting in nbd.h
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 2/9] nbd: change indenting in nbd.h Vladimir Sementsov-Ogievskiy
@ 2018-02-15 22:03   ` Eric Blake
  0 siblings, 0 replies; 50+ messages in thread
From: Eric Blake @ 2018-02-15 22:03 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> Prepared indenting for the following patch.
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>   include/block/nbd.h | 22 +++++++++++-----------
>   1 file changed, 11 insertions(+), 11 deletions(-)
> 

> -#define NBD_OPT_INFO             (6)
> -#define NBD_OPT_GO               (7)
> -#define NBD_OPT_STRUCTURED_REPLY (8)
> +#define NBD_OPT_EXPORT_NAME       (1)
> +#define NBD_OPT_ABORT             (2)

Just one space added? Could go with a bit more, in case some later 
addition is also long.  But that's trivial, so either way,

Reviewed-by: Eric Blake <eblake@redhat.com>

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

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

* Re: [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part Vladimir Sementsov-Ogievskiy
@ 2018-02-15 23:02   ` Eric Blake
  2018-02-16 11:09     ` Vladimir Sementsov-Ogievskiy
  2018-02-16 13:21   ` Eric Blake
  1 sibling, 1 reply; 50+ messages in thread
From: Eric Blake @ 2018-02-15 23:02 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> Minimal realization: only one extent in server answer is supported.
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>   include/block/nbd.h |  33 ++++++
>   nbd/common.c        |  10 ++
>   nbd/server.c        | 310 +++++++++++++++++++++++++++++++++++++++++++++++++++-
>   3 files changed, 352 insertions(+), 1 deletion(-)
> 

> @@ -200,9 +227,15 @@ enum {
>   #define NBD_REPLY_TYPE_NONE          0
>   #define NBD_REPLY_TYPE_OFFSET_DATA   1
>   #define NBD_REPLY_TYPE_OFFSET_HOLE   2
> +#define NBD_REPLY_TYPE_BLOCK_STATUS  5

Stale; see nbd.git commit 56c77720 which changed this to 3.

> +++ b/nbd/server.c
> @@ -82,6 +82,15 @@ struct NBDExport {
>   
>   static QTAILQ_HEAD(, NBDExport) exports = QTAILQ_HEAD_INITIALIZER(exports);
>   
> +/* NBDExportMetaContexts represents list of selected by
> + * NBD_OPT_SET_META_CONTEXT contexts to be exported. */

represents a list of contexts to be exported, as selected by 
NBD_OPT_SET_META_CONTEXT.

> +typedef struct NBDExportMetaContexts {
> +    char export_name[NBD_MAX_NAME_SIZE + 1];

Would this work as const char * pointing at some other storage, instead 
of having to copy into this storage?

> +    bool valid; /* means that negotiation of the option finished without
> +                   errors */
> +    bool base_allocation; /* export base:allocation context (block status) */
> +} NBDExportMetaContexts;
> +
>   struct NBDClient {

> @@ -636,6 +646,201 @@ static QIOChannel *nbd_negotiate_handle_starttls(NBDClient *client,
>       return QIO_CHANNEL(tioc);
>   }
>   
> +/* nbd_alloc_read_size_string
> + *
> + * Read string in format
> + *   uint32_t len
> + *   len bytes string (not 0-terminated)
> + * String is allocated and pointer returned as @buf
> + *
> + * Return -errno on I/O error, 0 if option was completely handled by
> + * sending a reply about inconsistent lengths, or 1 on success. */
> +static int nbd_alloc_read_size_string(NBDClient *client, char **buf,
> +                                      Error **errp)
> +{
> +    int ret;
> +    uint32_t len;
> +
> +    ret = nbd_opt_read(client, &len, sizeof(len), errp);
> +    if (ret <= 0) {
> +        return ret;
> +    }
> +    cpu_to_be32s(&len);
> +
> +    *buf = g_try_malloc(len + 1);

I'd rather check that len is sane prior to trying to malloc.  Otherwise, 
a malicious client can convince us to waste time/space doing a large 
malloc before we finally realize that we can't read that many bytes 
after all.  And in fact, if you check len in advance, you can probably 
just use g_malloc() instead of g_try_malloc() (g_try_malloc() makes 
sense on a 1M allocation, where we can still allocate smaller stuff in 
reporting the error; but since NBD limits strings to 4k, if we fail at 
allocating 4k, we are probably already so hosed that our attempts to 
report the failure will also run out of memory and abort, so why not 
just abort now).

> +    if (*buf == NULL) {
> +        error_setg(errp, "No memory");
> +        return -ENOMEM;
> +    }
> +    (*buf)[len] = '\0';
> +
> +    ret = nbd_opt_read(client, *buf, len, errp);
> +    if (ret <= 0) {
> +        g_free(*buf);
> +        *buf = NULL;
> +    }
> +
> +    return ret;
> +}
> +
> +/* nbd_read_size_string

Will resume review here...

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

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

* Re: [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part
  2018-02-15 23:02   ` Eric Blake
@ 2018-02-16 11:09     ` Vladimir Sementsov-Ogievskiy
  2018-02-16 11:45       ` Eric Blake
  0 siblings, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-02-16 11:09 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

16.02.2018 02:02, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> Minimal realization: only one extent in server answer is supported.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>>   include/block/nbd.h |  33 ++++++
>>   nbd/common.c        |  10 ++
>>   nbd/server.c        | 310 
>> +++++++++++++++++++++++++++++++++++++++++++++++++++-
>>   3 files changed, 352 insertions(+), 1 deletion(-)
>>
>
>> @@ -200,9 +227,15 @@ enum {
>>   #define NBD_REPLY_TYPE_NONE          0
>>   #define NBD_REPLY_TYPE_OFFSET_DATA   1
>>   #define NBD_REPLY_TYPE_OFFSET_HOLE   2
>> +#define NBD_REPLY_TYPE_BLOCK_STATUS  5
>
> Stale; see nbd.git commit 56c77720 which changed this to 3.

Very unpleasant surprise. I understand that this is still experimental 
extension, but actually we use it =5 in production about one year. Can 
we revert it to 5?

>
>> +++ b/nbd/server.c
>> @@ -82,6 +82,15 @@ struct NBDExport {
>>     static QTAILQ_HEAD(, NBDExport) exports = 
>> QTAILQ_HEAD_INITIALIZER(exports);
>>   +/* NBDExportMetaContexts represents list of selected by
>> + * NBD_OPT_SET_META_CONTEXT contexts to be exported. */
>
> represents a list of contexts to be exported, as selected by 
> NBD_OPT_SET_META_CONTEXT.
>
>> +typedef struct NBDExportMetaContexts {
>> +    char export_name[NBD_MAX_NAME_SIZE + 1];
>
> Would this work as const char * pointing at some other storage, 
> instead of having to copy into this storage?

I'll think about

>
>> +    bool valid; /* means that negotiation of the option finished 
>> without
>> +                   errors */
>> +    bool base_allocation; /* export base:allocation context (block 
>> status) */
>> +} NBDExportMetaContexts;
>> +
>>   struct NBDClient {
>
>> @@ -636,6 +646,201 @@ static QIOChannel 
>> *nbd_negotiate_handle_starttls(NBDClient *client,
>>       return QIO_CHANNEL(tioc);
>>   }
>>   +/* nbd_alloc_read_size_string
>> + *
>> + * Read string in format
>> + *   uint32_t len
>> + *   len bytes string (not 0-terminated)
>> + * String is allocated and pointer returned as @buf
>> + *
>> + * Return -errno on I/O error, 0 if option was completely handled by
>> + * sending a reply about inconsistent lengths, or 1 on success. */
>> +static int nbd_alloc_read_size_string(NBDClient *client, char **buf,
>> +                                      Error **errp)
>> +{
>> +    int ret;
>> +    uint32_t len;
>> +
>> +    ret = nbd_opt_read(client, &len, sizeof(len), errp);
>> +    if (ret <= 0) {
>> +        return ret;
>> +    }
>> +    cpu_to_be32s(&len);
>> +
>> +    *buf = g_try_malloc(len + 1);
>
> I'd rather check that len is sane prior to trying to malloc. 
> Otherwise, a malicious client can convince us to waste time/space 
> doing a large malloc before we finally realize that we can't read that 
> many bytes after all.  And in fact, if you check len in advance, you 
> can probably just use g_malloc() instead of g_try_malloc() 
> (g_try_malloc() makes sense on a 1M allocation, where we can still 
> allocate smaller stuff in reporting the error; but since NBD limits 
> strings to 4k, if we fail at allocating 4k, we are probably already so 
> hosed that our attempts to report the failure will also run out of 
> memory and abort, so why not just abort now).

reasonable, will do

>
>> +    if (*buf == NULL) {
>> +        error_setg(errp, "No memory");
>> +        return -ENOMEM;
>> +    }
>> +    (*buf)[len] = '\0';
>> +
>> +    ret = nbd_opt_read(client, *buf, len, errp);
>> +    if (ret <= 0) {
>> +        g_free(*buf);
>> +        *buf = NULL;
>> +    }
>> +
>> +    return ret;
>> +}
>> +
>> +/* nbd_read_size_string
>
> Will resume review here...
>


-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part
  2018-02-16 11:09     ` Vladimir Sementsov-Ogievskiy
@ 2018-02-16 11:45       ` Eric Blake
  0 siblings, 0 replies; 50+ messages in thread
From: Eric Blake @ 2018-02-16 11:45 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 02/16/2018 05:09 AM, Vladimir Sementsov-Ogievskiy wrote:
> 16.02.2018 02:02, Eric Blake wrote:
>> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>>> Minimal realization: only one extent in server answer is supported.
>>>
>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> ---
>>>   include/block/nbd.h |  33 ++++++
>>>   nbd/common.c        |  10 ++
>>>   nbd/server.c        | 310 
>>> +++++++++++++++++++++++++++++++++++++++++++++++++++-
>>>   3 files changed, 352 insertions(+), 1 deletion(-)
>>>
>>
>>> @@ -200,9 +227,15 @@ enum {
>>>   #define NBD_REPLY_TYPE_NONE          0
>>>   #define NBD_REPLY_TYPE_OFFSET_DATA   1
>>>   #define NBD_REPLY_TYPE_OFFSET_HOLE   2
>>> +#define NBD_REPLY_TYPE_BLOCK_STATUS  5
>>
>> Stale; see nbd.git commit 56c77720 which changed this to 3.
> 
> Very unpleasant surprise. I understand that this is still experimental 
> extension, but actually we use it =5 in production about one year. Can 
> we revert it to 5?

For that, you'll have to ask on the upstream NBD list.  There may be 
other things that turn out to need tweaking as I get through the rest of 
your initial implementation, vs. what works well for interoperability, 
so having a distinct number for experimental vs. actual may be 
worthwhile for other reasons as well, even if it requires some glue code 
on your side to handle an older server sending 5 instead of 3 to a newer 
client.

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

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

* Re: [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part Vladimir Sementsov-Ogievskiy
  2018-02-15 23:02   ` Eric Blake
@ 2018-02-16 13:21   ` Eric Blake
  2018-02-16 14:43     ` Vladimir Sementsov-Ogievskiy
  2018-03-02 15:07     ` Vladimir Sementsov-Ogievskiy
  1 sibling, 2 replies; 50+ messages in thread
From: Eric Blake @ 2018-02-16 13:21 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> Minimal realization: only one extent in server answer is supported.
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---

continuing where I left off,


> +++ b/nbd/common.c
> @@ -75,6 +75,10 @@ const char *nbd_opt_lookup(uint32_t opt)
>           return "go";
>       case NBD_OPT_STRUCTURED_REPLY:
>           return "structured reply";
> +    case NBD_OPT_LIST_META_CONTEXT:
> +        return "list meta context";
> +    case NBD_OPT_SET_META_CONTEXT:
> +        return "set meta context";
>       default:

Should the changes to the header for new macros and to common.c for 
mapping bits to names be split into a separate patch, so that someone 
could backport just the new constants and then the client-side 
implementation, rather than being forced to backport the rest of the 
server implementation at the same time?

> +
> +/* nbd_read_size_string
> + *
> + * Read string in format
> + *   uint32_t len
> + *   len bytes string (not 0-terminated)
> + *
> + * @buf should be enough to store @max_len+1
> + *
> + * Return -errno on I/O error, 0 if option was completely handled by
> + * sending a reply about inconsistent lengths, or 1 on success. */
> +static int nbd_read_size_string(NBDClient *client, char *buf,
> +                                uint32_t max_len, Error **errp)

Would existing code benefit from using this helper?  If so, splitting it 
into a separate patch, plus converting initial clients to use it, would 
be worthwhile.


> +
> +static int nbd_negotiate_send_meta_context(NBDClient *client,
> +                                           const char *context,
> +                                           uint32_t context_id,
> +                                           Error **errp)

No comment documenting this function?

> +{
> +    NBDOptionReplyMetaContext opt;
> +    struct iovec iov[] = {
> +        {.iov_base = &opt, .iov_len = sizeof(opt)},
> +        {.iov_base = (void *)context, .iov_len = strlen(context)}

Casting to void* looks suspicious, but I see that it is casting away 
const.  Okay.

> +    };
> +
> +    set_be_option_rep(&opt.h, client->opt, NBD_REP_META_CONTEXT,
> +                      sizeof(opt) - sizeof(opt.h) + iov[1].iov_len);
> +    stl_be_p(&opt.context_id, context_id);
> +
> +    return qio_channel_writev_all(client->ioc, iov, 2, errp) < 0 ? -EIO : 0;
> +}
> +
> +static void nbd_meta_base_query(NBDExportMetaContexts *meta, const char *query)
> +{

Again, function comments are useful.

> +    if (query[0] == '\0' || strcmp(query, "allocation") == 0) {
> +        /* Note: empty query should select all contexts within base
> +         * namespace. */
> +        meta->base_allocation = true;

 From the client perspective, this handling of the empty leaf-name works 
well for NBD_OPT_LIST_META_CONTEXT (I want to see what leaf nodes the 
server supports), but not so well for NBD_OPT_SET_META_CONTEXT (asking 
the server to send ALL base allocations, even when I don't necessarily 
know how to interpret anything other than base:allocation, is a waste). 
So this function needs a bool parameter that says whether it is being 
invoked from _LIST (empty string okay, to advertise ALL base leaf names 
back to client, which for now is just base:allocation) or from _SET 
(empty string is ignored as invalid; client has to specifically ask for 
base:allocation by name).

> +    }
> +}
> +
> +/* nbd_negotiate_meta_query
> + * Return -errno on I/O error, 0 if option was completely handled by
> + * sending a reply about inconsistent lengths, or 1 on success. */
> +static int nbd_negotiate_meta_query(NBDClient *client,
> +                                    NBDExportMetaContexts *meta, Error **errp)
> +{
> +    int ret;
> +    char *query, *colon, *namespace, *subquery;

Is it worth stack-allocating query here, so you don't have to g_free() 
it later?  NBD limits the maximum string to 4k, which is a little bit 
big for stack allocation (on an operating system with 4k pages, 
allocating more than 4k on the stack in one function risks missing the 
guard page on stack overflow), but we also have the benefit that we KNOW 
that the set of meta-context namespaces that we support have a much 
smaller maximum limit of what we even care about.

> +
> +    ret = nbd_alloc_read_size_string(client, &query, errp);
> +    if (ret <= 0) {
> +        return ret;
> +    }
> +
> +    colon = strchr(query, ':');
> +    if (colon == NULL) {
> +        ret = nbd_opt_invalid(client, errp, "no colon in query");
> +        goto out;

Hmm, that puts a slight wrinkle into my proposal, or else maybe it is 
something I should bring up on the NBD list.  If we only read 5 
characters (because the max namespace WE support is "base:"), but a 
client asks for namespace "X-longname:", we should gracefully ignore the 
client's request; while we still want to reply with an error to a client 
that asks for "garbage" with no colon at all.  The question for the NBD 
spec, then, is whether detecting bad client requests that didn't use 
colon is mandatory for the server (meaning we MUST read the entire 
namespace request, and search for the colon) or merely best effort (we 
only have to read 5 characters, and if we silently ignore instead of 
diagnose a bad namespace request that was longer than that, oh well). 
Worded from the client, it switches to a question of whether the client 
should expect the server to diagnose all requests, or must be prepared 
for the server to ignore requests even where those requests are bogus. 
Or, the NBD spec may change slightly to pass namespace and leafname as 
separate fields, both with lengths, rather than a colon, to make it 
easier for the server to skip over an unknown namespace/leaf pair 
without having to parse whether a colon was present.  I'll send that in 
a separate email (the upstream NBD list doesn't need to see all my 
review comments on this thread).

> +    }
> +    *colon = '\0';
> +    namespace = query;
> +    subquery = colon + 1;
> +
> +    if (strcmp(namespace, "base") == 0) {
> +        nbd_meta_base_query(meta, subquery);
> +    }
> +
> +out:
> +    g_free(query);
> +    return ret;
> +}
> +
> +/* nbd_negotiate_meta_queries
> + * Handle NBD_OPT_LIST_META_CONTEXT and NBD_OPT_SET_META_CONTEXT
> + *
> + * Return -errno on I/O error, 0 if option was completely handled by
> + * sending a reply about inconsistent lengths, or 1 on success. */
> +static int nbd_negotiate_meta_queries(NBDClient *client,
> +                                      NBDExportMetaContexts *meta, Error **errp)
> +{

The two options can mostly share code, but see my earlier comments about 
how I think you need to distinguish between list ('base:' is a valid 
query) and set ('base:' is an invalid request).

> +    int ret;
> +    NBDExport *exp;
> +    NBDExportMetaContexts local_meta;
> +    uint32_t nb_queries;
> +    int i;
> +
> +    assert(client->structured_reply);

Hmm.  Asserting here is bad if the client can get here without 
negotiating structured reply (I'll have to see if you checked that in 
the caller... [1])

> +
> +    if (meta == NULL) {

Bikeshedding - I like writing 'if (!meta) {' as it is fewer characters.

The function documentation should mention that 'meta' may be NULL from 
the caller.  But (without seeing the callers yet), why?  Are you arguing 
that _LIST uses local_meta (because it only needs something for the 
duration of the reply) while _SET supplies a pre-existing meta (that is 
associated with the server state, and used when the client finally calls 
NBD_OPT_GO)?

> +        meta = &local_meta;
> +    }
> +
> +    memset(meta, 0, sizeof(*meta));
> +
> +    ret = nbd_read_size_string(client, meta->export_name,
> +                               NBD_MAX_NAME_SIZE, errp);

Revisiting a question I raised in my first half review - you saved the 
name as part of the struct because we have to later compare that the 
final OPT_SET export name matches the request during OPT_GO (if they 
don't match, then we have no contexts to serve after all).  So a 'const 
char *' won't work, but maybe the struct could use a 'char *' pointing 
to malloc'd storage rather than char[MAX_NAME] that reserves array space 
that is mostly unused for the typical name that is much shorter than the 
maximum name length.

> +    if (ret <= 0) {
> +        return ret;
> +    }
> +
> +    exp = nbd_export_find(meta->export_name);
> +    if (exp == NULL) {
> +        return nbd_opt_invalid(client, errp,
> +                               "export '%s' not present", meta->export_name);

Wrong error; I think NBD_REP_ERR_UNKNOWN is better here.

> +    }
> +
> +    ret = nbd_opt_read(client, &nb_queries, sizeof(nb_queries), errp);
> +    if (ret <= 0) {
> +        return ret;
> +    }
> +    cpu_to_be32s(&nb_queries);
> +
> +    for (i = 0; i < nb_queries; ++i) {
> +        ret = nbd_negotiate_meta_query(client, meta, errp);
> +        if (ret <= 0) {
> +            return ret;
> +        }
> +    }

Interesting choice - you parse all queries prior to preparing any 
response.  I guess you could also reply as you read, but it doesn't 
change the fact that you have to remember what the final _SET selected 
for use later on.  So this works.

> +
> +    if (meta->base_allocation) {
> +        ret = nbd_negotiate_send_meta_context(client, "base:allocation",
> +                                              NBD_META_ID_BASE_ALLOCATION,
> +                                              errp);

Since earlier you have #define NBD_META_ID_BASE_ALLOCATION 0, that means 
you use the context ID of 0 in response to both _LIST (where the spec 
says the server SHOULD send 0, but the client SHOULD ignore the id 
field) and for _SET (where the client needs a unique ID for every 
separate context that actually got selected - but since we only select a 
single context, we get away with it).  I suspect later patches will add 
additional contexts where you'll have to actually worry about context 
ids (and always sending 0 in response to _LIST), but for now, this works :)

> +        if (ret < 0) {
> +            return ret;
> +        }
> +    }
> +
> +    ret = nbd_negotiate_send_rep(client, NBD_REP_ACK, errp);
> +    if (ret == 0) {
> +        meta->valid = true;
> +    }

Interesting - meta->valid can be true even if 0 contexts were selected; 
I presume we use this later on to decide whether to reply with EINVAL 
vs. an empty list if a client uses NBD_CMD_BLOCK_STATUS without a valid 
_SET call.  Then again, the NBD spec currently states that 
NBD_CMD_BLOCK_STATUS should not be used even if _SET succeeded, if the 
_SET didn't return at least one context.

> +
> +    return ret;
> +}
> +
>   /* nbd_negotiate_options
>    * Process all NBD_OPT_* client option commands, during fixed newstyle
>    * negotiation.
> @@ -826,6 +1031,22 @@ static int nbd_negotiate_options(NBDClient *client, uint16_t myflags,
>                   }
>                   break;
>   
> +            case NBD_OPT_LIST_META_CONTEXT:
> +            case NBD_OPT_SET_META_CONTEXT:
> +                if (!client->structured_reply) {
> +                    ret = nbd_opt_invalid(
> +                            client, errp,
> +                            "request option '%s' when structured reply "
> +                            "is not negotiated", nbd_opt_lookup(option));

[1] okay, you did filter out clients that request out of order.

> +                } else if (option == NBD_OPT_LIST_META_CONTEXT) {
> +                    ret = nbd_negotiate_meta_queries(client, NULL, errp);
> +                } else {
> +                    ret = nbd_negotiate_meta_queries(client,
> +                                                     &client->export_meta,
> +                                                     errp);

Okay, so you DO have a difference on whether you pass in 'meta' based on 
whether it is a local response vs. setting things for later.

> +                }
> +                break;
> +
>               default:
>                   ret = nbd_opt_drop(client, NBD_REP_ERR_UNSUP, errp,
>                                      "Unsupported option 0x%" PRIx32 " (%s)",
> @@ -1446,6 +1667,78 @@ static int coroutine_fn nbd_co_send_structured_error(NBDClient *client,
>       return nbd_co_send_iov(client, iov, 1 + !!iov[1].iov_len, errp);
>   }
>   
> +static int blockstatus_to_extent_be(BlockDriverState *bs, uint64_t offset,
> +                                    uint64_t bytes, NBDExtent *extent)
> +{
> +    uint64_t tail_bytes = bytes;
> +
> +    while (tail_bytes) {

I might have named this 'remaining'

> +        uint32_t flags;
> +        int64_t num;
> +        int ret = bdrv_block_status_above(bs, NULL, offset, tail_bytes, &num,
> +                                          NULL, NULL);
> +        if (ret < 0) {
> +            return ret;
> +        }
> +
> +        flags = (ret & BDRV_BLOCK_ALLOCATED ? 0 : NBD_STATE_HOLE) |
> +                (ret & BDRV_BLOCK_ZERO      ? NBD_STATE_ZERO : 0);

Looks like the correct bit mapping to me.

> +
> +        if (tail_bytes == bytes) {
> +            extent->flags = flags;
> +        }
> +
> +        if (flags != extent->flags) {
> +            break;
> +        }
> +
> +        offset += num;
> +        tail_bytes -= num;
> +    }
> +
> +    cpu_to_be32s(&extent->flags);
> +    extent->length = cpu_to_be32(bytes - tail_bytes);

This only computes one extent, but tries to find the longest extent 
possible (if two consecutive bdrv_block_status calls return the same 
status, perhaps because of fragmentation).  Presumably this is called in 
a loop to find a full list of extents covering the client's entire 
request? [2]

> +
> +    return 0;
> +}
> +
> +/* nbd_co_send_extents
> + * @extents should be in big-endian */
> +static int nbd_co_send_extents(NBDClient *client, uint64_t handle,
> +                               NBDExtent *extents, unsigned nb_extents,
> +                               uint32_t context_id, Error **errp)
> +{
> +    NBDStructuredMeta chunk;
> +
> +    struct iovec iov[] = {
> +        {.iov_base = &chunk, .iov_len = sizeof(chunk)},
> +        {.iov_base = extents, .iov_len = nb_extents * sizeof(extents[0])}
> +    };
> +
> +    set_be_chunk(&chunk.h, NBD_REPLY_FLAG_DONE, NBD_REPLY_TYPE_BLOCK_STATUS,
> +                 handle, sizeof(chunk) - sizeof(chunk.h) + iov[1].iov_len);

This says you can only send a single chunk, which matches the fact that 
right now you support exactly one context type.  Presumably later 
patches tweak this.

> +    stl_be_p(&chunk.context_id, context_id);
> +
> +    return nbd_co_send_iov(client, iov, 2, errp);
> +}
> +
> +static int nbd_co_send_block_status(NBDClient *client, uint64_t handle,
> +                                    BlockDriverState *bs, uint64_t offset,
> +                                    uint64_t length, uint32_t context_id,
> +                                    Error **errp)

No function comment?

> +{
> +    int ret;
> +    NBDExtent extent;
> +
> +    ret = blockstatus_to_extent_be(bs, offset, length, &extent);
> +    if (ret < 0) {
> +        return nbd_co_send_structured_error(
> +                client, handle, -ret, "can't get block status", errp);
> +    }
> +
> +    return nbd_co_send_extents(client, handle, &extent, 1, context_id, errp);

[2] Okay, no looping to answer the client's entire request, so that may 
be something you add in a later patch, to keep this initial patch 
minimal.  But at least it matches your commit message.

> +}
> +
>   /* nbd_co_receive_request
>    * Collect a client request. Return 0 if request looks valid, -EIO to drop
>    * connection right away, and any other negative value to report an error to
> @@ -1523,6 +1816,8 @@ static int nbd_co_receive_request(NBDRequestData *req, NBDRequest *request,
>           valid_flags |= NBD_CMD_FLAG_DF;
>       } else if (request->type == NBD_CMD_WRITE_ZEROES) {
>           valid_flags |= NBD_CMD_FLAG_NO_HOLE;
> +    } else if (request->type == NBD_CMD_BLOCK_STATUS) {
> +        valid_flags |= NBD_CMD_FLAG_REQ_ONE;
>       }
>       if (request->flags & ~valid_flags) {
>           error_setg(errp, "unsupported flags for command %s (got 0x%x)",
> @@ -1650,6 +1945,19 @@ static coroutine_fn void nbd_trip(void *opaque)
>           }
>   
>           break;
> +    case NBD_CMD_BLOCK_STATUS:
> +        if (client->export_meta.base_allocation) {
> +            ret = nbd_co_send_block_status(req->client, request.handle,
> +                                           blk_bs(exp->blk), request.from,
> +                                           request.len,
> +                                           NBD_META_ID_BASE_ALLOCATION,
> +                                           &local_err);

No check of client->export_meta.valid?

> +        } else {
> +            ret = -EINVAL;
> +            error_setg(&local_err, "CMD_BLOCK_STATUS not negotiated");
> +        }

At this point, we've either sent the final structured chunk, or we've 
sent nothing and have ret < 0;...

> +
> +        break;
>       default:
>           error_setg(&local_err, "invalid request type (%" PRIu32 ") received",
>                      request.type);
> @@ -1680,7 +1988,7 @@ reply:

     if (client->structured_reply &&
         (ret < 0 || request.type == NBD_CMD_READ)) {

>               ret = nbd_co_send_structured_done(req->client, request.handle,
>                                                 &local_err);
>           }

...iIf the client negotiated structured reply, then we've sent the error 
message.  But if the client did NOT negotiate structured reply, then...

> -    } else {
> +    } else if (request.type != NBD_CMD_BLOCK_STATUS) {

...we fail to reply at all.  Oops.  That's not good for 
interoperability.  You'll need to make sure that we reply with EINVAL 
even if the client (mistakenly) calls NBD_CMD_BLOCK_STATUS without 
negotiating structured replies.

>           ret = nbd_co_send_simple_reply(req->client, request.handle,
>                                          ret < 0 ? -ret : 0,
>                                          req->data, reply_data_len, &local_err);
> 

Also missing from the patch - where do you validate that the export name 
in client->export_meta matches the export name in NBD_OPT_GO?  If they 
don't match, then export_meta should be discarded.

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

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

* Re: [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part
  2018-02-16 13:21   ` Eric Blake
@ 2018-02-16 14:43     ` Vladimir Sementsov-Ogievskiy
  2018-02-16 17:01       ` Eric Blake
  2018-03-02 15:07     ` Vladimir Sementsov-Ogievskiy
  1 sibling, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-02-16 14:43 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

16.02.2018 16:21, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> Minimal realization: only one extent in server answer is supported.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>
> continuing where I left off,
>
>
>> +++ b/nbd/common.c
>> @@ -75,6 +75,10 @@ const char *nbd_opt_lookup(uint32_t opt)
>>           return "go";
>>       case NBD_OPT_STRUCTURED_REPLY:
>>           return "structured reply";
>> +    case NBD_OPT_LIST_META_CONTEXT:
>> +        return "list meta context";
>> +    case NBD_OPT_SET_META_CONTEXT:
>> +        return "set meta context";
>>       default:
>
> Should the changes to the header for new macros and to common.c for 
> mapping bits to names be split into a separate patch, so that someone 
> could backport just the new constants and then the client-side 
> implementation, rather than being forced to backport the rest of the 
> server implementation at the same time?

Not a problem, I can split. I've thought about it, but decided for first 
roll send it as one patch.

>
>> +
>> +/* nbd_read_size_string
>> + *
>> + * Read string in format
>> + *   uint32_t len
>> + *   len bytes string (not 0-terminated)
>> + *
>> + * @buf should be enough to store @max_len+1
>> + *
>> + * Return -errno on I/O error, 0 if option was completely handled by
>> + * sending a reply about inconsistent lengths, or 1 on success. */
>> +static int nbd_read_size_string(NBDClient *client, char *buf,
>> +                                uint32_t max_len, Error **errp)
>
> Would existing code benefit from using this helper?  If so, splitting 
> it into a separate patch, plus converting initial clients to use it, 
> would be worthwhile.
>
>
>> +
>> +static int nbd_negotiate_send_meta_context(NBDClient *client,
>> +                                           const char *context,
>> +                                           uint32_t context_id,
>> +                                           Error **errp)
>
> No comment documenting this function?
>
>> +{
>> +    NBDOptionReplyMetaContext opt;
>> +    struct iovec iov[] = {
>> +        {.iov_base = &opt, .iov_len = sizeof(opt)},
>> +        {.iov_base = (void *)context, .iov_len = strlen(context)}
>
> Casting to void* looks suspicious, but I see that it is casting away 
> const.  Okay.
>
>> +    };
>> +
>> +    set_be_option_rep(&opt.h, client->opt, NBD_REP_META_CONTEXT,
>> +                      sizeof(opt) - sizeof(opt.h) + iov[1].iov_len);
>> +    stl_be_p(&opt.context_id, context_id);
>> +
>> +    return qio_channel_writev_all(client->ioc, iov, 2, errp) < 0 ? 
>> -EIO : 0;
>> +}
>> +
>> +static void nbd_meta_base_query(NBDExportMetaContexts *meta, const 
>> char *query)
>> +{
>
> Again, function comments are useful.
>
>> +    if (query[0] == '\0' || strcmp(query, "allocation") == 0) {
>> +        /* Note: empty query should select all contexts within base
>> +         * namespace. */
>> +        meta->base_allocation = true;
>
> From the client perspective, this handling of the empty leaf-name 
> works well for NBD_OPT_LIST_META_CONTEXT (I want to see what leaf 
> nodes the server supports), but not so well for 
> NBD_OPT_SET_META_CONTEXT (asking the server to send ALL base 
> allocations, even when I don't necessarily know how to interpret 
> anything other than base:allocation, is a waste). So this function 
> needs a bool parameter that says whether it is being invoked from 
> _LIST (empty string okay, to advertise ALL base leaf names back to 
> client, which for now is just base:allocation) or from _SET (empty 
> string is ignored as invalid; client has to specifically ask for 
> base:allocation by name).

"empty string is ignored as invalid", hm, do we have this in spec? I 
think SET and LIST must select exactly same sets of contexts. It is 
strange behavior of client to set "base:", but it is its decision. And I 
don't thing that it is invalid.
Formally we may answer with NBD_REP_ERR_TOO_BIG, but it will look weird, 
as client see that both base: and base:allocation returns _one_  
context, but in one case it is too big. But if we will have several 
base: contextes, server may fairly answer with NBD_REP_ERR_TOO_BIG.

So, I think for now the code is ok.

Also, I don't see NBD_REP_ERR_TOO_BIG possible reply in 
NBD_OPT_LIST_META_CONTEXT description. Should it be here?

>
>> +    }
>> +}
>> +
>> +/* nbd_negotiate_meta_query
>> + * Return -errno on I/O error, 0 if option was completely handled by
>> + * sending a reply about inconsistent lengths, or 1 on success. */
>> +static int nbd_negotiate_meta_query(NBDClient *client,
>> +                                    NBDExportMetaContexts *meta, 
>> Error **errp)
>> +{
>> +    int ret;
>> +    char *query, *colon, *namespace, *subquery;
>
> Is it worth stack-allocating query here, so you don't have to g_free() 
> it later?  NBD limits the maximum string to 4k, which is a little bit 
> big for stack allocation (on an operating system with 4k pages, 
> allocating more than 4k on the stack in one function risks missing the 
> guard page on stack overflow), but we also have the benefit that we 
> KNOW that the set of meta-context namespaces that we support have a 
> much smaller maximum limit of what we even care about.

it is not stack allocated, nbd_alloc_read_size_string calls g_malloc.

>
>> +
>> +    ret = nbd_alloc_read_size_string(client, &query, errp);
>> +    if (ret <= 0) {
>> +        return ret;
>> +    }
>> +
>> +    colon = strchr(query, ':');
>> +    if (colon == NULL) {
>> +        ret = nbd_opt_invalid(client, errp, "no colon in query");
>> +        goto out;
>
> Hmm, that puts a slight wrinkle into my proposal, or else maybe it is 
> something I should bring up on the NBD list.  If we only read 5 
> characters (because the max namespace WE support is "base:"), but a 
> client asks for namespace "X-longname:", we should gracefully ignore 
> the client's request; while we still want to reply with an error to a 
> client that asks for "garbage" with no colon at all. The question for 
> the NBD spec, then, is whether detecting bad client requests that 
> didn't use colon is mandatory for the server (meaning we MUST read the 
> entire namespace request, and search for the colon) or merely best 
> effort (we only have to read 5 characters, and if we silently ignore 
> instead of diagnose a bad namespace request that was longer than that, 
> oh well). Worded from the client, it switches to a question of whether 
> the client should expect the server to diagnose all requests, or must 
> be prepared for the server to ignore requests even where those 
> requests are bogus. Or, the NBD spec may change slightly to pass 
> namespace and leafname as separate fields, both with lengths, rather 
> than a colon, to make it easier for the server to skip over an unknown 
> namespace/leaf pair without having to parse whether a colon was 
> present.  I'll send that in a separate email (the upstream NBD list 
> doesn't need to see all my review comments on this thread).
>
>> +    }
>> +    *colon = '\0';
>> +    namespace = query;
>> +    subquery = colon + 1;
>> +
>> +    if (strcmp(namespace, "base") == 0) {
>> +        nbd_meta_base_query(meta, subquery);
>> +    }
>> +
>> +out:
>> +    g_free(query);
>> +    return ret;
>> +}
>> +
>> +/* nbd_negotiate_meta_queries
>> + * Handle NBD_OPT_LIST_META_CONTEXT and NBD_OPT_SET_META_CONTEXT
>> + *
>> + * Return -errno on I/O error, 0 if option was completely handled by
>> + * sending a reply about inconsistent lengths, or 1 on success. */
>> +static int nbd_negotiate_meta_queries(NBDClient *client,
>> +                                      NBDExportMetaContexts *meta, 
>> Error **errp)
>> +{
>
> The two options can mostly share code, but see my earlier comments 
> about how I think you need to distinguish between list ('base:' is a 
> valid query) and set ('base:' is an invalid request).
>
>> +    int ret;
>> +    NBDExport *exp;
>> +    NBDExportMetaContexts local_meta;
>> +    uint32_t nb_queries;
>> +    int i;
>> +
>> +    assert(client->structured_reply);
>
> Hmm.  Asserting here is bad if the client can get here without 
> negotiating structured reply (I'll have to see if you checked that in 
> the caller... [1])
>
>> +
>> +    if (meta == NULL) {
>
> Bikeshedding - I like writing 'if (!meta) {' as it is fewer characters.
>
> The function documentation should mention that 'meta' may be NULL from 
> the caller.  But (without seeing the callers yet), why?  Are you 
> arguing that _LIST uses local_meta (because it only needs something 
> for the duration of the reply) while _SET supplies a pre-existing meta 
> (that is associated with the server state, and used when the client 
> finally calls NBD_OPT_GO)?

yes.

>
>> +        meta = &local_meta;
>> +    }
>> +
>> +    memset(meta, 0, sizeof(*meta));
>> +
>> +    ret = nbd_read_size_string(client, meta->export_name,
>> +                               NBD_MAX_NAME_SIZE, errp);
>
> Revisiting a question I raised in my first half review - you saved the 
> name as part of the struct because we have to later compare that the 
> final OPT_SET export name matches the request during OPT_GO (if they 
> don't match, then we have no contexts to serve after all).  So a 
> 'const char *' won't work, but maybe the struct could use a 'char *' 
> pointing to malloc'd storage rather than char[MAX_NAME] that reserves 
> array space that is mostly unused for the typical name that is much 
> shorter than the maximum name length.
>
>> +    if (ret <= 0) {
>> +        return ret;
>> +    }
>> +
>> +    exp = nbd_export_find(meta->export_name);
>> +    if (exp == NULL) {
>> +        return nbd_opt_invalid(client, errp,
>> +                               "export '%s' not present", 
>> meta->export_name);
>
> Wrong error; I think NBD_REP_ERR_UNKNOWN is better here.
>
>> +    }
>> +
>> +    ret = nbd_opt_read(client, &nb_queries, sizeof(nb_queries), errp);
>> +    if (ret <= 0) {
>> +        return ret;
>> +    }
>> +    cpu_to_be32s(&nb_queries);
>> +
>> +    for (i = 0; i < nb_queries; ++i) {
>> +        ret = nbd_negotiate_meta_query(client, meta, errp);
>> +        if (ret <= 0) {
>> +            return ret;
>> +        }
>> +    }
>
> Interesting choice - you parse all queries prior to preparing any 
> response.  I guess you could also reply as you read, but it doesn't 
> change the fact that you have to remember what the final _SET selected 
> for use later on.  So this works.
>
>> +
>> +    if (meta->base_allocation) {
>> +        ret = nbd_negotiate_send_meta_context(client, 
>> "base:allocation",
>> + NBD_META_ID_BASE_ALLOCATION,
>> +                                              errp);
>
> Since earlier you have #define NBD_META_ID_BASE_ALLOCATION 0, that 
> means you use the context ID of 0 in response to both _LIST (where the 
> spec says the server SHOULD send 0, but the client SHOULD ignore the 
> id field) and for _SET (where the client needs a unique ID for every 
> separate context that actually got selected - but since we only select 
> a single context, we get away with it).  I suspect later patches will 
> add additional contexts where you'll have to actually worry about 
> context ids (and always sending 0 in response to _LIST), but for now, 
> this works :)
>
>> +        if (ret < 0) {
>> +            return ret;
>> +        }
>> +    }
>> +
>> +    ret = nbd_negotiate_send_rep(client, NBD_REP_ACK, errp);
>> +    if (ret == 0) {
>> +        meta->valid = true;
>> +    }
>
> Interesting - meta->valid can be true even if 0 contexts were 
> selected; I presume we use this later on to decide whether to reply 
> with EINVAL vs. an empty list if a client uses NBD_CMD_BLOCK_STATUS 
> without a valid _SET call.  Then again, the NBD spec currently states 
> that NBD_CMD_BLOCK_STATUS should not be used even if _SET succeeded, 
> if the _SET didn't return at least one context.
>
>> +
>> +    return ret;
>> +}
>> +
>>   /* nbd_negotiate_options
>>    * Process all NBD_OPT_* client option commands, during fixed newstyle
>>    * negotiation.
>> @@ -826,6 +1031,22 @@ static int nbd_negotiate_options(NBDClient 
>> *client, uint16_t myflags,
>>                   }
>>                   break;
>>   +            case NBD_OPT_LIST_META_CONTEXT:
>> +            case NBD_OPT_SET_META_CONTEXT:
>> +                if (!client->structured_reply) {
>> +                    ret = nbd_opt_invalid(
>> +                            client, errp,
>> +                            "request option '%s' when structured 
>> reply "
>> +                            "is not negotiated", 
>> nbd_opt_lookup(option));
>
> [1] okay, you did filter out clients that request out of order.
>
>> +                } else if (option == NBD_OPT_LIST_META_CONTEXT) {
>> +                    ret = nbd_negotiate_meta_queries(client, NULL, 
>> errp);
>> +                } else {
>> +                    ret = nbd_negotiate_meta_queries(client,
>> + &client->export_meta,
>> +                                                     errp);
>
> Okay, so you DO have a difference on whether you pass in 'meta' based 
> on whether it is a local response vs. setting things for later.
>
>> +                }
>> +                break;
>> +
>>               default:
>>                   ret = nbd_opt_drop(client, NBD_REP_ERR_UNSUP, errp,
>>                                      "Unsupported option 0x%" PRIx32 
>> " (%s)",
>> @@ -1446,6 +1667,78 @@ static int coroutine_fn 
>> nbd_co_send_structured_error(NBDClient *client,
>>       return nbd_co_send_iov(client, iov, 1 + !!iov[1].iov_len, errp);
>>   }
>>   +static int blockstatus_to_extent_be(BlockDriverState *bs, uint64_t 
>> offset,
>> +                                    uint64_t bytes, NBDExtent *extent)
>> +{
>> +    uint64_t tail_bytes = bytes;
>> +
>> +    while (tail_bytes) {
>
> I might have named this 'remaining'
>
>> +        uint32_t flags;
>> +        int64_t num;
>> +        int ret = bdrv_block_status_above(bs, NULL, offset, 
>> tail_bytes, &num,
>> +                                          NULL, NULL);
>> +        if (ret < 0) {
>> +            return ret;
>> +        }
>> +
>> +        flags = (ret & BDRV_BLOCK_ALLOCATED ? 0 : NBD_STATE_HOLE) |
>> +                (ret & BDRV_BLOCK_ZERO      ? NBD_STATE_ZERO : 0);
>
> Looks like the correct bit mapping to me.
>
>> +
>> +        if (tail_bytes == bytes) {
>> +            extent->flags = flags;
>> +        }
>> +
>> +        if (flags != extent->flags) {
>> +            break;
>> +        }
>> +
>> +        offset += num;
>> +        tail_bytes -= num;
>> +    }
>> +
>> +    cpu_to_be32s(&extent->flags);
>> +    extent->length = cpu_to_be32(bytes - tail_bytes);
>
> This only computes one extent, but tries to find the longest extent 
> possible (if two consecutive bdrv_block_status calls return the same 
> status, perhaps because of fragmentation).  Presumably this is called 
> in a loop to find a full list of extents covering the client's entire 
> request? [2]

yes. And tiny overhead is one extra found extent of other type, so this 
function can't be efficiently reused to implement several extents. 
However, I don't see real usage for this now, as we don't have multi 
extent blockstatus support in block layer.. And code for dirty bitmap 
would be separate anyway.

>
>> +
>> +    return 0;
>> +}
>> +
>> +/* nbd_co_send_extents
>> + * @extents should be in big-endian */
>> +static int nbd_co_send_extents(NBDClient *client, uint64_t handle,
>> +                               NBDExtent *extents, unsigned nb_extents,
>> +                               uint32_t context_id, Error **errp)
>> +{
>> +    NBDStructuredMeta chunk;
>> +
>> +    struct iovec iov[] = {
>> +        {.iov_base = &chunk, .iov_len = sizeof(chunk)},
>> +        {.iov_base = extents, .iov_len = nb_extents * 
>> sizeof(extents[0])}
>> +    };
>> +
>> +    set_be_chunk(&chunk.h, NBD_REPLY_FLAG_DONE, 
>> NBD_REPLY_TYPE_BLOCK_STATUS,
>> +                 handle, sizeof(chunk) - sizeof(chunk.h) + 
>> iov[1].iov_len);
>
> This says you can only send a single chunk, which matches the fact 
> that right now you support exactly one context type.  Presumably later 
> patches tweak this.
>
>> +    stl_be_p(&chunk.context_id, context_id);
>> +
>> +    return nbd_co_send_iov(client, iov, 2, errp);
>> +}
>> +
>> +static int nbd_co_send_block_status(NBDClient *client, uint64_t handle,
>> +                                    BlockDriverState *bs, uint64_t 
>> offset,
>> +                                    uint64_t length, uint32_t 
>> context_id,
>> +                                    Error **errp)
>
> No function comment?
>
>> +{
>> +    int ret;
>> +    NBDExtent extent;
>> +
>> +    ret = blockstatus_to_extent_be(bs, offset, length, &extent);
>> +    if (ret < 0) {
>> +        return nbd_co_send_structured_error(
>> +                client, handle, -ret, "can't get block status", errp);
>> +    }
>> +
>> +    return nbd_co_send_extents(client, handle, &extent, 1, 
>> context_id, errp);
>
> [2] Okay, no looping to answer the client's entire request, so that 
> may be something you add in a later patch, to keep this initial patch 
> minimal.  But at least it matches your commit message.
>
>> +}
>> +
>>   /* nbd_co_receive_request
>>    * Collect a client request. Return 0 if request looks valid, -EIO 
>> to drop
>>    * connection right away, and any other negative value to report an 
>> error to
>> @@ -1523,6 +1816,8 @@ static int 
>> nbd_co_receive_request(NBDRequestData *req, NBDRequest *request,
>>           valid_flags |= NBD_CMD_FLAG_DF;
>>       } else if (request->type == NBD_CMD_WRITE_ZEROES) {
>>           valid_flags |= NBD_CMD_FLAG_NO_HOLE;
>> +    } else if (request->type == NBD_CMD_BLOCK_STATUS) {
>> +        valid_flags |= NBD_CMD_FLAG_REQ_ONE;
>>       }
>>       if (request->flags & ~valid_flags) {
>>           error_setg(errp, "unsupported flags for command %s (got 
>> 0x%x)",
>> @@ -1650,6 +1945,19 @@ static coroutine_fn void nbd_trip(void *opaque)
>>           }
>>             break;
>> +    case NBD_CMD_BLOCK_STATUS:
>> +        if (client->export_meta.base_allocation) {
>> +            ret = nbd_co_send_block_status(req->client, request.handle,
>> +                                           blk_bs(exp->blk), 
>> request.from,
>> +                                           request.len,
>> + NBD_META_ID_BASE_ALLOCATION,
>> +                                           &local_err);
>
> No check of client->export_meta.valid?

hmm, strange, looks like I don't use .valid at all. worth add.

>
>> +        } else {
>> +            ret = -EINVAL;
>> +            error_setg(&local_err, "CMD_BLOCK_STATUS not negotiated");
>> +        }
>
> At this point, we've either sent the final structured chunk, or we've 
> sent nothing and have ret < 0;...
>
>> +
>> +        break;
>>       default:
>>           error_setg(&local_err, "invalid request type (%" PRIu32 ") 
>> received",
>>                      request.type);
>> @@ -1680,7 +1988,7 @@ reply:
>
>     if (client->structured_reply &&
>         (ret < 0 || request.type == NBD_CMD_READ)) {
>
>>               ret = nbd_co_send_structured_done(req->client, 
>> request.handle,
>>                                                 &local_err);
>>           }
>
> ...iIf the client negotiated structured reply, then we've sent the 
> error message.  But if the client did NOT negotiate structured reply, 
> then...
>
>> -    } else {
>> +    } else if (request.type != NBD_CMD_BLOCK_STATUS) {
>
> ...we fail to reply at all.  Oops.  That's not good for 
> interoperability.  You'll need to make sure that we reply with EINVAL 
> even if the client (mistakenly) calls NBD_CMD_BLOCK_STATUS without 
> negotiating structured replies.

good caught! I felt that I'm doing something ugly, when I was writing 
this if. I'll think about how to refactor this a bit.

>
>>           ret = nbd_co_send_simple_reply(req->client, request.handle,
>>                                          ret < 0 ? -ret : 0,
>>                                          req->data, reply_data_len, 
>> &local_err);
>>
>
> Also missing from the patch - where do you validate that the export 
> name in client->export_meta matches the export name in NBD_OPT_GO?  If 
> they don't match, then export_meta should be discarded.
>
hm, me too.


Thank you for careful review!

-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part
  2018-02-16 14:43     ` Vladimir Sementsov-Ogievskiy
@ 2018-02-16 17:01       ` Eric Blake
  2018-03-01 11:36         ` Vladimir Sementsov-Ogievskiy
  0 siblings, 1 reply; 50+ messages in thread
From: Eric Blake @ 2018-02-16 17:01 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 02/16/2018 08:43 AM, Vladimir Sementsov-Ogievskiy wrote:
> 16.02.2018 16:21, Eric Blake wrote:
>> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>>> Minimal realization: only one extent in server answer is supported.
>>>
>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> ---

>> Again, function comments are useful.
>>
>>> +    if (query[0] == '\0' || strcmp(query, "allocation") == 0) {
>>> +        /* Note: empty query should select all contexts within base
>>> +         * namespace. */
>>> +        meta->base_allocation = true;
>>
>> From the client perspective, this handling of the empty leaf-name 
>> works well for NBD_OPT_LIST_META_CONTEXT (I want to see what leaf 
>> nodes the server supports), but not so well for 
>> NBD_OPT_SET_META_CONTEXT (asking the server to send ALL base 
>> allocations, even when I don't necessarily know how to interpret 
>> anything other than base:allocation, is a waste). So this function 
>> needs a bool parameter that says whether it is being invoked from 
>> _LIST (empty string okay, to advertise ALL base leaf names back to 
>> client, which for now is just base:allocation) or from _SET (empty 
>> string is ignored as invalid; client has to specifically ask for 
>> base:allocation by name).
> 
> "empty string is ignored as invalid", hm, do we have this in spec? I 
> think SET and LIST must select exactly same sets of contexts.

No, it is specifically NOT intended that SET and LIST have to produce 
the same set of contexts; although I do see your point that as currently 
written, it does not appear to require SET to ignore "base:" or to treat 
it as an error.  At any rate, the spec gives the example of:

> In either case, however, for any given namespace the server MAY, instead of exhaustively listing every matching context available to select (or every context available to select where no query is given), send sufficient context records back to allow a client with knowledge of the namespace to select any context. This may be helpful where a client can construct algorithmic queries. For instance, a client might reply simply with the namespace with no leaf-name (e.g. 'X-FooBar:') or with a range of values (e.g. 'X-ModifiedDate:20160310-20161214'). The semantics of such a reply are a matter for the definition of the namespace. However each namespace returned MUST begin with the relevant namespace, followed by a colon, and then other UTF-8 characters, with the entire string following the restrictions for strings set out earlier in this document.

with the intent being that for some namespaces, it may be easy to 
perform an algorithmic query via _LIST to see what ranges are supported, 
but that you cannot select ALL elements in the range simultaneously. 
The empty query for _LIST exists to enumerate what is supported, but 
does not have to equate to an empty query for _SET selecting everything 
possible.  I could even see it being possible to have some round-trips, 
depending on the namespace (of course, any namespace other than "base:" 
will be tightly coordinated between both client and server, so they 
understand each other - the point was that the NBD spec didn't want to 
constrain what a client and server could do as long as they stay within 
the generic framework):

C> LIST ""
S> REPLY "base:allocation" id 0
S> REPLY "X-FooBar:" id 0
S> ACK
C> LIST "X-FooBar:"
S> REPLY "X-FooBar:A_Required", id 0
S> REPLY "X-FooBar:A_Min=100", id 0
S> REPLY "X-FooBar:A_Max=200", id 0
S> REPLY "X-FooBar:B_Default=300", id 0
S> REPLY "X-FooBar:B_Min=300", id 0
S> REPLY "X-FooBar:B_Max=400", id 0
S> ACK
C> SET "X-FooBar:A=150" "base:allocation"
S> REPLY "X-FooBar:A=150,B=300", id 1
S> REPLY "base:allocation", id 2
S> ACK

where the global query of all available contexts merely lists that 
X-FooBar: is understood, but that a specific query is needed for more 
details (to avoid the client having to parse those specifics if it 
doesn't care about X-FooBar:), and the specific query sets up the 
algorithmic description (parameter A is required, between 100 and 200; 
parameter B is optional, between 300 and 400, defaulting to 300), and 
the final SET gives the actual request (A given a value, B left to its 
default; but the reply names the entire context rather than repeating 
the shorter request).  So the spec is written to permit something like 
that for third-party namespaces, while also trying to be very specific 
about the "base:" context as that is the one that needs the most 
interoperability.

> It is 
> strange behavior of client to set "base:", but it is its decision. And I 
> don't thing that it is invalid.

For LIST, querying "base:" makes total sense (for the sake of example, 
we may add "base:frob" down the road that does something new.  Being 
able to LIST whether "base:" turns into just "base:allocation" or into 
"base:allocation"+"base:frob" may be useful to a client that understands 
both formats and wants to probe if the server is new; and even for a 
client right now, the client can gracefully note that it doesn't want to 
select "base:frob").  But for SET, it does not (if "base:" turns into 
"base:allocation" + "base:frob" down the road, then the server is 
wasting time preparing the response to "base:frob" for every 
NBD_CMD_BLOCK_STATUS, and the client is wasting time unpacking from the 
wire and ignoring it), so having the empty query work on LIST but not on 
SET makes sense.

> Formally we may answer with NBD_REP_ERR_TOO_BIG, but it will look weird, 
> as client see that both base: and base:allocation returns _one_ context, 
> but in one case it is too big. But if we will have several base: 
> contextes, server may fairly answer with NBD_REP_ERR_TOO_BIG.

Hmm, you have a point that while a client can ask for "namespace:", the 
server should always respond with "namespace:leaf" for the actual 
contexts that it supports/selects, so that the client knows which leaves 
it actually got, if it does not fail with ERR_TOO_BIG.  You are also 
right that failing with ERR_TOO_BIG for "base:" seems odd, but it may 
make more sense for other namespaces.

> 
> So, I think for now the code is ok.

Then this is probably worth something to bring up on the NBD list, if we 
need to tweak wording to be more explicit (whether we should 
allow/forbid wildcards during SET, or if wildcard queries are intended 
only for LIST).  Sounds like I have more spec emails to write to the NBD 
list.

> 
> Also, I don't see NBD_REP_ERR_TOO_BIG possible reply in 
> NBD_OPT_LIST_META_CONTEXT description. Should it be here?

Yeah, that's probably also worth adding to the upstream spec, even 
though it already encourages LIST results to send compressed information 
back that allows a client to contruct valid specific queries, rather 
than an exhaustive list of selecting everything possible.

>>> +/* nbd_negotiate_meta_query
>>> + * Return -errno on I/O error, 0 if option was completely handled by
>>> + * sending a reply about inconsistent lengths, or 1 on success. */
>>> +static int nbd_negotiate_meta_query(NBDClient *client,
>>> +                                    NBDExportMetaContexts *meta, 
>>> Error **errp)
>>> +{
>>> +    int ret;
>>> +    char *query, *colon, *namespace, *subquery;
>>
>> Is it worth stack-allocating query here, so you don't have to g_free() 
>> it later?  NBD limits the maximum string to 4k, which is a little bit 
>> big for stack allocation (on an operating system with 4k pages, 
>> allocating more than 4k on the stack in one function risks missing the 
>> guard page on stack overflow), but we also have the benefit that we 
>> KNOW that the set of meta-context namespaces that we support have a 
>> much smaller maximum limit of what we even care about.
> 
> it is not stack allocated, nbd_alloc_read_size_string calls g_malloc.

Hence my question - do we NEED the malloc'd version, or can we get away 
with a stack-allocated space?  Although I then revised my question...

> 
>>
>>> +
>>> +    ret = nbd_alloc_read_size_string(client, &query, errp);
>>> +    if (ret <= 0) {
>>> +        return ret;
>>> +    }
>>> +
>>> +    colon = strchr(query, ':');
>>> +    if (colon == NULL) {
>>> +        ret = nbd_opt_invalid(client, errp, "no colon in query");
>>> +        goto out;
>>
>> Hmm, that puts a slight wrinkle into my proposal, or else maybe it is 
>> something I should bring up on the NBD list.  If we only read 5 
>> characters (because the max namespace WE support is "base:"), but a 
>> client asks for namespace "X-longname:", we should gracefully ignore 
>> the client's request; while we still want to reply with an error to a 
>> client that asks for "garbage" with no colon at all. The question for 
>> the NBD spec, then, is whether detecting bad client requests that 
>> didn't use colon is mandatory for the server (meaning we MUST read the 
>> entire namespace request, and search for the colon) or merely best 
>> effort (we only have to read 5 characters, and if we silently ignore 
>> instead of diagnose a bad namespace request that was longer than that, 
>> oh well). Worded from the client, it switches to a question of whether 
>> the client should expect the server to diagnose all requests, or must 
>> be prepared for the server to ignore requests even where those 
>> requests are bogus. Or, the NBD spec may change slightly to pass 
>> namespace and leafname as separate fields, both with lengths, rather 
>> than a colon, to make it easier for the server to skip over an unknown 
>> namespace/leaf pair without having to parse whether a colon was 
>> present.  I'll send that in a separate email (the upstream NBD list 
>> doesn't need to see all my review comments on this thread).

... in light of this thread now on the NBD list.

> 
> Thank you for careful review!

No problem. We still have some things to sort out on the NBD list as 
well, but I want to make sure we get something that is likely to work 
well with other implementations (I'm also trying, on the side, to get 
nbdkit to support structured reads so I have something available for 
testing cross-implementation support, but it is slow going).

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

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

* Re: [Qemu-devel] [PATCH 4/9] block/nbd-client: save first fatal error in nbd_iter_error
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 4/9] block/nbd-client: save first fatal error in nbd_iter_error Vladimir Sementsov-Ogievskiy
@ 2018-02-16 17:35   ` Eric Blake
  0 siblings, 0 replies; 50+ messages in thread
From: Eric Blake @ 2018-02-16 17:35 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> It is ok, that fatal error hides previous not fatal, but hiding
> first fatal error is a bad feature.
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>   block/nbd-client.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 

Can this trigger in 2.11 clients with structured reads to the point 
where we'd want to add qemu-stable in CC?  Or did you only hit it once 
block_status was added to the mix?

Note that comparing 2.11 server with 2.11 client doesn't help - because 
2.11 as server only sends a single chunk per structured read (as the 
only structured reply); it wasn't until commit 418638d3 that we have a 
qemu server that can send multiple chunks, and it looks like you need 
multiple chunks before multiple errors becomes a possibility.

At any rate,

Reviewed-by: Eric Blake <eblake@redhat.com>

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

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

* Re: [Qemu-devel] [PATCH 5/9] nbd/client: fix error messages in nbd_handle_reply_err
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 5/9] nbd/client: fix error messages in nbd_handle_reply_err Vladimir Sementsov-Ogievskiy
@ 2018-02-16 17:38   ` Eric Blake
  2018-03-01 11:38     ` Vladimir Sementsov-Ogievskiy
  0 siblings, 1 reply; 50+ messages in thread
From: Eric Blake @ 2018-02-16 17:38 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> 1. NBD_REP_ERR_INVALID is not only about length, so, make message more
>     general
> 
> 2. hex format is not very good: it's hard to read something like
>     "option a (set meta context)", so switch to dec.

It would be okay as option 0xa; I also want to be sure we match the 
output in server traces with the output in client traces; for example, I 
found:

nbd/server.c-                error_setg(errp, "Unsupported option 0x%" 
PRIx32 " (%s)",
nbd/server.c:                           option, nbd_opt_lookup(option));

So we want consistency through all the call sites, before this patch is 
ready to go, although I agree we need it.

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

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

* Re: [Qemu-devel] [PATCH 6/9] nbd: BLOCK_STATUS for standard get_block_status function: client part
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 6/9] nbd: BLOCK_STATUS for standard get_block_status function: client part Vladimir Sementsov-Ogievskiy
@ 2018-02-16 20:40   ` Eric Blake
  2018-03-09 18:47     ` Vladimir Sementsov-Ogievskiy
                       ` (4 more replies)
  0 siblings, 5 replies; 50+ messages in thread
From: Eric Blake @ 2018-02-16 20:40 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> Minimal realization: only one extent in server answer is supported.
> Flag NBD_CMD_FLAG_REQ_ONE is used to force this behavior.
> 
> Tests 140, 147 and 205 are fixed due to now server failed on searching
> export in context of NBD_OPT_SET_META_CONTEXT option negotiation.
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---

> +++ b/block/nbd-client.c
> @@ -228,6 +228,45 @@ static int nbd_parse_offset_hole_payload(NBDStructuredReplyChunk *chunk,
>       return 0;
>   }
>   
> +/* nbd_parse_blockstatus_payload
> + * support only one extent in reply and only for
> + * base:allocation context

Reasonable, since the server should not be sending us contexts we did 
not ask for during negotiation.

> + */
> +static int nbd_parse_blockstatus_payload(NBDClientSession *client,
> +                                         NBDStructuredReplyChunk *chunk,
> +                                         uint8_t *payload, uint64_t orig_length,
> +                                         NBDExtent *extent, Error **errp)
> +{
> +    uint32_t context_id;
> +
> +    if (chunk->length != sizeof(context_id) + sizeof(extent)) {

Okay as long as we use REQ_ONE to ensure exactly one extent per chunk.

> +        error_setg(errp, "Protocol error: invalid payload for "
> +                         "NBD_REPLY_TYPE_BLOCK_STATUS");
> +        return -EINVAL;
> +    }
> +
> +    context_id = payload_advance32(&payload);
> +    if (client->info.meta_base_allocation_id != context_id) {
> +        error_setg(errp, "Protocol error: unexpected context id: %d for "
> +                         "NBD_REPLY_TYPE_BLOCK_STATUS, when negotiated context "
> +                         "id is %d", context_id,
> +                         client->info.meta_base_allocation_id);
> +        return -EINVAL;
> +    }
> +
> +    memcpy(extent, payload, sizeof(*extent));
> +    be32_to_cpus(&extent->length);
> +    be32_to_cpus(&extent->flags);

Instead of doing a memcpy() and then in-place bit-swizzling, you could 
do the swapping as part of assignment, for one less function call (and 
make the code a bit easier to extend, if we later drop our REQ_ONE 
limitation on only having one extent, because you'll advance payload as 
needed):

extent->length = payload_advance32(&payload);
extent->flags = payload_advance32(&payload);

We should probably validate that the length field is a multiple of 
min_block (if a server tells us that all operations must be 512-byte 
aligned, then reports an extent that is smaller than 512 bytes, we have 
no way to ask for the status of the second half of the sector). 
Probably also something that needs to be explicitly stated in the NBD 
spec. [1]

> +
> +    if (extent->length > orig_length) {
> +        error_setg(errp, "Protocol error: server sent chunk exceeding requested"
> +                         " region");
> +        return -EINVAL;

That matches the current spec wording, but I'm not sure I agree with it 
- what's wrong with a server providing a final extent that extends 
beyond the request, if the information was already available for free 
(the classic example: if the server never replies with HOLE or ZERO, 
then the entire file has the same status, so all requests could 
trivially be replied to by taking the starting offset to the end of the 
file as the returned length, rather than just clamping at the requested 
length).

> +    }
> +
> +    return 0;
> +}
> +
>   /* nbd_parse_error_payload
>    * on success @errp contains message describing nbd error reply
>    */
> @@ -642,6 +681,61 @@ static int nbd_co_receive_cmdread_reply(NBDClientSession *s, uint64_t handle,
>       return iter.ret;
>   }
>   
> +static int nbd_co_receive_blockstatus_reply(NBDClientSession *s,
> +                                            uint64_t handle, uint64_t length,
> +                                            NBDExtent *extent, Error **errp)
> +{
> +    NBDReplyChunkIter iter;
> +    NBDReply reply;
> +    void *payload = NULL;
> +    Error *local_err = NULL;
> +    bool received = false;
> +
> +    NBD_FOREACH_REPLY_CHUNK(s, iter, handle, s->info.structured_reply,
> +                            NULL, &reply, &payload)
> +    {
> +        int ret;
> +        NBDStructuredReplyChunk *chunk = &reply.structured;
> +
> +        assert(nbd_reply_is_structured(&reply));
> +
> +        switch (chunk->type) {
> +        case NBD_REPLY_TYPE_BLOCK_STATUS:

Depending on the outcome of the discussion on the NBD list, here's where 
you could make a client easily listen to both your initial server (that 
sent 5) and a server compliant to the current spec wording (where this 
constant is 3); although it remains to be seen if that's the only 
difference between your initial implementation and the NBD spec wording 
that gets promoted to stable.

> +            if (received) {
> +                s->quit = true;
> +                error_setg(&local_err, "Several BLOCK_STATUS chunks in reply");
> +                nbd_iter_error(&iter, true, -EINVAL, &local_err);
> +            }

We may change this in the future to ask for more than one context at 
once; but for now, this matches that we negotiated for only one context, 
so it is fine to hang up on a server that disobeyed negotiation and sent 
us too much stuff.

> +            received = true;
> +
> +            ret = nbd_parse_blockstatus_payload(s, &reply.structured,
> +                                                payload, length, extent,
> +                                                &local_err);
> +            if (ret < 0) {
> +                s->quit = true;
> +                nbd_iter_error(&iter, true, ret, &local_err);
> +            }
> +            break;
> +        default:
> +            if (!nbd_reply_type_is_error(chunk->type)) {
> +                /* not allowed reply type */
> +                s->quit = true;
> +                error_setg(&local_err,
> +                           "Unexpected reply type: %d (%s) "
> +                           "for CMD_BLOCK_STATUS",
> +                           chunk->type, nbd_reply_type_lookup(chunk->type));
> +                nbd_iter_error(&iter, true, -EINVAL, &local_err);
> +            }
> +        }
> +
> +        g_free(payload);
> +        payload = NULL;
> +    }
> +
> +    error_propagate(errp, iter.err);
> +    return iter.ret;
> +}
> +
>   static int nbd_co_request(BlockDriverState *bs, NBDRequest *request,
>                             QEMUIOVector *write_qiov)
>   {
> @@ -784,6 +878,50 @@ int nbd_client_co_pdiscard(BlockDriverState *bs, int64_t offset, int bytes)
>       return nbd_co_request(bs, &request, NULL);
>   }
>   
> +int64_t coroutine_fn nbd_client_co_get_block_status(BlockDriverState *bs,
> +                                                    int64_t sector_num,
> +                                                    int nb_sectors, int *pnum,
> +                                                    BlockDriverState **file)

Needs rebasing on top of Kevin's block branch to use the byte-based 
interface.  I also need to finish up my promised followups on that 
series, as NBD (and other protocol drivers) should have consistent 
behavior on what it means to report OFFSET_VALID (or whether that should 
be limited to just format/filter drivers).

> +{
> +    int64_t ret;
> +    NBDExtent extent;
> +    NBDClientSession *client = nbd_get_client_session(bs);
> +    Error *local_err = NULL;
> +
> +    uint64_t offset = sector_num << BDRV_SECTOR_BITS;
> +    uint32_t bytes = nb_sectors << BDRV_SECTOR_BITS;
> +
> +    NBDRequest request = {
> +        .type = NBD_CMD_BLOCK_STATUS,
> +        .from = offset,
> +        .len = bytes,
> +        .flags = NBD_CMD_FLAG_REQ_ONE,
> +    };
> +
> +    if (!client->info.base_allocation) {
> +        *pnum = nb_sectors;
> +        return BDRV_BLOCK_DATA;
> +    }

Hmm - you are not setting *file nor returning OFFSET_VALID - which goes 
along with the way Kevin was asking me to clean up the other protocol 
drivers ;)

> +
> +    ret = nbd_co_send_request(bs, &request, NULL);
> +    if (ret < 0) {
> +        return ret;
> +    }
> +
> +    ret = nbd_co_receive_blockstatus_reply(client, request.handle, bytes,
> +                                           &extent, &local_err);
> +    if (local_err) {
> +        error_report_err(local_err);
> +    }
> +    if (ret < 0) {
> +        return ret;
> +    }
> +
> +    *pnum = extent.length >> BDRV_SECTOR_BITS;

[1] And now my above worry about a sub-sector reply from the server 
(when the server supports min_block of 1 instead of 512) rears its head: 
as long as we reply by sectors, we must NOT report a partial sector as a 
hole if we are unable to report the tail of the sector as data, but must 
instead report the entire sector as data.  Thankfully, all that goes 
away once you rebase to use the byte-based interface, at which point 
we're no longer rounding and risking a result on a partial sector being 
portrayed as the wrong status of the entire sector.

> +    return (extent.flags & NBD_STATE_HOLE ? 0 : BDRV_BLOCK_DATA) |
> +           (extent.flags & NBD_STATE_ZERO ? BDRV_BLOCK_ZERO : 0);
> +}
> +
>   void nbd_client_detach_aio_context(BlockDriverState *bs)
>   {
>       NBDClientSession *client = nbd_get_client_session(bs);
> @@ -828,6 +966,7 @@ int nbd_client_init(BlockDriverState *bs,
>   
>       client->info.request_sizes = true;
>       client->info.structured_reply = true;
> +    client->info.base_allocation = true;

Hmm - the combination structured_reply = false and base_allocation = 
true is bogus.  Then again, these two fields are in-out; left false when 
handing over to the kernel NBD transmission phase (since the kernel 
module does not yet support structured replies let alone block status), 
and true when requested with qemu as the transmission driver (since we 
want to use it if available).  I don't know if having a single tri-state 
enum is any better than two bools (on input, it is either all-or-none; 
on output, it is either none (old server), structured reads only (qemu 
2.11 server, for example), or all (this series' server).

One of the obvious things that I will be testing is whether applying 
your series in a different order (client first, then server) still works 
well (the client requests, but fails to get, block status, but can still 
use structured reads, when paired against a qemu 2.11 server).  (And now 
you see why I suggested splitting the earlier patch that adds the 
constants and lookup tables for the structured reply additions, so that 
server and client can be backported independently)

> +++ b/nbd/client.c
> @@ -594,6 +594,108 @@ static QIOChannel *nbd_receive_starttls(QIOChannel *ioc,
>       return QIO_CHANNEL(tioc);
>   }
>   
> +/* nbd_negotiate_simple_meta_context:
> + * Set one meta context. Simple means that reply must contain zero (not
> + * negotiated) or one (negotiated) contexts. More contexts would be considered
> + * as a protocol error.
> + * return 1 for successful negotiation, context_id is set
> + *        0 if operation is unsupported,
> + *        -errno with errp set for any other error
> + */

Good enough for our first use.  Will obviously need improvements if we 
support base:allocation AND dirty bitmap exposure at the same time, in 
future patches ;)

> +static int nbd_negotiate_simple_meta_context(QIOChannel *ioc,
> +                                             const char *export,
> +                                             const char *context,
> +                                             uint32_t *context_id,
> +                                             Error **errp)
> +{
> +    int ret;
> +    NBDOptionReply reply;
> +    uint32_t received_id;
> +    bool received;
> +    size_t export_len = strlen(export);
> +    size_t context_len = strlen(context);
> +    size_t data_len = 4 + export_len + 4 + 4 + context_len;

Looks a bit like magic numbers; would some sizeof() constructs make this 
any more obvious?

> +
> +    char *data = g_malloc(data_len);
> +    char *p = data;
> +
> +    stl_be_p(p, export_len);
> +    memcpy(p += 4, export, export_len);
> +    stl_be_p(p += export_len, 1);
> +    stl_be_p(p += 4, context_len);
> +    memcpy(p += 4, context, context_len);
> +
> +    ret = nbd_send_option_request(ioc, NBD_OPT_SET_META_CONTEXT, data_len, data,

So we don't even bother with LIST; either the SET works or we don't use 
block status.  Fair enough.

> +                                  errp);
> +    g_free(data);
> +    if (ret < 0) {
> +        return ret;
> +    }
> +
> +    if (nbd_receive_option_reply(ioc, NBD_OPT_SET_META_CONTEXT, &reply,
> +                                 errp) < 0)
> +    {
> +        return -1;
> +    }
> +
> +    ret = nbd_handle_reply_err(ioc, &reply, errp);
> +    if (ret <= 0) {
> +        return ret;
> +    }
> +
> +    if (reply.type == NBD_REP_META_CONTEXT) {
> +        char *name;
> +        size_t len;

A bit odd that this isn't a loop; we'll have to revisit that when we can 
start requesting more than one type of context at once.  But should work 
for now - given our initial request, the server shouldn't send us more 
than one response.

> +
> +        if (nbd_read(ioc, &received_id, sizeof(received_id), errp) < 0) {
> +            return -EIO;
> +        }
> +        be32_to_cpus(&received_id);
> +
> +        len = reply.length - sizeof(received_id);
> +        name = g_malloc(len + 1);
> +        if (nbd_read(ioc, name, len, errp) < 0) {
> +            g_free(name);
> +            return -EIO;
> +        }
> +        name[len] = '\0';
> +        if (strcmp(context, name)) {
> +            error_setg(errp, "Failed to negotiate meta context '%s', server "
> +                       "answered with different context '%s'", context,
> +                       name);

This check may not be valid for other context namespaces, but is correct 
for "base:allocation".

> +            g_free(name);
> +            return -1;
> +        }
> +        g_free(name);
> +
> +        received = true;
> +
> +        /* receive NBD_REP_ACK */
> +        if (nbd_receive_option_reply(ioc, NBD_OPT_SET_META_CONTEXT, &reply,
> +                                     errp) < 0)
> +        {
> +            return -1;
> +        }
> +
> +        ret = nbd_handle_reply_err(ioc, &reply, errp);
> +        if (ret <= 0) {
> +            return ret;
> +        }
> +    }
> +
> +    if (reply.type != NBD_REP_ACK) {
> +        error_setg(errp, "Unexpected reply type %" PRIx32 " expected %x",
> +                   reply.type, NBD_REP_ACK);
> +        return -1;
> +    }
> +
> +    if (received) {
> +        *context_id = received_id;
> +        return 1;
> +    }
> +
> +    return 0;
> +}

Looks good.

>   
>   int nbd_receive_negotiate(QIOChannel *ioc, const char *name,
>                             QCryptoTLSCreds *tlscreds, const char *hostname,
> @@ -605,10 +707,12 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char *name,
>       int rc;
>       bool zeroes = true;
>       bool structured_reply = info->structured_reply;
> +    bool base_allocation = info->base_allocation;
>   
>       trace_nbd_receive_negotiate(tlscreds, hostname ? hostname : "<null>");
>   
>       info->structured_reply = false;
> +    info->base_allocation = false;
>       rc = -EINVAL;
>   
>       if (outioc) {
> @@ -699,6 +803,16 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char *name,
>                   info->structured_reply = result == 1;
>               }
>   
> +            if (info->structured_reply && base_allocation) {
> +                result = nbd_negotiate_simple_meta_context(
> +                        ioc, name, "base:allocation",
> +                        &info->meta_base_allocation_id, errp);
> +                if (result < 0) {
> +                    goto fail;
> +                }
> +                info->base_allocation = result == 1;
> +            }
> +
>               /* Try NBD_OPT_GO first - if it works, we are done (it
>                * also gives us a good message if the server requires
>                * TLS).  If it is not available, fall back to

Looks like the right place to ask.  This also gives us a good message if 
the server doesn't recognize the export name (presumably the same 
message we would also get under NBD_OPT_GO).

> diff --git a/tests/qemu-iotests/140.out b/tests/qemu-iotests/140.out
> index 7295b3d975..b083e2effd 100644
> --- a/tests/qemu-iotests/140.out
> +++ b/tests/qemu-iotests/140.out
> @@ -8,7 +8,7 @@ wrote 65536/65536 bytes at offset 0
>   read 65536/65536 bytes at offset 0
>   64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>   {"return": {}}
> -can't open device nbd+unix:///drv?socket=TEST_DIR/nbd: Requested export not available
> +can't open device nbd+unix:///drv?socket=TEST_DIR/nbd: Invalid parameters for option 10 (set meta context)

Ouch, that's a regression.  Should be fixed by having the server fixed 
to send REP_ERR_UNKNOWN when an export name is not found (the same as we 
used to get under NBD_OPT_GO); I mentioned this already while reviewing 
the server side.

It also means our test is rather sensitive to running qemu as both 
client and server; other servers may send different error messages. 
Maybe we need to consider sanitizing things to be more independent of 
the server and only worry about the client under test - but that's not 
your problem in this series (I may be doing some of that as part of my 
work to get nbdkit to support structured replies, and finally have a 
server other than qemu so I can actually do interop testing).

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

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

* Re: [Qemu-devel] [PATCH 7/9] iotests.py: tiny refactor: move system imports up
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 7/9] iotests.py: tiny refactor: move system imports up Vladimir Sementsov-Ogievskiy
@ 2018-02-16 20:44   ` Eric Blake
  2018-03-09 18:54     ` Vladimir Sementsov-Ogievskiy
  0 siblings, 1 reply; 50+ messages in thread
From: Eric Blake @ 2018-02-16 20:44 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>   tests/qemu-iotests/iotests.py | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)

What breaks if they aren't moved?  But stylistically, this looks 
reasonable; and can be merged independently of NBD stuff if someone else 
wants.

Reviewed-by: Eric Blake <eblake@redhat.com>

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

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

* Re: [Qemu-devel] [PATCH 8/9] iotests: add file_path helper
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 8/9] iotests: add file_path helper Vladimir Sementsov-Ogievskiy
@ 2018-02-16 20:46   ` Eric Blake
  2018-02-20  5:42     ` Jeff Cody
  0 siblings, 1 reply; 50+ messages in thread
From: Eric Blake @ 2018-02-16 20:46 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den, Jeff Cody

On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> Simple way to have auto generated filenames with auto clenup. Like

s/clenup/cleanup/

> FilePath but without using 'with' statement and without additional
> indentation of the whole test.
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>   tests/qemu-iotests/iotests.py | 32 ++++++++++++++++++++++++++++++++
>   1 file changed, 32 insertions(+)

Jeff, where do we stand on your iotests cleanups?  Is this something you 
want to use?

> 
> diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
> index c1302a2f9b..f2d05ca3fd 100644
> --- a/tests/qemu-iotests/iotests.py
> +++ b/tests/qemu-iotests/iotests.py
> @@ -27,6 +27,7 @@ import struct
>   import json
>   import signal
>   import logging
> +import atexit
>   
>   sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts'))
>   import qtest
> @@ -250,6 +251,37 @@ class FilePath(object):
>           return False
>   
>   
> +def file_path_remover():
> +    for path in reversed(file_path_remover.paths):
> +        try:
> +            os.remove(path)
> +        except OSError:
> +            pass
> +
> +
> +def file_path(*names):
> +    ''' Another way to get auto-generated filename that cleans itself up.
> +
> +    Use it as simple as:
> +
> +    img_a, img_b = file_path('a.img', 'b.img')
> +    sock = file_path('socket')
> +    '''
> +
> +    if not hasattr(file_path_remover, 'paths'):
> +        file_path_remover.paths = []
> +        atexit.register(file_path_remover)
> +
> +    paths = []
> +    for name in names:
> +        filename = '{0}-{1}'.format(os.getpid(), name)
> +        path = os.path.join(test_dir, filename)
> +        file_path_remover.paths.append(path)
> +        paths.append(path)
> +
> +    return paths[0] if len(paths) == 1 else paths
> +
> +
>   class VM(qtest.QEMUQtestMachine):
>       '''A QEMU VM'''
>   
> 

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

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

* Re: [Qemu-devel] [PATCH 9/9] iotests: new test 206 for NBD BLOCK_STATUS
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 9/9] iotests: new test 206 for NBD BLOCK_STATUS Vladimir Sementsov-Ogievskiy
@ 2018-02-16 21:02   ` Eric Blake
  2018-03-01 11:51     ` Vladimir Sementsov-Ogievskiy
  0 siblings, 1 reply; 50+ messages in thread
From: Eric Blake @ 2018-02-16 21:02 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>   tests/qemu-iotests/206     | 34 ++++++++++++++++++++++++++++++++++
>   tests/qemu-iotests/206.out |  2 ++
>   tests/qemu-iotests/group   |  1 +
>   3 files changed, 37 insertions(+)
>   create mode 100644 tests/qemu-iotests/206
>   create mode 100644 tests/qemu-iotests/206.out

It's a race! Kevin already has test 206 and 207 claimed in his pending 
series:
https://lists.gnu.org/archive/html/qemu-devel/2018-02/msg02363.html
Whoever loses gets to rebase and renumber (or the maintainer on their 
behalf) ;)

> 
> diff --git a/tests/qemu-iotests/206 b/tests/qemu-iotests/206
> new file mode 100644

Oops, you forgot to mark this executable.  And oops, I forgot to flag 
that on test 205.  Other inconsistent tests: 096, 124, 129, 132, 136, 
139, 148, 152, 163. Separate cleanup patch coming up soon.

> index 0000000000..259e991ec6
> --- /dev/null
> +++ b/tests/qemu-iotests/206
> @@ -0,0 +1,34 @@
> +#!/usr/bin/env python
> +#
> +# Tests for NBD BLOCK_STATUS extension
> +#

> +import iotests
> +from iotests import qemu_img_create, qemu_io, qemu_img_verbose, qemu_nbd, \
> +                    file_path
> +
> +iotests.verify_image_format(supported_fmts=['qcow2'])

Don't we also need to blacklist v2 files (and only operate on v3 or 
newer), since the behavior of zero clusters is much worse on v2 images?

> +
> +disk, nbd_sock = file_path('disk', 'nbd-sock')
> +nbd_uri = 'nbd+unix:///exp?socket=' + nbd_sock
> +
> +qemu_img_create('-f', iotests.imgfmt, disk, '1M')
> +qemu_io('-f', iotests.imgfmt, '-c', 'write 0 512K', disk)

Hopefully large enough for all the major filesystems with sparse support 
to show half-data, half-hole, and not run into any weird issues where 
granularity differences between filesystems change the outcome.

> +
> +qemu_nbd('-k', nbd_sock, '-x', 'exp', '-f', iotests.imgfmt, disk)
> +qemu_img_verbose('map', '-f', 'raw', '--output=json', nbd_uri)
> diff --git a/tests/qemu-iotests/206.out b/tests/qemu-iotests/206.out
> new file mode 100644
> index 0000000000..0d29724e84
> --- /dev/null
> +++ b/tests/qemu-iotests/206.out
> @@ -0,0 +1,2 @@
> +[{ "start": 0, "length": 524288, "depth": 0, "zero": false, "data": true},
> +{ "start": 524288, "length": 524288, "depth": 0, "zero": true, "data": false}]

But definite evidence of getting block status over NBD! Progress!

And kudos for producing an .out file that I can actually read and 
reproduce without the aid of python (in contrast to the more 
"unit-test"-y ones like 205, where we had a big long side-discussion 
about that. No need to repeat it here).

> diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
> index a2dfe79d86..2c3925566a 100644
> --- a/tests/qemu-iotests/group
> +++ b/tests/qemu-iotests/group
> @@ -202,3 +202,4 @@
>   203 rw auto
>   204 rw auto quick
>   205 rw auto quick
> +206 rw auto quick
> 

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

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

* Re: [Qemu-devel] [PATCH 8/9] iotests: add file_path helper
  2018-02-16 20:46   ` Eric Blake
@ 2018-02-20  5:42     ` Jeff Cody
  2018-03-12 10:04       ` Vladimir Sementsov-Ogievskiy
  0 siblings, 1 reply; 50+ messages in thread
From: Jeff Cody @ 2018-02-20  5:42 UTC (permalink / raw)
  To: Eric Blake
  Cc: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block, kwolf,
	pbonzini, den, mreitz

On Fri, Feb 16, 2018 at 02:46:35PM -0600, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> >Simple way to have auto generated filenames with auto clenup. Like
> 
> s/clenup/cleanup/
> 
> >FilePath but without using 'with' statement and without additional
> >indentation of the whole test.
> >
> >Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> >---
> >  tests/qemu-iotests/iotests.py | 32 ++++++++++++++++++++++++++++++++
> >  1 file changed, 32 insertions(+)
> 
> Jeff, where do we stand on your iotests cleanups?  Is this something you
> want to use?
> 

This patch has niceties that my patch does not, in that explicit clean-up is
not required.  This is also a slight design difference; my patch series
explicitly avoided auto-cleanup, so that ./check could handle it, or
(optionally) leave behind all the mouse droppings for later analysis, in the
case of test failure.

Ideally, I'd love clean-up to be optional; if a test fails, I'd like to have
the option of examining all the intermediate files and output of the test
(and once it resides in its own subdir, that is also side-affect free for
the other tests).

> >
> >diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
> >index c1302a2f9b..f2d05ca3fd 100644
> >--- a/tests/qemu-iotests/iotests.py
> >+++ b/tests/qemu-iotests/iotests.py
> >@@ -27,6 +27,7 @@ import struct
> >  import json
> >  import signal
> >  import logging
> >+import atexit
> >  sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts'))
> >  import qtest
> >@@ -250,6 +251,37 @@ class FilePath(object):
> >          return False
> >+def file_path_remover():
> >+    for path in reversed(file_path_remover.paths):
> >+        try:
> >+            os.remove(path)
> >+        except OSError:
> >+            pass
> >+
> >+
> >+def file_path(*names):
> >+    ''' Another way to get auto-generated filename that cleans itself up.
> >+
> >+    Use it as simple as:
> >+
> >+    img_a, img_b = file_path('a.img', 'b.img')
> >+    sock = file_path('socket')
> >+    '''
> >+
> >+    if not hasattr(file_path_remover, 'paths'):
> >+        file_path_remover.paths = []
> >+        atexit.register(file_path_remover)
> >+
> >+    paths = []
> >+    for name in names:
> >+        filename = '{0}-{1}'.format(os.getpid(), name)
> >+        path = os.path.join(test_dir, filename)
> >+        file_path_remover.paths.append(path)
> >+        paths.append(path)
> >+
> >+    return paths[0] if len(paths) == 1 else paths
> >+
> >+
> >  class VM(qtest.QEMUQtestMachine):
> >      '''A QEMU VM'''
> >
> 
> -- 
> Eric Blake, Principal Software Engineer
> Red Hat, Inc.           +1-919-301-3266
> Virtualization:  qemu.org | libvirt.org
> 

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

* Re: [Qemu-devel] [PATCH 0/9] nbd block status base:allocation
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
                   ` (8 preceding siblings ...)
  2018-02-15 13:51 ` [Qemu-devel] [PATCH 9/9] iotests: new test 206 for NBD BLOCK_STATUS Vladimir Sementsov-Ogievskiy
@ 2018-02-22 19:30 ` no-reply
  2018-02-23 14:02 ` no-reply
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 50+ messages in thread
From: no-reply @ 2018-02-22 19:30 UTC (permalink / raw)
  To: vsementsov; +Cc: famz, qemu-devel, qemu-block, kwolf, mreitz, den, pbonzini

Hi,

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

Type: series
Message-id: 1518702707-7077-1-git-send-email-vsementsov@virtuozzo.com
Subject: [Qemu-devel] [PATCH 0/9] nbd block status base:allocation

=== 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 ==="
INSTALL=$PWD/install
BUILD=$PWD/build
mkdir -p $BUILD $INSTALL
SRC=$PWD
cd $BUILD
$SRC/configure --prefix=$INSTALL
make -j100
# XXX: we need reliable clean up
# make check -j100 V=1
make install
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
 * [new tag]         patchew/1519324303-5674-1-git-send-email-aleksandar.markovic@rt-rk.com -> patchew/1519324303-5674-1-git-send-email-aleksandar.markovic@rt-rk.com
 - [tag update]      patchew/20180222161811.26200-1-berto@igalia.com -> patchew/20180222161811.26200-1-berto@igalia.com
Submodule 'capstone' (git://git.qemu.org/capstone.git) registered for path 'capstone'
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Submodule 'roms/QemuMacDrivers' (git://git.qemu.org/QemuMacDrivers.git) registered for path 'roms/QemuMacDrivers'
Submodule 'roms/SLOF' (git://git.qemu-project.org/SLOF.git) registered for path 'roms/SLOF'
Submodule 'roms/ipxe' (git://git.qemu-project.org/ipxe.git) registered for path 'roms/ipxe'
Submodule 'roms/openbios' (git://git.qemu-project.org/openbios.git) registered for path 'roms/openbios'
Submodule 'roms/openhackware' (git://git.qemu-project.org/openhackware.git) registered for path 'roms/openhackware'
Submodule 'roms/qemu-palcode' (git://github.com/rth7680/qemu-palcode.git) registered for path 'roms/qemu-palcode'
Submodule 'roms/seabios' (git://git.qemu-project.org/seabios.git/) registered for path 'roms/seabios'
Submodule 'roms/seabios-hppa' (git://github.com/hdeller/seabios-hppa.git) registered for path 'roms/seabios-hppa'
Submodule 'roms/sgabios' (git://git.qemu-project.org/sgabios.git) registered for path 'roms/sgabios'
Submodule 'roms/skiboot' (git://git.qemu.org/skiboot.git) registered for path 'roms/skiboot'
Submodule 'roms/u-boot' (git://git.qemu-project.org/u-boot.git) registered for path 'roms/u-boot'
Submodule 'roms/vgabios' (git://git.qemu-project.org/vgabios.git/) registered for path 'roms/vgabios'
Submodule 'ui/keycodemapdb' (git://git.qemu.org/keycodemapdb.git) registered for path 'ui/keycodemapdb'
Cloning into 'capstone'...
Submodule path 'capstone': checked out '22ead3e0bfdb87516656453336160e0a37b066bf'
Cloning into 'dtc'...
Submodule path 'dtc': checked out 'e54388015af1fb4bf04d0bca99caba1074d9cc42'
Cloning into 'roms/QemuMacDrivers'...
Submodule path 'roms/QemuMacDrivers': checked out 'd4e7d7ac663fcb55f1b93575445fcbca372f17a7'
Cloning into 'roms/SLOF'...
Submodule path 'roms/SLOF': checked out 'fa981320a1e0968d6fc1b8de319723ff8212b337'
Cloning into 'roms/ipxe'...
Submodule path 'roms/ipxe': checked out '0600d3ae94f93efd10fc6b3c7420a9557a3a1670'
Cloning into 'roms/openbios'...
Submodule path 'roms/openbios': checked out '54d959d97fb331708767b2fd4a878efd2bbc41bb'
Cloning into 'roms/openhackware'...
Submodule path 'roms/openhackware': checked out 'c559da7c8eec5e45ef1f67978827af6f0b9546f5'
Cloning into 'roms/qemu-palcode'...
Submodule path 'roms/qemu-palcode': checked out 'f3c7e44c70254975df2a00af39701eafbac4d471'
Cloning into 'roms/seabios'...
Submodule path 'roms/seabios': checked out '63451fca13c75870e1703eb3e20584d91179aebc'
Cloning into 'roms/seabios-hppa'...
Submodule path 'roms/seabios-hppa': checked out '649e6202b8d65d46c69f542b1380f840fbe8ab13'
Cloning into 'roms/sgabios'...
Submodule path 'roms/sgabios': checked out 'cbaee52287e5f32373181cff50a00b6c4ac9015a'
Cloning into 'roms/skiboot'...
Submodule path 'roms/skiboot': checked out 'e0ee24c27a172bcf482f6f2bc905e6211c134bcc'
Cloning into 'roms/u-boot'...
Submodule path 'roms/u-boot': checked out 'd85ca029f257b53a96da6c2fb421e78a003a9943'
Cloning into 'roms/vgabios'...
Submodule path 'roms/vgabios': checked out '19ea12c230ded95928ecaef0db47a82231c2e485'
Cloning into 'ui/keycodemapdb'...
Submodule path 'ui/keycodemapdb': checked out '6b3d716e2b6472eb7189d3220552280ef3d832ce'
Switched to a new branch 'test'
7d95dcd iotests: new test 206 for NBD BLOCK_STATUS
906b016 iotests: add file_path helper
015ee72 iotests.py: tiny refactor: move system imports up
1377201 nbd: BLOCK_STATUS for standard get_block_status function: client part
a750bdb nbd/client: fix error messages in nbd_handle_reply_err
6ec6604 block/nbd-client: save first fatal error in nbd_iter_error
1b609ef nbd: BLOCK_STATUS for standard get_block_status function: server part
ac6e460 nbd: change indenting in nbd.h
5e399e1 nbd/server: add nbd_opt_invalid helper

=== OUTPUT BEGIN ===
=== ENV ===
XDG_SESSION_ID=29961
SHELL=/bin/sh
USER=patchew
PATCHEW=./patchew-cli -s https://patchew.org
PATH=/usr/bin:/bin
PWD=/var/tmp/patchew-tester-tmp-ebstrc6d/src
LANG=en_US.UTF-8
HOME=/home/patchew
SHLVL=2
LOGNAME=patchew
XDG_RUNTIME_DIR=/run/user/1000
_=/usr/bin/env
=== PACKAGES ===
telepathy-filesystem-0.0.2-6.el7.noarch
ipa-common-4.5.0-20.el7.centos.noarch
ipa-client-common-4.5.0-20.el7.centos.noarch
nhn-nanum-fonts-common-3.020-9.el7.noarch
perl-srpm-macros-1-8.el7.noarch
glibc-common-2.17-196.el7.ppc64
zlib-1.2.7-17.el7.ppc64
nss-util-3.28.4-3.el7.ppc64
libSM-1.2.2-2.el7.ppc64
avahi-libs-0.6.31-17.el7.ppc64
libogg-1.3.0-7.el7.ppc64
libtevent-0.9.31-1.el7.ppc64
libicu-50.1.2-15.el7.ppc64
libXext-1.3.3-3.el7.ppc64
libXinerama-1.1.3-2.1.el7.ppc64
boost-system-1.53.0-27.el7.ppc64
xz-5.2.2-1.el7.ppc64
apr-1.4.8-3.el7.ppc64
pixman-0.34.0-1.el7.ppc64
libplist-1.12-3.el7.ppc64
boost-thread-1.53.0-27.el7.ppc64
libraw1394-2.1.0-2.el7.ppc64
newt-0.52.15-4.el7.ppc64
unixODBC-2.3.1-11.el7.ppc64
groff-base-1.22.2-8.el7.ppc64
psmisc-22.20-15.el7.ppc64
libpfm-4.7.0-4.el7.ppc64
perl-parent-0.225-244.el7.noarch
perl-libs-5.16.3-292.el7.ppc64
perl-Scalar-List-Utils-1.27-248.el7.ppc64
perl-Pod-Simple-3.28-4.el7.noarch
perl-Module-Load-0.24-3.el7.noarch
perl-Module-Pluggable-4.8-3.el7.noarch
perl-CPAN-Meta-2.120921-5.el7.noarch
perl-Object-Accessor-0.42-292.el7.noarch
perl-Module-Loaded-0.08-292.el7.noarch
boost-locale-1.53.0-27.el7.ppc64
fuse-2.9.2-8.el7.ppc64
xml-common-0.6.3-39.el7.noarch
libunistring-0.9.3-9.el7.ppc64
boost-math-1.53.0-27.el7.ppc64
yajl-2.0.4-4.el7.ppc64
libthai-0.1.14-9.el7.ppc64
libvisual-0.4.0-16.el7.ppc64
iptables-1.4.21-18.0.1.el7.centos.ppc64
teamd-1.25-5.el7.ppc64
perl-YAML-0.84-5.el7.noarch
perl-DBD-SQLite-1.39-3.el7.ppc64
perl-Pod-Coverage-0.23-3.el7.noarch
perl-HTML-Parser-3.71-4.el7.ppc64
perl-YAML-Tiny-1.51-6.el7.noarch
perl-FCGI-0.74-8.el7.ppc64
device-mapper-persistent-data-0.7.0-0.1.rc6.el7.ppc64
lzop-1.03-10.el7.ppc64
tcp_wrappers-devel-7.6-77.el7.ppc64
vim-minimal-7.4.160-2.el7.ppc64
dyninst-9.3.1-1.el7.ppc64
check-0.9.9-5.el7.ppc64
lsof-4.87-4.el7.ppc64
redhat-menus-12.0.2-8.el7.noarch
fontconfig-2.10.95-11.el7.ppc64
libXft-2.3.2-2.el7.ppc64
json-glib-1.2.6-1.el7.ppc64
zlib-devel-1.2.7-17.el7.ppc64
imsettings-libs-1.6.3-9.el7.ppc64
glibmm24-2.50.0-1.el7.ppc64
gnome-icon-theme-3.12.0-1.el7.noarch
python-enum34-1.0.4-1.el7.noarch
pam-1.1.8-18.el7.ppc64
procps-ng-3.3.10-16.el7.ppc64
gettext-libs-0.19.8.1-2.el7.ppc64
libXext-devel-1.3.3-3.el7.ppc64
libXinerama-devel-1.1.3-2.1.el7.ppc64
xz-devel-5.2.2-1.el7.ppc64
libpinyin-0.9.93-4.el7.ppc64
e2fsprogs-1.42.9-10.el7.ppc64
pyparsing-1.5.6-9.el7.noarch
fipscheck-lib-1.4.1-6.el7.ppc64
systemtap-sdt-devel-3.1-3.el7.ppc64
perl-Module-Build-0.40.05-2.el7.noarch
elfutils-devel-0.168-8.el7.ppc64
python-pwquality-1.2.3-4.el7.ppc64
xdg-user-dirs-0.15-4.el7.ppc64
xorg-x11-xbitmaps-1.1.1-6.el7.noarch
p11-kit-devel-0.23.5-3.el7.ppc64
nettle-devel-2.7.1-8.el7.ppc64
python-qrcode-core-5.0.1-1.el7.noarch
python-inotify-0.9.4-4.el7.noarch
python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch
python-schedutils-0.4-6.el7.ppc64
python-beaker-1.5.4-10.el7.noarch
python-sss-murmur-1.15.2-50.el7.ppc64
blktrace-1.0.5-8.el7.ppc64
bind-libs-9.9.4-50.el7.ppc64
perl-HTML-Format-2.10-7.el7.noarch
freerdp-libs-1.0.2-10.el7.ppc64
nss-3.28.4-8.el7.ppc64
rpm-4.11.3-25.el7.ppc64
libuser-0.60-7.el7_1.ppc64
mailx-12.5-16.el7.ppc64
color-filesystem-1-13.el7.noarch
pcp-libs-3.11.8-7.el7.ppc64
libproxy-0.4.11-10.el7.ppc64
libreport-rhel-anaconda-bugzilla-2.1.11-38.el7.centos.ppc64
pcsc-lite-libs-1.8.8-6.el7.ppc64
libao-1.1.0-8.el7.ppc64
pth-2.0.7-23.el7.ppc64
yum-plugin-fastestmirror-1.1.31-42.el7.noarch
sgpio-1.2.0.10-13.el7.ppc64
libfastjson-0.99.4-2.el7.ppc64
lsscsi-0.27-6.el7.ppc64
util-linux-2.23.2-43.el7.ppc64
systemd-219-42.el7.ppc64
mesa-libGL-17.0.1-6.20170307.el7.ppc64
NetworkManager-glib-1.8.0-9.el7.ppc64
gstreamer-plugins-base-0.10.36-10.el7.ppc64
samba-common-4.6.2-8.el7.noarch
cairomm-1.12.0-1.el7.ppc64
crontabs-1.11-6.20121102git.el7.noarch
libstoragemgmt-python-1.4.0-3.el7.noarch
pciutils-3.5.1-2.el7.ppc64
speech-dispatcher-0.7.1-15.el7.ppc64
bluez-5.44-2.el7.ppc64
systemd-python-219-42.el7.ppc64
openssh-7.4p1-11.el7.ppc64
at-spi2-core-devel-2.22.0-1.el7.ppc64
NetworkManager-team-1.8.0-9.el7.ppc64
dracut-network-033-502.el7.ppc64
openldap-devel-2.4.44-5.el7.ppc64
abrt-addon-ccpp-2.1.11-48.el7.centos.ppc64
xorg-x11-drv-ati-7.7.1-3.20160928git3fc839ff.el7.ppc64
autofs-5.0.7-69.el7.ppc64
pango-devel-1.40.4-1.el7.ppc64
cups-pk-helper-0.2.6-2.el7.ppc64
firewalld-0.4.4.4-6.el7.noarch
hplip-common-3.15.9-3.el7.ppc64
usb_modeswitch-data-20160612-2.el7.noarch
usbmuxd-1.1.0-1.el7.ppc64
gupnp-1.0.1-1.el7.ppc64
dleyna-server-0.5.0-1.el7.ppc64
device-mapper-multipath-0.4.9-111.el7.ppc64
openlmi-providers-0.5.0-4.el7.ppc64
rubygem-psych-2.0.0-30.el7.ppc64
rubygem-thor-0.19.1-1.el7.noarch
cogl-1.22.2-1.el7.ppc64
imsettings-gsettings-1.6.3-9.el7.ppc64
poppler-glib-0.26.5-16.el7.ppc64
phonon-backend-gstreamer-4.6.3-3.el7.ppc64
qdox-1.12.1-10.el7.noarch
gutenprint-5.2.9-18.el7.ppc64
libfprint-0.5.0-4.el7.ppc64
cups-filesystem-1.6.3-29.el7.noarch
sssd-ad-1.15.2-50.el7.ppc64
skkdic-20130104-6.T1435.el7.noarch
ibus-gtk2-1.5.3-13.el7.ppc64
webkitgtk4-2.14.7-2.el7.ppc64
python2-caribou-0.4.21-1.el7.noarch
libpeas-gtk-1.20.0-1.el7.ppc64
folks-0.11.3-1.el7.ppc64
abrt-gui-2.1.11-48.el7.centos.ppc64
gnome-keyring-3.20.0-3.el7.ppc64
gucharmap-libs-3.18.2-1.el7.ppc64
file-roller-3.22.3-1.el7.ppc64
gnome-themes-standard-3.22.2-1.el7.ppc64
libwacom-data-0.24-1.el7.noarch
vim-common-7.4.160-2.el7.ppc64
mesa-filesystem-17.0.1-6.20170307.el7.ppc64
gnome-shell-extension-alternate-tab-3.22.2-10.el7.noarch
kbd-legacy-1.15.5-13.el7.noarch
intltool-0.50.2-7.el7.noarch
ipa-client-4.5.0-20.el7.centos.ppc64
gnome-contacts-3.22.1-1.el7.ppc64
gnome-dictionary-3.20.0-1.el7.ppc64
abrt-desktop-2.1.11-48.el7.centos.ppc64
gvfs-goa-1.30.4-3.el7.ppc64
ibus-hangul-1.4.2-10.el7.ppc64
seahorse-3.20.0-1.el7.ppc64
xdg-desktop-portal-gtk-0.5-1.el7.ppc64
ppc64-diag-2.7.3-3.el7.ppc64
librsvg2-devel-2.40.16-1.el7.ppc64
selinux-policy-targeted-3.13.1-166.el7.noarch
SDL-devel-1.2.15-14.el7.ppc64
plymouth-system-theme-0.8.9-0.28.20140113.el7.centos.ppc64
wvdial-1.61-9.el7.ppc64
python-smbc-1.0.13-7.el7.ppc64
PackageKit-gstreamer-plugin-1.1.5-1.el7.centos.ppc64
irqbalance-1.0.7-10.el7.ppc64
dracut-config-rescue-033-502.el7.ppc64
rpm-sign-4.11.3-25.el7.ppc64
crash-trace-command-2.0-12.el7.ppc64
hmaccalc-0.9.13-4.el7.ppc64
libblkid-devel-2.23.2-43.el7.ppc64
boost-devel-1.53.0-27.el7.ppc64
gnome-icon-theme-extras-3.12.0-1.el7.noarch
c-ares-devel-1.10.0-3.el7.ppc64
mtr-0.85-7.el7.ppc64
wget-1.14-15.el7.ppc64
hunspell-en-0.20121024-6.el7.noarch
perl-XML-Dumper-0.81-17.el7.noarch
flex-2.5.37-3.el7.ppc64
ltrace-0.7.91-14.el7.ppc64
wqy-zenhei-fonts-0.9.46-11.el7.noarch
madan-fonts-2.000-11.el7.noarch
lohit-assamese-fonts-2.5.3-2.el7.noarch
sil-abyssinica-fonts-1.200-6.el7.noarch
wqy-microhei-fonts-0.2.0-0.12.beta.el7.noarch
sil-padauk-fonts-2.8-5.el7.noarch
rdate-1.4-25.el7.ppc64
iwl7260-firmware-22.0.7.0-56.el7.noarch
iwl135-firmware-18.168.6.1-56.el7.noarch
iwl3945-firmware-15.32.2.9-56.el7.noarch
gpg-pubkey-f4a80eb5-53a7ff4b
libgcc-4.8.5-16.el7.ppc64
liberation-fonts-common-1.07.2-15.el7.noarch
mailcap-2.1.41-2.el7.noarch
poppler-data-0.4.6-3.el7.noarch
smc-fonts-common-6.0-7.el7.noarch
pcp-conf-3.11.8-7.el7.ppc64
glibc-2.17-196.el7.ppc64
dbus-libs-1.6.12-17.el7.ppc64
popt-1.13-16.el7.ppc64
sed-4.2.2-5.el7.ppc64
libgpg-error-1.12-3.el7.ppc64
gawk-4.0.2-4.el7_3.1.ppc64
gmp-6.0.0-15.el7.ppc64
json-c-0.11-4.el7_0.ppc64
libXi-1.7.9-1.el7.ppc64
libXcursor-1.1.14-8.el7.ppc64
tcp_wrappers-libs-7.6-77.el7.ppc64
findutils-4.5.11-5.el7.ppc64
diffutils-3.3-4.el7.ppc64
apr-util-1.5.2-6.el7.ppc64
libmng-1.0.10-14.el7.ppc64
giflib-4.1.6-9.el7.ppc64
libdvdread-5.0.3-3.el7.ppc64
lm_sensors-libs-3.4.0-4.20160601gitf9185e5.el7.ppc64
boost-filesystem-1.53.0-27.el7.ppc64
unzip-6.0-16.el7.ppc64
libedit-3.0-12.20121213cvs.el7.ppc64
numactl-libs-2.0.9-6.el7_2.ppc64
perl-HTTP-Tiny-0.033-3.el7.noarch
perl-macros-5.16.3-292.el7.ppc64
perl-threads-shared-1.43-6.el7.ppc64
perl-Getopt-Long-2.40-2.el7.noarch
perl-XML-Parser-2.41-10.el7.ppc64
perl-Digest-SHA-5.85-4.el7.ppc64
perl-Parse-CPAN-Meta-1.4404-5.el7.noarch
perl-Log-Message-0.08-3.el7.noarch
perl-HTML-Tagset-3.20-15.el7.noarch
libiec61883-1.2.0-10.el7.ppc64
copy-jdk-configs-2.2-3.el7.noarch
boost-iostreams-1.53.0-27.el7.ppc64
libss-1.42.9-10.el7.ppc64
boost-test-1.53.0-27.el7.ppc64
boost-atomic-1.53.0-27.el7.ppc64
libevdev-1.5.6-1.el7.ppc64
libdv-1.0.0-17.el7.ppc64
libnetfilter_conntrack-1.0.6-1.el7_3.ppc64
libteam-1.25-5.el7.ppc64
perl-Version-Requirements-0.101022-244.el7.noarch
perl-DBI-1.627-4.el7.ppc64
perl-Devel-Symdump-2.10-2.el7.noarch
perl-HTTP-Message-6.06-6.el7.noarch
perl-Text-Soundex-3.04-4.el7.ppc64
perl-TermReadKey-2.30-20.el7.ppc64
libsamplerate-0.1.8-6.el7.ppc64
cpp-4.8.5-16.el7.ppc64
hesiod-3.2.1-3.el7.ppc64
gdisk-0.8.6-5.el7.ppc64
libdwarf-20130207-4.el7.ppc64
popt-devel-1.13-16.el7.ppc64
qpdf-libs-5.0.1-3.el7.ppc64
gcc-4.8.5-16.el7.ppc64
krb5-libs-1.15.1-8.el7.ppc64
libblkid-2.23.2-43.el7.ppc64
pkgconfig-0.27.1-4.el7.ppc64
harfbuzz-1.3.2-1.el7.ppc64
libxml2-python-2.9.1-6.el7_2.3.ppc64
libxklavier-5.4-7.el7.ppc64
xdg-utils-1.1.0-0.17.20120809git.el7.noarch
python2-pyasn1-0.1.9-7.el7.noarch
libpwquality-1.2.3-4.el7.ppc64
plymouth-graphics-libs-0.8.9-0.28.20140113.el7.centos.ppc64
gettext-0.19.8.1-2.el7.ppc64
libXfixes-devel-5.0.3-1.el7.ppc64
libXmu-devel-1.1.2-2.el7.ppc64
libxml2-devel-2.9.1-6.el7_2.3.ppc64
libipa_hbac-1.15.2-50.el7.ppc64
python-augeas-0.5.0-2.el7.noarch
python-chardet-2.2.1-1.el7_1.noarch
fipscheck-1.4.1-6.el7.ppc64
perl-ExtUtils-ParseXS-3.18-3.el7.noarch
perl-File-Fetch-0.42-2.el7.noarch
libXv-devel-1.0.11-1.el7.ppc64
python2-pyasn1-modules-0.1.9-7.el7.noarch
sos-3.4-6.el7.centos.noarch
motif-2.3.4-8.1.el7_3.ppc64
graphite2-devel-1.3.6-1.el7_2.ppc64
meanwhile-1.1.0-12.el7.ppc64
tk-8.5.13-6.el7.ppc64
python-perf-3.10.0-693.el7.ppc64
python-setuptools-0.9.8-7.el7.noarch
newt-python-0.52.15-4.el7.ppc64
python-mako-0.8.1-2.el7.noarch
python-idna-2.4-1.el7.noarch
python-ply-3.4-11.el7.noarch
bind-utils-9.9.4-50.el7.ppc64
perl-HTML-Tree-5.03-2.el7.noarch
cyrus-sasl-scram-2.1.26-21.el7.ppc64
nss-pem-1.0.3-4.el7.ppc64
rpm-libs-4.11.3-25.el7.ppc64
postgresql-libs-9.2.21-1.el7.ppc64
python-nss-0.16.0-3.el7.ppc64
redhat-rpm-config-9.1.0-76.el7.centos.noarch
pykickstart-1.99.66.12-1.el7.noarch
libmodman-2.0.1-8.el7.ppc64
libreport-anaconda-2.1.11-38.el7.centos.ppc64
libsysfs-2.1.0-16.el7.ppc64
festival-speechtools-libs-1.2.96-28.el7.ppc64
espeak-1.47.11-4.el7.ppc64
pygpgme-0.3-9.el7.ppc64
ncompress-4.2.4.4-3.el7.ppc64
mtdev-1.1.5-5.el7.ppc64
checkpolicy-2.5-4.el7.ppc64
libutempter-1.1.6-4.el7.ppc64
kmod-20-15.el7.ppc64
mesa-libEGL-17.0.1-6.20170307.el7.ppc64
PackageKit-glib-1.1.5-1.el7.centos.ppc64
java-1.8.0-openjdk-1.8.0.131-11.b12.el7.ppc64
httpd-2.4.6-67.el7.centos.ppc64
PackageKit-1.1.5-1.el7.centos.ppc64
libcgroup-0.41-13.el7.ppc64
authconfig-6.2.8-30.el7.ppc64
device-mapper-event-1.02.140-8.el7.ppc64
rpcbind-0.2.0-42.el7.ppc64
mesa-libGL-devel-17.0.1-6.20170307.el7.ppc64
mdadm-4.0-5.el7.ppc64
usermode-1.111-5.el7.ppc64
grub2-ppc64-2.02-0.64.el7.centos.ppc64
NetworkManager-wifi-1.8.0-9.el7.ppc64
kexec-tools-2.0.14-17.el7.ppc64
apr-util-devel-1.5.2-6.el7.ppc64
abrt-cli-2.1.11-48.el7.centos.ppc64
xorg-x11-drv-v4l-0.2.0-47.el7.ppc64
oddjob-0.31.5-4.el7.ppc64
mesa-libGLU-9.0.0-4.el7.ppc64
rtkit-0.11-10.el7.ppc64
unbound-libs-1.4.20-34.el7.ppc64
brltty-4.5-15.el7.ppc64
trousers-0.3.14-2.el7.ppc64
glib-networking-2.50.0-1.el7.ppc64
gupnp-igd-0.2.4-1.el7.ppc64
telepathy-gabble-0.18.1-4.el7.ppc64
python-blivet-0.61.15.65-1.el7.noarch
libsemanage-python-2.5-8.el7.ppc64
rubygem-bigdecimal-1.2.0-30.el7.ppc64
rubygem-net-http-persistent-2.8-5.el7.noarch
librsvg2-2.40.16-1.el7.ppc64
imsettings-1.6.3-9.el7.ppc64
farstream02-0.2.3-3.el7.ppc64
phonon-4.6.0-10.el7.ppc64
hamcrest-1.3-6.el7.noarch
sane-backends-drivers-cameras-1.0.24-9.el7.ppc64
fprintd-0.5.0-4.0.el7_0.ppc64
cups-filters-1.0.35-22.el7.ppc64
sssd-ipa-1.15.2-50.el7.ppc64
libkkc-0.3.1-9.el7.ppc64
ibus-gtk3-1.5.3-13.el7.ppc64
gnome-online-accounts-3.22.5-1.el7.ppc64
zenity-3.22.0-1.el7.ppc64
vte291-0.46.2-1.el7.ppc64
clutter-gst2-2.0.18-1.el7.ppc64
libwnck3-3.20.1-1.el7.ppc64
ibus-table-1.5.0-5.el7.noarch
libtimezonemap-0.4.4-1.el7.ppc64
librsvg2-tools-2.40.16-1.el7.ppc64
webkitgtk3-2.4.11-2.el7.ppc64
evince-3.22.1-5.el7.ppc64
vim-filesystem-7.4.160-2.el7.ppc64
lldpad-1.0.1-3.git036e314.el7.ppc64
gnome-shell-extension-user-theme-3.22.2-10.el7.noarch
gettext-devel-0.19.8.1-2.el7.ppc64
pm-utils-1.4.1-27.el7.ppc64
firefox-52.2.0-2.el7.centos.ppc64
cheese-3.22.1-1.el7.ppc64
vinagre-3.22.0-8.el7.ppc64
gnome-terminal-nautilus-3.22.1-2.el7.ppc64
gnome-weather-3.20.2-1.el7.noarch
gvfs-smb-1.30.4-3.el7.ppc64
ibus-qt-1.3.2-4.el7.ppc64
PackageKit-gtk3-module-1.1.5-1.el7.centos.ppc64
PyQt4-devel-4.10.1-13.el7.ppc64
libnotify-devel-0.7.7-1.el7.ppc64
tuned-2.8.0-5.el7.noarch
freeglut-devel-2.8.1-3.el7.ppc64
httpd-devel-2.4.6-67.el7.centos.ppc64
setuptool-1.19.11-8.el7.ppc64
mlocate-0.26-6.el7.ppc64
PackageKit-command-not-found-1.1.5-1.el7.centos.ppc64
rng-tools-5-11.el7.ppc64
kpatch-0.4.0-1.el7.noarch
perl-App-cpanminus-1.6922-2.el7.noarch
gcc-c++-4.8.5-16.el7.ppc64
crypto-utils-2.4.1-42.el7.ppc64
readline-devel-6.2-10.el7.ppc64
dvd+rw-tools-7.1-15.el7.ppc64
gnome-icon-theme-symbolic-3.12.0-2.el7.noarch
iptables-devel-1.4.21-18.0.1.el7.centos.ppc64
latencytop-tui-0.5-13.el7.ppc64
wodim-1.1.11-23.el7.ppc64
papi-devel-5.2.0-23.el7.ppc64
patchutils-0.3.3-4.el7.ppc64
unixODBC-devel-2.3.1-11.el7.ppc64
bzip2-devel-1.0.6-13.el7.ppc64
vlgothic-fonts-20130607-2.el7.noarch
paratype-pt-sans-fonts-20101909-3.el7.noarch
lklug-fonts-0.6-10.20090803cvs.el7.noarch
sil-nuosu-fonts-2.1.1-5.el7.noarch
lohit-malayalam-fonts-2.5.3-2.el7.noarch
gnu-free-sans-fonts-20120503-8.el7.noarch
rfkill-0.4-9.el7.ppc64
iwl3160-firmware-22.0.7.0-56.el7.noarch
iwl1000-firmware-39.31.5.1-56.el7.noarch
iwl4965-firmware-228.61.2.24-56.el7.noarch
gpg-pubkey-f533f4fa-56585169
fontpackages-filesystem-1.44-8.el7.noarch
control-center-filesystem-3.22.2-5.el7.ppc64
libreport-filesystem-2.1.11-38.el7.centos.ppc64
latencytop-common-0.5-13.el7.ppc64
khmeros-fonts-common-5.0-17.el7.noarch
libX11-common-1.6.5-1.el7.noarch
libstdc++-4.8.5-16.el7.ppc64
freetype-2.4.11-15.el7.ppc64
chkconfig-1.7.4-1.el7.ppc64
expat-2.1.0-10.el7_3.ppc64
libgcrypt-1.5.3-14.el7.ppc64
libtdb-1.3.12-2.el7.ppc64
libvorbis-1.3.3-8.el7.ppc64
libnl3-3.2.28-4.el7.ppc64
libXfixes-5.0.3-1.el7.ppc64
libXt-1.1.5-3.el7.ppc64
libexif-0.6.21-6.el7.ppc64
jansson-2.10-1.el7.ppc64
hunspell-en-US-0.20121024-6.el7.noarch
boost-chrono-1.53.0-27.el7.ppc64
libv4l-0.9.5-4.el7.ppc64
libxkbfile-1.0.9-3.el7.ppc64
libmnl-1.0.3-7.el7.ppc64
pcre2-10.23-2.el7.ppc64
libXp-1.0.2-2.1.el7.ppc64
bzip2-1.0.6-13.el7.ppc64
libpcap-1.5.3-9.el7.ppc64
opus-1.0.2-6.el7.ppc64
perl-podlators-2.5.1-3.el7.noarch
perl-Time-HiRes-1.9725-3.el7.ppc64
perl-Time-Local-1.2300-2.el7.noarch
perl-5.16.3-292.el7.ppc64
perl-ExtUtils-Manifest-1.61-244.el7.noarch
perl-Digest-1.17-245.el7.noarch
perl-JSON-PP-2.27202-2.el7.noarch
perl-Module-Load-Conditional-0.54-3.el7.noarch
perl-IO-Zlib-1.10-292.el7.noarch
libavc1394-0.5.3-14.el7.ppc64
libnl3-cli-3.2.28-4.el7.ppc64
libdb-devel-5.3.21-20.el7.ppc64
mozjs17-17.0.0-19.el7.ppc64
boost-program-options-1.53.0-27.el7.ppc64
boost-random-1.53.0-27.el7.ppc64
libdaemon-0.14-7.el7.ppc64
hostname-3.13-3.el7.ppc64
theora-tools-1.1.1-8.el7.ppc64
libcdio-paranoia-10.2+0.90-11.el7.ppc64
perl-Archive-Zip-1.30-11.el7.noarch
perl-PlRPC-0.2020-14.el7.noarch
perl-Text-Diff-1.41-5.el7.noarch
perl-HTTP-Date-6.02-8.el7.noarch
perl-Text-Unidecode-0.04-20.el7.noarch
perl-Digest-SHA1-2.13-9.el7.ppc64
libXaw-1.0.13-4.el7.ppc64
xorg-x11-server-common-1.19.3-11.el7.ppc64
xorg-x11-xauth-1.0.9-1.el7.ppc64
startup-notification-0.12-8.el7.ppc64
libgcrypt-devel-1.5.3-14.el7.ppc64
isomd5sum-1.0.10-5.el7.ppc64
mesa-private-llvm-3.9.1-3.el7.ppc64
glibc-devel-2.17-196.el7.ppc64
openssl-libs-1.0.2k-8.el7.ppc64
ruby-libs-2.0.0.648-30.el7.ppc64
atk-2.22.0-3.el7.ppc64
avahi-glib-0.6.31-17.el7.ppc64
libpeas-1.20.0-1.el7.ppc64
freetype-devel-2.4.11-15.el7.ppc64
mariadb-libs-5.5.56-2.el7.ppc64
libudisks2-2.1.2-6.el7.ppc64
python-gssapi-1.2.0-3.el7.ppc64
plymouth-core-libs-0.8.9-0.28.20140113.el7.centos.ppc64
libSM-devel-1.2.2-2.el7.ppc64
libxcb-devel-1.12-1.el7.ppc64
libXi-devel-1.7.9-1.el7.ppc64
atk-devel-2.22.0-3.el7.ppc64
libffi-devel-3.0.13-18.el7.ppc64
libgtop2-2.34.2-1.el7.ppc64
python-dns-1.12.0-4.20150617git465785f.el7.noarch
boost-python-1.53.0-27.el7.ppc64
boost-1.53.0-27.el7.ppc64
perl-Archive-Extract-0.68-3.el7.noarch
python-yubico-1.2.3-1.el7.noarch
libusbx-devel-1.0.20-1.el7.ppc64
python-firewall-0.4.4.4-6.el7.noarch
libicu-devel-50.1.2-15.el7.ppc64
openssl-devel-1.0.2k-8.el7.ppc64
gstreamer1-devel-1.10.4-2.el7.ppc64
libgcab1-0.7-3.el7.ppc64
cups-client-1.6.3-29.el7.ppc64
python-ipaddress-1.0.16-2.el7.noarch
python-urwid-1.1.1-3.el7.ppc64
python-tempita-0.5.1-6.el7.noarch
cmpi-bindings-pywbem-0.9.5-6.el7.ppc64
python-ntplib-0.3.2-1.el7.noarch
gd-2.0.35-26.el7.ppc64
perl-Net-HTTP-6.06-2.el7.noarch
cyrus-sasl-md5-2.1.26-21.el7.ppc64
NetworkManager-libnm-1.8.0-9.el7.ppc64
satyr-0.13-14.el7.ppc64
liboauth-0.9.7-4.el7.ppc64
dhcp-common-4.2.5-58.el7.centos.ppc64
sip-devel-4.14.6-4.el7.ppc64
marisa-0.2.4-4.el7.ppc64
libreport-plugin-mantisbt-2.1.11-38.el7.centos.ppc64
dotconf-1.3-8.el7.ppc64
autogen-libopts-5.18-5.el7.ppc64
festival-lib-1.96-28.el7.ppc64
rpm-build-libs-4.11.3-25.el7.ppc64
createrepo-0.9.9-28.el7.noarch
libiptcdata-1.0.4-11.el7.ppc64
gavl-1.4.0-4.el7.ppc64
ustr-1.0.4-16.el7.ppc64
kpartx-0.4.9-111.el7.ppc64
libdrm-2.4.74-1.el7.ppc64
pango-1.40.4-1.el7.ppc64
dbus-x11-1.6.12-17.el7.ppc64
device-mapper-event-libs-1.02.140-8.el7.ppc64
samba-client-libs-4.6.2-8.el7.ppc64
accountsservice-libs-0.6.45-2.el7.ppc64
cronie-1.4.11-17.el7.ppc64
libstoragemgmt-python-clibs-1.4.0-3.el7.ppc64
libibverbs-13-7.el7.ppc64
python-gobject-3.22.0-1.el7.ppc64
ppp-2.4.5-33.el7.ppc64
lockdev-1.0.4-0.13.20111007git.el7.ppc64
python-meh-0.25.2-1.el7.noarch
mesa-libEGL-devel-17.0.1-6.20170307.el7.ppc64
librdmacm-13-7.el7.ppc64
abrt-addon-vmcore-2.1.11-48.el7.centos.ppc64
pcp-selinux-3.11.8-7.el7.ppc64
samba-common-libs-4.6.2-8.el7.ppc64
xorg-x11-drv-synaptics-1.9.0-1.el7.ppc64
oddjob-mkhomedir-0.31.5-4.el7.ppc64
mesa-libGLU-devel-9.0.0-4.el7.ppc64
pulseaudio-10.0-3.el7.ppc64
fxload-2002_04_11-16.el7.ppc64
brlapi-0.6.0-15.el7.ppc64
gnutls-3.3.26-9.el7.ppc64
libsoup-2.56.0-3.el7.ppc64
libnice-0.1.3-4.el7.ppc64
telepathy-salut-0.8.1-6.el7.ppc64
selinux-policy-3.13.1-166.el7.noarch
policycoreutils-python-2.5-17.1.el7.ppc64
ruby-irb-2.0.0.648-30.el7.noarch
libestr-0.1.9-2.el7.ppc64
sane-backends-libs-1.0.24-9.el7.ppc64
gtk-update-icon-cache-3.22.10-4.el7.ppc64
system-config-printer-libs-1.4.1-19.el7.noarch
PyQt4-4.10.1-13.el7.ppc64
junit-4.11-8.el7.noarch
sane-backends-drivers-scanners-1.0.24-9.el7.ppc64
libgsf-1.14.26-7.el7.ppc64
cups-1.6.3-29.el7.ppc64
sssd-krb5-1.15.2-50.el7.ppc64
adwaita-cursor-theme-3.22.0-1.el7.noarch
ibus-1.5.3-13.el7.ppc64
nautilus-extensions-3.22.3-3.el7.ppc64
libreport-gtk-2.1.11-38.el7.centos.ppc64
gjs-1.46.0-1.el7.ppc64
libcanberra-gtk2-0.30-5.el7.ppc64
gtk3-devel-3.22.10-4.el7.ppc64
gvfs-fuse-1.30.4-3.el7.ppc64
gtkspell3-3.0.3-4.el7.ppc64
keybinder3-0.3.0-1.el7.ppc64
im-chooser-1.6.4-4.el7.ppc64
mutter-3.22.3-11.el7.ppc64
gnome-user-docs-3.22.0-1.el7.noarch
kernel-3.10.0-693.el7.ppc64
gnome-shell-extension-common-3.22.2-10.el7.noarch
gettext-common-devel-0.19.8.1-2.el7.noarch
initial-setup-gui-0.3.9.40-1.el7.centos.ppc64
fcoe-utils-1.0.32-1.el7.ppc64
empathy-3.12.12-4.el7.ppc64
gnome-system-monitor-3.22.2-2.el7.ppc64
ibus-table-chinese-1.4.6-3.el7.noarch
gnome-calculator-3.22.3-1.el7.ppc64
gvfs-archive-1.30.4-3.el7.ppc64
ibus-libpinyin-1.6.91-4.el7.ppc64
baobab-3.22.1-1.el7.ppc64
fprintd-pam-0.5.0-4.0.el7_0.ppc64
gtk2-immodule-xim-2.24.31-1.el7.ppc64
systemtap-3.1-3.el7.ppc64
pulseaudio-module-x11-10.0-3.el7.ppc64
cgdcbxd-1.0.2-7.el7.ppc64
openssh-server-7.4p1-11.el7.ppc64
avahi-0.6.31-17.el7.ppc64
usbutils-007-5.el7.ppc64
at-3.1.13-22.el7.ppc64
aic94xx-firmware-30-6.el7.noarch
yum-langpacks-0.4.2-7.el7.noarch
tbb-devel-4.1-9.20130314.el7.ppc64
libcurl-devel-7.29.0-42.el7.ppc64
perl-XML-Twig-3.44-2.el7.noarch
perl-core-5.16.3-292.el7.ppc64
startup-notification-devel-0.12-8.el7.ppc64
sqlite-devel-3.7.17-8.el7.ppc64
libcap-devel-2.22-9.el7.ppc64
ps_mem-3.1-7.el7.noarch
libacl-devel-2.2.51-12.el7.ppc64
mpfr-devel-3.1.1-4.el7.ppc64
hyphen-en-2.8.6-5.el7.noarch
nfs4-acl-tools-0.3.3-15.el7.ppc64
swig-2.0.10-5.el7.ppc64
khmeros-base-fonts-5.0-17.el7.noarch
stix-fonts-1.1.0-5.el7.noarch
lohit-kannada-fonts-2.5.3-3.el7.noarch
smc-meera-fonts-6.0-7.el7.noarch
ucs-miscfixed-fonts-0.3-11.el7.noarch
ctags-5.8-13.el7.ppc64
iwl105-firmware-18.168.6.1-56.el7.noarch
iwl6050-firmware-41.28.5.1-56.el7.noarch
iwl5000-firmware-8.83.5.1_1-56.el7.noarch
libgcc-4.8.5-16.el7.ppc
python34-libs-3.4.5-5.el7.ppc64
grub2-common-2.02-0.64.el7.centos.noarch
xkeyboard-config-2.20-1.el7.noarch
basesystem-10.0-7.el7.centos.noarch
langtable-0.0.31-3.el7.noarch
thai-scalable-fonts-common-0.5.0-7.el7.noarch
vte-profile-0.46.2-1.el7.ppc64
ncurses-libs-5.9-13.20130511.el7.ppc64
info-5.1-4.el7.ppc64
xz-libs-5.2.2-1.el7.ppc64
libdb-5.3.21-20.el7.ppc64
libtalloc-2.1.9-1.el7.ppc64
libattr-2.4.46-12.el7.ppc64
augeas-libs-1.4.0-2.el7.ppc64
binutils-2.25.1-31.base.el7.ppc64
libXdamage-1.1.4-4.1.el7.ppc64
libbasicobjects-0.1.1-27.el7.ppc64
libidn-1.28-4.el7.ppc64
libtool-ltdl-2.4.2-22.el7_3.ppc64
hunspell-1.3.2-15.el7.ppc64
libXxf86vm-1.1.4-1.el7.ppc64
libgomp-4.8.5-16.el7.ppc64
xorg-x11-xkb-utils-7.7-12.el7.ppc64
libseccomp-2.3.1-3.el7.ppc64
libaio-0.3.109-13.el7.ppc64
libXpm-3.5.12-1.el7.ppc64
zip-3.0-11.el7.ppc64
libXdmcp-1.1.2-6.el7.ppc64
wavpack-4.60.1-9.el7.ppc64
perl-Pod-Perldoc-3.20-4.el7.noarch
perl-Storable-2.45-3.el7.ppc64
perl-constant-1.27-2.el7.noarch
perl-Data-Dumper-2.145-3.el7.ppc64
perl-Pod-Parser-1.61-2.el7.noarch
perl-Perl-OSType-1.003-3.el7.noarch
autoconf-2.69-11.el7.noarch
perl-Params-Check-0.38-2.el7.noarch
perl-IO-Compress-2.061-2.el7.noarch
libdvdnav-5.0.3-1.el7.ppc64
xorg-x11-server-utils-7.7-20.el7.ppc64
bc-1.06.95-13.el7.ppc64
mozjs24-24.2.0-7.el7.ppc64
graphite2-1.3.6-1.el7_2.ppc64
boost-signals-1.53.0-27.el7.ppc64
libusal-1.1.11-23.el7.ppc64
SDL-1.2.15-14.el7.ppc64
sysvinit-tools-2.88-14.dsf.el7.ppc64
crash-7.1.9-2.el7.ppc64
perl-Pod-LaTeX-0.61-2.el7.noarch
perl-Net-Daemon-0.48-5.el7.noarch
perl-Algorithm-Diff-1.1902-17.el7.noarch
perl-TimeDate-2.30-2.el7.noarch
perl-Font-AFM-1.20-13.el7.noarch
perl-Time-Piece-1.20.1-292.el7.ppc64
libXfont-1.5.2-1.el7.ppc64
ipset-6.29-1.el7.ppc64
hunspell-en-GB-0.20121024-6.el7.noarch
xcb-util-0.4.0-2.el7.ppc64
libgpg-error-devel-1.12-3.el7.ppc64
libbluray-0.2.3-5.el7.ppc64
ttmkfdir-3.0.9-42.el7.ppc64
glibc-headers-2.17-196.el7.ppc64
coreutils-8.22-18.el7.ppc64
libarchive-3.1.2-10.el7_2.ppc64
shared-mime-info-1.8-3.el7.ppc64
gvfs-client-1.30.4-3.el7.ppc64
libcroco-0.6.11-1.el7.ppc64
libgee-0.18.1-1.el7.ppc64
hicolor-icon-theme-0.12-7.el7.noarch
cracklib-2.9.0-11.el7.ppc64
cracklib-dicts-2.9.0-11.el7.ppc64
python-pyudev-0.15-9.el7.noarch
atkmm-2.24.2-1.el7.ppc64
libX11-devel-1.6.5-1.el7.ppc64
libXdamage-devel-1.1.4-4.1.el7.ppc64
libcom_err-devel-1.42.9-10.el7.ppc64
libpinyin-data-0.9.93-4.el7.ppc64
xfsprogs-4.5.0-12.el7.ppc64
python-sssdconfig-1.15.2-50.el7.noarch
libkadm5-1.15.1-8.el7.ppc64
python-kitchen-1.1.1-5.el7.noarch
perl-ExtUtils-CBuilder-0.28.2.6-292.el7.noarch
python-libipa_hbac-1.15.2-50.el7.ppc64
libatasmart-0.19-6.el7.ppc64
pinentry-qt-0.8.1-17.el7.ppc64
alsa-lib-devel-1.1.3-3.el7.ppc64
ncurses-devel-5.9-13.20130511.el7.ppc64
libuuid-devel-2.23.2-43.el7.ppc64
kernel-bootwrapper-3.10.0-693.el7.ppc64
python-markupsafe-0.11-10.el7.ppc64
python-backports-1.0-8.el7.ppc64
python-configshell-1.1.fb23-3.el7.noarch
python-paste-1.7.5.1-9.20111221hg1498.el7.noarch
openlmi-python-base-0.5.0-4.el7.noarch
python-iniparse-0.4-9.el7.noarch
bind-libs-lite-9.9.4-50.el7.ppc64
perl-libwww-perl-6.05-2.el7.noarch
libssh2-1.4.3-10.el7_2.1.ppc64
nss-sysinit-3.28.4-8.el7.ppc64
openldap-2.4.44-5.el7.ppc64
libnfsidmap-0.25-17.el7.ppc64
python-deltarpm-3.6-3.el7.ppc64
sip-macros-4.14.6-4.el7.ppc64
trace-cmd-2.6.0-8.el7.ppc64
libreport-web-2.1.11-38.el7.centos.ppc64
libreport-plugin-ureport-2.1.11-38.el7.centos.ppc64
libhangul-0.1.0-8.el7.ppc64
sox-14.4.1-6.el7.ppc64
gnupg2-2.0.22-4.el7.ppc64
yum-3.4.3-154.el7.centos.noarch
hardlink-1.0-19.el7.ppc64
libgdither-0.6-8.el7.ppc64
pakchois-0.4-10.el7.ppc64
policycoreutils-2.5-17.1.el7.ppc64
dbus-1.6.12-17.el7.ppc64
cairo-1.14.8-2.el7.ppc64
GConf2-3.2.6-8.el7.ppc64
hwdata-0.252-8.6.el7.ppc64
libwbclient-4.6.2-8.el7.ppc64
accountsservice-0.6.45-2.el7.ppc64
cronie-anacron-1.4.11-17.el7.ppc64
libstoragemgmt-1.4.0-3.el7.ppc64
rdma-core-13-7.el7.ppc64
pycairo-1.8.10-8.el7.ppc64
dbus-devel-1.6.12-17.el7.ppc64
abrt-addon-python-2.1.11-48.el7.centos.ppc64
openssh-clients-7.4p1-11.el7.ppc64
at-spi2-atk-devel-2.22.0-2.el7.ppc64
ibacm-13-7.el7.ppc64
plymouth-plugin-label-0.8.9-0.28.20140113.el7.centos.ppc64
pcp-3.11.8-7.el7.ppc64
xorg-x11-drv-wacom-0.34.2-2.el7.ppc64
xorg-x11-drv-fbdev-0.4.3-25.el7.ppc64
realmd-0.16.1-9.el7.ppc64
glx-utils-8.2.0-3.el7.ppc64
xdg-desktop-portal-0.5-2.el7.ppc64
alsa-firmware-1.0.28-2.el7.noarch
python-brlapi-0.6.0-15.el7.ppc64
libimobiledevice-1.2.0-1.el7.ppc64
geocode-glib-3.20.1-1.el7.ppc64
rest-0.8.0-1.el7.ppc64
gnutls-c++-3.3.26-9.el7.ppc64
virt-what-1.13-10.el7.ppc64
setroubleshoot-plugins-3.0.65-1.el7.noarch
ruby-2.0.0.648-30.el7.ppc64
libpipeline-1.2.3-3.el7.ppc64
qt-x11-4.8.5-13.el7.ppc64
gtk2-2.24.31-1.el7.ppc64
hplip-libs-3.15.9-3.el7.ppc64
telepathy-farstream-0.6.0-5.el7.ppc64
libglade2-2.6.4-11.el7.ppc64
qt-devel-4.8.5-13.el7.ppc64
tracker-1.10.5-4.el7.ppc64
ghostscript-cups-9.07-28.el7.ppc64
sssd-ldap-1.15.2-50.el7.ppc64
adwaita-icon-theme-3.22.0-1.el7.noarch
ibus-setup-1.5.3-13.el7.noarch
libgweather-3.20.4-1.el7.ppc64
libgdata-0.17.8-1.el7.ppc64
grilo-0.3.3-1.el7.ppc64
metacity-2.34.13-7.el7.ppc64
gnome-abrt-0.3.4-8.el7.ppc64
yelp-libs-3.22.0-1.el7.ppc64
gnome-packagekit-updater-3.22.1-2.el7.ppc64
vino-3.22.0-3.el7.ppc64
im-chooser-common-1.6.4-4.el7.ppc64
totem-3.22.1-1.el7.ppc64
yelp-3.22.0-1.el7.ppc64
linux-firmware-20170606-56.gitc990aae.el7.noarch
pulseaudio-gdm-hooks-10.0-3.el7.ppc64
tigervnc-server-minimal-1.8.0-1.el7.ppc64
initial-setup-0.3.9.40-1.el7.centos.ppc64
gnome-session-xsession-3.22.3-4.el7.ppc64
totem-nautilus-3.22.1-1.el7.ppc64
imsettings-qt-1.6.3-9.el7.ppc64
gucharmap-3.18.2-1.el7.ppc64
sushi-3.21.91-1.el7.ppc64
gvfs-mtp-1.30.4-3.el7.ppc64
ibus-sayura-1.3.2-3.el7.ppc64
gtk3-immodule-xim-3.22.10-4.el7.ppc64
sane-backends-devel-1.0.24-9.el7.ppc64
latencytop-0.5-13.el7.ppc64
openlmi-providers-devel-0.5.0-4.el7.ppc64
alsa-plugins-pulseaudio-1.1.1-1.el7.ppc64
abrt-console-notification-2.1.11-48.el7.centos.ppc64
grub2-2.02-0.64.el7.centos.ppc64
NetworkManager-adsl-1.8.0-9.el7.ppc64
spice-vdagent-0.14.0-14.el7.ppc64
qemu-guest-agent-2.8.0-2.el7.ppc64
powertop-2.3-12.el7.ppc64
net-snmp-devel-5.7.2-28.el7.ppc64
libproxy-mozjs-0.4.11-10.el7.ppc64
sudo-1.8.19p2-10.el7.ppc64
tk-devel-8.5.13-6.el7.ppc64
perl-homedir-1.008010-4.el7.noarch
pinfo-0.6.10-9.el7.ppc64
libnl-devel-1.1.4-3.el7.ppc64
bash-completion-2.1-6.el7.noarch
perl-Crypt-SSLeay-0.64-5.el7.ppc64
xorg-x11-utils-7.5-22.el7.ppc64
perl-Test-Pod-1.48-3.el7.noarch
bison-3.0.4-1.el7.ppc64
m17n-contrib-1.1.14-3.el7.noarch
lohit-gujarati-fonts-2.5.3-2.el7.noarch
lohit-devanagari-fonts-2.5.3-4.el7.noarch
liberation-serif-fonts-1.07.2-15.el7.noarch
nhn-nanum-gothic-fonts-3.020-9.el7.noarch
google-crosextra-caladea-fonts-1.002-0.4.20130214.el7.noarch
jomolhari-fonts-0.003-17.el7.noarch
diffstat-1.57-4.el7.ppc64
iwl6000g2b-firmware-17.168.5.2-56.el7.noarch
rootfiles-8.1-11.el7.noarch
ivtv-firmware-20080701-26.el7.noarch
strace32-4.12-4.el7.ppc
python34-3.4.5-5.el7.ppc64
kernel-headers-3.10.0-693.el7.ppc64
tzdata-2017b-1.el7.noarch
m17n-db-1.6.4-3.el7.noarch
langtable-data-0.0.31-3.el7.noarch
libkkc-common-0.3.1-9.el7.noarch
firewalld-filesystem-0.4.4.4-6.el7.noarch
bash-4.2.46-28.el7.ppc64
libcom_err-1.42.9-10.el7.ppc64
libxml2-2.9.1-6.el7_2.3.ppc64
readline-6.2-10.el7.ppc64
cyrus-sasl-lib-2.1.26-21.el7.ppc64
libcap-2.22-9.el7.ppc64
which-2.20-7.el7.ppc64
libcollection-0.6.2-27.el7.ppc64
libXcomposite-0.4.4-4.1.el7.ppc64
libref_array-0.1.5-27.el7.ppc64
cpio-2.11-24.el7.ppc64
orc-0.4.26-1.el7.ppc64
libsigc++20-2.10.0-1.el7.ppc64
libXv-1.0.11-1.el7.ppc64
lzo-2.06-8.el7.ppc64
kmod-libs-20-15.el7.ppc64
libxshmfence-1.2-1.el7.ppc64
speex-1.2-0.19.rc1.el7.ppc64
boost-regex-1.53.0-27.el7.ppc64
m4-1.4.16-10.el7.ppc64
libnl-1.1.4-3.el7.ppc64
pciutils-libs-3.5.1-2.el7.ppc64
perl-Pod-Escapes-1.04-292.el7.noarch
perl-Carp-1.26-244.el7.noarch
perl-Socket-2.010-4.el7.ppc64
perl-version-0.99.07-2.el7.ppc64
perl-Thread-Queue-3.02-2.el7.noarch
perl-CPAN-Meta-Requirements-2.122-7.el7.noarch
perl-Locale-Maketext-Simple-0.21-292.el7.noarch
perl-Compress-Raw-Bzip2-2.061-3.el7.ppc64
libshout-2.2.2-11.el7.ppc64
libXxf86misc-1.0.3-7.1.el7.ppc64
libassuan-2.1.0-3.el7.ppc64
jasper-libs-1.900.1-31.el7.ppc64
lksctp-tools-1.0.17-2.el7.ppc64
libconfig-1.4.9-5.el7.ppc64
cdparanoia-libs-10.2-17.el7.ppc64
libsss_autofs-1.15.2-50.el7.ppc64
libmpcdec-1.2.6-12.el7.ppc64
libxkbcommon-x11-0.7.1-1.el7.ppc64
perl-Pod-Checker-1.60-2.el7.noarch
perl-IO-HTML-1.00-2.el7.noarch
perl-Locale-Codes-3.26-2.el7.noarch
perl-WWW-RobotRules-6.02-5.el7.noarch
perl-File-Listing-6.04-7.el7.noarch
perl-File-CheckTree-4.42-3.el7.noarch
iw-4.3-1.el7.ppc64
ipset-libs-6.29-1.el7.ppc64
gdbm-devel-1.10-8.el7.ppc64
libXxf86dga-1.1.4-2.1.el7.ppc64
cyrus-sasl-plain-2.1.26-21.el7.ppc64
exiv2-libs-0.23-6.el7.ppc64
libchewing-0.3.4-6.el7.ppc64
elfutils-0.168-8.el7.ppc64
ncurses-5.9-13.20130511.el7.ppc64
alsa-lib-1.1.3-3.el7.ppc64
glib2-2.50.3-3.el7.ppc64
gobject-introspection-1.50.0-1.el7.ppc64
dbus-python-1.1.1-9.el7.ppc64
enchant-1.6.0-8.el7.ppc64
xorg-x11-xinit-1.3.4-1.el7.ppc64
python-decorator-3.4.0-3.el7.noarch
xorg-x11-font-utils-7.5-20.el7.ppc64
cyrus-sasl-gssapi-2.1.26-21.el7.ppc64
libusbx-1.0.20-1.el7.ppc64
colord-libs-1.3.4-1.el7.ppc64
telepathy-logger-0.8.0-5.el7.ppc64
libXt-devel-1.1.5-3.el7.ppc64
pcre-devel-8.32-17.el7.ppc64
libXft-devel-2.3.2-2.el7.ppc64
libgnome-keyring-3.12.0-1.el7.ppc64
python-ethtool-0.8-5.el7.ppc64
pyOpenSSL-0.13.1-3.el7.ppc64
libtool-2.4.2-22.el7_3.ppc64
perl-devel-5.16.3-292.el7.ppc64
perl-CPANPLUS-Dist-Build-0.70-3.el7.noarch
libqmi-utils-1.16.0-1.el7.ppc64
python-slip-0.4.0-2.el7.noarch
libsepol-devel-2.5-6.el7.ppc64
libverto-devel-0.2.5-4.el7.ppc64
python-devel-2.7.5-58.el7.ppc64
gupnp-av-0.12.10-1.el7.ppc64
flite-1.3-22.el7.ppc64
python-javapackages-3.4.1-11.el7.noarch
python-requests-2.6.0-1.el7_1.noarch
fros-1.0-2.el7.noarch
m2crypto-0.21.1-17.el7.ppc64
pytz-2016.10-2.el7.noarch
python2-cryptography-1.7.2-1.el7.ppc64
perl-Net-SSLeay-1.55-6.el7.ppc64
openslp-2.0.0-6.el7.ppc64
nss-tools-3.28.4-8.el7.ppc64
libreport-2.1.11-38.el7.centos.ppc64
dhcp-libs-4.2.5-58.el7.centos.ppc64
passwd-0.79-4.el7.ppc64
net-snmp-agent-libs-5.7.2-28.el7.ppc64
konkretcmpi-python-0.9.1-5.el7.ppc64
libreport-plugin-bugzilla-2.1.11-38.el7.centos.ppc64
libgfortran-4.8.5-16.el7.ppc64
libasyncns-0.8-7.el7.ppc64
festival-1.96-28.el7.ppc64
gpgme-1.3.2-5.el7.ppc64
rpm-devel-4.11.3-25.el7.ppc64
libini_config-1.3.0-27.el7.ppc64
gnome-video-effects-0.4.3-1.el7.noarch
shadow-utils-4.1.5.1-24.el7.ppc64
device-mapper-libs-1.02.140-8.el7.ppc64
polkit-pkla-compat-0.1-4.el7.ppc64
gstreamer1-plugins-base-1.10.4-1.el7.ppc64
java-1.7.0-openjdk-headless-1.7.0.141-2.6.10.5.el7.ppc64
xorg-x11-server-Xorg-1.19.3-11.el7.ppc64
parted-3.1-28.el7.ppc64
abrt-2.1.11-48.el7.centos.ppc64
initscripts-9.49.39-1.el7.ppc64
abrt-addon-pstoreoops-2.1.11-48.el7.centos.ppc64
telepathy-mission-control-5.16.3-3.el7.ppc64
colord-1.3.4-1.el7.ppc64
os-prober-1.58-9.el7.ppc64
cryptsetup-1.7.4-3.el7.ppc64
git-1.8.3.1-11.el7.ppc64
cairo-gobject-devel-1.14.8-2.el7.ppc64
qt-settings-19-23.5.el7.centos.noarch
dmraid-1.0.0.rc16-28.el7.ppc64
plymouth-plugin-two-step-0.8.9-0.28.20140113.el7.centos.ppc64
sysstat-10.1.5-12.el7.ppc64
xorg-x11-drv-dummy-0.3.7-1.el7.ppc64
xorg-x11-drv-qxl-0.1.5-3.el7.ppc64
audit-2.7.6-3.el7.ppc64
freeglut-2.8.1-3.el7.ppc64
certmonger-0.78.4-3.el7.ppc64
alsa-tools-firmware-1.1.0-1.el7.ppc64
python-rtslib-2.1.fb63-2.el7.noarch
upower-0.99.4-2.el7.ppc64
totem-pl-parser-3.10.7-1.el7.ppc64
dleyna-core-0.5.0-1.el7.ppc64
gnutls-dane-3.3.26-9.el7.ppc64
systemtap-runtime-3.1-3.el7.ppc64
setroubleshoot-server-3.2.28-3.el7.ppc64
rubygem-io-console-0.4.2-30.el7.ppc64
jbigkit-libs-2.0-11.el7.ppc64
sane-backends-1.0.24-9.el7.ppc64
java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.ppc64
gstreamer-plugins-good-0.10.31-13.el7.ppc64
poppler-utils-0.26.5-16.el7.ppc64
pygtk2-libglade-2.24.0-9.el7.ppc64
gstreamer-plugins-bad-free-0.10.23-23.el7.ppc64
libappstream-glib-0.6.10-1.el7.ppc64
libsss_sudo-1.15.2-50.el7.ppc64
sssd-proxy-1.15.2-50.el7.ppc64
gtk3-3.22.10-4.el7.ppc64
gvfs-1.30.4-3.el7.ppc64
clutter-gst3-3.0.22-1.el7.ppc64
evolution-data-server-3.22.7-6.el7.ppc64
gtksourceview3-3.22.2-1.el7.ppc64
abrt-gui-libs-2.1.11-48.el7.centos.ppc64
python-meh-gui-0.25.2-1.el7.noarch
gnome-packagekit-common-3.22.1-2.el7.ppc64
unique3-3.0.2-8.el7.ppc64
gtkmm30-3.22.0-1.el7.ppc64
nautilus-3.22.3-3.el7.ppc64
yelp-xsl-3.20.1-1.el7.noarch
centos-indexhtml-7-9.el7.centos.noarch
gdm-3.22.3-11.el7.ppc64
gnome-shell-extension-launch-new-instance-3.22.2-10.el7.noarch
anaconda-gui-21.48.22.121-1.el7.centos.ppc64
system-config-printer-1.4.1-19.el7.ppc64
evince-nautilus-3.22.1-5.el7.ppc64
gnome-font-viewer-3.22.0-1.el7.ppc64
unique3-devel-3.0.2-8.el7.ppc64
NetworkManager-libreswan-gnome-1.2.4-2.el7.ppc64
gvfs-afc-1.30.4-3.el7.ppc64
ibus-rawcode-1.3.2-3.el7.ppc64
mousetweaks-3.12.0-1.el7.ppc64
hpijs-3.15.9-3.el7.ppc64
java-1.7.0-openjdk-devel-1.7.0.141-2.6.10.5.el7.ppc64
rubygem-abrt-0.3.0-1.el7.noarch
targetcli-2.1.fb46-1.el7.noarch
samba-client-4.6.2-8.el7.ppc64
rdma-core-devel-13-7.el7.ppc64
NetworkManager-tui-1.8.0-9.el7.ppc64
mod_ssl-2.4.6-67.el7.centos.ppc64
systemd-devel-219-42.el7.ppc64
smartmontools-6.2-8.el7.ppc64
iprutils-2.4.14.1-1.el7.ppc64
gcc-gfortran-4.8.5-16.el7.ppc64
adcli-0.8.1-3.el7.ppc64
motif-devel-2.3.4-8.1.el7_3.ppc64
e2fsprogs-devel-1.42.9-10.el7.ppc64
binutils-devel-2.25.1-31.base.el7.ppc64
audit-libs-devel-2.7.6-3.el7.ppc64
perf-3.10.0-693.el7.ppc64
libitm-devel-4.8.5-16.el7.ppc64
crash-gcore-command-1.3.1-0.el7.ppc64
numactl-devel-2.0.9-6.el7_2.ppc64
xvattr-1.3-27.el7.ppc64
ed-1.9-4.el7.ppc64
dejavu-serif-fonts-2.33-6.el7.noarch
dejavu-sans-fonts-2.33-6.el7.noarch
lohit-telugu-fonts-2.5.3-3.el7.noarch
scl-utils-20130529-17.el7_1.ppc64
open-sans-fonts-1.10-1.el7.noarch
strace-4.12-4.el7.ppc64
setserial-2.17-33.el7.ppc64
iwl100-firmware-39.31.5.1-56.el7.noarch
iwl6000g2a-firmware-17.168.5.3-56.el7.noarch
glibc-2.17-196.el7.ppc
centos-release-7-4.1708.el7.centos.ppc64
dejavu-fonts-common-2.33-6.el7.noarch
mobile-broadband-provider-info-1.20170310-1.el7.noarch
bind-license-9.9.4-50.el7.noarch
appstream-data-7-20170301.el7.noarch
libkkc-data-0.3.1-9.el7.ppc64
pcre-8.32-17.el7.ppc64
nspr-4.13.1-1.0.el7_3.ppc64
bzip2-libs-1.0.6-13.el7.ppc64
sqlite-3.7.17-8.el7.ppc64
keyutils-libs-1.5.8-3.el7.ppc64
libacl-2.2.51-12.el7.ppc64
lcms2-2.6-3.el7.ppc64
libXau-1.0.8-2.1.el7.ppc64
libXrender-0.9.10-1.el7.ppc64
libldb-1.1.29-1.el7.ppc64
file-libs-5.11-33.el7.ppc64
libXmu-1.1.2-2.el7.ppc64
gdbm-1.10-8.el7.ppc64
tar-1.26-32.el7.ppc64
libepoxy-1.3.1-1.el7.ppc64
e2fsprogs-libs-1.42.9-10.el7.ppc64
libverto-0.2.5-4.el7.ppc64
gsm-1.0.13-11.el7.ppc64
keyutils-1.5.8-3.el7.ppc64
taglib-1.8-7.20130218git.el7.ppc64
libwebp-0.3.0-7.el7.ppc64
openjpeg-libs-1.5.1-17.el7.ppc64
perl-Text-ParseWords-3.29-4.el7.noarch
perl-Filter-1.49-3.el7.ppc64
perl-File-Path-2.09-2.el7.noarch
perl-Compress-Raw-Zlib-2.061-4.el7.ppc64
perl-Package-Constants-0.02-292.el7.noarch
perl-Digest-MD5-2.52-3.el7.ppc64
perl-Locale-Maketext-1.23-3.el7.noarch
perl-local-lib-1.008010-4.el7.noarch
boost-wave-1.53.0-27.el7.ppc64
ca-certificates-2017.2.14-71.el7.noarch
patch-2.7.1-8.el7.ppc64
libjpeg-turbo-devel-1.2.90-5.el7.ppc64
abattis-cantarell-fonts-0.0.25-1.el7.noarch
soundtouch-1.4.0-9.el7.ppc64
lsvpd-1.7.8-1.el7.ppc64
c-ares-1.10.0-3.el7.ppc64
libvpx-1.3.0-5.el7_0.ppc64
m17n-lib-1.6.4-14.el7.ppc64
perl-libxml-perl-0.08-19.el7.noarch
perl-Net-LibIDN-0.12-15.el7.ppc64
perl-Newt-1.08-36.el7.ppc64
perl-URI-1.60-9.el7.noarch
perl-HTTP-Negotiate-6.01-5.el7.noarch
perl-Env-1.04-2.el7.noarch
papi-5.2.0-23.el7.ppc64
libverto-tevent-0.2.5-4.el7.ppc64
libusbmuxd-1.0.10-5.el7.ppc64
libdmx-1.1.3-3.el7.ppc64
keyutils-libs-devel-1.5.8-3.el7.ppc64
libdb-utils-5.3.21-20.el7.ppc64
libitm-4.8.5-16.el7.ppc64
elfutils-libs-0.168-8.el7.ppc64
liberation-sans-fonts-1.07.2-15.el7.noarch
cups-libs-1.6.3-29.el7.ppc64
libmount-2.23.2-43.el7.ppc64
libsecret-0.18.5-2.el7.ppc64
telepathy-glib-0.24.0-1.el7.ppc64
openssl-1.0.2k-8.el7.ppc64
harfbuzz-icu-1.3.2-1.el7.ppc64
libselinux-python-2.5-11.el7.ppc64
ModemManager-glib-1.6.0-2.el7.ppc64
libevent-2.0.21-4.el7.ppc64
libmbim-1.14.0-2.el7.ppc64
xorg-x11-fonts-Type1-7.5-9.el7.noarch
libXau-devel-1.0.8-2.1.el7.ppc64
libXcursor-devel-1.1.14-8.el7.ppc64
glib2-devel-2.50.3-3.el7.ppc64
apr-devel-1.4.8-3.el7.ppc64
yum-metadata-parser-1.1.4-10.el7.ppc64
langtable-python-0.0.31-3.el7.noarch
pyliblzma-0.5.3-11.el7.ppc64
krb5-workstation-1.15.1-8.el7.ppc64
perl-IPC-Cmd-0.80-4.el7.noarch
perl-ExtUtils-Embed-1.30-292.el7.noarch
libmbim-utils-1.14.0-2.el7.ppc64
python-slip-dbus-0.4.0-2.el7.noarch
libselinux-devel-2.5-11.el7.ppc64
krb5-devel-1.15.1-8.el7.ppc64
check-devel-0.9.9-5.el7.ppc64
compat-libcolord1-1.0.4-1.el7.ppc64
python-cups-1.9.63-6.el7.ppc64
javapackages-tools-3.4.1-11.el7.noarch
python-configobj-4.7.2-7.el7.noarch
python-linux-procfs-0.4.9-3.el7.noarch
pywbem-0.7.0-25.20130827svn625.el7.noarch
pyxattr-0.5.1-5.el7.ppc64
python-jwcrypto-0.2.1-1.el7.noarch
perl-IO-Socket-SSL-1.94-6.el7.noarch
ldns-1.6.16-10.el7.ppc64
libsss_certmap-1.15.2-50.el7.ppc64
libreport-python-2.1.11-38.el7.centos.ppc64
libreport-cli-2.1.11-38.el7.centos.ppc64
libuser-python-0.60-7.el7_1.ppc64
systemtap-devel-3.1-3.el7.ppc64
konkretcmpi-0.9.1-5.el7.ppc64
libreport-centos-2.1.11-38.el7.centos.ppc64
libsrtp-1.4.4-10.20101004cvs.el7.ppc64
libndp-1.2-7.el7.ppc64
festvox-slt-arctic-hts-0.20061229-28.el7.noarch
rpm-python-4.11.3-25.el7.ppc64
yum-utils-1.1.31-42.el7.noarch
libpath_utils-0.2.1-27.el7.ppc64
frei0r-plugins-1.3-13.el7.ppc64
libsemanage-2.5-8.el7.ppc64
device-mapper-1.02.140-8.el7.ppc64
polkit-0.112-12.el7_3.ppc64
cairo-gobject-1.14.8-2.el7.ppc64
dconf-0.26.0-2.el7.ppc64
libpciaccess-0.13.4-3.el7_3.ppc64
libsmbclient-4.6.2-8.el7.ppc64
abrt-python-2.1.11-48.el7.centos.ppc64
iputils-20160308-10.el7.ppc64
dhclient-4.2.5-58.el7.centos.ppc64
libibumad-13-7.el7.ppc64
pyatspi-2.20.3-1.el7.noarch
rsync-3.0.9-18.el7.ppc64
libgphoto2-2.5.2-5.el7.ppc64
perl-Git-1.8.3.1-11.el7.noarch
cairo-devel-1.14.8-2.el7.ppc64
libibcm-13-7.el7.ppc64
python-pyblock-0.53-6.el7.ppc64
plymouth-theme-charge-0.8.9-0.28.20140113.el7.centos.ppc64
libcgroup-tools-0.41-13.el7.ppc64
xorg-x11-drv-evdev-2.10.5-2.1.el7.ppc64
osinfo-db-20170423-2.el7.noarch
gupnp-dlna-0.10.5-1.el7.ppc64
gsound-1.0.2-2.el7.ppc64
ntpdate-4.2.6p5-25.el7.centos.2.ppc64
gssproxy-0.7.0-4.el7.ppc64
libreswan-3.20-3.el7.ppc64
neon-0.30.0-3.el7.ppc64
geoclue2-2.4.5-1.el7.ppc64
flatpak-0.8.7-1.el7.ppc64
libmtp-1.1.6-5.el7.ppc64
systemtap-client-3.1-3.el7.ppc64
sbc-1.0-5.el7.ppc64
rubygem-json-1.7.7-30.el7.ppc64
libtiff-4.0.3-27.el7_3.ppc64
gdk-pixbuf2-devel-2.36.5-1.el7.ppc64
pygtk2-2.24.0-9.el7.ppc64
gvnc-0.7.0-2.el7.ppc64
powerpc-utils-python-1.2.1-9.el7.noarch
adwaita-gtk2-theme-3.22.2-1.el7.ppc64
farstream-0.1.2-8.el7.ppc64
libdmapsharing-2.9.37-1.el7.ppc64
sssd-common-1.15.2-50.el7.ppc64
sssd-1.15.2-50.el7.ppc64
libcanberra-gtk3-0.30-5.el7.ppc64
clutter-gtk-1.8.2-1.el7.ppc64
caribou-gtk3-module-0.4.21-1.el7.ppc64
libchamplain-0.12.15-1.el7.ppc64
evince-libs-3.22.1-5.el7.ppc64
colord-gtk-0.1.25-4.el7.ppc64
libchamplain-gtk-0.12.15-1.el7.ppc64
gnome-packagekit-3.22.1-2.el7.ppc64
avahi-ui-gtk3-0.6.31-17.el7.ppc64
gtk-vnc2-0.7.0-2.el7.ppc64
cheese-libs-3.22.1-1.el7.ppc64
control-center-3.22.2-5.el7.ppc64
nfs-utils-1.3.0-0.48.el7.ppc64
gnome-shell-3.22.3-17.el7.ppc64
gnome-shell-extension-apps-menu-3.22.2-10.el7.noarch
anaconda-core-21.48.22.121-1.el7.centos.ppc64
gnome-initial-setup-3.22.1-4.el7.ppc64
orca-3.6.3-4.el7.ppc64
gnome-software-3.22.7-1.el7.ppc64
iowatcher-1.0-6.el7.ppc64
firstboot-19.12-1.el7.ppc64
gvfs-afp-1.30.4-3.el7.ppc64
ibus-kkc-1.5.18-7.el7.ppc64
gnome-system-log-3.9.90-3.el7.ppc64
gutenprint-cups-5.2.9-18.el7.ppc64
system-config-printer-udev-1.4.1-19.el7.ppc64
rubygem-bundler-1.7.8-3.el7.noarch
subversion-1.7.14-10.el7.ppc64
xorg-x11-drivers-7.7-6.el7.ppc64
qt-mysql-4.8.5-13.el7.ppc64
pygobject3-devel-3.22.0-1.el7.ppc64
httpd-manual-2.4.6-67.el7.centos.noarch
gstreamer1-plugins-base-devel-1.10.4-1.el7.ppc64
net-tools-2.0-0.22.20131004git.el7.ppc64
oprofile-0.9.9-22.el7.ppc64
kernel-tools-3.10.0-693.el7.ppc64
qt3-PostgreSQL-3.3.8b-51.el7.ppc64
libXaw-devel-1.0.13-4.el7.ppc64
libgudev1-devel-219-42.el7.ppc64
gvfs-devel-1.30.4-3.el7.ppc64
hunspell-devel-1.3.2-15.el7.ppc64
iotop-0.6-2.el7.noarch
libatomic-static-4.8.5-16.el7.ppc64
ledmon-0.80-2.el7.ppc64
libpfm-devel-4.7.0-4.el7.ppc64
rcs-5.9.0-5.el7.ppc64
time-1.7-45.el7.ppc64
lohit-bengali-fonts-2.5.3-4.el7.noarch
paktype-naskh-basic-fonts-4.1-3.el7.noarch
lohit-nepali-fonts-2.5.3-2.el7.noarch
pnm2ppa-1.04-28.el7.ppc64
cscope-15.8-10.el7.ppc64
doxygen-1.8.5-3.el7.ppc64
bridge-utils-1.5-9.el7.ppc64
words-3.0-22.el7.noarch
iwl6000-firmware-9.221.4.1-56.el7.noarch
nss-softokn-freebl-3.28.3-6.el7.ppc
setup-2.8.71-7.el7.noarch
gnu-free-fonts-common-20120503-8.el7.noarch
emacs-filesystem-24.3-19.el7_3.noarch
mozilla-filesystem-1.9-11.el7.ppc64
cim-schema-2.33.0-6.el7.noarch
ncurses-base-5.9-13.20130511.el7.noarch
libsepol-2.5-6.el7.ppc64
libjpeg-turbo-1.2.90-5.el7.ppc64
libuuid-2.23.2-43.el7.ppc64
elfutils-libelf-0.168-8.el7.ppc64
libffi-3.0.13-18.el7.ppc64
libcap-ng-0.7.5-4.el7.ppc64
lua-5.1.4-15.el7.ppc64
libxcb-1.12-1.el7.ppc64
libXrandr-1.5.1-2.el7.ppc64
libxslt-1.1.28-5.el7.ppc64
libdhash-0.4.3-27.el7.ppc64
nettle-2.7.1-8.el7.ppc64
libtasn1-4.10-1.el7.ppc64
flac-libs-1.3.0-5.el7_1.ppc64
libmpc-1.0.1-3.el7.ppc64
mesa-libglapi-17.0.1-6.20170307.el7.ppc64
libieee1284-0.2.11-15.el7.ppc64
libsndfile-1.0.25-10.el7.ppc64
libvpd-2.2.5-1.el7.ppc64
libfontenc-1.1.3-3.el7.ppc64
hyphen-2.8.6-5.el7.ppc64
libical-1.0.1-1.el7.ppc64
perl-Encode-2.51-7.el7.ppc64
perl-Exporter-5.68-3.el7.noarch
perl-File-Temp-0.23.01-3.el7.noarch
perl-Test-Harness-3.28-3.el7.noarch
perl-Module-Metadata-1.000018-2.el7.noarch
perl-CPAN-Meta-YAML-0.008-14.el7.noarch
perl-Encode-Locale-1.03-5.el7.noarch
perl-Term-UI-0.36-2.el7.noarch
boost-graph-1.53.0-27.el7.ppc64
p11-kit-trust-0.23.5-3.el7.ppc64
acl-2.2.51-12.el7.ppc64
pinentry-0.8.1-17.el7.ppc64
libcdio-0.92-1.el7.ppc64
snappy-1.1.0-3.el7.ppc64
sg3_utils-libs-1.37-12.el7.ppc64
libnfnetlink-1.0.1-4.el7.ppc64
ethtool-4.8-1.el7.ppc64
tcl-devel-8.5.13-8.el7.ppc64
perl-B-Lint-1.17-3.el7.noarch
perl-Sys-Syslog-0.33-3.el7.ppc64
kernel-devel-3.10.0-693.el7.ppc64
perl-Business-ISBN-2.06-2.el7.noarch
perl-HTTP-Cookies-6.01-5.el7.noarch
perl-IO-stringy-2.110-22.el7.noarch
perl-autodie-2.16-2.el7.noarch
libieee1284-devel-0.2.11-15.el7.ppc64
libofa-0.9.3-24.el7.ppc64
libXres-1.0.7-2.1.el7.ppc64
attr-2.4.46-12.el7.ppc64
setools-libs-3.3.8-1.1.el7.ppc64
libatomic-4.8.5-16.el7.ppc64
elfutils-default-yama-scope-0.168-8.el7.noarch
libhugetlbfs-2.16-12.el7.ppc64
python-2.7.5-58.el7.ppc64
gzip-1.5-9.el7.ppc64
dbus-glib-0.100-7.el7.ppc64
xorg-x11-proto-devel-7.7-20.el7.noarch
python-gobject-base-3.22.0-1.el7.ppc64
net-snmp-libs-5.7.2-28.el7.ppc64
pygobject2-2.28.6-11.el7.ppc64
libpng-devel-1.5.13-7.el7_2.ppc64
gdb-7.6.1-100.el7.ppc64
systemd-libs-219-42.el7.ppc64
libqmi-1.16.0-1.el7.ppc64
elfutils-libelf-devel-0.168-8.el7.ppc64
libXrender-devel-0.9.10-1.el7.ppc64
libXcomposite-devel-0.4.4-4.1.el7.ppc64
expat-devel-2.1.0-10.el7_3.ppc64
libgee06-0.6.8-3.el7.ppc64
audit-libs-python-2.7.6-3.el7.ppc64
sip-4.14.6-4.el7.ppc64
automake-1.13.4-3.el7.noarch
perl-ExtUtils-MakeMaker-6.68-3.el7.noarch
perl-CPANPLUS-0.91.38-4.el7.noarch
libXp-devel-1.0.2-2.1.el7.ppc64
urw-fonts-2.4-16.el7.noarch
python-dmidecode-3.12.2-1.el7.ppc64
libtasn1-devel-4.10-1.el7.ppc64
gstreamer-tools-0.10.36-7.el7.ppc64
osinfo-db-tools-1.1.0-1.el7.ppc64
grubby-8.28-23.el7.ppc64
python-netaddr-0.7.5-7.el7.noarch
python-coverage-3.6-0.5.b3.el7.ppc64
python-netifaces-0.10.4-3.el7.ppc64
gobject-introspection-devel-1.50.0-1.el7.ppc64
python-dateutil-1.5-7.el7.noarch
python-pycparser-2.14-1.el7.noarch
libwvstreams-4.6.1-11.el7.ppc64
logrotate-3.8.6-14.el7.ppc64
curl-7.29.0-42.el7.ppc64
xmlrpc-c-client-1.32.5-1905.svn2451.el7.ppc64
deltarpm-3.6-3.el7.ppc64
kde-filesystem-4-47.el7.ppc64
python-urlgrabber-3.10-8.el7.noarch
tbb-4.1-9.20130314.el7.ppc64
libreport-plugin-rhtsupport-2.1.11-38.el7.centos.ppc64
kernel-tools-libs-3.10.0-693.el7.ppc64
pulseaudio-libs-glib2-10.0-3.el7.ppc64
pulseaudio-utils-10.0-3.el7.ppc64
perl-Module-Signature-0.73-2.el7.noarch
python2-ipaclient-4.5.0-20.el7.centos.noarch
sssd-client-1.15.2-50.el7.ppc64
http-parser-2.7.1-1.el7.ppc64
servicelog-1.1.14-3.el7.ppc64
dracut-033-502.el7.ppc64
mesa-libgbm-17.0.1-6.20170307.el7.ppc64
ibus-libs-1.5.3-13.el7.ppc64
java-1.8.0-openjdk-devel-1.8.0.131-11.b12.el7.ppc64
at-spi2-atk-2.22.0-2.el7.ppc64
PackageKit-yum-1.1.5-1.el7.centos.ppc64
abrt-addon-kerneloops-2.1.11-48.el7.centos.ppc64
plymouth-0.8.9-0.28.20140113.el7.centos.ppc64
pangomm-2.40.1-1.el7.ppc64
NetworkManager-1.8.0-9.el7.ppc64
libdrm-devel-2.4.74-1.el7.ppc64
iscsi-initiator-utils-6.2.0.874-4.el7.ppc64
grub2-tools-minimal-2.02-0.64.el7.centos.ppc64
grub2-tools-2.02-0.64.el7.centos.ppc64
speech-dispatcher-python-0.7.1-15.el7.ppc64
dmraid-events-1.0.0.rc16-28.el7.ppc64
lvm2-libs-2.02.171-8.el7.ppc64
cyrus-sasl-2.1.26-21.el7.ppc64
abrt-tui-2.1.11-48.el7.centos.ppc64
xorg-x11-drv-void-1.4.1-2.el7.ppc64
libosinfo-1.0.0-1.el7.ppc64
paps-libs-0.6.8-28.el7.1.ppc64
polkit-docs-0.112-12.el7_3.noarch
ntp-4.2.6p5-25.el7.centos.2.ppc64
alsa-utils-1.1.3-2.el7.ppc64
NetworkManager-libreswan-1.2.4-2.el7.ppc64
libmusicbrainz5-5.0.1-9.el7.ppc64
geoclue2-libs-2.4.5-1.el7.ppc64
flatpak-libs-0.8.7-1.el7.ppc64
cryptsetup-python-1.7.4-3.el7.ppc64
tog-pegasus-libs-2.14.1-5.el7.ppc64
pulseaudio-module-bluetooth-10.0-3.el7.ppc64
rubygems-2.0.14.1-30.el7.noarch
gdk-pixbuf2-2.36.5-1.el7.ppc64
ghostscript-9.07-28.el7.ppc64
gstreamer1-plugins-good-1.10.4-2.el7.ppc64
libmediaart-1.9.1-1.el7.ppc64
powerpc-utils-1.3.3-4.el7.ppc64
gtk2-devel-2.24.31-1.el7.ppc64
libpurple-2.10.11-5.el7.ppc64
libtiff-devel-4.0.3-27.el7_3.ppc64
sssd-krb5-common-1.15.2-50.el7.ppc64
gpm-libs-1.20.7-5.el7.ppc64
gcr-3.20.0-1.el7.ppc64
webkitgtk4-jsc-2.14.7-2.el7.ppc64
caribou-gtk2-module-0.4.21-1.el7.ppc64
libnma-1.8.0-3.el7.ppc64
libnm-gtk-1.8.0-3.el7.ppc64
gnome-bluetooth-3.20.1-1.el7.ppc64
gnome-terminal-3.22.1-2.el7.ppc64
gnome-packagekit-installer-3.22.1-2.el7.ppc64
anaconda-widgets-21.48.22.121-1.el7.centos.ppc64
gnome-dictionary-libs-3.20.0-1.el7.ppc64
compat-cheese314-3.14.2-1.el7.ppc64
gnome-settings-daemon-3.22.2-5.el7.ppc64
quota-4.01-14.el7.ppc64
gnome-session-3.22.3-4.el7.ppc64
gnome-shell-extension-window-list-3.22.2-10.el7.noarch
anaconda-tui-21.48.22.121-1.el7.centos.ppc64
gnome-tweak-tool-3.22.0-1.el7.noarch
gnome-getting-started-docs-3.22.0-1.el7.noarch
gnome-clocks-3.22.1-1.el7.ppc64
file-roller-nautilus-3.22.3-1.el7.ppc64
gnome-color-manager-3.22.2-1.el7.ppc64
gvfs-gphoto2-1.30.4-3.el7.ppc64
ibus-chewing-1.4.4-14.el7.ppc64
gnome-disk-utility-3.22.1-1.el7.ppc64
firewall-config-0.4.4.4-6.el7.noarch
libsane-hpaio-3.15.9-3.el7.ppc64
rsyslog-8.24.0-12.el7.ppc64
libsoup-devel-2.56.0-3.el7.ppc64
java-1.6.0-openjdk-devel-1.6.0.41-1.13.13.1.el7_3.ppc64
qt-postgresql-4.8.5-13.el7.ppc64
dbus-glib-devel-0.100-7.el7.ppc64
mod_fcgid-2.3.9-4.el7.ppc64
psacct-6.6.1-13.el7.ppc64
ModemManager-1.6.0-2.el7.ppc64
tcpdump-4.9.0-5.el7.ppc64
pulseaudio-libs-devel-10.0-3.el7.ppc64
libreport-plugin-mailx-2.1.11-38.el7.centos.ppc64
mariadb-devel-5.5.56-2.el7.ppc64
xfsdump-3.1.4-1.el7.ppc64
qt3-MySQL-3.3.8b-51.el7.ppc64
fuse-devel-2.9.2-8.el7.ppc64
nautilus-sendto-3.8.4-1.el7.ppc64
tcsh-6.18.01-15.el7.ppc64
perl-Test-Pod-Coverage-1.08-21.el7.noarch
valgrind-3.12.0-8.el7.ppc64
libaio-devel-0.3.109-13.el7.ppc64
nano-2.3.1-10.el7.ppc64
lohit-oriya-fonts-2.5.4.1-3.el7.noarch
thai-scalable-waree-fonts-0.5.0-7.el7.noarch
lohit-marathi-fonts-2.5.3-2.el7.noarch
cjkuni-uming-fonts-0.2.20080216.1-53.el7.noarch
traceroute-2.0.22-2.el7.ppc64
gnu-free-serif-fonts-20120503-8.el7.noarch
byacc-1.9.20130304-3.el7.ppc64
iwl5150-firmware-8.24.2.2-56.el7.noarch
man-pages-3.53-5.el7.noarch
iwl2000-firmware-18.168.6.1-56.el7.noarch
epel-release-7-9.noarch
filesystem-3.2-21.el7.ppc64
tzdata-java-2017b-1.el7.noarch
gl-manpages-1.1-7.20130122.el7.noarch
grub2-ppc64-modules-2.02-0.64.el7.centos.noarch
tigervnc-license-1.8.0-1.el7.noarch
nss-softokn-freebl-3.28.3-6.el7.ppc64
libselinux-2.5-11.el7.ppc64
libpng-1.5.13-7.el7_2.ppc64
libICE-1.0.9-9.el7.ppc64
grep-2.20-3.el7.ppc64
p11-kit-0.23.5-3.el7.ppc64
audit-libs-2.7.6-3.el7.ppc64
libtar-1.2.11-29.el7.ppc64
libX11-1.6.5-1.el7.ppc64
libXtst-1.2.3-1.el7.ppc64
xmlrpc-c-1.32.5-1905.svn2451.el7.ppc64
mpfr-3.1.1-4.el7.ppc64
libtheora-1.1.1-8.el7.ppc64
libsss_idmap-1.15.2-50.el7.ppc64
nss-softokn-3.28.3-6.el7.ppc64
file-5.11-33.el7.ppc64
boost-date-time-1.53.0-27.el7.ppc64
slang-2.2.4-11.el7.ppc64
librtas-2.0.1-1.el7.ppc64
exempi-2.2.0-8.el7.ppc64
GeoIP-1.5.0-11.el7.ppc64
fuse-libs-2.9.2-8.el7.ppc64
libXfont2-2.0.1-2.el7.ppc64
perl-Pod-Usage-1.63-3.el7.noarch
perl-threads-1.87-4.el7.ppc64
perl-PathTools-3.40-5.el7.ppc64
perl-Module-CoreList-2.76.02-292.el7.noarch
perl-Test-Simple-0.98-243.el7.noarch
perl-LWP-MediaTypes-6.02-2.el7.noarch
perl-Error-0.17020-2.el7.noarch
perl-Log-Message-Simple-0.10-2.el7.noarch
less-458-9.el7.ppc64
boost-timer-1.53.0-27.el7.ppc64
gmp-devel-6.0.0-15.el7.ppc64
iso-codes-3.46-2.el7.noarch
make-3.82-23.el7.ppc64
boost-serialization-1.53.0-27.el7.ppc64
libxkbcommon-0.7.1-1.el7.ppc64
tcl-8.5.13-8.el7.ppc64
dosfstools-3.0.20-9.el7.ppc64
iproute-3.10.0-87.el7.ppc64
perl-Archive-Tar-1.92-2.el7.noarch
perl-DB_File-1.830-6.el7.ppc64
perl-DBIx-Simple-1.35-7.el7.noarch
perl-Business-ISBN-Data-20120719.001-2.el7.noarch
perl-HTTP-Daemon-6.01-5.el7.noarch
perl-IO-Socket-IP-0.21-4.el7.noarch
perl-CGI-3.63-4.el7.noarch
lm_sensors-devel-3.4.0-4.20160601gitf9185e5.el7.ppc64
fftw-libs-double-3.3.3-8.el7.ppc64
tcp_wrappers-7.6-77.el7.ppc64
libattr-devel-2.4.46-12.el7.ppc64
dwz-0.11-3.el7.ppc64
liblouis-2.5.2-10.el7.ppc64
libselinux-utils-2.5-11.el7.ppc64
liberation-mono-fonts-1.07.2-15.el7.noarch
python-libs-2.7.5-58.el7.ppc64
python-six-1.9.0-2.el7.noarch
gstreamer1-1.10.4-2.el7.ppc64
gsettings-desktop-schemas-3.22.0-1.el7.ppc64
desktop-file-utils-0.23-1.el7.ppc64
centos-logos-70.0.6-3.el7.centos.noarch
qt3-3.3.8b-51.el7.ppc64
libICE-devel-1.0.9-9.el7.ppc64
libtirpc-0.2.4-0.10.el7.ppc64
libgudev1-219-42.el7.ppc64
libgusb-0.2.9-1.el7.ppc64
avahi-gobject-0.6.31-17.el7.ppc64
libXrandr-devel-1.5.1-2.el7.ppc64
libXxf86vm-devel-1.1.4-1.el7.ppc64
fontconfig-devel-2.10.95-11.el7.ppc64
gnome-menus-3.13.3-3.el7.ppc64
pyusb-1.0.0-0.11.b1.el7.noarch
python-IPy-0.75-6.el7.noarch
genisoimage-1.1.11-23.el7.ppc64
perl-ExtUtils-Install-1.58-292.el7.noarch
perl-CPAN-1.9800-292.el7.noarch
libXpm-devel-3.5.12-1.el7.ppc64
ghostscript-fonts-5.50-32.el7.noarch
libepoxy-devel-1.3.1-1.el7.ppc64
pixman-devel-0.34.0-1.el7.ppc64
gstreamer-0.10.36-7.el7.ppc64
gom-0.3.2-1.el7.ppc64
btrfs-progs-4.9.1-1.el7.ppc64
python-lxml-3.2.1-4.el7.ppc64
python-urllib3-1.10.2-3.el7.noarch
liblouis-python-2.5.2-10.el7.noarch
python-di-0.3-2.el7.noarch
python-kmod-0.9-4.el7.ppc64
python-cffi-1.6.0-5.el7.ppc64
httpd-tools-2.4.6-67.el7.centos.ppc64
sound-theme-freedesktop-0.8-3.el7.noarch
libcurl-7.29.0-42.el7.ppc64
abrt-libs-2.1.11-48.el7.centos.ppc64
python-ldap-2.4.15-2.el7.ppc64
postgresql-9.2.21-1.el7.ppc64
python-pycurl-7.19.0-19.el7.ppc64
libstdc++-devel-4.8.5-16.el7.ppc64
libreport-plugin-reportuploader-2.1.11-38.el7.centos.ppc64
opencc-0.4.3-3.el7.ppc64
pulseaudio-libs-10.0-3.el7.ppc64
festival-freebsoft-utils-0.10-7.el7.noarch
perl-PAR-Dist-0.49-2.el7.noarch
python2-ipalib-4.5.0-20.el7.centos.noarch
libsss_nss_idmap-1.15.2-50.el7.ppc64
qrencode-libs-3.4.1-3.el7.ppc64
libservicelog-1.1.17-2.el7.ppc64
cryptsetup-libs-1.7.4-3.el7.ppc64
libcanberra-0.30-5.el7.ppc64
systemd-sysv-219-42.el7.ppc64
java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.ppc64
at-spi2-core-2.22.0-1.el7.ppc64
pyparted-3.9-13.el7.ppc64
abrt-dbus-2.1.11-48.el7.centos.ppc64
plymouth-scripts-0.8.9-0.28.20140113.el7.centos.ppc64
abrt-addon-xorg-2.1.11-48.el7.centos.ppc64
wpa_supplicant-2.6-5.el7.ppc64
mesa-libGLES-17.0.1-6.20170307.el7.ppc64
iscsi-initiator-utils-iscsiuio-6.2.0.874-4.el7.ppc64
udisks2-2.1.2-6.el7.ppc64
grub2-tools-extra-2.02-0.64.el7.centos.ppc64
libpeas-loader-python-1.20.0-1.el7.ppc64
qt-4.8.5-13.el7.ppc64
lvm2-2.02.171-8.el7.ppc64
cyrus-sasl-devel-2.1.26-21.el7.ppc64
abrt-retrace-client-2.1.11-48.el7.centos.ppc64
xorg-x11-drv-nouveau-1.0.13-3.el7.ppc64
java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el7_3.ppc64
harfbuzz-devel-1.3.2-1.el7.ppc64
polkit-devel-0.112-12.el7_3.ppc64
ebtables-2.0.10-15.el7.ppc64
chrony-3.1-2.el7.centos.ppc64
usb_modeswitch-2.4.0-5.el7.ppc64
subversion-libs-1.7.14-10.el7.ppc64
gssdp-1.0.1-1.el7.ppc64
dleyna-connector-dbus-0.2.0-2.el7.ppc64
device-mapper-multipath-libs-0.4.9-111.el7.ppc64
tog-pegasus-2.14.1-5.el7.ppc64
libyaml-0.1.4-11.el7_0.ppc64
rubygem-rdoc-4.0.0-30.el7.noarch
libnotify-0.7.7-1.el7.ppc64
gstreamer1-plugins-bad-free-1.10.4-2.el7.ppc64
poppler-0.26.5-16.el7.ppc64
libgxps-0.2.5-1.el7.ppc64
easymock2-2.5.2-12.el7.noarch
libspectre-0.2.8-1.el7.ppc64
telepathy-haze-0.8.0-1.el7.ppc64
cups-filters-libs-1.0.35-22.el7.ppc64
sssd-common-pac-1.15.2-50.el7.ppc64
kbd-misc-1.15.5-13.el7.noarch
clutter-1.26.0-1.el7.ppc64
webkitgtk4-plugin-process-gtk2-2.14.7-2.el7.ppc64
caribou-0.4.21-1.el7.ppc64
libgnomekbd-3.22.0.1-1.el7.ppc64
nm-connection-editor-1.8.0-3.el7.ppc64
gnome-bluetooth-libs-3.20.1-1.el7.ppc64
grilo-plugins-0.3.4-1.el7.ppc64
gnome-keyring-pam-3.20.0-3.el7.ppc64
glade-libs-3.20.0-1.el7.ppc64
gspell-1.2.3-1.el7.ppc64
gnome-desktop3-3.22.2-2.el7.ppc64
libwacom-0.24-1.el7.ppc64
quota-nls-4.01-14.el7.noarch
mesa-dri-drivers-17.0.1-6.20170307.el7.ppc64
gnome-shell-extension-places-menu-3.22.2-10.el7.noarch
kbd-1.15.5-13.el7.ppc64
gnome-classic-session-3.22.2-10.el7.noarch
vim-enhanced-7.4.160-2.el7.ppc64
eog-3.20.5-2.el7.ppc64
gedit-3.22.0-3.el7.ppc64
libcanberra-devel-0.30-5.el7.ppc64
setroubleshoot-3.2.28-3.el7.ppc64
ibus-m17n-1.3.4-13.el7.ppc64
gnome-screenshot-3.22.0-1.el7.ppc64
xdg-user-dirs-gtk-0.10-4.el7.ppc64
ppc64-utils-0.14-16.el7.ppc64
man-db-2.6.3-9.el7.ppc64
gnutls-devel-3.3.26-9.el7.ppc64
paps-0.6.8-28.el7.1.ppc64
qt-odbc-4.8.5-13.el7.ppc64
NetworkManager-ppp-1.8.0-9.el7.ppc64
cifs-utils-6.2-10.el7.ppc64
postfix-2.10.1-6.el7.ppc64
crda-3.13_2016.02.08-1.el7.ppc64
memstomp-0.1.4-11.el7.ppc64
rpm-build-4.11.3-25.el7.ppc64
postgresql-devel-9.2.21-1.el7.ppc64
cups-devel-1.6.3-29.el7.ppc64
libxslt-devel-1.1.28-5.el7.ppc64
qt3-ODBC-3.3.8b-51.el7.ppc64
libcap-ng-devel-0.7.5-4.el7.ppc64
dstat-0.7.2-12.el7.noarch
libhugetlbfs-devel-2.16-12.el7.ppc64
perl-XML-Grove-0.46alpha-52.el7.noarch
enscript-1.6.6-6.el7.ppc64
ntsysv-1.7.4-1.el7.ppc64
indent-2.2.11-13.el7.ppc64
dejavu-sans-mono-fonts-2.33-6.el7.noarch
overpass-fonts-2.1-1.el7.noarch
gnu-free-mono-fonts-20120503-8.el7.noarch
lohit-tamil-fonts-2.5.3-2.el7.noarch
lohit-punjabi-fonts-2.5.3-2.el7.noarch
google-crosextra-carlito-fonts-1.103-0.2.20130920.el7.noarch
lrzsz-0.12.20-36.el7.ppc64
iwl2030-firmware-18.168.6.1-56.el7.noarch
iwl7265-firmware-22.0.7.0-56.el7.noarch
man-pages-overrides-7.4.3-1.el7.ppc64
gpg-pubkey-352c64e5-52ae6884
=== TEST BEGIN ===
Install prefix    /var/tmp/patchew-tester-tmp-ebstrc6d/src/install
BIOS directory    /var/tmp/patchew-tester-tmp-ebstrc6d/src/install/share/qemu
firmware path     /var/tmp/patchew-tester-tmp-ebstrc6d/src/install/share/qemu-firmware
binary directory  /var/tmp/patchew-tester-tmp-ebstrc6d/src/install/bin
library directory /var/tmp/patchew-tester-tmp-ebstrc6d/src/install/lib
module directory  /var/tmp/patchew-tester-tmp-ebstrc6d/src/install/lib/qemu
libexec directory /var/tmp/patchew-tester-tmp-ebstrc6d/src/install/libexec
include directory /var/tmp/patchew-tester-tmp-ebstrc6d/src/install/include
config directory  /var/tmp/patchew-tester-tmp-ebstrc6d/src/install/etc
local state directory   /var/tmp/patchew-tester-tmp-ebstrc6d/src/install/var
Manual directory  /var/tmp/patchew-tester-tmp-ebstrc6d/src/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /var/tmp/patchew-tester-tmp-ebstrc6d/src
GIT binary        git
GIT submodules    ui/keycodemapdb dtc capstone
C compiler        cc
Host C compiler   cc
C++ compiler      c++
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 -Werror -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include   -DNCURSES_WIDECHAR   -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-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 -Wno-missing-braces -I/usr/include/p11-kit-1       -I/usr/include/libpng15   -I$(SRC_PATH)/capstone/include
LDFLAGS           -Wl,--warn-common -m64 -g 
make              make
install           install
python            python -B
smbd              /usr/sbin/smbd
module support    no
host CPU          ppc64
host big endian   yes
target list       aarch64-softmmu alpha-softmmu arm-softmmu cris-softmmu hppa-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_be-linux-user 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
SDL support       yes (1.2.15)
GTK support       yes (3.22.10)
GTK GL support    no
VTE support       no 
TLS priority      NORMAL
GNUTLS support    yes
GNUTLS rnd        yes
libgcrypt         no
libgcrypt kdf     no
nettle            yes (2.7.1)
nettle kdf        yes
libtasn1          yes
curses support    yes
virgl support     no
curl support      yes
mingw32 support   no
Audio drivers     oss
Block whitelist (rw) 
Block whitelist (ro) 
VirtFS support    yes
Multipath support no
VNC support       yes
VNC SASL support  yes
VNC JPEG support  yes
VNC PNG support   yes
xen support       no
brlapi support    no
bluez  support    no
Documentation     no
PIE               no
vde support       no
netmap support    no
Linux AIO support yes
ATTR/XATTR support yes
Install blobs     yes
KVM support       yes
HAX support       no
HVF support       no
WHPX support      no
TCG support       yes
TCG debug enabled no
TCG interpreter   no
malloc trim support yes
RDMA support      yes
fdt support       yes
preadv support    yes
fdatasync         yes
madvise           yes
posix_madvise     yes
posix_memalign    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       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
TPM emulator      yes
QOM debugging     yes
Live block migration yes
lzo support       no
snappy support    no
bzip2 support     yes
NUMA host support yes
libxml2           yes
tcmalloc support  no
jemalloc support  no
avx2 optimization no
replication support yes
VxHS block device no
capstone          git

WARNING: Use of SDL 1.2 is deprecated and will be removed in
WARNING: future releases. Please switch to using SDL 2.0
  GEN     aarch64-softmmu/config-devices.mak.tmp
  GEN     alpha-softmmu/config-devices.mak.tmp
  GEN     arm-softmmu/config-devices.mak.tmp
  GEN     cris-softmmu/config-devices.mak.tmp
  GEN     hppa-softmmu/config-devices.mak.tmp
  GEN     i386-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.tmp
  GEN     microblaze-softmmu/config-devices.mak.tmp
  GEN     mips64el-softmmu/config-devices.mak.tmp
  GEN     mips64-softmmu/config-devices.mak.tmp
  GEN     mipsel-softmmu/config-devices.mak.tmp
  GEN     cris-softmmu/config-devices.mak
  GEN     moxie-softmmu/config-devices.mak.tmp
  GEN     mips-softmmu/config-devices.mak.tmp
  GEN     nios2-softmmu/config-devices.mak.tmp
  GEN     arm-softmmu/config-devices.mak
  GEN     microblaze-softmmu/config-devices.mak
  GEN     aarch64-softmmu/config-devices.mak
  GEN     hppa-softmmu/config-devices.mak
  GEN     or1k-softmmu/config-devices.mak.tmp
  GEN     microblazeel-softmmu/config-devices.mak
  GEN     m68k-softmmu/config-devices.mak
  GEN     ppc64-softmmu/config-devices.mak.tmp
  GEN     alpha-softmmu/config-devices.mak
  GEN     lm32-softmmu/config-devices.mak
  GEN     ppc-softmmu/config-devices.mak.tmp
  GEN     ppcemb-softmmu/config-devices.mak.tmp
  GEN     s390x-softmmu/config-devices.mak.tmp
  GEN     sh4eb-softmmu/config-devices.mak.tmp
  GEN     sh4-softmmu/config-devices.mak.tmp
  GEN     sparc-softmmu/config-devices.mak.tmp
  GEN     sparc64-softmmu/config-devices.mak.tmp
  GEN     tricore-softmmu/config-devices.mak.tmp
  GEN     nios2-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     xtensa-softmmu/config-devices.mak.tmp
  GEN     i386-softmmu/config-devices.mak
  GEN     or1k-softmmu/config-devices.mak
  GEN     sparc-softmmu/config-devices.mak
  GEN     moxie-softmmu/config-devices.mak
  GEN     armeb-linux-user/config-devices.mak.tmp
  GEN     mips64-softmmu/config-devices.mak
  GEN     arm-linux-user/config-devices.mak.tmp
  GEN     hppa-linux-user/config-devices.mak.tmp
  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     aarch64-linux-user/config-devices.mak.tmp
  GEN     microblaze-linux-user/config-devices.mak.tmp
  GEN     aarch64_be-linux-user/config-devices.mak.tmp
  GEN     cris-linux-user/config-devices.mak.tmp
  GEN     mips64el-linux-user/config-devices.mak.tmp
  GEN     sparc64-softmmu/config-devices.mak
  GEN     xtensa-softmmu/config-devices.mak
  GEN     alpha-linux-user/config-devices.mak.tmp
  GEN     mips-linux-user/config-devices.mak.tmp
  GEN     mipsel-linux-user/config-devices.mak.tmp
  GEN     mipsn32el-linux-user/config-devices.mak.tmp
  GEN     mips-softmmu/config-devices.mak
  GEN     mipsn32-linux-user/config-devices.mak.tmp
  GEN     xtensaeb-softmmu/config-devices.mak
  GEN     nios2-linux-user/config-devices.mak.tmp
  GEN     ppc64abi32-linux-user/config-devices.mak.tmp
  GEN     ppc64-linux-user/config-devices.mak.tmp
  GEN     or1k-linux-user/config-devices.mak.tmp
  GEN     sh4eb-softmmu/config-devices.mak
  GEN     sh4-linux-user/config-devices.mak.tmp
  GEN     ppc64le-linux-user/config-devices.mak.tmp
  GEN     arm-linux-user/config-devices.mak
  GEN     s390x-linux-user/config-devices.mak.tmp
  GEN     ppc-linux-user/config-devices.mak.tmp
  GEN     sh4eb-linux-user/config-devices.mak.tmp
  GEN     mips64-linux-user/config-devices.mak.tmp
  GEN     sparc32plus-linux-user/config-devices.mak.tmp
  GEN     sh4-softmmu/config-devices.mak
  GEN     sparc64-linux-user/config-devices.mak.tmp
  GEN     alpha-linux-user/config-devices.mak
  GEN     tricore-softmmu/config-devices.mak
  GEN     tilegx-linux-user/config-devices.mak.tmp
  GEN     hppa-linux-user/config-devices.mak
  GEN     x86_64-linux-user/config-devices.mak.tmp
  GEN     mipsel-softmmu/config-devices.mak
  GEN     cris-linux-user/config-devices.mak
  GEN     sparc-linux-user/config-devices.mak.tmp
  GIT     ui/keycodemapdb dtc capstone
  GEN     m68k-linux-user/config-devices.mak
  GEN     s390x-softmmu/config-devices.mak
  GEN     aarch64_be-linux-user/config-devices.mak
  GEN     microblazeel-linux-user/config-devices.mak
  GEN     mips64el-linux-user/config-devices.mak
  GEN     mips-linux-user/config-devices.mak
  GEN     aarch64-linux-user/config-devices.mak
  GEN     nios2-linux-user/config-devices.mak
  GEN     config-host.h
  GEN     ppc-softmmu/config-devices.mak
  GEN     qemu-options.def
  GEN     i386-linux-user/config-devices.mak
  GEN     mips64el-softmmu/config-devices.mak
  GEN     ppcemb-softmmu/config-devices.mak
  GEN     armeb-linux-user/config-devices.mak
  GEN     microblaze-linux-user/config-devices.mak
  GEN     mipsel-linux-user/config-devices.mak
  GEN     mipsn32el-linux-user/config-devices.mak
  GEN     unicore32-softmmu/config-devices.mak
  GEN     mipsn32-linux-user/config-devices.mak
  GEN     or1k-linux-user/config-devices.mak
  GEN     x86_64-softmmu/config-devices.mak
  GEN     ppc64abi32-linux-user/config-devices.mak
  GEN     ppc64le-linux-user/config-devices.mak
  GEN     mips64-linux-user/config-devices.mak
  GEN     ppc64-linux-user/config-devices.mak
  GEN     ppc-linux-user/config-devices.mak
  GEN     ppc64-softmmu/config-devices.mak
  GEN     s390x-linux-user/config-devices.mak
  GEN     sh4eb-linux-user/config-devices.mak
  GEN     sh4-linux-user/config-devices.mak
  GEN     sparc32plus-linux-user/config-devices.mak
  GEN     sparc64-linux-user/config-devices.mak
  GEN     sparc-linux-user/config-devices.mak
  GEN     tilegx-linux-user/config-devices.mak
  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     qapi-event.c
  GEN     qmp-introspect.h
  GEN     qmp-introspect.c
  GEN     trace/generated-helpers-wrappers.h
  GEN     trace/generated-helpers.h
  GEN     trace/generated-tcg-tracers.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-qmp-commands.h
  GEN     tests/test-qmp-introspect.h
  GEN     tests/test-qapi-event.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/rdma/trace.h
  GEN     hw/rdma/vmw/trace.h
  GEN     hw/virtio/trace.h
  GEN     hw/audio/trace.h
  GEN     hw/misc/trace.h
  GEN     hw/misc/macio/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/sparc64/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/pci-host/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/hppa/trace.h
  GEN     hw/xen/trace.h
  GEN     hw/ide/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     scsi/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/rdma/trace.c
  GEN     hw/rdma/vmw/trace.c
  GEN     hw/virtio/trace.c
  GEN     hw/audio/trace.c
  GEN     hw/misc/trace.c
  GEN     hw/misc/macio/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/sparc64/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/pci-host/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/hppa/trace.c
  GEN     hw/xen/trace.c
  GEN     hw/ide/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     scsi/trace.c
  GEN     config-all-devices.mak
mkdir -p dtc/libfdt
mkdir -p dtc/tests
  GEN     ui/input-keymap-atset1-to-qcode.c
  GEN     ui/input-keymap-linux-to-qcode.c
  GEN     ui/input-keymap-qcode-to-atset1.c
  GEN     ui/input-keymap-qcode-to-atset2.c
  GEN     ui/input-keymap-qcode-to-atset3.c
  GEN     ui/input-keymap-qcode-to-linux.c
  GEN     ui/input-keymap-qcode-to-qnum.c
  GEN     ui/input-keymap-qcode-to-sun.c
  GEN     ui/input-keymap-qnum-to-qcode.c
  GEN     ui/input-keymap-usb-to-qcode.c
  GEN     ui/input-keymap-win32-to-qcode.c
  GEN     ui/input-keymap-x11-to-qcode.c
  CC      cs.o
  GEN     ui/input-keymap-xorgevdev-to-qcode.c
  GEN     ui/input-keymap-xorgkbd-to-qcode.c
  CC      SStream.o
  CC      utils.o
  GEN     ui/input-keymap-xorgxquartz-to-qcode.c
  CC      MCInstrDesc.o
  GEN     ui/input-keymap-xorgxwin-to-qcode.c
  CC      MCRegisterInfo.o
  CC      arch/ARM/ARMDisassembler.o
  CC      arch/ARM/ARMMapping.o
  CC      arch/ARM/ARMInstPrinter.o
  CC      arch/ARM/ARMModule.o
  CC      arch/AArch64/AArch64BaseInfo.o
  CC      arch/AArch64/AArch64Disassembler.o
  CC      arch/AArch64/AArch64Module.o
  CC      arch/AArch64/AArch64InstPrinter.o
  CC      arch/AArch64/AArch64Mapping.o
  CC      arch/Mips/MipsDisassembler.o
  CC      arch/Mips/MipsInstPrinter.o
  CC      arch/Mips/MipsModule.o
  CC      arch/Mips/MipsMapping.o
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/dumptrees.c
  CC      arch/PowerPC/PPCDisassembler.o
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/trees.S
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/value-labels.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/asm_tree_dump.c
  CC      arch/PowerPC/PPCModule.o
  CC      arch/PowerPC/PPCMapping.o
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/testutils.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/truncated_property.c
  CC      arch/Sparc/SparcDisassembler.o
  CC      arch/PowerPC/PPCInstPrinter.o
  CC      arch/Sparc/SparcInstPrinter.o
  CC      arch/Sparc/SparcMapping.o
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/check_path.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/overlay_bad_fixup.c
  CC      arch/SystemZ/SystemZMapping.o
  CC      arch/Sparc/SparcModule.o
  CC      arch/SystemZ/SystemZDisassembler.o
  CC      arch/SystemZ/SystemZInstPrinter.o
  CC      arch/SystemZ/SystemZModule.o
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/overlay.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/subnode_iterate.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/property_iterate.c
  CC      arch/X86/X86Disassembler.o
  CC      arch/X86/X86IntelInstPrinter.o
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/integer-expressions.c
  CC      arch/SystemZ/SystemZMCTargetDesc.o
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/utilfdt_test.c
  CC      arch/X86/X86DisassemblerDecoder.o
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/path_offset_aliases.c
  CC      arch/X86/X86Mapping.o
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/add_subnode_with_nops.c
  CC      arch/X86/X86ATTInstPrinter.o
  CC      arch/X86/X86Module.o
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/dtbs_equal_ordered.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/dtb_reverse.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/extra-terminating-null.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/dtbs_equal_unordered.c
  CC      arch/XCore/XCoreModule.o
  CC      MCInst.o
  CC      arch/XCore/XCoreDisassembler.o
  CC      arch/XCore/XCoreInstPrinter.o
  CC      arch/XCore/XCoreMapping.o
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/incbin.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/phandle_format.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/boot-cpuid.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/path-references.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/string_escapes.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/references.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/appendprop2.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/propname_escapes.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/appendprop1.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/del_node.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/del_property.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/setprop.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/open_pack.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/nopulate.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/sw_tree1.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/set_name.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/move_and_save.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/mangle-layout.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/nop_node.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/rw_tree1.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/nop_property.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/stringlist.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/setprop_inplace.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/notfound.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/char_literal.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/sized_cells.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/addr_size_cells.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/get_alias.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/node_offset_by_compatible.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/node_check_compatible.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/node_offset_by_phandle.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/node_offset_by_prop_value.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/parent_offset.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/supernode_atdepth_offset.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/get_path.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/get_phandle.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/getprop.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/get_name.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/path_offset.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/subnode_offset.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/find_property.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/root_node.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/tests/get_mem_rsv.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/libfdt/fdt_overlay.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/libfdt/fdt_addresses.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/libfdt/fdt_empty_tree.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/libfdt/fdt_strerror.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/libfdt/fdt_sw.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/libfdt/fdt_rw.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/libfdt/fdt_wip.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/libfdt/fdt_ro.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/libfdt/fdt.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/util.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/fdtoverlay.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/fdtput.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/fdtget.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/fdtdump.c
	 LEX convert-dtsv0-lexer.lex.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/srcpos.c
	 BISON dtc-parser.tab.c
	 LEX dtc-lexer.lex.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/treesource.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/livetree.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/fstree.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/flattree.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/data.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/dtc.c
	 DEP /var/tmp/patchew-tester-tmp-ebstrc6d/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 /var/tmp/patchew-tester-tmp-ebstrc6d/src/dtc/util.c
	 CC libfdt/fdt.o
	 CC libfdt/fdt_ro.o
	 CC libfdt/fdt_wip.o
	 CC libfdt/fdt_sw.o
	 CC libfdt/fdt_rw.o
	 CC libfdt/fdt_strerror.o
	 CC libfdt/fdt_empty_tree.o
	 CC libfdt/fdt_addresses.o
	 CC libfdt/fdt_overlay.o
	 AR libfdt/libfdt.a
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
  AR      libcapstone.a
ar: creating /var/tmp/patchew-tester-tmp-ebstrc6d/src/build/capstone/libcapstone.a
mkdir -p dtc/libfdt
mkdir -p dtc/tests
  CC      tests/qemu-iotests/socket_scm_helper.o
  GEN     qga/qapi-generated/qga-qapi-types.h
  GEN     qga/qapi-generated/qga-qapi-visit.h
  GEN     qga/qapi-generated/qga-qmp-commands.h
  GEN     qga/qapi-generated/qga-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-dispatch.o
  CC      qapi/qmp-registry.o
  CC      qapi/string-input-visitor.o
  CC      qapi/string-output-visitor.o
  CC      qapi/opts-visitor.o
  CC      qapi/qmp-event.o
  CC      qapi/qapi-clone-visitor.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/qlit.o
  CC      qobject/qbool.o
  CC      qobject/json-lexer.o
  CC      qobject/qjson.o
  CC      qobject/json-parser.o
  CC      util/osdep.o
  CC      trace/qmp.o
  CC      qobject/qobject.o
  CC      qobject/json-streamer.o
  CC      trace/control.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/qemu-timer.o
  CC      util/async.o
  CC      util/thread-pool.o
  CC      util/compatfd.o
  CC      util/mmap-alloc.o
  CC      util/event_notifier-posix.o
  CC      util/memfd.o
  CC      util/envlist.o
  CC      util/qemu-thread-posix.o
  CC      util/path.o
  CC      util/module.o
  CC      util/hbitmap.o
  CC      util/qemu-openpty.o
  CC      util/main-loop.o
  CC      util/acl.o
  CC      util/aio-posix.o
  CC      util/iohandler.o
  CC      util/oslib-posix.o
  CC      util/cacheinfo.o
  CC      util/bitmap.o
  CC      util/host-utils.o
  CC      util/bitops.o
  CC      util/error.o
  CC      util/qemu-error.o
  CC      util/fifo8.o
  CC      util/qemu-config.o
  CC      util/id.o
  CC      util/iov.o
  CC      util/uri.o
  CC      util/qemu-sockets.o
  CC      util/notify.o
  CC      util/qemu-option.o
  CC      util/qemu-progress.o
  CC      util/keyval.o
  CC      util/crc32c.o
  CC      util/hexdump.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/pagesize.o
  CC      util/qdist.o
  CC      util/qht.o
  CC      util/range.o
  CC      util/stats64.o
  CC      util/systemd.o
  CC      util/vfio-helpers.o
  CC      trace-root.o
  CC      crypto/trace.o
  CC      util/trace.o
  CC      io/trace.o
  CC      migration/trace.o
  CC      block/trace.o
  CC      chardev/trace.o
  CC      hw/block/trace.o
  CC      hw/block/dataplane/trace.o
  CC      hw/char/trace.o
  CC      hw/net/trace.o
  CC      hw/intc/trace.o
  CC      hw/rdma/vmw/trace.o
  CC      hw/rdma/trace.o
  CC      hw/virtio/trace.o
  CC      hw/audio/trace.o
  CC      hw/misc/trace.o
  CC      hw/misc/macio/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/sparc64/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/pci-host/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/hppa/trace.o
  CC      hw/xen/trace.o
  CC      hw/ide/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      qapi/trace.o
  CC      linux-user/trace.o
  CC      accel/tcg/trace.o
  CC      accel/kvm/trace.o
  CC      nbd/trace.o
  CC      scsi/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/cpu-get-clock.o
  CC      stubs/error-printf.o
  CC      stubs/dump.o
  CC      stubs/clock-warp.o
  CC      stubs/fdset.o
  CC      stubs/gdbstub.o
  CC      stubs/cpu-get-icount.o
  CC      stubs/get-vm-name.o
  CC      stubs/iothread.o
  CC      stubs/iothread-lock.o
  CC      stubs/is-daemonized.o
  CC      stubs/linux-aio.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/slirp.o
  CC      stubs/set-fd-handler.o
  CC      stubs/sysbus.o
  CC      stubs/tpm.o
  CC      stubs/trace-control.o
  CC      stubs/uuid.o
  CC      stubs/vm-stop.o
  CC      stubs/vmstate.o
  CC      stubs/qmp_pc_dimm.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      stubs/pci-host-piix.o
  CC      stubs/ram-block.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-cluster.o
  CC      block/qcow2-refcount.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-log.o
  CC      block/vhdx-endian.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/nvme.o
  CC      block/nbd-client.o
  CC      block/sheepdog.o
  CC      block/accounting.o
  CC      block/dirty-bitmap.o
  CC      block/backup.o
  CC      block/write-threshold.o
  CC      block/replication.o
  CC      block/throttle.o
  CC      block/crypto.o
  CC      nbd/client.o
  CC      nbd/server.o
  CC      nbd/common.o
  CC      scsi/utils.o
  CC      scsi/pr-manager.o
  CC      scsi/pr-manager-helper.o
  CC      block/curl.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/tlssession.o
  CC      crypto/tlscredsx509.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-tls.o
  CC      io/channel-socket.o
  CC      io/channel-watch.o
  CC      io/channel-util.o
  CC      io/channel-websock.o
  CC      io/net-listener.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      fsdev/virtfs-proxy-helper.o
  CC      fsdev/9p-marshal.o
  CC      fsdev/9p-iov-marshal.o
  CC      scsi/qemu-pr-helper.o
  CC      qemu-bridge-helper.o
  CC      blockdev-nbd.o
  CC      bootdevice.o
  CC      blockdev.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/ossaudio.o
  CC      audio/wavcapture.o
  CC      backends/rng-random.o
  CC      backends/rng-egd.o
  CC      backends/rng.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      backends/hostmem-memfd.o
  CC      block/stream.o
  CC      chardev/msmouse.o
  CC      chardev/wctablet.o
  CC      chardev/testdev.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
  CC      disas/xtensa.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
/var/tmp/patchew-tester-tmp-ebstrc6d/src/block/nbd-client.c: In function ‘nbd_client_co_get_block_status’:
/var/tmp/patchew-tester-tmp-ebstrc6d/src/block/nbd-client.c:922:61: error: ‘extent.flags’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
            (extent.flags & NBD_STATE_ZERO ? BDRV_BLOCK_ZERO : 0);
                                                             ^
  CC      hw/9pfs/codir.o
/var/tmp/patchew-tester-tmp-ebstrc6d/src/block/nbd-client.c:920:27: error: ‘extent.length’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
     *pnum = extent.length >> BDRV_SECTOR_BITS;
                           ^
  CC      hw/9pfs/cofile.o
  CC      hw/9pfs/coxattr.o
  CC      hw/9pfs/9p-synth.o
cc1: all warnings being treated as errors
make: *** [block/nbd-client.o] Error 1
make: *** Waiting for unfinished jobs....
=== 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] 50+ messages in thread

* Re: [Qemu-devel] [PATCH 0/9] nbd block status base:allocation
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
                   ` (9 preceding siblings ...)
  2018-02-22 19:30 ` [Qemu-devel] [PATCH 0/9] nbd block status base:allocation no-reply
@ 2018-02-23 14:02 ` no-reply
  2018-02-24  6:48 ` no-reply
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 50+ messages in thread
From: no-reply @ 2018-02-23 14:02 UTC (permalink / raw)
  To: vsementsov; +Cc: famz, qemu-devel, qemu-block, kwolf, mreitz, den, pbonzini

Hi,

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

Subject: [Qemu-devel] [PATCH 0/9] nbd block status base:allocation
Type: series
Message-id: 1518702707-7077-1-git-send-email-vsementsov@virtuozzo.com

=== 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 ==="
INSTALL=$PWD/install
BUILD=$PWD/build
mkdir -p $BUILD $INSTALL
SRC=$PWD
cd $BUILD
$SRC/configure --prefix=$INSTALL
make -j100
# XXX: we need reliable clean up
# make check -j100 V=1
make install
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
 - [tag update]      patchew/20180223125047.343-1-berto@igalia.com -> patchew/20180223125047.343-1-berto@igalia.com
Submodule 'capstone' (git://git.qemu.org/capstone.git) registered for path 'capstone'
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Submodule 'roms/QemuMacDrivers' (git://git.qemu.org/QemuMacDrivers.git) registered for path 'roms/QemuMacDrivers'
Submodule 'roms/SLOF' (git://git.qemu-project.org/SLOF.git) registered for path 'roms/SLOF'
Submodule 'roms/ipxe' (git://git.qemu-project.org/ipxe.git) registered for path 'roms/ipxe'
Submodule 'roms/openbios' (git://git.qemu-project.org/openbios.git) registered for path 'roms/openbios'
Submodule 'roms/openhackware' (git://git.qemu-project.org/openhackware.git) registered for path 'roms/openhackware'
Submodule 'roms/qemu-palcode' (git://github.com/rth7680/qemu-palcode.git) registered for path 'roms/qemu-palcode'
Submodule 'roms/seabios' (git://git.qemu-project.org/seabios.git/) registered for path 'roms/seabios'
Submodule 'roms/seabios-hppa' (git://github.com/hdeller/seabios-hppa.git) registered for path 'roms/seabios-hppa'
Submodule 'roms/sgabios' (git://git.qemu-project.org/sgabios.git) registered for path 'roms/sgabios'
Submodule 'roms/skiboot' (git://git.qemu.org/skiboot.git) registered for path 'roms/skiboot'
Submodule 'roms/u-boot' (git://git.qemu-project.org/u-boot.git) registered for path 'roms/u-boot'
Submodule 'roms/vgabios' (git://git.qemu-project.org/vgabios.git/) registered for path 'roms/vgabios'
Submodule 'ui/keycodemapdb' (git://git.qemu.org/keycodemapdb.git) registered for path 'ui/keycodemapdb'
Cloning into 'capstone'...
Submodule path 'capstone': checked out '22ead3e0bfdb87516656453336160e0a37b066bf'
Cloning into 'dtc'...
Submodule path 'dtc': checked out 'e54388015af1fb4bf04d0bca99caba1074d9cc42'
Cloning into 'roms/QemuMacDrivers'...
Submodule path 'roms/QemuMacDrivers': checked out 'd4e7d7ac663fcb55f1b93575445fcbca372f17a7'
Cloning into 'roms/SLOF'...
Submodule path 'roms/SLOF': checked out 'fa981320a1e0968d6fc1b8de319723ff8212b337'
Cloning into 'roms/ipxe'...
Submodule path 'roms/ipxe': checked out '0600d3ae94f93efd10fc6b3c7420a9557a3a1670'
Cloning into 'roms/openbios'...
Submodule path 'roms/openbios': checked out '54d959d97fb331708767b2fd4a878efd2bbc41bb'
Cloning into 'roms/openhackware'...
Submodule path 'roms/openhackware': checked out 'c559da7c8eec5e45ef1f67978827af6f0b9546f5'
Cloning into 'roms/qemu-palcode'...
Submodule path 'roms/qemu-palcode': checked out 'f3c7e44c70254975df2a00af39701eafbac4d471'
Cloning into 'roms/seabios'...
Submodule path 'roms/seabios': checked out '63451fca13c75870e1703eb3e20584d91179aebc'
Cloning into 'roms/seabios-hppa'...
Submodule path 'roms/seabios-hppa': checked out '649e6202b8d65d46c69f542b1380f840fbe8ab13'
Cloning into 'roms/sgabios'...
Submodule path 'roms/sgabios': checked out 'cbaee52287e5f32373181cff50a00b6c4ac9015a'
Cloning into 'roms/skiboot'...
Submodule path 'roms/skiboot': checked out 'e0ee24c27a172bcf482f6f2bc905e6211c134bcc'
Cloning into 'roms/u-boot'...
Submodule path 'roms/u-boot': checked out 'd85ca029f257b53a96da6c2fb421e78a003a9943'
Cloning into 'roms/vgabios'...
Submodule path 'roms/vgabios': checked out '19ea12c230ded95928ecaef0db47a82231c2e485'
Cloning into 'ui/keycodemapdb'...
Submodule path 'ui/keycodemapdb': checked out '6b3d716e2b6472eb7189d3220552280ef3d832ce'
Switched to a new branch 'test'
7d95dcd iotests: new test 206 for NBD BLOCK_STATUS
906b016 iotests: add file_path helper
015ee72 iotests.py: tiny refactor: move system imports up
1377201 nbd: BLOCK_STATUS for standard get_block_status function: client part
a750bdb nbd/client: fix error messages in nbd_handle_reply_err
6ec6604 block/nbd-client: save first fatal error in nbd_iter_error
1b609ef nbd: BLOCK_STATUS for standard get_block_status function: server part
ac6e460 nbd: change indenting in nbd.h
5e399e1 nbd/server: add nbd_opt_invalid helper

=== OUTPUT BEGIN ===
=== ENV ===
XDG_SESSION_ID=204371
SHELL=/bin/sh
USER=patchew
PATCHEW=/home/patchew/patchew/patchew-cli -s http://patchew.org --nodebug
PATH=/usr/bin:/bin
PWD=/var/tmp/patchew-tester-tmp-gpridv0o/src
LANG=en_US.UTF-8
HOME=/home/patchew
SHLVL=2
LOGNAME=patchew
XDG_RUNTIME_DIR=/run/user/1000
_=/usr/bin/env
=== PACKAGES ===
plymouth-core-libs-0.8.9-0.28.20140113.el7.centos.ppc64le
vim-common-7.4.160-2.el7.ppc64le
perl-Test-Simple-0.98-243.el7.noarch
hplip-common-3.15.9-3.el7.ppc64le
valgrind-3.12.0-8.el7.ppc64le
gamin-0.1.10-16.el7.ppc64le
libpeas-loader-python-1.20.0-1.el7.ppc64le
telepathy-filesystem-0.0.2-6.el7.noarch
colord-libs-1.3.4-1.el7.ppc64le
kbd-legacy-1.15.5-13.el7.noarch
perl-CPAN-Meta-YAML-0.008-14.el7.noarch
libvirt-daemon-driver-nwfilter-3.2.0-14.el7.ppc64le
ntsysv-1.7.4-1.el7.ppc64le
kernel-bootwrapper-3.10.0-693.el7.ppc64le
telepathy-farstream-0.6.0-5.el7.ppc64le
kdenetwork-common-4.10.5-8.el7_0.noarch
elfutils-devel-0.168-8.el7.ppc64le
pm-utils-1.4.1-27.el7.ppc64le
perl-Error-0.17020-2.el7.noarch
usbmuxd-1.1.0-1.el7.ppc64le
bzip2-devel-1.0.6-13.el7.ppc64le
blktrace-1.0.5-8.el7.ppc64le
gnome-keyring-pam-3.20.0-3.el7.ppc64le
tzdata-java-2017b-1.el7.noarch
perl-devel-5.16.3-292.el7.ppc64le
gnome-getting-started-docs-3.22.0-1.el7.noarch
perl-Log-Message-Simple-0.10-2.el7.noarch
totem-pl-parser-3.10.7-1.el7.ppc64le
lohit-oriya-fonts-2.5.4.1-3.el7.noarch
python-coverage-3.6-0.5.b3.el7.ppc64le
java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.ppc64le
mailcap-2.1.41-2.el7.noarch
perl-CPANPLUS-0.91.38-4.el7.noarch
fprintd-pam-0.5.0-4.0.el7_0.ppc64le
less-458-9.el7.ppc64le
gupnp-igd-0.2.4-1.el7.ppc64le
thai-scalable-waree-fonts-0.5.0-7.el7.noarch
python-di-0.3-2.el7.noarch
yelp-libs-3.22.0-1.el7.ppc64le
vte-profile-0.46.2-1.el7.ppc64le
gpm-libs-1.20.7-5.el7.ppc64le
gnome-clocks-3.22.1-1.el7.ppc64le
p11-kit-trust-0.23.5-3.el7.ppc64le
gssproxy-0.7.0-4.el7.ppc64le
gnu-free-mono-fonts-20120503-8.el7.noarch
python-dateutil-1.5-7.el7.noarch
gucharmap-libs-3.18.2-1.el7.ppc64le
glibc-common-2.17-196.el7.ppc64le
libreport-plugin-mantisbt-2.1.11-38.el7.centos.ppc64le
motif-devel-2.3.4-8.1.el7_3.ppc64le
celt051-0.5.1.3-8.el7.ppc64le
radvd-1.9.2-9.el7.ppc64le
lohit-tamil-fonts-2.5.3-2.el7.noarch
python-ipaddress-1.0.16-2.el7.noarch
anaconda-widgets-21.48.22.121-1.el7.centos.ppc64le
zlib-1.2.7-17.el7.ppc64le
system-config-printer-1.4.1-19.el7.ppc64le
mozjs24-24.2.0-7.el7.ppc64le
device-mapper-multipath-libs-0.4.9-111.el7.ppc64le
wqy-microhei-fonts-0.2.0-0.12.beta.el7.noarch
python-schedutils-0.4-6.el7.ppc64le
gnome-bluetooth-3.20.1-1.el7.ppc64le
nss-util-3.28.4-3.el7.ppc64le
dotconf-1.3-8.el7.ppc64le
ibus-rawcode-1.3.2-3.el7.ppc64le
abattis-cantarell-fonts-0.0.25-1.el7.noarch
sssd-common-1.15.2-50.el7.ppc64le
sil-padauk-fonts-2.8-5.el7.noarch
bind-utils-9.9.4-50.el7.ppc64le
sox-14.4.1-6.el7.ppc64le
libSM-1.2.2-2.el7.ppc64le
libtiff-devel-4.0.3-27.el7_3.ppc64le
plymouth-system-theme-0.8.9-0.28.20140113.el7.centos.ppc64le
python-libs-2.7.5-58.el7.ppc64le
sssd-1.15.2-50.el7.ppc64le
rfkill-0.4-9.el7.ppc64le
cyrus-sasl-md5-2.1.26-21.el7.ppc64le
libXtst-devel-1.2.3-1.el7.ppc64le
avahi-libs-0.6.31-17.el7.ppc64le
ruby-2.0.0.648-30.el7.ppc64le
seahorse-3.20.0-1.el7.ppc64le
python-six-1.9.0-2.el7.noarch
gpgme-1.3.2-5.el7.ppc64le
iwl7260-firmware-22.0.7.0-56.el7.noarch
libsss_certmap-1.15.2-50.el7.ppc64le
xorg-x11-drv-wacom-0.34.2-2.el7.ppc64le
libXau-1.0.8-2.1.el7.ppc64le
shadow-utils-4.1.5.1-24.el7.ppc64le
evolution-ews-3.22.6-6.el7.ppc64le
libsecret-0.18.5-2.el7.ppc64le
perl-Module-Signature-0.73-2.el7.noarch
rootfiles-8.1-11.el7.noarch
trace-cmd-2.6.0-8.el7.ppc64le
hamcrest-1.3-6.el7.noarch
gawk-4.0.2-4.el7_3.1.ppc64le
usermode-1.111-5.el7.ppc64le
gnome-terminal-nautilus-3.22.1-2.el7.ppc64le
gvfs-client-1.30.4-3.el7.ppc64le
yum-utils-1.1.31-42.el7.noarch
iwl3945-firmware-15.32.2.9-56.el7.noarch
perl-Archive-Zip-1.30-11.el7.noarch
spice-glib-0.33-6.el7.ppc64le
augeas-libs-1.4.0-2.el7.ppc64le
openlmi-providers-0.5.0-4.el7.ppc64le
gnome-color-manager-3.22.2-1.el7.ppc64le
imsettings-libs-1.6.3-9.el7.ppc64le
nss-softokn-devel-3.28.3-6.el7.ppc64le
python34-3.4.5-4.el7.ppc64le
perl-DBI-1.627-4.el7.ppc64le
plymouth-plugin-label-0.8.9-0.28.20140113.el7.centos.ppc64le
binutils-2.25.1-31.base.el7.ppc64le
libsss_nss_idmap-1.15.2-50.el7.ppc64le
gvfs-smb-1.30.4-3.el7.ppc64le
freetype-devel-2.4.11-15.el7.ppc64le
libXi-1.7.9-1.el7.ppc64le
libitm-4.8.5-16.el7_4.1.ppc64le
perl-Text-Diff-1.41-5.el7.noarch
gcr-devel-3.20.0-1.el7.ppc64le
numactl-libs-2.0.9-6.el7_2.ppc64le
hardlink-1.0-19.el7.ppc64le
gnome-disk-utility-3.22.1-1.el7.ppc64le
mariadb-libs-5.5.56-2.el7.ppc64le
libnotify-0.7.7-1.el7.ppc64le
perl-TimeDate-2.30-2.el7.noarch
soprano-devel-2.9.2-3.el7.ppc64le
pixman-0.34.0-1.el7.ppc64le
kmod-20-15.el7.ppc64le
qt3-PostgreSQL-3.3.8b-51.el7.ppc64le
python2-pyasn1-0.1.9-7.el7.noarch
libXt-1.1.5-3.el7.ppc64le
perl-Font-AFM-1.20-13.el7.noarch
ibus-1.5.3-13.el7.ppc64le
findutils-4.5.11-5.el7.ppc64le
ibus-libs-1.5.3-13.el7.ppc64le
iprutils-2.4.14.1-1.el7.ppc64le
libpwquality-1.2.3-4.el7.ppc64le
libXrender-devel-0.9.10-1.el7.ppc64le
perl-IO-stringy-2.110-22.el7.noarch
kdelibs-4.14.8-6.el7_3.ppc64le
flac-libs-1.3.0-5.el7_1.ppc64le
device-mapper-event-libs-1.02.140-8.el7.ppc64le
gnutls-devel-3.3.26-9.el7.ppc64le
libXau-devel-1.0.8-2.1.el7.ppc64le
gstreamer1-plugins-base-1.10.4-1.el7.ppc64le
perl-HTML-Tree-5.03-2.el7.noarch
kdenetwork-kopete-4.10.5-8.el7_0.ppc64le
libepoxy-1.3.1-1.el7.ppc64le
mesa-libGLES-17.0.1-6.20170307.el7.ppc64le
qt-postgresql-4.8.5-13.el7.ppc64le
fontconfig-devel-2.10.95-11.el7.ppc64le
java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.ppc64le
libXfont-1.5.2-1.el7.ppc64le
libkexiv2-4.10.5-3.el7.ppc64le
openjpeg-libs-1.5.1-17.el7.ppc64le
iscsi-initiator-utils-6.2.0.874-4.el7.ppc64le
NetworkManager-adsl-1.8.0-9.el7.ppc64le
libgtop2-2.34.2-1.el7.ppc64le
libXdamage-devel-1.1.4-4.1.el7.ppc64le
ipset-libs-6.29-1.el7.ppc64le
kde-runtime-drkonqi-4.10.5-8.el7.ppc64le
e2fsprogs-libs-1.42.9-10.el7.ppc64le
dhclient-4.2.5-58.el7.centos.ppc64le
usbutils-007-5.el7.ppc64le
python-ethtool-0.8-5.el7.ppc64le
gstreamer1-plugins-bad-free-1.10.4-2.el7.ppc64le
fftw-libs-double-3.3.3-8.el7.ppc64le
kdenetwork-krdc-4.10.5-8.el7_0.ppc64le
fuse-libs-2.9.2-8.el7.ppc64le
pciutils-3.5.1-2.el7.ppc64le
at-3.1.13-22.el7.ppc64le
python-IPy-0.75-6.el7.noarch
libXp-1.0.2-2.1.el7.ppc64le
vim-minimal-7.4.160-2.el7.ppc64le
kdesdk-kmtrace-4.10.5-6.el7.ppc64le
libraw1394-2.1.0-2.el7.ppc64le
libdrm-devel-2.4.74-1.el7.ppc64le
irqbalance-1.0.7-10.el7.ppc64le
fipscheck-lib-1.4.1-6.el7.ppc64le
gvfs-1.30.4-3.el7.ppc64le
libiscsi-1.9.0-7.el7.ppc64le
motif-2.3.4-8.1.el7_3.ppc64le
keyutils-1.5.8-3.el7.ppc64le
NetworkManager-ppp-1.8.0-9.el7.ppc64le
systemtap-3.1-3.el7.ppc64le
boost-serialization-1.53.0-27.el7.ppc64le
grilo-0.3.3-1.el7.ppc64le
rpm-4.11.3-25.el7.ppc64le
kdegraphics-libs-4.10.5-3.el7.noarch
libfontenc-1.1.3-3.el7.ppc64le
perl-Git-1.8.3.1-11.el7.noarch
rubygem-abrt-0.3.0-1.el7.noarch
tcl-8.5.13-8.el7.ppc64le
gtksourceview3-3.22.2-1.el7.ppc64le
cmake-2.8.12.2-2.el7.ppc64le
pulseaudio-utils-10.0-3.el7.ppc64le
libusal-1.1.11-23.el7.ppc64le
grub2-ppc64le-2.02-0.64.el7.centos.ppc64le
libreport-plugin-mailx-2.1.11-38.el7.centos.ppc64le
libvisual-0.4.0-16.el7.ppc64le
metacity-2.34.13-7.el7.ppc64le
redland-virtuoso-1.0.16-6.el7.ppc64le
nautilus-3.22.3-3.el7.ppc64le
pciutils-libs-3.5.1-2.el7.ppc64le
soprano-2.9.2-3.el7.ppc64le
mariadb-devel-5.5.56-2.el7.ppc64le
libxkbcommon-x11-0.7.1-1.el7.ppc64le
farstream02-0.2.3-3.el7.ppc64le
redhat-rpm-config-9.1.0-76.el7.centos.noarch
skkdic-20130104-6.T1435.el7.noarch
perl-HTTP-Tiny-0.033-3.el7.noarch
lvm2-libs-2.02.171-8.el7.ppc64le
perl-XML-Grove-0.46alpha-52.el7.noarch
boost-devel-1.53.0-27.el7.ppc64le
pycairo-1.8.10-8.el7.ppc64le
popt-devel-1.13-16.el7.ppc64le
gnome-settings-daemon-3.22.2-5.el7.ppc64le
perl-Socket-2.010-4.el7.ppc64le
numad-0.5-17.20150602git.el7.ppc64le
e2fsprogs-devel-1.42.9-10.el7.ppc64le
libsecret-devel-0.18.5-2.el7.ppc64le
libXv-devel-1.0.11-1.el7.ppc64le
libchewing-0.3.4-6.el7.ppc64le
gnome-shell-extension-places-menu-3.22.2-10.el7.noarch
perl-Time-HiRes-1.9725-3.el7.ppc64le
openchange-2.3-2.el7.ppc64le
audit-libs-devel-2.7.6-3.el7.ppc64le
python-dmidecode-3.12.2-1.el7.ppc64le
libmediaart-1.9.1-1.el7.ppc64le
elfutils-default-yama-scope-0.168-8.el7.noarch
quota-4.01-14.el7.ppc64le
perl-threads-1.87-4.el7.ppc64le
realmd-0.16.1-9.el7.ppc64le
nautilus-sendto-3.8.4-1.el7.ppc64le
gstreamer-0.10.36-7.el7.ppc64le
cairo-gobject-devel-1.14.8-2.el7.ppc64le
abrt-libs-2.1.11-48.el7.centos.ppc64le
libvirt-daemon-driver-storage-iscsi-3.2.0-14.el7.ppc64le
perl-Pod-Parser-1.61-2.el7.noarch
python-devel-2.7.5-58.el7.ppc64le
mpfr-devel-3.1.1-4.el7.ppc64le
kernel-headers-3.10.0-693.el7.ppc64le
powerpc-utils-python-1.2.1-9.el7.noarch
linux-firmware-20170606-56.gitc990aae.el7.noarch
libqmi-1.16.0-1.el7.ppc64le
libvirt-libs-3.2.0-14.el7.ppc64le
perl-Digest-1.17-245.el7.noarch
libgcab1-0.7-3.el7.ppc64le
flex-2.5.37-3.el7.ppc64le
tzdata-2017b-1.el7.noarch
phonon-4.6.0-10.el7.ppc64le
anaconda-tui-21.48.22.121-1.el7.centos.ppc64le
libmbim-utils-1.14.0-2.el7.ppc64le
gnutls-utils-3.3.26-9.el7.ppc64le
perl-Parse-CPAN-Meta-1.4404-5.el7.noarch
flite-1.3-22.el7.ppc64le
nfs4-acl-tools-0.3.3-15.el7.ppc64le
poppler-data-0.4.6-3.el7.noarch
gvfs-fuse-1.30.4-3.el7.ppc64le
gnome-software-3.22.7-1.el7.ppc64le
perl-ExtUtils-ParseXS-3.18-3.el7.noarch
libvirt-python-3.2.0-3.el7.ppc64le
perl-Module-Load-Conditional-0.54-3.el7.noarch
python-netifaces-0.10.4-3.el7.ppc64le
swig-2.0.10-5.el7.ppc64le
ipa-client-common-4.5.0-20.el7.centos.noarch
cheese-libs-3.22.1-1.el7.ppc64le
gnome-tweak-tool-3.22.0-1.el7.noarch
perl-ExtUtils-CBuilder-0.28.2.6-292.el7.noarch
libsoup-devel-2.56.0-3.el7.ppc64le
perl-IO-Zlib-1.10-292.el7.noarch
fros-1.0-2.el7.noarch
lohit-devanagari-fonts-2.5.3-4.el7.noarch
grub2-ppc64le-modules-2.02-0.64.el7.centos.noarch
libgdata-0.17.8-1.el7.ppc64le
evince-nautilus-3.22.1-5.el7.ppc64le
perl-ExtUtils-Embed-1.30-292.el7.noarch
dleyna-connector-dbus-0.2.0-2.el7.ppc64le
libiec61883-1.2.0-10.el7.ppc64le
python-lxml-3.2.1-4.el7.ppc64le
liberation-serif-fonts-1.07.2-15.el7.noarch
tigervnc-license-1.8.0-1.el7.noarch
gnome-packagekit-3.22.1-2.el7.ppc64le
hpijs-3.15.9-3.el7.ppc64le
libmodman-2.0.1-8.el7.ppc64le
ntp-4.2.6p5-25.el7.centos.2.ppc64le
gmp-devel-6.0.0-15.el7.ppc64le
pyxattr-0.5.1-5.el7.ppc64le
sil-abyssinica-fonts-1.200-6.el7.noarch
ncurses-libs-5.9-13.20130511.el7.ppc64le
gnome-dictionary-libs-3.20.0-1.el7.ppc64le
kdesdk-devel-4.10.5-6.el7.ppc64le
libreport-rhel-anaconda-bugzilla-2.1.11-38.el7.centos.ppc64le
libvirt-daemon-config-network-3.2.0-14.el7.ppc64le
boost-iostreams-1.53.0-27.el7.ppc64le
python-ply-3.4-11.el7.noarch
ucs-miscfixed-fonts-0.3-11.el7.noarch
info-5.1-4.el7.ppc64le
libXxf86misc-devel-1.0.3-7.1.el7.ppc64le
ibus-qt-1.3.2-4.el7.ppc64le
gnome-video-effects-0.4.3-1.el7.noarch
bridge-utils-1.5-9.el7.ppc64le
make-3.82-23.el7.ppc64le
pywbem-0.7.0-25.20130827svn625.el7.noarch
pnm2ppa-1.04-28.el7.ppc64le
chkconfig-1.7.4-1.el7.ppc64le
at-spi2-atk-devel-2.22.0-2.el7.ppc64le
freeglut-devel-2.8.1-3.el7.ppc64le
jbigkit-libs-2.0-11.el7.ppc64le
sssd-ipa-1.15.2-50.el7.ppc64le
openssl-libs-1.0.2k-8.el7.ppc64le
ldns-1.6.16-10.el7.ppc64le
rdate-1.4-25.el7.ppc64le
libdb-5.3.21-20.el7.ppc64le
evince-libs-3.22.1-5.el7.ppc64le
empathy-3.12.12-4.el7.ppc64le
rubygem-json-1.7.7-30.el7.ppc64le
dmraid-1.0.0.rc16-28.el7.ppc64le
libblkid-2.23.2-43.el7.ppc64le
logrotate-3.8.6-14.el7.ppc64le
iwl105-firmware-18.168.6.1-56.el7.noarch
grep-2.20-3.el7.ppc64le
xorg-x11-drv-synaptics-1.9.0-1.el7.ppc64le
iowatcher-1.0-6.el7.ppc64le
rubygem-net-http-persistent-2.8-5.el7.noarch
setroubleshoot-plugins-3.0.65-1.el7.noarch
atk-2.22.0-3.el7.ppc64le
libcacard-2.5.2-2.el7.ppc64le
iwl6050-firmware-41.28.5.1-56.el7.noarch
lcms2-2.6-3.el7.ppc64le
tigervnc-server-minimal-1.8.0-1.el7.ppc64le
gvfs-goa-1.30.4-3.el7.ppc64le
authconfig-6.2.8-30.el7.ppc64le
yum-plugin-fastestmirror-1.1.31-42.el7.noarch
dbus-python-1.1.1-9.el7.ppc64le
perl-Archive-Tar-1.92-2.el7.noarch
iwl5000-firmware-8.83.5.1_1-56.el7.noarch
libacl-2.2.51-12.el7.ppc64le
farstream-0.1.2-8.el7.ppc64le
ppc64-utils-0.14-16.el7.ppc64le
servicelog-1.1.14-3.el7.ppc64le
python2-ipaclient-4.5.0-20.el7.centos.noarch
libpeas-1.20.0-1.el7.ppc64le
perl-TermReadKey-2.30-20.el7.ppc64le
hdparm-9.43-5.el7.ppc64le
libicu-50.1.2-15.el7.ppc64le
polkit-qt-0.103.0-10.el7_0.ppc64le
gnome-weather-3.20.2-1.el7.noarch
libmspack-0.5-0.5.alpha.el7.ppc64le
libkkc-data-0.3.1-9.el7.ppc64le
hicolor-icon-theme-0.12-7.el7.noarch
perl-Newt-1.08-36.el7.ppc64le
libstdc++-devel-4.8.5-16.el7_4.1.ppc64le
libexif-0.6.21-6.el7.ppc64le
gtk3-devel-3.22.10-4.el7.ppc64le
gvfs-mtp-1.30.4-3.el7.ppc64le
ncompress-4.2.4.4-3.el7.ppc64le
libXcomposite-0.4.4-4.1.el7.ppc64le
python-decorator-3.4.0-3.el7.noarch
perl-Business-ISBN-Data-20120719.001-2.el7.noarch
gcc-gfortran-4.8.5-16.el7_4.1.ppc64le
cpio-2.11-24.el7.ppc64le
mesa-libGLU-9.0.0-4.el7.ppc64le
baobab-3.22.1-1.el7.ppc64le
device-mapper-libs-1.02.140-8.el7.ppc64le
libXtst-1.2.3-1.el7.ppc64le
ModemManager-glib-1.6.0-2.el7.ppc64le
perl-HTML-Parser-3.71-4.el7.ppc64le
libical-1.0.1-1.el7.ppc64le
xorg-x11-xinit-1.3.4-1.el7.ppc64le
gstreamer1-plugins-base-devel-1.10.4-1.el7.ppc64le
libdrm-2.4.74-1.el7.ppc64le
libXfixes-devel-5.0.3-1.el7.ppc64le
python-gssapi-1.2.0-3.el7.ppc64le
perl-Text-Unidecode-0.04-20.el7.noarch
hunspell-1.3.2-15.el7.ppc64le
kde-settings-19-23.5.el7.centos.noarch
perl-App-cpanminus-1.6922-2.el7.noarch
parted-3.1-28.el7.ppc64le
mesa-libGL-17.0.1-6.20170307.el7.ppc64le
elfutils-libelf-devel-0.168-8.el7.ppc64le
perl-Net-LibIDN-0.12-15.el7.ppc64le
apr-1.4.8-3.el7.ppc64le
kdepimlibs-4.10.5-4.el7.ppc64le
virt-top-1.0.8-23.el7.ppc64le
samba-client-libs-4.6.2-8.el7.ppc64le
gstreamer-plugins-base-0.10.36-10.el7.ppc64le
json-glib-devel-1.2.6-1.el7.ppc64le
perl-autodie-2.16-2.el7.noarch
tar-1.26-32.el7.ppc64le
ksysguard-libs-4.11.19-8.el7.ppc64le
rdma-core-devel-13-7.el7.ppc64le
accountsservice-0.6.45-2.el7.ppc64le
libxklavier-5.4-7.el7.ppc64le
libxml2-devel-2.9.1-6.el7_2.3.ppc64le
ghostscript-fonts-5.50-32.el7.noarch
libassuan-2.1.0-3.el7.ppc64le
libkipi-devel-4.10.5-3.el7.ppc64le
python-smbc-1.0.13-7.el7.ppc64le
initscripts-9.49.39-1.el7.ppc64le
qt3-3.3.8b-51.el7.ppc64le
yum-metadata-parser-1.1.4-10.el7.ppc64le
device-mapper-persistent-data-0.7.0-0.1.rc6.el7.ppc64le
adwaita-icon-theme-3.22.0-1.el7.noarch
kdepim-4.10.5-6.el7.ppc64le
postfix-2.10.1-6.el7.ppc64le
abrt-addon-pstoreoops-2.1.11-48.el7.centos.ppc64le
freerdp-libs-1.0.2-10.el7.ppc64le
langtable-python-0.0.31-3.el7.noarch
tcp_wrappers-7.6-77.el7.ppc64le
lm_sensors-libs-3.4.0-4.20160601gitf9185e5.el7.ppc64le
kde-style-oxygen-4.11.19-8.el7.ppc64le
powertop-2.3-12.el7.ppc64le
wpa_supplicant-2.6-5.el7.ppc64le
gtk3-3.22.10-4.el7.ppc64le
boost-python-1.53.0-27.el7.ppc64le
keyutils-libs-devel-1.5.8-3.el7.ppc64le
libdvdread-5.0.3-3.el7.ppc64le
im-chooser-common-1.6.4-4.el7.ppc64le
aic94xx-firmware-30-6.el7.noarch
media-player-info-17-4.el7.noarch
compat-gnome-desktop314-3.14.2-1.el7.ppc64le
harfbuzz-1.3.2-1.el7.ppc64le
libgcrypt-devel-1.5.3-14.el7.ppc64le
groff-base-1.22.2-8.el7.ppc64le
sane-backends-1.0.24-9.el7.ppc64le
setuptool-1.19.11-8.el7.ppc64le
ebtables-2.0.10-15.el7.ppc64le
libchamplain-0.12.15-1.el7.ppc64le
boost-math-1.53.0-27.el7.ppc64le
libuser-0.60-7.el7_1.ppc64le
boost-date-time-1.53.0-27.el7.ppc64le
espeak-1.47.11-4.el7.ppc64le
tbb-devel-4.1-9.20130314.el7.ppc64le
grub2-tools-minimal-2.02-0.64.el7.centos.ppc64le
gjs-1.46.0-1.el7.ppc64le
libsss_autofs-1.15.2-50.el7.ppc64le
deltarpm-3.6-3.el7.ppc64le
libnl-1.1.4-3.el7.ppc64le
libgpod-0.8.2-12.el7.ppc64le
postgresql-devel-9.2.21-1.el7.ppc64le
libibcm-13-7.el7.ppc64le
abrt-gui-libs-2.1.11-48.el7.centos.ppc64le
libxkbcommon-0.7.1-1.el7.ppc64le
passwd-0.79-4.el7.ppc64le
lsvpd-1.7.8-1.el7.ppc64le
fprintd-0.5.0-4.0.el7_0.ppc64le
hunspell-en-0.20121024-6.el7.noarch
qca-ossl-2.0.0-0.19.beta3.el7.ppc64le
libdmapsharing-2.9.37-1.el7.ppc64le
ortp-0.20.0-10.el7.ppc64le
python-pycurl-7.19.0-19.el7.ppc64le
perl-Pod-Escapes-1.04-292.el7.noarch
pcp-3.11.8-7.el7.ppc64le
libblkid-devel-2.23.2-43.el7.ppc64le
dracut-network-033-502.el7.ppc64le
pyatspi-2.20.3-1.el7.noarch
systemtap-sdt-devel-3.1-3.el7.ppc64le
check-0.9.9-5.el7.ppc64le
perl-threads-shared-1.43-6.el7.ppc64le
gnome-shell-extension-common-3.22.2-10.el7.noarch
gnome-icon-theme-symbolic-3.12.0-2.el7.noarch
abrt-cli-2.1.11-48.el7.centos.ppc64le
festival-speechtools-libs-1.2.96-28.el7.ppc64le
python-slip-dbus-0.4.0-2.el7.noarch
mesa-private-llvm-3.9.1-3.el7.ppc64le
perl-Time-Local-1.2300-2.el7.noarch
yelp-3.22.0-1.el7.ppc64le
fuse-devel-2.9.2-8.el7.ppc64le
dnsmasq-2.76-2.el7.ppc64le
festvox-slt-arctic-hts-0.20061229-28.el7.noarch
libtasn1-devel-4.10-1.el7.ppc64le
libgudev1-219-42.el7.ppc64le
perl-version-0.99.07-2.el7.ppc64le
libvirt-daemon-driver-qemu-3.2.0-14.el7.ppc64le
ps_mem-3.1-7.el7.noarch
rtkit-0.11-10.el7.ppc64le
abrt-gui-2.1.11-48.el7.centos.ppc64le
nettle-devel-2.7.1-8.el7.ppc64le
perl-ExtUtils-Manifest-1.61-244.el7.noarch
libreswan-3.20-3.el7.ppc64le
python-pyudev-0.15-9.el7.noarch
appstream-data-7-20170301.el7.noarch
powerpc-utils-1.3.3-4.el7.ppc64le
setup-2.8.71-7.el7.noarch
enscript-1.6.6-6.el7.ppc64le
libgexiv2-0.10.4-2.el7.ppc64le
perl-Digest-SHA-5.85-4.el7.ppc64le
upower-0.99.4-2.el7.ppc64le
dhcp-libs-4.2.5-58.el7.centos.ppc64le
kbd-1.15.5-13.el7.ppc64le
phonon-backend-gstreamer-4.6.3-3.el7.ppc64le
dejavu-fonts-common-2.33-6.el7.noarch
libaio-devel-0.3.109-13.el7.ppc64le
grubby-8.28-23.el7.ppc64le
perl-CPAN-Meta-2.120921-5.el7.noarch
libmusicbrainz5-5.0.1-9.el7.ppc64le
liberation-mono-fonts-1.07.2-15.el7.noarch
fcoe-utils-1.0.32-1.el7.ppc64le
gvfs-afc-1.30.4-3.el7.ppc64le
m17n-db-1.6.4-3.el7.noarch
time-1.7-45.el7.ppc64le
python-configobj-4.7.2-7.el7.noarch
perl-Log-Message-0.08-3.el7.noarch
glib-networking-2.50.0-1.el7.ppc64le
gnome-classic-session-3.22.2-10.el7.noarch
libglade2-2.6.4-11.el7.ppc64le
langtable-data-0.0.31-3.el7.noarch
dejavu-serif-fonts-2.33-6.el7.noarch
python-requests-2.6.0-1.el7_1.noarch
perl-HTML-Tagset-3.20-15.el7.noarch
gssdp-1.0.1-1.el7.ppc64le
perl-CPANPLUS-Dist-Build-0.70-3.el7.noarch
brasero-nautilus-3.12.1-2.el7.ppc64le
evolution-data-server-3.22.7-6.el7.ppc64le
khmeros-fonts-common-5.0-17.el7.noarch
dejavu-sans-fonts-2.33-6.el7.noarch
python-kmod-0.9-4.el7.ppc64le
lzop-1.03-10.el7.ppc64le
telepathy-salut-0.8.1-6.el7.ppc64le
tbb-4.1-9.20130314.el7.ppc64le
kdegraphics-devel-4.10.5-3.el7.noarch
libcryptui-3.12.2-1.el7.ppc64le
ncurses-base-5.9-13.20130511.el7.noarch
lohit-nepali-fonts-2.5.3-2.el7.noarch
python-configshell-1.1.fb23-3.el7.noarch
acl-2.2.51-12.el7.ppc64le
python-rtslib-2.1.fb63-2.el7.noarch
libreport-plugin-rhtsupport-2.1.11-38.el7.centos.ppc64le
imsettings-qt-1.6.3-9.el7.ppc64le
webkitgtk3-2.4.11-2.el7.ppc64le
libsepol-2.5-6.el7.ppc64le
smc-meera-fonts-6.0-7.el7.noarch
python-mako-0.8.1-2.el7.noarch
pinentry-0.8.1-17.el7.ppc64le
alsa-tools-firmware-1.1.0-1.el7.ppc64le
libgdither-0.6-8.el7.ppc64le
ibus-libpinyin-1.6.91-4.el7.ppc64le
libXp-devel-1.0.2-2.1.el7.ppc64le
nspr-4.13.1-1.0.el7_3.ppc64le
cscope-15.8-10.el7.ppc64le
m2crypto-0.21.1-17.el7.ppc64le
libatomic-4.8.5-16.el7.ppc64le
opencc-0.4.3-3.el7.ppc64le
sbc-1.0-5.el7.ppc64le
SDL-devel-1.2.15-14.el7.ppc64le
vorbis-tools-1.4.0-12.el7.ppc64le
bzip2-libs-1.0.6-13.el7.ppc64le
google-crosextra-carlito-fonts-1.103-0.2.20130920.el7.noarch
nmap-ncat-6.40-7.el7.ppc64le
krb5-libs-1.15.1-8.el7.ppc64le
sssd-krb5-1.15.2-50.el7.ppc64le
cups-filters-libs-1.0.35-22.el7.ppc64le
virt-manager-1.4.1-7.el7.noarch
evince-3.22.1-5.el7.ppc64le
readline-6.2-10.el7.ppc64le
ctags-5.8-13.el7.ppc64le
sound-theme-freedesktop-0.8-3.el7.noarch
ruby-libs-2.0.0.648-30.el7.ppc64le
pth-2.0.7-23.el7.ppc64le
rubygems-2.0.14.1-30.el7.noarch
gnome-dictionary-3.20.0-1.el7.ppc64le
xorg-x11-drv-evdev-2.10.5-2.1.el7.ppc64le
audit-libs-2.7.6-3.el7.ppc64le
iwl135-firmware-18.168.6.1-56.el7.noarch
python-nss-0.16.0-3.el7.ppc64le
json-glib-1.2.6-1.el7.ppc64le
flatpak-libs-0.8.7-1.el7.ppc64le
libutempter-1.1.6-4.el7.ppc64le
ekiga-4.0.1-7.el7.ppc64le
easymock2-2.5.2-12.el7.noarch
keyutils-libs-1.5.8-3.el7.ppc64le
iwl1000-firmware-39.31.5.1-56.el7.noarch
teamd-1.25-5.el7.ppc64le
telepathy-glib-0.24.0-1.el7.ppc64le
PackageKit-yum-1.1.5-1.el7.centos.ppc64le
virt-what-1.13-10.el7.ppc64le
ppc64-diag-2.7.3-3.el7.ppc64le
libpurple-2.10.11-5.el7.ppc64le
libffi-3.0.13-18.el7.ppc64le
iwl2000-firmware-18.168.6.1-56.el7.noarch
perl-YAML-0.84-5.el7.noarch
libxml2-python-2.9.1-6.el7_2.3.ppc64le
lsscsi-0.27-6.el7.ppc64le
systemtap-client-3.1-3.el7.ppc64le
virt-viewer-5.0-7.el7.ppc64le
dbusmenu-qt-0.9.2-7.el7.ppc64le
libtar-1.2.11-29.el7.ppc64le
ccache-3.3.4-1.el7.ppc64le
perl-DBD-SQLite-1.39-3.el7.ppc64le
gnome-icon-theme-3.12.0-1.el7.noarch
gdk-pixbuf2-2.36.5-1.el7.ppc64le
libpath_utils-0.2.1-27.el7.ppc64le
gvfs-archive-1.30.4-3.el7.ppc64le
gnome-online-accounts-devel-3.22.5-1.el7.ppc64le
yajl-2.0.4-4.el7.ppc64le
gcc-4.8.5-16.el7_4.1.ppc64le
perl-Pod-Coverage-0.23-3.el7.noarch
libselinux-python-2.5-11.el7.ppc64le
libX11-devel-1.6.5-1.el7.ppc64le
qrencode-libs-3.4.1-3.el7.ppc64le
gnome-system-log-3.9.90-3.el7.ppc64le
mesa-libGLU-devel-9.0.0-4.el7.ppc64le
boost-system-1.53.0-27.el7.ppc64le
perl-HTTP-Message-6.06-6.el7.noarch
cracklib-2.9.0-11.el7.ppc64le
libXcursor-1.1.14-8.el7.ppc64le
dbus-1.6.12-17.el7.ppc64le
libnotify-devel-0.7.7-1.el7.ppc64le
ibus-gtk3-1.5.3-13.el7.ppc64le
libv4l-0.9.5-4.el7.ppc64le
perl-Time-Piece-1.20.1-292.el7.ppc64le
cracklib-dicts-2.9.0-11.el7.ppc64le
startup-notification-0.12-8.el7.ppc64le
dconf-0.26.0-2.el7.ppc64le
net-snmp-devel-5.7.2-28.el7.ppc64le
kate-part-4.10.5-4.el7.ppc64le
orc-0.4.26-1.el7.ppc64le
kernel-devel-3.10.0-693.el7.ppc64le
avahi-gobject-0.6.31-17.el7.ppc64le
cairo-gobject-1.14.8-2.el7.ppc64le
httpd-2.4.6-67.el7.centos.ppc64le
subversion-1.7.14-10.el7.ppc64le
kdepimlibs-akonadi-4.10.5-4.el7.ppc64le
gdbm-1.10-8.el7.ppc64le
perl-File-CheckTree-4.42-3.el7.noarch
atk-devel-2.22.0-3.el7.ppc64le
java-1.8.0-openjdk-devel-1.8.0.131-11.b12.el7.ppc64le
abrt-dbus-2.1.11-48.el7.centos.ppc64le
qt-mysql-4.8.5-13.el7.ppc64le
libkdcraw-4.10.5-4.el7.ppc64le
libaio-0.3.109-13.el7.ppc64le
urw-fonts-2.4-16.el7.noarch
libgee06-0.6.8-3.el7.ppc64le
libXrandr-devel-1.5.1-2.el7.ppc64le
cronie-anacron-1.4.11-17.el7.ppc64le
mlocate-0.26-6.el7.ppc64le
kdesdk-okteta-devel-4.10.5-6.el7.ppc64le
iso-codes-3.46-2.el7.noarch
e2fsprogs-1.42.9-10.el7.ppc64le
at-spi2-atk-2.22.0-2.el7.ppc64le
libstoragemgmt-python-clibs-1.4.0-3.el7.ppc64le
PackageKit-command-not-found-1.1.5-1.el7.centos.ppc64le
kdenetwork-kopete-devel-4.10.5-8.el7_0.ppc64le
libmnl-1.0.3-7.el7.ppc64le
tcp_wrappers-devel-7.6-77.el7.ppc64le
python-dns-1.12.0-4.20150617git465785f.el7.noarch
libXinerama-devel-1.1.3-2.1.el7.ppc64le
libibverbs-13-7.el7.ppc64le
net-tools-2.0-0.22.20131004git.el7.ppc64le
kde-workspace-libs-4.11.19-8.el7.ppc64le
libwebp-0.3.0-7.el7.ppc64le
libattr-devel-2.4.46-12.el7.ppc64le
libkadm5-1.15.1-8.el7.ppc64le
gcr-3.20.0-1.el7.ppc64le
colord-1.3.4-1.el7.ppc64le
rsyslog-8.24.0-12.el7.ppc64le
im-chooser-1.6.4-4.el7.ppc64le
boost-filesystem-1.53.0-27.el7.ppc64le
libgpg-error-devel-1.12-3.el7.ppc64le
harfbuzz-icu-1.3.2-1.el7.ppc64le
libpeas-gtk-1.20.0-1.el7.ppc64le
abrt-addon-python-2.1.11-48.el7.centos.ppc64le
selinux-policy-targeted-3.13.1-166.el7.noarch
libksane-4.10.5-4.el7.ppc64le
m4-1.4.16-10.el7.ppc64le
xmlrpc-c-client-1.32.5-1905.svn2451.el7.ppc64le
sysvinit-tools-2.88-14.dsf.el7.ppc64le
libnma-1.8.0-3.el7.ppc64le
os-prober-1.58-9.el7.ppc64le
libproxy-mozjs-0.4.11-10.el7.ppc64le
speech-dispatcher-0.7.1-15.el7.ppc64le
boost-signals-1.53.0-27.el7.ppc64le
python-ldap-2.4.15-2.el7.ppc64le
libvpx-1.3.0-5.el7_0.ppc64le
nm-connection-editor-1.8.0-3.el7.ppc64le
NetworkManager-team-1.8.0-9.el7.ppc64le
perf-3.10.0-693.el7.ppc64le
libgsf-1.14.26-7.el7.ppc64le
libpfm-4.7.0-4.el7.ppc64le
postgresql-9.2.21-1.el7.ppc64le
ethtool-4.8-1.el7.ppc64le
xorg-x11-server-utils-7.7-20.el7.ppc64le
attica-0.4.2-1.el7.ppc64le
xfsdump-3.1.4-1.el7.ppc64le
firewalld-filesystem-0.4.4.4-6.el7.noarch
libXfont2-2.0.1-2.el7.ppc64le
net-snmp-agent-libs-5.7.2-28.el7.ppc64le
tcl-devel-8.5.13-8.el7.ppc64le
libgxps-0.2.5-1.el7.ppc64le
cyrus-sasl-devel-2.1.26-21.el7.ppc64le
hmaccalc-0.9.13-4.el7.ppc64le
libwacom-data-0.24-1.el7.noarch
perl-Pod-Usage-1.63-3.el7.noarch
python-yubico-1.2.3-1.el7.noarch
libXxf86vm-devel-1.1.4-1.el7.ppc64le
abrt-tui-2.1.11-48.el7.centos.ppc64le
pinfo-0.6.10-9.el7.ppc64le
gnome-shell-extension-user-theme-3.22.2-10.el7.noarch
perl-File-Path-2.09-2.el7.noarch
xorg-x11-fonts-Type1-7.5-9.el7.noarch
python-firewall-0.4.4.4-6.el7.noarch
libXres-1.0.7-2.1.el7.ppc64le
libcgroup-tools-0.41-13.el7.ppc64le
libnl-devel-1.1.4-3.el7.ppc64le
gnome-user-docs-3.22.0-1.el7.noarch
perl-Pod-Simple-3.28-4.el7.noarch
systemd-libs-219-42.el7.ppc64le
ncurses-devel-5.9-13.20130511.el7.ppc64le
mesa-libEGL-devel-17.0.1-6.20170307.el7.ppc64le
audit-2.7.6-3.el7.ppc64le
iotop-0.6-2.el7.noarch
libvirt-daemon-driver-storage-logical-3.2.0-14.el7.ppc64le
perl-Module-CoreList-2.76.02-292.el7.noarch
libmbim-1.14.0-2.el7.ppc64le
xdg-desktop-portal-0.5-2.el7.ppc64le
perl-Module-Load-0.24-3.el7.noarch
caribou-gtk3-module-0.4.21-1.el7.ppc64le
sqlite-devel-3.7.17-8.el7.ppc64le
centos-indexhtml-7-9.el7.centos.noarch
elfutils-0.168-8.el7.ppc64le
centos-release-7-4.1708.el7.centos.ppc64le
trousers-0.3.14-2.el7.ppc64le
perl-Thread-Queue-3.02-2.el7.noarch
python-meh-gui-0.25.2-1.el7.noarch
gom-0.3.2-1.el7.ppc64le
lldpad-1.0.1-3.git036e314.el7.ppc64le
libgusb-0.2.9-1.el7.ppc64le
liberation-fonts-common-1.07.2-15.el7.noarch
libimobiledevice-1.2.0-1.el7.ppc64le
perl-Module-Pluggable-4.8-3.el7.noarch
ghostscript-cups-9.07-28.el7.ppc64le
osinfo-db-tools-1.1.0-1.el7.ppc64le
kbd-misc-1.15.5-13.el7.noarch
dhcp-common-4.2.5-58.el7.centos.ppc64le
control-center-filesystem-3.22.2-5.el7.ppc64le
libvirt-glib-1.0.0-1.el7.ppc64le
perl-CPAN-Meta-Requirements-2.122-7.el7.noarch
PyQt4-4.10.1-13.el7.ppc64le
btrfs-progs-4.9.1-1.el7.ppc64le
anaconda-gui-21.48.22.121-1.el7.centos.ppc64le
libatasmart-0.19-6.el7.ppc64le
shared-desktop-ontologies-0.11.0-2.el7.noarch
libvirt-daemon-config-nwfilter-3.2.0-14.el7.ppc64le
autoconf-2.69-11.el7.noarch
gnome-terminal-3.22.1-2.el7.ppc64le
python-cups-1.9.63-6.el7.ppc64le
intltool-0.50.2-7.el7.noarch
glibc-headers-2.17-196.el7.ppc64le
kdesdk-common-4.10.5-6.el7.noarch
libvirt-daemon-driver-secret-3.2.0-14.el7.ppc64le
perl-Locale-Maketext-Simple-0.21-292.el7.noarch
gnome-keyring-3.20.0-3.el7.ppc64le
python-sss-murmur-1.15.2-50.el7.ppc64le
vim-enhanced-7.4.160-2.el7.ppc64le
perl-ExtUtils-MakeMaker-6.68-3.el7.noarch
emacs-filesystem-24.3-19.el7_3.noarch
libvncserver-0.9.9-9.el7_0.1.ppc64le
perl-Object-Accessor-0.42-292.el7.noarch
gnome-desktop3-3.22.2-2.el7.ppc64le
python-backports-1.0-8.el7.ppc64le
evolution-help-3.22.6-10.el7.noarch
systemtap-devel-3.1-3.el7.ppc64le
langtable-0.0.31-3.el7.noarch
geocode-glib-3.20.1-1.el7.ppc64le
perl-Compress-Raw-Bzip2-2.061-3.el7.ppc64le
pygtk2-libglade-2.24.0-9.el7.ppc64le
python-urllib3-1.10.2-3.el7.noarch
orca-3.6.3-4.el7.ppc64le
perl-File-Fetch-0.42-2.el7.noarch
latencytop-common-0.5-13.el7.ppc64le
geoclue2-libs-2.4.5-1.el7.ppc64le
perl-Module-Loaded-0.08-292.el7.noarch
webkitgtk4-2.14.7-2.el7.ppc64le
python-paste-1.7.5.1-9.20111221hg1498.el7.noarch
totem-nautilus-3.22.1-1.el7.ppc64le
libtool-2.4.2-22.el7_3.ppc64le
smc-fonts-common-6.0-7.el7.noarch
libnice-0.1.3-4.el7.ppc64le
libdvdnav-5.0.3-1.el7.ppc64le
folks-0.11.3-1.el7.ppc64le
python-ipaddr-2.1.11-1.el7.noarch
xorg-x11-utils-7.5-22.el7.ppc64le
oxygen-icon-theme-4.10.5-2.el7.noarch
libkkc-common-0.3.1-9.el7.noarch
libgovirt-0.3.3-5.el7.ppc64le
boost-timer-1.53.0-27.el7.ppc64le
gnome-packagekit-common-3.22.1-2.el7.ppc64le
javapackages-tools-3.4.1-11.el7.noarch
sane-backends-devel-1.0.24-9.el7.ppc64le
konkretcmpi-0.9.1-5.el7.ppc64le
perl-srpm-macros-1-8.el7.noarch
chrony-3.1-2.el7.centos.ppc64le
fuse-2.9.2-8.el7.ppc64le
evolution-3.22.6-10.el7.ppc64le
python-urwid-1.1.1-3.el7.ppc64le
shotwell-0.24.5-1.el7.ppc64le
libreport-web-2.1.11-38.el7.centos.ppc64le
glibc-2.17-196.el7.ppc64le
usb_modeswitch-data-20160612-2.el7.noarch
patch-2.7.1-8.el7.ppc64le
file-roller-3.22.3-1.el7.ppc64le
python-netaddr-0.7.5-7.el7.noarch
ibus-table-chinese-1.4.6-3.el7.noarch
libreport-plugin-reportuploader-2.1.11-38.el7.centos.ppc64le
pcre-8.32-17.el7.ppc64le
libvirt-daemon-driver-network-3.2.0-14.el7.ppc64le
cyrus-sasl-plain-2.1.26-21.el7.ppc64le
glade-libs-3.20.0-1.el7.ppc64le
python-markupsafe-0.11-10.el7.ppc64le
kdenetwork-devel-4.10.5-8.el7_0.noarch
libreport-plugin-ureport-2.1.11-38.el7.centos.ppc64le
dbus-libs-1.6.12-17.el7.ppc64le
alsa-firmware-1.0.28-2.el7.noarch
mozjs17-17.0.0-19.el7.ppc64le
avahi-ui-gtk3-0.6.31-17.el7.ppc64le
python-cffi-1.6.0-5.el7.ppc64le
xdg-user-dirs-gtk-0.10-4.el7.ppc64le
gavl-1.4.0-4.el7.ppc64le
libjpeg-turbo-1.2.90-5.el7.ppc64le
device-mapper-multipath-0.4.9-111.el7.ppc64le
libcdio-0.92-1.el7.ppc64le
pulseaudio-module-bluetooth-10.0-3.el7.ppc64le
pytalloc-2.1.9-1.el7.ppc64le
ibus-sayura-1.3.2-3.el7.ppc64le
checkpolicy-2.5-4.el7.ppc64le
libICE-1.0.9-9.el7.ppc64le
libvirt-daemon-driver-interface-3.2.0-14.el7.ppc64le
libunistring-0.9.3-9.el7.ppc64le
libXScrnSaver-devel-1.2.2-6.1.el7.ppc64le
openlmi-python-base-0.5.0-4.el7.noarch
PyQt4-devel-4.10.1-13.el7.ppc64le
libndp-1.2-7.el7.ppc64le
libxml2-2.9.1-6.el7_2.3.ppc64le
sssd-krb5-common-1.15.2-50.el7.ppc64le
ncurses-5.9-13.20130511.el7.ppc64le
icedax-1.1.11-23.el7.ppc64le
libmsn-4.2.1-7.el7.ppc64le
evolution-data-server-devel-3.22.7-6.el7.ppc64le
poppler-0.26.5-16.el7.ppc64le
sed-4.2.2-5.el7.ppc64le
sssd-ldap-1.15.2-50.el7.ppc64le
fontconfig-2.10.95-11.el7.ppc64le
pinentry-qt-0.8.1-17.el7.ppc64le
cyrus-sasl-scram-2.1.26-21.el7.ppc64le
paps-0.6.8-28.el7.1.ppc64le
libyaml-0.1.4-11.el7_0.ppc64le
libgpg-error-1.12-3.el7.ppc64le
sgpio-1.2.0.10-13.el7.ppc64le
alsa-lib-1.1.3-3.el7.ppc64le
gutenprint-5.2.9-18.el7.ppc64le
openslp-2.0.0-6.el7.ppc64le
ruby-irb-2.0.0.648-30.el7.noarch
libgcrypt-1.5.3-14.el7.ppc64le
python-blivet-0.61.15.65-1.el7.noarch
gzip-1.5-9.el7.ppc64le
xorg-x11-drv-void-1.4.1-2.el7.ppc64le
nss-pem-1.0.3-4.el7.ppc64le
rubygem-rdoc-4.0.0-30.el7.noarch
libcap-ng-0.7.5-4.el7.ppc64le
rpm-build-libs-4.11.3-25.el7.ppc64le
shared-mime-info-1.8-3.el7.ppc64le
xorg-x11-drv-v4l-0.2.0-47.el7.ppc64le
nss-tools-3.28.4-8.el7.ppc64le
libsemanage-2.5-8.el7.ppc64le
libxcb-1.12-1.el7.ppc64le
flatpak-0.8.7-1.el7.ppc64le
gstreamer1-1.10.4-2.el7.ppc64le
xorg-x11-drv-nouveau-1.0.13-3.el7.ppc64le
sgml-common-0.6.3-39.el7.noarch
util-linux-2.23.2-43.el7.ppc64le
libtdb-1.3.12-2.el7.ppc64le
rpm-devel-4.11.3-25.el7.ppc64le
gobject-introspection-1.50.0-1.el7.ppc64le
qdox-1.12.1-10.el7.noarch
libteam-1.25-5.el7.ppc64le
openssh-clients-7.4p1-11.el7.ppc64le
libattr-2.4.46-12.el7.ppc64le
python-meh-0.25.2-1.el7.noarch
avahi-glib-0.6.31-17.el7.ppc64le
rhino-1.7R5-1.el7.noarch
perl-Pod-Checker-1.60-2.el7.noarch
rarian-0.8.1-11.el7.ppc64le
gmp-6.0.0-15.el7.ppc64le
createrepo-0.9.9-28.el7.noarch
python-gobject-base-3.22.0-1.el7.ppc64le
telepathy-haze-0.8.0-1.el7.ppc64le
perl-Version-Requirements-0.101022-244.el7.noarch
tog-pegasus-2.14.1-5.el7.ppc64le
lua-5.1.4-15.el7.ppc64le
libburn-1.2.8-4.el7.ppc64le
openssl-1.0.2k-8.el7.ppc64le
dleyna-server-0.5.0-1.el7.ppc64le
perl-IO-HTML-1.00-2.el7.noarch
libsemanage-python-2.5-8.el7.ppc64le
libidn-1.28-4.el7.ppc64le
nss-devel-3.28.4-8.el7.ppc64le
net-snmp-libs-5.7.2-28.el7.ppc64le
paps-libs-0.6.8-28.el7.1.ppc64le
perl-DBIx-Simple-1.35-7.el7.noarch
lzo-minilzo-2.06-8.el7.ppc64le
libref_array-0.1.5-27.el7.ppc64le
libX11-1.6.5-1.el7.ppc64le
xdg-utils-1.1.0-0.17.20120809git.el7.noarch
harfbuzz-devel-1.3.2-1.el7.ppc64le
perl-CGI-3.63-4.el7.noarch
libini_config-1.3.0-27.el7.ppc64le
xmlrpc-c-1.32.5-1905.svn2451.el7.ppc64le
libXfixes-5.0.3-1.el7.ppc64le
glibmm24-2.50.0-1.el7.ppc64le
webkitgtk4-devel-2.14.7-2.el7.ppc64le
perl-Devel-Symdump-2.10-2.el7.noarch
libpipeline-1.2.3-3.el7.ppc64le
mpfr-3.1.1-4.el7.ppc64le
libXrandr-1.5.1-2.el7.ppc64le
cyrus-sasl-gssapi-2.1.26-21.el7.ppc64le
gtk2-devel-2.24.31-1.el7.ppc64le
perl-URI-1.60-9.el7.noarch
kpartx-0.4.9-111.el7.ppc64le
file-libs-5.11-33.el7.ppc64le
libXext-devel-1.3.3-3.el7.ppc64le
libSM-devel-1.2.2-2.el7.ppc64le
qt-devel-4.8.5-13.el7.ppc64le
perl-HTTP-Date-6.02-8.el7.noarch
dracut-033-502.el7.ppc64le
libtool-ltdl-2.4.2-22.el7_3.ppc64le
libcanberra-0.30-5.el7.ppc64le
python-enum34-1.0.4-1.el7.noarch
libxkbfile-devel-1.0.9-3.el7.ppc64le
perl-HTTP-Cookies-6.01-5.el7.noarch
polkit-0.112-12.el7_3.ppc64le
libtheora-1.1.1-8.el7.ppc64le
libXpm-3.5.12-1.el7.ppc64le
libevent-2.0.21-4.el7.ppc64le
ibus-gtk2-1.5.3-13.el7.ppc64le
kdelibs-common-4.14.8-6.el7_3.ppc64le
systemd-sysv-219-42.el7.ppc64le
diffutils-3.3-4.el7.ppc64le
libXv-1.0.11-1.el7.ppc64le
pam-1.1.8-18.el7.ppc64le
imsettings-gsettings-1.6.3-9.el7.ppc64le
perl-YAML-Tiny-1.51-6.el7.noarch
GConf2-3.2.6-8.el7.ppc64le
libtasn1-4.10-1.el7.ppc64le
libxkbfile-1.0.9-3.el7.ppc64le
gettext-libs-0.19.8.1-2.el7.ppc64le
kdelibs-ktexteditor-4.14.8-6.el7_3.ppc64le
perl-Env-1.04-2.el7.noarch
libpciaccess-0.13.4-3.el7_3.ppc64le
nss-softokn-3.28.3-6.el7.ppc64le
pango-1.40.4-1.el7.ppc64le
telepathy-logger-0.8.0-5.el7.ppc64le
nepomuk-core-4.10.5-5.el7.ppc64le
perl-Net-HTTP-6.06-2.el7.noarch
samba-common-4.6.2-8.el7.noarch
libsigc++20-2.10.0-1.el7.ppc64le
cogl-1.22.2-1.el7.ppc64le
pcre-devel-8.32-17.el7.ppc64le
kdenetwork-kopete-libs-4.10.5-8.el7_0.ppc64le
icoutils-0.31.3-1.el7_3.ppc64le
pyparted-3.9-13.el7.ppc64le
apr-util-1.5.2-6.el7.ppc64le
giflib-4.1.6-9.el7.ppc64le
expat-devel-2.1.0-10.el7_3.ppc64le
kdesdk-okteta-4.10.5-6.el7.ppc64le
papi-5.2.0-23.el7.ppc64le
abrt-python-2.1.11-48.el7.centos.ppc64le
lzo-2.06-8.el7.ppc64le
java-1.8.0-openjdk-1.8.0.131-11.b12.el7.ppc64le
libffi-devel-3.0.13-18.el7.ppc64le
kwin-libs-4.11.19-8.el7.ppc64le
xorg-x11-font-utils-7.5-20.el7.ppc64le
iscsi-initiator-utils-iscsiuio-6.2.0.874-4.el7.ppc64le
file-5.11-33.el7.ppc64le
libXft-devel-2.3.2-2.el7.ppc64le
libipa_hbac-1.15.2-50.el7.ppc64le
kwin-gles-libs-4.11.19-8.el7.ppc64le
libsamplerate-0.1.8-6.el7.ppc64le
cronie-1.4.11-17.el7.ppc64le
xml-common-0.6.3-39.el7.noarch
ghostscript-9.07-28.el7.ppc64le
libpinyin-data-0.9.93-4.el7.ppc64le
kde-runtime-libs-4.10.5-8.el7.ppc64le
ipset-6.29-1.el7.ppc64le
plymouth-0.8.9-0.28.20140113.el7.centos.ppc64le
taglib-1.8-7.20130218git.el7.ppc64le
at-spi2-core-2.22.0-1.el7.ppc64le
xfsprogs-4.5.0-12.el7.ppc64le
kdepim-runtime-4.10.5-3.el7.ppc64le
libusbmuxd-1.0.10-5.el7.ppc64le
libstoragemgmt-python-1.4.0-3.el7.noarch
libseccomp-2.3.1-3.el7.ppc64le
gstreamer1-plugins-good-1.10.4-2.el7.ppc64le
pyusb-1.0.0-0.11.b1.el7.noarch
nepomuk-core-devel-4.10.5-5.el7.ppc64le
libofa-0.9.3-24.el7.ppc64le
device-mapper-event-1.02.140-8.el7.ppc64le
librtas-2.0.1-1.el7.ppc64le
libXcomposite-devel-0.4.4-4.1.el7.ppc64le
audit-libs-python-2.7.6-3.el7.ppc64le
okular-libs-4.10.5-4.el7.ppc64le
gdisk-0.8.6-5.el7.ppc64le
libibumad-13-7.el7.ppc64le
libsndfile-1.0.25-10.el7.ppc64le
libXxf86misc-1.0.3-7.1.el7.ppc64le
pyparsing-1.5.6-9.el7.noarch
kdesdk-kmtrace-libs-4.10.5-6.el7.ppc64le
attr-2.4.46-12.el7.ppc64le
rpcbind-0.2.0-42.el7.ppc64le
slang-2.2.4-11.el7.ppc64le
gtk2-2.24.31-1.el7.ppc64le
libssh2-1.4.3-10.el7_2.1.ppc64le
kdesdk-kompare-4.10.5-6.el7.ppc64le
openssl-devel-1.0.2k-8.el7.ppc64le
bluez-5.44-2.el7.ppc64le
boost-thread-1.53.0-27.el7.ppc64le
clutter-gtk-1.8.2-1.el7.ppc64le
soundtouch-1.4.0-9.el7.ppc64le
ibus-table-1.5.0-5.el7.noarch
setools-libs-3.3.8-1.1.el7.ppc64le
ppp-2.4.5-33.el7.ppc64le
libvpd-2.2.5-1.el7.ppc64le
clutter-gst3-3.0.22-1.el7.ppc64le
boost-test-1.53.0-27.el7.ppc64le
libgphoto2-2.5.2-5.el7.ppc64le
libcurl-7.29.0-42.el7.ppc64le
libmtp-1.1.6-5.el7.ppc64le
unzip-6.0-16.el7.ppc64le
vte291-0.46.2-1.el7.ppc64le
boost-random-1.53.0-27.el7.ppc64le
hplip-libs-3.15.9-3.el7.ppc64le
openldap-2.4.44-5.el7.ppc64le
rsync-3.0.9-18.el7.ppc64le
psmisc-22.20-15.el7.ppc64le
compat-cheese314-3.14.2-1.el7.ppc64le
dosfstools-3.0.20-9.el7.ppc64le
sane-backends-drivers-cameras-1.0.24-9.el7.ppc64le
kde-filesystem-4-47.el7.ppc64le
cryptsetup-1.7.4-3.el7.ppc64le
boost-program-options-1.53.0-27.el7.ppc64le
libgnomekbd-3.22.0.1-1.el7.ppc64le
libsrtp-1.4.4-10.20101004cvs.el7.ppc64le
speech-dispatcher-python-0.7.1-15.el7.ppc64le
raptor2-2.0.9-3.el7.ppc64le
grub2-tools-2.02-0.64.el7.centos.ppc64le
libiodbc-3.52.7-7.el7.ppc64le
gtk-vnc2-0.7.0-2.el7.ppc64le
libdv-1.0.0-17.el7.ppc64le
libXxf86dga-1.1.4-2.1.el7.ppc64le
python-deltarpm-3.6-3.el7.ppc64le
ibacm-13-7.el7.ppc64le
opus-1.0.2-6.el7.ppc64le
system-config-printer-libs-1.4.1-19.el7.noarch
libthai-0.1.14-9.el7.ppc64le
tracker-1.10.5-4.el7.ppc64le
shared-desktop-ontologies-devel-0.11.0-2.el7.noarch
qt-4.8.5-13.el7.ppc64le
pcre2-10.23-2.el7.ppc64le
gtkspell3-3.0.3-4.el7.ppc64le
libevdev-1.5.6-1.el7.ppc64le
totem-3.22.1-1.el7.ppc64le
virtuoso-opensource-6.1.6-6.el7.ppc64le
strigi-libs-0.7.7-12.20120626.el7.ppc64le
boost-wave-1.53.0-27.el7.ppc64le
libXmu-devel-1.1.2-2.el7.ppc64le
iproute-3.10.0-87.el7.ppc64le
firewalld-0.4.4.4-6.el7.noarch
color-filesystem-1-13.el7.noarch
automoc-1.0-0.20.rc3.el7.ppc64le
perl-Pod-Perldoc-3.20-4.el7.noarch
poppler-utils-0.26.5-16.el7.ppc64le
boost-1.53.0-27.el7.ppc64le
pcp-libs-3.11.8-7.el7.ppc64le
pykickstart-1.99.66.12-1.el7.noarch
openldap-devel-2.4.44-5.el7.ppc64le
perl-Encode-2.51-7.el7.ppc64le
python-gobject-3.22.0-1.el7.ppc64le
krb5-workstation-1.15.1-8.el7.ppc64le
libwacom-0.24-1.el7.ppc64le
isomd5sum-1.0.10-5.el7.ppc64le
abrt-addon-vmcore-2.1.11-48.el7.centos.ppc64le
perl-constant-1.27-2.el7.noarch
compat-libcogl12-1.14.0-3.el7.ppc64le
python-libipa_hbac-1.15.2-50.el7.ppc64le
gdm-3.22.3-11.el7.ppc64le
gstreamer1-devel-1.10.4-2.el7.ppc64le
abrt-retrace-client-2.1.11-48.el7.centos.ppc64le
perl-Exporter-5.68-3.el7.noarch
libXpm-devel-3.5.12-1.el7.ppc64le
python2-pyasn1-modules-0.1.9-7.el7.noarch
gnome-shell-extension-alternate-tab-3.22.2-10.el7.noarch
ttmkfdir-3.0.9-42.el7.ppc64le
samba-libs-4.6.2-8.el7.ppc64le
perl-File-Temp-0.23.01-3.el7.noarch
brltty-4.5-15.el7.ppc64le
sos-3.4-6.el7.centos.noarch
gnome-shell-extension-window-list-3.22.2-10.el7.noarch
clucene-core-2.3.3.4-11.el7.ppc64le
osinfo-db-20170423-2.el7.noarch
perl-macros-5.16.3-292.el7.ppc64le
python-brlapi-0.6.0-15.el7.ppc64le
libselinux-devel-2.5-11.el7.ppc64le
quota-nls-4.01-14.el7.noarch
elfutils-libs-0.168-8.el7.ppc64le
oddjob-mkhomedir-0.31.5-4.el7.ppc64le
perl-5.16.3-292.el7.ppc64le
opal-3.10.10-4.el7.ppc64le
gstreamer-tools-0.10.36-7.el7.ppc64le
libvirt-daemon-driver-storage-scsi-3.2.0-14.el7.ppc64le
satyr-0.13-14.el7.ppc64le
polkit-docs-0.112-12.el7_3.noarch
perl-Compress-Raw-Zlib-2.061-4.el7.ppc64le
compat-libcogl-pango12-1.14.0-3.el7.ppc64le
alsa-lib-devel-1.1.3-3.el7.ppc64le
libvirt-daemon-driver-storage-mpath-3.2.0-14.el7.ppc64le
NetworkManager-libnm-1.8.0-9.el7.ppc64le
tcsh-6.18.01-15.el7.ppc64le
perl-XML-Dumper-0.81-17.el7.noarch
libpfm-devel-4.7.0-4.el7.ppc64le
unixODBC-devel-2.3.1-11.el7.ppc64le
rcs-5.9.0-5.el7.ppc64le
ltrace-0.7.91-14.el7.ppc64le
ed-1.9-4.el7.ppc64le
wqy-zenhei-fonts-0.9.46-11.el7.noarch
lohit-bengali-fonts-2.5.3-4.el7.noarch
paratype-pt-sans-fonts-20101909-3.el7.noarch
paktype-naskh-basic-fonts-4.1-3.el7.noarch
lklug-fonts-0.6-10.20090803cvs.el7.noarch
lohit-kannada-fonts-2.5.3-3.el7.noarch
cjkuni-uming-fonts-0.2.20080216.1-53.el7.noarch
vlgothic-fonts-20130607-2.el7.noarch
lohit-telugu-fonts-2.5.3-3.el7.noarch
gnu-free-serif-fonts-20120503-8.el7.noarch
jomolhari-fonts-0.003-17.el7.noarch
scl-utils-20130529-17.el7_1.ppc64le
diffstat-1.57-4.el7.ppc64le
xorg-x11-drivers-7.7-6.el7.ppc64le
setserial-2.17-33.el7.ppc64le
vinagre-3.22.0-8.el7.ppc64le
man-pages-overrides-7.4.3-1.el7.ppc64le
gedit-3.22.0-3.el7.ppc64le
iwl5150-firmware-8.24.2.2-56.el7.noarch
gnome-contacts-3.22.1-1.el7.ppc64le
words-3.0-22.el7.noarch
setroubleshoot-3.2.28-3.el7.ppc64le
iwl7265-firmware-22.0.7.0-56.el7.noarch
gnome-system-monitor-3.22.2-2.el7.ppc64le
man-pages-3.53-5.el7.noarch
librsvg2-devel-2.40.16-1.el7.ppc64le
gpg-pubkey-f4a80eb5-53a7ff4b
system-config-printer-udev-1.4.1-19.el7.ppc64le
gnome-calculator-3.22.3-1.el7.ppc64le
libgcc-4.8.5-16.el7_4.1.ppc64le
gvfs-afp-1.30.4-3.el7.ppc64le
cpp-4.8.5-16.el7_4.1.ppc64le
latencytop-0.5-13.el7.ppc64le
gcc-c++-4.8.5-16.el7_4.1.ppc64le
gtk3-immodule-xim-3.22.10-4.el7.ppc64le
mousetweaks-3.12.0-1.el7.ppc64le
qt3-MySQL-3.3.8b-51.el7.ppc64le
xvattr-1.3-27.el7.ppc64le
yum-langpacks-0.4.2-7.el7.noarch
rpm-build-4.11.3-25.el7.ppc64le
virt-install-1.4.1-7.el7.noarch
samba-client-4.6.2-8.el7.ppc64le
qt-odbc-4.8.5-13.el7.ppc64le
NetworkManager-tui-1.8.0-9.el7.ppc64le
avahi-0.6.31-17.el7.ppc64le
httpd-manual-2.4.6-67.el7.centos.noarch
PackageKit-gstreamer-plugin-1.1.5-1.el7.centos.ppc64le
tuned-2.8.0-5.el7.noarch
qemu-guest-agent-2.8.0-2.el7.ppc64le
smartmontools-6.2-8.el7.ppc64le
openssh-server-7.4p1-11.el7.ppc64le
dracut-config-rescue-033-502.el7.ppc64le
openlmi-providers-devel-0.5.0-4.el7.ppc64le
oprofile-0.9.9-22.el7.ppc64le
perl-homedir-1.008010-4.el7.noarch
libgudev1-devel-219-42.el7.ppc64le
sudo-1.8.19p2-10.el7.ppc64le
libacl-devel-2.2.51-12.el7.ppc64le
perl-XML-Twig-3.44-2.el7.noarch
crash-trace-command-2.0-12.el7.ppc64le
crash-gcore-command-1.3.1-0.el7.ppc64le
libgnome-keyring-devel-3.12.0-1.el7.ppc64le
binutils-devel-2.25.1-31.base.el7.ppc64le
libcap-ng-devel-0.7.5-4.el7.ppc64le
bash-completion-2.1-6.el7.noarch
dstat-0.7.2-12.el7.noarch
wget-1.14-15.el7.ppc64le
gpg-pubkey-352c64e5-52ae6884
certmonger-0.78.4-3.el7.ppc64le
libatomic-static-4.8.5-16.el7.ppc64le
libicu-devel-50.1.2-15.el7.ppc64le
caribou-0.4.21-1.el7.ppc64le
grub2-common-2.02-0.64.el7.centos.noarch
plymouth-graphics-libs-0.8.9-0.28.20140113.el7.centos.ppc64le
kernel-3.10.0-693.el7.ppc64le
perl-Perl-OSType-1.003-3.el7.noarch
libvirt-daemon-3.2.0-14.el7.ppc64le
ledmon-0.80-2.el7.ppc64le
gupnp-av-0.12.10-1.el7.ppc64le
cups-1.6.3-29.el7.ppc64le
mozilla-filesystem-1.9-11.el7.ppc64le
libqmi-utils-1.16.0-1.el7.ppc64le
anaconda-core-21.48.22.121-1.el7.centos.ppc64le
perl-JSON-PP-2.27202-2.el7.noarch
libvirt-client-3.2.0-14.el7.ppc64le
numactl-devel-2.0.9-6.el7_2.ppc64le
cups-client-1.6.3-29.el7.ppc64le
mutter-3.22.3-11.el7.ppc64le
ipa-common-4.5.0-20.el7.centos.noarch
glibc-devel-2.17-196.el7.ppc64le
firefox-52.2.0-2.el7.centos.ppc64le
perl-Params-Check-0.38-2.el7.noarch
virt-manager-common-1.4.1-7.el7.noarch
indent-2.2.11-13.el7.ppc64le
python-linux-procfs-0.4.9-3.el7.noarch
gnome-session-3.22.3-4.el7.ppc64le
adwaita-cursor-theme-3.22.0-1.el7.noarch
perl-Archive-Extract-0.68-3.el7.noarch
gnome-initial-setup-3.22.1-4.el7.ppc64le
perl-IO-Compress-2.061-2.el7.noarch
geoclue2-2.4.5-1.el7.ppc64le
khmeros-base-fonts-5.0-17.el7.noarch
python-tempita-0.5.1-6.el7.noarch
gnome-online-accounts-3.22.5-1.el7.ppc64le
nhn-nanum-fonts-common-3.020-9.el7.noarch
gobject-introspection-devel-1.50.0-1.el7.ppc64le
rhythmbox-3.4.1-1.el7.ppc64le
libavc1394-0.5.3-14.el7.ppc64le
telepathy-gabble-0.18.1-4.el7.ppc64le
stix-fonts-1.1.0-5.el7.noarch
python-javapackages-3.4.1-11.el7.noarch
gnome-packagekit-installer-3.22.1-2.el7.ppc64le
mesa-filesystem-17.0.1-6.20170307.el7.ppc64le
konkretcmpi-python-0.9.1-5.el7.ppc64le
libsane-hpaio-3.15.9-3.el7.ppc64le
copy-jdk-configs-2.2-3.el7.noarch
usb_modeswitch-2.4.0-5.el7.ppc64le
nhn-nanum-gothic-fonts-3.020-9.el7.noarch
pytz-2016.10-2.el7.noarch
librsvg2-tools-2.40.16-1.el7.ppc64le
bash-4.2.46-28.el7.ppc64le
libreport-plugin-bugzilla-2.1.11-38.el7.centos.ppc64le
kde-workspace-devel-4.11.19-8.el7.ppc64le
libdb-devel-5.3.21-20.el7.ppc64le
fxload-2002_04_11-16.el7.ppc64le
google-crosextra-caladea-fonts-1.002-0.4.20130214.el7.noarch
python-pycparser-2.14-1.el7.noarch
libtimezonemap-0.4.4-1.el7.ppc64le
libcom_err-1.42.9-10.el7.ppc64le
frei0r-plugins-1.3-13.el7.ppc64le
ibus-m17n-1.3.4-13.el7.ppc64le
libcdio-paranoia-10.2+0.90-11.el7.ppc64le
netcf-libs-0.2.8-4.el7.ppc64le
lohit-punjabi-fonts-2.5.3-2.el7.noarch
cmpi-bindings-pywbem-0.9.5-6.el7.ppc64le
at-spi2-core-devel-2.22.0-1.el7.ppc64le
xz-libs-5.2.2-1.el7.ppc64le
libasyncns-0.8-7.el7.ppc64le
libcanberra-devel-0.30-5.el7.ppc64le
coreutils-8.22-18.el7.ppc64le
sssd-ad-1.15.2-50.el7.ppc64le
doxygen-1.8.5-3.el7.ppc64le
httpd-tools-2.4.6-67.el7.centos.ppc64le
libspectre-0.2.8-1.el7.ppc64le
cyrus-sasl-lib-2.1.26-21.el7.ppc64le
rubygem-bigdecimal-1.2.0-30.el7.ppc64le
icedtea-web-1.6.2-4.el7.ppc64le
libarchive-3.1.2-10.el7_2.ppc64le
python-pyblock-0.53-6.el7.ppc64le
byacc-1.9.20130304-3.el7.ppc64le
wodim-1.1.11-23.el7.ppc64le
xorg-x11-drv-qxl-0.1.5-3.el7.ppc64le
elfutils-libelf-0.168-8.el7.ppc64le
rubygem-thor-0.19.1-1.el7.noarch
file-roller-nautilus-3.22.3-1.el7.ppc64le
pkgconfig-0.27.1-4.el7.ppc64le
setroubleshoot-server-3.2.28-3.el7.ppc64le
iwl2030-firmware-18.168.6.1-56.el7.noarch
mailx-12.5-16.el7.ppc64le
xorg-x11-drv-fbdev-0.4.3-25.el7.ppc64le
libtevent-0.9.31-1.el7.ppc64le
policycoreutils-2.5-17.1.el7.ppc64le
java-1.7.0-openjdk-devel-1.7.0.141-2.6.10.5.el7.ppc64le
gsettings-desktop-schemas-3.22.0-1.el7.ppc64le
yum-3.4.3-154.el7.centos.noarch
iwl6000g2a-firmware-17.168.5.3-56.el7.noarch
perl-B-Lint-1.17-3.el7.noarch
gstreamer-plugins-bad-free-0.10.23-23.el7.ppc64le
libvorbis-1.3.3-8.el7.ppc64le
rarian-compat-0.8.1-11.el7.ppc64le
abrt-desktop-2.1.11-48.el7.centos.ppc64le
desktop-file-utils-0.23-1.el7.ppc64le
libiptcdata-1.0.4-11.el7.ppc64le
gpg-pubkey-f533f4fa-56585169
perl-DB_File-1.830-6.el7.ppc64le
compat-poppler022-qt-0.22.5-4.el7.ppc64le
libldb-1.1.29-1.el7.ppc64le
http-parser-2.7.1-1.el7.ppc64le
NetworkManager-libreswan-gnome-1.2.4-2.el7.ppc64le
centos-logos-70.0.6-3.el7.centos.noarch
libX11-common-1.6.5-1.el7.noarch
libstdc++-4.8.5-16.el7_4.1.ppc64le
perl-FCGI-0.74-8.el7.ppc64le
pango-devel-1.40.4-1.el7.ppc64le
libbasicobjects-0.1.1-27.el7.ppc64le
gtk2-immodule-xim-2.24.31-1.el7.ppc64le
libgnome-keyring-3.12.0-1.el7.ppc64le
libXrender-0.9.10-1.el7.ppc64le
libitm-devel-4.8.5-16.el7_4.1.ppc64le
perl-Business-ISBN-2.06-2.el7.noarch
freeglut-2.8.1-3.el7.ppc64le
device-mapper-1.02.140-8.el7.ppc64le
xdg-desktop-portal-gtk-0.5-1.el7.ppc64le
libudisks2-2.1.2-6.el7.ppc64le
pulseaudio-libs-10.0-3.el7.ppc64le
perl-HTTP-Daemon-6.01-5.el7.noarch
xorg-x11-xauth-1.0.9-1.el7.ppc64le
nettle-2.7.1-8.el7.ppc64le
polkit-pkla-compat-0.1-4.el7.ppc64le
startup-notification-devel-0.12-8.el7.ppc64le
genisoimage-1.1.11-23.el7.ppc64le
dbus-x11-1.6.12-17.el7.ppc64le
perl-Text-Soundex-3.04-4.el7.ppc64le
xdg-user-dirs-0.15-4.el7.ppc64le
jansson-2.10-1.el7.ppc64le
NetworkManager-glib-1.8.0-9.el7.ppc64le
rpm-sign-4.11.3-25.el7.ppc64le
gettext-0.19.8.1-2.el7.ppc64le
cairo-1.14.8-2.el7.ppc64le
perl-IO-Socket-SSL-1.94-6.el7.noarch
kdepimlibs-kxmlrpcclient-4.10.5-4.el7.ppc64le
libplist-1.12-3.el7.ppc64le
libwbclient-4.6.2-8.el7.ppc64le
cgdcbxd-1.0.2-7.el7.ppc64le
glib2-devel-2.50.3-3.el7.ppc64le
gdk-pixbuf2-devel-2.36.5-1.el7.ppc64le
theora-tools-1.1.1-8.el7.ppc64le
libkipi-4.10.5-3.el7.ppc64le
libmng-1.0.10-14.el7.ppc64le
abrt-addon-kerneloops-2.1.11-48.el7.centos.ppc64le
grub2-2.02-0.64.el7.centos.ppc64le
xz-devel-5.2.2-1.el7.ppc64le
xorg-x11-xkb-utils-7.7-12.el7.ppc64le
libverto-tevent-0.2.5-4.el7.ppc64le
libkdcraw-devel-4.10.5-4.el7.ppc64le
bzip2-1.0.6-13.el7.ppc64le
iputils-20160308-10.el7.ppc64le
cifs-utils-6.2-10.el7.ppc64le
libpinyin-0.9.93-4.el7.ppc64le
libao-1.1.0-8.el7.ppc64le
gdbm-devel-1.10-8.el7.ppc64le
kdepim-libs-4.10.5-6.el7.ppc64le
libxshmfence-1.2-1.el7.ppc64le
libstoragemgmt-1.4.0-3.el7.ppc64le
psacct-6.6.1-13.el7.ppc64le
pyliblzma-0.5.3-11.el7.ppc64le
libXcursor-devel-1.1.14-8.el7.ppc64le
hesiod-3.2.1-3.el7.ppc64le
okular-devel-4.10.5-4.el7.ppc64le
gsm-1.0.13-11.el7.ppc64le
telepathy-mission-control-5.16.3-3.el7.ppc64le
rng-tools-5-11.el7.ppc64le
python-chardet-2.2.1-1.el7_1.noarch
libcanberra-gtk3-0.30-5.el7.ppc64le
krb5-devel-1.15.1-8.el7.ppc64le
kdesdk-kompare-devel-4.10.5-6.el7.ppc64le
unixODBC-2.3.1-11.el7.ppc64le
dbus-devel-1.6.12-17.el7.ppc64le
kpatch-0.4.0-1.el7.noarch
graphite2-1.3.6-1.el7_2.ppc64le
nautilus-extensions-3.22.3-3.el7.ppc64le
libdb-utils-5.3.21-20.el7.ppc64le
sane-backends-libs-1.0.24-9.el7.ppc64le
zip-3.0-11.el7.ppc64le
mdadm-4.0-5.el7.ppc64le
memstomp-0.1.4-11.el7.ppc64le
libconfig-1.4.9-5.el7.ppc64le
clutter-gst2-2.0.18-1.el7.ppc64le
postgresql-libs-9.2.21-1.el7.ppc64le
gsound-1.0.2-2.el7.ppc64le
ilmbase-1.0.3-7.el7.ppc64le
udisks2-2.1.2-6.el7.ppc64le
perl-core-5.16.3-292.el7.ppc64le
pcsc-lite-libs-1.8.8-6.el7.ppc64le
gvnc-0.7.0-2.el7.ppc64le
qemu-img-1.5.3-141.el7.ppc64le
libappstream-glib-0.6.10-1.el7.ppc64le
sg3_utils-libs-1.37-12.el7.ppc64le
librdmacm-13-7.el7.ppc64le
adcli-0.8.1-3.el7.ppc64le
libnfnetlink-1.0.1-4.el7.ppc64le
colord-gtk-0.1.25-4.el7.ppc64le
libuser-python-0.60-7.el7_1.ppc64le
libfprint-0.5.0-4.el7.ppc64le
OpenEXR-libs-1.7.1-7.el7.ppc64le
attica-devel-0.4.2-1.el7.ppc64le
papi-devel-5.2.0-23.el7.ppc64le
m17n-lib-1.6.4-14.el7.ppc64le
qimageblitz-0.0.6-7.el7.ppc64le
python-urlgrabber-3.10-8.el7.noarch
pcp-selinux-3.11.8-7.el7.ppc64le
perl-Text-ParseWords-3.29-4.el7.noarch
apr-util-devel-1.5.2-6.el7.ppc64le
readline-devel-6.2-10.el7.ppc64le
python-kitchen-1.1.1-5.el7.noarch
gnome-abrt-0.3.4-8.el7.ppc64le
check-devel-0.9.9-5.el7.ppc64le
pulseaudio-gdm-hooks-10.0-3.el7.ppc64le
perl-Scalar-List-Utils-1.27-248.el7.ppc64le
abrt-addon-ccpp-2.1.11-48.el7.centos.ppc64le
gnome-icon-theme-extras-3.12.0-1.el7.noarch
python-slip-0.4.0-2.el7.noarch
brlapi-0.6.0-15.el7.ppc64le
qpdf-libs-5.0.1-3.el7.ppc64le
yelp-xsl-3.20.1-1.el7.noarch
perl-Storable-2.45-3.el7.ppc64le
libosinfo-1.0.0-1.el7.ppc64le
libcap-devel-2.22-9.el7.ppc64le
libepoxy-devel-1.3.1-1.el7.ppc64le
festival-1.96-28.el7.ppc64le
libusbx-1.0.20-1.el7.ppc64le
libvirt-daemon-driver-storage-disk-3.2.0-14.el7.ppc64le
perl-Test-Harness-3.28-3.el7.noarch
polkit-devel-0.112-12.el7_3.ppc64le
perl-Crypt-SSLeay-0.64-5.el7.ppc64le
libverto-devel-0.2.5-4.el7.ppc64le
caribou-gtk2-module-0.4.21-1.el7.ppc64le
vim-filesystem-7.4.160-2.el7.ppc64le
procps-ng-3.3.10-16.el7.ppc64le
NetworkManager-libreswan-1.2.4-2.el7.ppc64le
perl-Module-Metadata-1.000018-2.el7.noarch
pixman-devel-0.34.0-1.el7.ppc64le
patchutils-0.3.3-4.el7.ppc64le
filesystem-3.2-21.el7.ppc64le
cups-filesystem-1.6.3-29.el7.noarch
gettext-devel-0.19.8.1-2.el7.ppc64le
usbredir-0.7.1-2.el7.ppc64le
neon-0.30.0-3.el7.ppc64le
perl-LWP-MediaTypes-6.02-2.el7.noarch
python-qrcode-core-5.0.1-1.el7.noarch
hyphen-en-2.8.6-5.el7.noarch
gnu-free-fonts-common-20120503-8.el7.noarch
gtkmm30-3.22.0-1.el7.ppc64le
initial-setup-gui-0.3.9.40-1.el7.centos.ppc64le
libhugetlbfs-2.16-12.el7.ppc64le
subversion-libs-1.7.14-10.el7.ppc64le
perl-Encode-Locale-1.03-5.el7.noarch
python-inotify-0.9.4-4.el7.noarch
nano-2.3.1-10.el7.ppc64le
mobile-broadband-provider-info-1.20170310-1.el7.noarch
adwaita-gtk2-theme-3.22.2-1.el7.ppc64le
ipa-client-4.5.0-20.el7.centos.ppc64le
perl-IPC-Cmd-0.80-4.el7.noarch
libsoup-2.56.0-3.el7.ppc64le
perl-Term-UI-0.36-2.el7.noarch
python-setuptools-0.9.8-7.el7.noarch
dejavu-sans-mono-fonts-2.33-6.el7.noarch
bind-license-9.9.4-50.el7.noarch
webkitgtk4-jsc-2.14.7-2.el7.ppc64le
firewall-config-0.4.4.4-6.el7.noarch
perl-CPAN-1.9800-292.el7.noarch
gupnp-1.0.1-1.el7.ppc64le
boost-graph-1.53.0-27.el7.ppc64le
python-perf-3.10.0-693.el7.ppc64le
overpass-fonts-2.1-1.el7.noarch
thai-scalable-fonts-common-0.5.0-7.el7.noarch
webkitgtk4-jsc-devel-2.14.7-2.el7.ppc64le
pulseaudio-module-x11-10.0-3.el7.ppc64le
marisa-0.2.4-4.el7.ppc64le
gnutls-c++-3.3.26-9.el7.ppc64le
ca-certificates-2017.2.14-71.el7.noarch
python-idna-2.4-1.el7.noarch
strace-4.12-4.el7.ppc64le
nss-softokn-freebl-3.28.3-6.el7.ppc64le
vino-3.22.0-3.el7.ppc64le
libXaw-devel-1.0.13-4.el7.ppc64le
libreport-centos-2.1.11-38.el7.centos.ppc64le
alsa-utils-1.1.3-2.el7.ppc64le
libnl3-cli-3.2.28-4.el7.ppc64le
python-iniparse-0.4-9.el7.noarch
traceroute-2.0.22-2.el7.ppc64le
libselinux-2.5-11.el7.ppc64le
keybinder3-0.3.0-1.el7.ppc64le
kdepim-devel-4.10.5-6.el7.ppc64le
pakchois-0.4-10.el7.ppc64le
cryptsetup-python-1.7.4-3.el7.ppc64le
libjpeg-turbo-devel-1.2.90-5.el7.ppc64le
python-jwcrypto-0.2.1-1.el7.noarch
lohit-malayalam-fonts-2.5.3-2.el7.noarch
libpng-1.5.13-7.el7_2.ppc64le
freerdp-plugins-1.0.2-10.el7.ppc64le
ibus-chewing-1.4.4-14.el7.ppc64le
libfastjson-0.99.4-2.el7.ppc64le
libsss_sudo-1.15.2-50.el7.ppc64le
redhat-menus-12.0.2-8.el7.noarch
bind-libs-9.9.4-50.el7.ppc64le
gnu-free-sans-fonts-20120503-8.el7.noarch
libuuid-2.23.2-43.el7.ppc64le
festival-freebsoft-utils-0.10-7.el7.noarch
unique3-devel-3.0.2-8.el7.ppc64le
compat-poppler022-0.22.5-4.el7.ppc64le
sssd-proxy-1.15.2-50.el7.ppc64le
python-2.7.5-58.el7.ppc64le
libwvstreams-4.6.1-11.el7.ppc64le
lrzsz-0.12.20-36.el7.ppc64le
sqlite-3.7.17-8.el7.ppc64le
xorg-x11-server-common-1.19.3-11.el7.ppc64le
sushi-3.21.91-1.el7.ppc64le
rubygem-psych-2.0.0-30.el7.ppc64le
gnupg2-2.0.22-4.el7.ppc64le
libmount-2.23.2-43.el7.ppc64le
nss-3.28.4-8.el7.ppc64le
iwl3160-firmware-22.0.7.0-56.el7.noarch
libnl3-3.2.28-4.el7.ppc64le
xorg-x11-drv-ati-7.7.1-3.20160928git3fc839ff.el7.ppc64le
evolution-mapi-3.22.6-1.el7.ppc64le
libservicelog-1.1.17-2.el7.ppc64le
perl-PAR-Dist-0.49-2.el7.noarch
dbus-glib-0.100-7.el7.ppc64le
docbook-style-xsl-1.78.1-3.el7.noarch
iwl100-firmware-39.31.5.1-56.el7.noarch
libxslt-1.1.28-5.el7.ppc64le
junit-4.11-8.el7.noarch
gnome-session-xsession-3.22.3-4.el7.ppc64le
selinux-policy-3.13.1-166.el7.noarch
PackageKit-1.1.5-1.el7.centos.ppc64le
zlib-devel-1.2.7-17.el7.ppc64le
perl-libxml-perl-0.08-19.el7.noarch
iwl4965-firmware-228.61.2.24-56.el7.noarch
p11-kit-0.23.5-3.el7.ppc64le
spice-gtk3-0.33-6.el7.ppc64le
pygobject3-devel-3.22.0-1.el7.ppc64le
systemtap-runtime-3.1-3.el7.ppc64le
nss-softokn-freebl-devel-3.28.3-6.el7.ppc64le
libgee-0.18.1-1.el7.ppc64le
perl-PlRPC-0.2020-14.el7.noarch
python34-libs-3.4.5-4.el7.ppc64le
json-c-0.11-4.el7_0.ppc64le
plymouth-plugin-two-step-0.8.9-0.28.20140113.el7.centos.ppc64le
gnome-font-viewer-3.22.0-1.el7.ppc64le
sssd-client-1.15.2-50.el7.ppc64le
libXext-1.3.3-3.el7.ppc64le
nspr-devel-4.13.1-1.0.el7_3.ppc64le
perl-Algorithm-Diff-1.1902-17.el7.noarch
libgomp-4.8.5-16.el7_4.1.ppc64le
tcp_wrappers-libs-7.6-77.el7.ppc64le
libgdata-devel-0.17.8-1.el7.ppc64le
gnome-screenshot-3.22.0-1.el7.ppc64le
mtdev-1.1.5-5.el7.ppc64le
mesa-libEGL-17.0.1-6.20170307.el7.ppc64le
libpng-devel-1.5.13-7.el7_2.ppc64le
perl-Digest-SHA1-2.13-9.el7.ppc64le
libdhash-0.4.3-27.el7.ppc64le
phonon-devel-4.6.0-10.el7.ppc64le
qt3-ODBC-3.3.8b-51.el7.ppc64le
systemd-219-42.el7.ppc64le
libXinerama-1.1.3-2.1.el7.ppc64le
gdb-7.6.1-100.el7.ppc64le
perl-File-Listing-6.04-7.el7.noarch
jasper-libs-1.900.1-31.el7.ppc64le
ibus-setup-1.5.3-13.el7.noarch
spice-vdagent-0.14.0-14.el7.ppc64le
PackageKit-glib-1.1.5-1.el7.centos.ppc64le
libXmu-1.1.2-2.el7.ppc64le
atkmm-2.24.2-1.el7.ppc64le
perl-Sys-Syslog-0.33-3.el7.ppc64le
libXdmcp-1.1.2-6.el7.ppc64le
kdelibs-devel-4.14.8-6.el7_3.ppc64le
targetcli-2.1.fb46-1.el7.noarch
libcgroup-0.41-13.el7.ppc64le
qt-x11-4.8.5-13.el7.ppc64le
libxcb-devel-1.12-1.el7.ppc64le
perl-HTML-Format-2.10-7.el7.noarch
libsss_idmap-1.15.2-50.el7.ppc64le
kactivities-4.10.5-3.el7.ppc64le
httpd-devel-2.4.6-67.el7.centos.ppc64le
abrt-2.1.11-48.el7.centos.ppc64le
java-1.7.0-openjdk-headless-1.7.0.141-2.6.10.5.el7.ppc64le
apr-devel-1.4.8-3.el7.ppc64le
cdparanoia-10.2-17.el7.ppc64le
libpcap-1.5.3-9.el7.ppc64le
libkworkspace-4.11.19-8.el7.ppc64le
dbus-glib-devel-0.100-7.el7.ppc64le
crontabs-1.11-6.20121102git.el7.noarch
libXi-devel-1.7.9-1.el7.ppc64le
gnome-menus-3.13.3-3.el7.ppc64le
libieee1284-devel-0.2.11-15.el7.ppc64le
kmod-libs-20-15.el7.ppc64le
kde-runtime-4.10.5-8.el7.ppc64le
mod_ssl-2.4.6-67.el7.centos.ppc64le
cyrus-sasl-2.1.26-21.el7.ppc64le
libXScrnSaver-1.2.2-6.1.el7.ppc64le
python-augeas-0.5.0-2.el7.noarch
LibRaw-0.14.8-5.el7.20120830git98d925.ppc64le
hyphen-2.8.6-5.el7.ppc64le
kdenetwork-krdc-libs-4.10.5-8.el7_0.ppc64le
opal-prd-5.5.0-1.el7.ppc64le
rdma-core-13-7.el7.ppc64le
pulseaudio-10.0-3.el7.ppc64le
python-sssdconfig-1.15.2-50.el7.noarch
libisofs-1.2.8-4.el7.ppc64le
libverto-0.2.5-4.el7.ppc64le
kdesdk-kmtrace-devel-4.10.5-6.el7.ppc64le
systemd-devel-219-42.el7.ppc64le
mesa-dri-drivers-17.0.1-6.20170307.el7.ppc64le
clutter-1.26.0-1.el7.ppc64le
fipscheck-1.4.1-6.el7.ppc64le
dwz-0.11-3.el7.ppc64le
boost-regex-1.53.0-27.el7.ppc64le
libXaw-1.0.13-4.el7.ppc64le
systemd-python-219-42.el7.ppc64le
zenity-3.22.0-1.el7.ppc64le
boost-atomic-1.53.0-27.el7.ppc64le
rpm-libs-4.11.3-25.el7.ppc64le
GeoIP-1.5.0-11.el7.ppc64le
libksane-devel-4.10.5-4.el7.ppc64le
rubygem-bundler-1.7.8-3.el7.noarch
git-1.8.3.1-11.el7.ppc64le
brasero-libs-3.12.1-2.el7.ppc64le
c-ares-1.10.0-3.el7.ppc64le
libnfsidmap-0.25-17.el7.ppc64le
cdparanoia-libs-10.2-17.el7.ppc64le
tk-8.5.13-6.el7.ppc64le
libhugetlbfs-devel-2.16-12.el7.ppc64le
NetworkManager-wifi-1.8.0-9.el7.ppc64le
libcanberra-gtk2-0.30-5.el7.ppc64le
hostname-3.13-3.el7.ppc64le
redland-1.0.16-6.el7.ppc64le
libdaemon-0.14-7.el7.ppc64le
brasero-3.12.1-2.el7.ppc64le
cups-devel-1.6.3-29.el7.ppc64le
qca2-2.0.3-7.el7.ppc64le
pangomm-2.40.1-1.el7.ppc64le
libnetfilter_conntrack-1.0.6-1.el7_3.ppc64le
sip-devel-4.14.6-4.el7.ppc64le
perl-parent-0.225-244.el7.noarch
libkkc-0.3.1-9.el7.ppc64le
crypto-utils-2.4.1-42.el7.ppc64le
lvm2-2.02.171-8.el7.ppc64le
poppler-glib-0.26.5-16.el7.ppc64le
crash-7.1.9-2.el7.ppc64le
libbluray-0.2.3-5.el7.ppc64le
perl-Filter-1.49-3.el7.ppc64le
control-center-3.22.2-5.el7.ppc64le
c-ares-devel-1.10.0-3.el7.ppc64le
sysstat-10.1.5-12.el7.ppc64le
mesa-libGL-devel-17.0.1-6.20170307.el7.ppc64le
python-pwquality-1.2.3-4.el7.ppc64le
liblouis-python-2.5.2-10.el7.noarch
perl-PathTools-3.40-5.el7.ppc64le
gnome-shell-extension-apps-menu-3.22.2-10.el7.noarch
hunspell-devel-1.3.2-15.el7.ppc64le
policycoreutils-python-2.5-17.1.el7.ppc64le
libwnck3-3.20.1-1.el7.ppc64le
gsettings-desktop-schemas-devel-3.22.0-1.el7.ppc64le
lsof-4.87-4.el7.ppc64le
perl-Getopt-Long-2.40-2.el7.noarch
nfs-utils-1.3.0-0.48.el7.ppc64le
mtr-0.85-7.el7.ppc64le
autofs-5.0.7-69.el7.ppc64le
cairo-devel-1.14.8-2.el7.ppc64le
xorg-x11-xbitmaps-1.1.1-6.el7.noarch
libreport-2.1.11-38.el7.centos.ppc64le
perl-XML-Parser-2.41-10.el7.ppc64le
libvirt-daemon-driver-storage-3.2.0-14.el7.ppc64le
python2-caribou-0.4.21-1.el7.noarch
fontpackages-filesystem-1.44-8.el7.noarch
perl-Test-Pod-1.48-3.el7.noarch
libuuid-devel-2.23.2-43.el7.ppc64le
perl-Package-Constants-0.02-292.el7.noarch
gnutls-3.3.26-9.el7.ppc64le
libreport-cli-2.1.11-38.el7.centos.ppc64le
gettext-common-devel-0.19.8.1-2.el7.noarch
cups-filters-1.0.35-22.el7.ppc64le
xkeyboard-config-2.20-1.el7.noarch
bison-3.0.4-1.el7.ppc64le
compat-libcolord1-1.0.4-1.el7.ppc64le
perl-Digest-MD5-2.52-3.el7.ppc64le
gnutls-dane-3.3.26-9.el7.ppc64le
libusbx-devel-1.0.20-1.el7.ppc64le
initial-setup-0.3.9.40-1.el7.centos.ppc64le
libchamplain-gtk-0.12.15-1.el7.ppc64le
libreport-filesystem-2.1.11-38.el7.centos.ppc64le
m17n-contrib-1.1.14-3.el7.noarch
newt-python-0.52.15-4.el7.ppc64le
perl-Locale-Maketext-1.23-3.el7.noarch
libvirt-daemon-driver-nodedev-3.2.0-14.el7.ppc64le
perl-ExtUtils-Install-1.58-292.el7.noarch
libvirt-3.2.0-14.el7.ppc64le
gnome-themes-standard-3.22.2-1.el7.ppc64le
gl-manpages-1.1-7.20130122.el7.noarch
lohit-gujarati-fonts-2.5.3-2.el7.noarch
python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch
perl-local-lib-1.008010-4.el7.noarch
rest-0.8.0-1.el7.ppc64le
perl-Module-Build-0.40.05-2.el7.noarch
ibus-kkc-1.5.18-7.el7.ppc64le
webkitgtk4-plugin-process-gtk2-2.14.7-2.el7.ppc64le
basesystem-10.0-7.el7.centos.noarch
madan-fonts-2.000-11.el7.noarch
python-beaker-1.5.4-10.el7.noarch
boost-locale-1.53.0-27.el7.ppc64le
dleyna-core-0.5.0-1.el7.ppc64le
liberation-sans-fonts-1.07.2-15.el7.noarch
tk-devel-8.5.13-6.el7.ppc64le
gnome-packagekit-updater-3.22.1-2.el7.ppc64le
cim-schema-2.33.0-6.el7.noarch
lohit-assamese-fonts-2.5.3-2.el7.noarch
tagsoup-1.2.1-8.el7.noarch
libshout-2.2.2-11.el7.ppc64le
ntpdate-4.2.6p5-25.el7.centos.2.ppc64le
libproxy-0.4.11-10.el7.ppc64le
gvfs-gphoto2-1.30.4-3.el7.ppc64le
gspell-1.2.3-1.el7.ppc64le
sil-nuosu-fonts-2.1.1-5.el7.noarch
python-ntplib-0.3.2-1.el7.noarch
bc-1.06.95-13.el7.ppc64le
libvirt-daemon-driver-lxc-3.2.0-14.el7.ppc64le
libreport-anaconda-2.1.11-38.el7.centos.ppc64le
kdepimlibs-devel-4.10.5-4.el7.ppc64le
unique3-3.0.2-8.el7.ppc64le
freetype-2.4.11-15.el7.ppc64le
lohit-marathi-fonts-2.5.3-2.el7.noarch
python2-cryptography-1.7.2-1.el7.ppc64le
libss-1.42.9-10.el7.ppc64le
kernel-tools-libs-3.10.0-693.el7.ppc64le
libsysfs-2.1.0-16.el7.ppc64le
ibus-hangul-1.4.2-10.el7.ppc64le
freerdp-1.0.2-10.el7.ppc64le
popt-1.13-16.el7.ppc64le
open-sans-fonts-1.10-1.el7.noarch
bind-libs-lite-9.9.4-50.el7.ppc64le
lksctp-tools-1.0.17-2.el7.ppc64le
sssd-common-pac-1.15.2-50.el7.ppc64le
libtiff-4.0.3-27.el7_3.ppc64le
gnome-desktop3-devel-3.22.2-2.el7.ppc64le
cdrdao-1.2.3-20.el7.ppc64le
expat-2.1.0-10.el7_3.ppc64le
latrace-0.5.11-6.1.el7.ppc64le
perl-Net-SSLeay-1.55-6.el7.ppc64le
cups-libs-1.6.3-29.el7.ppc64le
dmraid-events-1.0.0.rc16-28.el7.ppc64le
rubygem-io-console-0.4.2-30.el7.ppc64le
gutenprint-cups-5.2.9-18.el7.ppc64le
xorg-x11-server-Xorg-1.19.3-11.el7.ppc64le
libtalloc-2.1.9-1.el7.ppc64le
iwl6000g2b-firmware-17.168.5.2-56.el7.noarch
nss-sysinit-3.28.4-8.el7.ppc64le
glib2-2.50.3-3.el7.ppc64le
rpm-python-4.11.3-25.el7.ppc64le
ustr-1.0.4-16.el7.ppc64le
gucharmap-3.18.2-1.el7.ppc64le
xorg-x11-drv-dummy-0.3.7-1.el7.ppc64le
libogg-1.3.0-7.el7.ppc64le
iwl6000-firmware-9.221.4.1-56.el7.noarch
docbook-dtds-1.0-60.el7.noarch
xorg-x11-proto-devel-7.7-20.el7.noarch
pygpgme-0.3-9.el7.ppc64le
openssh-7.4p1-11.el7.ppc64le
cheese-3.22.1-1.el7.ppc64le
jline-1.0-8.el7.noarch
libcap-2.22-9.el7.ppc64le
ivtv-firmware-20080701-26.el7.noarch
perl-Pod-LaTeX-0.61-2.el7.noarch
enchant-1.6.0-8.el7.ppc64le
python2-ipalib-4.5.0-20.el7.centos.noarch
tog-pegasus-libs-2.14.1-5.el7.ppc64le
firstboot-19.12-1.el7.ppc64le
gupnp-dlna-0.10.5-1.el7.ppc64le
which-2.20-7.el7.ppc64le
epel-release-7-9.noarch
perl-Net-Daemon-0.48-5.el7.noarch
libcroco-0.6.11-1.el7.ppc64le
liboauth-devel-0.9.7-4.el7.ppc64le
libhangul-0.1.0-8.el7.ppc64le
eog-3.20.5-2.el7.ppc64le
plymouth-theme-charge-0.8.9-0.28.20140113.el7.centos.ppc64le
libcollection-0.6.2-27.el7.ppc64le
libgfortran-4.8.5-16.el7_4.1.ppc64le
perl-Locale-Codes-3.26-2.el7.noarch
pygobject2-2.28.6-11.el7.ppc64le
libXdamage-1.1.4-4.1.el7.ppc64le
libestr-0.1.9-2.el7.ppc64le
PackageKit-gtk3-module-1.1.5-1.el7.centos.ppc64le
libgweather-devel-3.20.4-1.el7.ppc64le
xz-5.2.2-1.el7.ppc64le
perl-WWW-RobotRules-6.02-5.el7.noarch
libICE-devel-1.0.9-9.el7.ppc64le
libXft-2.3.2-2.el7.ppc64le
cryptsetup-libs-1.7.4-3.el7.ppc64le
alsa-plugins-pulseaudio-1.1.1-1.el7.ppc64le
glx-utils-8.2.0-3.el7.ppc64le
speex-1.2-0.19.rc1.el7.ppc64le
perl-HTTP-Negotiate-6.01-5.el7.noarch
libtirpc-0.2.4-0.10.el7.ppc64le
pulseaudio-libs-glib2-10.0-3.el7.ppc64le
mesa-libgbm-17.0.1-6.20170307.el7.ppc64le
pulseaudio-libs-devel-10.0-3.el7.ppc64le
imsettings-1.6.3-9.el7.ppc64le
hunspell-en-US-0.20121024-6.el7.noarch
perl-IO-Socket-IP-0.21-4.el7.noarch
nss-util-devel-3.28.4-3.el7.ppc64le
libXxf86vm-1.1.4-1.el7.ppc64le
hwdata-0.252-8.6.el7.ppc64le
kernel-tools-3.10.0-693.el7.ppc64le
nepomuk-core-libs-4.10.5-5.el7.ppc64le
exiv2-libs-0.23-6.el7.ppc64le
perl-libwww-perl-6.05-2.el7.noarch
p11-kit-devel-0.23.5-3.el7.ppc64le
librsvg2-2.40.16-1.el7.ppc64le
libsmbclient-4.6.2-8.el7.ppc64le
abrt-console-notification-2.1.11-48.el7.centos.ppc64le
kdesdk-okteta-libs-4.10.5-6.el7.ppc64le
boost-chrono-1.53.0-27.el7.ppc64le
iw-4.3-1.el7.ppc64le
libcom_err-devel-1.42.9-10.el7.ppc64le
akonadi-1.9.2-4.el7.ppc64le
accountsservice-libs-0.6.45-2.el7.ppc64le
wvdial-1.61-9.el7.ppc64le
libkexiv2-devel-4.10.5-3.el7.ppc64le
libmpc-1.0.1-3.el7.ppc64le
lm_sensors-devel-3.4.0-4.20160601gitf9185e5.el7.ppc64le
meanwhile-1.1.0-12.el7.ppc64le
libXt-devel-1.1.5-3.el7.ppc64le
plymouth-scripts-0.8.9-0.28.20140113.el7.centos.ppc64le
mod_fcgid-2.3.9-4.el7.ppc64le
kdepim-runtime-libs-4.10.5-3.el7.ppc64le
mesa-libglapi-17.0.1-6.20170307.el7.ppc64le
hunspell-en-GB-0.20121024-6.el7.noarch
sip-4.14.6-4.el7.ppc64le
cairomm-1.12.0-1.el7.ppc64le
abrt-addon-xorg-2.1.11-48.el7.centos.ppc64le
ModemManager-1.6.0-2.el7.ppc64le
kdenetwork-krdc-devel-4.10.5-8.el7_0.ppc64le
libieee1284-0.2.11-15.el7.ppc64le
highlight-3.13-3.el7.ppc64le
pyOpenSSL-0.13.1-3.el7.ppc64le
gtk-update-icon-cache-3.22.10-4.el7.ppc64le
NetworkManager-1.8.0-9.el7.ppc64le
crda-3.13_2016.02.08-1.el7.ppc64le
kdesdk-kompare-libs-4.10.5-6.el7.ppc64le
newt-0.52.15-4.el7.ppc64le
xcb-util-0.4.0-2.el7.ppc64le
automake-1.13.4-3.el7.noarch
libgweather-3.20.4-1.el7.ppc64le
lockdev-1.0.4-0.13.20111007git.el7.ppc64le
man-db-2.6.3-9.el7.ppc64le
gd-2.0.35-26.el7.ppc64le
exempi-2.2.0-8.el7.ppc64le
curl-7.29.0-42.el7.ppc64le
snappy-1.1.0-3.el7.ppc64le
libreport-gtk-2.1.11-38.el7.centos.ppc64le
unbound-libs-1.4.20-34.el7.ppc64le
tcpdump-4.9.0-5.el7.ppc64le
sane-backends-drivers-scanners-1.0.24-9.el7.ppc64le
libedit-3.0-12.20121213cvs.el7.ppc64le
liboauth-0.9.7-4.el7.ppc64le
libmpcdec-1.2.6-12.el7.ppc64le
libnm-gtk-1.8.0-3.el7.ppc64le
grub2-tools-extra-2.02-0.64.el7.centos.ppc64le
libdmx-1.1.3-3.el7.ppc64le
wavpack-4.60.1-9.el7.ppc64le
rasqal-0.9.30-4.el7.ppc64le
autogen-libopts-5.18-5.el7.ppc64le
gnome-bluetooth-libs-3.20.1-1.el7.ppc64le
qt-settings-19-23.5.el7.centos.noarch
libxslt-devel-1.1.28-5.el7.ppc64le
grilo-plugins-0.3.4-1.el7.ppc64le
SDL-1.2.15-14.el7.ppc64le
sip-macros-4.14.6-4.el7.ppc64le
iptables-1.4.21-18.0.1.el7.centos.ppc64le
gstreamer-plugins-good-0.10.31-13.el7.ppc64le
qjson-0.8.1-4.el7.ppc64le
perl-Test-Pod-Coverage-1.08-21.el7.noarch
pcp-conf-3.11.8-7.el7.ppc64le
perl-podlators-2.5.1-3.el7.noarch
libcurl-devel-7.29.0-42.el7.ppc64le
graphite2-devel-1.3.6-1.el7_2.ppc64le
pygtk2-2.24.0-9.el7.ppc64le
kexec-tools-2.0.14-17.el7.ppc64le
iptables-devel-1.4.21-18.0.1.el7.centos.ppc64le
gnome-shell-3.22.3-17.el7.ppc64le
perl-Carp-1.26-244.el7.noarch
liblouis-2.5.2-10.el7.ppc64le
dvd+rw-tools-7.1-15.el7.ppc64le
ptlib-2.10.10-6.el7.ppc64le
samba-common-libs-4.6.2-8.el7.ppc64le
gvfs-devel-1.30.4-3.el7.ppc64le
gnome-shell-extension-launch-new-instance-3.22.2-10.el7.noarch
perl-libs-5.16.3-292.el7.ppc64le
libselinux-utils-2.5-11.el7.ppc64le
libsepol-devel-2.5-6.el7.ppc64le
festival-lib-1.96-28.el7.ppc64le
oddjob-0.31.5-4.el7.ppc64le
latencytop-tui-0.5-13.el7.ppc64le
libvirt-daemon-driver-storage-core-3.2.0-14.el7.ppc64le
perl-Data-Dumper-2.145-3.el7.ppc64le
libreport-python-2.1.11-38.el7.centos.ppc64le
libical-devel-1.0.1-1.el7.ppc64le
libmx-1.4.7-10.el7.ppc64le
cups-pk-helper-0.2.6-2.el7.ppc64le
=== TEST BEGIN ===
Install prefix    /var/tmp/patchew-tester-tmp-gpridv0o/src/install
BIOS directory    /var/tmp/patchew-tester-tmp-gpridv0o/src/install/share/qemu
firmware path     /var/tmp/patchew-tester-tmp-gpridv0o/src/install/share/qemu-firmware
binary directory  /var/tmp/patchew-tester-tmp-gpridv0o/src/install/bin
library directory /var/tmp/patchew-tester-tmp-gpridv0o/src/install/lib
module directory  /var/tmp/patchew-tester-tmp-gpridv0o/src/install/lib/qemu
libexec directory /var/tmp/patchew-tester-tmp-gpridv0o/src/install/libexec
include directory /var/tmp/patchew-tester-tmp-gpridv0o/src/install/include
config directory  /var/tmp/patchew-tester-tmp-gpridv0o/src/install/etc
local state directory   /var/tmp/patchew-tester-tmp-gpridv0o/src/install/var
Manual directory  /var/tmp/patchew-tester-tmp-gpridv0o/src/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /var/tmp/patchew-tester-tmp-gpridv0o/src
GIT binary        git
GIT submodules    ui/keycodemapdb dtc capstone
C compiler        cc
Host C compiler   cc
C++ compiler      c++
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 -Werror -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include   -DNCURSES_WIDECHAR   -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-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 -Wno-missing-braces -I/usr/include/p11-kit-1       -I/usr/include/libpng15   -I$(SRC_PATH)/capstone/include
LDFLAGS           -Wl,--warn-common -m64 -g 
make              make
install           install
python            python -B
smbd              /usr/sbin/smbd
module support    no
host CPU          ppc64
host big endian   no
target list       aarch64-softmmu alpha-softmmu arm-softmmu cris-softmmu hppa-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_be-linux-user 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
SDL support       yes (1.2.15)
GTK support       yes (3.22.10)
GTK GL support    no
VTE support       no 
TLS priority      NORMAL
GNUTLS support    yes
GNUTLS rnd        yes
libgcrypt         no
libgcrypt kdf     no
nettle            yes (2.7.1)
nettle kdf        yes
libtasn1          yes
curses support    yes
virgl support     no
curl support      yes
mingw32 support   no
Audio drivers     oss
Block whitelist (rw) 
Block whitelist (ro) 
VirtFS support    yes
Multipath support no
VNC support       yes
VNC SASL support  yes
VNC JPEG support  yes
VNC PNG support   yes
xen support       no
brlapi support    no
bluez  support    no
Documentation     no
PIE               no
vde support       no
netmap support    no
Linux AIO support yes
ATTR/XATTR support yes
Install blobs     yes
KVM support       yes
HAX support       no
HVF support       no
WHPX support      no
TCG support       yes
TCG debug enabled no
TCG interpreter   no
malloc trim support yes
RDMA support      yes
fdt support       yes
preadv support    yes
fdatasync         yes
madvise           yes
posix_madvise     yes
posix_memalign    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       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
TPM emulator      yes
QOM debugging     yes
Live block migration yes
lzo support       no
snappy support    no
bzip2 support     yes
NUMA host support yes
libxml2           yes
tcmalloc support  no
jemalloc support  no
avx2 optimization no
replication support yes
VxHS block device no
capstone          git

WARNING: Use of SDL 1.2 is deprecated and will be removed in
WARNING: future releases. Please switch to using SDL 2.0
  GEN     aarch64-softmmu/config-devices.mak.tmp
  GEN     alpha-softmmu/config-devices.mak.tmp
  GEN     arm-softmmu/config-devices.mak.tmp
  GEN     hppa-softmmu/config-devices.mak.tmp
  GEN     cris-softmmu/config-devices.mak.tmp
  GEN     i386-softmmu/config-devices.mak.tmp
  GEN     m68k-softmmu/config-devices.mak.tmp
  GEN     lm32-softmmu/config-devices.mak.tmp
  GEN     microblazeel-softmmu/config-devices.mak.tmp
  GEN     microblaze-softmmu/config-devices.mak.tmp
  GEN     mips64el-softmmu/config-devices.mak.tmp
  GEN     mips64-softmmu/config-devices.mak.tmp
  GEN     cris-softmmu/config-devices.mak
  GEN     mipsel-softmmu/config-devices.mak.tmp
  GEN     mips-softmmu/config-devices.mak.tmp
  GEN     alpha-softmmu/config-devices.mak
  GEN     aarch64-softmmu/config-devices.mak
  GEN     lm32-softmmu/config-devices.mak
  GEN     microblaze-softmmu/config-devices.mak
  GEN     arm-softmmu/config-devices.mak
  GEN     hppa-softmmu/config-devices.mak
  GEN     microblazeel-softmmu/config-devices.mak
  GEN     nios2-softmmu/config-devices.mak.tmp
  GEN     moxie-softmmu/config-devices.mak.tmp
  GEN     i386-softmmu/config-devices.mak
  GEN     or1k-softmmu/config-devices.mak.tmp
  GEN     m68k-softmmu/config-devices.mak
  GEN     ppc64-softmmu/config-devices.mak.tmp
  GEN     ppc-softmmu/config-devices.mak.tmp
  GEN     ppcemb-softmmu/config-devices.mak.tmp
  GEN     s390x-softmmu/config-devices.mak.tmp
  GEN     sh4-softmmu/config-devices.mak.tmp
  GEN     sparc64-softmmu/config-devices.mak.tmp
  GEN     sh4eb-softmmu/config-devices.mak.tmp
  GEN     mipsel-softmmu/config-devices.mak
  GEN     mips64el-softmmu/config-devices.mak
  GEN     mips64-softmmu/config-devices.mak
  GEN     moxie-softmmu/config-devices.mak
  GEN     mips-softmmu/config-devices.mak
  GEN     nios2-softmmu/config-devices.mak
  GEN     sparc-softmmu/config-devices.mak.tmp
  GEN     unicore32-softmmu/config-devices.mak.tmp
  GEN     x86_64-softmmu/config-devices.mak.tmp
  GEN     tricore-softmmu/config-devices.mak.tmp
  GEN     xtensaeb-softmmu/config-devices.mak.tmp
  GEN     or1k-softmmu/config-devices.mak
  GEN     xtensa-softmmu/config-devices.mak.tmp
  GEN     aarch64_be-linux-user/config-devices.mak.tmp
  GEN     ppc-softmmu/config-devices.mak
  GEN     aarch64-linux-user/config-devices.mak.tmp
  GEN     armeb-linux-user/config-devices.mak.tmp
  GEN     s390x-softmmu/config-devices.mak
  GEN     alpha-linux-user/config-devices.mak.tmp
  GEN     i386-linux-user/config-devices.mak.tmp
  GEN     arm-linux-user/config-devices.mak.tmp
  GEN     m68k-linux-user/config-devices.mak.tmp
  GEN     cris-linux-user/config-devices.mak.tmp
  GEN     microblazeel-linux-user/config-devices.mak.tmp
  GEN     mips64el-linux-user/config-devices.mak.tmp
  GEN     microblaze-linux-user/config-devices.mak.tmp
  GEN     tricore-softmmu/config-devices.mak
  GEN     sparc-softmmu/config-devices.mak
  GEN     mips64-linux-user/config-devices.mak.tmp
  GEN     armeb-linux-user/config-devices.mak
  GEN     mipsel-linux-user/config-devices.mak.tmp
  GEN     hppa-linux-user/config-devices.mak.tmp
  GEN     sh4-softmmu/config-devices.mak
  GEN     mips-linux-user/config-devices.mak.tmp
  GEN     ppc64le-linux-user/config-devices.mak.tmp
  GEN     mipsn32-linux-user/config-devices.mak.tmp
  GEN     nios2-linux-user/config-devices.mak.tmp
  GEN     ppc64-linux-user/config-devices.mak.tmp
  GEN     or1k-linux-user/config-devices.mak.tmp
  GEN     mipsn32el-linux-user/config-devices.mak.tmp
  GEN     ppc64abi32-linux-user/config-devices.mak.tmp
  GEN     ppc-linux-user/config-devices.mak.tmp
  GEN     xtensa-softmmu/config-devices.mak
  GEN     ppcemb-softmmu/config-devices.mak
  GEN     ppc64-softmmu/config-devices.mak
  GEN     unicore32-softmmu/config-devices.mak
  GEN     aarch64_be-linux-user/config-devices.mak
  GEN     cris-linux-user/config-devices.mak
  GEN     m68k-linux-user/config-devices.mak
  GEN     microblaze-linux-user/config-devices.mak
  GEN     s390x-linux-user/config-devices.mak.tmp
  GEN     mips64el-linux-user/config-devices.mak
  GEN     aarch64-linux-user/config-devices.mak
  GEN     sh4eb-linux-user/config-devices.mak.tmp
  GEN     ppc64abi32-linux-user/config-devices.mak
  GEN     sh4-linux-user/config-devices.mak.tmp
  GEN     sh4eb-softmmu/config-devices.mak
  GEN     mipsn32-linux-user/config-devices.mak
  GEN     mipsel-linux-user/config-devices.mak
  GEN     ppc64-linux-user/config-devices.mak
  GEN     sparc32plus-linux-user/config-devices.mak.tmp
  GEN     sparc64-softmmu/config-devices.mak
  GEN     hppa-linux-user/config-devices.mak
  GEN     mipsn32el-linux-user/config-devices.mak
  GEN     alpha-linux-user/config-devices.mak
  GEN     s390x-linux-user/config-devices.mak
  GEN     mips64-linux-user/config-devices.mak
  GEN     ppc-linux-user/config-devices.mak
  GEN     sparc64-linux-user/config-devices.mak.tmp
  GEN     microblazeel-linux-user/config-devices.mak
  GEN     xtensaeb-softmmu/config-devices.mak
  GEN     i386-linux-user/config-devices.mak
  GEN     sparc32plus-linux-user/config-devices.mak
  GEN     nios2-linux-user/config-devices.mak
  GEN     arm-linux-user/config-devices.mak
  GEN     mips-linux-user/config-devices.mak
  GEN     x86_64-softmmu/config-devices.mak
  GEN     or1k-linux-user/config-devices.mak
  GEN     ppc64le-linux-user/config-devices.mak
  GEN     sh4eb-linux-user/config-devices.mak
  GEN     sh4-linux-user/config-devices.mak
  GEN     sparc64-linux-user/config-devices.mak
  GEN     sparc-linux-user/config-devices.mak.tmp
  GEN     tilegx-linux-user/config-devices.mak.tmp
  GEN     x86_64-linux-user/config-devices.mak.tmp
  GEN     config-host.h
  GIT     ui/keycodemapdb dtc capstone
  GEN     sparc-linux-user/config-devices.mak
  GEN     qemu-options.def
  GEN     tilegx-linux-user/config-devices.mak
  GEN     x86_64-linux-user/config-devices.mak
  GEN     qmp-commands.h
  GEN     qapi-types.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     module_block.h
  GEN     trace/generated-helpers.c
  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/rdma/trace.h
  GEN     hw/rdma/vmw/trace.h
  GEN     hw/virtio/trace.h
  GEN     hw/audio/trace.h
  GEN     hw/misc/trace.h
  GEN     hw/misc/macio/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/sparc64/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/pci-host/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/hppa/trace.h
  GEN     hw/xen/trace.h
  GEN     hw/ide/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     scsi/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/rdma/trace.c
  GEN     hw/rdma/vmw/trace.c
  GEN     hw/virtio/trace.c
  GEN     hw/audio/trace.c
  GEN     hw/misc/trace.c
  GEN     hw/misc/macio/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/sparc64/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/pci-host/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/hppa/trace.c
  GEN     hw/xen/trace.c
  GEN     hw/ide/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     scsi/trace.c
  GEN     config-all-devices.mak
mkdir -p dtc/libfdt
mkdir -p dtc/tests
  GEN     ui/input-keymap-atset1-to-qcode.c
  GEN     ui/input-keymap-linux-to-qcode.c
  GEN     ui/input-keymap-qcode-to-atset1.c
  GEN     ui/input-keymap-qcode-to-atset2.c
  GEN     ui/input-keymap-qcode-to-atset3.c
  GEN     ui/input-keymap-qcode-to-linux.c
  GEN     ui/input-keymap-qcode-to-qnum.c
  GEN     ui/input-keymap-qcode-to-sun.c
  GEN     ui/input-keymap-qnum-to-qcode.c
  GEN     ui/input-keymap-usb-to-qcode.c
  GEN     ui/input-keymap-win32-to-qcode.c
  GEN     ui/input-keymap-x11-to-qcode.c
  GEN     ui/input-keymap-xorgevdev-to-qcode.c
  GEN     ui/input-keymap-xorgkbd-to-qcode.c
  GEN     ui/input-keymap-xorgxquartz-to-qcode.c
  GEN     ui/input-keymap-xorgxwin-to-qcode.c
  CC      cs.o
  CC      utils.o
  CC      SStream.o
  CC      MCInstrDesc.o
  CC      MCRegisterInfo.o
  CC      arch/ARM/ARMDisassembler.o
  CC      arch/ARM/ARMInstPrinter.o
  CC      arch/AArch64/AArch64BaseInfo.o
  CC      arch/ARM/ARMModule.o
  CC      arch/ARM/ARMMapping.o
  CC      arch/AArch64/AArch64Disassembler.o
  CC      arch/AArch64/AArch64Mapping.o
  CC      arch/AArch64/AArch64InstPrinter.o
  CC      arch/AArch64/AArch64Module.o
  CC      arch/Mips/MipsDisassembler.o
  CC      arch/Mips/MipsInstPrinter.o
  CC      arch/Mips/MipsMapping.o
  CC      arch/PowerPC/PPCDisassembler.o
  CC      arch/Mips/MipsModule.o
  CC      arch/PowerPC/PPCInstPrinter.o
  CC      arch/PowerPC/PPCMapping.o
  CC      arch/PowerPC/PPCModule.o
  CC      arch/Sparc/SparcDisassembler.o
  CC      arch/Sparc/SparcInstPrinter.o
  CC      arch/Sparc/SparcMapping.o
  CC      arch/Sparc/SparcModule.o
  CC      arch/SystemZ/SystemZDisassembler.o
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/dumptrees.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/trees.S
  CC      arch/SystemZ/SystemZInstPrinter.o
  CC      arch/SystemZ/SystemZMapping.o
  CC      arch/SystemZ/SystemZMCTargetDesc.o
  CC      arch/X86/X86DisassemblerDecoder.o
  CC      arch/SystemZ/SystemZModule.o
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/testutils.c
  CC      arch/X86/X86Disassembler.o
  CC      arch/X86/X86IntelInstPrinter.o
  CC      arch/X86/X86ATTInstPrinter.o
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/value-labels.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/asm_tree_dump.c
  CC      arch/X86/X86Mapping.o
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/truncated_property.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/check_path.c
  CC      arch/X86/X86Module.o
  CC      arch/XCore/XCoreDisassembler.o
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/overlay_bad_fixup.c
  CC      arch/XCore/XCoreInstPrinter.o
  CC      arch/XCore/XCoreMapping.o
  CC      arch/XCore/XCoreModule.o
  CC      MCInst.o
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/overlay.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/subnode_iterate.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/property_iterate.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/integer-expressions.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/utilfdt_test.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/path_offset_aliases.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/add_subnode_with_nops.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/dtbs_equal_unordered.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/dtb_reverse.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/dtbs_equal_ordered.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/extra-terminating-null.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/incbin.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/boot-cpuid.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/phandle_format.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/path-references.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/references.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/string_escapes.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/propname_escapes.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/appendprop2.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/appendprop1.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/del_node.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/setprop.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/del_property.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/set_name.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/rw_tree1.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/open_pack.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/nopulate.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/mangle-layout.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/move_and_save.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/sw_tree1.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/nop_node.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/nop_property.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/setprop_inplace.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/stringlist.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/addr_size_cells.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/notfound.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/sized_cells.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/char_literal.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/get_alias.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/node_offset_by_compatible.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/node_check_compatible.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/node_offset_by_phandle.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/node_offset_by_prop_value.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/parent_offset.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/supernode_atdepth_offset.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/get_path.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/get_phandle.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/getprop.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/get_name.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/path_offset.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/subnode_offset.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/find_property.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/root_node.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/libfdt/fdt_overlay.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/tests/get_mem_rsv.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/libfdt/fdt_addresses.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/libfdt/fdt_empty_tree.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/libfdt/fdt_strerror.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/libfdt/fdt_rw.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/libfdt/fdt_sw.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/libfdt/fdt_wip.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/libfdt/fdt_ro.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/libfdt/fdt.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/util.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/fdtput.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/fdtoverlay.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/fdtget.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/fdtdump.c
	 LEX convert-dtsv0-lexer.lex.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/srcpos.c
	 BISON dtc-parser.tab.c
	 LEX dtc-lexer.lex.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/treesource.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/livetree.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/fstree.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/flattree.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/dtc.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/data.c
	 DEP /var/tmp/patchew-tester-tmp-gpridv0o/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 /var/tmp/patchew-tester-tmp-gpridv0o/src/dtc/util.c
	 CC libfdt/fdt.o
	 CC libfdt/fdt_ro.o
	 CC libfdt/fdt_wip.o
	 CC libfdt/fdt_sw.o
	 CC libfdt/fdt_rw.o
	 CC libfdt/fdt_strerror.o
	 CC libfdt/fdt_empty_tree.o
	 CC libfdt/fdt_addresses.o
	 CC libfdt/fdt_overlay.o
	 AR libfdt/libfdt.a
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
  AR      libcapstone.a
ar: creating /var/tmp/patchew-tester-tmp-gpridv0o/src/build/capstone/libcapstone.a
mkdir -p dtc/libfdt
mkdir -p dtc/tests
  CC      tests/qemu-iotests/socket_scm_helper.o
  GEN     qga/qapi-generated/qga-qapi-types.h
  GEN     qga/qapi-generated/qga-qapi-visit.h
  GEN     qga/qapi-generated/qga-qmp-commands.h
  GEN     qga/qapi-generated/qga-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-event.o
  CC      qapi-types.o
  CC      qapi/qapi-visit-core.o
  CC      qapi-visit.o
  CC      qapi/qapi-dealloc-visitor.o
  CC      qapi/qobject-input-visitor.o
  CC      qapi/qmp-registry.o
  CC      qapi/qmp-dispatch.o
  CC      qapi/qobject-output-visitor.o
  CC      qapi/string-input-visitor.o
  CC      qapi/string-output-visitor.o
  CC      qapi/opts-visitor.o
  CC      qapi/qapi-util.o
  CC      qobject/qnull.o
  CC      qobject/qnum.o
  CC      qobject/qstring.o
  CC      qapi/qapi-clone-visitor.o
  CC      qobject/qdict.o
  CC      qobject/qlist.o
  CC      qobject/qbool.o
  CC      qapi/qmp-event.o
  CC      qobject/qlit.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/qmp.o
  CC      trace/control.o
  CC      util/osdep.o
  CC      util/unicode.o
  CC      util/qemu-timer-common.o
  CC      util/cutils.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/iohandler.o
  CC      util/aio-posix.o
  CC      util/main-loop.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/path.o
  CC      util/envlist.o
  CC      util/module.o
  CC      util/host-utils.o
  CC      util/fifo8.o
  CC      util/bitmap.o
  CC      util/hbitmap.o
  CC      util/bitops.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/uri.o
  CC      util/qemu-sockets.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/pagesize.o
  CC      util/qht.o
  CC      util/qdist.o
  CC      util/range.o
  CC      util/stats64.o
  CC      util/systemd.o
  CC      util/vfio-helpers.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/rdma/trace.o
  CC      hw/rdma/vmw/trace.o
  CC      hw/virtio/trace.o
  CC      hw/misc/trace.o
  CC      hw/audio/trace.o
  CC      hw/misc/macio/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/sparc64/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/ppc/trace.o
  CC      hw/9pfs/trace.o
  CC      hw/pci/trace.o
  CC      hw/pci-host/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/hppa/trace.o
  CC      hw/xen/trace.o
  CC      hw/ide/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/sparc/trace.o
  CC      target/i386/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      nbd/trace.o
  CC      accel/kvm/trace.o
  CC      scsi/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/get-vm-name.o
  CC      stubs/gdbstub.o
  CC      stubs/iothread.o
  CC      stubs/iothread-lock.o
  CC      stubs/is-daemonized.o
  CC      stubs/linux-aio.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/tpm.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.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      stubs/pci-host-piix.o
  CC      stubs/ram-block.o
  CC      contrib/ivshmem-client/ivshmem-client.o
  CC      contrib/ivshmem-client/main.o
  CC      contrib/ivshmem-server/ivshmem-server.o
  CC      block.o
  CC      blockjob.o
  CC      contrib/ivshmem-server/main.o
  CC      qemu-nbd.o
  CC      replication.o
  CC      block/raw-format.o
  CC      qemu-io-cmds.o
  CC      block/qcow.o
  CC      block/vdi.o
  CC      block/vmdk.o
  CC      block/bochs.o
  CC      block/cloop.o
  CC      block/vpc.o
  CC      block/vvfat.o
  CC      block/dmg.o
  CC      block/qcow2.o
  CC      block/qcow2-refcount.o
  CC      block/qcow2-cluster.o
  CC      block/qcow2-snapshot.o
  CC      block/qcow2-cache.o
  CC      block/qcow2-bitmap.o
  CC      block/qed-l2-cache.o
  CC      block/qed-table.o
  CC      block/qed-cluster.o
  CC      block/qed.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/linux-aio.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/nvme.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/throttle.o
  CC      block/crypto.o
  CC      nbd/server.o
  CC      nbd/client.o
  CC      nbd/common.o
  CC      scsi/utils.o
  CC      scsi/pr-manager.o
  CC      scsi/pr-manager-helper.o
  CC      block/curl.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/afsplit.o
  CC      crypto/ivgen-plain64.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/net-listener.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      fsdev/virtfs-proxy-helper.o
  CC      fsdev/9p-marshal.o
  CC      fsdev/9p-iov-marshal.o
  CC      scsi/qemu-pr-helper.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/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      backends/hostmem-memfd.o
  CC      block/stream.o
  CC      chardev/msmouse.o
  CC      chardev/wctablet.o
  CC      chardev/testdev.o
  CC      disas/arm.o
  CC      disas/alpha.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
/var/tmp/patchew-tester-tmp-gpridv0o/src/block/nbd-client.c: In function ‘nbd_client_co_get_block_status’:
/var/tmp/patchew-tester-tmp-gpridv0o/src/block/nbd-client.c:922:61: error: ‘*((void *)&extent+4)’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
            (extent.flags & NBD_STATE_ZERO ? BDRV_BLOCK_ZERO : 0);
                                                             ^
/var/tmp/patchew-tester-tmp-gpridv0o/src/block/nbd-client.c:920:27: error: ‘extent’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
     *pnum = extent.length >> BDRV_SECTOR_BITS;
                           ^
  CC      disas/ppc.o
  CC      disas/s390.o
  CC      disas/sh4.o
  CC      disas/sparc.o
cc1: all warnings being treated as errors
  CC      disas/lm32.o
make: *** [block/nbd-client.o] Error 1
make: *** Waiting for unfinished jobs....
=== 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] 50+ messages in thread

* Re: [Qemu-devel] [PATCH 0/9] nbd block status base:allocation
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
                   ` (10 preceding siblings ...)
  2018-02-23 14:02 ` no-reply
@ 2018-02-24  6:48 ` no-reply
  2018-02-26 16:57 ` [Qemu-devel] [PATCH v2 0/2] nbd block status initial patches Eric Blake
  2018-03-09 19:08 ` [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Eric Blake
  13 siblings, 0 replies; 50+ messages in thread
From: no-reply @ 2018-02-24  6:48 UTC (permalink / raw)
  To: vsementsov; +Cc: famz, qemu-devel, qemu-block, kwolf, mreitz, den, pbonzini

Hi,

This series failed docker-mingw@fedora 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: 1518702707-7077-1-git-send-email-vsementsov@virtuozzo.com
Subject: [Qemu-devel] [PATCH 0/9] nbd block status base:allocation

=== 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-mingw@fedora
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
7d95dcdd92 iotests: new test 206 for NBD BLOCK_STATUS
906b0164c4 iotests: add file_path helper
015ee723d2 iotests.py: tiny refactor: move system imports up
1377201bee nbd: BLOCK_STATUS for standard get_block_status function: client part
a750bdb375 nbd/client: fix error messages in nbd_handle_reply_err
6ec660434e block/nbd-client: save first fatal error in nbd_iter_error
1b609ef226 nbd: BLOCK_STATUS for standard get_block_status function: server part
ac6e460a1f nbd: change indenting in nbd.h
5e399e16f0 nbd/server: add nbd_opt_invalid helper

=== OUTPUT BEGIN ===
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into '/var/tmp/patchew-tester-tmp-ffe51cdm/src/dtc'...
Submodule path 'dtc': checked out 'e54388015af1fb4bf04d0bca99caba1074d9cc42'
  BUILD   fedora
make[1]: Entering directory '/var/tmp/patchew-tester-tmp-ffe51cdm/src'
  GEN     /var/tmp/patchew-tester-tmp-ffe51cdm/src/docker-src.2018-02-24-01.47.30.11028/qemu.tar
Cloning into '/var/tmp/patchew-tester-tmp-ffe51cdm/src/docker-src.2018-02-24-01.47.30.11028/qemu.tar.vroot'...
done.
Your branch is up-to-date with 'origin/test'.
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into '/var/tmp/patchew-tester-tmp-ffe51cdm/src/docker-src.2018-02-24-01.47.30.11028/qemu.tar.vroot/dtc'...
Submodule path 'dtc': checked out 'e54388015af1fb4bf04d0bca99caba1074d9cc42'
Submodule 'ui/keycodemapdb' (git://git.qemu.org/keycodemapdb.git) registered for path 'ui/keycodemapdb'
Cloning into '/var/tmp/patchew-tester-tmp-ffe51cdm/src/docker-src.2018-02-24-01.47.30.11028/qemu.tar.vroot/ui/keycodemapdb'...
Submodule path 'ui/keycodemapdb': checked out '6b3d716e2b6472eb7189d3220552280ef3d832ce'
  COPY    RUNNER
    RUN test-mingw in qemu:fedora 
Packages installed:
PyYAML-3.12-5.fc27.x86_64
SDL-devel-1.2.15-29.fc27.x86_64
bc-1.07.1-3.fc27.x86_64
bison-3.0.4-8.fc27.x86_64
bzip2-1.0.6-24.fc27.x86_64
ccache-3.3.5-1.fc27.x86_64
clang-5.0.1-1.fc27.x86_64
findutils-4.6.0-14.fc27.x86_64
flex-2.6.1-5.fc27.x86_64
gcc-7.3.1-2.fc27.x86_64
gcc-c++-7.3.1-2.fc27.x86_64
gettext-0.19.8.1-12.fc27.x86_64
git-2.14.3-2.fc27.x86_64
glib2-devel-2.54.3-2.fc27.x86_64
hostname-3.18-4.fc27.x86_64
libaio-devel-0.3.110-9.fc27.x86_64
libasan-7.3.1-2.fc27.x86_64
libfdt-devel-1.4.6-1.fc27.x86_64
libubsan-7.3.1-2.fc27.x86_64
make-4.2.1-4.fc27.x86_64
mingw32-SDL-1.2.15-9.fc27.noarch
mingw32-bzip2-1.0.6-9.fc27.noarch
mingw32-curl-7.54.1-2.fc27.noarch
mingw32-glib2-2.54.1-1.fc27.noarch
mingw32-gmp-6.1.2-2.fc27.noarch
mingw32-gnutls-3.5.13-2.fc27.noarch
mingw32-gtk2-2.24.31-4.fc27.noarch
mingw32-gtk3-3.22.16-1.fc27.noarch
mingw32-libjpeg-turbo-1.5.1-3.fc27.noarch
mingw32-libpng-1.6.29-2.fc27.noarch
mingw32-libssh2-1.8.0-3.fc27.noarch
mingw32-libtasn1-4.13-1.fc27.noarch
mingw32-nettle-3.3-3.fc27.noarch
mingw32-pixman-0.34.0-3.fc27.noarch
mingw32-pkg-config-0.28-9.fc27.x86_64
mingw64-SDL-1.2.15-9.fc27.noarch
mingw64-bzip2-1.0.6-9.fc27.noarch
mingw64-curl-7.54.1-2.fc27.noarch
mingw64-glib2-2.54.1-1.fc27.noarch
mingw64-gmp-6.1.2-2.fc27.noarch
mingw64-gnutls-3.5.13-2.fc27.noarch
mingw64-gtk2-2.24.31-4.fc27.noarch
mingw64-gtk3-3.22.16-1.fc27.noarch
mingw64-libjpeg-turbo-1.5.1-3.fc27.noarch
mingw64-libpng-1.6.29-2.fc27.noarch
mingw64-libssh2-1.8.0-3.fc27.noarch
mingw64-libtasn1-4.13-1.fc27.noarch
mingw64-nettle-3.3-3.fc27.noarch
mingw64-pixman-0.34.0-3.fc27.noarch
mingw64-pkg-config-0.28-9.fc27.x86_64
nettle-devel-3.4-1.fc27.x86_64
perl-5.26.1-402.fc27.x86_64
pixman-devel-0.34.0-4.fc27.x86_64
python3-3.6.2-13.fc27.x86_64
sparse-0.5.1-2.fc27.x86_64
tar-1.29-7.fc27.x86_64
which-2.21-4.fc27.x86_64
zlib-devel-1.2.11-4.fc27.x86_64

Environment variables:
TARGET_LIST=
PACKAGES=ccache gettext git tar PyYAML sparse flex bison python3 bzip2 hostname     glib2-devel pixman-devel zlib-devel SDL-devel libfdt-devel     gcc gcc-c++ clang make perl which bc findutils libaio-devel     nettle-devel libasan libubsan     mingw32-pixman mingw32-glib2 mingw32-gmp mingw32-SDL mingw32-pkg-config     mingw32-gtk2 mingw32-gtk3 mingw32-gnutls mingw32-nettle mingw32-libtasn1     mingw32-libjpeg-turbo mingw32-libpng mingw32-curl mingw32-libssh2     mingw32-bzip2     mingw64-pixman mingw64-glib2 mingw64-gmp mingw64-SDL mingw64-pkg-config     mingw64-gtk2 mingw64-gtk3 mingw64-gnutls mingw64-nettle mingw64-libtasn1     mingw64-libjpeg-turbo mingw64-libpng mingw64-curl mingw64-libssh2     mingw64-bzip2
J=8
V=
HOSTNAME=f9ae97814ec1
DEBUG=
SHOW_ENV=1
PWD=/
HOME=/root
CCACHE_DIR=/var/tmp/ccache
DISTTAG=f27container
QEMU_CONFIGURE_OPTS=--python=/usr/bin/python3
FGC=f27
TEST_DIR=/tmp/qemu-test
SHLVL=1
FEATURES=mingw clang pyyaml asan dtc
PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAKEFLAGS= -j8
EXTRA_CONFIGURE_OPTS=
_=/usr/bin/env

Configure options:
--enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/tmp/qemu-test/install --python=/usr/bin/python3 --cross-prefix=x86_64-w64-mingw32- --enable-trace-backends=simple --enable-gnutls --enable-nettle --enable-curl --enable-vnc --enable-bzip2 --enable-guest-agent --with-sdlabi=1.2 --with-gtkabi=2.0
Install prefix    /tmp/qemu-test/install
BIOS directory    /tmp/qemu-test/install
firmware path     /tmp/qemu-test/install/share/qemu-firmware
binary directory  /tmp/qemu-test/install
library directory /tmp/qemu-test/install/lib
module directory  /tmp/qemu-test/install/lib
libexec directory /tmp/qemu-test/install/libexec
include directory /tmp/qemu-test/install/include
config directory  /tmp/qemu-test/install
local state directory   queried at runtime
Windows SDK       no
Source path       /tmp/qemu-test/src
GIT binary        git
GIT submodules    
C compiler        x86_64-w64-mingw32-gcc
Host C compiler   cc
C++ compiler      x86_64-w64-mingw32-g++
Objective-C compiler clang
ARFLAGS           rv
CFLAGS            -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g 
QEMU_CFLAGS       -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/pixman-1  -I$(SRC_PATH)/dtc/libfdt -Werror -DHAS_LIBSSH2_SFTP_FSYNC -mms-bitfields -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/glib-2.0 -I/usr/x86_64-w64-mingw32/sys-root/mingw/lib/glib-2.0/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include  -m64 -mcx16 -mthreads -D__USE_MINGW_ANSI_STDIO=1 -DWIN32_LEAN_AND_MEAN -DWINVER=0x501 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv  -Wexpansion-to-defined -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/p11-kit-1 -I/usr/x86_64-w64-mingw32/sys-root/mingw/include  -I/usr/x86_64-w64-mingw32/sys-root/mingw/include   -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/libpng16 
LDFLAGS           -Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase -Wl,--warn-common -m64 -g 
make              make
install           install
python            /usr/bin/python3 -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
SDL support       yes (1.2.15)
GTK support       yes (2.24.31)
GTK GL support    no
VTE support       no 
TLS priority      NORMAL
GNUTLS support    yes
GNUTLS rnd        yes
libgcrypt         no
libgcrypt kdf     no
nettle            yes (3.3)
nettle kdf        yes
libtasn1          yes
curses support    no
virgl support     no
curl support      yes
mingw32 support   yes
Audio drivers     dsound
Block whitelist (rw) 
Block whitelist (ro) 
VirtFS support    no
Multipath support no
VNC support       yes
VNC SASL support  no
VNC JPEG support  yes
VNC PNG support   yes
xen support       no
brlapi support    no
bluez  support    no
Documentation     no
PIE               no
vde support       no
netmap support    no
Linux AIO support no
ATTR/XATTR support no
Install blobs     yes
KVM support       no
HAX support       yes
HVF support       no
WHPX support      no
TCG support       yes
TCG debug enabled no
TCG interpreter   no
malloc trim support no
RDMA support      no
fdt support       yes
preadv support    no
fdatasync         no
madvise           no
posix_madvise     no
posix_memalign    no
libcap-ng support no
vhost-net support no
vhost-scsi support no
vhost-vsock support no
vhost-user support no
Trace backends    simple
Trace output file trace-<pid>
spice support     no 
rbd support       no
xfsctl support    no
smartcard support no
libusb            no
usb net redir     no
OpenGL support    no
OpenGL dmabufs    no
libiscsi support  no
libnfs support    no
build guest agent yes
QGA VSS support   no
QGA w32 disk info yes
QGA MSI support   no
seccomp support   no
coroutine backend win32
coroutine pool    yes
debug stack usage no
crypto afalg      no
GlusterFS support no
gcov              gcov
gcov enabled      no
TPM support       yes
libssh2 support   yes
TPM passthrough   no
TPM emulator      no
QOM debugging     yes
Live block migration yes
lzo support       no
snappy support    no
bzip2 support     yes
NUMA host support no
libxml2           no
tcmalloc support  no
jemalloc support  no
avx2 optimization yes
replication support yes
VxHS block device no
capstone          no

WARNING: Use of GTK 2.0 is deprecated and will be removed in
WARNING: future releases. Please switch to using GTK 3.0

WARNING: Use of SDL 1.2 is deprecated and will be removed in
WARNING: future releases. Please switch to using SDL 2.0
mkdir -p dtc/libfdt
mkdir -p dtc/tests
  GEN     config-host.h
  GEN     qapi-types.h
  GEN     qemu-options.def
  GEN     qmp-commands.h
  GEN     aarch64-softmmu/config-devices.mak.tmp
  GEN     x86_64-softmmu/config-devices.mak.tmp
  GEN     qapi-visit.h
  GEN     qapi-event.h
  GEN     x86_64-softmmu/config-devices.mak
  GEN     aarch64-softmmu/config-devices.mak
  GEN     qmp-marshal.c
  GEN     qapi-visit.c
  GEN     qapi-types.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     ui/input-keymap-atset1-to-qcode.c
  GEN     ui/input-keymap-linux-to-qcode.c
  GEN     ui/input-keymap-qcode-to-atset1.c
  GEN     ui/input-keymap-qcode-to-atset2.c
  GEN     ui/input-keymap-qcode-to-atset3.c
  GEN     ui/input-keymap-qcode-to-linux.c
  GEN     ui/input-keymap-qcode-to-qnum.c
  GEN     ui/input-keymap-qcode-to-sun.c
  GEN     ui/input-keymap-qnum-to-qcode.c
  GEN     ui/input-keymap-usb-to-qcode.c
  GEN     ui/input-keymap-win32-to-qcode.c
  GEN     ui/input-keymap-x11-to-qcode.c
  GEN     ui/input-keymap-xorgevdev-to-qcode.c
  GEN     ui/input-keymap-xorgkbd-to-qcode.c
  GEN     ui/input-keymap-xorgxquartz-to-qcode.c
  GEN     ui/input-keymap-xorgxwin-to-qcode.c
  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/rdma/trace.h
  GEN     hw/rdma/vmw/trace.h
  GEN     hw/virtio/trace.h
  GEN     hw/audio/trace.h
  GEN     hw/misc/trace.h
  GEN     hw/misc/macio/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/sparc64/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/pci-host/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/hppa/trace.h
  GEN     hw/xen/trace.h
  GEN     hw/ide/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     scsi/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/rdma/trace.c
  GEN     hw/rdma/vmw/trace.c
  GEN     hw/virtio/trace.c
  GEN     hw/audio/trace.c
  GEN     hw/misc/trace.c
  GEN     hw/misc/macio/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/sparc64/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/pci-host/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/hppa/trace.c
  GEN     hw/xen/trace.c
  GEN     hw/ide/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     scsi/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/path_offset_aliases.c
	 DEP /tmp/qemu-test/src/dtc/tests/utilfdt_test.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/extra-terminating-null.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_ordered.c
	 DEP /tmp/qemu-test/src/dtc/tests/incbin.c
	 DEP /tmp/qemu-test/src/dtc/tests/boot-cpuid.c
	 DEP /tmp/qemu-test/src/dtc/tests/phandle_format.c
	 DEP /tmp/qemu-test/src/dtc/tests/path-references.c
	 DEP /tmp/qemu-test/src/dtc/tests/references.c
	 DEP /tmp/qemu-test/src/dtc/tests/string_escapes.c
	 DEP /tmp/qemu-test/src/dtc/tests/propname_escapes.c
	 DEP /tmp/qemu-test/src/dtc/tests/appendprop2.c
	 DEP /tmp/qemu-test/src/dtc/tests/appendprop1.c
	 DEP /tmp/qemu-test/src/dtc/tests/del_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/del_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/setprop.c
	 DEP /tmp/qemu-test/src/dtc/tests/set_name.c
	 DEP /tmp/qemu-test/src/dtc/tests/rw_tree1.c
	 DEP /tmp/qemu-test/src/dtc/tests/open_pack.c
	 DEP /tmp/qemu-test/src/dtc/tests/nopulate.c
	 DEP /tmp/qemu-test/src/dtc/tests/mangle-layout.c
	 DEP /tmp/qemu-test/src/dtc/tests/move_and_save.c
	 DEP /tmp/qemu-test/src/dtc/tests/sw_tree1.c
	 DEP /tmp/qemu-test/src/dtc/tests/nop_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/nop_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/setprop_inplace.c
	 DEP /tmp/qemu-test/src/dtc/tests/stringlist.c
	 DEP /tmp/qemu-test/src/dtc/tests/addr_size_cells.c
	 DEP /tmp/qemu-test/src/dtc/tests/notfound.c
	 DEP /tmp/qemu-test/src/dtc/tests/sized_cells.c
	 DEP /tmp/qemu-test/src/dtc/tests/char_literal.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_alias.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_compatible.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_check_compatible.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_phandle.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_prop_value.c
	 DEP /tmp/qemu-test/src/dtc/tests/parent_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/supernode_atdepth_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_path.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_phandle.c
	 DEP /tmp/qemu-test/src/dtc/tests/getprop.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_name.c
	 DEP /tmp/qemu-test/src/dtc/tests/path_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/find_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/subnode_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/root_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_mem_rsv.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_overlay.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_addresses.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_empty_tree.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_strerror.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_rw.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_sw.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_wip.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_ro.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt.c
	 DEP /tmp/qemu-test/src/dtc/util.c
	 DEP /tmp/qemu-test/src/dtc/fdtoverlay.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
	 DEP /tmp/qemu-test/src/dtc/srcpos.c
	 LEX convert-dtsv0-lexer.lex.c
	 BISON dtc-parser.tab.c
	 LEX dtc-lexer.lex.c
	 DEP /tmp/qemu-test/src/dtc/treesource.c
	 DEP /tmp/qemu-test/src/dtc/livetree.c
	 DEP /tmp/qemu-test/src/dtc/fstree.c
	 DEP /tmp/qemu-test/src/dtc/flattree.c
	 DEP /tmp/qemu-test/src/dtc/dtc.c
	 DEP /tmp/qemu-test/src/dtc/data.c
	 DEP /tmp/qemu-test/src/dtc/checks.c
	 DEP convert-dtsv0-lexer.lex.c
	 DEP dtc-parser.tab.c
	 DEP dtc-lexer.lex.c
	CHK version_gen.h
	UPD version_gen.h
	 DEP /tmp/qemu-test/src/dtc/util.c
	 CC libfdt/fdt.o
	 CC libfdt/fdt_ro.o
	 CC libfdt/fdt_rw.o
	 CC libfdt/fdt_strerror.o
	 CC libfdt/fdt_wip.o
	 CC libfdt/fdt_sw.o
	 CC libfdt/fdt_empty_tree.o
	 CC libfdt/fdt_addresses.o
	 CC libfdt/fdt_overlay.o
	 AR libfdt/libfdt.a
x86_64-w64-mingw32-ar: creating libfdt/libfdt.a
a - libfdt/fdt.o
a - libfdt/fdt_ro.o
a - libfdt/fdt_wip.o
a - libfdt/fdt_sw.o
a - libfdt/fdt_rw.o
a - libfdt/fdt_strerror.o
a - libfdt/fdt_empty_tree.o
a - libfdt/fdt_addresses.o
a - libfdt/fdt_overlay.o
  RC      version.o
mkdir -p dtc/libfdt
mkdir -p dtc/tests
  GEN     qga/qapi-generated/qga-qapi-visit.h
  GEN     qga/qapi-generated/qga-qapi-types.h
  GEN     qga/qapi-generated/qga-qapi-types.c
  CC      qapi-types.o
  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-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/qlit.o
  CC      qobject/qjson.o
  CC      qobject/qobject.o
  CC      qobject/json-lexer.o
  CC      qobject/json-streamer.o
  CC      qobject/json-parser.o
  CC      trace/simple.o
  CC      trace/control.o
  CC      trace/qmp.o
  CC      util/osdep.o
  CC      util/cutils.o
  CC      util/unicode.o
  CC      util/qemu-timer-common.o
  CC      util/bufferiszero.o
  CC      util/lockcnt.o
  CC      util/aiocb.o
  CC      util/async.o
  CC      util/thread-pool.o
  CC      util/qemu-timer.o
  CC      util/main-loop.o
  CC      util/iohandler.o
  CC      util/aio-win32.o
  CC      util/event_notifier-win32.o
  CC      util/oslib-win32.o
  CC      util/qemu-thread-win32.o
  CC      util/envlist.o
  CC      util/path.o
  CC      util/module.o
  CC      util/host-utils.o
  CC      util/bitmap.o
  CC      util/bitops.o
  CC      util/hbitmap.o
  CC      util/fifo8.o
  CC      util/acl.o
  CC      util/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/rcu.o
  CC      util/qemu-coroutine.o
  CC      util/readline.o
  CC      util/qemu-coroutine-lock.o
  CC      util/qemu-coroutine-io.o
  CC      util/qemu-coroutine-sleep.o
  CC      util/coroutine-win32.o
  CC      util/buffer.o
  CC      util/timed-average.o
  CC      util/base64.o
  CC      util/log.o
  CC      util/pagesize.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/char/trace.o
  CC      hw/block/dataplane/trace.o
  CC      hw/block/trace.o
  CC      hw/intc/trace.o
  CC      hw/net/trace.o
  CC      hw/rdma/trace.o
  CC      hw/rdma/vmw/trace.o
  CC      hw/virtio/trace.o
  CC      hw/audio/trace.o
  CC      hw/misc/trace.o
  CC      hw/misc/macio/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/sparc64/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/pci-host/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/hppa/trace.o
  CC      hw/xen/trace.o
  CC      hw/ide/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      scsi/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/gdbstub.o
  CC      stubs/get-vm-name.o
  CC      stubs/iothread.o
  CC      stubs/fdset.o
  CC      stubs/is-daemonized.o
  CC      stubs/machine-init-done.o
  CC      stubs/iothread-lock.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/tpm.o
  CC      stubs/trace-control.o
  CC      stubs/uuid.o
  CC      stubs/vm-stop.o
  CC      stubs/vmstate.o
  CC      stubs/fd-register.o
  CC      stubs/qmp_pc_dimm.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      stubs/pci-host-piix.o
  CC      stubs/ram-block.o
  GEN     qemu-img-cmds.h
  CC      block.o
  CC      blockjob.o
  CC      qemu-io-cmds.o
  CC      replication.o
  CC      block/raw-format.o
  CC      block/qcow.o
  CC      block/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/qed.o
  CC      block/qcow2-bitmap.o
  CC      block/qed-l2-cache.o
  CC      block/qed-table.o
  CC      block/qed-cluster.o
  CC      block/qed-check.o
  CC      block/vhdx.o
  CC      block/vhdx-endian.o
  CC      block/quorum.o
  CC      block/vhdx-log.o
  CC      block/parallels.o
  CC      block/blkdebug.o
  CC      block/blkverify.o
  CC      block/blkreplay.o
  CC      block/block-backend.o
  CC      block/snapshot.o
  CC      block/qapi.o
  CC      block/file-win32.o
  CC      block/win32-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/accounting.o
  CC      block/dirty-bitmap.o
  CC      block/write-threshold.o
  CC      block/backup.o
  CC      block/replication.o
  CC      block/throttle.o
  CC      block/crypto.o
  CC      nbd/server.o
  CC      nbd/client.o
  CC      nbd/common.o
  CC      scsi/utils.o
  CC      block/curl.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/net-listener.o
  CC      io/task.o
  CC      qom/object.o
  CC      qom/container.o
  CC      qom/qom-qobject.o
  CC      qom/object_interfaces.o
  CC      qemu-io.o
  CC      blockdev.o
  CC      blockdev-nbd.o
  CC      bootdevice.o
  CC      iothread.o
  CC      qdev-monitor.o
  CC      device-hotplug.o
  CC      os-win32.o
  CC      bt-host.o
  CC      bt-vhci.o
  CC      dma-helpers.o
  CC      vl.o
  CC      tpm.o
  CC      device_tree.o
  CC      qmp-marshal.o
  CC      qmp.o
  CC      hmp.o
  CC      cpus-common.o
  CC      audio/audio.o
  CC      audio/noaudio.o
/tmp/qemu-test/src/block/nbd-client.c: In function 'nbd_client_co_get_block_status':
/tmp/qemu-test/src/block/nbd-client.c:887:15: error: '*((void *)&extent+4)' may be used uninitialized in this function [-Werror=maybe-uninitialized]
     NBDExtent extent;
               ^~~~~~
/tmp/qemu-test/src/block/nbd-client.c:920:27: error: 'extent' may be used uninitialized in this function [-Werror=maybe-uninitialized]
     *pnum = extent.length >> BDRV_SECTOR_BITS;
cc1: all warnings being treated as errors
make: *** [/tmp/qemu-test/src/rules.mak:66: block/nbd-client.o] Error 1
make: *** Waiting for unfinished jobs....
Traceback (most recent call last):
  File "./tests/docker/docker.py", line 407, in <module>
    sys.exit(main())
  File "./tests/docker/docker.py", line 404, in main
    return args.cmdobj.run(args, argv)
  File "./tests/docker/docker.py", line 261, in run
    return Docker().run(argv, args.keep, quiet=args.quiet)
  File "./tests/docker/docker.py", line 229, in run
    quiet=quiet)
  File "./tests/docker/docker.py", line 147, 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=9ab6c86e192e11e89ce552540069c830', '-u', '0', '--security-opt', 'seccomp=unconfined', '--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', '/root/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-ffe51cdm/src/docker-src.2018-02-24-01.47.30.11028:/var/tmp/qemu:z,ro', 'qemu:fedora', '/var/tmp/qemu/run', 'test-mingw']' returned non-zero exit status 2
make[1]: *** [tests/docker/Makefile.include:129: docker-run] Error 1
make[1]: Leaving directory '/var/tmp/patchew-tester-tmp-ffe51cdm/src'
make: *** [tests/docker/Makefile.include:163: docker-run-test-mingw@fedora] Error 2

real	1m22.952s
user	0m3.968s
sys	0m3.564s
=== 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] 50+ messages in thread

* [Qemu-devel] [PATCH v2 0/2] nbd block status initial patches
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
                   ` (11 preceding siblings ...)
  2018-02-24  6:48 ` no-reply
@ 2018-02-26 16:57 ` Eric Blake
  2018-02-26 16:57   ` [Qemu-devel] [PATCH v2 1/2] nbd: BLOCK_STATUS constants Eric Blake
  2018-02-26 16:57   ` [Qemu-devel] [PATCH v2 2/2] nbd/client: fix error messages in nbd_handle_reply_err Eric Blake
  2018-03-09 19:08 ` [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Eric Blake
  13 siblings, 2 replies; 50+ messages in thread
From: Eric Blake @ 2018-02-26 16:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: vsementsov

Here's the bits of 3/9 and 5/9 that I liked, but where I made further
changes.  I'd like to take these two, plus the original 2/9 as-is,
as part of my next NBD PULL request, but want to make sure you are
okay with my changes.

Yes, I still need to follow up on the upstream NBD list what we
are going to do about the disagreement on values for the constants
between the early Virtuozzo implementation and the current wording
in the NBD extension branch.

Vladimir Sementsov-Ogievskiy (2):
  nbd: BLOCK_STATUS constants
  nbd/client: fix error messages in nbd_handle_reply_err

 include/block/nbd.h | 31 +++++++++++++++++++++++++++++++
 nbd/client.c        | 20 ++++++++++----------
 nbd/common.c        | 10 ++++++++++
 nbd/server.c        |  4 ++--
 nbd/trace-events    |  8 ++++----
 5 files changed, 57 insertions(+), 16 deletions(-)

-- 
2.14.3

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

* [Qemu-devel] [PATCH v2 1/2] nbd: BLOCK_STATUS constants
  2018-02-26 16:57 ` [Qemu-devel] [PATCH v2 0/2] nbd block status initial patches Eric Blake
@ 2018-02-26 16:57   ` Eric Blake
  2018-03-01 12:06     ` Vladimir Sementsov-Ogievskiy
  2018-02-26 16:57   ` [Qemu-devel] [PATCH v2 2/2] nbd/client: fix error messages in nbd_handle_reply_err Eric Blake
  1 sibling, 1 reply; 50+ messages in thread
From: Eric Blake @ 2018-02-26 16:57 UTC (permalink / raw)
  To: qemu-devel
  Cc: vsementsov, Paolo Bonzini, Kevin Wolf, Max Reitz,
	open list:Network Block Dev...

From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

Expose the new constants and structs that will be used by both
server and client implementations of NBD_CMD_BLOCK_STATUS (the
command is currently experimental at
https://github.com/NetworkBlockDevice/nbd/blob/extension-blockstatus/doc/proto.md
but will hopefully be stabilized soon).

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-Id: <1518702707-7077-4-git-send-email-vsementsov@virtuozzo.com>
[eblake: split from larger patch on server implementation]
Signed-off-by: Eric Blake <eblake@redhat.com>
---
 include/block/nbd.h | 31 +++++++++++++++++++++++++++++++
 nbd/common.c        | 10 ++++++++++
 2 files changed, 41 insertions(+)

diff --git a/include/block/nbd.h b/include/block/nbd.h
index ef1698914ba..53250d0979c 100644
--- a/include/block/nbd.h
+++ b/include/block/nbd.h
@@ -41,6 +41,12 @@ struct NBDOptionReply {
 } QEMU_PACKED;
 typedef struct NBDOptionReply NBDOptionReply;

+typedef struct NBDOptionReplyMetaContext {
+    NBDOptionReply h; /* h.type = NBD_REP_META_CONTEXT, h.length > 4 */
+    uint32_t context_id;
+    /* meta context name follows */
+} QEMU_PACKED NBDOptionReplyMetaContext;
+
 /* Transmission phase structs
  *
  * Note: these are _NOT_ the same as the network representation of an NBD
@@ -105,6 +111,19 @@ typedef struct NBDStructuredError {
     uint16_t message_length;
 } QEMU_PACKED NBDStructuredError;

+/* Header of NBD_REPLY_TYPE_BLOCK_STATUS */
+typedef struct NBDStructuredMeta {
+    NBDStructuredReplyChunk h; /* h.length >= 12 (at least one extent) */
+    uint32_t context_id;
+    /* extents follows */
+} QEMU_PACKED NBDStructuredMeta;
+
+/* Extent chunk for NBD_REPLY_TYPE_BLOCK_STATUS */
+typedef struct NBDExtent {
+    uint32_t length;
+    uint32_t flags; /* NBD_STATE_* */
+} QEMU_PACKED NBDExtent;
+
 /* Transmission (export) flags: sent from server to client during handshake,
    but describe what will happen during transmission */
 #define NBD_FLAG_HAS_FLAGS         (1 << 0) /* Flags are there */
@@ -136,6 +155,8 @@ typedef struct NBDStructuredError {
 #define NBD_OPT_INFO              (6)
 #define NBD_OPT_GO                (7)
 #define NBD_OPT_STRUCTURED_REPLY  (8)
+#define NBD_OPT_LIST_META_CONTEXT (9)
+#define NBD_OPT_SET_META_CONTEXT  (10)

 /* Option reply types. */
 #define NBD_REP_ERR(value) ((UINT32_C(1) << 31) | (value))
@@ -143,6 +164,7 @@ typedef struct NBDStructuredError {
 #define NBD_REP_ACK             (1)    /* Data sending finished. */
 #define NBD_REP_SERVER          (2)    /* Export description. */
 #define NBD_REP_INFO            (3)    /* NBD_OPT_INFO/GO. */
+#define NBD_REP_META_CONTEXT    (4)    /* NBD_OPT_{LIST,SET}_META_CONTEXT */

 #define NBD_REP_ERR_UNSUP           NBD_REP_ERR(1)  /* Unknown option */
 #define NBD_REP_ERR_POLICY          NBD_REP_ERR(2)  /* Server denied */
@@ -163,6 +185,8 @@ typedef struct NBDStructuredError {
 #define NBD_CMD_FLAG_FUA        (1 << 0) /* 'force unit access' during write */
 #define NBD_CMD_FLAG_NO_HOLE    (1 << 1) /* don't punch hole on zero run */
 #define NBD_CMD_FLAG_DF         (1 << 2) /* don't fragment structured read */
+#define NBD_CMD_FLAG_REQ_ONE    (1 << 3) /* only one extent in BLOCK_STATUS
+                                          * reply chunk */

 /* Supported request types */
 enum {
@@ -173,6 +197,7 @@ enum {
     NBD_CMD_TRIM = 4,
     /* 5 reserved for failed experiment NBD_CMD_CACHE */
     NBD_CMD_WRITE_ZEROES = 6,
+    NBD_CMD_BLOCK_STATUS = 7,
 };

 #define NBD_DEFAULT_PORT	10809
@@ -200,9 +225,15 @@ enum {
 #define NBD_REPLY_TYPE_NONE          0
 #define NBD_REPLY_TYPE_OFFSET_DATA   1
 #define NBD_REPLY_TYPE_OFFSET_HOLE   2
+#define NBD_REPLY_TYPE_BLOCK_STATUS  3
 #define NBD_REPLY_TYPE_ERROR         NBD_REPLY_ERR(1)
 #define NBD_REPLY_TYPE_ERROR_OFFSET  NBD_REPLY_ERR(2)

+/* Flags for extents (NBDExtent.flags) of NBD_REPLY_TYPE_BLOCK_STATUS,
+ * for base:allocation meta context */
+#define NBD_STATE_HOLE (1 << 0)
+#define NBD_STATE_ZERO (1 << 1)
+
 static inline bool nbd_reply_type_is_error(int type)
 {
     return type & (1 << 15);
diff --git a/nbd/common.c b/nbd/common.c
index 6295526dd14..8c95c1d606e 100644
--- a/nbd/common.c
+++ b/nbd/common.c
@@ -75,6 +75,10 @@ const char *nbd_opt_lookup(uint32_t opt)
         return "go";
     case NBD_OPT_STRUCTURED_REPLY:
         return "structured reply";
+    case NBD_OPT_LIST_META_CONTEXT:
+        return "list meta context";
+    case NBD_OPT_SET_META_CONTEXT:
+        return "set meta context";
     default:
         return "<unknown>";
     }
@@ -90,6 +94,8 @@ const char *nbd_rep_lookup(uint32_t rep)
         return "server";
     case NBD_REP_INFO:
         return "info";
+    case NBD_REP_META_CONTEXT:
+        return "meta context";
     case NBD_REP_ERR_UNSUP:
         return "unsupported";
     case NBD_REP_ERR_POLICY:
@@ -144,6 +150,8 @@ const char *nbd_cmd_lookup(uint16_t cmd)
         return "trim";
     case NBD_CMD_WRITE_ZEROES:
         return "write zeroes";
+    case NBD_CMD_BLOCK_STATUS:
+        return "block status";
     default:
         return "<unknown>";
     }
@@ -159,6 +167,8 @@ const char *nbd_reply_type_lookup(uint16_t type)
         return "data";
     case NBD_REPLY_TYPE_OFFSET_HOLE:
         return "hole";
+    case NBD_REPLY_TYPE_BLOCK_STATUS:
+        return "block status";
     case NBD_REPLY_TYPE_ERROR:
         return "generic error";
     case NBD_REPLY_TYPE_ERROR_OFFSET:
-- 
2.14.3

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

* [Qemu-devel] [PATCH v2 2/2] nbd/client: fix error messages in nbd_handle_reply_err
  2018-02-26 16:57 ` [Qemu-devel] [PATCH v2 0/2] nbd block status initial patches Eric Blake
  2018-02-26 16:57   ` [Qemu-devel] [PATCH v2 1/2] nbd: BLOCK_STATUS constants Eric Blake
@ 2018-02-26 16:57   ` Eric Blake
  2018-03-01 12:10     ` Vladimir Sementsov-Ogievskiy
  1 sibling, 1 reply; 50+ messages in thread
From: Eric Blake @ 2018-02-26 16:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: vsementsov, Paolo Bonzini, open list:Network Block Dev...

From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

1. NBD_REP_ERR_INVALID is not only about length, so, make message more
   general

2. hex format is not very good: it's hard to read something like
   "option a (set meta context)", so switch to dec.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-Id: <1518702707-7077-6-git-send-email-vsementsov@virtuozzo.com>
[eblake: expand scope of patch: ALL uses of nbd_opt_lookup are now
decimal, all uses of nbd_rep_lookup are prefixed hex]
Signed-off-by: Eric Blake <eblake@redhat.com>
---
 nbd/client.c     | 20 ++++++++++----------
 nbd/server.c     |  4 ++--
 nbd/trace-events |  8 ++++----
 3 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/nbd/client.c b/nbd/client.c
index 89f80f95905..756e110f895 100644
--- a/nbd/client.c
+++ b/nbd/client.c
@@ -180,22 +180,22 @@ static int nbd_handle_reply_err(QIOChannel *ioc, NBDOptionReply *reply,
         goto cleanup;

     case NBD_REP_ERR_POLICY:
-        error_setg(errp, "Denied by server for option %" PRIx32 " (%s)",
+        error_setg(errp, "Denied by server for option %" PRIu32 " (%s)",
                    reply->option, nbd_opt_lookup(reply->option));
         break;

     case NBD_REP_ERR_INVALID:
-        error_setg(errp, "Invalid data length for option %" PRIx32 " (%s)",
+        error_setg(errp, "Invalid parameters for option %" PRIu32 " (%s)",
                    reply->option, nbd_opt_lookup(reply->option));
         break;

     case NBD_REP_ERR_PLATFORM:
-        error_setg(errp, "Server lacks support for option %" PRIx32 " (%s)",
+        error_setg(errp, "Server lacks support for option %" PRIu32 " (%s)",
                    reply->option, nbd_opt_lookup(reply->option));
         break;

     case NBD_REP_ERR_TLS_REQD:
-        error_setg(errp, "TLS negotiation required before option %" PRIx32
+        error_setg(errp, "TLS negotiation required before option %" PRIu32
                    " (%s)", reply->option, nbd_opt_lookup(reply->option));
         break;

@@ -204,17 +204,17 @@ static int nbd_handle_reply_err(QIOChannel *ioc, NBDOptionReply *reply,
         break;

     case NBD_REP_ERR_SHUTDOWN:
-        error_setg(errp, "Server shutting down before option %" PRIx32 " (%s)",
+        error_setg(errp, "Server shutting down before option %" PRIu32 " (%s)",
                    reply->option, nbd_opt_lookup(reply->option));
         break;

     case NBD_REP_ERR_BLOCK_SIZE_REQD:
-        error_setg(errp, "Server requires INFO_BLOCK_SIZE for option %" PRIx32
+        error_setg(errp, "Server requires INFO_BLOCK_SIZE for option %" PRIu32
                    " (%s)", reply->option, nbd_opt_lookup(reply->option));
         break;

     default:
-        error_setg(errp, "Unknown error code when asking for option %" PRIx32
+        error_setg(errp, "Unknown error code when asking for option %" PRIu32
                    " (%s)", reply->option, nbd_opt_lookup(reply->option));
         break;
     }
@@ -378,8 +378,8 @@ static int nbd_opt_go(QIOChannel *ioc, const char *wantname,
             return 1;
         }
         if (reply.type != NBD_REP_INFO) {
-            error_setg(errp, "unexpected reply type %" PRIx32
-                       " (%s), expected %x",
+            error_setg(errp, "unexpected reply type 0x%" PRIx32
+                       " (%s), expected 0x%x",
                        reply.type, nbd_rep_lookup(reply.type), NBD_REP_INFO);
             nbd_send_opt_abort(ioc);
             return -1;
@@ -534,7 +534,7 @@ static int nbd_request_simple_option(QIOChannel *ioc, int opt, Error **errp)

     if (reply.type != NBD_REP_ACK) {
         error_setg(errp, "Server answered option %d (%s) with unexpected "
-                   "reply %" PRIx32 " (%s)", opt, nbd_opt_lookup(opt),
+                   "reply 0x%" PRIx32 " (%s)", opt, nbd_opt_lookup(opt),
                    reply.type, nbd_rep_lookup(reply.type));
         nbd_send_opt_abort(ioc);
         return -1;
diff --git a/nbd/server.c b/nbd/server.c
index 112e3f69dff..4990a5826e6 100644
--- a/nbd/server.c
+++ b/nbd/server.c
@@ -806,7 +806,7 @@ static int nbd_negotiate_options(NBDClient *client, uint16_t myflags,

             default:
                 ret = nbd_opt_drop(client, NBD_REP_ERR_UNSUP, errp,
-                                   "Unsupported option 0x%" PRIx32 " (%s)",
+                                   "Unsupported option %" PRIu32 " (%s)",
                                    option, nbd_opt_lookup(option));
                 break;
             }
@@ -822,7 +822,7 @@ static int nbd_negotiate_options(NBDClient *client, uint16_t myflags,
                                                         errp);

             default:
-                error_setg(errp, "Unsupported option 0x%" PRIx32 " (%s)",
+                error_setg(errp, "Unsupported option %" PRIu32 " (%s)",
                            option, nbd_opt_lookup(option));
                 return -EINVAL;
             }
diff --git a/nbd/trace-events b/nbd/trace-events
index 2b8268ce8c3..ac19a366aac 100644
--- a/nbd/trace-events
+++ b/nbd/trace-events
@@ -1,7 +1,7 @@
 # nbd/client.c
 nbd_send_option_request(uint32_t opt, const char *name, uint32_t len) "Sending option request %" PRIu32" (%s), len %" PRIu32
-nbd_receive_option_reply(uint32_t option, const char *optname, uint32_t type, const char *typename, uint32_t length) "Received option reply 0x%" PRIx32" (%s), type 0x%" PRIx32" (%s), len %" PRIu32
-nbd_reply_err_unsup(uint32_t option, const char *name) "server doesn't understand request 0x%" PRIx32 " (%s), attempting fallback"
+nbd_receive_option_reply(uint32_t option, const char *optname, uint32_t type, const char *typename, uint32_t length) "Received option reply %" PRIu32" (%s), type 0x%" PRIx32" (%s), len %" PRIu32
+nbd_reply_err_unsup(uint32_t option, const char *name) "server doesn't understand request %" PRIu32 " (%s), attempting fallback"
 nbd_opt_go_start(const char *name) "Attempting NBD_OPT_GO for export '%s'"
 nbd_opt_go_success(void) "Export is good to go"
 nbd_opt_go_info_unknown(int info, const char *name) "Ignoring unknown info %d (%s)"
@@ -33,7 +33,7 @@ nbd_receive_structured_reply_chunk(uint16_t flags, uint16_t type, const char *na
 nbd_unknown_error(int err) "Squashing unexpected error %d to EINVAL"

 # nbd/server.c
-nbd_negotiate_send_rep_len(uint32_t opt, const char *optname, uint32_t type, const char *typename, uint32_t len) "Reply opt=0x%" PRIx32 " (%s), type=0x%" PRIx32 " (%s), len=%" PRIu32
+nbd_negotiate_send_rep_len(uint32_t opt, const char *optname, uint32_t type, const char *typename, uint32_t len) "Reply opt=%" PRIu32 " (%s), type=0x%" PRIx32 " (%s), len=%" PRIu32
 nbd_negotiate_send_rep_err(const char *msg) "sending error message \"%s\""
 nbd_negotiate_send_rep_list(const char *name, const char *desc) "Advertising export name '%s' description '%s'"
 nbd_negotiate_handle_export_name(void) "Checking length"
@@ -46,7 +46,7 @@ nbd_negotiate_handle_starttls(void) "Setting up TLS"
 nbd_negotiate_handle_starttls_handshake(void) "Starting TLS handshake"
 nbd_negotiate_options_flags(uint32_t flags) "Received client flags 0x%" PRIx32
 nbd_negotiate_options_check_magic(uint64_t magic) "Checking opts magic 0x%" PRIx64
-nbd_negotiate_options_check_option(uint32_t option, const char *name) "Checking option 0x%" PRIx32 " (%s)"
+nbd_negotiate_options_check_option(uint32_t option, const char *name) "Checking option %" PRIu32 " (%s)"
 nbd_negotiate_begin(void) "Beginning negotiation"
 nbd_negotiate_old_style(uint64_t size, unsigned flags) "advertising size %" PRIu64 " and flags 0x%x"
 nbd_negotiate_new_style_size_flags(uint64_t size, unsigned flags) "advertising size %" PRIu64 " and flags 0x%x"
-- 
2.14.3

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

* Re: [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part
  2018-02-16 17:01       ` Eric Blake
@ 2018-03-01 11:36         ` Vladimir Sementsov-Ogievskiy
  0 siblings, 0 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-01 11:36 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

16.02.2018 20:01, Eric Blake wrote:
> On 02/16/2018 08:43 AM, Vladimir Sementsov-Ogievskiy wrote:
>> 16.02.2018 16:21, Eric Blake wrote:
>>> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>>>> Minimal realization: only one extent in server answer is supported.
>>>>
>>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>>> ---
>
>>> Again, function comments are useful.
>>>
>>>> +    if (query[0] == '\0' || strcmp(query, "allocation") == 0) {
>>>> +        /* Note: empty query should select all contexts within base
>>>> +         * namespace. */
>>>> +        meta->base_allocation = true;
>>>
>>> From the client perspective, this handling of the empty leaf-name 
>>> works well for NBD_OPT_LIST_META_CONTEXT (I want to see what leaf 
>>> nodes the server supports), but not so well for 
>>> NBD_OPT_SET_META_CONTEXT (asking the server to send ALL base 
>>> allocations, even when I don't necessarily know how to interpret 
>>> anything other than base:allocation, is a waste). So this function 
>>> needs a bool parameter that says whether it is being invoked from 
>>> _LIST (empty string okay, to advertise ALL base leaf names back to 
>>> client, which for now is just base:allocation) or from _SET (empty 
>>> string is ignored as invalid; client has to specifically ask for 
>>> base:allocation by name).
>>
>> "empty string is ignored as invalid", hm, do we have this in spec? I 
>> think SET and LIST must select exactly same sets of contexts.
>
> No, it is specifically NOT intended that SET and LIST have to produce 
> the same set of contexts; although I do see your point that as 
> currently written, it does not appear to require SET to ignore "base:" 
> or to treat it as an error.  At any rate, the spec gives the example of:
>
>> In either case, however, for any given namespace the server MAY, 
>> instead of exhaustively listing every matching context available to 
>> select (or every context available to select where no query is 
>> given), send sufficient context records back to allow a client with 
>> knowledge of the namespace to select any context. This may be helpful 
>> where a client can construct algorithmic queries. For instance, a 
>> client might reply simply with the namespace with no leaf-name (e.g. 
>> 'X-FooBar:') or with a range of values (e.g. 
>> 'X-ModifiedDate:20160310-20161214'). The semantics of such a reply 
>> are a matter for the definition of the namespace. However each 
>> namespace returned MUST begin with the relevant namespace, followed 
>> by a colon, and then other UTF-8 characters, with the entire string 
>> following the restrictions for strings set out earlier in this document.
>
> with the intent being that for some namespaces, it may be easy to 
> perform an algorithmic query via _LIST to see what ranges are 
> supported, but that you cannot select ALL elements in the range 
> simultaneously. The empty query for _LIST exists to enumerate what is 
> supported, but does not have to equate to an empty query for _SET 
> selecting everything possible.  I could even see it being possible to 
> have some round-trips, depending on the namespace (of course, any 
> namespace other than "base:" will be tightly coordinated between both 
> client and server, so they understand each other - the point was that 
> the NBD spec didn't want to constrain what a client and server could 
> do as long as they stay within the generic framework):
>
> C> LIST ""
> S> REPLY "base:allocation" id 0
> S> REPLY "X-FooBar:" id 0
> S> ACK
> C> LIST "X-FooBar:"
> S> REPLY "X-FooBar:A_Required", id 0
> S> REPLY "X-FooBar:A_Min=100", id 0
> S> REPLY "X-FooBar:A_Max=200", id 0
> S> REPLY "X-FooBar:B_Default=300", id 0
> S> REPLY "X-FooBar:B_Min=300", id 0
> S> REPLY "X-FooBar:B_Max=400", id 0
> S> ACK
> C> SET "X-FooBar:A=150" "base:allocation"
> S> REPLY "X-FooBar:A=150,B=300", id 1
> S> REPLY "base:allocation", id 2
> S> ACK
>
> where the global query of all available contexts merely lists that 
> X-FooBar: is understood, but that a specific query is needed for more 
> details (to avoid the client having to parse those specifics if it 
> doesn't care about X-FooBar:), and the specific query sets up the 
> algorithmic description (parameter A is required, between 100 and 200; 
> parameter B is optional, between 300 and 400, defaulting to 300), and 
> the final SET gives the actual request (A given a value, B left to its 
> default; but the reply names the entire context rather than repeating 
> the shorter request).  So the spec is written to permit something like 
> that for third-party namespaces, while also trying to be very specific 
> about the "base:" context as that is the one that needs the most 
> interoperability.
>
>> It is strange behavior of client to set "base:", but it is its 
>> decision. And I don't thing that it is invalid.
>
> For LIST, querying "base:" makes total sense (for the sake of example, 
> we may add "base:frob" down the road that does something new.  Being 
> able to LIST whether "base:" turns into just "base:allocation" or into 
> "base:allocation"+"base:frob" may be useful to a client that 
> understands both formats and wants to probe if the server is new; and 
> even for a client right now, the client can gracefully note that it 
> doesn't want to select "base:frob").  But for SET, it does not (if 
> "base:" turns into "base:allocation" + "base:frob" down the road, then 
> the server is wasting time preparing the response to "base:frob" for 
> every NBD_CMD_BLOCK_STATUS, and the client is wasting time unpacking 
> from the wire and ignoring it), so having the empty query work on LIST 
> but not on SET makes sense.

Ok, understand, you are right, and, correspondingly,

>
>> Formally we may answer with NBD_REP_ERR_TOO_BIG, but it will look 
>> weird, as client see that both base: and base:allocation returns 
>> _one_ context, but in one case it is too big. But if we will have 
>> several base: contextes, server may fairly answer with 
>> NBD_REP_ERR_TOO_BIG.
>
> Hmm, you have a point that while a client can ask for "namespace:", 
> the server should always respond with "namespace:leaf" for the actual 
> contexts that it supports/selects, so that the client knows which 
> leaves it actually got, if it does not fail with ERR_TOO_BIG.  You are 
> also right that failing with ERR_TOO_BIG for "base:" seems odd, but it 
> may make more sense for other namespaces.

_INVALID is ok here.

>
>>
>> So, I think for now the code is ok.
>
> Then this is probably worth something to bring up on the NBD list, if 
> we need to tweak wording to be more explicit (whether we should 
> allow/forbid wildcards during SET, or if wildcard queries are intended 
> only for LIST).  Sounds like I have more spec emails to write to the 
> NBD list.

So, code is not ok, I'll fix)

>
>>
>> Also, I don't see NBD_REP_ERR_TOO_BIG possible reply in 
>> NBD_OPT_LIST_META_CONTEXT description. Should it be here?
>
> Yeah, that's probably also worth adding to the upstream spec, even 
> though it already encourages LIST results to send compressed 
> information back that allows a client to contruct valid specific 
> queries, rather than an exhaustive list of selecting everything possible.
>
>>>> +/* nbd_negotiate_meta_query
>>>> + * Return -errno on I/O error, 0 if option was completely handled by
>>>> + * sending a reply about inconsistent lengths, or 1 on success. */
>>>> +static int nbd_negotiate_meta_query(NBDClient *client,
>>>> +                                    NBDExportMetaContexts *meta, 
>>>> Error **errp)
>>>> +{
>>>> +    int ret;
>>>> +    char *query, *colon, *namespace, *subquery;
>>>
>>> Is it worth stack-allocating query here, so you don't have to 
>>> g_free() it later?  NBD limits the maximum string to 4k, which is a 
>>> little bit big for stack allocation (on an operating system with 4k 
>>> pages, allocating more than 4k on the stack in one function risks 
>>> missing the guard page on stack overflow), but we also have the 
>>> benefit that we KNOW that the set of meta-context namespaces that we 
>>> support have a much smaller maximum limit of what we even care about.
>>
>> it is not stack allocated, nbd_alloc_read_size_string calls g_malloc.
>
> Hence my question - do we NEED the malloc'd version, or can we get 
> away with a stack-allocated space?  Although I then revised my 
> question...

ohm, just misread, will try.

>
>>
>>>
>>>> +
>>>> +    ret = nbd_alloc_read_size_string(client, &query, errp);
>>>> +    if (ret <= 0) {
>>>> +        return ret;
>>>> +    }
>>>> +
>>>> +    colon = strchr(query, ':');
>>>> +    if (colon == NULL) {
>>>> +        ret = nbd_opt_invalid(client, errp, "no colon in query");
>>>> +        goto out;
>>>
>>> Hmm, that puts a slight wrinkle into my proposal, or else maybe it 
>>> is something I should bring up on the NBD list.  If we only read 5 
>>> characters (because the max namespace WE support is "base:"), but a 
>>> client asks for namespace "X-longname:", we should gracefully ignore 
>>> the client's request; while we still want to reply with an error to 
>>> a client that asks for "garbage" with no colon at all. The question 
>>> for the NBD spec, then, is whether detecting bad client requests 
>>> that didn't use colon is mandatory for the server (meaning we MUST 
>>> read the entire namespace request, and search for the colon) or 
>>> merely best effort (we only have to read 5 characters, and if we 
>>> silently ignore instead of diagnose a bad namespace request that was 
>>> longer than that, oh well). Worded from the client, it switches to a 
>>> question of whether the client should expect the server to diagnose 
>>> all requests, or must be prepared for the server to ignore requests 
>>> even where those requests are bogus. Or, the NBD spec may change 
>>> slightly to pass namespace and leafname as separate fields, both 
>>> with lengths, rather than a colon, to make it easier for the server 
>>> to skip over an unknown namespace/leaf pair without having to parse 
>>> whether a colon was present. I'll send that in a separate email (the 
>>> upstream NBD list doesn't need to see all my review comments on this 
>>> thread).
>
> ... in light of this thread now on the NBD list.
>
>>
>> Thank you for careful review!
>
> No problem. We still have some things to sort out on the NBD list as 
> well, but I want to make sure we get something that is likely to work 
> well with other implementations (I'm also trying, on the side, to get 
> nbdkit to support structured reads so I have something available for 
> testing cross-implementation support, but it is slow going).
>


-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 5/9] nbd/client: fix error messages in nbd_handle_reply_err
  2018-02-16 17:38   ` Eric Blake
@ 2018-03-01 11:38     ` Vladimir Sementsov-Ogievskiy
  0 siblings, 0 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-01 11:38 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

16.02.2018 20:38, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> 1. NBD_REP_ERR_INVALID is not only about length, so, make message more
>>     general
>>
>> 2. hex format is not very good: it's hard to read something like
>>     "option a (set meta context)", so switch to dec.
>
> It would be okay as option 0xa; I also want to be sure we match the 
> output in server traces with the output in client traces; for example, 
> I found:
>
> nbd/server.c-                error_setg(errp, "Unsupported option 0x%" 
> PRIx32 " (%s)",
> nbd/server.c:                           option, nbd_opt_lookup(option));
>
> So we want consistency through all the call sites, before this patch 
> is ready to go, although I agree we need it.
>

I think, decimal format for NBD constants is better, as it used in the spec.

-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 9/9] iotests: new test 206 for NBD BLOCK_STATUS
  2018-02-16 21:02   ` Eric Blake
@ 2018-03-01 11:51     ` Vladimir Sementsov-Ogievskiy
  2018-03-01 18:23       ` Eric Blake
  0 siblings, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-01 11:51 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

17.02.2018 00:02, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>>   tests/qemu-iotests/206     | 34 ++++++++++++++++++++++++++++++++++
>>   tests/qemu-iotests/206.out |  2 ++
>>   tests/qemu-iotests/group   |  1 +
>>   3 files changed, 37 insertions(+)
>>   create mode 100644 tests/qemu-iotests/206
>>   create mode 100644 tests/qemu-iotests/206.out
>
> It's a race! Kevin already has test 206 and 207 claimed in his pending 
> series:
> https://lists.gnu.org/archive/html/qemu-devel/2018-02/msg02363.html
> Whoever loses gets to rebase and renumber (or the maintainer on their 
> behalf) ;)


is there any simple method to get a number for new test? Any way to 
avoid such situations?

>
>>
>> diff --git a/tests/qemu-iotests/206 b/tests/qemu-iotests/206
>> new file mode 100644
>
> Oops, you forgot to mark this executable.  And oops, I forgot to flag 
> that on test 205.  Other inconsistent tests: 096, 124, 129, 132, 136, 
> 139, 148, 152, 163. Separate cleanup patch coming up soon.
>
>> index 0000000000..259e991ec6
>> --- /dev/null
>> +++ b/tests/qemu-iotests/206
>> @@ -0,0 +1,34 @@
>> +#!/usr/bin/env python
>> +#
>> +# Tests for NBD BLOCK_STATUS extension
>> +#
>
>> +import iotests
>> +from iotests import qemu_img_create, qemu_io, qemu_img_verbose, 
>> qemu_nbd, \
>> +                    file_path
>> +
>> +iotests.verify_image_format(supported_fmts=['qcow2'])
>
> Don't we also need to blacklist v2 files (and only operate on v3 or 
> newer), since the behavior of zero clusters is much worse on v2 images?

hm. I think if test passed, all is ok. qemu-img creates good enough 
image to pass the test..

>
>> +
>> +disk, nbd_sock = file_path('disk', 'nbd-sock')
>> +nbd_uri = 'nbd+unix:///exp?socket=' + nbd_sock
>> +
>> +qemu_img_create('-f', iotests.imgfmt, disk, '1M')
>> +qemu_io('-f', iotests.imgfmt, '-c', 'write 0 512K', disk)
>
> Hopefully large enough for all the major filesystems with sparse 
> support to show half-data, half-hole, and not run into any weird 
> issues where granularity differences between filesystems change the 
> outcome.
>
>> +
>> +qemu_nbd('-k', nbd_sock, '-x', 'exp', '-f', iotests.imgfmt, disk)
>> +qemu_img_verbose('map', '-f', 'raw', '--output=json', nbd_uri)
>> diff --git a/tests/qemu-iotests/206.out b/tests/qemu-iotests/206.out
>> new file mode 100644
>> index 0000000000..0d29724e84
>> --- /dev/null
>> +++ b/tests/qemu-iotests/206.out
>> @@ -0,0 +1,2 @@
>> +[{ "start": 0, "length": 524288, "depth": 0, "zero": false, "data": 
>> true},
>> +{ "start": 524288, "length": 524288, "depth": 0, "zero": true, 
>> "data": false}]
>
> But definite evidence of getting block status over NBD! Progress!
>
> And kudos for producing an .out file that I can actually read and 
> reproduce without the aid of python (in contrast to the more 
> "unit-test"-y ones like 205, where we had a big long side-discussion 
> about that. No need to repeat it here).
>
>> diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
>> index a2dfe79d86..2c3925566a 100644
>> --- a/tests/qemu-iotests/group
>> +++ b/tests/qemu-iotests/group
>> @@ -202,3 +202,4 @@
>>   203 rw auto
>>   204 rw auto quick
>>   205 rw auto quick
>> +206 rw auto quick
>>
>


-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH v2 1/2] nbd: BLOCK_STATUS constants
  2018-02-26 16:57   ` [Qemu-devel] [PATCH v2 1/2] nbd: BLOCK_STATUS constants Eric Blake
@ 2018-03-01 12:06     ` Vladimir Sementsov-Ogievskiy
  0 siblings, 0 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-01 12:06 UTC (permalink / raw)
  To: Eric Blake, qemu-devel
  Cc: Paolo Bonzini, Kevin Wolf, Max Reitz, open list:Network Block Dev...

26.02.2018 19:57, Eric Blake wrote:
> From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>
> Expose the new constants and structs that will be used by both
> server and client implementations of NBD_CMD_BLOCK_STATUS (the
> command is currently experimental at
> https://github.com/NetworkBlockDevice/nbd/blob/extension-blockstatus/doc/proto.md
> but will hopefully be stabilized soon).
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> Message-Id: <1518702707-7077-4-git-send-email-vsementsov@virtuozzo.com>
> [eblake: split from larger patch on server implementation]
> Signed-off-by: Eric Blake <eblake@redhat.com>

ok, with NBD_REPLY_TYPE_BLOCK_STATUS switched back to 5, as it was decided.


-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH v2 2/2] nbd/client: fix error messages in nbd_handle_reply_err
  2018-02-26 16:57   ` [Qemu-devel] [PATCH v2 2/2] nbd/client: fix error messages in nbd_handle_reply_err Eric Blake
@ 2018-03-01 12:10     ` Vladimir Sementsov-Ogievskiy
  2018-03-01 18:25       ` Eric Blake
  0 siblings, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-01 12:10 UTC (permalink / raw)
  To: Eric Blake, qemu-devel; +Cc: Paolo Bonzini, open list:Network Block Dev...

26.02.2018 19:57, Eric Blake wrote:
> From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>
> 1. NBD_REP_ERR_INVALID is not only about length, so, make message more
>     general
>
> 2. hex format is not very good: it's hard to read something like
>     "option a (set meta context)", so switch to dec.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> Message-Id: <1518702707-7077-6-git-send-email-vsementsov@virtuozzo.com>
> [eblake: expand scope of patch: ALL uses of nbd_opt_lookup are now
> decimal, all uses of nbd_rep_lookup are prefixed hex]
> Signed-off-by: Eric Blake <eblake@redhat.com>

one thought: isn't it better to have all NBD constants in dec, like in spec?

> ---
>   nbd/client.c     | 20 ++++++++++----------
>   nbd/server.c     |  4 ++--
>   nbd/trace-events |  8 ++++----
>   3 files changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/nbd/client.c b/nbd/client.c
> index 89f80f95905..756e110f895 100644
> --- a/nbd/client.c
> +++ b/nbd/client.c
> @@ -180,22 +180,22 @@ static int nbd_handle_reply_err(QIOChannel *ioc, NBDOptionReply *reply,
>           goto cleanup;
>
>       case NBD_REP_ERR_POLICY:
> -        error_setg(errp, "Denied by server for option %" PRIx32 " (%s)",
> +        error_setg(errp, "Denied by server for option %" PRIu32 " (%s)",
>                      reply->option, nbd_opt_lookup(reply->option));
>           break;
>
>       case NBD_REP_ERR_INVALID:
> -        error_setg(errp, "Invalid data length for option %" PRIx32 " (%s)",
> +        error_setg(errp, "Invalid parameters for option %" PRIu32 " (%s)",
>                      reply->option, nbd_opt_lookup(reply->option));
>           break;
>
>       case NBD_REP_ERR_PLATFORM:
> -        error_setg(errp, "Server lacks support for option %" PRIx32 " (%s)",
> +        error_setg(errp, "Server lacks support for option %" PRIu32 " (%s)",
>                      reply->option, nbd_opt_lookup(reply->option));
>           break;
>
>       case NBD_REP_ERR_TLS_REQD:
> -        error_setg(errp, "TLS negotiation required before option %" PRIx32
> +        error_setg(errp, "TLS negotiation required before option %" PRIu32
>                      " (%s)", reply->option, nbd_opt_lookup(reply->option));
>           break;
>
> @@ -204,17 +204,17 @@ static int nbd_handle_reply_err(QIOChannel *ioc, NBDOptionReply *reply,
>           break;
>
>       case NBD_REP_ERR_SHUTDOWN:
> -        error_setg(errp, "Server shutting down before option %" PRIx32 " (%s)",
> +        error_setg(errp, "Server shutting down before option %" PRIu32 " (%s)",
>                      reply->option, nbd_opt_lookup(reply->option));
>           break;
>
>       case NBD_REP_ERR_BLOCK_SIZE_REQD:
> -        error_setg(errp, "Server requires INFO_BLOCK_SIZE for option %" PRIx32
> +        error_setg(errp, "Server requires INFO_BLOCK_SIZE for option %" PRIu32
>                      " (%s)", reply->option, nbd_opt_lookup(reply->option));
>           break;
>
>       default:
> -        error_setg(errp, "Unknown error code when asking for option %" PRIx32
> +        error_setg(errp, "Unknown error code when asking for option %" PRIu32
>                      " (%s)", reply->option, nbd_opt_lookup(reply->option));
>           break;
>       }
> @@ -378,8 +378,8 @@ static int nbd_opt_go(QIOChannel *ioc, const char *wantname,
>               return 1;
>           }
>           if (reply.type != NBD_REP_INFO) {
> -            error_setg(errp, "unexpected reply type %" PRIx32
> -                       " (%s), expected %x",
> +            error_setg(errp, "unexpected reply type 0x%" PRIx32
> +                       " (%s), expected 0x%x",
>                          reply.type, nbd_rep_lookup(reply.type), NBD_REP_INFO);
>               nbd_send_opt_abort(ioc);
>               return -1;
> @@ -534,7 +534,7 @@ static int nbd_request_simple_option(QIOChannel *ioc, int opt, Error **errp)
>
>       if (reply.type != NBD_REP_ACK) {
>           error_setg(errp, "Server answered option %d (%s) with unexpected "
> -                   "reply %" PRIx32 " (%s)", opt, nbd_opt_lookup(opt),
> +                   "reply 0x%" PRIx32 " (%s)", opt, nbd_opt_lookup(opt),
>                      reply.type, nbd_rep_lookup(reply.type));
>           nbd_send_opt_abort(ioc);
>           return -1;
> diff --git a/nbd/server.c b/nbd/server.c
> index 112e3f69dff..4990a5826e6 100644
> --- a/nbd/server.c
> +++ b/nbd/server.c
> @@ -806,7 +806,7 @@ static int nbd_negotiate_options(NBDClient *client, uint16_t myflags,
>
>               default:
>                   ret = nbd_opt_drop(client, NBD_REP_ERR_UNSUP, errp,
> -                                   "Unsupported option 0x%" PRIx32 " (%s)",
> +                                   "Unsupported option %" PRIu32 " (%s)",
>                                      option, nbd_opt_lookup(option));
>                   break;
>               }
> @@ -822,7 +822,7 @@ static int nbd_negotiate_options(NBDClient *client, uint16_t myflags,
>                                                           errp);
>
>               default:
> -                error_setg(errp, "Unsupported option 0x%" PRIx32 " (%s)",
> +                error_setg(errp, "Unsupported option %" PRIu32 " (%s)",
>                              option, nbd_opt_lookup(option));
>                   return -EINVAL;
>               }
> diff --git a/nbd/trace-events b/nbd/trace-events
> index 2b8268ce8c3..ac19a366aac 100644
> --- a/nbd/trace-events
> +++ b/nbd/trace-events
> @@ -1,7 +1,7 @@
>   # nbd/client.c
>   nbd_send_option_request(uint32_t opt, const char *name, uint32_t len) "Sending option request %" PRIu32" (%s), len %" PRIu32
> -nbd_receive_option_reply(uint32_t option, const char *optname, uint32_t type, const char *typename, uint32_t length) "Received option reply 0x%" PRIx32" (%s), type 0x%" PRIx32" (%s), len %" PRIu32
> -nbd_reply_err_unsup(uint32_t option, const char *name) "server doesn't understand request 0x%" PRIx32 " (%s), attempting fallback"
> +nbd_receive_option_reply(uint32_t option, const char *optname, uint32_t type, const char *typename, uint32_t length) "Received option reply %" PRIu32" (%s), type 0x%" PRIx32" (%s), len %" PRIu32
> +nbd_reply_err_unsup(uint32_t option, const char *name) "server doesn't understand request %" PRIu32 " (%s), attempting fallback"
>   nbd_opt_go_start(const char *name) "Attempting NBD_OPT_GO for export '%s'"
>   nbd_opt_go_success(void) "Export is good to go"
>   nbd_opt_go_info_unknown(int info, const char *name) "Ignoring unknown info %d (%s)"
> @@ -33,7 +33,7 @@ nbd_receive_structured_reply_chunk(uint16_t flags, uint16_t type, const char *na
>   nbd_unknown_error(int err) "Squashing unexpected error %d to EINVAL"
>
>   # nbd/server.c
> -nbd_negotiate_send_rep_len(uint32_t opt, const char *optname, uint32_t type, const char *typename, uint32_t len) "Reply opt=0x%" PRIx32 " (%s), type=0x%" PRIx32 " (%s), len=%" PRIu32
> +nbd_negotiate_send_rep_len(uint32_t opt, const char *optname, uint32_t type, const char *typename, uint32_t len) "Reply opt=%" PRIu32 " (%s), type=0x%" PRIx32 " (%s), len=%" PRIu32
>   nbd_negotiate_send_rep_err(const char *msg) "sending error message \"%s\""
>   nbd_negotiate_send_rep_list(const char *name, const char *desc) "Advertising export name '%s' description '%s'"
>   nbd_negotiate_handle_export_name(void) "Checking length"
> @@ -46,7 +46,7 @@ nbd_negotiate_handle_starttls(void) "Setting up TLS"
>   nbd_negotiate_handle_starttls_handshake(void) "Starting TLS handshake"
>   nbd_negotiate_options_flags(uint32_t flags) "Received client flags 0x%" PRIx32
>   nbd_negotiate_options_check_magic(uint64_t magic) "Checking opts magic 0x%" PRIx64
> -nbd_negotiate_options_check_option(uint32_t option, const char *name) "Checking option 0x%" PRIx32 " (%s)"
> +nbd_negotiate_options_check_option(uint32_t option, const char *name) "Checking option %" PRIu32 " (%s)"
>   nbd_negotiate_begin(void) "Beginning negotiation"
>   nbd_negotiate_old_style(uint64_t size, unsigned flags) "advertising size %" PRIu64 " and flags 0x%x"
>   nbd_negotiate_new_style_size_flags(uint64_t size, unsigned flags) "advertising size %" PRIu64 " and flags 0x%x"


-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 9/9] iotests: new test 206 for NBD BLOCK_STATUS
  2018-03-01 11:51     ` Vladimir Sementsov-Ogievskiy
@ 2018-03-01 18:23       ` Eric Blake
  0 siblings, 0 replies; 50+ messages in thread
From: Eric Blake @ 2018-03-01 18:23 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 03/01/2018 05:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> 17.02.2018 00:02, Eric Blake wrote:
>> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> ---
>>>   tests/qemu-iotests/206     | 34 ++++++++++++++++++++++++++++++++++
>>>   tests/qemu-iotests/206.out |  2 ++
>>>   tests/qemu-iotests/group   |  1 +
>>>   3 files changed, 37 insertions(+)
>>>   create mode 100644 tests/qemu-iotests/206
>>>   create mode 100644 tests/qemu-iotests/206.out
>>
>> It's a race! Kevin already has test 206 and 207 claimed in his pending 
>> series:
>> https://lists.gnu.org/archive/html/qemu-devel/2018-02/msg02363.html
>> Whoever loses gets to rebase and renumber (or the maintainer on their 
>> behalf) ;)
> 
> 
> is there any simple method to get a number for new test? Any way to 
> avoid such situations?

Short of searching the mailing list for what numbers have already been 
mentioned, not really.

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

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

* Re: [Qemu-devel] [PATCH v2 2/2] nbd/client: fix error messages in nbd_handle_reply_err
  2018-03-01 12:10     ` Vladimir Sementsov-Ogievskiy
@ 2018-03-01 18:25       ` Eric Blake
  0 siblings, 0 replies; 50+ messages in thread
From: Eric Blake @ 2018-03-01 18:25 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel
  Cc: Paolo Bonzini, open list:Network Block Dev...

On 03/01/2018 06:10 AM, Vladimir Sementsov-Ogievskiy wrote:
> 26.02.2018 19:57, Eric Blake wrote:
>> From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>
>> 1. NBD_REP_ERR_INVALID is not only about length, so, make message more
>>     general
>>
>> 2. hex format is not very good: it's hard to read something like
>>     "option a (set meta context)", so switch to dec.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> Message-Id: <1518702707-7077-6-git-send-email-vsementsov@virtuozzo.com>
>> [eblake: expand scope of patch: ALL uses of nbd_opt_lookup are now
>> decimal, all uses of nbd_rep_lookup are prefixed hex]
>> Signed-off-by: Eric Blake <eblake@redhat.com>
> 
> one thought: isn't it better to have all NBD constants in dec, like in 
> spec?

Sure, I can make that change.

>> @@ -378,8 +378,8 @@ static int nbd_opt_go(QIOChannel *ioc, const char 
>> *wantname,
>>               return 1;
>>           }
>>           if (reply.type != NBD_REP_INFO) {
>> -            error_setg(errp, "unexpected reply type %" PRIx32
>> -                       " (%s), expected %x",
>> +            error_setg(errp, "unexpected reply type 0x%" PRIx32
>> +                       " (%s), expected 0x%x",
>>                          reply.type, nbd_rep_lookup(reply.type), 
>> NBD_REP_INFO);

That is, I'll respin with this and other nbd_rep_lookup()s using decimal 
output.


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

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

* Re: [Qemu-devel] [PATCH 1/9] nbd/server: add nbd_opt_invalid helper
  2018-02-15 22:01   ` Eric Blake
@ 2018-03-02 12:40     ` Vladimir Sementsov-Ogievskiy
  0 siblings, 0 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-02 12:40 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

16.02.2018 01:01, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> NBD_REP_ERR_INVALID is often parameter to nbd_opt_drop and it would
>> be used more in following patches. So, let's add a helper.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>>   nbd/server.c | 50 ++++++++++++++++++++++++++++++++++++--------------
>>   1 file changed, 36 insertions(+), 14 deletions(-)
>
> More than twice the lines added compared to what was removed, so it's 
> a tough call whether this refactoring makes a common pattern easier or 
> just adds burden in tracing what gets executed, just to remove a 
> parameter.  I'm not opposed to the patch, but want to see how it helps 
> the rest of the series.
>
> At any rate, the conversion itself is done correctly, so if we keep 
> the patch, it has earned:
>
> Reviewed-by: Eric Blake <eblake@redhat.com>
>
>
>>   +static int GCC_FMT_ATTR(4, 5)
>> +nbd_opt_drop(NBDClient *client, uint32_t type, Error **errp,
>> +             const char *fmt, ...)
>> +{
>> +    int ret;
>> +    va_list va;
>> +
>> +    va_start(va, fmt);
>> +    ret = nbd_opt_vdrop(client, type, errp, fmt, va);
>> +    va_end(va);
>> +
>> +    return ret;
>> +}
>> +
>> +static int GCC_FMT_ATTR(3, 4)
>> +nbd_opt_invalid(NBDClient *client, Error **errp, const char *fmt, ...)
>
> No documentation comments?
>
the function is obvious and is near to nbd_opt_vdrop.. do we really want 
a comment? And, then, what about seprate comment for nbd_opt_drop?

-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part
  2018-02-16 13:21   ` Eric Blake
  2018-02-16 14:43     ` Vladimir Sementsov-Ogievskiy
@ 2018-03-02 15:07     ` Vladimir Sementsov-Ogievskiy
  1 sibling, 0 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-02 15:07 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

16.02.2018 16:21, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> Minimal realization: only one extent in server answer is supported.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>
>

[...]

>> +        meta = &local_meta;
>> +    }
>> +
>> +    memset(meta, 0, sizeof(*meta));
>> +
>> +    ret = nbd_read_size_string(client, meta->export_name,
>> +                               NBD_MAX_NAME_SIZE, errp);
>
> Revisiting a question I raised in my first half review - you saved the 
> name as part of the struct because we have to later compare that the 
> final OPT_SET export name matches the request during OPT_GO (if they 
> don't match, then we have no contexts to serve after all).  So a 
> 'const char *' won't work, but maybe the struct could use a 'char *' 
> pointing to malloc'd storage rather than char[MAX_NAME] that reserves 
> array space that is mostly unused for the typical name that is much 
> shorter than the maximum name length.

Do these 256 bytes worth creating nbd_clear_meta function, to call it 
from client_put and on NBD_OPT_SET_META_CONTEXT, to clear previous meta? 
If yes, I'd prefer to postpone it to continuation about BLOCKSTATUS for 
dirty bitmaps, when I'll have to upgrade meta structure, to maintain 
dirty bitmaps.

>
>> +    if (ret <= 0) {
>> +        return ret;
>> +    }
>> +
>> +    exp = nbd_export_find(meta->export_name);
>> +    if (exp == NULL) {
>> +        return nbd_opt_invalid(client, errp,
>> +                               "export '%s' not present", 
>> meta->export_name);
>


-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 6/9] nbd: BLOCK_STATUS for standard get_block_status function: client part
  2018-02-16 20:40   ` Eric Blake
@ 2018-03-09 18:47     ` Vladimir Sementsov-Ogievskiy
  2018-03-12  9:06     ` Vladimir Sementsov-Ogievskiy
                       ` (3 subsequent siblings)
  4 siblings, 0 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-09 18:47 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

16.02.2018 23:40, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> Minimal realization: only one extent in server answer is supported.
>> Flag NBD_CMD_FLAG_REQ_ONE is used to force this behavior.

[...]

>> +    memcpy(extent, payload, sizeof(*extent));
>> +    be32_to_cpus(&extent->length);
>> +    be32_to_cpus(&extent->flags);
>
> Instead of doing a memcpy() and then in-place bit-swizzling, you could 
> do the swapping as part of assignment, for one less function call (and 
> make the code a bit easier to extend, if we later drop our REQ_ONE 
> limitation on only having one extent, because you'll advance payload 
> as needed):
>
> extent->length = payload_advance32(&payload);
> extent->flags = payload_advance32(&payload);

Aha, yes. The funny thing is that these are my own helpers.

>
> We should probably validate that the length field is a multiple of 
> min_block (if a server tells us that all operations must be 512-byte 
> aligned, then reports an extent that is smaller than 512 bytes, we 
> have no way to ask for the status of the second half of the sector). 
> Probably also something that needs to be explicitly stated in the NBD 
> spec. [1]
>
>> +
>> +    if (extent->length > orig_length) {
>> +        error_setg(errp, "Protocol error: server sent chunk 
>> exceeding requested"
>> +                         " region");
>> +        return -EINVAL;
>
> That matches the current spec wording, but I'm not sure I agree with 
> it - what's wrong with a server providing a final extent that extends 
> beyond the request, if the information was already available for free 
> (the classic example: if the server never replies with HOLE or ZERO, 
> then the entire file has the same status, so all requests could 
> trivially be replied to by taking the starting offset to the end of 
> the file as the returned length, rather than just clamping at the 
> requested length).

Maybe. But our already released clients not prepared to such change =(

But, on the other hand, this gives us possibility to understand, the the 
whole target (for backup/mirror) is zero in one request, skipping 
target-zeroing loop by 4gb chunks.. What about adding such possibility 
with an additionally negotiated option or something like this? (and 
don't we now have same possibility with something like INFO?)

>
>> +    }
>> +
>> +    return 0;
>> +}
>> +
>>   /* nbd_parse_error_payload
>>    * on success @errp contains message describing nbd error reply
>>    */

-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 7/9] iotests.py: tiny refactor: move system imports up
  2018-02-16 20:44   ` Eric Blake
@ 2018-03-09 18:54     ` Vladimir Sementsov-Ogievskiy
  0 siblings, 0 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-09 18:54 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

16.02.2018 23:44, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>>   tests/qemu-iotests/iotests.py | 5 +++--
>>   1 file changed, 3 insertions(+), 2 deletions(-)
>
> What breaks if they aren't moved?  But stylistically, this looks 
> reasonable; and can be merged independently of NBD stuff if someone 
> else wants.

This movement also make it a bit nearer to PEP8, as it dislike "E402 
module level import not at top of file", because of "sys.path.append" 
before imports.. So, I'd just saved as many imports as I could)

>
> Reviewed-by: Eric Blake <eblake@redhat.com>
>


-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 0/9] nbd block status base:allocation
  2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
                   ` (12 preceding siblings ...)
  2018-02-26 16:57 ` [Qemu-devel] [PATCH v2 0/2] nbd block status initial patches Eric Blake
@ 2018-03-09 19:08 ` Eric Blake
  2018-03-09 19:28   ` Vladimir Sementsov-Ogievskiy
  13 siblings, 1 reply; 50+ messages in thread
From: Eric Blake @ 2018-03-09 19:08 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
> Hi all.
> 
> Here is minimal realization of base:allocation context of NBD
> block-status extension, which allows to get block status through
> NBD.
> 
> Vladimir Sementsov-Ogievskiy (9):
>    nbd/server: add nbd_opt_invalid helper
>    nbd: change indenting in nbd.h
>    nbd: BLOCK_STATUS for standard get_block_status function: server part
>    block/nbd-client: save first fatal error in nbd_iter_error
>    nbd/client: fix error messages in nbd_handle_reply_err
>    nbd: BLOCK_STATUS for standard get_block_status function: client part
>    iotests.py: tiny refactor: move system imports up
>    iotests: add file_path helper
>    iotests: new test 206 for NBD BLOCK_STATUS

I'd really like to send a PULL request for NBD on Monday, in order to 
make the 2.12 softfreeze deadline (this is a new feature, so if we miss 
Tuesday, we have to wait until 2.13 or whatever the next release is 
called).  Where do you stand on rebasing this, and what help can I 
offer? (I know you have factored out some of the patches in another 
thread that I'm in the middle of reviewing as well; you can submit the 
later patches even before the earlier ones land, and use a 'Based-on:' 
tag in the cover letter to make it obvious the dependencies between series).

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

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

* Re: [Qemu-devel] [PATCH 0/9] nbd block status base:allocation
  2018-03-09 19:08 ` [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Eric Blake
@ 2018-03-09 19:28   ` Vladimir Sementsov-Ogievskiy
  0 siblings, 0 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-09 19:28 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

09.03.2018 22:08, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> Hi all.
>>
>> Here is minimal realization of base:allocation context of NBD
>> block-status extension, which allows to get block status through
>> NBD.
>>
>> Vladimir Sementsov-Ogievskiy (9):
>>    nbd/server: add nbd_opt_invalid helper
>>    nbd: change indenting in nbd.h
>>    nbd: BLOCK_STATUS for standard get_block_status function: server part
>>    block/nbd-client: save first fatal error in nbd_iter_error
>>    nbd/client: fix error messages in nbd_handle_reply_err
>>    nbd: BLOCK_STATUS for standard get_block_status function: client part
>>    iotests.py: tiny refactor: move system imports up
>>    iotests: add file_path helper
>>    iotests: new test 206 for NBD BLOCK_STATUS
>
> I'd really like to send a PULL request for NBD on Monday, in order to 
> make the 2.12 softfreeze deadline (this is a new feature, so if we 
> miss Tuesday, we have to wait until 2.13 or whatever the next release 
> is called).  Where do you stand on rebasing this, and what help can I 
> offer? (I know you have factored out some of the patches in another 
> thread that I'm in the middle of reviewing as well; you can submit the 
> later patches even before the earlier ones land, and use a 'Based-on:' 
> tag in the cover letter to make it obvious the dependencies between 
> series).
>

I'm now at start of "Re: [PATCH 6/9] nbd: BLOCK_STATUS for standard 
get_block_status function: client part", and I think rebasing on 
byte-based is too much for me for that moment (10:20 pm =). I'll do my 
best on Monday morning as early as I can.

-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 6/9] nbd: BLOCK_STATUS for standard get_block_status function: client part
  2018-02-16 20:40   ` Eric Blake
  2018-03-09 18:47     ` Vladimir Sementsov-Ogievskiy
@ 2018-03-12  9:06     ` Vladimir Sementsov-Ogievskiy
  2018-03-12  9:23     ` Vladimir Sementsov-Ogievskiy
                       ` (2 subsequent siblings)
  4 siblings, 0 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-12  9:06 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

16.02.2018 23:40, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> Minimal realization: only one extent in server answer is supported.
>> Flag NBD_CMD_FLAG_REQ_ONE is used to force this behavior.
>>
>> Tests 140, 147 and 205 are fixed due to now server failed on searching
>> export in context of NBD_OPT_SET_META_CONTEXT option negotiation.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>

[...]

>> +
>>   static int nbd_co_request(BlockDriverState *bs, NBDRequest *request,
>>                             QEMUIOVector *write_qiov)
>>   {
>> @@ -784,6 +878,50 @@ int nbd_client_co_pdiscard(BlockDriverState *bs, 
>> int64_t offset, int bytes)
>>       return nbd_co_request(bs, &request, NULL);
>>   }
>>   +int64_t coroutine_fn 
>> nbd_client_co_get_block_status(BlockDriverState *bs,
>> +                                                    int64_t sector_num,
>> +                                                    int nb_sectors, 
>> int *pnum,
>> + BlockDriverState **file)
>
> Needs rebasing on top of Kevin's block branch to use the byte-based 
> interface.  I also need to finish up my promised followups on that 
> series, as NBD (and other protocol drivers) should have consistent 
> behavior on what it means to report OFFSET_VALID (or whether that 
> should be limited to just format/filter drivers).

Looks like it's already in master, so I should just rebase on master.--

Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 6/9] nbd: BLOCK_STATUS for standard get_block_status function: client part
  2018-02-16 20:40   ` Eric Blake
  2018-03-09 18:47     ` Vladimir Sementsov-Ogievskiy
  2018-03-12  9:06     ` Vladimir Sementsov-Ogievskiy
@ 2018-03-12  9:23     ` Vladimir Sementsov-Ogievskiy
  2018-03-12  9:48     ` Vladimir Sementsov-Ogievskiy
  2018-03-12 13:13     ` Vladimir Sementsov-Ogievskiy
  4 siblings, 0 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-12  9:23 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

16.02.2018 23:40, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> Minimal realization: only one extent in server answer is supported.
>> Flag NBD_CMD_FLAG_REQ_ONE is used to force this behavior.
>>
>> Tests 140, 147 and 205 are fixed due to now server failed on searching
>> export in context of NBD_OPT_SET_META_CONTEXT option negotiation.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>

[...]

>
>> +++ b/nbd/client.c
>> @@ -594,6 +594,108 @@ static QIOChannel 
>> *nbd_receive_starttls(QIOChannel *ioc,
>>       return QIO_CHANNEL(tioc);
>>   }
>>   +/* nbd_negotiate_simple_meta_context:
>> + * Set one meta context. Simple means that reply must contain zero (not
>> + * negotiated) or one (negotiated) contexts. More contexts would be 
>> considered
>> + * as a protocol error.
>> + * return 1 for successful negotiation, context_id is set
>> + *        0 if operation is unsupported,
>> + *        -errno with errp set for any other error
>> + */
>
> Good enough for our first use.  Will obviously need improvements if we 
> support base:allocation AND dirty bitmap exposure at the same time, in 
> future patches ;)
>
>> +static int nbd_negotiate_simple_meta_context(QIOChannel *ioc,
>> +                                             const char *export,
>> +                                             const char *context,
>> +                                             uint32_t *context_id,
>> +                                             Error **errp)
>> +{
>> +    int ret;
>> +    NBDOptionReply reply;
>> +    uint32_t received_id;
>> +    bool received;
>> +    size_t export_len = strlen(export);
>> +    size_t context_len = strlen(context);
>> +    size_t data_len = 4 + export_len + 4 + 4 + context_len;

[...]

> +
>> +        if (nbd_read(ioc, &received_id, sizeof(received_id), errp) < 
>> 0) {
>> +            return -EIO;
>> +        }
>> +        be32_to_cpus(&received_id);
>> +
>> +        len = reply.length - sizeof(received_id);
>> +        name = g_malloc(len + 1);
>> +        if (nbd_read(ioc, name, len, errp) < 0) {
>> +            g_free(name);
>> +            return -EIO;
>> +        }
>> +        name[len] = '\0';
>> +        if (strcmp(context, name)) {
>> +            error_setg(errp, "Failed to negotiate meta context '%s', 
>> server "
>> +                       "answered with different context '%s'", context,
>> +                       name);
>
> This check may not be valid for other context namespaces, but is 
> correct for "base:allocation".

so, it is negotiation of "simple meta context". I'll improve somehow 
comment about the functions...




-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 6/9] nbd: BLOCK_STATUS for standard get_block_status function: client part
  2018-02-16 20:40   ` Eric Blake
                       ` (2 preceding siblings ...)
  2018-03-12  9:23     ` Vladimir Sementsov-Ogievskiy
@ 2018-03-12  9:48     ` Vladimir Sementsov-Ogievskiy
  2018-03-12 13:13     ` Vladimir Sementsov-Ogievskiy
  4 siblings, 0 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-12  9:48 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

16.02.2018 23:40, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> Minimal realization: only one extent in server answer is supported.
>> Flag NBD_CMD_FLAG_REQ_ONE is used to force this behavior.
>>
>> Tests 140, 147 and 205 are fixed due to now server failed on searching
>> export in context of NBD_OPT_SET_META_CONTEXT option negotiation.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>

[...]

>>   void nbd_client_detach_aio_context(BlockDriverState *bs)
>>   {
>>       NBDClientSession *client = nbd_get_client_session(bs);
>> @@ -828,6 +966,7 @@ int nbd_client_init(BlockDriverState *bs,
>>         client->info.request_sizes = true;
>>       client->info.structured_reply = true;
>> +    client->info.base_allocation = true;
>
> Hmm - the combination structured_reply = false and base_allocation = 
> true is bogus.  Then again, these two fields are in-out; left false 
> when handing over to the kernel NBD transmission phase (since the 
> kernel module does not yet support structured replies let alone block 
> status), and true when requested with qemu as the transmission driver 
> (since we want to use it if available).  I don't know if having a 
> single tri-state enum is any better than two bools (on input, it is 
> either all-or-none; on output, it is either none (old server), 
> structured reads only (qemu 2.11 server, for example), or all (this 
> series' server).
>


ohh, sorry for replying in so many emails.

about this: I'd prefer to leave it as is, and rethink (if needed) when 
implementing dirty-bitmaps context, because it's now obvious now, how it 
will be refactored for dirty bitmaps.



-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 8/9] iotests: add file_path helper
  2018-02-20  5:42     ` Jeff Cody
@ 2018-03-12 10:04       ` Vladimir Sementsov-Ogievskiy
  0 siblings, 0 replies; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-12 10:04 UTC (permalink / raw)
  To: Jeff Cody, Eric Blake
  Cc: qemu-devel, qemu-block, kwolf, pbonzini, den, mreitz

20.02.2018 08:42, Jeff Cody wrote:
> On Fri, Feb 16, 2018 at 02:46:35PM -0600, Eric Blake wrote:
>> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>>> Simple way to have auto generated filenames with auto clenup. Like
>> s/clenup/cleanup/
>>
>>> FilePath but without using 'with' statement and without additional
>>> indentation of the whole test.
>>>
>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> ---
>>>   tests/qemu-iotests/iotests.py | 32 ++++++++++++++++++++++++++++++++
>>>   1 file changed, 32 insertions(+)
>> Jeff, where do we stand on your iotests cleanups?  Is this something you
>> want to use?
>>
> This patch has niceties that my patch does not, in that explicit clean-up is
> not required.  This is also a slight design difference; my patch series
> explicitly avoided auto-cleanup, so that ./check could handle it, or
> (optionally) leave behind all the mouse droppings for later analysis, in the
> case of test failure.
>
> Ideally, I'd love clean-up to be optional; if a test fails, I'd like to have
> the option of examining all the intermediate files and output of the test
> (and once it resides in its own subdir, that is also side-affect free for
> the other tests).

Hmm. Now I think explicit clean-up (by ./chek, not by test) is better, 
at least for
just removing any files in TEST_DIR. Now it's often a problem to save 
test outputs
to debug it, and generic way to do it is good idea.. However, it may be 
cool to combine
both variants (so that, file_path will understand the option form Jeff's 
patches).

Anyway, for now I left this patch as is.

>
>>> diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
>>> index c1302a2f9b..f2d05ca3fd 100644
>>> --- a/tests/qemu-iotests/iotests.py
>>> +++ b/tests/qemu-iotests/iotests.py
>>> @@ -27,6 +27,7 @@ import struct
>>>   import json
>>>   import signal
>>>   import logging
>>> +import atexit
>>>   sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts'))
>>>   import qtest
>>> @@ -250,6 +251,37 @@ class FilePath(object):
>>>           return False
>>> +def file_path_remover():
>>> +    for path in reversed(file_path_remover.paths):
>>> +        try:
>>> +            os.remove(path)
>>> +        except OSError:
>>> +            pass
>>> +
>>> +
>>> +def file_path(*names):
>>> +    ''' Another way to get auto-generated filename that cleans itself up.
>>> +
>>> +    Use it as simple as:
>>> +
>>> +    img_a, img_b = file_path('a.img', 'b.img')
>>> +    sock = file_path('socket')
>>> +    '''
>>> +
>>> +    if not hasattr(file_path_remover, 'paths'):
>>> +        file_path_remover.paths = []
>>> +        atexit.register(file_path_remover)
>>> +
>>> +    paths = []
>>> +    for name in names:
>>> +        filename = '{0}-{1}'.format(os.getpid(), name)
>>> +        path = os.path.join(test_dir, filename)
>>> +        file_path_remover.paths.append(path)
>>> +        paths.append(path)
>>> +
>>> +    return paths[0] if len(paths) == 1 else paths
>>> +
>>> +
>>>   class VM(qtest.QEMUQtestMachine):
>>>       '''A QEMU VM'''
>>>
>> -- 
>> Eric Blake, Principal Software Engineer
>> Red Hat, Inc.           +1-919-301-3266
>> Virtualization:  qemu.org | libvirt.org
>>


-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 6/9] nbd: BLOCK_STATUS for standard get_block_status function: client part
  2018-02-16 20:40   ` Eric Blake
                       ` (3 preceding siblings ...)
  2018-03-12  9:48     ` Vladimir Sementsov-Ogievskiy
@ 2018-03-12 13:13     ` Vladimir Sementsov-Ogievskiy
  2018-03-12 14:00       ` Eric Blake
  4 siblings, 1 reply; 50+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2018-03-12 13:13 UTC (permalink / raw)
  To: Eric Blake, qemu-devel, qemu-block; +Cc: mreitz, kwolf, pbonzini, den

16.02.2018 23:40, Eric Blake wrote:
> On 02/15/2018 07:51 AM, Vladimir Sementsov-Ogievskiy wrote:
>> Minimal realization: only one extent in server answer is supported.
>> Flag NBD_CMD_FLAG_REQ_ONE is used to force this behavior.
>>
>> Tests 140, 147 and 205 are fixed due to now server failed on searching
>> export in context of NBD_OPT_SET_META_CONTEXT option negotiation.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>

[...]

> Instead of doing a memcpy() and then in-place bit-swizzling, you could 
> do the swapping as part of assignment, for one less function call (and 
> make the code a bit easier to extend, if we later drop our REQ_ONE 
> limitation on only having one extent, because you'll advance payload 
> as needed):
>
> extent->length = payload_advance32(&payload);
> extent->flags = payload_advance32(&payload);
>
> We should probably validate that the length field is a multiple of 
> min_block (if a server tells us that all operations must be 512-byte 
> aligned, then reports an extent that is smaller than 512 bytes, we 
> have no way to ask for the status of the second half of the sector). 
> Probably also something that needs to be explicitly stated in the NBD 
> spec. [1]

related question: what server should reply on zero-length request? I'll add

+     if (!bytes) {
+         *pnum = 0;
+         return 0;
+     }

to nbd_client_co_block_status, to prevent such situation, but looks like 
spec lacks the information.




-- 
Best regards,
Vladimir

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

* Re: [Qemu-devel] [PATCH 6/9] nbd: BLOCK_STATUS for standard get_block_status function: client part
  2018-03-12 13:13     ` Vladimir Sementsov-Ogievskiy
@ 2018-03-12 14:00       ` Eric Blake
  0 siblings, 0 replies; 50+ messages in thread
From: Eric Blake @ 2018-03-12 14:00 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, qemu-devel, qemu-block
  Cc: mreitz, kwolf, pbonzini, den

On 03/12/2018 08:13 AM, Vladimir Sementsov-Ogievskiy wrote:
>>
>> We should probably validate that the length field is a multiple of 
>> min_block (if a server tells us that all operations must be 512-byte 
>> aligned, then reports an extent that is smaller than 512 bytes, we 
>> have no way to ask for the status of the second half of the sector). 
>> Probably also something that needs to be explicitly stated in the NBD 
>> spec. [1]
> 
> related question: what server should reply on zero-length request? I'll add
> 
> +     if (!bytes) {
> +         *pnum = 0;
> +         return 0;
> +     }
> 
> to nbd_client_co_block_status, to prevent such situation, but looks like 
> spec lacks the information.

nbd.git commit ee926037 mentions that NBD_CMD_READ, _WRITE, _TRIM, and 
_WRITE_ZEROES have unspecified behavior for zero-length transactions; we 
should do the same for NBD_CMD_BLOCK_STATUS.  But in the meantime, 
handling it gracefully with a no-op reply (the way qemu.git commit 
ef8c887e handles 0-length structured read) is fine.

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

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

end of thread, other threads:[~2018-03-12 14:00 UTC | newest]

Thread overview: 50+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-15 13:51 [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Vladimir Sementsov-Ogievskiy
2018-02-15 13:51 ` [Qemu-devel] [PATCH 1/9] nbd/server: add nbd_opt_invalid helper Vladimir Sementsov-Ogievskiy
2018-02-15 22:01   ` Eric Blake
2018-03-02 12:40     ` Vladimir Sementsov-Ogievskiy
2018-02-15 13:51 ` [Qemu-devel] [PATCH 2/9] nbd: change indenting in nbd.h Vladimir Sementsov-Ogievskiy
2018-02-15 22:03   ` Eric Blake
2018-02-15 13:51 ` [Qemu-devel] [PATCH 3/9] nbd: BLOCK_STATUS for standard get_block_status function: server part Vladimir Sementsov-Ogievskiy
2018-02-15 23:02   ` Eric Blake
2018-02-16 11:09     ` Vladimir Sementsov-Ogievskiy
2018-02-16 11:45       ` Eric Blake
2018-02-16 13:21   ` Eric Blake
2018-02-16 14:43     ` Vladimir Sementsov-Ogievskiy
2018-02-16 17:01       ` Eric Blake
2018-03-01 11:36         ` Vladimir Sementsov-Ogievskiy
2018-03-02 15:07     ` Vladimir Sementsov-Ogievskiy
2018-02-15 13:51 ` [Qemu-devel] [PATCH 4/9] block/nbd-client: save first fatal error in nbd_iter_error Vladimir Sementsov-Ogievskiy
2018-02-16 17:35   ` Eric Blake
2018-02-15 13:51 ` [Qemu-devel] [PATCH 5/9] nbd/client: fix error messages in nbd_handle_reply_err Vladimir Sementsov-Ogievskiy
2018-02-16 17:38   ` Eric Blake
2018-03-01 11:38     ` Vladimir Sementsov-Ogievskiy
2018-02-15 13:51 ` [Qemu-devel] [PATCH 6/9] nbd: BLOCK_STATUS for standard get_block_status function: client part Vladimir Sementsov-Ogievskiy
2018-02-16 20:40   ` Eric Blake
2018-03-09 18:47     ` Vladimir Sementsov-Ogievskiy
2018-03-12  9:06     ` Vladimir Sementsov-Ogievskiy
2018-03-12  9:23     ` Vladimir Sementsov-Ogievskiy
2018-03-12  9:48     ` Vladimir Sementsov-Ogievskiy
2018-03-12 13:13     ` Vladimir Sementsov-Ogievskiy
2018-03-12 14:00       ` Eric Blake
2018-02-15 13:51 ` [Qemu-devel] [PATCH 7/9] iotests.py: tiny refactor: move system imports up Vladimir Sementsov-Ogievskiy
2018-02-16 20:44   ` Eric Blake
2018-03-09 18:54     ` Vladimir Sementsov-Ogievskiy
2018-02-15 13:51 ` [Qemu-devel] [PATCH 8/9] iotests: add file_path helper Vladimir Sementsov-Ogievskiy
2018-02-16 20:46   ` Eric Blake
2018-02-20  5:42     ` Jeff Cody
2018-03-12 10:04       ` Vladimir Sementsov-Ogievskiy
2018-02-15 13:51 ` [Qemu-devel] [PATCH 9/9] iotests: new test 206 for NBD BLOCK_STATUS Vladimir Sementsov-Ogievskiy
2018-02-16 21:02   ` Eric Blake
2018-03-01 11:51     ` Vladimir Sementsov-Ogievskiy
2018-03-01 18:23       ` Eric Blake
2018-02-22 19:30 ` [Qemu-devel] [PATCH 0/9] nbd block status base:allocation no-reply
2018-02-23 14:02 ` no-reply
2018-02-24  6:48 ` no-reply
2018-02-26 16:57 ` [Qemu-devel] [PATCH v2 0/2] nbd block status initial patches Eric Blake
2018-02-26 16:57   ` [Qemu-devel] [PATCH v2 1/2] nbd: BLOCK_STATUS constants Eric Blake
2018-03-01 12:06     ` Vladimir Sementsov-Ogievskiy
2018-02-26 16:57   ` [Qemu-devel] [PATCH v2 2/2] nbd/client: fix error messages in nbd_handle_reply_err Eric Blake
2018-03-01 12:10     ` Vladimir Sementsov-Ogievskiy
2018-03-01 18:25       ` Eric Blake
2018-03-09 19:08 ` [Qemu-devel] [PATCH 0/9] nbd block status base:allocation Eric Blake
2018-03-09 19:28   ` Vladimir Sementsov-Ogievskiy

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.