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