All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
@ 2017-12-08 10:55 Paolo Bonzini
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 1/5] compiler: add a helper for C99 inline functions Paolo Bonzini
                   ` (9 more replies)
  0 siblings, 10 replies; 31+ messages in thread
From: Paolo Bonzini @ 2017-12-08 10:55 UTC (permalink / raw)
  To: qemu-devel; +Cc: Emilio G . Cota, Stefan Hajnoczi, Fam Zheng

This is an attempt to make a C API that resembles the C++
std::unique_lock (mostly untested).  The idea is that you can write

    QEMU_LOCK_GUARD(QemuMutex, guard_name, &some_mutex);

instead of

    qemu_mutex_lock(&some_mutex);
    ...
out:
    qemu_mutex_unlock(&some_mutex);

and the mutex will be unlocked on all exit paths.  In C++ that
would be "std::unique_lock<QemuMutex> guard_name(some_mutex);".
Likewise,

    QEMU_WITH_LOCK(QemuMutex, guard_name, &some_mutex) {
        ...
    }

is the same as

    qemu_mutex_lock(&some_mutex);
    ...
    qemu_mutex_unlock(&some_mutex);

except that any returns within the region will unlock the mutex.
It's possible to use QemuLockGuard also with a spinlock or a
CoMutex.  However, it is _not_ possible to return a QemuLockGuard
since C doesn't have an equivalent of C++'s "move semantics", so
there are other "constructor" macros such as QEMU_ADOPT_LOCK
and QEMU_TAKEN_LOCK.

On the positive side, I checked that the entire abstraction
is removed by the compiler, the generated code is more or less
the same.  Also, it would let us for example change block/curl.c
to use a CoQueue instead of a home-grown list+QemuMutex.

However, I am still not sure about the readability, and it doesn't play
well with another common idiom in QEMU, which is to wrap global mutexes
with function such as

    static void block_job_lock(void)
    {
        qemu_mutex_lock(&block_job_mutex);
    }

    static void block_job_unlock(void)
    {
        qemu_mutex_unlock(&block_job_mutex);
    }

So I'm a bit underwhelmed by this experiment.  Other opinions?

Paolo

Paolo Bonzini (5):
  compiler: add a helper for C99 inline functions
  lock-guard: add scoped lock implementation
  qemu-timer: convert to use lock guards
  qht: convert to use lock guards
  thread-pool: convert to use lock guards

 include/qemu/compiler.h   | 15 +++++++
 include/qemu/coroutine.h  |  4 ++
 include/qemu/lock-guard.h | 99 +++++++++++++++++++++++++++++++++++++++++++++++
 include/qemu/thread.h     |  7 ++++
 util/Makefile.objs        |  1 +
 util/qemu-thread.c        | 17 ++++++++
 util/qemu-timer.c         | 84 ++++++++++++++++++++--------------------
 util/qht.c                | 59 ++++++++++++++--------------
 util/thread-pool.c        | 26 ++++++-------
 9 files changed, 225 insertions(+), 87 deletions(-)
 create mode 100644 include/qemu/lock-guard.h
 create mode 100644 util/qemu-thread.c

-- 
2.14.3

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

* [Qemu-devel] [PATCH 1/5] compiler: add a helper for C99 inline functions
  2017-12-08 10:55 [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Paolo Bonzini
@ 2017-12-08 10:55 ` Paolo Bonzini
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 2/5] lock-guard: add scoped lock implementation Paolo Bonzini
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 31+ messages in thread
From: Paolo Bonzini @ 2017-12-08 10:55 UTC (permalink / raw)
  To: qemu-devel; +Cc: Emilio G . Cota, Stefan Hajnoczi, Fam Zheng

C99 inline functions are useful whenever a function provide an
abstraction that is generally expected to be inlined away, but
yet a function pointer might be needed.  One such case is function
passed to GCC's cleanup attribute.

Unfortunately, C99 inline functions clash a bit with -Wredundant-decls.
Provide a helper macro to hide the ugliness.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 include/qemu/compiler.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
index 340e5fdc09..e02b73b9e2 100644
--- a/include/qemu/compiler.h
+++ b/include/qemu/compiler.h
@@ -94,6 +94,21 @@
 #define QEMU_BUILD_BUG_ON_ZERO(x) (sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)) - \
                                    sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)))
 
+/* Provide an extern declaration for a C99 inline function.  This can
+ * be simply placed in a C file but, unfortunately, this means the
+ * declaration comes after the inline definition, and GCC thus
+ * stubbornly raises a -Wredundant-decls warning.
+ *
+ * Putting the declaration before the header would be uglier (it couldn't
+ * just use typeof) and not always possible if the function requires types
+ * that are defined in the header.  Therefore, we just shut up the warning.
+ */
+#define QEMU_EXTERN_INLINE(func)                             \
+    _Pragma("GCC diagnostic push");                          \
+    _Pragma("GCC diagnostic ignored \"-Wredundant-decls\""); \
+    extern typeof(func) func;                                \
+    _Pragma("GCC diagnostic pop")                            \
+
 #if defined __GNUC__
 # if !QEMU_GNUC_PREREQ(4, 4)
    /* gcc versions before 4.4.x don't support gnu_printf, so use printf. */
-- 
2.14.3

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

* [Qemu-devel] [PATCH 2/5] lock-guard: add scoped lock implementation
  2017-12-08 10:55 [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Paolo Bonzini
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 1/5] compiler: add a helper for C99 inline functions Paolo Bonzini
@ 2017-12-08 10:55 ` Paolo Bonzini
  2017-12-08 15:30   ` Stefan Hajnoczi
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 3/5] qemu-timer: convert to use lock guards Paolo Bonzini
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 31+ messages in thread
From: Paolo Bonzini @ 2017-12-08 10:55 UTC (permalink / raw)
  To: qemu-devel; +Cc: Emilio G . Cota, Stefan Hajnoczi, Fam Zheng

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 include/qemu/coroutine.h  |  4 ++
 include/qemu/lock-guard.h | 99 +++++++++++++++++++++++++++++++++++++++++++++++
 include/qemu/thread.h     |  7 ++++
 util/Makefile.objs        |  1 +
 util/qemu-thread.c        | 17 ++++++++
 5 files changed, 128 insertions(+)
 create mode 100644 include/qemu/lock-guard.h
 create mode 100644 util/qemu-thread.c

diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h
index 9aff9a735e..8b48803fa8 100644
--- a/include/qemu/coroutine.h
+++ b/include/qemu/coroutine.h
@@ -17,6 +17,7 @@
 
 #include "qemu/queue.h"
 #include "qemu/timer.h"
+#include "qemu/lock-guard.h"
 
 /**
  * Coroutines are a mechanism for stack switching and can be used for
@@ -162,6 +163,9 @@ void coroutine_fn qemu_co_mutex_lock(CoMutex *mutex);
  */
 void coroutine_fn qemu_co_mutex_unlock(CoMutex *mutex);
 
+#define QEMU_LOCK_GUARD_FUNCS_CoMutex \
+    QEMU_INIT_LOCK_GUARD(CoMutex, qemu_co_mutex_lock, qemu_co_mutex_unlock)
+
 
 /**
  * CoQueues are a mechanism to queue coroutines in order to continue executing
diff --git a/include/qemu/lock-guard.h b/include/qemu/lock-guard.h
new file mode 100644
index 0000000000..e6a83bf9ee
--- /dev/null
+++ b/include/qemu/lock-guard.h
@@ -0,0 +1,103 @@
+#ifndef QEMU_LOCK_GUARD_H
+#define QEMU_LOCK_GUARD_H 1
+
+typedef void QemuLockGuardFunc(void *);
+typedef struct QemuLockGuard {
+    QemuLockGuardFunc *p_lock_fn, *p_unlock_fn;
+    void *lock;
+    int locked;
+} QemuLockGuard;
+
+static inline void qemu_lock_guard_lock(QemuLockGuard *lock_guard)
+{
+    assert(!lock_guard->locked);
+    lock_guard->p_lock_fn(lock_guard->lock);
+    lock_guard->locked = true;
+}
+
+static inline void qemu_lock_guard_unlock(QemuLockGuard *lock_guard)
+{
+    assert(lock_guard->locked);
+    lock_guard->locked = false;
+    lock_guard->p_unlock_fn(lock_guard->lock);
+}
+
+static inline bool qemu_lock_guard_is_taken(QemuLockGuard *lock_guard)
+{
+    return lock_guard->locked;
+}
+
+static inline void qemu_lock_guard_release(QemuLockGuard *lock_guard)
+{
+    lock_guard->lock = NULL;
+    lock_guard->locked = false;
+}
+
+inline void qemu_lock_guard_pass(void *ptr)
+{
+    QemuLockGuard *lock_guard = ptr;
+    assert(lock_guard->locked || !lock_guard->lock);
+}
+
+inline void qemu_lock_guard_cleanup(void *ptr)
+{
+    QemuLockGuard *lock_guard = ptr;
+    if (likely(lock_guard->locked)) {
+        lock_guard->p_unlock_fn(lock_guard->lock);
+    }
+}
+
+static inline QemuLockGuard qemu_lock_guard_init(QemuLockGuard lock_guard)
+{
+    qemu_lock_guard_lock(&lock_guard);
+    return lock_guard;
+}
+
+#define QEMU_INIT_LOCK_GUARD(type, lock_fn, unlock_fn)                     \
+    .p_lock_fn   = (QemuLockGuardFunc *) (void (*) (type *)) lock_fn,      \
+    .p_unlock_fn = (QemuLockGuardFunc *) (void (*) (type *)) unlock_fn
+
+#define QEMU_LOCK_GUARD_(type, lock, locked)                               \
+    (QemuLockGuard) {                                                      \
+        QEMU_LOCK_GUARD_FUNCS_##type,                                      \
+        lock + type_check(typeof(*lock), type),                            \
+        locked                                                             \
+    }
+
+/* Take a lock that will be unlocked on returning */
+#define QEMU_LOCK_GUARD(type, name, lock)                                  \
+    QemuLockGuard __attribute__((cleanup(qemu_lock_guard_cleanup))) name = \
+        qemu_lock_guard_init(QEMU_LOCK_GUARD_(type, lock, false))
+
+#define QEMU_WITH_LOCK(type, name, lock)                                   \
+    for (QEMU_LOCK_GUARD(type, name, lock);                                \
+         qemu_lock_guard_is_taken(&name);                                  \
+         qemu_lock_guard_unlock(&name))
+
+/* Create a QemuLockGuard for a lock that is taken and will be unlocked on
+ * returning
+ */
+#define QEMU_ADOPT_LOCK(type, name, lock)                                  \
+    QemuLockGuard __attribute__((cleanup(qemu_lock_guard_cleanup))) name = \
+        QEMU_LOCK_GUARD_(type, lock, true)
+
+#define QEMU_WITH_ADOPTED_LOCK(type, name, lock)                           \
+    for (QEMU_ADOPT_LOCK(type, name, lock);                                \
+         qemu_lock_guard_is_taken(&name);                                  \
+         qemu_lock_guard_unlock(&name))
+
+/* Take a lock and create a QemuLockGuard for it, asserting that it will
+ * be locked when returning.
+ */
+#define QEMU_RETURN_LOCK(type, name, lock)                                 \
+    QemuLockGuard __attribute__((cleanup(qemu_lock_guard_pass))) name =    \
+        qemu_lock_guard_init(QEMU_LOCK_GUARD_(type, lock, false))
+
+/* Create a QemuLockGuard for a lock that is taken and must be locked
+ * when returning
+ */
+#define QEMU_TAKEN_LOCK(type, name, lock)                                  \
+    QemuLockGuard __attribute__((cleanup(qemu_lock_guard_pass))) name =    \
+        QEMU_LOCK_GUARD_(type, lock, true)
+
+#endif
diff --git a/include/qemu/thread.h b/include/qemu/thread.h
index 9910f49b3a..4066702d0c 100644
--- a/include/qemu/thread.h
+++ b/include/qemu/thread.h
@@ -3,6 +3,7 @@
 
 #include "qemu/processor.h"
 #include "qemu/atomic.h"
+#include "qemu/lock-guard.h"
 
 typedef struct QemuMutex QemuMutex;
 typedef struct QemuCond QemuCond;
@@ -26,6 +27,9 @@ void qemu_mutex_lock(QemuMutex *mutex);
 int qemu_mutex_trylock(QemuMutex *mutex);
 void qemu_mutex_unlock(QemuMutex *mutex);
 
+#define QEMU_LOCK_GUARD_FUNCS_QemuMutex \
+    QEMU_INIT_LOCK_GUARD(QemuMutex, qemu_mutex_lock, qemu_mutex_unlock)
+
 /* Prototypes for other functions are in thread-posix.h/thread-win32.h.  */
 void qemu_rec_mutex_init(QemuRecMutex *mutex);
 
@@ -99,6 +103,9 @@ static inline void qemu_spin_unlock(QemuSpin *spin)
     __sync_lock_release(&spin->value);
 }
 
+#define QEMU_LOCK_GUARD_FUNCS_QemuSpin \
+    QEMU_INIT_LOCK_GUARD(QemuSpin, qemu_spin_lock, qemu_spin_lock)
+
 struct QemuLockCnt {
 #ifndef CONFIG_LINUX
     QemuMutex mutex;
diff --git a/util/Makefile.objs b/util/Makefile.objs
index 2973b0a323..cb0591f750 100644
--- a/util/Makefile.objs
+++ b/util/Makefile.objs
@@ -3,6 +3,7 @@ util-obj-y += bufferiszero.o
 util-obj-y += lockcnt.o
 util-obj-y += aiocb.o async.o thread-pool.o qemu-timer.o
 util-obj-y += main-loop.o iohandler.o
+util-obj-y += qemu-thread.o
 util-obj-$(CONFIG_POSIX) += aio-posix.o
 util-obj-$(CONFIG_POSIX) += compatfd.o
 util-obj-$(CONFIG_POSIX) += event_notifier-posix.o
diff --git a/util/qemu-thread.c b/util/qemu-thread.c
new file mode 100644
index 0000000000..bb06b5f58b
--- /dev/null
+++ b/util/qemu-thread.c
@@ -0,0 +1,17 @@
+/*
+ * Extern inline functions for QemuLockGuard.
+ *
+ * Copyright Red Hat, Inc. 2017
+ *
+ * Author:
+ *  Paolo Bonzini <pbonzini@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ *
+ */
+#include "qemu/osdep.h"
+#include "qemu/thread.h"
+
+QEMU_EXTERN_INLINE(qemu_lock_guard_cleanup)
+QEMU_EXTERN_INLINE(qemu_lock_guard_pass)
-- 
2.14.3

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

* [Qemu-devel] [PATCH 3/5] qemu-timer: convert to use lock guards
  2017-12-08 10:55 [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Paolo Bonzini
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 1/5] compiler: add a helper for C99 inline functions Paolo Bonzini
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 2/5] lock-guard: add scoped lock implementation Paolo Bonzini
@ 2017-12-08 10:55 ` Paolo Bonzini
  2017-12-08 14:26   ` Stefan Hajnoczi
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 4/5] qht: " Paolo Bonzini
                   ` (6 subsequent siblings)
  9 siblings, 1 reply; 31+ messages in thread
From: Paolo Bonzini @ 2017-12-08 10:55 UTC (permalink / raw)
  To: qemu-devel; +Cc: Emilio G . Cota, Stefan Hajnoczi, Fam Zheng

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 util/qemu-timer.c | 84 +++++++++++++++++++++++++++----------------------------
 1 file changed, 42 insertions(+), 42 deletions(-)

diff --git a/util/qemu-timer.c b/util/qemu-timer.c
index 82d56507a2..7a99e0e336 100644
--- a/util/qemu-timer.c
+++ b/util/qemu-timer.c
@@ -192,14 +192,11 @@ bool timerlist_expired(QEMUTimerList *timer_list)
         return false;
     }
 
-    qemu_mutex_lock(&timer_list->active_timers_lock);
+    QEMU_LOCK_GUARD(QemuMutex, timers_guard, &timer_list->active_timers_lock);
     if (!timer_list->active_timers) {
-        qemu_mutex_unlock(&timer_list->active_timers_lock);
         return false;
     }
     expire_time = timer_list->active_timers->expire_time;
-    qemu_mutex_unlock(&timer_list->active_timers_lock);
-
     return expire_time <= qemu_clock_get_ns(timer_list->clock->type);
 }
 
@@ -231,13 +228,13 @@ int64_t timerlist_deadline_ns(QEMUTimerList *timer_list)
      * value but ->notify_cb() is called when the deadline changes.  Therefore
      * the caller should notice the change and there is no race condition.
      */
-    qemu_mutex_lock(&timer_list->active_timers_lock);
-    if (!timer_list->active_timers) {
-        qemu_mutex_unlock(&timer_list->active_timers_lock);
-        return -1;
+    QEMU_WITH_LOCK(QemuMutex, timers_guard,
+                         &timer_list->active_timers_lock) {
+        if (!timer_list->active_timers) {
+            return -1;
+        }
+        expire_time = timer_list->active_timers->expire_time;
     }
-    expire_time = timer_list->active_timers->expire_time;
-    qemu_mutex_unlock(&timer_list->active_timers_lock);
 
     delta = expire_time - qemu_clock_get_ns(timer_list->clock->type);
 
@@ -410,9 +407,8 @@ void timer_del(QEMUTimer *ts)
     QEMUTimerList *timer_list = ts->timer_list;
 
     if (timer_list) {
-        qemu_mutex_lock(&timer_list->active_timers_lock);
+        QEMU_LOCK_GUARD(QemuMutex, timers_guard, &timer_list->active_timers_lock);
         timer_del_locked(timer_list, ts);
-        qemu_mutex_unlock(&timer_list->active_timers_lock);
     }
 }
 
@@ -423,10 +419,11 @@ void timer_mod_ns(QEMUTimer *ts, int64_t expire_time)
     QEMUTimerList *timer_list = ts->timer_list;
     bool rearm;
 
-    qemu_mutex_lock(&timer_list->active_timers_lock);
-    timer_del_locked(timer_list, ts);
-    rearm = timer_mod_ns_locked(timer_list, ts, expire_time);
-    qemu_mutex_unlock(&timer_list->active_timers_lock);
+    QEMU_WITH_LOCK(QemuMutex, timers_guard,
+                         &timer_list->active_timers_lock) {
+        timer_del_locked(timer_list, ts);
+        rearm = timer_mod_ns_locked(timer_list, ts, expire_time);
+    }
 
     if (rearm) {
         timerlist_rearm(timer_list);
@@ -441,16 +438,17 @@ void timer_mod_anticipate_ns(QEMUTimer *ts, int64_t expire_time)
     QEMUTimerList *timer_list = ts->timer_list;
     bool rearm;
 
-    qemu_mutex_lock(&timer_list->active_timers_lock);
-    if (ts->expire_time == -1 || ts->expire_time > expire_time) {
-        if (ts->expire_time != -1) {
-            timer_del_locked(timer_list, ts);
+    QEMU_WITH_LOCK(QemuMutex, timers_guard,
+                         &timer_list->active_timers_lock) {
+        if (ts->expire_time == -1 || ts->expire_time > expire_time) {
+            if (ts->expire_time != -1) {
+                timer_del_locked(timer_list, ts);
+            }
+            rearm = timer_mod_ns_locked(timer_list, ts, expire_time);
+        } else {
+            rearm = false;
         }
-        rearm = timer_mod_ns_locked(timer_list, ts, expire_time);
-    } else {
-        rearm = false;
     }
-    qemu_mutex_unlock(&timer_list->active_timers_lock);
 
     if (rearm) {
         timerlist_rearm(timer_list);
@@ -516,25 +514,27 @@ bool timerlist_run_timers(QEMUTimerList *timer_list)
     }
 
     current_time = qemu_clock_get_ns(timer_list->clock->type);
-    for(;;) {
-        qemu_mutex_lock(&timer_list->active_timers_lock);
-        ts = timer_list->active_timers;
-        if (!timer_expired_ns(ts, current_time)) {
-            qemu_mutex_unlock(&timer_list->active_timers_lock);
-            break;
-        }
+    QEMU_WITH_LOCK(QemuMutex, timers_guard,
+                         &timer_list->active_timers_lock) {
+        for(;;) {
+            ts = timer_list->active_timers;
+            if (!timer_expired_ns(ts, current_time)) {
+                break;
+            }
 
-        /* remove timer from the list before calling the callback */
-        timer_list->active_timers = ts->next;
-        ts->next = NULL;
-        ts->expire_time = -1;
-        cb = ts->cb;
-        opaque = ts->opaque;
-        qemu_mutex_unlock(&timer_list->active_timers_lock);
-
-        /* run the callback (the timer list can be modified) */
-        cb(opaque);
-        progress = true;
+            /* remove timer from the list before calling the callback */
+            timer_list->active_timers = ts->next;
+            ts->next = NULL;
+            ts->expire_time = -1;
+            cb = ts->cb;
+            opaque = ts->opaque;
+
+            /* run the callback (the timer list can be modified) */
+            qemu_lock_guard_unlock(&timers_guard);
+            cb(opaque);
+            progress = true;
+            qemu_lock_guard_lock(&timers_guard);
+        }
     }
 
 out:
-- 
2.14.3

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

* [Qemu-devel] [PATCH 4/5] qht: convert to use lock guards
  2017-12-08 10:55 [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Paolo Bonzini
                   ` (2 preceding siblings ...)
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 3/5] qemu-timer: convert to use lock guards Paolo Bonzini
@ 2017-12-08 10:55 ` Paolo Bonzini
  2017-12-08 14:27   ` Stefan Hajnoczi
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 5/5] thread-pool: " Paolo Bonzini
                   ` (5 subsequent siblings)
  9 siblings, 1 reply; 31+ messages in thread
From: Paolo Bonzini @ 2017-12-08 10:55 UTC (permalink / raw)
  To: qemu-devel; +Cc: Emilio G . Cota, Stefan Hajnoczi, Fam Zheng

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 util/qht.c | 59 +++++++++++++++++++++++++++++------------------------------
 1 file changed, 29 insertions(+), 30 deletions(-)

diff --git a/util/qht.c b/util/qht.c
index ff4d2e6974..95ac32f990 100644
--- a/util/qht.c
+++ b/util/qht.c
@@ -248,18 +248,18 @@ void qht_map_lock_buckets__no_stale(struct qht *ht, struct qht_map **pmap)
     map = atomic_rcu_read(&ht->map);
     qht_map_lock_buckets(map);
     if (likely(!qht_map_is_stale__locked(ht, map))) {
-        *pmap = map;
-        return;
+        goto out;
     }
     qht_map_unlock_buckets(map);
 
     /* we raced with a resize; acquire ht->lock to see the updated ht->map */
-    qemu_mutex_lock(&ht->lock);
-    map = ht->map;
-    qht_map_lock_buckets(map);
-    qemu_mutex_unlock(&ht->lock);
+    QEMU_WITH_LOCK(QemuMutex, ht_guard, &ht->lock) {
+        map = ht->map;
+        qht_map_lock_buckets(map);
+    }
+
+out:
     *pmap = map;
-    return;
 }
 
 /*
@@ -282,17 +282,18 @@ struct qht_bucket *qht_bucket_lock__no_stale(struct qht *ht, uint32_t hash,
 
     qemu_spin_lock(&b->lock);
     if (likely(!qht_map_is_stale__locked(ht, map))) {
-        *pmap = map;
-        return b;
+        goto out;
     }
     qemu_spin_unlock(&b->lock);
 
     /* we raced with a resize; acquire ht->lock to see the updated ht->map */
-    qemu_mutex_lock(&ht->lock);
-    map = ht->map;
-    b = qht_map_to_bucket(map, hash);
-    qemu_spin_lock(&b->lock);
-    qemu_mutex_unlock(&ht->lock);
+    QEMU_WITH_LOCK(QemuMutex, ht_guard, &ht->lock) {
+        map = ht->map;
+        b = qht_map_to_bucket(map, hash);
+        qemu_spin_lock(&b->lock);
+    }
+
+out:
     *pmap = map;
     return b;
 }
@@ -427,13 +428,13 @@ bool qht_reset_size(struct qht *ht, size_t n_elems)
 
     n_buckets = qht_elems_to_buckets(n_elems);
 
-    qemu_mutex_lock(&ht->lock);
-    map = ht->map;
-    if (n_buckets != map->n_buckets) {
-        new = qht_map_create(n_buckets);
+    QEMU_WITH_LOCK(QemuMutex, ht_guard, &ht->lock) {
+        map = ht->map;
+        if (n_buckets != map->n_buckets) {
+            new = qht_map_create(n_buckets);
+        }
+        qht_do_resize_and_reset(ht, new);
     }
-    qht_do_resize_and_reset(ht, new);
-    qemu_mutex_unlock(&ht->lock);
 
     return !!new;
 }
@@ -771,19 +772,17 @@ static void qht_do_resize_reset(struct qht *ht, struct qht_map *new, bool reset)
 bool qht_resize(struct qht *ht, size_t n_elems)
 {
     size_t n_buckets = qht_elems_to_buckets(n_elems);
-    size_t ret = false;
 
-    qemu_mutex_lock(&ht->lock);
-    if (n_buckets != ht->map->n_buckets) {
-        struct qht_map *new;
+    QEMU_WITH_LOCK(QemuMutex, ht_guard, &ht->lock) {
+        if (n_buckets != ht->map->n_buckets) {
+            struct qht_map *new;
 
-        new = qht_map_create(n_buckets);
-        qht_do_resize(ht, new);
-        ret = true;
+            new = qht_map_create(n_buckets);
+            qht_do_resize(ht, new);
+            return true;
+        }
     }
-    qemu_mutex_unlock(&ht->lock);
-
-    return ret;
+    return false;
 }
 
 /* pass @stats to qht_statistics_destroy() when done */
-- 
2.14.3

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

* [Qemu-devel] [PATCH 5/5] thread-pool: convert to use lock guards
  2017-12-08 10:55 [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Paolo Bonzini
                   ` (3 preceding siblings ...)
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 4/5] qht: " Paolo Bonzini
@ 2017-12-08 10:55 ` Paolo Bonzini
  2017-12-08 15:13   ` Stefan Hajnoczi
  2017-12-08 19:40 ` [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Eric Blake
                   ` (4 subsequent siblings)
  9 siblings, 1 reply; 31+ messages in thread
From: Paolo Bonzini @ 2017-12-08 10:55 UTC (permalink / raw)
  To: qemu-devel; +Cc: Emilio G . Cota, Stefan Hajnoczi, Fam Zheng

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 util/thread-pool.c | 26 +++++++++++---------------
 1 file changed, 11 insertions(+), 15 deletions(-)

diff --git a/util/thread-pool.c b/util/thread-pool.c
index 610646d131..06ada38376 100644
--- a/util/thread-pool.c
+++ b/util/thread-pool.c
@@ -78,7 +78,7 @@ static void *worker_thread(void *opaque)
 {
     ThreadPool *pool = opaque;
 
-    qemu_mutex_lock(&pool->lock);
+    QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
     pool->pending_threads--;
     do_spawn_thread(pool);
 
@@ -88,9 +88,9 @@ static void *worker_thread(void *opaque)
 
         do {
             pool->idle_threads++;
-            qemu_mutex_unlock(&pool->lock);
+            qemu_lock_guard_unlock(&pool_guard);
             ret = qemu_sem_timedwait(&pool->sem, 10000);
-            qemu_mutex_lock(&pool->lock);
+            qemu_lock_guard_lock(&pool_guard);
             pool->idle_threads--;
         } while (ret == -1 && !QTAILQ_EMPTY(&pool->request_list));
         if (ret == -1 || pool->stopping) {
@@ -100,7 +100,7 @@ static void *worker_thread(void *opaque)
         req = QTAILQ_FIRST(&pool->request_list);
         QTAILQ_REMOVE(&pool->request_list, req, reqs);
         req->state = THREAD_ACTIVE;
-        qemu_mutex_unlock(&pool->lock);
+        qemu_lock_guard_unlock(&pool_guard);
 
         ret = req->func(req->arg);
 
@@ -109,14 +109,13 @@ static void *worker_thread(void *opaque)
         smp_wmb();
         req->state = THREAD_DONE;
 
-        qemu_mutex_lock(&pool->lock);
+        qemu_lock_guard_lock(&pool_guard);
 
         qemu_bh_schedule(pool->completion_bh);
     }
 
     pool->cur_threads--;
     qemu_cond_signal(&pool->worker_stopped);
-    qemu_mutex_unlock(&pool->lock);
     return NULL;
 }
 
@@ -139,9 +138,8 @@ static void spawn_thread_bh_fn(void *opaque)
 {
     ThreadPool *pool = opaque;
 
-    qemu_mutex_lock(&pool->lock);
+    QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
     do_spawn_thread(pool);
-    qemu_mutex_unlock(&pool->lock);
 }
 
 static void spawn_thread(ThreadPool *pool)
@@ -208,10 +206,10 @@ static void thread_pool_cancel(BlockAIOCB *acb)
 {
     ThreadPoolElement *elem = (ThreadPoolElement *)acb;
     ThreadPool *pool = elem->pool;
+    QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
 
     trace_thread_pool_cancel(elem, elem->common.opaque);
 
-    qemu_mutex_lock(&pool->lock);
     if (elem->state == THREAD_QUEUED &&
         /* No thread has yet started working on elem. we can try to "steal"
          * the item from the worker if we can get a signal from the
@@ -225,8 +223,6 @@ static void thread_pool_cancel(BlockAIOCB *acb)
         elem->state = THREAD_DONE;
         elem->ret = -ECANCELED;
     }
-
-    qemu_mutex_unlock(&pool->lock);
 }
 
 static AioContext *thread_pool_get_aio_context(BlockAIOCB *acb)
@@ -258,12 +254,12 @@ BlockAIOCB *thread_pool_submit_aio(ThreadPool *pool,
 
     trace_thread_pool_submit(pool, req, arg);
 
-    qemu_mutex_lock(&pool->lock);
+    QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
     if (pool->idle_threads == 0 && pool->cur_threads < pool->max_threads) {
         spawn_thread(pool);
     }
     QTAILQ_INSERT_TAIL(&pool->request_list, req, reqs);
-    qemu_mutex_unlock(&pool->lock);
+    qemu_lock_guard_unlock(&pool_guard);
     qemu_sem_post(&pool->sem);
     return &req->common;
 }
@@ -330,7 +326,7 @@ void thread_pool_free(ThreadPool *pool)
 
     assert(QLIST_EMPTY(&pool->head));
 
-    qemu_mutex_lock(&pool->lock);
+    QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
 
     /* Stop new threads from spawning */
     qemu_bh_delete(pool->new_thread_bh);
@@ -344,7 +340,7 @@ void thread_pool_free(ThreadPool *pool)
         qemu_cond_wait(&pool->worker_stopped, &pool->lock);
     }
 
-    qemu_mutex_unlock(&pool->lock);
+    qemu_lock_guard_unlock(&pool_guard);
 
     qemu_bh_delete(pool->completion_bh);
     qemu_sem_destroy(&pool->sem);
-- 
2.14.3

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

* Re: [Qemu-devel] [PATCH 3/5] qemu-timer: convert to use lock guards
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 3/5] qemu-timer: convert to use lock guards Paolo Bonzini
@ 2017-12-08 14:26   ` Stefan Hajnoczi
  0 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2017-12-08 14:26 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, Emilio G . Cota, Fam Zheng

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

On Fri, Dec 08, 2017 at 11:55:51AM +0100, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  util/qemu-timer.c | 84 +++++++++++++++++++++++++++----------------------------
>  1 file changed, 42 insertions(+), 42 deletions(-)
> 
> diff --git a/util/qemu-timer.c b/util/qemu-timer.c
> index 82d56507a2..7a99e0e336 100644
> --- a/util/qemu-timer.c
> +++ b/util/qemu-timer.c
> @@ -192,14 +192,11 @@ bool timerlist_expired(QEMUTimerList *timer_list)
>          return false;
>      }
>  
> -    qemu_mutex_lock(&timer_list->active_timers_lock);
> +    QEMU_LOCK_GUARD(QemuMutex, timers_guard, &timer_list->active_timers_lock);

It's not obvious to me that calling qemu_lock_get_ns() below with
active_timers_lock held is a good idea.  Using QEMU_WITH_LOCK() seems
like the clearer and safer option than QEMU_LOCK_GUARD().

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

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

* Re: [Qemu-devel] [PATCH 4/5] qht: convert to use lock guards
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 4/5] qht: " Paolo Bonzini
@ 2017-12-08 14:27   ` Stefan Hajnoczi
  0 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2017-12-08 14:27 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, Emilio G . Cota, Fam Zheng

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

On Fri, Dec 08, 2017 at 11:55:52AM +0100, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  util/qht.c | 59 +++++++++++++++++++++++++++++------------------------------
>  1 file changed, 29 insertions(+), 30 deletions(-)

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

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

* Re: [Qemu-devel] [PATCH 5/5] thread-pool: convert to use lock guards
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 5/5] thread-pool: " Paolo Bonzini
@ 2017-12-08 15:13   ` Stefan Hajnoczi
  2017-12-08 18:12     ` Paolo Bonzini
                       ` (2 more replies)
  0 siblings, 3 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2017-12-08 15:13 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, Emilio G . Cota, Fam Zheng

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

On Fri, Dec 08, 2017 at 11:55:53AM +0100, Paolo Bonzini wrote:
> @@ -88,9 +88,9 @@ static void *worker_thread(void *opaque)
>  
>          do {
>              pool->idle_threads++;
> -            qemu_mutex_unlock(&pool->lock);
> +            qemu_lock_guard_unlock(&pool_guard);
>              ret = qemu_sem_timedwait(&pool->sem, 10000);
> -            qemu_mutex_lock(&pool->lock);
> +            qemu_lock_guard_lock(&pool_guard);

Or:

  QEMU_WITHOUT_LOCK_GUARD(pool_guard) {
      ret = qemu_sem_timedwait(&pool->sem, 10000);
  }

Seems funny but I like it. :)

Unfortunately it's tricky to come up with good semantics.  A 'return'
statement inside QEMU_WITHOUT_LOCK_GUARD() should leave the lock
unlocked.  But a 'break' statement may need to reacquire the lock...

> @@ -258,12 +254,12 @@ BlockAIOCB *thread_pool_submit_aio(ThreadPool *pool,
>  
>      trace_thread_pool_submit(pool, req, arg);
>  
> -    qemu_mutex_lock(&pool->lock);
> +    QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
>      if (pool->idle_threads == 0 && pool->cur_threads < pool->max_threads) {
>          spawn_thread(pool);
>      }
>      QTAILQ_INSERT_TAIL(&pool->request_list, req, reqs);
> -    qemu_mutex_unlock(&pool->lock);
> +    qemu_lock_guard_unlock(&pool_guard);

Why not QEMU_WITH_LOCK()?  Then you can get rid of the explicit unlock.

> @@ -330,7 +326,7 @@ void thread_pool_free(ThreadPool *pool)
>  
>      assert(QLIST_EMPTY(&pool->head));
>  
> -    qemu_mutex_lock(&pool->lock);
> +    QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
>  
>      /* Stop new threads from spawning */
>      qemu_bh_delete(pool->new_thread_bh);
> @@ -344,7 +340,7 @@ void thread_pool_free(ThreadPool *pool)
>          qemu_cond_wait(&pool->worker_stopped, &pool->lock);
>      }
>  
> -    qemu_mutex_unlock(&pool->lock);
> +    qemu_lock_guard_unlock(&pool_guard);

Here too.  I don't see the advantage of replacing a single lock/unlock
with QEMU_LOCK_GUARD/unlock, if it cannot be made shorter/safer then
it's fine to use QemuMutex directly.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

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

* Re: [Qemu-devel] [PATCH 2/5] lock-guard: add scoped lock implementation
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 2/5] lock-guard: add scoped lock implementation Paolo Bonzini
@ 2017-12-08 15:30   ` Stefan Hajnoczi
  2017-12-08 17:56     ` Paolo Bonzini
  0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2017-12-08 15:30 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, Emilio G . Cota, Fam Zheng

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

On Fri, Dec 08, 2017 at 11:55:50AM +0100, Paolo Bonzini wrote:

The implementation is somewhat complex.  Please structure the header
file so the public interfaces are clear and documented.  Move the
implementation out of the way and mark it private.  That will make it
easier for someone to figure out "how do I use lock-guard.h".

> diff --git a/include/qemu/lock-guard.h b/include/qemu/lock-guard.h
> new file mode 100644
> index 0000000000..e6a83bf9ee
> --- /dev/null
> +++ b/include/qemu/lock-guard.h
> @@ -0,0 +1,103 @@
> +#ifndef QEMU_LOCK_GUARD_H
> +#define QEMU_LOCK_GUARD_H 1
> +
> +typedef void QemuLockGuardFunc(void *);
> +typedef struct QemuLockGuard {
> +    QemuLockGuardFunc *p_lock_fn, *p_unlock_fn;
> +    void *lock;
> +    int locked;

bool?

> +#define QEMU_WITH_LOCK(type, name, lock)                                   \
> +    for (QEMU_LOCK_GUARD(type, name, lock);                                \
> +         qemu_lock_guard_is_taken(&name);                                  \
> +         qemu_lock_guard_unlock(&name))

I don't understand the need for the qemu_lock_guard_is_taken(&name)
condition, why not do the following?

  for (QEMU_LOCK_GUARD(type, name, lock);
       ;
       qemu_lock_guard_unlock(&name))

Also, the for loop means that break statements do not work inside
QEMU_WITH_LOCK() { ... }.  This needs to be documented.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

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

* Re: [Qemu-devel] [PATCH 2/5] lock-guard: add scoped lock implementation
  2017-12-08 15:30   ` Stefan Hajnoczi
@ 2017-12-08 17:56     ` Paolo Bonzini
  2017-12-08 20:12       ` Eric Blake
  2017-12-11 10:16       ` Stefan Hajnoczi
  0 siblings, 2 replies; 31+ messages in thread
From: Paolo Bonzini @ 2017-12-08 17:56 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: Emilio G . Cota, Fam Zheng, qemu-devel

On 08/12/2017 16:30, Stefan Hajnoczi wrote:
> On Fri, Dec 08, 2017 at 11:55:50AM +0100, Paolo Bonzini wrote:
> 
> The implementation is somewhat complex.  Please structure the header
> file so the public interfaces are clear and documented.  Move the
> implementation out of the way and mark it private.  That will make it
> easier for someone to figure out "how do I use lock-guard.h".

Right, unfortunately you pretty much have to place it in the header to
guarantee that everything is inlined.

>> diff --git a/include/qemu/lock-guard.h b/include/qemu/lock-guard.h
>> new file mode 100644
>> index 0000000000..e6a83bf9ee
>> --- /dev/null
>> +++ b/include/qemu/lock-guard.h
>> @@ -0,0 +1,103 @@
>> +#ifndef QEMU_LOCK_GUARD_H
>> +#define QEMU_LOCK_GUARD_H 1
>> +
>> +typedef void QemuLockGuardFunc(void *);
>> +typedef struct QemuLockGuard {
>> +    QemuLockGuardFunc *p_lock_fn, *p_unlock_fn;
>> +    void *lock;
>> +    int locked;
> 
> bool?

Yes.

>> +#define QEMU_WITH_LOCK(type, name, lock)                                   \
>> +    for (QEMU_LOCK_GUARD(type, name, lock);                                \
>> +         qemu_lock_guard_is_taken(&name);                                  \
>> +         qemu_lock_guard_unlock(&name))
> 
> I don't understand the need for the qemu_lock_guard_is_taken(&name)
> condition, why not do the following?
> 
>   for (QEMU_LOCK_GUARD(type, name, lock);
>        ;
>        qemu_lock_guard_unlock(&name))

Because that would be an infinite loop. :)

Paolo

> Also, the for loop means that break statements do not work inside
> QEMU_WITH_LOCK() { ... }.  This needs to be documented.

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

* Re: [Qemu-devel] [PATCH 5/5] thread-pool: convert to use lock guards
  2017-12-08 15:13   ` Stefan Hajnoczi
@ 2017-12-08 18:12     ` Paolo Bonzini
  2017-12-08 20:02       ` Eric Blake
  2017-12-08 19:50     ` Eric Blake
  2017-12-11  6:35     ` Peter Xu
  2 siblings, 1 reply; 31+ messages in thread
From: Paolo Bonzini @ 2017-12-08 18:12 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: Emilio G . Cota, Fam Zheng, qemu-devel

On 08/12/2017 16:13, Stefan Hajnoczi wrote:
>> -    qemu_mutex_lock(&pool->lock);
>> +    QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
>>      if (pool->idle_threads == 0 && pool->cur_threads < pool->max_threads) {
>>          spawn_thread(pool);
>>      }
>>      QTAILQ_INSERT_TAIL(&pool->request_list, req, reqs);
>> -    qemu_mutex_unlock(&pool->lock);
>> +    qemu_lock_guard_unlock(&pool_guard);
> Why not QEMU_WITH_LOCK()?  Then you can get rid of the explicit unlock.

I agree that QEMU_WITH_LOCK_GUARD is better in this case. (IIRC I wrote
this patch before coming up with the is_taken trick!).

My main question for the series is what you think the balance should be
between a more widely applicable API and a simpler one.

Thanks,

Paolo

>> @@ -330,7 +326,7 @@ void thread_pool_free(ThreadPool *pool)
>>  
>>      assert(QLIST_EMPTY(&pool->head));
>>  
>> -    qemu_mutex_lock(&pool->lock);
>> +    QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
>>  
>>      /* Stop new threads from spawning */
>>      qemu_bh_delete(pool->new_thread_bh);
>> @@ -344,7 +340,7 @@ void thread_pool_free(ThreadPool *pool)
>>          qemu_cond_wait(&pool->worker_stopped, &pool->lock);
>>      }
>>  
>> -    qemu_mutex_unlock(&pool->lock);
>> +    qemu_lock_guard_unlock(&pool_guard);
> Here too.  I don't see the advantage of replacing a single lock/unlock
> with QEMU_LOCK_GUARD/unlock, if it cannot be made shorter/safer then
> it's fine to use QemuMutex directly.

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

* Re: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
  2017-12-08 10:55 [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Paolo Bonzini
                   ` (4 preceding siblings ...)
  2017-12-08 10:55 ` [Qemu-devel] [PATCH 5/5] thread-pool: " Paolo Bonzini
@ 2017-12-08 19:40 ` Eric Blake
  2017-12-11  9:38   ` Peter Maydell
  2017-12-11  6:40 ` no-reply
                   ` (3 subsequent siblings)
  9 siblings, 1 reply; 31+ messages in thread
From: Eric Blake @ 2017-12-08 19:40 UTC (permalink / raw)
  To: Paolo Bonzini, qemu-devel; +Cc: Emilio G . Cota, Fam Zheng, Stefan Hajnoczi

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

On 12/08/2017 04:55 AM, Paolo Bonzini wrote:
> This is an attempt to make a C API that resembles the C++
> std::unique_lock (mostly untested).  The idea is that you can write
> 
>     QEMU_LOCK_GUARD(QemuMutex, guard_name, &some_mutex);
> 
> instead of
> 
>     qemu_mutex_lock(&some_mutex);
>     ...
> out:
>     qemu_mutex_unlock(&some_mutex);
> 
> and the mutex will be unlocked on all exit paths.  In C++ that
> would be "std::unique_lock<QemuMutex> guard_name(some_mutex);".
> Likewise,
> 
>     QEMU_WITH_LOCK(QemuMutex, guard_name, &some_mutex) {
>         ...
>     }
> 
> is the same as
> 
>     qemu_mutex_lock(&some_mutex);
>     ...
>     qemu_mutex_unlock(&some_mutex);
> 
> except that any returns within the region will unlock the mutex.

Not just returns, but ANY manner that you leave the scope, including a
goto or just falling out of the end of the scope.

(and, as Stefan pointed out, this poisons the use of 'break' when this
is used inside a loop, as it now breaks the scope of the QEMU_WITH_LOCK
instead of the outer loop).

> It's possible to use QemuLockGuard also with a spinlock or a
> CoMutex.  However, it is _not_ possible to return a QemuLockGuard
> since C doesn't have an equivalent of C++'s "move semantics", so
> there are other "constructor" macros such as QEMU_ADOPT_LOCK
> and QEMU_TAKEN_LOCK.
> 
> On the positive side, I checked that the entire abstraction
> is removed by the compiler, the generated code is more or less
> the same.  Also, it would let us for example change block/curl.c
> to use a CoQueue instead of a home-grown list+QemuMutex.
> 
> However, I am still not sure about the readability, and it doesn't play
> well with another common idiom in QEMU, which is to wrap global mutexes
> with function such as
> 
>     static void block_job_lock(void)
>     {
>         qemu_mutex_lock(&block_job_mutex);
>     }
> 
>     static void block_job_unlock(void)
>     {
>         qemu_mutex_unlock(&block_job_mutex);
>     }
> 
> So I'm a bit underwhelmed by this experiment.  Other opinions?

The semantics you list here:

>     QEMU_WITH_LOCK(QemuMutex, guard_name, &some_mutex) {
>         ...
>     }

are slightly different from the semantics in nbdkit:

{
  ACQUIRE_LOCK_FOR_CURRENT_SCOPE(&some_lock);
  ...
}

In that your version requires the user to supply the scope after your
macro, instead of using your macro within the scope.  But I guess that's
because you added other helpers like QEMU_WITH_ADOPTED_LOCK,
QEMU_RETURN_LOCK, and QEMU_TAKEN_LOCK, where you have multiple
possibilities for which state the lock should be in.

Is it worth playing around with the user providing the scope around your
macros, instead of using your macro to introduce the scope?

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


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

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

* Re: [Qemu-devel] [PATCH 5/5] thread-pool: convert to use lock guards
  2017-12-08 15:13   ` Stefan Hajnoczi
  2017-12-08 18:12     ` Paolo Bonzini
@ 2017-12-08 19:50     ` Eric Blake
  2017-12-11  6:35     ` Peter Xu
  2 siblings, 0 replies; 31+ messages in thread
From: Eric Blake @ 2017-12-08 19:50 UTC (permalink / raw)
  To: Stefan Hajnoczi, Paolo Bonzini; +Cc: Emilio G . Cota, Fam Zheng, qemu-devel

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

On 12/08/2017 09:13 AM, Stefan Hajnoczi wrote:
> On Fri, Dec 08, 2017 at 11:55:53AM +0100, Paolo Bonzini wrote:
>> @@ -88,9 +88,9 @@ static void *worker_thread(void *opaque)
>>  
>>          do {
>>              pool->idle_threads++;
>> -            qemu_mutex_unlock(&pool->lock);
>> +            qemu_lock_guard_unlock(&pool_guard);
>>              ret = qemu_sem_timedwait(&pool->sem, 10000);
>> -            qemu_mutex_lock(&pool->lock);
>> +            qemu_lock_guard_lock(&pool_guard);
> 
> Or:
> 
>   QEMU_WITHOUT_LOCK_GUARD(pool_guard) {
>       ret = qemu_sem_timedwait(&pool->sem, 10000);
>   }
> 
> Seems funny but I like it. :)
> 
> Unfortunately it's tricky to come up with good semantics.  A 'return'
> statement inside QEMU_WITHOUT_LOCK_GUARD() should leave the lock
> unlocked.  But a 'break' statement may need to reacquire the lock...

But isn't that what happens already?

QEMU_WITH_LOCK_GUARD(guard) { // 1
  do {
    QEMU_WITHOUT_LOCK_GUARD(guard) {// 2
      if (cond1) {
        break;
      } else if (cond2) {
        goto endlock;
      } else {
        return;
      }
    } // 3
  } while (cond3);
} // 4
endlock:
  ; // 5

Point 2 introduces a new scope which says to unlock the guard at entry,
and to relock the guard at all exits from the scope.  If cond1 is true,
and we break, control flows to point 3, (because of we provided the
scope via a for loop - so the break exits only the lock guard!), and
relocks the guard, so the bulk of the do/while loop that is not
sub-scoped by the WITHOUT_LOCK_GUARD remains locked.  If cond2 is true,
then we leave the WITHOUT_LOCK_GUARD scope (and temporarily lock the
guard), then immediately leave the WITH_LOCK_GUARD scope (and unlock the
guard again) - the cleanup handlers ensure that unwinding out of
multiple scopes performs all of the proper cleanups, as we skip to point
5.  The same is true if cond2 is false and we return from the function -
the lock is temporarily restored then released.

Or did you want semantics where you can return with the lock still
locked in spite of the outer loop, and/or an optimization to avoid the
contention on temporarily re-locking/unlocking a loop when jumping out
of two nested scopes?

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


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

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

* Re: [Qemu-devel] [PATCH 5/5] thread-pool: convert to use lock guards
  2017-12-08 18:12     ` Paolo Bonzini
@ 2017-12-08 20:02       ` Eric Blake
  2017-12-11 10:23         ` Stefan Hajnoczi
  0 siblings, 1 reply; 31+ messages in thread
From: Eric Blake @ 2017-12-08 20:02 UTC (permalink / raw)
  To: Paolo Bonzini, Stefan Hajnoczi; +Cc: Emilio G . Cota, Fam Zheng, qemu-devel

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

On 12/08/2017 12:12 PM, Paolo Bonzini wrote:
> On 08/12/2017 16:13, Stefan Hajnoczi wrote:
>>> -    qemu_mutex_lock(&pool->lock);
>>> +    QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
>>>      if (pool->idle_threads == 0 && pool->cur_threads < pool->max_threads) {
>>>          spawn_thread(pool);
>>>      }
>>>      QTAILQ_INSERT_TAIL(&pool->request_list, req, reqs);
>>> -    qemu_mutex_unlock(&pool->lock);
>>> +    qemu_lock_guard_unlock(&pool_guard);
>> Why not QEMU_WITH_LOCK()?  Then you can get rid of the explicit unlock.
> 
> I agree that QEMU_WITH_LOCK_GUARD is better in this case. (IIRC I wrote
> this patch before coming up with the is_taken trick!).
> 
> My main question for the series is what you think the balance should be
> between a more widely applicable API and a simpler one.

If you require the user to provide the scope, this could be:

@@ -258,12 +254,12 @@ BlockAIOCB *thread_pool_submit_aio(ThreadPool *pool,

     trace_thread_pool_submit(pool, req, arg);

-    qemu_mutex_lock(&pool->lock);
-    if (pool->idle_threads == 0 && pool->cur_threads < pool->max_threads) {
-        spawn_thread(pool);
-    QTAILQ_INSERT_TAIL(&pool->request_list, req, reqs);
+    {
+        QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
+        if (pool->idle_threads == 0 && pool->cur_threads <
pool->max_threads) {
+            spawn_thread(pool);
+        }
+        QTAILQ_INSERT_TAIL(&pool->request_list, req, reqs);
     }
-    qemu_mutex_unlock(&pool->lock);
     qemu_sem_post(&pool->sem);
     return &req->common;
 }

In other words, I don't see what 'QEMU_WITH_LOCK_GUARD() {}' buys us
over '{ QEMU_LOCK_GUARD() }'.

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


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

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

* Re: [Qemu-devel] [PATCH 2/5] lock-guard: add scoped lock implementation
  2017-12-08 17:56     ` Paolo Bonzini
@ 2017-12-08 20:12       ` Eric Blake
  2017-12-11 10:16       ` Stefan Hajnoczi
  1 sibling, 0 replies; 31+ messages in thread
From: Eric Blake @ 2017-12-08 20:12 UTC (permalink / raw)
  To: Paolo Bonzini, Stefan Hajnoczi; +Cc: Emilio G . Cota, Fam Zheng, qemu-devel

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

On 12/08/2017 11:56 AM, Paolo Bonzini wrote:

>>> +typedef void QemuLockGuardFunc(void *);
>>> +typedef struct QemuLockGuard {
>>> +    QemuLockGuardFunc *p_lock_fn, *p_unlock_fn;
>>> +    void *lock;
>>> +    int locked;
>>
>> bool?
> 
> Yes.
> 
>>> +#define QEMU_WITH_LOCK(type, name, lock)                                   \
>>> +    for (QEMU_LOCK_GUARD(type, name, lock);                                \
>>> +         qemu_lock_guard_is_taken(&name);                                  \
>>> +         qemu_lock_guard_unlock(&name))
>>
>> I don't understand the need for the qemu_lock_guard_is_taken(&name)
>> condition, why not do the following?
>>
>>   for (QEMU_LOCK_GUARD(type, name, lock);
>>        ;
>>        qemu_lock_guard_unlock(&name))
> 
> Because that would be an infinite loop. :)

Do we really need 'locked' to belong to the lockguard, just for our use
in for loops?  Or can we just declare it in the for loop proper, as in

#define QEMU_WITH_LOCK(type, name, lock) \
    for (bool name##_done = false, QEMU_LOCK_GUARD(type, name, lock); \
         !name##_done; \
         name##_done = true)

and let the automatic scope exit at the conclusion of the one-shot loop
thus unlock things on our behalf, and now we don't have to futz around
with guard->locked everywhere else?

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


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

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

* Re: [Qemu-devel] [PATCH 5/5] thread-pool: convert to use lock guards
  2017-12-08 15:13   ` Stefan Hajnoczi
  2017-12-08 18:12     ` Paolo Bonzini
  2017-12-08 19:50     ` Eric Blake
@ 2017-12-11  6:35     ` Peter Xu
  2 siblings, 0 replies; 31+ messages in thread
From: Peter Xu @ 2017-12-11  6:35 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: Paolo Bonzini, Emilio G . Cota, Fam Zheng, qemu-devel

On Fri, Dec 08, 2017 at 03:13:06PM +0000, Stefan Hajnoczi wrote:

[...]

> > @@ -330,7 +326,7 @@ void thread_pool_free(ThreadPool *pool)
> >  
> >      assert(QLIST_EMPTY(&pool->head));
> >  
> > -    qemu_mutex_lock(&pool->lock);
> > +    QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
> >  
> >      /* Stop new threads from spawning */
> >      qemu_bh_delete(pool->new_thread_bh);
> > @@ -344,7 +340,7 @@ void thread_pool_free(ThreadPool *pool)
> >          qemu_cond_wait(&pool->worker_stopped, &pool->lock);
> >      }
> >  
> > -    qemu_mutex_unlock(&pool->lock);
> > +    qemu_lock_guard_unlock(&pool_guard);
> 
> Here too.  I don't see the advantage of replacing a single lock/unlock
> with QEMU_LOCK_GUARD/unlock, if it cannot be made shorter/safer then
> it's fine to use QemuMutex directly.

Agree.

For such use cases (and maybe mostly the cases that can use
QEMU_ADOPT_LOCK, QEMU_RETURN_LOCK, QEMU_TAKEN_LOCK) for me I would
still prefer the old ways, which is clearer to me (and faster?).  But
I do think the guard can really help for the specific case when
e.g. we need to take the lock at the entry of the function but need to
make sure it's released before leaving, especially when the function
contains multiple return points.

Maybe we can do this incrementally?  Say, we can at least start to use
it in new codes, and replace some obvious scenarios where proper.
After all it sounds good to have such an API that QEMU code can use
directly.

Thanks,

-- 
Peter Xu

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

* Re: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
  2017-12-08 10:55 [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Paolo Bonzini
                   ` (5 preceding siblings ...)
  2017-12-08 19:40 ` [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Eric Blake
@ 2017-12-11  6:40 ` no-reply
  2017-12-11  6:40 ` no-reply
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 31+ messages in thread
From: no-reply @ 2017-12-11  6:40 UTC (permalink / raw)
  To: pbonzini; +Cc: famz, qemu-devel, cota

Hi,

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

Message-id: 20171208105553.12249-1-pbonzini@redhat.com
Subject: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
Type: series

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

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
 * [new tag]               patchew/20171208105553.12249-1-pbonzini@redhat.com -> patchew/20171208105553.12249-1-pbonzini@redhat.com
Switched to a new branch 'test'
8e9ffc046d thread-pool: convert to use lock guards
007b5bc7b3 qht: convert to use lock guards
6fd333cacc qemu-timer: convert to use lock guards
1a895608bb lock-guard: add scoped lock implementation
2188a83be2 compiler: add a helper for C99 inline functions

=== OUTPUT BEGIN ===
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into '/var/tmp/patchew-tester-tmp-k2f3p02l/src/dtc'...
Submodule path 'dtc': checked out '558cd81bdd432769b59bff01240c44f82cfb1a9d'
  BUILD   centos6
make[1]: Entering directory '/var/tmp/patchew-tester-tmp-k2f3p02l/src'
  GEN     /var/tmp/patchew-tester-tmp-k2f3p02l/src/docker-src.2017-12-11-01.38.48.5601/qemu.tar
Cloning into '/var/tmp/patchew-tester-tmp-k2f3p02l/src/docker-src.2017-12-11-01.38.48.5601/qemu.tar.vroot'...
done.
Checking out files:  46% (2622/5663)   
Checking out files:  47% (2662/5663)   
Checking out files:  48% (2719/5663)   
Checking out files:  49% (2775/5663)   
Checking out files:  50% (2832/5663)   
Checking out files:  51% (2889/5663)   
Checking out files:  52% (2945/5663)   
Checking out files:  53% (3002/5663)   
Checking out files:  54% (3059/5663)   
Checking out files:  55% (3115/5663)   
Checking out files:  56% (3172/5663)   
Checking out files:  57% (3228/5663)   
Checking out files:  58% (3285/5663)   
Checking out files:  59% (3342/5663)   
Checking out files:  60% (3398/5663)   
Checking out files:  61% (3455/5663)   
Checking out files:  62% (3512/5663)   
Checking out files:  63% (3568/5663)   
Checking out files:  64% (3625/5663)   
Checking out files:  65% (3681/5663)   
Checking out files:  66% (3738/5663)   
Checking out files:  67% (3795/5663)   
Checking out files:  68% (3851/5663)   
Checking out files:  69% (3908/5663)   
Checking out files:  70% (3965/5663)   
Checking out files:  71% (4021/5663)   
Checking out files:  72% (4078/5663)   
Checking out files:  73% (4134/5663)   
Checking out files:  74% (4191/5663)   
Checking out files:  75% (4248/5663)   
Checking out files:  76% (4304/5663)   
Checking out files:  77% (4361/5663)   
Checking out files:  78% (4418/5663)   
Checking out files:  79% (4474/5663)   
Checking out files:  80% (4531/5663)   
Checking out files:  81% (4588/5663)   
Checking out files:  82% (4644/5663)   
Checking out files:  83% (4701/5663)   
Checking out files:  84% (4757/5663)   
Checking out files:  85% (4814/5663)   
Checking out files:  86% (4871/5663)   
Checking out files:  87% (4927/5663)   
Checking out files:  88% (4984/5663)   
Checking out files:  89% (5041/5663)   
Checking out files:  90% (5097/5663)   
Checking out files:  91% (5154/5663)   
Checking out files:  92% (5210/5663)   
Checking out files:  93% (5267/5663)   
Checking out files:  94% (5324/5663)   
Checking out files:  95% (5380/5663)   
Checking out files:  96% (5437/5663)   
Checking out files:  97% (5494/5663)   
Checking out files:  98% (5550/5663)   
Checking out files:  99% (5607/5663)   
Checking out files: 100% (5663/5663)   
Checking out files: 100% (5663/5663), 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-k2f3p02l/src/docker-src.2017-12-11-01.38.48.5601/qemu.tar.vroot/dtc'...
Submodule path 'dtc': checked out '558cd81bdd432769b59bff01240c44f82cfb1a9d'
Submodule 'ui/keycodemapdb' (git://git.qemu.org/keycodemapdb.git) registered for path 'ui/keycodemapdb'
Cloning into '/var/tmp/patchew-tester-tmp-k2f3p02l/src/docker-src.2017-12-11-01.38.48.5601/qemu.tar.vroot/ui/keycodemapdb'...
Submodule path 'ui/keycodemapdb': checked out '10739aa26051a5d49d88132604539d3ed085e72e'
  COPY    RUNNER
    RUN test-quick in qemu:centos6 
Packages installed:
SDL-devel-1.2.14-7.el6_7.1.x86_64
bison-2.4.1-5.el6.x86_64
bzip2-devel-1.0.5-7.el6_0.x86_64
ccache-3.1.6-2.el6.x86_64
csnappy-devel-0-6.20150729gitd7bc683.el6.x86_64
flex-2.5.35-9.el6.x86_64
gcc-4.4.7-18.el6.x86_64
gettext-0.17-18.el6.x86_64
git-1.7.1-9.el6_9.x86_64
glib2-devel-2.28.8-9.el6.x86_64
libepoxy-devel-1.2-3.el6.x86_64
libfdt-devel-1.4.0-1.el6.x86_64
librdmacm-devel-1.0.21-0.el6.x86_64
lzo-devel-2.03-3.1.el6_5.1.x86_64
make-3.81-23.el6.x86_64
mesa-libEGL-devel-11.0.7-4.el6.x86_64
mesa-libgbm-devel-11.0.7-4.el6.x86_64
package g++ is not installed
pixman-devel-0.32.8-1.el6.x86_64
spice-glib-devel-0.26-8.el6.x86_64
spice-server-devel-0.12.4-16.el6.x86_64
tar-1.23-15.el6_8.x86_64
vte-devel-0.25.1-9.el6.x86_64
xen-devel-4.6.6-2.el6.x86_64
zlib-devel-1.2.3-29.el6.x86_64

Environment variables:
PACKAGES=bison     bzip2-devel     ccache     csnappy-devel     flex     g++     gcc     gettext     git     glib2-devel     libepoxy-devel     libfdt-devel     librdmacm-devel     lzo-devel     make     mesa-libEGL-devel     mesa-libgbm-devel     pixman-devel     SDL-devel     spice-glib-devel     spice-server-devel     tar     vte-devel     xen-devel     zlib-devel
HOSTNAME=62be716e37e5
MAKEFLAGS= -j8
J=8
CCACHE_DIR=/var/tmp/ccache
EXTRA_CONFIGURE_OPTS=
V=
SHOW_ENV=1
PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
TARGET_LIST=
SHLVL=1
HOME=/root
TEST_DIR=/tmp/qemu-test
FEATURES= dtc
DEBUG=
_=/usr/bin/env

Configure options:
--enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/tmp/qemu-test/install
No C++ compiler available; disabling C++ specific optional code
Install prefix    /tmp/qemu-test/install
BIOS directory    /tmp/qemu-test/install/share/qemu
firmware path     /tmp/qemu-test/install/share/qemu-firmware
binary directory  /tmp/qemu-test/install/bin
library directory /tmp/qemu-test/install/lib
module directory  /tmp/qemu-test/install/lib/qemu
libexec directory /tmp/qemu-test/install/libexec
include directory /tmp/qemu-test/install/include
config directory  /tmp/qemu-test/install/etc
local state directory   /tmp/qemu-test/install/var
Manual directory  /tmp/qemu-test/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /tmp/qemu-test/src
GIT binary        git
GIT submodules    
C compiler        cc
Host C compiler   cc
C++ compiler      
Objective-C compiler cc
ARFLAGS           rv
CFLAGS            -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g 
QEMU_CFLAGS       -I/usr/include/pixman-1   -I$(SRC_PATH)/dtc/libfdt -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include   -DNCURSES_WIDECHAR   -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv  -Wendif-labels -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-all -Wno-missing-braces  -I/usr/include/libpng12   -I/usr/include/libdrm     -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/nss3 -I/usr/include/nspr4 -I/usr/include/spice-1  
LDFLAGS           -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie -m64 -g 
make              make
install           install
python            python -B
smbd              /usr/sbin/smbd
module support    no
host CPU          x86_64
host big endian   no
target list       x86_64-softmmu aarch64-softmmu
gprof enabled     no
sparse enabled    no
strip binaries    yes
profiler          no
static build      no
SDL support       yes (1.2.14)
GTK support       yes (2.24.23)
GTK GL support    no
VTE support       yes (0.25.1)
TLS priority      NORMAL
GNUTLS support    no
GNUTLS rnd        no
libgcrypt         no
libgcrypt kdf     no
nettle            no 
nettle kdf        no
libtasn1          no
curses support    yes
virgl support     no
curl support      no
mingw32 support   no
Audio drivers     oss
Block whitelist (rw) 
Block whitelist (ro) 
VirtFS support    no
Multipath support no
VNC support       yes
VNC SASL support  no
VNC JPEG support  yes
VNC PNG support   yes
xen support       yes
xen ctrl version  40600
pv dom build      no
brlapi support    no
bluez  support    no
Documentation     no
PIE               yes
vde support       no
netmap support    no
Linux AIO support no
ATTR/XATTR support yes
Install blobs     yes
KVM support       yes
HAX support       no
TCG support       yes
TCG debug enabled no
TCG interpreter   no
RDMA support      yes
fdt support       yes
preadv support    yes
fdatasync         yes
madvise           yes
posix_madvise     yes
libcap-ng support no
vhost-net support yes
vhost-scsi support yes
vhost-vsock support yes
vhost-user support yes
Trace backends    log
spice support     yes (0.12.6/0.12.4)
rbd support       no
xfsctl support    no
smartcard support yes
libusb            no
usb net redir     no
OpenGL support    yes
OpenGL dmabufs    no
libiscsi support  no
libnfs support    no
build guest agent yes
QGA VSS support   no
QGA w32 disk info no
QGA MSI support   no
seccomp support   no
coroutine backend ucontext
coroutine pool    yes
debug stack usage no
crypto afalg      no
GlusterFS support no
gcov              gcov
gcov enabled      no
TPM support       yes
libssh2 support   no
TPM passthrough   yes
TPM emulator      yes
QOM debugging     yes
Live block migration yes
lzo support       yes
snappy support    no
bzip2 support     yes
NUMA host support no
tcmalloc support  no
jemalloc support  no
avx2 optimization no
replication support yes
VxHS block device no
capstone          no
mkdir -p dtc/libfdt
  GEN     x86_64-softmmu/config-devices.mak.tmp
mkdir -p dtc/tests
  GEN     aarch64-softmmu/config-devices.mak.tmp
  GEN     qemu-options.def
  GEN     config-host.h
  GEN     qapi-types.h
  GEN     qmp-commands.h
  GEN     qapi-visit.h
  GEN     qapi-event.h
  GEN     aarch64-softmmu/config-devices.mak
  GEN     x86_64-softmmu/config-devices.mak
  GEN     qmp-marshal.c
  GEN     qapi-types.c
  GEN     qapi-visit.c
  GEN     qapi-event.c
  GEN     qmp-introspect.h
  GEN     qmp-introspect.c
  GEN     trace/generated-tcg-tracers.h
  GEN     trace/generated-helpers-wrappers.h
  GEN     trace/generated-helpers.h
  GEN     trace/generated-helpers.c
  GEN     module_block.h
  GEN     ui/input-keymap-linux-to-qcode.c
  GEN     ui/input-keymap-qnum-to-qcode.c
  GEN     tests/test-qapi-types.h
  GEN     ui/input-keymap-qcode-to-qnum.c
  GEN     tests/test-qapi-visit.h
  GEN     tests/test-qmp-commands.h
  GEN     tests/test-qapi-event.h
  GEN     tests/test-qmp-introspect.h
  GEN     trace-root.h
  GEN     util/trace.h
  GEN     crypto/trace.h
  GEN     io/trace.h
  GEN     migration/trace.h
  GEN     block/trace.h
  GEN     chardev/trace.h
  GEN     hw/block/trace.h
  GEN     hw/block/dataplane/trace.h
  GEN     hw/char/trace.h
  GEN     hw/intc/trace.h
  GEN     hw/net/trace.h
  GEN     hw/virtio/trace.h
  GEN     hw/audio/trace.h
  GEN     hw/misc/trace.h
  GEN     hw/usb/trace.h
  GEN     hw/scsi/trace.h
  GEN     hw/nvram/trace.h
  GEN     hw/display/trace.h
  GEN     hw/input/trace.h
  GEN     hw/timer/trace.h
  GEN     hw/dma/trace.h
  GEN     hw/sparc/trace.h
  GEN     hw/sd/trace.h
  GEN     hw/isa/trace.h
  GEN     hw/mem/trace.h
  GEN     hw/i386/trace.h
  GEN     hw/i386/xen/trace.h
  GEN     hw/9pfs/trace.h
  GEN     hw/ppc/trace.h
  GEN     hw/pci/trace.h
  GEN     hw/s390x/trace.h
  GEN     hw/vfio/trace.h
  GEN     hw/acpi/trace.h
  GEN     hw/arm/trace.h
  GEN     hw/alpha/trace.h
  GEN     hw/xen/trace.h
  GEN     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/virtio/trace.c
  GEN     hw/audio/trace.c
  GEN     hw/misc/trace.c
  GEN     hw/usb/trace.c
  GEN     hw/scsi/trace.c
  GEN     hw/nvram/trace.c
  GEN     hw/display/trace.c
  GEN     hw/input/trace.c
  GEN     hw/timer/trace.c
  GEN     hw/dma/trace.c
  GEN     hw/sparc/trace.c
  GEN     hw/sd/trace.c
  GEN     hw/isa/trace.c
  GEN     hw/mem/trace.c
  GEN     hw/i386/trace.c
  GEN     hw/i386/xen/trace.c
  GEN     hw/9pfs/trace.c
  GEN     hw/ppc/trace.c
  GEN     hw/pci/trace.c
  GEN     hw/s390x/trace.c
  GEN     hw/vfio/trace.c
  GEN     hw/acpi/trace.c
  GEN     hw/arm/trace.c
  GEN     hw/alpha/trace.c
  GEN     hw/xen/trace.c
  GEN     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/truncated_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/asm_tree_dump.c
	 DEP /tmp/qemu-test/src/dtc/tests/check_path.c
	 DEP /tmp/qemu-test/src/dtc/tests/overlay_bad_fixup.c
	 DEP /tmp/qemu-test/src/dtc/tests/overlay.c
	 DEP /tmp/qemu-test/src/dtc/tests/subnode_iterate.c
	 DEP /tmp/qemu-test/src/dtc/tests/property_iterate.c
	 DEP /tmp/qemu-test/src/dtc/tests/integer-expressions.c
	 DEP /tmp/qemu-test/src/dtc/tests/utilfdt_test.c
	 DEP /tmp/qemu-test/src/dtc/tests/path_offset_aliases.c
	 DEP /tmp/qemu-test/src/dtc/tests/add_subnode_with_nops.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_unordered.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtb_reverse.c
	 DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_ordered.c
	 DEP /tmp/qemu-test/src/dtc/tests/extra-terminating-null.c
	 DEP /tmp/qemu-test/src/dtc/tests/incbin.c
	 DEP /tmp/qemu-test/src/dtc/tests/boot-cpuid.c
	 DEP /tmp/qemu-test/src/dtc/tests/phandle_format.c
	 DEP /tmp/qemu-test/src/dtc/tests/path-references.c
	 DEP /tmp/qemu-test/src/dtc/tests/references.c
	 DEP /tmp/qemu-test/src/dtc/tests/string_escapes.c
	 DEP /tmp/qemu-test/src/dtc/tests/propname_escapes.c
	 DEP /tmp/qemu-test/src/dtc/tests/appendprop2.c
	 DEP /tmp/qemu-test/src/dtc/tests/appendprop1.c
	 DEP /tmp/qemu-test/src/dtc/tests/del_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/del_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/setprop.c
	 DEP /tmp/qemu-test/src/dtc/tests/set_name.c
	 DEP /tmp/qemu-test/src/dtc/tests/rw_tree1.c
	 DEP /tmp/qemu-test/src/dtc/tests/open_pack.c
	 DEP /tmp/qemu-test/src/dtc/tests/nopulate.c
	 DEP /tmp/qemu-test/src/dtc/tests/mangle-layout.c
	 DEP /tmp/qemu-test/src/dtc/tests/move_and_save.c
	 DEP /tmp/qemu-test/src/dtc/tests/sw_tree1.c
	 DEP /tmp/qemu-test/src/dtc/tests/nop_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/nop_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/setprop_inplace.c
	 DEP /tmp/qemu-test/src/dtc/tests/stringlist.c
	 DEP /tmp/qemu-test/src/dtc/tests/addr_size_cells.c
	 DEP /tmp/qemu-test/src/dtc/tests/notfound.c
	 DEP /tmp/qemu-test/src/dtc/tests/sized_cells.c
	 DEP /tmp/qemu-test/src/dtc/tests/char_literal.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_alias.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_compatible.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_check_compatible.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_phandle.c
	 DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_prop_value.c
	 DEP /tmp/qemu-test/src/dtc/tests/parent_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/supernode_atdepth_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_path.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_name.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/path_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/subnode_offset.c
	 DEP /tmp/qemu-test/src/dtc/tests/find_property.c
	 DEP /tmp/qemu-test/src/dtc/tests/root_node.c
	 DEP /tmp/qemu-test/src/dtc/tests/get_mem_rsv.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_overlay.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_addresses.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_empty_tree.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_strerror.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_rw.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_sw.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_wip.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt_ro.c
	 DEP /tmp/qemu-test/src/dtc/libfdt/fdt.c
	 DEP /tmp/qemu-test/src/dtc/fdtput.c
	 DEP /tmp/qemu-test/src/dtc/util.c
	 DEP /tmp/qemu-test/src/dtc/fdtget.c
	 DEP /tmp/qemu-test/src/dtc/fdtdump.c
	 LEX convert-dtsv0-lexer.lex.c
	 DEP /tmp/qemu-test/src/dtc/srcpos.c
	 BISON dtc-parser.tab.c
	 DEP /tmp/qemu-test/src/dtc/treesource.c
	 LEX dtc-lexer.lex.c
	 DEP /tmp/qemu-test/src/dtc/livetree.c
	 DEP /tmp/qemu-test/src/dtc/fstree.c
	 DEP /tmp/qemu-test/src/dtc/flattree.c
	 DEP /tmp/qemu-test/src/dtc/dtc.c
	 DEP /tmp/qemu-test/src/dtc/data.c
	 DEP /tmp/qemu-test/src/dtc/checks.c
	 DEP convert-dtsv0-lexer.lex.c
	 DEP dtc-parser.tab.c
	 DEP dtc-lexer.lex.c
	CHK version_gen.h
	UPD version_gen.h
	 DEP /tmp/qemu-test/src/dtc/util.c
	 CC libfdt/fdt.o
	 CC libfdt/fdt_ro.o
	 CC libfdt/fdt_wip.o
	 CC libfdt/fdt_sw.o
	 CC libfdt/fdt_rw.o
	 CC libfdt/fdt_strerror.o
	 CC libfdt/fdt_empty_tree.o
	 CC libfdt/fdt_addresses.o
	 CC libfdt/fdt_overlay.o
	 AR libfdt/libfdt.a
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
mkdir -p dtc/libfdt
mkdir -p dtc/tests
  CC      tests/qemu-iotests/socket_scm_helper.o
  GEN     qga/qapi-generated/qga-qapi-visit.h
  GEN     qga/qapi-generated/qga-qmp-commands.h
  GEN     qga/qapi-generated/qga-qapi-types.h
  GEN     qga/qapi-generated/qga-qapi-visit.c
  CC      qmp-introspect.o
  GEN     qga/qapi-generated/qga-qapi-types.c
  GEN     qga/qapi-generated/qga-qmp-marshal.c
  CC      qapi-types.o
  CC      qapi-visit.o
  CC      qapi-event.o
  CC      qapi/qapi-visit-core.o
  CC      qapi/qapi-dealloc-visitor.o
  CC      qapi/qobject-input-visitor.o
  CC      qapi/qobject-output-visitor.o
  CC      qapi/qmp-registry.o
  CC      qapi/qmp-dispatch.o
  CC      qapi/string-input-visitor.o
  CC      qapi/string-output-visitor.o
  CC      qapi/opts-visitor.o
  CC      qapi/qapi-clone-visitor.o
  CC      qapi/qmp-event.o
  CC      qapi/qapi-util.o
  CC      qobject/qnull.o
  CC      qobject/qnum.o
  CC      qobject/qstring.o
  CC      qobject/qdict.o
  CC      qobject/qlist.o
  CC      qobject/qbool.o
  CC      qobject/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/control.o
  CC      trace/qmp.o
  CC      util/osdep.o
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/include/qom/cpu.h:30,
                 from /tmp/qemu-test/src/trace/control-internal.h:16,
                 from /tmp/qemu-test/src/trace/control.h:271,
                 from /tmp/qemu-test/build/qapi/trace.h:8,
                 from /tmp/qemu-test/src/qapi/qapi-visit-core.c:23:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
  CC      util/unicode.o
  CC      util/cutils.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
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/include/block/aio.h:21,
                 from /tmp/qemu-test/src/include/block/block.h:5,
                 from /tmp/qemu-test/src/include/monitor/monitor.h:7,
                 from /tmp/qemu-test/src/util/osdep.c:40:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
  CC      util/main-loop.o
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/include/qom/cpu.h:30,
                 from /tmp/qemu-test/src/trace/control-internal.h:16,
                 from /tmp/qemu-test/src/trace/control.h:271,
                 from /tmp/qemu-test/src/trace/control.c:12:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/include/qom/cpu.h:30,
                 from /tmp/qemu-test/src/trace/control-internal.h:16,
                 from /tmp/qemu-test/src/trace/control.h:271,
                 from /tmp/qemu-test/src/trace/qmp.c:13:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
  CC      util/iohandler.o
  CC      util/qemu-thread.o
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/include/block/aio.h:21,
                 from /tmp/qemu-test/src/util/aiocb.c:27:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
  CC      util/aio-posix.o
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/include/block/aio.h:21,
                 from /tmp/qemu-test/src/include/qemu/main-loop.h:29,
                 from /tmp/qemu-test/src/util/qemu-timer.c:27:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
/tmp/qemu-test/src/util/qemu-timer.c: In function 'timerlist_deadline_ns':
/tmp/qemu-test/src/util/qemu-timer.c:232: error: 'for' loop initial declarations are only allowed in C99 mode
/tmp/qemu-test/src/util/qemu-timer.c:232: note: use option -std=c99 or -std=gnu99 to compile your code
/tmp/qemu-test/src/util/qemu-timer.c: In function 'timer_mod_ns':
/tmp/qemu-test/src/util/qemu-timer.c:423: error: 'for' loop initial declarations are only allowed in C99 mode
/tmp/qemu-test/src/util/qemu-timer.c: In function 'timer_mod_anticipate_ns':
/tmp/qemu-test/src/util/qemu-timer.c:442: error: 'for' loop initial declarations are only allowed in C99 mode
/tmp/qemu-test/src/util/qemu-timer.c: In function 'timerlist_run_timers':
/tmp/qemu-test/src/util/qemu-timer.c:518: error: 'for' loop initial declarations are only allowed in C99 mode
make: *** [util/qemu-timer.o] Error 1
make: *** Waiting for unfinished jobs....
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/util/lockcnt.c:11:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/util/thread-pool.c:21:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/util/qemu-thread.c:15:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
/tmp/qemu-test/src/util/qemu-thread.c:16: warning: expected [error|warning|ignored] after '#pragma GCC diagnostic'
/tmp/qemu-test/src/util/qemu-thread.c:16: warning: expected [error|warning|ignored] after '#pragma GCC diagnostic'
/tmp/qemu-test/src/util/qemu-thread.c:17: warning: expected [error|warning|ignored] after '#pragma GCC diagnostic'
/tmp/qemu-test/src/util/qemu-thread.c:17: warning: expected [error|warning|ignored] after '#pragma GCC diagnostic'
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/include/block/aio.h:21,
                 from /tmp/qemu-test/src/util/iohandler.c:30:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/include/block/aio.h:21,
                 from /tmp/qemu-test/src/util/async.c:30:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/include/block/aio.h:21,
                 from /tmp/qemu-test/src/include/qemu/main-loop.h:29,
                 from /tmp/qemu-test/src/util/main-loop.c:34:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
In file included from /tmp/qemu-test/src/include/qemu/thread.h:7,
                 from /tmp/qemu-test/src/include/block/aio.h:21,
                 from /tmp/qemu-test/src/include/block/block.h:5,
                 from /tmp/qemu-test/src/util/aio-posix.c:19:
/tmp/qemu-test/src/include/qemu/lock-guard.h:36: warning: no previous prototype for 'qemu_lock_guard_pass'
/tmp/qemu-test/src/include/qemu/lock-guard.h:42: warning: no previous prototype for 'qemu_lock_guard_cleanup'
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=f6ff7a2ade3d11e7815052540069c830', '-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-k2f3p02l/src/docker-src.2017-12-11-01.38.48.5601:/var/tmp/qemu:z,ro', 'qemu:centos6', '/var/tmp/qemu/run', 'test-quick']' 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-k2f3p02l/src'
make: *** [tests/docker/Makefile.include:163: docker-run-test-quick@centos6] Error 2

real	1m33.572s
user	0m4.772s
sys	0m4.399s
=== 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] 31+ messages in thread

* Re: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
  2017-12-08 10:55 [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Paolo Bonzini
                   ` (6 preceding siblings ...)
  2017-12-11  6:40 ` no-reply
@ 2017-12-11  6:40 ` no-reply
  2017-12-11  6:46 ` no-reply
  2017-12-11 22:06 ` Emilio G. Cota
  9 siblings, 0 replies; 31+ messages in thread
From: no-reply @ 2017-12-11  6:40 UTC (permalink / raw)
  To: pbonzini; +Cc: famz, qemu-devel, cota

Hi,

This series seems to have some coding style problems. See output below for
more information:

Message-id: 20171208105553.12249-1-pbonzini@redhat.com
Subject: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
Type: series

=== TEST SCRIPT BEGIN ===
#!/bin/bash

BASE=base
n=1
total=$(git log --oneline $BASE.. | wc -l)
failed=0

git config --local diff.renamelimit 0
git config --local diff.renames True

commits="$(git log --format=%H --reverse $BASE..)"
for c in $commits; do
    echo "Checking PATCH $n/$total: $(git log -n 1 --format=%s $c)..."
    if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then
        failed=1
        echo
    fi
    n=$((n+1))
done

exit $failed
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
8e9ffc046d thread-pool: convert to use lock guards
007b5bc7b3 qht: convert to use lock guards
6fd333cacc qemu-timer: convert to use lock guards
1a895608bb lock-guard: add scoped lock implementation
2188a83be2 compiler: add a helper for C99 inline functions

=== OUTPUT BEGIN ===
Checking PATCH 1/5: compiler: add a helper for C99 inline functions...
Checking PATCH 2/5: lock-guard: add scoped lock implementation...
Checking PATCH 3/5: qemu-timer: convert to use lock guards...
WARNING: line over 80 characters
#54: FILE: util/qemu-timer.c:410:
+        QEMU_LOCK_GUARD(QemuMutex, timers_guard, &timer_list->active_timers_lock);

ERROR: space required before the open parenthesis '('
#115: FILE: util/qemu-timer.c:519:
+        for(;;) {

total: 1 errors, 1 warnings, 129 lines checked

Your patch has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

Checking PATCH 4/5: qht: convert to use lock guards...
Checking PATCH 5/5: thread-pool: convert to use lock guards...
=== OUTPUT END ===

Test command exited with code: 1


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

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

* Re: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
  2017-12-08 10:55 [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Paolo Bonzini
                   ` (7 preceding siblings ...)
  2017-12-11  6:40 ` no-reply
@ 2017-12-11  6:46 ` no-reply
  2017-12-11 22:06 ` Emilio G. Cota
  9 siblings, 0 replies; 31+ messages in thread
From: no-reply @ 2017-12-11  6:46 UTC (permalink / raw)
  To: pbonzini; +Cc: famz, qemu-devel, cota

Hi,

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

Type: series
Message-id: 20171208105553.12249-1-pbonzini@redhat.com
Subject: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))

=== 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/20171208105553.12249-1-pbonzini@redhat.com -> patchew/20171208105553.12249-1-pbonzini@redhat.com
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Submodule 'pixman' (git://anongit.freedesktop.org/pixman) registered for path 'pixman'
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/sgabios' (git://git.qemu-project.org/sgabios.git) registered for path 'roms/sgabios'
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'
Cloning into 'dtc'...
Submodule path 'dtc': checked out '65cc4d2748a2c2e6f27f1cf39e07a5dbabd80ebf'
Cloning into 'pixman'...
Submodule path 'pixman': checked out '87eea99e443b389c978cf37efc52788bf03a0ee0'
Cloning into 'roms/SLOF'...
Submodule path 'roms/SLOF': checked out 'e3d05727a074619fc12d0a67f05cf2c42c875cce'
Cloning into 'roms/ipxe'...
Submodule path 'roms/ipxe': checked out '04186319181298083ef28695a8309028b26fe83c'
Cloning into 'roms/openbios'...
Submodule path 'roms/openbios': checked out 'e79bca64838c96ec44fd7acd508879c5284233dd'
Cloning into 'roms/openhackware'...
Submodule path 'roms/openhackware': checked out 'c559da7c8eec5e45ef1f67978827af6f0b9546f5'
Cloning into 'roms/qemu-palcode'...
Submodule path 'roms/qemu-palcode': checked out 'c87a92639b28ac42bc8f6c67443543b405dc479b'
Cloning into 'roms/seabios'...
Submodule path 'roms/seabios': checked out 'e2fc41e24ee0ada60fc511d60b15a41b294538be'
Cloning into 'roms/sgabios'...
Submodule path 'roms/sgabios': checked out '23d474943dcd55d0550a3d20b3d30e9040a4f15b'
Cloning into 'roms/u-boot'...
Submodule path 'roms/u-boot': checked out '2072e7262965bb48d7fffb1e283101e6ed8b21a8'
Cloning into 'roms/vgabios'...
Submodule path 'roms/vgabios': checked out '19ea12c230ded95928ecaef0db47a82231c2e485'
warning: unable to rmdir pixman: Directory not empty
Switched to a new branch 'test'
M	dtc
M	roms/SLOF
M	roms/ipxe
M	roms/openbios
M	roms/qemu-palcode
M	roms/seabios
M	roms/sgabios
M	roms/u-boot
8e9ffc0 thread-pool: convert to use lock guards
007b5bc qht: convert to use lock guards
6fd333c qemu-timer: convert to use lock guards
1a89560 lock-guard: add scoped lock implementation
2188a83 compiler: add a helper for C99 inline functions

=== OUTPUT BEGIN ===
=== ENV ===
XDG_SESSION_ID=77893
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-cw5nqkkd/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
libstdc++-devel-4.8.5-16.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
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
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
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
gcc-4.8.5-16.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
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
cpp-4.8.5-16.el7.ppc64le
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
libitm-4.8.5-16.el7.ppc64le
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
libgcc-4.8.5-16.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
gvfs-afp-1.30.4-3.el7.ppc64le
latencytop-0.5-13.el7.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
gcc-c++-4.8.5-16.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
perl-FCGI-0.74-8.el7.ppc64le
pango-devel-1.40.4-1.el7.ppc64le
libbasicobjects-0.1.1-27.el7.ppc64le
libgfortran-4.8.5-16.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
perl-Business-ISBN-2.06-2.el7.noarch
freeglut-2.8.1-3.el7.ppc64le
libgomp-4.8.5-16.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
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
gcc-gfortran-4.8.5-16.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
libstdc++-4.8.5-16.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
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
libitm-devel-4.8.5-16.el7.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-cw5nqkkd/src/install
BIOS directory    /var/tmp/patchew-tester-tmp-cw5nqkkd/src/install/share/qemu
firmware path     /var/tmp/patchew-tester-tmp-cw5nqkkd/src/install/share/qemu-firmware
binary directory  /var/tmp/patchew-tester-tmp-cw5nqkkd/src/install/bin
library directory /var/tmp/patchew-tester-tmp-cw5nqkkd/src/install/lib
module directory  /var/tmp/patchew-tester-tmp-cw5nqkkd/src/install/lib/qemu
libexec directory /var/tmp/patchew-tester-tmp-cw5nqkkd/src/install/libexec
include directory /var/tmp/patchew-tester-tmp-cw5nqkkd/src/install/include
config directory  /var/tmp/patchew-tester-tmp-cw5nqkkd/src/install/etc
local state directory   /var/tmp/patchew-tester-tmp-cw5nqkkd/src/install/var
Manual directory  /var/tmp/patchew-tester-tmp-cw5nqkkd/src/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /var/tmp/patchew-tester-tmp-cw5nqkkd/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 i386-softmmu lm32-softmmu m68k-softmmu microblazeel-softmmu microblaze-softmmu mips64el-softmmu mips64-softmmu mipsel-softmmu mips-softmmu moxie-softmmu nios2-softmmu or1k-softmmu ppc64-softmmu ppcemb-softmmu ppc-softmmu s390x-softmmu sh4eb-softmmu sh4-softmmu sparc64-softmmu sparc-softmmu tricore-softmmu unicore32-softmmu x86_64-softmmu xtensaeb-softmmu xtensa-softmmu aarch64-linux-user alpha-linux-user armeb-linux-user arm-linux-user cris-linux-user hppa-linux-user i386-linux-user m68k-linux-user microblazeel-linux-user microblaze-linux-user mips64el-linux-user mips64-linux-user mipsel-linux-user mips-linux-user mipsn32el-linux-user mipsn32-linux-user nios2-linux-user or1k-linux-user ppc64abi32-linux-user ppc64le-linux-user ppc64-linux-user ppc-linux-user s390x-linux-user sh4eb-linux-user sh4-linux-user sparc32plus-linux-user sparc64-linux-user sparc-linux-user tilegx-linux-user x86_64-linux-user
gprof enabled     no
sparse enabled    no
strip binaries    yes
profiler          no
static build      no
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
TCG support       yes
TCG debug enabled no
TCG interpreter   no
RDMA support      yes
fdt support       yes
preadv support    yes
fdatasync         yes
madvise           yes
posix_madvise     yes
libcap-ng support 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
tcmalloc support  no
jemalloc support  no
avx2 optimization no
replication support yes
VxHS block device no
capstone          git
  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     i386-softmmu/config-devices.mak.tmp
  GEN     lm32-softmmu/config-devices.mak.tmp
  GEN     m68k-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     m68k-softmmu/config-devices.mak
  GEN     cris-softmmu/config-devices.mak
  GEN     lm32-softmmu/config-devices.mak
  GEN     alpha-softmmu/config-devices.mak
  GEN     mips64-softmmu/config-devices.mak.tmp
  GEN     mipsel-softmmu/config-devices.mak.tmp
  GEN     microblazeel-softmmu/config-devices.mak
  GEN     mips-softmmu/config-devices.mak.tmp
  GEN     aarch64-softmmu/config-devices.mak
  GEN     arm-softmmu/config-devices.mak
  GEN     i386-softmmu/config-devices.mak
  GEN     microblaze-softmmu/config-devices.mak
  GEN     moxie-softmmu/config-devices.mak.tmp
  GEN     nios2-softmmu/config-devices.mak.tmp
  GEN     or1k-softmmu/config-devices.mak.tmp
  GEN     ppcemb-softmmu/config-devices.mak.tmp
  GEN     ppc64-softmmu/config-devices.mak.tmp
  GEN     s390x-softmmu/config-devices.mak.tmp
  GEN     sh4eb-softmmu/config-devices.mak.tmp
  GEN     ppc-softmmu/config-devices.mak.tmp
  GEN     sparc-softmmu/config-devices.mak.tmp
  GEN     sh4-softmmu/config-devices.mak.tmp
  GEN     sparc64-softmmu/config-devices.mak.tmp
  GEN     tricore-softmmu/config-devices.mak.tmp
  GEN     unicore32-softmmu/config-devices.mak.tmp
  GEN     moxie-softmmu/config-devices.mak
  GEN     x86_64-softmmu/config-devices.mak.tmp
  GEN     xtensaeb-softmmu/config-devices.mak.tmp
  GEN     nios2-softmmu/config-devices.mak
  GEN     or1k-softmmu/config-devices.mak
  GEN     xtensa-softmmu/config-devices.mak.tmp
  GEN     aarch64-linux-user/config-devices.mak.tmp
  GEN     mipsel-softmmu/config-devices.mak
  GEN     mips64el-softmmu/config-devices.mak
  GEN     mips-softmmu/config-devices.mak
  GEN     s390x-softmmu/config-devices.mak
  GEN     armeb-linux-user/config-devices.mak.tmp
  GEN     arm-linux-user/config-devices.mak.tmp
  GEN     ppc-softmmu/config-devices.mak
  GEN     unicore32-softmmu/config-devices.mak
  GEN     cris-linux-user/config-devices.mak.tmp
  GEN     sparc-softmmu/config-devices.mak
  GEN     hppa-linux-user/config-devices.mak.tmp
  GEN     i386-linux-user/config-devices.mak.tmp
  GEN     alpha-linux-user/config-devices.mak.tmp
  GEN     sh4-softmmu/config-devices.mak
  GEN     xtensaeb-softmmu/config-devices.mak
  GEN     sparc64-softmmu/config-devices.mak
  GEN     ppcemb-softmmu/config-devices.mak
  GEN     sh4eb-softmmu/config-devices.mak
  GEN     ppc64-softmmu/config-devices.mak
  GEN     m68k-linux-user/config-devices.mak.tmp
  GEN     tricore-softmmu/config-devices.mak
  GEN     mips64-softmmu/config-devices.mak
  GEN     x86_64-softmmu/config-devices.mak
  GEN     armeb-linux-user/config-devices.mak
  GEN     arm-linux-user/config-devices.mak
  GEN     aarch64-linux-user/config-devices.mak
  GEN     microblazeel-linux-user/config-devices.mak.tmp
  GEN     microblaze-linux-user/config-devices.mak.tmp
  GEN     xtensa-softmmu/config-devices.mak
  GEN     cris-linux-user/config-devices.mak
  GEN     i386-linux-user/config-devices.mak
  GEN     mips64el-linux-user/config-devices.mak.tmp
  GEN     mips64-linux-user/config-devices.mak.tmp
  GEN     mipsel-linux-user/config-devices.mak.tmp
  GEN     mips-linux-user/config-devices.mak.tmp
  GEN     alpha-linux-user/config-devices.mak
  GEN     hppa-linux-user/config-devices.mak
  GEN     mipsn32el-linux-user/config-devices.mak.tmp
  GEN     mipsn32-linux-user/config-devices.mak.tmp
  GEN     nios2-linux-user/config-devices.mak.tmp
  GEN     microblazeel-linux-user/config-devices.mak
  GEN     m68k-linux-user/config-devices.mak
  GEN     or1k-linux-user/config-devices.mak.tmp
  GEN     microblaze-linux-user/config-devices.mak
  GEN     ppc64abi32-linux-user/config-devices.mak.tmp
  GEN     mips64el-linux-user/config-devices.mak
  GEN     mips64-linux-user/config-devices.mak
  GEN     ppc64le-linux-user/config-devices.mak.tmp
  GEN     ppc64-linux-user/config-devices.mak.tmp
  GEN     mips-linux-user/config-devices.mak
  GEN     mipsn32el-linux-user/config-devices.mak
  GEN     ppc-linux-user/config-devices.mak.tmp
  GEN     s390x-linux-user/config-devices.mak.tmp
  GEN     mipsel-linux-user/config-devices.mak
  GEN     mipsn32-linux-user/config-devices.mak
  GEN     nios2-linux-user/config-devices.mak
  GEN     or1k-linux-user/config-devices.mak
  GEN     sh4eb-linux-user/config-devices.mak.tmp
  GEN     ppc64abi32-linux-user/config-devices.mak
  GEN     ppc64le-linux-user/config-devices.mak
  GEN     ppc64-linux-user/config-devices.mak
  GEN     s390x-linux-user/config-devices.mak
  GEN     sh4-linux-user/config-devices.mak.tmp
  GEN     sparc32plus-linux-user/config-devices.mak.tmp
  GEN     sparc64-linux-user/config-devices.mak.tmp
  GEN     sparc-linux-user/config-devices.mak.tmp
  GEN     ppc-linux-user/config-devices.mak
  GEN     tilegx-linux-user/config-devices.mak.tmp
  GEN     sh4eb-linux-user/config-devices.mak
  GEN     x86_64-linux-user/config-devices.mak.tmp
  GEN     config-host.h
  GIT     ui/keycodemapdb dtc capstone
  GEN     sh4-linux-user/config-devices.mak
  GEN     sparc32plus-linux-user/config-devices.mak
  GEN     qemu-options.def
  GEN     sparc-linux-user/config-devices.mak
  GEN     sparc64-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-types.h
  GEN     qapi-visit.h
  GEN     qapi-event.h
  GEN     qmp-marshal.c
  GEN     qapi-visit.c
  GEN     qapi-event.c
  GEN     qmp-introspect.h
  GEN     qmp-introspect.c
  GEN     trace/generated-helpers.h
  GEN     trace/generated-helpers-wrappers.h
  GEN     trace/generated-tcg-tracers.h
  GEN     trace/generated-helpers.c
  GEN     qapi-types.c
  GEN     module_block.h
  GEN     tests/test-qapi-types.h
  GEN     tests/test-qapi-visit.h
  GEN     tests/test-qmp-commands.h
  GEN     tests/test-qapi-event.h
  GEN     tests/test-qmp-introspect.h
  GEN     trace-root.h
  GEN     util/trace.h
  GEN     crypto/trace.h
  GEN     io/trace.h
  GEN     migration/trace.h
  GEN     block/trace.h
  GEN     chardev/trace.h
  GEN     hw/block/trace.h
  GEN     hw/block/dataplane/trace.h
  GEN     hw/char/trace.h
  GEN     hw/intc/trace.h
  GEN     hw/net/trace.h
  GEN     hw/virtio/trace.h
  GEN     hw/audio/trace.h
  GEN     hw/misc/trace.h
  GEN     hw/usb/trace.h
  GEN     hw/scsi/trace.h
  GEN     hw/nvram/trace.h
  GEN     hw/display/trace.h
  GEN     hw/input/trace.h
  GEN     hw/timer/trace.h
  GEN     hw/dma/trace.h
  GEN     hw/sparc/trace.h
  GEN     hw/sd/trace.h
  GEN     hw/isa/trace.h
  GEN     hw/mem/trace.h
  GEN     hw/i386/trace.h
  GEN     hw/i386/xen/trace.h
  GEN     hw/9pfs/trace.h
  GEN     hw/ppc/trace.h
  GEN     hw/pci/trace.h
  GEN     hw/s390x/trace.h
  GEN     hw/vfio/trace.h
  GEN     hw/acpi/trace.h
  GEN     hw/arm/trace.h
  GEN     hw/alpha/trace.h
  GEN     hw/xen/trace.h
  GEN     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/virtio/trace.c
  GEN     hw/audio/trace.c
  GEN     hw/misc/trace.c
  GEN     hw/usb/trace.c
  GEN     hw/scsi/trace.c
  GEN     hw/nvram/trace.c
  GEN     hw/display/trace.c
  GEN     hw/input/trace.c
  GEN     hw/timer/trace.c
  GEN     hw/dma/trace.c
  GEN     hw/sparc/trace.c
  GEN     hw/sd/trace.c
  GEN     hw/isa/trace.c
  GEN     hw/mem/trace.c
  GEN     hw/i386/trace.c
  GEN     hw/i386/xen/trace.c
  GEN     hw/9pfs/trace.c
  GEN     hw/ppc/trace.c
  GEN     hw/pci/trace.c
  GEN     hw/s390x/trace.c
  GEN     hw/vfio/trace.c
  GEN     hw/acpi/trace.c
  GEN     hw/arm/trace.c
  GEN     hw/alpha/trace.c
  GEN     hw/xen/trace.c
  GEN     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-linux-to-qcode.c
  GEN     ui/input-keymap-qcode-to-qnum.c
  GEN     ui/input-keymap-qnum-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/ARM/ARMMapping.o
  CC      arch/ARM/ARMModule.o
  CC      arch/AArch64/AArch64BaseInfo.o
  CC      arch/AArch64/AArch64Disassembler.o
  CC      arch/AArch64/AArch64InstPrinter.o
  CC      arch/AArch64/AArch64Mapping.o
  CC      arch/AArch64/AArch64Module.o
  CC      arch/Mips/MipsDisassembler.o
  CC      arch/Mips/MipsInstPrinter.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/dumptrees.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/testutils.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/value-labels.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/trees.S
  CC      arch/Mips/MipsMapping.o
  CC      arch/Mips/MipsModule.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/truncated_property.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/check_path.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/asm_tree_dump.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/overlay_bad_fixup.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/overlay.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/property_iterate.c
  CC      arch/PowerPC/PPCMapping.o
  CC      arch/PowerPC/PPCDisassembler.o
  CC      arch/PowerPC/PPCModule.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/subnode_iterate.c
  CC      arch/PowerPC/PPCInstPrinter.o
  CC      arch/Sparc/SparcDisassembler.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/path_offset_aliases.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/utilfdt_test.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/add_subnode_with_nops.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/integer-expressions.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/boot-cpuid.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/dtbs_equal_unordered.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/incbin.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/propname_escapes.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/references.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/dtbs_equal_ordered.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/string_escapes.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/extra-terminating-null.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/dtb_reverse.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/phandle_format.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/path-references.c
  CC      arch/Sparc/SparcInstPrinter.o
  CC      arch/Sparc/SparcMapping.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/appendprop2.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/appendprop1.c
  CC      arch/SystemZ/SystemZDisassembler.o
  CC      arch/Sparc/SparcModule.o
  CC      arch/SystemZ/SystemZInstPrinter.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/del_property.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/setprop.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/set_name.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/del_node.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/rw_tree1.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/open_pack.c
  CC      arch/SystemZ/SystemZMapping.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/nopulate.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/mangle-layout.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/sw_tree1.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/nop_property.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/nop_node.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/move_and_save.c
  CC      arch/SystemZ/SystemZModule.o
  CC      arch/SystemZ/SystemZMCTargetDesc.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/setprop_inplace.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/stringlist.c
  CC      arch/X86/X86DisassemblerDecoder.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/addr_size_cells.c
  CC      arch/X86/X86Disassembler.o
  CC      arch/X86/X86IntelInstPrinter.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/get_alias.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/node_offset_by_compatible.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/notfound.c
  CC      MCInst.o
  CC      arch/XCore/XCoreModule.o
  CC      arch/X86/X86ATTInstPrinter.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/node_check_compatible.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/parent_offset.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/node_offset_by_prop_value.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/node_offset_by_phandle.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/supernode_atdepth_offset.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/sized_cells.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/get_path.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/get_phandle.c
  CC      arch/X86/X86Mapping.o
  CC      arch/XCore/XCoreDisassembler.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/path_offset.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/find_property.c
  CC      arch/XCore/XCoreInstPrinter.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/char_literal.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/getprop.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/root_node.c
  CC      arch/XCore/XCoreMapping.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/subnode_offset.c
  CC      arch/X86/X86Module.o
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/get_name.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/libfdt/fdt_overlay.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/tests/get_mem_rsv.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/libfdt/fdt_addresses.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/libfdt/fdt_strerror.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/libfdt/fdt_rw.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/libfdt/fdt_empty_tree.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/libfdt/fdt_sw.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/libfdt/fdt_wip.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/libfdt/fdt_ro.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/util.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/fdtget.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/fdtdump.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/fdtput.c
	 LEX convert-dtsv0-lexer.lex.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/libfdt/fdt.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/srcpos.c
	 BISON dtc-parser.tab.c
	 LEX dtc-lexer.lex.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/data.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/checks.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/dtc.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/livetree.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/flattree.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/treesource.c
	 DEP /var/tmp/patchew-tester-tmp-cw5nqkkd/src/dtc/fstree.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-cw5nqkkd/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_overlay.o
	 CC libfdt/fdt_addresses.o
	 CC libfdt/fdt_empty_tree.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-cw5nqkkd/src/build/capstone/libcapstone.a
mkdir -p dtc/libfdt
mkdir -p dtc/tests
make[1]: `/var/tmp/patchew-tester-tmp-cw5nqkkd/src/build/capstone/libcapstone.a' is up to date.
  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-qmp-marshal.c
  CC      qmp-introspect.o
  CC      qapi-types.o
  CC      qapi-visit.o
  GEN     qga/qapi-generated/qga-qapi-visit.c
  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-output-visitor.o
  CC      qapi/string-input-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/qnum.o
  CC      qobject/qstring.o
  CC      qobject/qdict.o
  CC      qobject/qnull.o
  CC      qobject/qbool.o
  CC      qobject/qlist.o
  CC      qobject/qlit.o
  CC      qobject/qjson.o
  CC      qobject/qobject.o
  CC      qobject/json-streamer.o
  CC      qobject/json-lexer.o
  CC      qobject/json-parser.o
  CC      trace/control.o
  CC      trace/qmp.o
  CC      util/osdep.o
  CC      util/cutils.o
  CC      util/unicode.o
  CC      util/qemu-timer-common.o
  CC      util/bufferiszero.o
  CC      util/lockcnt.o
  CC      util/main-loop.o
  CC      util/iohandler.o
  CC      util/aiocb.o
  CC      util/qemu-thread.o
  CC      util/aio-posix.o
  CC      util/async.o
  CC      util/thread-pool.o
  CC      util/mmap-alloc.o
  CC      util/oslib-posix.o
  CC      util/qemu-timer.o
  CC      util/event_notifier-posix.o
  CC      util/compatfd.o
  CC      util/qemu-thread-posix.o
  CC      util/memfd.o
  CC      util/qemu-openpty.o
  CC      util/envlist.o
  CC      util/path.o
  CC      util/module.o
  CC      util/bitmap.o
  CC      util/host-utils.o
  CC      util/hbitmap.o
  CC      util/fifo8.o
  CC      util/bitops.o
  CC      util/acl.o
  CC      util/error.o
  CC      util/cacheinfo.o
  CC      util/qemu-error.o
  CC      util/id.o
  CC      util/qemu-config.o
  CC      util/iov.o
  CC      util/qemu-sockets.o
  CC      util/notify.o
  CC      util/uri.o
  CC      util/qemu-option.o
  CC      util/keyval.o
  CC      util/qemu-progress.o
  CC      util/crc32c.o
  CC      util/hexdump.o
  CC      util/throttle.o
  CC      util/uuid.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-ucontext.o
  CC      util/buffer.o
  CC      util/timed-average.o
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/aio.h:20,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/main-loop.h:28,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/event_notifier-posix.c:17:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
  CC      util/base64.o
  CC      util/pagesize.o
  CC      util/log.o
  CC      util/qdist.o
cc1: all warnings being treated as errors
make: *** [util/event_notifier-posix.o] Error 1
make: *** Waiting for unfinished jobs....
  CC      util/systemd.o
  CC      util/qht.o
  CC      util/stats64.o
  CC      util/range.o
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-thread.c:14:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
cc1: all warnings being treated as errors
make: *** [util/qemu-thread.o] Error 1
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/lockcnt.c:10:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/aio.h:20,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/main-loop.h:28,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-timer.c:26:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qom/cpu.h:29,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control-internal.h:15,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control.h:270,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/build/qapi/trace.h:7,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/qapi/qapi-visit-core.c:22:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/aio.h:20,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/block.h:4,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/monitor/monitor.h:6,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-error.c:14:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/compatfd.c:18:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-timer.c: In function ‘timerlist_deadline_ns’:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:73:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for (QEMU_LOCK_GUARD(type, name, lock);                                \
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-timer.c:231:5: note: in expansion of macro ‘QEMU_WITH_LOCK’
     QEMU_WITH_LOCK(QemuMutex, timers_guard,
     ^
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/thread-pool.c:20:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:73:5: note: use option -std=c99 or -std=gnu99 to compile your code
     for (QEMU_LOCK_GUARD(type, name, lock);                                \
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-timer.c:231:5: note: in expansion of macro ‘QEMU_WITH_LOCK’
     QEMU_WITH_LOCK(QemuMutex, timers_guard,
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-timer.c: In function ‘timer_mod_ns’:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:73:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for (QEMU_LOCK_GUARD(type, name, lock);                                \
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-timer.c:422:5: note: in expansion of macro ‘QEMU_WITH_LOCK’
     QEMU_WITH_LOCK(QemuMutex, timers_guard,
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-timer.c: In function ‘timer_mod_anticipate_ns’:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:73:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for (QEMU_LOCK_GUARD(type, name, lock);                                \
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-timer.c:441:5: note: in expansion of macro ‘QEMU_WITH_LOCK’
     QEMU_WITH_LOCK(QemuMutex, timers_guard,
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-timer.c: In function ‘timerlist_run_timers’:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:73:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for (QEMU_LOCK_GUARD(type, name, lock);                                \
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-timer.c:517:5: note: in expansion of macro ‘QEMU_WITH_LOCK’
     QEMU_WITH_LOCK(QemuMutex, timers_guard,
     ^
cc1: all warnings being treated as errors
make: *** [util/compatfd.o] Error 1
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qom/cpu.h:29,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control-internal.h:15,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control.h:270,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/build/util/trace.h:7,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/hbitmap.c:15:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
cc1: all warnings being treated as errors
make: *** [util/qemu-timer.o] Error 1
cc1: all warnings being treated as errors
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/aio.h:20,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/async.c:29:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
make: *** [qapi/qapi-visit-core.o] Error 1
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-thread-posix.c:14:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
cc1: all warnings being treated as errors
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/aio.h:20,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/block.h:4,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/monitor/monitor.h:6,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/osdep.c:39:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/aio.h:20,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/block.h:4,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/monitor/monitor.h:6,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-sockets.c:24:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
make: *** [util/qemu-error.o] Error 1
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/aio.h:20,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/main-loop.h:28,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/sysemu/sysemu.h:10,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/oslib-posix.c:34:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/aio.h:20,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/iohandler.c:29:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
cc1: all warnings being treated as errors
make: *** [util/osdep.o] Error 1
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/aio.h:20,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/block.h:4,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/aio-posix.c:18:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/seqlock.h:18,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/qht.h:10,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qht.c:69:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
cc1: all warnings being treated as errors
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/aio.h:20,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/main-loop.h:28,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/main-loop.c:33:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
cc1: all warnings being treated as errors
cc1: all warnings being treated as errors
make: *** [util/hbitmap.o] Error 1
make: *** [util/lockcnt.o] Error 1
cc1: all warnings being treated as errors
cc1: all warnings being treated as errors
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qom/cpu.h:29,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control-internal.h:15,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control.h:270,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control.c:11:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qom/cpu.h:29,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control-internal.h:15,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control.h:270,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/qmp.c:12:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
make: *** [util/thread-pool.o] Error 1
make: *** [util/iohandler.o] Error 1
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/aio.h:20,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/aiocb.c:26:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
make: *** [util/main-loop.o] Error 1
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qht.c: In function ‘qht_map_lock_buckets__no_stale’:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:73:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for (QEMU_LOCK_GUARD(type, name, lock);                                \
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qht.c:256:5: note: in expansion of macro ‘QEMU_WITH_LOCK’
     QEMU_WITH_LOCK(QemuMutex, ht_guard, &ht->lock) {
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:73:5: note: use option -std=c99 or -std=gnu99 to compile your code
     for (QEMU_LOCK_GUARD(type, name, lock);                                \
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qht.c:256:5: note: in expansion of macro ‘QEMU_WITH_LOCK’
     QEMU_WITH_LOCK(QemuMutex, ht_guard, &ht->lock) {
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qht.c: In function ‘qht_bucket_lock__no_stale’:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:73:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for (QEMU_LOCK_GUARD(type, name, lock);                                \
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qht.c:290:5: note: in expansion of macro ‘QEMU_WITH_LOCK’
     QEMU_WITH_LOCK(QemuMutex, ht_guard, &ht->lock) {
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qht.c: In function ‘qht_reset_size’:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:73:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for (QEMU_LOCK_GUARD(type, name, lock);                                \
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qht.c:431:5: note: in expansion of macro ‘QEMU_WITH_LOCK’
     QEMU_WITH_LOCK(QemuMutex, ht_guard, &ht->lock) {
     ^
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/block/aio.h:20,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/throttle.c:29:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
cc1: all warnings being treated as errors
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qht.c: In function ‘qht_resize’:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:73:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for (QEMU_LOCK_GUARD(type, name, lock);                                \
     ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qht.c:776:5: note: in expansion of macro ‘QEMU_WITH_LOCK’
     QEMU_WITH_LOCK(QemuMutex, ht_guard, &ht->lock) {
     ^
cc1: all warnings being treated as errors
cc1: all warnings being treated as errors
make: *** [util/throttle.o] Error 1
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/coroutine.h:20:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-coroutine-io.c:28:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
make: *** [util/oslib-posix.o] Error 1
cc1: all warnings being treated as errors
cc1: all warnings being treated as errors
make: *** [trace/qmp.o] Error 1
make: *** [util/aiocb.o] Error 1
cc1: all warnings being treated as errors
cc1: all warnings being treated as errors
make: *** [util/qemu-thread-posix.o] Error 1
make: *** [util/qht.o] Error 1
make: *** [util/qemu-coroutine-io.o] Error 1
cc1: all warnings being treated as errors
cc1: all warnings being treated as errors
make: *** [util/async.o] Error 1
make: *** [util/qemu-sockets.o] Error 1
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qom/cpu.h:29,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control-internal.h:15,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control.h:270,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/log.c:27:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
cc1: all warnings being treated as errors
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qom/cpu.h:29,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control-internal.h:15,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control.h:270,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/build/util/trace.h:7,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-coroutine.c:16:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
cc1: all warnings being treated as errors
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/rcu.h:27,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/rcu.c:31:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
make: *** [trace/control.o] Error 1
make: *** [util/aio-posix.o] Error 1
cc1: all warnings being treated as errors
make: *** [util/log.o] Error 1
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/thread.h:6:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qom/cpu.h:29,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control-internal.h:15,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/trace/control.h:270,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/build/util/trace.h:7,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/buffer.c:24:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/coroutine.h:20:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/coroutine_int.h:29,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/coroutine-ucontext.c:28:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
cc1: all warnings being treated as errors
cc1: all warnings being treated as errors
make: *** [util/rcu.o] Error 1
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/coroutine.h:20:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-coroutine-lock.c:31:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
make: *** [util/qemu-coroutine.o] Error 1
cc1: all warnings being treated as errors
make: *** [util/buffer.o] Error 1
cc1: all warnings being treated as errors
make: *** [util/coroutine-ucontext.o] Error 1
cc1: all warnings being treated as errors
make: *** [util/qemu-coroutine-lock.o] Error 1
In file included from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/coroutine.h:20:0,
                 from /var/tmp/patchew-tester-tmp-cw5nqkkd/src/util/qemu-coroutine-sleep.c:15:
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:36:13: error: no previous prototype for ‘qemu_lock_guard_pass’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_pass(void *ptr)
             ^
/var/tmp/patchew-tester-tmp-cw5nqkkd/src/include/qemu/lock-guard.h:42:13: error: no previous prototype for ‘qemu_lock_guard_cleanup’ [-Werror=missing-prototypes]
 inline void qemu_lock_guard_cleanup(void *ptr)
             ^
cc1: all warnings being treated as errors
make: *** [util/qemu-coroutine-sleep.o] Error 1
=== OUTPUT END ===

Test command exited with code: 2


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

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

* Re: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
  2017-12-08 19:40 ` [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Eric Blake
@ 2017-12-11  9:38   ` Peter Maydell
  2017-12-11 14:11     ` Eric Blake
  0 siblings, 1 reply; 31+ messages in thread
From: Peter Maydell @ 2017-12-11  9:38 UTC (permalink / raw)
  To: Eric Blake
  Cc: Paolo Bonzini, QEMU Developers, Emilio G . Cota, Fam Zheng,
	Stefan Hajnoczi

On 8 December 2017 at 19:40, Eric Blake <eblake@redhat.com> wrote:
> On 12/08/2017 04:55 AM, Paolo Bonzini wrote:
>> Likewise,
>>
>>     QEMU_WITH_LOCK(QemuMutex, guard_name, &some_mutex) {
>>         ...
>>     }
>>
>> is the same as
>>
>>     qemu_mutex_lock(&some_mutex);
>>     ...
>>     qemu_mutex_unlock(&some_mutex);
>>
>> except that any returns within the region will unlock the mutex.
>
> Not just returns, but ANY manner that you leave the scope, including a
> goto or just falling out of the end of the scope.

How about longjmp()ing out of it?

thanks
-- PMM

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

* Re: [Qemu-devel] [PATCH 2/5] lock-guard: add scoped lock implementation
  2017-12-08 17:56     ` Paolo Bonzini
  2017-12-08 20:12       ` Eric Blake
@ 2017-12-11 10:16       ` Stefan Hajnoczi
  2017-12-11 13:51         ` Eric Blake
  1 sibling, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2017-12-11 10:16 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Emilio G . Cota, Fam Zheng, qemu-devel

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

On Fri, Dec 08, 2017 at 06:56:12PM +0100, Paolo Bonzini wrote:
> On 08/12/2017 16:30, Stefan Hajnoczi wrote:
> > On Fri, Dec 08, 2017 at 11:55:50AM +0100, Paolo Bonzini wrote:
> > 
> > The implementation is somewhat complex.  Please structure the header
> > file so the public interfaces are clear and documented.  Move the
> > implementation out of the way and mark it private.  That will make it
> > easier for someone to figure out "how do I use lock-guard.h".
> 
> Right, unfortunately you pretty much have to place it in the header to
> guarantee that everything is inlined.

Yes, that's fine.  I think the important part is to put public
interfaces next to each other and document them.

> >> +#define QEMU_WITH_LOCK(type, name, lock)                                   \
> >> +    for (QEMU_LOCK_GUARD(type, name, lock);                                \
> >> +         qemu_lock_guard_is_taken(&name);                                  \
> >> +         qemu_lock_guard_unlock(&name))
> > 
> > I don't understand the need for the qemu_lock_guard_is_taken(&name)
> > condition, why not do the following?
> > 
> >   for (QEMU_LOCK_GUARD(type, name, lock);
> >        ;
> >        qemu_lock_guard_unlock(&name))
> 
> Because that would be an infinite loop. :)

Sorry, I mean for (...; false; ...).  Is there any reason to do
qemu_lock_guard_is_taken(&name)?

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

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

* Re: [Qemu-devel] [PATCH 5/5] thread-pool: convert to use lock guards
  2017-12-08 20:02       ` Eric Blake
@ 2017-12-11 10:23         ` Stefan Hajnoczi
  2017-12-11 22:03           ` Paolo Bonzini
  0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2017-12-11 10:23 UTC (permalink / raw)
  To: Eric Blake; +Cc: Paolo Bonzini, Emilio G . Cota, Fam Zheng, qemu-devel

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

On Fri, Dec 08, 2017 at 02:02:32PM -0600, Eric Blake wrote:
> On 12/08/2017 12:12 PM, Paolo Bonzini wrote:
> > On 08/12/2017 16:13, Stefan Hajnoczi wrote:
> >>> -    qemu_mutex_lock(&pool->lock);
> >>> +    QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
> >>>      if (pool->idle_threads == 0 && pool->cur_threads < pool->max_threads) {
> >>>          spawn_thread(pool);
> >>>      }
> >>>      QTAILQ_INSERT_TAIL(&pool->request_list, req, reqs);
> >>> -    qemu_mutex_unlock(&pool->lock);
> >>> +    qemu_lock_guard_unlock(&pool_guard);
> >> Why not QEMU_WITH_LOCK()?  Then you can get rid of the explicit unlock.
> > 
> > I agree that QEMU_WITH_LOCK_GUARD is better in this case. (IIRC I wrote
> > this patch before coming up with the is_taken trick!).
> > 
> > My main question for the series is what you think the balance should be
> > between a more widely applicable API and a simpler one.
> 
> If you require the user to provide the scope, this could be:
> 
> @@ -258,12 +254,12 @@ BlockAIOCB *thread_pool_submit_aio(ThreadPool *pool,
> 
>      trace_thread_pool_submit(pool, req, arg);
> 
> -    qemu_mutex_lock(&pool->lock);
> -    if (pool->idle_threads == 0 && pool->cur_threads < pool->max_threads) {
> -        spawn_thread(pool);
> -    QTAILQ_INSERT_TAIL(&pool->request_list, req, reqs);
> +    {
> +        QEMU_LOCK_GUARD(QemuMutex, pool_guard, &pool->lock);
> +        if (pool->idle_threads == 0 && pool->cur_threads <
> pool->max_threads) {
> +            spawn_thread(pool);
> +        }
> +        QTAILQ_INSERT_TAIL(&pool->request_list, req, reqs);
>      }
> -    qemu_mutex_unlock(&pool->lock);
>      qemu_sem_post(&pool->sem);
>      return &req->common;
>  }
> 
> In other words, I don't see what 'QEMU_WITH_LOCK_GUARD() {}' buys us
> over '{ QEMU_LOCK_GUARD() }'.

The QEMU_WITH_LOCK_GUARD() {} syntax is nice because it's similar to
if/while/for statements.

However, { QEMU_LOCK_GUARD() } doesn't hide a for statement in a macro
so the break statement works inside the scope.  Less chance of bugs.

I'd be okay without QEMU_WITH_LOCK_GUARD().

Stefan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

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

* Re: [Qemu-devel] [PATCH 2/5] lock-guard: add scoped lock implementation
  2017-12-11 10:16       ` Stefan Hajnoczi
@ 2017-12-11 13:51         ` Eric Blake
  2017-12-12  9:16           ` Stefan Hajnoczi
  0 siblings, 1 reply; 31+ messages in thread
From: Eric Blake @ 2017-12-11 13:51 UTC (permalink / raw)
  To: Stefan Hajnoczi, Paolo Bonzini; +Cc: Emilio G . Cota, Fam Zheng, qemu-devel

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

On 12/11/2017 04:16 AM, Stefan Hajnoczi wrote:

>>> I don't understand the need for the qemu_lock_guard_is_taken(&name)
>>> condition, why not do the following?
>>>
>>>   for (QEMU_LOCK_GUARD(type, name, lock);
>>>        ;
>>>        qemu_lock_guard_unlock(&name))
>>
>> Because that would be an infinite loop. :)
> 
> Sorry, I mean for (...; false; ...).  Is there any reason to do
> qemu_lock_guard_is_taken(&name)?

You need the loop to execute at least once ;)

But I proposed an alternative that doesn't need is_taken, by:

for (bool name##done = false, QEMU_LOCK_GUARD(type, name, lock);
     ! name##done; name##done = true)

if we still like the form that declares a for-loop scope.

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


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

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

* Re: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
  2017-12-11  9:38   ` Peter Maydell
@ 2017-12-11 14:11     ` Eric Blake
  2017-12-11 21:32       ` Paolo Bonzini
  0 siblings, 1 reply; 31+ messages in thread
From: Eric Blake @ 2017-12-11 14:11 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Paolo Bonzini, QEMU Developers, Emilio G . Cota, Fam Zheng,
	Stefan Hajnoczi

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

On 12/11/2017 03:38 AM, Peter Maydell wrote:
> On 8 December 2017 at 19:40, Eric Blake <eblake@redhat.com> wrote:
>> On 12/08/2017 04:55 AM, Paolo Bonzini wrote:
>>> Likewise,
>>>
>>>     QEMU_WITH_LOCK(QemuMutex, guard_name, &some_mutex) {
>>>         ...
>>>     }
>>>
>>> is the same as
>>>
>>>     qemu_mutex_lock(&some_mutex);
>>>     ...
>>>     qemu_mutex_unlock(&some_mutex);
>>>
>>> except that any returns within the region will unlock the mutex.
>>
>> Not just returns, but ANY manner that you leave the scope, including a
>> goto or just falling out of the end of the scope.
> 
> How about longjmp()ing out of it?

Easy to test:

==========
#include <stdio.h>
#include <setjmp.h>
#include <stdlib.h>

void my_cleanup (int *ptr) {
  int *i = ptr;
  printf("in my_cleanup(%d)\n", *i);
}

jmp_buf jmp;

void foo(int i) {
  while (1) {
    __attribute__((cleanup(my_cleanup))) int j = i;
    if (i == 0) {
      printf("before leaving scope by return\n");
      return;
    }
    if (i == 1) {
      goto label;
    }
    if (i == 3) {
      longjmp(jmp, 1);
    }
    if (i == 4) {
      printf("before leaving scope by exit\n");
      exit(0);
    }
    break;
  }
  printf("after leaving scope by break\n");
  return;
 label:
  printf("after leaving scope by return\n");
}

int main(void) {
  foo(0);
  foo(1);
  foo(2);
  if (!setjmp(jmp)) {
    foo(3);
  }
  printf("after leaving scope by longjmp\n");
  foo(4);
}
============

But the results aren't necessarily nice, depending on how we currently
(ab)use longjmp. Under Fedora 27
gcc (GCC) 7.2.1 20170915 (Red Hat 7.2.1-2)

I get

$ ./foo
before leaving scope by return
in my_cleanup(0)
in my_cleanup(1)
after leaving scope by return
in my_cleanup(2)
after leaving scope by break
after leaving scope by longjmp
before leaving scope by exit

I don't know if there is a way to make gcc insert stack-unwind
directives that are honored across longjmp (I know C++ does it for
exceptions; so there may be a way, and I just don't know it).
Conversely, I do know that pthread_cleanup_push/pop, which does
something similar, is permitted by POSIX to NOT work across longjmp:

       Calling longjmp(3) (siglongjmp(3)) produces undefined  results
if  any
       call  has  been made to pthread_cleanup_push() or
pthread_cleanup_pop()
       without the matching call of the pair since the jump buffer was
filled
       by   setjmp(3)  (sigsetjmp(3)).   Likewise,  calling  longjmp(3)
(sig‐
       longjmp(3)) from inside a clean-up handler produces  undefined
results
       unless  the  jump  buffer  was  also filled by setjmp(3)
(sigsetjmp(3))
       inside the handler.


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


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

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

* Re: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
  2017-12-11 14:11     ` Eric Blake
@ 2017-12-11 21:32       ` Paolo Bonzini
  2017-12-12 20:41         ` Eric Blake
  0 siblings, 1 reply; 31+ messages in thread
From: Paolo Bonzini @ 2017-12-11 21:32 UTC (permalink / raw)
  To: Eric Blake, Peter Maydell
  Cc: QEMU Developers, Emilio G . Cota, Fam Zheng, Stefan Hajnoczi

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

On 11/12/2017 15:11, Eric Blake wrote:
> I don't know if there is a way to make gcc insert stack-unwind
> directives that are honored across longjmp (I know C++ does it for
> exceptions; so there may be a way, and I just don't know it).

Probably -fexceptions.

Paolo

> Conversely, I do know that pthread_cleanup_push/pop, which does
> something similar, is permitted by POSIX to NOT work across longjmp:
> 
>        Calling longjmp(3) (siglongjmp(3)) produces undefined  results
> if  any
>        call  has  been made to pthread_cleanup_push() or
> pthread_cleanup_pop()
>        without the matching call of the pair since the jump buffer was
> filled
>        by   setjmp(3)  (sigsetjmp(3)).   Likewise,  calling  longjmp(3)
> (sig‐
>        longjmp(3)) from inside a clean-up handler produces  undefined
> results
>        unless  the  jump  buffer  was  also filled by setjmp(3)
> (sigsetjmp(3))
>        inside the handler.



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

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

* Re: [Qemu-devel] [PATCH 5/5] thread-pool: convert to use lock guards
  2017-12-11 10:23         ` Stefan Hajnoczi
@ 2017-12-11 22:03           ` Paolo Bonzini
  0 siblings, 0 replies; 31+ messages in thread
From: Paolo Bonzini @ 2017-12-11 22:03 UTC (permalink / raw)
  To: Stefan Hajnoczi, Eric Blake; +Cc: Emilio G . Cota, Fam Zheng, qemu-devel

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

On 11/12/2017 11:23, Stefan Hajnoczi wrote:
>>
>> In other words, I don't see what 'QEMU_WITH_LOCK_GUARD() {}' buys us
>> over '{ QEMU_LOCK_GUARD() }'.
> The QEMU_WITH_LOCK_GUARD() {} syntax is nice because it's similar to
> if/while/for statements.
> 
> However, { QEMU_LOCK_GUARD() } doesn't hide a for statement in a macro
> so the break statement works inside the scope.  Less chance of bugs.

The same is true of a "switch" statement.  Being able to break out of
QEMU_WITH_LOCK_GUARD could also be a feature...

Paolo


> I'd be okay without QEMU_WITH_LOCK_GUARD().


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

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

* Re: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
  2017-12-08 10:55 [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Paolo Bonzini
                   ` (8 preceding siblings ...)
  2017-12-11  6:46 ` no-reply
@ 2017-12-11 22:06 ` Emilio G. Cota
  9 siblings, 0 replies; 31+ messages in thread
From: Emilio G. Cota @ 2017-12-11 22:06 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, Stefan Hajnoczi, Fam Zheng

On Fri, Dec 08, 2017 at 11:55:48 +0100, Paolo Bonzini wrote:
> So I'm a bit underwhelmed by this experiment.  Other opinions?

I am on the same boat. Most use cases in this patchset are arguably
adding more complexity because they substitute already very simple
code (e.g. "lock; do_something; unlock"), as others have pointed out
as well.

I usually deal with tricky cases (i.e. functions with many return
paths) with an inline "__locked" function. In most cases this will
be clearer than using the macros. I concede though that the separate
inline is not always an option.

That said, two comments:

- We might be better off just exposing the cleanup attribute
  via some convenience macros. The systemd codebase does this,
  mostly for freeing memory or closing file descriptors. I suspect
  a large percentage of goto's in our codebase could be eliminated.

  This could be also used for locks, although we'd need a variant
  of mutex_lock that returned the mutex, so that in the cleanup
  function we could just check for NULL.

- Does the cleanup attribute work on all compilers used to build QEMU?
  (I'm thinking of Windows in particular.)

Thanks,

		Emilio

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

* Re: [Qemu-devel] [PATCH 2/5] lock-guard: add scoped lock implementation
  2017-12-11 13:51         ` Eric Blake
@ 2017-12-12  9:16           ` Stefan Hajnoczi
  0 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2017-12-12  9:16 UTC (permalink / raw)
  To: Eric Blake; +Cc: Paolo Bonzini, Emilio G . Cota, Fam Zheng, qemu-devel

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

On Mon, Dec 11, 2017 at 07:51:43AM -0600, Eric Blake wrote:
> On 12/11/2017 04:16 AM, Stefan Hajnoczi wrote:
> 
> >>> I don't understand the need for the qemu_lock_guard_is_taken(&name)
> >>> condition, why not do the following?
> >>>
> >>>   for (QEMU_LOCK_GUARD(type, name, lock);
> >>>        ;
> >>>        qemu_lock_guard_unlock(&name))
> >>
> >> Because that would be an infinite loop. :)
> > 
> > Sorry, I mean for (...; false; ...).  Is there any reason to do
> > qemu_lock_guard_is_taken(&name)?
> 
> You need the loop to execute at least once ;)
> 
> But I proposed an alternative that doesn't need is_taken, by:
> 
> for (bool name##done = false, QEMU_LOCK_GUARD(type, name, lock);
>      ! name##done; name##done = true)
> 
> if we still like the form that declares a for-loop scope.

Okay guys, for loops are hard.  I give up programming.

Stefan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

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

* Re: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
  2017-12-11 21:32       ` Paolo Bonzini
@ 2017-12-12 20:41         ` Eric Blake
  2017-12-15 15:50           ` Richard Henderson
  0 siblings, 1 reply; 31+ messages in thread
From: Eric Blake @ 2017-12-12 20:41 UTC (permalink / raw)
  To: Paolo Bonzini, Peter Maydell
  Cc: QEMU Developers, Emilio G . Cota, Fam Zheng, Stefan Hajnoczi

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

On 12/11/2017 03:32 PM, Paolo Bonzini wrote:
> On 11/12/2017 15:11, Eric Blake wrote:
>> I don't know if there is a way to make gcc insert stack-unwind
>> directives that are honored across longjmp (I know C++ does it for
>> exceptions; so there may be a way, and I just don't know it).
> 
> Probably -fexceptions.
> 

Well, that's what 'info gcc' mentions:

'cleanup (CLEANUP_FUNCTION)'
     The 'cleanup' attribute runs a function when the variable goes out
     of scope.  This attribute can only be applied to auto function
     scope variables; it may not be applied to parameters or variables
     with static storage duration.  The function must take one
     parameter, a pointer to a type compatible with the variable.  The
     return value of the function (if any) is ignored.

     If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
     the stack unwinding that happens during the processing of the
     exception.  Note that the 'cleanup' attribute does not allow the
     exception to be caught, only to perform an action.  It is undefined
     what happens if CLEANUP_FUNCTION does not return normally.

but adding -fexceptions to my sample program does NOT make a difference
(apparently, unwind cleanup triggered by C++ exceptions is NOT the same
as unwinding done by longjmp()).

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


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

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

* Re: [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup))
  2017-12-12 20:41         ` Eric Blake
@ 2017-12-15 15:50           ` Richard Henderson
  0 siblings, 0 replies; 31+ messages in thread
From: Richard Henderson @ 2017-12-15 15:50 UTC (permalink / raw)
  To: Eric Blake, Paolo Bonzini, Peter Maydell
  Cc: Emilio G . Cota, Fam Zheng, QEMU Developers, Stefan Hajnoczi

On 12/12/2017 02:41 PM, Eric Blake wrote:
> On 12/11/2017 03:32 PM, Paolo Bonzini wrote:
>> On 11/12/2017 15:11, Eric Blake wrote:
>>> I don't know if there is a way to make gcc insert stack-unwind
>>> directives that are honored across longjmp (I know C++ does it for
>>> exceptions; so there may be a way, and I just don't know it).
>>
>> Probably -fexceptions.
>>
> 
> Well, that's what 'info gcc' mentions:
> 
> 'cleanup (CLEANUP_FUNCTION)'
>      The 'cleanup' attribute runs a function when the variable goes out
>      of scope.  This attribute can only be applied to auto function
>      scope variables; it may not be applied to parameters or variables
>      with static storage duration.  The function must take one
>      parameter, a pointer to a type compatible with the variable.  The
>      return value of the function (if any) is ignored.
> 
>      If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
>      the stack unwinding that happens during the processing of the
>      exception.  Note that the 'cleanup' attribute does not allow the
>      exception to be caught, only to perform an action.  It is undefined
>      what happens if CLEANUP_FUNCTION does not return normally.
> 
> but adding -fexceptions to my sample program does NOT make a difference
> (apparently, unwind cleanup triggered by C++ exceptions is NOT the same
> as unwinding done by longjmp()).

longjmp isn't an exception, and so doesn't run stack cleanups.  You'd need to
use _Unwind_Throw ... except for the fact that C doesn't have a mechanism by
which we can catch it.

We would really need to use C++ and throw to get those semantics.


r~

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

end of thread, other threads:[~2017-12-15 15:50 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-08 10:55 [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Paolo Bonzini
2017-12-08 10:55 ` [Qemu-devel] [PATCH 1/5] compiler: add a helper for C99 inline functions Paolo Bonzini
2017-12-08 10:55 ` [Qemu-devel] [PATCH 2/5] lock-guard: add scoped lock implementation Paolo Bonzini
2017-12-08 15:30   ` Stefan Hajnoczi
2017-12-08 17:56     ` Paolo Bonzini
2017-12-08 20:12       ` Eric Blake
2017-12-11 10:16       ` Stefan Hajnoczi
2017-12-11 13:51         ` Eric Blake
2017-12-12  9:16           ` Stefan Hajnoczi
2017-12-08 10:55 ` [Qemu-devel] [PATCH 3/5] qemu-timer: convert to use lock guards Paolo Bonzini
2017-12-08 14:26   ` Stefan Hajnoczi
2017-12-08 10:55 ` [Qemu-devel] [PATCH 4/5] qht: " Paolo Bonzini
2017-12-08 14:27   ` Stefan Hajnoczi
2017-12-08 10:55 ` [Qemu-devel] [PATCH 5/5] thread-pool: " Paolo Bonzini
2017-12-08 15:13   ` Stefan Hajnoczi
2017-12-08 18:12     ` Paolo Bonzini
2017-12-08 20:02       ` Eric Blake
2017-12-11 10:23         ` Stefan Hajnoczi
2017-12-11 22:03           ` Paolo Bonzini
2017-12-08 19:50     ` Eric Blake
2017-12-11  6:35     ` Peter Xu
2017-12-08 19:40 ` [Qemu-devel] [RFC PATCH 0/5] Scoped locks using attribute((cleanup)) Eric Blake
2017-12-11  9:38   ` Peter Maydell
2017-12-11 14:11     ` Eric Blake
2017-12-11 21:32       ` Paolo Bonzini
2017-12-12 20:41         ` Eric Blake
2017-12-15 15:50           ` Richard Henderson
2017-12-11  6:40 ` no-reply
2017-12-11  6:40 ` no-reply
2017-12-11  6:46 ` no-reply
2017-12-11 22:06 ` Emilio G. Cota

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.