* [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration
@ 2017-10-30 16:32 Vladimir Sementsov-Ogievskiy
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 01/14] block/dirty-bitmap: add bdrv_dirty_bitmap_enable_successor() Vladimir Sementsov-Ogievskiy
` (16 more replies)
0 siblings, 17 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:32 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
Hi all!
There is a new version of dirty bitmap postcopy migration series.
v8
clone: tag postcopy-v8 from https://src.openvz.org/scm/~vsementsov/qemu.git
online: https://src.openvz.org/users/vsementsov/repos/qemu/browse?at=postcopy-v8
- rebased on master
- patches 01-03 from v7 are already merged to master
- patch order is changed to make it possible to merge block/dirty-bitmap patches
in separate if is needed
01: new patch
03: fixed to use _locked version of bdrv_release_dirty_bitmap
06: qapi-schema.json -> qapi/migration.json
2.9 -> 2.11
10: protocol changed a bit:
instead of 1 byte "bitmap enabled flag" this byte becomes just "flags"
and have "enabled", "persistent" and "autoloading" flags inside.
also, make all migrated bitmaps to be not persistent (to prevent their
storing on source vm)
14: new patch
patches status:
01-04 - are only about block/dirty-bitmap and have no r-b. Fam, John, Paolo (about bitmap lock),
please look at. These patches are ok to be merged in separate (but before 05-14)
other patches are about migration
05-09 has Juan's r-b (and some of them has John's and Eric's r-bs)
10 - the main patch (dirty bitmaps migration), has no r-b.
11 - preparation for tests, not related to migration directly, has Max's r-b, ok to be merged
separately (but before 12-14)
12-14 - tests, 12 and 13 have Max's r-b, 14 is new
v7
clone: tag postcopy-v7 from https://src.openvz.org/scm/~vsementsov/qemu.git
online: https://src.openvz.org/users/vsementsov/repos/qemu/browse?at=postcopy-v7
- rebased on dirty-bitmap byte-based interfaces
(based on git://repo.or.cz/qemu/ericb.git branch nbd-byte-dirty-v4)
- migration of persistent bitmaps should fail for shared storage migration for now,
as persistent dirty bitmaps are stored/load on inactivate/invalidate-cache.
also, even for non-shared storage migration there would be useless saving of dirty
bitmaps on source. This all will be optimized later.
01: staff from include/migration/vmstate.h moved to include/migration/register.h (rebase)
03: some structural changes due to rebase - drop r-b
04: staff from include/migration/vmstate.h moved to include/migration/register.h (rebase)
staff from include/sysemu/sysemu.h moved to migration/savevm.h (rebase)
05: fix patch header: block -> block/dirty-bitmap
add locking, drop r-b
06: staff from include/migration/migration.h moved to migration/migration.h (rebase)
07: add locking, drop r-b
09: staff from include/migration/qemu-file.h moved to migration/qemu-file.h (rebase)
10: staff from include/migration/vmstate.h moved to include/migration/register.h (rebase)
11: new patch
12: a lot of changes/fixes (mostly by Fam's comments) + rebase
header-definition movement
remove include <assert.h>
add some includes
fix/refactor bitmap flags send
byte-based interface for dirty bitmaps (rebase)
froze bitmaps on source
init_dirty_bitmap_migration can return error, if some of bitmaps are already
frozen
bdrv_ref drives with bitmaps
fprintf -> error_report
check version_id in _load function
v6:
clone: tag postcopy-v6 from https://src.openvz.org/scm/~vsementsov/qemu.git
online: https://src.openvz.org/users/vsementsov/repos/qemu/browse?at=postcopy-v6
rebase on master.
03 - tiny contextual change
12 - little change, but it should be reviewed. Call of init_dirty_bitmap_incoming_migration()
(which only initialize mutex) moved from start of process_incoming_migration_co (it was
immediately after "mis = migration_incoming_state_new(f)") to migration_incoming_get_current()
to stay with initialization code.
I remove r-b's, but hope that this will not be a problem. The only change in this patch - is moved
call of init_dirty_bitmap_incoming_migration.
I do so because of recent
commit b4b076daf324894dd288cbdb67ff1e3c7434df7b
Author: Juan Quintela <quintela@redhat.com>
Date: Mon Jan 23 22:32:06 2017 +0100
migration: create Migration Incoming State at init time
15 - add Max's r-b
v5:
clone: tag postcopy-v5 from https://src.openvz.org/scm/~vsementsov/qemu.git
online: https://src.openvz.org/users/vsementsov/repos/qemu/browse?at=postcopy-v5
- move 'signed-off' over 'reviewed-by' in patches.
03,04 - add comments. Hope they will be ok for you, so add Juan's r-b.
If not ok - let me know and I'll resend.
06,08,12 - add Max's r-b
07,09,10,11,12 - add Juan's r-b
14 - used last version of this patch from qcow2-bitmap series with
Max's r-b. It has contextual changes due to different base.
15 - fix 041 iotest, add default node-name only if path is specified and
node-name is not specified
16 - handle whitespaces
s/"exec: cat " + fifo/"exec: cat '" + fifo + "'"/
fix indentation
add Max's r-b
17 - fix typos, wrong size in comment, s/md5/sha256/
add Max's r-b
v4:
clone: tag postcopy-v4 from https://src.openvz.org/scm/~vsementsov/qemu.git
online: https://src.openvz.org/users/vsementsov/repos/qemu/browse?at=postcopy-v4
reroll, to fix "failed automatic build test"
rebase on master!
07: since 2.8 -> since 2.9
14: fix build of test-hbitmap
since 2.8 -> since 2.9 and small rewording of comment (this change was not done for
same patch in may parallels series about qcow2 bitmap extension)
v3:
rebased on Max's block branch: https://github.com/XanClic/qemu/commits/block
clone: tag postcopy-v3 from https://src.openvz.org/scm/~vsementsov/qemu.git
online: https://src.openvz.org/users/vsementsov/repos/qemu/browse?at=postcopy-v3
01 - r-b by Juan
02 - r-b by Juan and David
04 - fix indent
07 - s/since 2.6/since 2.8/
10 - change variable name s/buf/str/
12 - improve copyright message and move it up
fix memory loss (thanks to Juan)
switch from DPRINTF to trace events
14* - switch to sha256 and qcrypto_hash_*
separate qmp command x-debug-block-dirty-bitmap-sha256
16 - use path_suffix for multi-vm test
fix indent
fix copyright
use x-debug-block-dirty-bitmap-sha256 instead of md5
17 - use x-debug-block-dirty-bitmap-sha256 instead of md5
remove not existing 170 test from qemu-iotests/group
*Note: patch 14 is also used in my second series 'qcow2 persistent dirty bitmaps'
v2:
some bugs fixed, iotests a bit changed and merged into one test.
based on block-next (https://github.com/XanClic/qemu/commits/block-next)
clone: tag postcopy-v2 from https://src.openvz.org/scm/~vsementsov/qemu.git
online: https://src.openvz.org/users/vsementsov/repos/qemu/browse?at=refs%2Ftags%2Fpostcopy-v2
v1:
These series are derived from my 'Dirty bitmaps migration' series. The
core idea is switch to postcopy migration and drop usage of meta
bitmaps.
These patches provide dirty bitmap postcopy migration feature. Only
named dirty bitmaps are to be migrated. Migration may be enabled using
migration capabilities.
The overall method (thanks to John Snow):
1. migrate bitmaps meta data in .save_live_setup
- create/find related bitmaps on target
- disable them
- create successors (anonimous children) only for enabled migrated
bitmaps
2. do nothing in precopy stage
3. just before target vm start: enable successors, created in (1)
4. migrate bitmap data
5. reclaime bitmaps (merge successors to their parents)
6. enable bitmaps (only bitmaps, which was enabled in source)
Some patches are unchnaged from (v7) of 'Dirty bitmaps migration'
(DBMv7). I've left Reviewed-by's for them, if you don't like it, say me
and I'll drop them in the following version.
So, relatively to last DBMv7:
01-04: new patches, splitting common postcopy migration out of ram
postcopy migration
05: equal to DBMv7.05
06: new
07: equal to DBMv7.06
08: new
09: equal to DBMv7.07
10: new
11: derived from DBMv7.08, see below
12-15: equal to DBMv7.09-12
16: derived from DBMv7.13
- switch from fifo to socket, as postcopy don't work with fifo
for now
- change parameters: size, granularity, regions
- add time.sleep, to wait for postcopy migration phase (bad
temporary solution.
- drop Reviewed-by
17: new
11: the core patch of the series, it is derived from
[DBMv7.08: migration: add migration_block-dirty-bitmap.c]
There are a lot of changes related to switching from precopy to
postcopy, but functions related to migration stream itself
(structs, send/load sequences) are mostly unchnaged.
So, changes, to switch from precopy to postcopy:
- removed all staff related to meta bitmaps and dirty phase!!!
- add dirty_bitmap_mig_enable_successors, and call it before
target vm start in loadvm_postcopy_handle_run
- add enabled_bitmaps list of bitmaps for
dirty_bitmap_mig_enable_successors
- enabled flag is send with start bitmap chunk instead of
completion chunk
- sectors_per_chunk is calculated directly from CHUNK_SIZE, not
using meta bitmap granularity
- dirty_bitmap_save_iterate: remove dirty_phase, move bulk_phase
to postcopy stage
- dirty_bitmap_save_pending: remove dirty phase related pending,
switch pending to non-postcopyable
- dirty_bitmap_load_start: get enabled flag and prepare
successors for enabled bitmaps, also add them to
enabled_bitmaps list
- dirty_bitmap_load_complete: for enabled bitmaps: merge them
with successors and enable
- savevm handlers:
* remove separate savevm_dirty_bitmap_live_iterate_handlers state
(it was bad idea, any way), and move its save_live_iterate to
savevm_dirty_bitmap_handlers
* add is_active_iterate savevm handler, which allows iterations
only in postcopy stage (after stopping source vm)
* add has_postcopy savevm handler. (ofcourse, just returning true)
* use save_live_complete_postcopy instead of
save_live_complete_precopy
Other changes:
- some debug output changed
- remove MIN_LIVE_SIZE, is_live_iterative and related staff (it
was needed to omit iterations if bitmap data is small, possibly
this should be reimplemented)
Vladimir Sementsov-Ogievskiy (14):
block/dirty-bitmap: add bdrv_dirty_bitmap_enable_successor()
block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap
block/dirty-bitmap: add bdrv_dirty_bitmap_release_successor
block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen
migration: introduce postcopy-only pending
qapi: add dirty-bitmaps migration capability
migration: include migrate_dirty_bitmaps in migrate_postcopy
migration/qemu-file: add qemu_put_counted_string()
migration: add is_active_iterate handler
migration: add postcopy migration of dirty bitmaps
iotests: add default node-name
iotests: add dirty bitmap migration test
iotests: add dirty bitmap postcopy test
iotests: add persistent bitmap migration test
qapi/migration.json | 6 +-
include/block/dirty-bitmap.h | 4 +
include/migration/misc.h | 3 +
include/migration/register.h | 18 +-
migration/migration.h | 4 +
migration/qemu-file.h | 2 +
migration/savevm.h | 5 +-
block/dirty-bitmap.c | 69 +++-
migration/block-dirty-bitmap.c | 734 +++++++++++++++++++++++++++++++++++++++++
migration/block.c | 7 +-
migration/migration.c | 29 +-
migration/qemu-file.c | 13 +
migration/ram.c | 9 +-
migration/savevm.c | 20 +-
vl.c | 1 +
migration/Makefile.objs | 1 +
migration/trace-events | 16 +-
tests/qemu-iotests/169 | 155 +++++++++
tests/qemu-iotests/169.out | 5 +
tests/qemu-iotests/group | 1 +
tests/qemu-iotests/iotests.py | 9 +-
21 files changed, 1077 insertions(+), 34 deletions(-)
create mode 100644 migration/block-dirty-bitmap.c
create mode 100755 tests/qemu-iotests/169
create mode 100644 tests/qemu-iotests/169.out
--
2.11.1
^ permalink raw reply [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 01/14] block/dirty-bitmap: add bdrv_dirty_bitmap_enable_successor()
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:32 ` Vladimir Sementsov-Ogievskiy
2017-11-10 0:47 ` John Snow
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 02/14] block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap Vladimir Sementsov-Ogievskiy
` (15 subsequent siblings)
16 siblings, 1 reply; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:32 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
Enabling bitmap successor is necessary to enable successors of bitmaps
being migrated before target vm start.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
include/block/dirty-bitmap.h | 1 +
block/dirty-bitmap.c | 8 ++++++++
2 files changed, 9 insertions(+)
diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
index 3579a7597c..93d4336505 100644
--- a/include/block/dirty-bitmap.h
+++ b/include/block/dirty-bitmap.h
@@ -20,6 +20,7 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
BdrvDirtyBitmap *bitmap,
Error **errp);
+void bdrv_dirty_bitmap_enable_successor(BdrvDirtyBitmap *bitmap);
BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs,
const char *name);
void bdrv_dirty_bitmap_make_anon(BdrvDirtyBitmap *bitmap);
diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
index bd04e991b1..81adbeb6d4 100644
--- a/block/dirty-bitmap.c
+++ b/block/dirty-bitmap.c
@@ -237,6 +237,14 @@ int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
return 0;
}
+/* Called with BQL taken. */
+void bdrv_dirty_bitmap_enable_successor(BdrvDirtyBitmap *bitmap)
+{
+ qemu_mutex_lock(bitmap->mutex);
+ bdrv_enable_dirty_bitmap(bitmap->successor);
+ qemu_mutex_unlock(bitmap->mutex);
+}
+
/**
* For a bitmap with a successor, yield our name to the successor,
* delete the old bitmap, and return a handle to the new bitmap.
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 02/14] block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 01/14] block/dirty-bitmap: add bdrv_dirty_bitmap_enable_successor() Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:32 ` Vladimir Sementsov-Ogievskiy
2017-11-10 22:52 ` John Snow
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 03/14] block/dirty-bitmap: add bdrv_dirty_bitmap_release_successor Vladimir Sementsov-Ogievskiy
` (14 subsequent siblings)
16 siblings, 1 reply; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:32 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
It is needed to realize bdrv_dirty_bitmap_release_successor in
the following patch.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block/dirty-bitmap.c | 25 ++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
index 81adbeb6d4..981f99d362 100644
--- a/block/dirty-bitmap.c
+++ b/block/dirty-bitmap.c
@@ -326,13 +326,13 @@ static bool bdrv_dirty_bitmap_has_name(BdrvDirtyBitmap *bitmap)
return !!bdrv_dirty_bitmap_name(bitmap);
}
-/* Called with BQL taken. */
-static void bdrv_do_release_matching_dirty_bitmap(
+/* Called within bdrv_dirty_bitmap_lock..unlock */
+static void bdrv_do_release_matching_dirty_bitmap_locked(
BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
bool (*cond)(BdrvDirtyBitmap *bitmap))
{
BdrvDirtyBitmap *bm, *next;
- bdrv_dirty_bitmaps_lock(bs);
+
QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
if ((!bitmap || bm == bitmap) && (!cond || cond(bm))) {
assert(!bm->active_iterators);
@@ -344,18 +344,33 @@ static void bdrv_do_release_matching_dirty_bitmap(
g_free(bm);
if (bitmap) {
- goto out;
+ return;
}
}
}
+
if (bitmap) {
abort();
}
+}
-out:
+/* Called with BQL taken. */
+static void bdrv_do_release_matching_dirty_bitmap(
+ BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
+ bool (*cond)(BdrvDirtyBitmap *bitmap))
+{
+ bdrv_dirty_bitmaps_lock(bs);
+ bdrv_do_release_matching_dirty_bitmap_locked(bs, bitmap, cond);
bdrv_dirty_bitmaps_unlock(bs);
}
+/* Called within bdrv_dirty_bitmap_lock..unlock */
+static void bdrv_release_dirty_bitmap_locked(BlockDriverState *bs,
+ BdrvDirtyBitmap *bitmap)
+{
+ bdrv_do_release_matching_dirty_bitmap_locked(bs, bitmap, NULL);
+}
+
/* Called with BQL taken. */
void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
{
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 03/14] block/dirty-bitmap: add bdrv_dirty_bitmap_release_successor
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 01/14] block/dirty-bitmap: add bdrv_dirty_bitmap_enable_successor() Vladimir Sementsov-Ogievskiy
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 02/14] block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:32 ` Vladimir Sementsov-Ogievskiy
2017-11-13 22:17 ` John Snow
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 04/14] block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen Vladimir Sementsov-Ogievskiy
` (13 subsequent siblings)
16 siblings, 1 reply; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:32 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
To just release successor and unfreeze bitmap without any additional
work.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
---
include/block/dirty-bitmap.h | 2 ++
block/dirty-bitmap.c | 14 ++++++++++++++
2 files changed, 16 insertions(+)
diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
index 93d4336505..a9e2a92e4f 100644
--- a/include/block/dirty-bitmap.h
+++ b/include/block/dirty-bitmap.h
@@ -20,6 +20,8 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
BdrvDirtyBitmap *bitmap,
Error **errp);
+void bdrv_dirty_bitmap_release_successor(BlockDriverState *bs,
+ BdrvDirtyBitmap *bitmap);
void bdrv_dirty_bitmap_enable_successor(BdrvDirtyBitmap *bitmap);
BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs,
const char *name);
diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
index 981f99d362..7578863aa1 100644
--- a/block/dirty-bitmap.c
+++ b/block/dirty-bitmap.c
@@ -431,6 +431,20 @@ void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
bitmap->disabled = false;
}
+/* Called with BQL taken. */
+void bdrv_dirty_bitmap_release_successor(BlockDriverState *bs,
+ BdrvDirtyBitmap *parent)
+{
+ qemu_mutex_lock(parent->mutex);
+
+ if (parent->successor) {
+ bdrv_release_dirty_bitmap_locked(bs, parent->successor);
+ parent->successor = NULL;
+ }
+
+ qemu_mutex_unlock(parent->mutex);
+}
+
BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
{
BdrvDirtyBitmap *bm;
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 04/14] block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (2 preceding siblings ...)
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 03/14] block/dirty-bitmap: add bdrv_dirty_bitmap_release_successor Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:32 ` Vladimir Sementsov-Ogievskiy
2017-11-13 23:32 ` John Snow
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 05/14] migration: introduce postcopy-only pending Vladimir Sementsov-Ogievskiy
` (12 subsequent siblings)
16 siblings, 1 reply; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:32 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
Make it possible to set bitmap 'frozen' without a successor.
This is needed to protect the bitmap during outgoing bitmap postcopy
migration.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
include/block/dirty-bitmap.h | 1 +
block/dirty-bitmap.c | 22 ++++++++++++++++++++--
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
index a9e2a92e4f..ae6d697850 100644
--- a/include/block/dirty-bitmap.h
+++ b/include/block/dirty-bitmap.h
@@ -39,6 +39,7 @@ uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs);
uint32_t bdrv_dirty_bitmap_granularity(const BdrvDirtyBitmap *bitmap);
bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap);
bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap);
+void bdrv_dirty_bitmap_set_frozen(BdrvDirtyBitmap *bitmap, bool frozen);
const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap);
int64_t bdrv_dirty_bitmap_size(const BdrvDirtyBitmap *bitmap);
DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap);
diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
index 7578863aa1..67fc6bd6e0 100644
--- a/block/dirty-bitmap.c
+++ b/block/dirty-bitmap.c
@@ -40,6 +40,8 @@ struct BdrvDirtyBitmap {
QemuMutex *mutex;
HBitmap *bitmap; /* Dirty bitmap implementation */
HBitmap *meta; /* Meta dirty bitmap */
+ bool frozen; /* Bitmap is frozen, it can't be modified
+ through QMP */
BdrvDirtyBitmap *successor; /* Anonymous child; implies frozen status */
char *name; /* Optional non-empty unique ID */
int64_t size; /* Size of the bitmap, in bytes */
@@ -183,13 +185,22 @@ const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap)
/* Called with BQL taken. */
bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap)
{
- return bitmap->successor;
+ return bitmap->frozen;
+}
+
+/* Called with BQL taken. */
+void bdrv_dirty_bitmap_set_frozen(BdrvDirtyBitmap *bitmap, bool frozen)
+{
+ qemu_mutex_lock(bitmap->mutex);
+ assert(bitmap->successor == NULL);
+ bitmap->frozen = frozen;
+ qemu_mutex_unlock(bitmap->mutex);
}
/* Called with BQL taken. */
bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
{
- return !(bitmap->disabled || bitmap->successor);
+ return !(bitmap->disabled || (bitmap->successor != NULL));
}
/* Called with BQL taken. */
@@ -234,6 +245,7 @@ int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
/* Install the successor and freeze the parent */
bitmap->successor = child;
+ bitmap->frozen = true;
return 0;
}
@@ -266,6 +278,8 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
name = bitmap->name;
bitmap->name = NULL;
successor->name = name;
+ assert(bitmap->frozen);
+ bitmap->frozen = false;
bitmap->successor = NULL;
successor->persistent = bitmap->persistent;
bitmap->persistent = false;
@@ -298,6 +312,8 @@ BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
return NULL;
}
bdrv_release_dirty_bitmap(bs, successor);
+ assert(parent->frozen);
+ parent->frozen = false;
parent->successor = NULL;
return parent;
@@ -439,6 +455,8 @@ void bdrv_dirty_bitmap_release_successor(BlockDriverState *bs,
if (parent->successor) {
bdrv_release_dirty_bitmap_locked(bs, parent->successor);
+ assert(parent->frozen);
+ parent->frozen = false;
parent->successor = NULL;
}
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 05/14] migration: introduce postcopy-only pending
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (3 preceding siblings ...)
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 04/14] block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:33 ` Vladimir Sementsov-Ogievskiy
2017-10-30 17:31 ` Dr. David Alan Gilbert
2017-10-30 18:19 ` [Qemu-devel] [PATCH v8.1 " Vladimir Sementsov-Ogievskiy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 06/14] qapi: add dirty-bitmaps migration capability Vladimir Sementsov-Ogievskiy
` (11 subsequent siblings)
16 siblings, 2 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:33 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
There would be savevm states (dirty-bitmap) which can migrate only in
postcopy stage. The corresponding pending is introduced here.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
---
include/migration/register.h | 17 +++++++++++++++--
migration/savevm.h | 5 +++--
migration/block.c | 7 ++++---
migration/migration.c | 15 ++++++++-------
migration/ram.c | 9 +++++----
migration/savevm.c | 13 ++++++++-----
migration/trace-events | 2 +-
7 files changed, 44 insertions(+), 24 deletions(-)
diff --git a/include/migration/register.h b/include/migration/register.h
index f4f7bdc177..9436a87678 100644
--- a/include/migration/register.h
+++ b/include/migration/register.h
@@ -37,8 +37,21 @@ typedef struct SaveVMHandlers {
int (*save_setup)(QEMUFile *f, void *opaque);
void (*save_live_pending)(QEMUFile *f, void *opaque,
uint64_t threshold_size,
- uint64_t *non_postcopiable_pending,
- uint64_t *postcopiable_pending);
+ uint64_t *res_precopy_only,
+ uint64_t *res_compatible,
+ uint64_t *res_postcopy_only);
+ /* Note for save_live_pending:
+ * - res_precopy_only is for data which must be migrated in precopy phase
+ * or in stopped state, in other words - before target vm start
+ * - res_compatible is for data which may be migrated in any phase
+ * - res_postcopy_only is for data which must be migrated in postcopy phase
+ * or in stopped state, in other words - after source vm stop
+ *
+ * Sum of res_postcopy_only, res_compatible and res_postcopy_only is the
+ * whole amount of pending data.
+ */
+
+
LoadStateHandler *load_state;
int (*load_setup)(QEMUFile *f, void *opaque);
int (*load_cleanup)(void *opaque);
diff --git a/migration/savevm.h b/migration/savevm.h
index 295c4a1f2c..cf4f0d37ca 100644
--- a/migration/savevm.h
+++ b/migration/savevm.h
@@ -38,8 +38,9 @@ void qemu_savevm_state_complete_postcopy(QEMUFile *f);
int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
bool inactivate_disks);
void qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size,
- uint64_t *res_non_postcopiable,
- uint64_t *res_postcopiable);
+ uint64_t *res_precopy_only,
+ uint64_t *res_compatible,
+ uint64_t *res_postcopy_only);
void qemu_savevm_send_ping(QEMUFile *f, uint32_t value);
void qemu_savevm_send_open_return_path(QEMUFile *f);
int qemu_savevm_send_packaged(QEMUFile *f, const uint8_t *buf, size_t len);
diff --git a/migration/block.c b/migration/block.c
index 3282809583..39dfa567e8 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -865,8 +865,9 @@ static int block_save_complete(QEMUFile *f, void *opaque)
}
static void block_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
- uint64_t *non_postcopiable_pending,
- uint64_t *postcopiable_pending)
+ uint64_t *res_precopy_only,
+ uint64_t *res_compatible,
+ uint64_t *res_postcopy_only)
{
/* Estimate pending number of bytes to send */
uint64_t pending;
@@ -887,7 +888,7 @@ static void block_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
DPRINTF("Enter save live pending %" PRIu64 "\n", pending);
/* We don't do postcopy */
- *non_postcopiable_pending += pending;
+ *res_precopy_only += pending;
}
static int block_load(QEMUFile *f, void *opaque, int version_id)
diff --git a/migration/migration.c b/migration/migration.c
index 4de3b551fe..e6c9be3cca 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2216,20 +2216,21 @@ static void *migration_thread(void *opaque)
uint64_t pending_size;
if (!qemu_file_rate_limit(s->to_dst_file)) {
- uint64_t pend_post, pend_nonpost;
+ uint64_t pend_pre, pend_compat, pend_post;
- qemu_savevm_state_pending(s->to_dst_file, threshold_size,
- &pend_nonpost, &pend_post);
- pending_size = pend_nonpost + pend_post;
+ qemu_savevm_state_pending(s->to_dst_file, threshold_size, &pend_pre,
+ &pend_compat, &pend_post);
+ pending_size = pend_pre + pend_compat + pend_post;
trace_migrate_pending(pending_size, threshold_size,
- pend_post, pend_nonpost);
+ pend_pre, pend_compat, pend_post);
if (pending_size && pending_size >= threshold_size) {
/* Still a significant amount to transfer */
if (migrate_postcopy() &&
s->state != MIGRATION_STATUS_POSTCOPY_ACTIVE &&
- pend_nonpost <= threshold_size &&
- atomic_read(&s->start_postcopy)) {
+ pend_pre <= threshold_size &&
+ (atomic_read(&s->start_postcopy) ||
+ (pend_pre + pend_compat <= threshold_size))) {
if (!postcopy_start(s, &old_vm_running)) {
current_active_state = MIGRATION_STATUS_POSTCOPY_ACTIVE;
diff --git a/migration/ram.c b/migration/ram.c
index 8620aa400a..1b664a2d9a 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -2358,8 +2358,9 @@ static int ram_save_complete(QEMUFile *f, void *opaque)
}
static void ram_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
- uint64_t *non_postcopiable_pending,
- uint64_t *postcopiable_pending)
+ uint64_t *res_precopy_only,
+ uint64_t *res_compatible,
+ uint64_t *res_postcopy_only)
{
RAMState **temp = opaque;
RAMState *rs = *temp;
@@ -2379,9 +2380,9 @@ static void ram_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
if (migrate_postcopy_ram()) {
/* We can do postcopy, and all the data is postcopiable */
- *postcopiable_pending += remaining_size;
+ *res_compatible += remaining_size;
} else {
- *non_postcopiable_pending += remaining_size;
+ *res_precopy_only += remaining_size;
}
}
diff --git a/migration/savevm.c b/migration/savevm.c
index 4a88228614..f6b62cb202 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1218,13 +1218,15 @@ int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
* for units that can't do postcopy.
*/
void qemu_savevm_state_pending(QEMUFile *f, uint64_t threshold_size,
- uint64_t *res_non_postcopiable,
- uint64_t *res_postcopiable)
+ uint64_t *res_precopy_only,
+ uint64_t *res_compatible,
+ uint64_t *res_postcopy_only)
{
SaveStateEntry *se;
- *res_non_postcopiable = 0;
- *res_postcopiable = 0;
+ *res_precopy_only = 0;
+ *res_compatible = 0;
+ *res_postcopy_only = 0;
QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
@@ -1237,7 +1239,8 @@ void qemu_savevm_state_pending(QEMUFile *f, uint64_t threshold_size,
}
}
se->ops->save_live_pending(f, se->opaque, threshold_size,
- res_non_postcopiable, res_postcopiable);
+ res_precopy_only, res_compatible,
+ res_postcopy_only);
}
}
diff --git a/migration/trace-events b/migration/trace-events
index 6f29fcc686..a04fffb877 100644
--- a/migration/trace-events
+++ b/migration/trace-events
@@ -86,7 +86,7 @@ migrate_fd_cleanup(void) ""
migrate_fd_error(const char *error_desc) "error=%s"
migrate_fd_cancel(void) ""
migrate_handle_rp_req_pages(const char *rbname, size_t start, size_t len) "in %s at 0x%zx len 0x%zx"
-migrate_pending(uint64_t size, uint64_t max, uint64_t post, uint64_t nonpost) "pending size %" PRIu64 " max %" PRIu64 " (post=%" PRIu64 " nonpost=%" PRIu64 ")"
+migrate_pending(uint64_t size, uint64_t max, uint64_t pre, uint64_t compat, uint64_t post) "pending size %" PRIu64 " max %" PRIu64 " (pre = %" PRIu64 " compat=%" PRIu64 " post=%" PRIu64 ")"
migrate_send_rp_message(int msg_type, uint16_t len) "%d: len %d"
migration_completion_file_err(void) ""
migration_completion_postcopy_end(void) ""
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 06/14] qapi: add dirty-bitmaps migration capability
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (4 preceding siblings ...)
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 05/14] migration: introduce postcopy-only pending Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:33 ` Vladimir Sementsov-Ogievskiy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 07/14] migration: include migrate_dirty_bitmaps in migrate_postcopy Vladimir Sementsov-Ogievskiy
` (10 subsequent siblings)
16 siblings, 0 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:33 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
---
qapi/migration.json | 6 +++++-
migration/migration.h | 1 +
migration/migration.c | 9 +++++++++
3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/qapi/migration.json b/qapi/migration.json
index bbc4671ded..ee0ad0b3ad 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -352,12 +352,16 @@
#
# @x-multifd: Use more than one fd for migration (since 2.11)
#
+# @dirty-bitmaps: If enabled, QEMU will migrate named dirty bitmaps.
+# (since 2.11)
+#
# Since: 1.2
##
{ 'enum': 'MigrationCapability',
'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks',
'compress', 'events', 'postcopy-ram', 'x-colo', 'release-ram',
- 'block', 'return-path', 'pause-before-switchover', 'x-multifd' ] }
+ 'block', 'return-path', 'pause-before-switchover', 'x-multifd',
+ 'dirty-bitmaps' ] }
##
# @MigrationCapabilityStatus:
diff --git a/migration/migration.h b/migration/migration.h
index 663415fe48..50d1f01346 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -181,6 +181,7 @@ bool migrate_postcopy(void);
bool migrate_release_ram(void);
bool migrate_postcopy_ram(void);
bool migrate_zero_blocks(void);
+bool migrate_dirty_bitmaps(void);
bool migrate_auto_converge(void);
bool migrate_use_multifd(void);
diff --git a/migration/migration.c b/migration/migration.c
index e6c9be3cca..1526cd4bff 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1544,6 +1544,15 @@ int migrate_decompress_threads(void)
return s->parameters.decompress_threads;
}
+bool migrate_dirty_bitmaps(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->enabled_capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
+}
+
bool migrate_use_events(void)
{
MigrationState *s;
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 07/14] migration: include migrate_dirty_bitmaps in migrate_postcopy
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (5 preceding siblings ...)
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 06/14] qapi: add dirty-bitmaps migration capability Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:33 ` Vladimir Sementsov-Ogievskiy
2017-11-14 0:19 ` John Snow
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 08/14] migration/qemu-file: add qemu_put_counted_string() Vladimir Sementsov-Ogievskiy
` (9 subsequent siblings)
16 siblings, 1 reply; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:33 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
Enable postcopy if dirty bitmap migration is endabled.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/migration/migration.c b/migration/migration.c
index 1526cd4bff..e973837bfd 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1487,7 +1487,7 @@ bool migrate_postcopy_ram(void)
bool migrate_postcopy(void)
{
- return migrate_postcopy_ram();
+ return migrate_postcopy_ram() || migrate_dirty_bitmaps();
}
bool migrate_auto_converge(void)
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 08/14] migration/qemu-file: add qemu_put_counted_string()
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (6 preceding siblings ...)
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 07/14] migration: include migrate_dirty_bitmaps in migrate_postcopy Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:33 ` Vladimir Sementsov-Ogievskiy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 09/14] migration: add is_active_iterate handler Vladimir Sementsov-Ogievskiy
` (8 subsequent siblings)
16 siblings, 0 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:33 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
Add function opposite to qemu_get_counted_string.
qemu_put_counted_string puts one-byte length of the string (string
should not be longer than 255 characters), and then it puts the string,
without last zero byte.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
---
migration/qemu-file.h | 2 ++
migration/qemu-file.c | 13 +++++++++++++
2 files changed, 15 insertions(+)
diff --git a/migration/qemu-file.h b/migration/qemu-file.h
index aae4e5ed36..f4f356ab12 100644
--- a/migration/qemu-file.h
+++ b/migration/qemu-file.h
@@ -174,4 +174,6 @@ size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset,
ram_addr_t offset, size_t size,
uint64_t *bytes_sent);
+void qemu_put_counted_string(QEMUFile *f, const char *name);
+
#endif
diff --git a/migration/qemu-file.c b/migration/qemu-file.c
index 2ab2bf362d..e85f501f86 100644
--- a/migration/qemu-file.c
+++ b/migration/qemu-file.c
@@ -734,6 +734,19 @@ size_t qemu_get_counted_string(QEMUFile *f, char buf[256])
}
/*
+ * Put a string with one preceding byte containing its length. The length of
+ * the string should be less than 256.
+ */
+void qemu_put_counted_string(QEMUFile *f, const char *str)
+{
+ size_t len = strlen(str);
+
+ assert(len < 256);
+ qemu_put_byte(f, len);
+ qemu_put_buffer(f, (const uint8_t *)str, len);
+}
+
+/*
* Set the blocking state of the QEMUFile.
* Note: On some transports the OS only keeps a single blocking state for
* both directions, and thus changing the blocking on the main
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 09/14] migration: add is_active_iterate handler
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (7 preceding siblings ...)
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 08/14] migration/qemu-file: add qemu_put_counted_string() Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:33 ` Vladimir Sementsov-Ogievskiy
2017-11-14 0:29 ` John Snow
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 10/14] migration: add postcopy migration of dirty bitmaps Vladimir Sementsov-Ogievskiy
` (7 subsequent siblings)
16 siblings, 1 reply; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:33 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
Only-postcopy savevm states (dirty-bitmap) don't need live iteration, so
to disable them and stop transporting empty sections there is a new
savevm handler.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
---
include/migration/register.h | 1 +
migration/savevm.c | 5 +++++
2 files changed, 6 insertions(+)
diff --git a/include/migration/register.h b/include/migration/register.h
index 9436a87678..cafbeb64b5 100644
--- a/include/migration/register.h
+++ b/include/migration/register.h
@@ -25,6 +25,7 @@ typedef struct SaveVMHandlers {
/* This runs both outside and inside the iothread lock. */
bool (*is_active)(void *opaque);
bool (*has_postcopy)(void *opaque);
+ bool (*is_active_iterate)(void *opaque);
/* This runs outside the iothread lock in the migration case, and
* within the lock in the savevm case. The callback had better only
diff --git a/migration/savevm.c b/migration/savevm.c
index f6b62cb202..9bbfb3fa1b 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1026,6 +1026,11 @@ int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy)
continue;
}
}
+ if (se->ops && se->ops->is_active_iterate) {
+ if (!se->ops->is_active_iterate(se->opaque)) {
+ continue;
+ }
+ }
/*
* In the postcopy phase, any device that doesn't know how to
* do postcopy should have saved it's state in the _complete
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 10/14] migration: add postcopy migration of dirty bitmaps
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (8 preceding siblings ...)
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 09/14] migration: add is_active_iterate handler Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:33 ` Vladimir Sementsov-Ogievskiy
2017-11-15 1:58 ` John Snow
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 11/14] iotests: add default node-name Vladimir Sementsov-Ogievskiy
` (6 subsequent siblings)
16 siblings, 1 reply; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:33 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
Postcopy migration of dirty bitmaps. Only named dirty bitmaps,
associated with root nodes and non-root named nodes are migrated.
If destination qemu is already containing a dirty bitmap with the same name
as a migrated bitmap (for the same node), then, if their granularities are
the same the migration will be done, otherwise the error will be generated.
If destination qemu doesn't contain such bitmap it will be created.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
include/migration/misc.h | 3 +
migration/migration.h | 3 +
migration/block-dirty-bitmap.c | 734 +++++++++++++++++++++++++++++++++++++++++
migration/migration.c | 3 +
migration/savevm.c | 2 +
vl.c | 1 +
migration/Makefile.objs | 1 +
migration/trace-events | 14 +
8 files changed, 761 insertions(+)
create mode 100644 migration/block-dirty-bitmap.c
diff --git a/include/migration/misc.h b/include/migration/misc.h
index c079b7771b..9cc539e232 100644
--- a/include/migration/misc.h
+++ b/include/migration/misc.h
@@ -55,4 +55,7 @@ bool migration_has_failed(MigrationState *);
bool migration_in_postcopy_after_devices(MigrationState *);
void migration_global_dump(Monitor *mon);
+/* migration/block-dirty-bitmap.c */
+void dirty_bitmap_mig_init(void);
+
#endif
diff --git a/migration/migration.h b/migration/migration.h
index 50d1f01346..4e3ad04664 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -211,4 +211,7 @@ void migrate_send_rp_pong(MigrationIncomingState *mis,
void migrate_send_rp_req_pages(MigrationIncomingState *mis, const char* rbname,
ram_addr_t start, size_t len);
+void dirty_bitmap_mig_before_vm_start(void);
+void init_dirty_bitmap_incoming_migration(void);
+
#endif
diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
new file mode 100644
index 0000000000..53cb20045d
--- /dev/null
+++ b/migration/block-dirty-bitmap.c
@@ -0,0 +1,734 @@
+/*
+ * Block dirty bitmap postcopy migration
+ *
+ * Copyright IBM, Corp. 2009
+ * Copyright (c) 2016-2017 Parallels International GmbH
+ *
+ * Authors:
+ * Liran Schour <lirans@il.ibm.com>
+ * Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ * This file is derived from migration/block.c, so it's author and IBM copyright
+ * are here, although content is quite different.
+ *
+ * Contributions after 2012-01-13 are licensed under the terms of the
+ * GNU GPL, version 2 or (at your option) any later version.
+ *
+ * ***
+ *
+ * Here postcopy migration of dirty bitmaps is realized. Only named dirty
+ * bitmaps, associated with root nodes and non-root named nodes are migrated.
+ *
+ * If destination qemu is already containing a dirty bitmap with the same name
+ * as a migrated bitmap (for the same node), then, if their granularities are
+ * the same the migration will be done, otherwise the error will be generated.
+ *
+ * If destination qemu doesn't contain such bitmap it will be created.
+ *
+ * format of migration:
+ *
+ * # Header (shared for different chunk types)
+ * 1, 2 or 4 bytes: flags (see qemu_{put,put}_flags)
+ * [ 1 byte: node name size ] \ flags & DEVICE_NAME
+ * [ n bytes: node name ] /
+ * [ 1 byte: bitmap name size ] \ flags & BITMAP_NAME
+ * [ n bytes: bitmap name ] /
+ *
+ * # Start of bitmap migration (flags & START)
+ * header
+ * be64: granularity
+ * 1 byte: bitmap flags (corresponds to BdrvDirtyBitmap)
+ * bit 0 - bitmap is enabled
+ * bit 1 - bitmap is persistent
+ * bit 2 - bitmap is autoloading
+ * bits 3-7 - reserved, must be zero
+ *
+ * # Complete of bitmap migration (flags & COMPLETE)
+ * header
+ *
+ * # Data chunk of bitmap migration
+ * header
+ * be64: start sector
+ * be32: number of sectors
+ * [ be64: buffer size ] \ ! (flags & ZEROES)
+ * [ n bytes: buffer ] /
+ *
+ * The last chunk in stream should contain flags & EOS. The chunk may skip
+ * device and/or bitmap names, assuming them to be the same with the previous
+ * chunk.
+ */
+
+#include "qemu/osdep.h"
+#include "block/block.h"
+#include "block/block_int.h"
+#include "sysemu/block-backend.h"
+#include "qemu/main-loop.h"
+#include "qemu/error-report.h"
+#include "migration/misc.h"
+#include "migration/migration.h"
+#include "migration/qemu-file.h"
+#include "migration/vmstate.h"
+#include "migration/register.h"
+#include "qemu/hbitmap.h"
+#include "sysemu/sysemu.h"
+#include "qemu/cutils.h"
+#include "qapi/error.h"
+#include "trace.h"
+
+#define CHUNK_SIZE (1 << 10)
+
+/* Flags occupy one, two or four bytes (Big Endian). The size is determined as
+ * follows:
+ * in first (most significant) byte bit 8 is clear --> one byte
+ * in first byte bit 8 is set --> two or four bytes, depending on second
+ * byte:
+ * | in second byte bit 8 is clear --> two bytes
+ * | in second byte bit 8 is set --> four bytes
+ */
+#define DIRTY_BITMAP_MIG_FLAG_EOS 0x01
+#define DIRTY_BITMAP_MIG_FLAG_ZEROES 0x02
+#define DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME 0x04
+#define DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME 0x08
+#define DIRTY_BITMAP_MIG_FLAG_START 0x10
+#define DIRTY_BITMAP_MIG_FLAG_COMPLETE 0x20
+#define DIRTY_BITMAP_MIG_FLAG_BITS 0x40
+
+#define DIRTY_BITMAP_MIG_EXTRA_FLAGS 0x80
+
+#define DIRTY_BITMAP_MIG_START_FLAG_ENABLED 0x01
+#define DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT 0x02
+#define DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD 0x04
+#define DIRTY_BITMAP_MIG_START_FLAG_RESERVED_MASK 0xf8
+
+typedef struct DirtyBitmapMigBitmapState {
+ /* Written during setup phase. */
+ BlockDriverState *bs;
+ const char *node_name;
+ BdrvDirtyBitmap *bitmap;
+ uint64_t total_sectors;
+ uint64_t sectors_per_chunk;
+ QSIMPLEQ_ENTRY(DirtyBitmapMigBitmapState) entry;
+ uint8_t flags;
+
+ /* For bulk phase. */
+ bool bulk_completed;
+ uint64_t cur_sector;
+} DirtyBitmapMigBitmapState;
+
+typedef struct DirtyBitmapMigState {
+ QSIMPLEQ_HEAD(dbms_list, DirtyBitmapMigBitmapState) dbms_list;
+
+ bool bulk_completed;
+
+ /* for send_bitmap_bits() */
+ BlockDriverState *prev_bs;
+ BdrvDirtyBitmap *prev_bitmap;
+} DirtyBitmapMigState;
+
+typedef struct DirtyBitmapLoadState {
+ uint32_t flags;
+ char node_name[256];
+ char bitmap_name[256];
+ BlockDriverState *bs;
+ BdrvDirtyBitmap *bitmap;
+} DirtyBitmapLoadState;
+
+static DirtyBitmapMigState dirty_bitmap_mig_state;
+
+typedef struct DirtyBitmapLoadBitmapState {
+ BlockDriverState *bs;
+ BdrvDirtyBitmap *bitmap;
+ bool migrated;
+} DirtyBitmapLoadBitmapState;
+static GSList *enabled_bitmaps;
+QemuMutex finish_lock;
+
+void init_dirty_bitmap_incoming_migration(void)
+{
+ qemu_mutex_init(&finish_lock);
+}
+
+static uint32_t qemu_get_bitmap_flags(QEMUFile *f)
+{
+ uint8_t flags = qemu_get_byte(f);
+ if (flags & DIRTY_BITMAP_MIG_EXTRA_FLAGS) {
+ flags = flags << 8 | qemu_get_byte(f);
+ if (flags & DIRTY_BITMAP_MIG_EXTRA_FLAGS) {
+ flags = flags << 16 | qemu_get_be16(f);
+ }
+ }
+
+ return flags;
+}
+
+static void qemu_put_bitmap_flags(QEMUFile *f, uint32_t flags)
+{
+ /* The code currently do not send flags more than one byte */
+ assert(!(flags & (0xffffff00 | DIRTY_BITMAP_MIG_EXTRA_FLAGS)));
+
+ qemu_put_byte(f, flags);
+}
+
+static void send_bitmap_header(QEMUFile *f, DirtyBitmapMigBitmapState *dbms,
+ uint32_t additional_flags)
+{
+ BlockDriverState *bs = dbms->bs;
+ BdrvDirtyBitmap *bitmap = dbms->bitmap;
+ uint32_t flags = additional_flags;
+ trace_send_bitmap_header_enter();
+
+ if (bs != dirty_bitmap_mig_state.prev_bs) {
+ dirty_bitmap_mig_state.prev_bs = bs;
+ flags |= DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME;
+ }
+
+ if (bitmap != dirty_bitmap_mig_state.prev_bitmap) {
+ dirty_bitmap_mig_state.prev_bitmap = bitmap;
+ flags |= DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME;
+ }
+
+ qemu_put_bitmap_flags(f, flags);
+
+ if (flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) {
+ qemu_put_counted_string(f, dbms->node_name);
+ }
+
+ if (flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) {
+ qemu_put_counted_string(f, bdrv_dirty_bitmap_name(bitmap));
+ }
+}
+
+static void send_bitmap_start(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
+{
+ send_bitmap_header(f, dbms, DIRTY_BITMAP_MIG_FLAG_START);
+ qemu_put_be32(f, bdrv_dirty_bitmap_granularity(dbms->bitmap));
+ qemu_put_byte(f, dbms->flags);
+}
+
+static void send_bitmap_complete(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
+{
+ send_bitmap_header(f, dbms, DIRTY_BITMAP_MIG_FLAG_COMPLETE);
+}
+
+static void send_bitmap_bits(QEMUFile *f, DirtyBitmapMigBitmapState *dbms,
+ uint64_t start_sector, uint32_t nr_sectors)
+{
+ /* align for buffer_is_zero() */
+ uint64_t align = 4 * sizeof(long);
+ uint64_t unaligned_size =
+ bdrv_dirty_bitmap_serialization_size(
+ dbms->bitmap, start_sector << BDRV_SECTOR_BITS,
+ (uint64_t)nr_sectors << BDRV_SECTOR_BITS);
+ uint64_t buf_size = (unaligned_size + align - 1) & ~(align - 1);
+ uint8_t *buf = g_malloc0(buf_size);
+ uint32_t flags = DIRTY_BITMAP_MIG_FLAG_BITS;
+
+ bdrv_dirty_bitmap_serialize_part(
+ dbms->bitmap, buf, start_sector << BDRV_SECTOR_BITS,
+ (uint64_t)nr_sectors << BDRV_SECTOR_BITS);
+
+ if (buffer_is_zero(buf, buf_size)) {
+ g_free(buf);
+ buf = NULL;
+ flags |= DIRTY_BITMAP_MIG_FLAG_ZEROES;
+ }
+
+ trace_send_bitmap_bits(flags, start_sector, nr_sectors, buf_size);
+
+ send_bitmap_header(f, dbms, flags);
+
+ qemu_put_be64(f, start_sector);
+ qemu_put_be32(f, nr_sectors);
+
+ /* if a block is zero we need to flush here since the network
+ * bandwidth is now a lot higher than the storage device bandwidth.
+ * thus if we queue zero blocks we slow down the migration. */
+ if (flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
+ qemu_fflush(f);
+ } else {
+ qemu_put_be64(f, buf_size);
+ qemu_put_buffer(f, buf, buf_size);
+ }
+
+ g_free(buf);
+}
+
+
+/* Called with iothread lock taken. */
+
+static int init_dirty_bitmap_migration(void)
+{
+ BlockDriverState *bs;
+ BdrvDirtyBitmap *bitmap;
+ DirtyBitmapMigBitmapState *dbms;
+ BdrvNextIterator it;
+
+ dirty_bitmap_mig_state.bulk_completed = false;
+ dirty_bitmap_mig_state.prev_bs = NULL;
+ dirty_bitmap_mig_state.prev_bitmap = NULL;
+
+ for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
+ if (!bdrv_get_device_or_node_name(bs)) {
+ /* not named non-root node */
+ continue;
+ }
+
+ for (bitmap = bdrv_dirty_bitmap_next(bs, NULL); bitmap;
+ bitmap = bdrv_dirty_bitmap_next(bs, bitmap)) {
+ if (!bdrv_dirty_bitmap_name(bitmap)) {
+ continue;
+ }
+
+ if (bdrv_dirty_bitmap_frozen(bitmap)) {
+ error_report("Can't migrate frozen dirty bitmap: '%s",
+ bdrv_dirty_bitmap_name(bitmap));
+ return -1;
+ }
+ }
+ }
+
+ for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
+ if (!bdrv_get_device_or_node_name(bs)) {
+ /* not named non-root node */
+ continue;
+ }
+
+ for (bitmap = bdrv_dirty_bitmap_next(bs, NULL); bitmap;
+ bitmap = bdrv_dirty_bitmap_next(bs, bitmap)) {
+ if (!bdrv_dirty_bitmap_name(bitmap)) {
+ continue;
+ }
+
+ bdrv_ref(bs);
+ bdrv_dirty_bitmap_set_frozen(bitmap, true);
+
+ dbms = g_new0(DirtyBitmapMigBitmapState, 1);
+ dbms->bs = bs;
+ dbms->node_name = bdrv_get_node_name(bs);
+ if (!dbms->node_name || dbms->node_name[0] == '\0') {
+ dbms->node_name = bdrv_get_device_name(bs);
+ }
+ dbms->bitmap = bitmap;
+ dbms->total_sectors = bdrv_nb_sectors(bs);
+ dbms->sectors_per_chunk = CHUNK_SIZE * 8 *
+ bdrv_dirty_bitmap_granularity(bitmap) >> BDRV_SECTOR_BITS;
+ if (bdrv_dirty_bitmap_enabled(bitmap)) {
+ dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_ENABLED;
+ }
+ if (bdrv_dirty_bitmap_get_persistance(bitmap)) {
+ dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT;
+ }
+ if (bdrv_dirty_bitmap_get_autoload(bitmap)) {
+ dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD;
+ }
+
+ bdrv_dirty_bitmap_set_persistance(bitmap, false);
+
+ QSIMPLEQ_INSERT_TAIL(&dirty_bitmap_mig_state.dbms_list,
+ dbms, entry);
+ }
+ }
+
+ return 0;
+}
+
+/* Called with no lock taken. */
+static void bulk_phase_send_chunk(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
+{
+ uint32_t nr_sectors = MIN(dbms->total_sectors - dbms->cur_sector,
+ dbms->sectors_per_chunk);
+
+ send_bitmap_bits(f, dbms, dbms->cur_sector, nr_sectors);
+
+ dbms->cur_sector += nr_sectors;
+ if (dbms->cur_sector >= dbms->total_sectors) {
+ dbms->bulk_completed = true;
+ }
+}
+
+/* Called with no lock taken. */
+static void bulk_phase(QEMUFile *f, bool limit)
+{
+ DirtyBitmapMigBitmapState *dbms;
+
+ QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
+ while (!dbms->bulk_completed) {
+ bulk_phase_send_chunk(f, dbms);
+ if (limit && qemu_file_rate_limit(f)) {
+ return;
+ }
+ }
+ }
+
+ dirty_bitmap_mig_state.bulk_completed = true;
+}
+
+/* Called with iothread lock taken. */
+static void dirty_bitmap_mig_cleanup(void)
+{
+ DirtyBitmapMigBitmapState *dbms;
+
+ while ((dbms = QSIMPLEQ_FIRST(&dirty_bitmap_mig_state.dbms_list)) != NULL) {
+ QSIMPLEQ_REMOVE_HEAD(&dirty_bitmap_mig_state.dbms_list, entry);
+ bdrv_dirty_bitmap_set_frozen(dbms->bitmap, false);
+ bdrv_unref(dbms->bs);
+ g_free(dbms);
+ }
+}
+
+/* for SaveVMHandlers */
+static void dirty_bitmap_save_cleanup(void *opaque)
+{
+ dirty_bitmap_mig_cleanup();
+}
+
+static int dirty_bitmap_save_iterate(QEMUFile *f, void *opaque)
+{
+ trace_dirty_bitmap_save_iterate(migration_in_postcopy());
+
+ if (migration_in_postcopy() && !dirty_bitmap_mig_state.bulk_completed) {
+ bulk_phase(f, true);
+ }
+
+ qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
+
+ return dirty_bitmap_mig_state.bulk_completed;
+}
+
+/* Called with iothread lock taken. */
+
+static int dirty_bitmap_save_complete(QEMUFile *f, void *opaque)
+{
+ DirtyBitmapMigBitmapState *dbms;
+ trace_dirty_bitmap_save_complete_enter();
+
+ if (!dirty_bitmap_mig_state.bulk_completed) {
+ bulk_phase(f, false);
+ }
+
+ QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
+ send_bitmap_complete(f, dbms);
+ }
+
+ qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
+
+ trace_dirty_bitmap_save_complete_finish();
+
+ dirty_bitmap_mig_cleanup();
+ return 0;
+}
+
+static void dirty_bitmap_save_pending(QEMUFile *f, void *opaque,
+ uint64_t max_size,
+ uint64_t *res_precopy_only,
+ uint64_t *res_compatible,
+ uint64_t *res_postcopy_only)
+{
+ DirtyBitmapMigBitmapState *dbms;
+ uint64_t pending = 0;
+
+ qemu_mutex_lock_iothread();
+
+ QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
+ uint64_t gran = bdrv_dirty_bitmap_granularity(dbms->bitmap);
+ uint64_t sectors = dbms->bulk_completed ? 0 :
+ dbms->total_sectors - dbms->cur_sector;
+
+ pending += (sectors * BDRV_SECTOR_SIZE + gran - 1) / gran;
+ }
+
+ qemu_mutex_unlock_iothread();
+
+ trace_dirty_bitmap_save_pending(pending, max_size);
+
+ *res_postcopy_only += pending;
+}
+
+/* First occurrence of this bitmap. It should be created if doesn't exist */
+static int dirty_bitmap_load_start(QEMUFile *f, DirtyBitmapLoadState *s)
+{
+ Error *local_err = NULL;
+ uint32_t granularity = qemu_get_be32(f);
+ uint8_t flags = qemu_get_byte(f);
+
+ if (!s->bitmap) {
+ s->bitmap = bdrv_create_dirty_bitmap(s->bs, granularity,
+ s->bitmap_name, &local_err);
+ if (!s->bitmap) {
+ error_report_err(local_err);
+ return -EINVAL;
+ }
+ } else {
+ uint32_t dest_granularity =
+ bdrv_dirty_bitmap_granularity(s->bitmap);
+ if (dest_granularity != granularity) {
+ error_report("Error: "
+ "Migrated bitmap granularity (%" PRIu32 ") "
+ "doesn't match the destination bitmap '%s' "
+ "granularity (%" PRIu32 ")",
+ granularity,
+ bdrv_dirty_bitmap_name(s->bitmap),
+ dest_granularity);
+ return -EINVAL;
+ }
+ }
+
+ if (flags & DIRTY_BITMAP_MIG_START_FLAG_RESERVED_MASK) {
+ error_report("Unknown flags in migrated dirty bitmap header: %x",
+ flags);
+ return -EINVAL;
+ }
+
+ if (flags & DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT) {
+ bdrv_dirty_bitmap_set_persistance(s->bitmap, true);
+ }
+ if (flags & DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD) {
+ bdrv_dirty_bitmap_set_autoload(s->bitmap, true);
+ }
+
+ bdrv_disable_dirty_bitmap(s->bitmap);
+ if (flags & DIRTY_BITMAP_MIG_START_FLAG_ENABLED) {
+ DirtyBitmapLoadBitmapState *b;
+
+ bdrv_dirty_bitmap_create_successor(s->bs, s->bitmap, &local_err);
+ if (local_err) {
+ error_report_err(local_err);
+ return -EINVAL;
+ }
+
+ b = g_new(DirtyBitmapLoadBitmapState, 1);
+ b->bs = s->bs;
+ b->bitmap = s->bitmap;
+ b->migrated = false;
+ enabled_bitmaps = g_slist_prepend(enabled_bitmaps, b);
+ }
+
+ return 0;
+}
+
+void dirty_bitmap_mig_before_vm_start(void)
+{
+ GSList *item;
+
+ qemu_mutex_lock(&finish_lock);
+
+ for (item = enabled_bitmaps; item; item = g_slist_next(item)) {
+ DirtyBitmapLoadBitmapState *b = item->data;
+
+ if (b->migrated) {
+ bdrv_enable_dirty_bitmap(b->bitmap);
+ } else {
+ bdrv_dirty_bitmap_enable_successor(b->bitmap);
+ }
+
+ g_free(b);
+ }
+
+ g_slist_free(enabled_bitmaps);
+ enabled_bitmaps = NULL;
+
+ qemu_mutex_unlock(&finish_lock);
+}
+
+static void dirty_bitmap_load_complete(QEMUFile *f, DirtyBitmapLoadState *s)
+{
+ GSList *item;
+ trace_dirty_bitmap_load_complete();
+ bdrv_dirty_bitmap_deserialize_finish(s->bitmap);
+
+ qemu_mutex_lock(&finish_lock);
+
+ for (item = enabled_bitmaps; item; item = g_slist_next(item)) {
+ DirtyBitmapLoadBitmapState *b = item->data;
+
+ if (b->bitmap == s->bitmap) {
+ b->migrated = true;
+ }
+ }
+
+ if (bdrv_dirty_bitmap_frozen(s->bitmap)) {
+ if (enabled_bitmaps == NULL) {
+ /* in postcopy */
+ AioContext *aio_context = bdrv_get_aio_context(s->bs);
+ aio_context_acquire(aio_context);
+
+ bdrv_reclaim_dirty_bitmap(s->bs, s->bitmap, &error_abort);
+ bdrv_enable_dirty_bitmap(s->bitmap);
+
+ aio_context_release(aio_context);
+ } else {
+ /* target not started, successor is empty */
+ bdrv_dirty_bitmap_release_successor(s->bs, s->bitmap);
+ }
+ }
+
+ qemu_mutex_unlock(&finish_lock);
+}
+
+static int dirty_bitmap_load_bits(QEMUFile *f, DirtyBitmapLoadState *s)
+{
+ uint64_t first_byte = qemu_get_be64(f) << BDRV_SECTOR_BITS;
+ uint64_t nr_bytes = (uint64_t)qemu_get_be32(f) << BDRV_SECTOR_BITS;
+ trace_dirty_bitmap_load_bits_enter(first_byte >> BDRV_SECTOR_BITS,
+ nr_bytes >> BDRV_SECTOR_BITS);
+
+ if (s->flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
+ trace_dirty_bitmap_load_bits_zeroes();
+ bdrv_dirty_bitmap_deserialize_zeroes(s->bitmap, first_byte, nr_bytes,
+ false);
+ } else {
+ uint8_t *buf;
+ uint64_t buf_size = qemu_get_be64(f);
+ uint64_t needed_size =
+ bdrv_dirty_bitmap_serialization_size(s->bitmap,
+ first_byte, nr_bytes);
+
+ if (needed_size > buf_size) {
+ error_report("Error: Migrated bitmap granularity doesn't "
+ "match the destination bitmap '%s' granularity",
+ bdrv_dirty_bitmap_name(s->bitmap));
+ return -EINVAL;
+ }
+
+ buf = g_malloc(buf_size);
+ qemu_get_buffer(f, buf, buf_size);
+ bdrv_dirty_bitmap_deserialize_part(s->bitmap, buf, first_byte, nr_bytes,
+ false);
+ g_free(buf);
+ }
+
+ return 0;
+}
+
+static int dirty_bitmap_load_header(QEMUFile *f, DirtyBitmapLoadState *s)
+{
+ Error *local_err = NULL;
+ s->flags = qemu_get_bitmap_flags(f);
+ trace_dirty_bitmap_load_header(s->flags);
+
+ if (s->flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) {
+ if (!qemu_get_counted_string(f, s->node_name)) {
+ error_report("Unable to read node name string");
+ return -EINVAL;
+ }
+ s->bs = bdrv_lookup_bs(s->node_name, s->node_name, &local_err);
+ if (!s->bs) {
+ error_report_err(local_err);
+ return -EINVAL;
+ }
+ } else if (!s->bs) {
+ error_report("Error: block device name is not set");
+ return -EINVAL;
+ }
+
+ if (s->flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) {
+ if (!qemu_get_counted_string(f, s->bitmap_name)) {
+ error_report("Unable to read node name string");
+ return -EINVAL;
+ }
+ s->bitmap = bdrv_find_dirty_bitmap(s->bs, s->bitmap_name);
+
+ /* bitmap may be NULL here, it wouldn't be an error if it is the
+ * first occurrence of the bitmap */
+ if (!s->bitmap && !(s->flags & DIRTY_BITMAP_MIG_FLAG_START)) {
+ error_report("Error: unknown dirty bitmap "
+ "'%s' for block device '%s'",
+ s->bitmap_name, s->node_name);
+ return -EINVAL;
+ }
+ } else if (!s->bitmap) {
+ error_report("Error: block device name is not set");
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id)
+{
+ static DirtyBitmapLoadState s;
+ int ret = 0;
+
+ trace_dirty_bitmap_load_enter();
+
+ if (version_id != 1) {
+ return -EINVAL;
+ }
+
+ do {
+ dirty_bitmap_load_header(f, &s);
+
+ if (s.flags & DIRTY_BITMAP_MIG_FLAG_START) {
+ ret = dirty_bitmap_load_start(f, &s);
+ } else if (s.flags & DIRTY_BITMAP_MIG_FLAG_COMPLETE) {
+ dirty_bitmap_load_complete(f, &s);
+ } else if (s.flags & DIRTY_BITMAP_MIG_FLAG_BITS) {
+ ret = dirty_bitmap_load_bits(f, &s);
+ }
+
+ if (!ret) {
+ ret = qemu_file_get_error(f);
+ }
+
+ if (ret) {
+ return ret;
+ }
+ } while (!(s.flags & DIRTY_BITMAP_MIG_FLAG_EOS));
+
+ trace_dirty_bitmap_load_success();
+ return 0;
+}
+
+static int dirty_bitmap_save_setup(QEMUFile *f, void *opaque)
+{
+ DirtyBitmapMigBitmapState *dbms = NULL;
+ if (init_dirty_bitmap_migration() < 0) {
+ return -1;
+ }
+
+ QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
+ send_bitmap_start(f, dbms);
+ }
+ qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
+
+ return 0;
+}
+
+static bool dirty_bitmap_is_active(void *opaque)
+{
+ return migrate_dirty_bitmaps();
+}
+
+static bool dirty_bitmap_is_active_iterate(void *opaque)
+{
+ return dirty_bitmap_is_active(opaque) && !runstate_is_running();
+}
+
+static bool dirty_bitmap_has_postcopy(void *opaque)
+{
+ return true;
+}
+
+static SaveVMHandlers savevm_dirty_bitmap_handlers = {
+ .save_setup = dirty_bitmap_save_setup,
+ .save_live_complete_postcopy = dirty_bitmap_save_complete,
+ .save_live_complete_precopy = dirty_bitmap_save_complete,
+ .has_postcopy = dirty_bitmap_has_postcopy,
+ .save_live_pending = dirty_bitmap_save_pending,
+ .save_live_iterate = dirty_bitmap_save_iterate,
+ .is_active_iterate = dirty_bitmap_is_active_iterate,
+ .load_state = dirty_bitmap_load,
+ .save_cleanup = dirty_bitmap_save_cleanup,
+ .is_active = dirty_bitmap_is_active,
+};
+
+void dirty_bitmap_mig_init(void)
+{
+ QSIMPLEQ_INIT(&dirty_bitmap_mig_state.dbms_list);
+
+ register_savevm_live(NULL, "dirty-bitmap", 0, 1,
+ &savevm_dirty_bitmap_handlers,
+ &dirty_bitmap_mig_state);
+}
diff --git a/migration/migration.c b/migration/migration.c
index e973837bfd..66e9cf03cd 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -150,6 +150,9 @@ MigrationIncomingState *migration_incoming_get_current(void)
memset(&mis_current, 0, sizeof(MigrationIncomingState));
qemu_mutex_init(&mis_current.rp_mutex);
qemu_event_init(&mis_current.main_thread_load_event, false);
+
+ init_dirty_bitmap_incoming_migration();
+
once = true;
}
return &mis_current;
diff --git a/migration/savevm.c b/migration/savevm.c
index 9bbfb3fa1b..b0c37ef9f1 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1673,6 +1673,8 @@ static void loadvm_postcopy_handle_run_bh(void *opaque)
trace_loadvm_postcopy_handle_run_vmstart();
+ dirty_bitmap_mig_before_vm_start();
+
if (autostart) {
/* Hold onto your hats, starting the CPU */
vm_start();
diff --git a/vl.c b/vl.c
index ec299099ff..3d393aaf2c 100644
--- a/vl.c
+++ b/vl.c
@@ -4642,6 +4642,7 @@ int main(int argc, char **argv, char **envp)
blk_mig_init();
ram_mig_init();
+ dirty_bitmap_mig_init();
/* If the currently selected machine wishes to override the units-per-bus
* property of its default HBA interface type, do so now. */
diff --git a/migration/Makefile.objs b/migration/Makefile.objs
index 99e038024d..c83ec47ba8 100644
--- a/migration/Makefile.objs
+++ b/migration/Makefile.objs
@@ -6,6 +6,7 @@ common-obj-y += qemu-file.o global_state.o
common-obj-y += qemu-file-channel.o
common-obj-y += xbzrle.o postcopy-ram.o
common-obj-y += qjson.o
+common-obj-y += block-dirty-bitmap.o
common-obj-$(CONFIG_RDMA) += rdma.o
diff --git a/migration/trace-events b/migration/trace-events
index a04fffb877..e9eb8078d4 100644
--- a/migration/trace-events
+++ b/migration/trace-events
@@ -227,3 +227,17 @@ colo_vm_state_change(const char *old, const char *new) "Change '%s' => '%s'"
colo_send_message(const char *msg) "Send '%s' message"
colo_receive_message(const char *msg) "Receive '%s' message"
colo_failover_set_state(const char *new_state) "new state %s"
+
+# migration/block-dirty-bitmap.c
+send_bitmap_header_enter(void) ""
+send_bitmap_bits(uint32_t flags, uint64_t start_sector, uint32_t nr_sectors, uint64_t data_size) "\n flags: 0x%x\n start_sector: %" PRIu64 "\n nr_sectors: %" PRIu32 "\n data_size: %" PRIu64 "\n"
+dirty_bitmap_save_iterate(int in_postcopy) "in postcopy: %d"
+dirty_bitmap_save_complete_enter(void) ""
+dirty_bitmap_save_complete_finish(void) ""
+dirty_bitmap_save_pending(uint64_t pending, uint64_t max_size) "pending %" PRIu64 " max: %" PRIu64
+dirty_bitmap_load_complete(void) ""
+dirty_bitmap_load_bits_enter(uint64_t first_sector, uint32_t nr_sectors) "chunk: %" PRIu64 " %" PRIu32
+dirty_bitmap_load_bits_zeroes(void) ""
+dirty_bitmap_load_header(uint32_t flags) "flags 0x%x"
+dirty_bitmap_load_enter(void) ""
+dirty_bitmap_load_success(void) ""
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 11/14] iotests: add default node-name
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (9 preceding siblings ...)
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 10/14] migration: add postcopy migration of dirty bitmaps Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:33 ` Vladimir Sementsov-Ogievskiy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 12/14] iotests: add dirty bitmap migration test Vladimir Sementsov-Ogievskiy
` (5 subsequent siblings)
16 siblings, 0 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:33 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
When testing migration, auto-generated by qemu node-names differs in
source and destination qemu and migration fails. After this patch,
auto-generated by iotest nodenames will be the same.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
---
tests/qemu-iotests/iotests.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index 6f057904a9..95454c1893 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -216,6 +216,8 @@ class VM(qtest.QEMUQtestMachine):
options.append('file=%s' % path)
options.append('format=%s' % format)
options.append('cache=%s' % cachemode)
+ if 'node-name' not in opts:
+ options.append('node-name=drivenode%d' % self._num_drives)
if opts:
options.append(opts)
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 12/14] iotests: add dirty bitmap migration test
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (10 preceding siblings ...)
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 11/14] iotests: add default node-name Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:33 ` Vladimir Sementsov-Ogievskiy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 13/14] iotests: add dirty bitmap postcopy test Vladimir Sementsov-Ogievskiy
` (4 subsequent siblings)
16 siblings, 0 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:33 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
The test starts two vms (vm_a, vm_b), create dirty bitmap in
the first one, do several writes to corresponding device and
then migrate vm_a to vm_b with dirty bitmaps.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
---
tests/qemu-iotests/169 | 86 ++++++++++++++++++++++++++++++++++++++++++++++
tests/qemu-iotests/169.out | 5 +++
tests/qemu-iotests/group | 1 +
3 files changed, 92 insertions(+)
create mode 100755 tests/qemu-iotests/169
create mode 100644 tests/qemu-iotests/169.out
diff --git a/tests/qemu-iotests/169 b/tests/qemu-iotests/169
new file mode 100755
index 0000000000..7630ecbe51
--- /dev/null
+++ b/tests/qemu-iotests/169
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+#
+# Tests for dirty bitmaps migration.
+#
+# Copyright (C) Vladimir Sementsov-Ogievskiy 2015-2016
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+import os
+import iotests
+import time
+from iotests import qemu_img
+
+disk_a = os.path.join(iotests.test_dir, 'disk_a')
+disk_b = os.path.join(iotests.test_dir, 'disk_b')
+fifo = os.path.join(iotests.test_dir, 'mig_fifo')
+
+class TestDirtyBitmapMigration(iotests.QMPTestCase):
+
+ def setUp(self):
+ size = 0x400000000 # 1G
+ os.mkfifo(fifo)
+ qemu_img('create', '-f', iotests.imgfmt, disk_a, str(size))
+ qemu_img('create', '-f', iotests.imgfmt, disk_b, str(size))
+ self.vm_a = iotests.VM(path_suffix='a').add_drive(disk_a)
+ self.vm_b = iotests.VM(path_suffix='b').add_drive(disk_b)
+ self.vm_b.add_incoming("exec: cat '" + fifo + "'")
+ self.vm_a.launch()
+ self.vm_b.launch()
+
+ def tearDown(self):
+ self.vm_a.shutdown()
+ self.vm_b.shutdown()
+ os.remove(disk_a)
+ os.remove(disk_b)
+ os.remove(fifo)
+
+ def test_migration(self):
+ granularity = 512
+ regions = [
+ { 'start': 0, 'count': 0x100000 },
+ { 'start': 0x100000000, 'count': 0x200000 },
+ { 'start': 0x399900000, 'count': 0x100000 }
+ ]
+
+ result = self.vm_a.qmp('block-dirty-bitmap-add', node='drive0',
+ name='bitmap', granularity=granularity)
+ self.assert_qmp(result, 'return', {});
+
+ for r in regions:
+ self.vm_a.hmp_qemu_io('drive0',
+ 'write %d %d' % (r['start'], r['count']))
+
+ result = self.vm_a.qmp('x-debug-block-dirty-bitmap-sha256',
+ node='drive0', name='bitmap')
+ sha256 = result['return']['sha256']
+
+ result = self.vm_a.qmp('migrate-set-capabilities',
+ capabilities=[{'capability': 'dirty-bitmaps',
+ 'state': True}])
+ self.assert_qmp(result, 'return', {})
+
+ result = self.vm_a.qmp('migrate', uri='exec:cat>' + fifo)
+ self.assertNotEqual(self.vm_a.event_wait("STOP"), None)
+ self.assertNotEqual(self.vm_b.event_wait("RESUME"), None)
+ time.sleep(2)
+
+ result = self.vm_b.qmp('x-debug-block-dirty-bitmap-sha256',
+ node='drive0', name='bitmap')
+ self.assert_qmp(result, 'return/sha256', sha256);
+
+
+if __name__ == '__main__':
+ iotests.main()
diff --git a/tests/qemu-iotests/169.out b/tests/qemu-iotests/169.out
new file mode 100644
index 0000000000..ae1213e6f8
--- /dev/null
+++ b/tests/qemu-iotests/169.out
@@ -0,0 +1,5 @@
+.
+----------------------------------------------------------------------
+Ran 1 tests
+
+OK
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index 24e5ad1b79..96e173abb3 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -169,6 +169,7 @@
162 auto quick
163 rw auto quick
165 rw auto quick
+169 rw auto quick
170 rw auto quick
171 rw auto quick
172 auto
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 13/14] iotests: add dirty bitmap postcopy test
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (11 preceding siblings ...)
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 12/14] iotests: add dirty bitmap migration test Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:33 ` Vladimir Sementsov-Ogievskiy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 14/14] iotests: add persistent bitmap migration test Vladimir Sementsov-Ogievskiy
` (3 subsequent siblings)
16 siblings, 0 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:33 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
Test
- start two vms (vm_a, vm_b)
- in a
- do writes from set A
- do writes from set B
- fix bitmap sha256
- clear bitmap
- do writes from set A
- start migration
- than, in b
- wait vm start (postcopy should start)
- do writes from set B
- check bitmap sha256
The test should verify postcopy migration and then merging with delta
(changes in target, during postcopy process).
Reduce supported cache modes to only 'none', because with cache on time
from source.STOP to target.RESUME is unpredictable and we can fail with
timout while waiting for target.RESUME.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
---
tests/qemu-iotests/169 | 74 +++++++++++++++++++++++++++++++++++++------
tests/qemu-iotests/169.out | 4 +--
tests/qemu-iotests/iotests.py | 7 +++-
3 files changed, 72 insertions(+), 13 deletions(-)
diff --git a/tests/qemu-iotests/169 b/tests/qemu-iotests/169
index 7630ecbe51..4ecef2f23f 100755
--- a/tests/qemu-iotests/169
+++ b/tests/qemu-iotests/169
@@ -29,8 +29,14 @@ fifo = os.path.join(iotests.test_dir, 'mig_fifo')
class TestDirtyBitmapMigration(iotests.QMPTestCase):
- def setUp(self):
- size = 0x400000000 # 1G
+ def tearDown(self):
+ self.vm_a.shutdown()
+ self.vm_b.shutdown()
+ os.remove(disk_a)
+ os.remove(disk_b)
+ os.remove(fifo)
+
+ def init(self, size):
os.mkfifo(fifo)
qemu_img('create', '-f', iotests.imgfmt, disk_a, str(size))
qemu_img('create', '-f', iotests.imgfmt, disk_b, str(size))
@@ -40,14 +46,8 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
self.vm_a.launch()
self.vm_b.launch()
- def tearDown(self):
- self.vm_a.shutdown()
- self.vm_b.shutdown()
- os.remove(disk_a)
- os.remove(disk_b)
- os.remove(fifo)
-
def test_migration(self):
+ self.init(0x400000000) # 1G
granularity = 512
regions = [
{ 'start': 0, 'count': 0x100000 },
@@ -81,6 +81,60 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
node='drive0', name='bitmap')
self.assert_qmp(result, 'return/sha256', sha256);
+ def test_postcopy(self):
+ self.init(0x4000000000) # 256G
+ write_size = 0x40000000
+ granularity = 512
+ chunk = 4096
+
+ result = self.vm_a.qmp('block-dirty-bitmap-add', node='drive0',
+ name='bitmap', granularity=granularity)
+ self.assert_qmp(result, 'return', {});
+
+ s = 0
+ while s < write_size:
+ self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % (s, chunk))
+ s += 0x10000
+ s = 0x8000
+ while s < write_size:
+ self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % (s, chunk))
+ s += 0x10000
+
+ result = self.vm_a.qmp('x-debug-block-dirty-bitmap-sha256',
+ node='drive0', name='bitmap')
+ sha256 = result['return']['sha256']
+
+ result = self.vm_a.qmp('block-dirty-bitmap-clear', node='drive0',
+ name='bitmap')
+ self.assert_qmp(result, 'return', {});
+ s = 0
+ while s < write_size:
+ self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % (s, chunk))
+ s += 0x10000
+
+ result = self.vm_a.qmp('migrate-set-capabilities',
+ capabilities=[{'capability': 'dirty-bitmaps',
+ 'state': True}])
+ self.assert_qmp(result, 'return', {})
+
+ result = self.vm_a.qmp('migrate', uri='exec:cat>' + fifo)
+ self.assertNotEqual(self.vm_a.event_wait("STOP"), None)
+ self.assertNotEqual(self.vm_b.event_wait("RESUME"), None)
+
+ s = 0x8000
+ while s < write_size:
+ self.vm_b.hmp_qemu_io('drive0', 'write %d %d' % (s, chunk))
+ s += 0x10000
+
+ result = self.vm_b.qmp('query-block');
+ while len(result['return'][0]['dirty-bitmaps']) > 1:
+ time.sleep(2)
+ result = self.vm_b.qmp('query-block');
+
+ result = self.vm_b.qmp('x-debug-block-dirty-bitmap-sha256',
+ node='drive0', name='bitmap')
+
+ self.assert_qmp(result, 'return/sha256', sha256);
if __name__ == '__main__':
- iotests.main()
+ iotests.main(supported_fmts=['qcow2'], supported_cache_modes=['none'])
diff --git a/tests/qemu-iotests/169.out b/tests/qemu-iotests/169.out
index ae1213e6f8..fbc63e62f8 100644
--- a/tests/qemu-iotests/169.out
+++ b/tests/qemu-iotests/169.out
@@ -1,5 +1,5 @@
-.
+..
----------------------------------------------------------------------
-Ran 1 tests
+Ran 2 tests
OK
diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index 95454c1893..88f73d6441 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -432,6 +432,10 @@ def verify_platform(supported_oses=['linux']):
if True not in [sys.platform.startswith(x) for x in supported_oses]:
notrun('not suitable for this OS: %s' % sys.platform)
+def verify_cache_mode(supported_cache_modes=[]):
+ if supported_cache_modes and (cachemode not in supported_cache_modes):
+ notrun('not suitable for this cache mode: %s' % cachemode)
+
def supports_quorum():
return 'quorum' in qemu_img_pipe('--help')
@@ -440,7 +444,7 @@ def verify_quorum():
if not supports_quorum():
notrun('quorum support missing')
-def main(supported_fmts=[], supported_oses=['linux']):
+def main(supported_fmts=[], supported_oses=['linux'], supported_cache_modes=[]):
'''Run tests'''
global debug
@@ -457,6 +461,7 @@ def main(supported_fmts=[], supported_oses=['linux']):
verbosity = 1
verify_image_format(supported_fmts)
verify_platform(supported_oses)
+ verify_cache_mode(supported_cache_modes)
# We need to filter out the time taken from the output so that qemu-iotest
# can reliably diff the results against master output.
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8 14/14] iotests: add persistent bitmap migration test
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (12 preceding siblings ...)
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 13/14] iotests: add dirty bitmap postcopy test Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:33 ` Vladimir Sementsov-Ogievskiy
2017-10-30 16:54 ` [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration no-reply
` (2 subsequent siblings)
16 siblings, 0 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 16:33 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
Test that persistent bitmap migrates and its persistance property
migrates too.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
tests/qemu-iotests/169 | 21 ++++++++++++++++++---
tests/qemu-iotests/169.out | 4 ++--
2 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/tests/qemu-iotests/169 b/tests/qemu-iotests/169
index 4ecef2f23f..b0270f40f7 100755
--- a/tests/qemu-iotests/169
+++ b/tests/qemu-iotests/169
@@ -46,7 +46,7 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
self.vm_a.launch()
self.vm_b.launch()
- def test_migration(self):
+ def do_test_migration(self, persistent=False):
self.init(0x400000000) # 1G
granularity = 512
regions = [
@@ -55,8 +55,13 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
{ 'start': 0x399900000, 'count': 0x100000 }
]
- result = self.vm_a.qmp('block-dirty-bitmap-add', node='drive0',
- name='bitmap', granularity=granularity)
+ if persistent:
+ result = self.vm_a.qmp('block-dirty-bitmap-add', node='drive0',
+ name='bitmap', granularity=granularity,
+ persistent=True, autoload=True)
+ else:
+ result = self.vm_a.qmp('block-dirty-bitmap-add', node='drive0',
+ name='bitmap', granularity=granularity)
self.assert_qmp(result, 'return', {});
for r in regions:
@@ -77,10 +82,20 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
self.assertNotEqual(self.vm_b.event_wait("RESUME"), None)
time.sleep(2)
+ if persistent:
+ self.vm_b.shutdown()
+ self.vm_b.launch()
+
result = self.vm_b.qmp('x-debug-block-dirty-bitmap-sha256',
node='drive0', name='bitmap')
self.assert_qmp(result, 'return/sha256', sha256);
+ def test_migration(self):
+ self.do_test_migration()
+
+ def test_migration_persistent(self):
+ self.do_test_migration(persistent=True)
+
def test_postcopy(self):
self.init(0x4000000000) # 256G
write_size = 0x40000000
diff --git a/tests/qemu-iotests/169.out b/tests/qemu-iotests/169.out
index fbc63e62f8..8d7e996700 100644
--- a/tests/qemu-iotests/169.out
+++ b/tests/qemu-iotests/169.out
@@ -1,5 +1,5 @@
-..
+...
----------------------------------------------------------------------
-Ran 2 tests
+Ran 3 tests
OK
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (13 preceding siblings ...)
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 14/14] iotests: add persistent bitmap migration test Vladimir Sementsov-Ogievskiy
@ 2017-10-30 16:54 ` no-reply
2017-10-30 16:55 ` no-reply
2017-10-30 18:22 ` Vladimir Sementsov-Ogievskiy
16 siblings, 0 replies; 44+ messages in thread
From: no-reply @ 2017-10-30 16:54 UTC (permalink / raw)
To: vsementsov; +Cc: famz, qemu-block, qemu-devel, kwolf, peter.maydell
Hi,
This series failed build test on ppc host. Please find the details below.
Subject: [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration
Type: series
Message-id: 20171030163309.75770-1-vsementsov@virtuozzo.com
=== TEST SCRIPT BEGIN ===
#!/bin/bash
# Testing script will be invoked under the git checkout with
# HEAD pointing to a commit that has the patches applied on top of "base"
# branch
set -e
echo "=== ENV ==="
env
echo "=== PACKAGES ==="
rpm -qa
echo "=== TEST BEGIN ==="
INSTALL=$PWD/install
BUILD=$PWD/build
mkdir -p $BUILD $INSTALL
SRC=$PWD
cd $BUILD
$SRC/configure --prefix=$INSTALL
make -j100
# XXX: we need reliable clean up
# make check -j100 V=1
make install
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
- [tag update] patchew/150822818243.26242.12993827911736928961.stgit@bahia.lan -> patchew/150822818243.26242.12993827911736928961.stgit@bahia.lan
- [tag update] patchew/20171027104037.8319-1-eblake@redhat.com -> patchew/20171027104037.8319-1-eblake@redhat.com
- [tag update] patchew/20171029125338.25988-1-kwolf@redhat.com -> patchew/20171029125338.25988-1-kwolf@redhat.com
- [tag update] patchew/20171030102830.4469-1-kraxel@redhat.com -> patchew/20171030102830.4469-1-kraxel@redhat.com
* [new tag] patchew/20171030163309.75770-1-vsementsov@virtuozzo.com -> patchew/20171030163309.75770-1-vsementsov@virtuozzo.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
b200358 iotests: add persistent bitmap migration test
2bc0dad iotests: add dirty bitmap postcopy test
a572a25 iotests: add dirty bitmap migration test
012af82 iotests: add default node-name
d0573d2 migration: add postcopy migration of dirty bitmaps
1c5318d migration: add is_active_iterate handler
7697c9a migration/qemu-file: add qemu_put_counted_string()
b4e20bb migration: include migrate_dirty_bitmaps in migrate_postcopy
272f21c qapi: add dirty-bitmaps migration capability
7f3bb03 migration: introduce postcopy-only pending
c8f365f block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen
93cb6f1 block/dirty-bitmap: add bdrv_dirty_bitmap_release_successor
92ce534 block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap
abf3538 block/dirty-bitmap: add bdrv_dirty_bitmap_enable_successor()
=== OUTPUT BEGIN ===
=== ENV ===
XDG_SESSION_ID=6109
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-845hv716/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-845hv716/src/install
BIOS directory /var/tmp/patchew-tester-tmp-845hv716/src/install/share/qemu
firmware path /var/tmp/patchew-tester-tmp-845hv716/src/install/share/qemu-firmware
binary directory /var/tmp/patchew-tester-tmp-845hv716/src/install/bin
library directory /var/tmp/patchew-tester-tmp-845hv716/src/install/lib
module directory /var/tmp/patchew-tester-tmp-845hv716/src/install/lib/qemu
libexec directory /var/tmp/patchew-tester-tmp-845hv716/src/install/libexec
include directory /var/tmp/patchew-tester-tmp-845hv716/src/install/include
config directory /var/tmp/patchew-tester-tmp-845hv716/src/install/etc
local state directory /var/tmp/patchew-tester-tmp-845hv716/src/install/var
Manual directory /var/tmp/patchew-tester-tmp-845hv716/src/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path /var/tmp/patchew-tester-tmp-845hv716/src
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 -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 mips64el-softmmu/config-devices.mak.tmp
GEN microblaze-softmmu/config-devices.mak.tmp
GEN mips64-softmmu/config-devices.mak.tmp
GEN moxie-softmmu/config-devices.mak.tmp
GEN mipsel-softmmu/config-devices.mak.tmp
GEN mips-softmmu/config-devices.mak.tmp
GEN ppcemb-softmmu/config-devices.mak.tmp
GEN nios2-softmmu/config-devices.mak.tmp
GEN ppc64-softmmu/config-devices.mak.tmp
GEN sh4eb-softmmu/config-devices.mak.tmp
GEN s390x-softmmu/config-devices.mak.tmp
GEN ppc-softmmu/config-devices.mak.tmp
GEN or1k-softmmu/config-devices.mak.tmp
GEN sh4-softmmu/config-devices.mak.tmp
GEN sparc64-softmmu/config-devices.mak.tmp
GEN sparc-softmmu/config-devices.mak.tmp
GEN tricore-softmmu/config-devices.mak.tmp
GEN unicore32-softmmu/config-devices.mak.tmp
GEN x86_64-softmmu/config-devices.mak.tmp
GEN xtensaeb-softmmu/config-devices.mak.tmp
GEN xtensa-softmmu/config-devices.mak.tmp
GEN aarch64-linux-user/config-devices.mak.tmp
GEN armeb-linux-user/config-devices.mak.tmp
GEN alpha-linux-user/config-devices.mak.tmp
GEN lm32-softmmu/config-devices.mak
GEN cris-linux-user/config-devices.mak.tmp
GEN cris-softmmu/config-devices.mak
GEN arm-linux-user/config-devices.mak.tmp
GEN hppa-linux-user/config-devices.mak.tmp
GEN microblaze-softmmu/config-devices.mak
GEN m68k-linux-user/config-devices.mak.tmp
GEN i386-linux-user/config-devices.mak.tmp
GEN m68k-softmmu/config-devices.mak
GEN microblaze-linux-user/config-devices.mak.tmp
GEN moxie-softmmu/config-devices.mak
GEN ppc64-linux-user/config-devices.mak.tmp
GEN mipsel-linux-user/config-devices.mak.tmp
GEN microblazeel-linux-user/config-devices.mak.tmp
GEN mips64el-linux-user/config-devices.mak.tmp
GEN mipsn32-linux-user/config-devices.mak.tmp
GEN or1k-linux-user/config-devices.mak.tmp
GEN ppc64abi32-linux-user/config-devices.mak.tmp
GEN mips-linux-user/config-devices.mak.tmp
GEN s390x-linux-user/config-devices.mak.tmp
GEN mips64-linux-user/config-devices.mak.tmp
GEN ppc-linux-user/config-devices.mak.tmp
GEN ppc64le-linux-user/config-devices.mak.tmp
GEN mipsn32el-linux-user/config-devices.mak.tmp
GEN nios2-linux-user/config-devices.mak.tmp
GEN arm-softmmu/config-devices.mak
GEN microblazeel-softmmu/config-devices.mak
GEN nios2-softmmu/config-devices.mak
GEN ppc-softmmu/config-devices.mak
GEN s390x-softmmu/config-devices.mak
GEN sh4eb-softmmu/config-devices.mak
GEN arm-linux-user/config-devices.mak
GEN or1k-linux-user/config-devices.mak
GEN sh4eb-linux-user/config-devices.mak.tmp
GEN sh4-linux-user/config-devices.mak.tmp
GEN sparc32plus-linux-user/config-devices.mak.tmp
GEN sparc-linux-user/config-devices.mak.tmp
GEN tilegx-linux-user/config-devices.mak.tmp
GEN or1k-softmmu/config-devices.mak
GEN mipsn32-linux-user/config-devices.mak
GEN x86_64-linux-user/config-devices.mak.tmp
GEN config-host.h
GIT ui/keycodemapdb dtc capstone
GEN qemu-options.def
GEN i386-linux-user/config-devices.mak
GEN qapi-event.h
GEN qmp-marshal.c
GEN qapi-types.h
GEN qapi-visit.h
GEN sh4-linux-user/config-devices.mak
GEN qapi-visit.c
GEN qapi-event.c
GEN qmp-introspect.h
GEN qmp-introspect.c
GEN qapi-types.c
GEN trace/generated-helpers-wrappers.h
GEN trace/generated-helpers.c
GEN trace/generated-tcg-tracers.h
GEN sparc32plus-linux-user/config-devices.mak
GEN trace/generated-helpers.h
GEN tricore-softmmu/config-devices.mak
GEN module_block.h
GEN sh4-softmmu/config-devices.mak
GEN alpha-linux-user/config-devices.mak
GEN tests/test-qapi-types.h
GEN tests/test-qapi-visit.h
GEN x86_64-softmmu/config-devices.mak
GEN sparc-softmmu/config-devices.mak
GEN tests/test-qmp-commands.h
GEN ppc64-softmmu/config-devices.mak
GEN unicore32-softmmu/config-devices.mak
GEN ppc-linux-user/config-devices.mak
GEN s390x-linux-user/config-devices.mak
GEN tests/test-qapi-event.h
GEN trace-root.h
GEN tests/test-qmp-introspect.h
GEN microblazeel-linux-user/config-devices.mak
GEN crypto/trace.h
GEN io/trace.h
GEN m68k-linux-user/config-devices.mak
GEN sparc64-linux-user/config-devices.mak.tmp
GEN migration/trace.h
GEN util/trace.h
GEN qmp-commands.h
GEN alpha-softmmu/config-devices.mak
GEN i386-softmmu/config-devices.mak
GEN mips64-softmmu/config-devices.mak
GEN xtensaeb-softmmu/config-devices.mak
GEN ppcemb-softmmu/config-devices.mak
GEN mips64el-softmmu/config-devices.mak
GEN sparc64-softmmu/config-devices.mak
GEN mipsel-softmmu/config-devices.mak
GEN aarch64-linux-user/config-devices.mak
GEN aarch64-softmmu/config-devices.mak
GEN armeb-linux-user/config-devices.mak
GEN cris-linux-user/config-devices.mak
GEN hppa-linux-user/config-devices.mak
GEN microblaze-linux-user/config-devices.mak
GEN mips64el-linux-user/config-devices.mak
GEN mips-softmmu/config-devices.mak
GEN mips64-linux-user/config-devices.mak
GEN xtensa-softmmu/config-devices.mak
GEN mipsel-linux-user/config-devices.mak
GEN mips-linux-user/config-devices.mak
GEN mipsn32el-linux-user/config-devices.mak
GEN nios2-linux-user/config-devices.mak
GEN ppc64abi32-linux-user/config-devices.mak
GEN ppc64le-linux-user/config-devices.mak
GEN sh4eb-linux-user/config-devices.mak
GEN sparc64-linux-user/config-devices.mak
GEN ppc64-linux-user/config-devices.mak
GEN sparc-linux-user/config-devices.mak
GEN tilegx-linux-user/config-devices.mak
GEN x86_64-linux-user/config-devices.mak
GEN 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
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/dumptrees.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/trees.S
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/testutils.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/value-labels.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/truncated_property.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/asm_tree_dump.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/overlay_bad_fixup.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/check_path.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/overlay.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/subnode_iterate.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/integer-expressions.c
CC cs.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/property_iterate.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/path_offset_aliases.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/utilfdt_test.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/dtbs_equal_unordered.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/add_subnode_with_nops.c
CC utils.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/dtb_reverse.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/dtbs_equal_ordered.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/extra-terminating-null.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/incbin.c
CC SStream.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/boot-cpuid.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/phandle_format.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/path-references.c
CC MCInstrDesc.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/appendprop2.c
CC MCRegisterInfo.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/appendprop1.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/string_escapes.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/propname_escapes.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/references.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/del_node.c
CC arch/ARM/ARMDisassembler.o
CC arch/ARM/ARMMapping.o
CC arch/ARM/ARMInstPrinter.o
CC arch/ARM/ARMModule.o
CC arch/AArch64/AArch64BaseInfo.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/del_property.c
CC arch/AArch64/AArch64InstPrinter.o
CC arch/AArch64/AArch64Mapping.o
CC arch/AArch64/AArch64Disassembler.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/setprop.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/set_name.c
CC arch/AArch64/AArch64Module.o
CC arch/Mips/MipsInstPrinter.o
CC arch/Mips/MipsDisassembler.o
CC arch/Mips/MipsMapping.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/rw_tree1.c
CC arch/Mips/MipsModule.o
CC arch/PowerPC/PPCDisassembler.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/nopulate.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/open_pack.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/move_and_save.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/sw_tree1.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/mangle-layout.c
CC arch/PowerPC/PPCInstPrinter.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/nop_node.c
CC arch/PowerPC/PPCModule.o
CC arch/PowerPC/PPCMapping.o
CC arch/Sparc/SparcDisassembler.o
CC arch/Sparc/SparcInstPrinter.o
CC arch/Sparc/SparcMapping.o
CC arch/Sparc/SparcModule.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/nop_property.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/setprop_inplace.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/stringlist.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/addr_size_cells.c
CC arch/SystemZ/SystemZDisassembler.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/notfound.c
CC arch/SystemZ/SystemZInstPrinter.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/char_literal.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/get_alias.c
CC arch/SystemZ/SystemZMapping.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/node_offset_by_compatible.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/node_check_compatible.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/sized_cells.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/node_offset_by_prop_value.c
CC arch/SystemZ/SystemZModule.o
CC arch/SystemZ/SystemZMCTargetDesc.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/node_offset_by_phandle.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/parent_offset.c
CC arch/X86/X86DisassemblerDecoder.o
CC arch/X86/X86Disassembler.o
CC arch/X86/X86ATTInstPrinter.o
CC arch/X86/X86Module.o
CC arch/XCore/XCoreDisassembler.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/supernode_atdepth_offset.c
CC arch/X86/X86Mapping.o
CC arch/X86/X86IntelInstPrinter.o
CC arch/XCore/XCoreInstPrinter.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/get_path.c
CC arch/XCore/XCoreMapping.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/get_phandle.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/getprop.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/get_name.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/path_offset.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/subnode_offset.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/root_node.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/find_property.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/tests/get_mem_rsv.c
CC arch/XCore/XCoreModule.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/libfdt/fdt_overlay.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/libfdt/fdt_addresses.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/libfdt/fdt_strerror.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/libfdt/fdt_empty_tree.c
CC MCInst.o
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/libfdt/fdt_sw.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/libfdt/fdt_rw.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/libfdt/fdt_wip.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/libfdt/fdt_ro.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/libfdt/fdt.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/util.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/fdtput.c
LEX convert-dtsv0-lexer.lex.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/srcpos.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/fdtdump.c
BISON dtc-parser.tab.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/fdtget.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/livetree.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/fstree.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/treesource.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/flattree.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/data.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/dtc.c
LEX dtc-lexer.lex.c
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/checks.c
DEP convert-dtsv0-lexer.lex.c
DEP dtc-parser.tab.c
DEP dtc-lexer.lex.c
CHK version_gen.h
UPD version_gen.h
DEP /var/tmp/patchew-tester-tmp-845hv716/src/dtc/util.c
CC libfdt/fdt.o
CC libfdt/fdt_ro.o
CC libfdt/fdt_wip.o
CC libfdt/fdt_sw.o
CC libfdt/fdt_rw.o
CC libfdt/fdt_strerror.o
CC libfdt/fdt_empty_tree.o
CC libfdt/fdt_addresses.o
CC libfdt/fdt_overlay.o
AR libfdt/libfdt.a
ar: creating libfdt/libfdt.a
a - libfdt/fdt.o
a - libfdt/fdt_ro.o
a - libfdt/fdt_wip.o
a - libfdt/fdt_sw.o
a - libfdt/fdt_rw.o
a - libfdt/fdt_strerror.o
a - libfdt/fdt_empty_tree.o
a - libfdt/fdt_addresses.o
a - libfdt/fdt_overlay.o
AR libcapstone.a
ar: creating /var/tmp/patchew-tester-tmp-845hv716/src/build/capstone/libcapstone.a
mkdir -p dtc/libfdt
mkdir -p dtc/tests
make[1]: `/var/tmp/patchew-tester-tmp-845hv716/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-qapi-visit.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 qmp-introspect.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-parser.o
CC qobject/json-streamer.o
CC trace/control.o
CC util/osdep.o
CC trace/qmp.o
CC util/cutils.o
CC util/unicode.o
CC util/qemu-timer-common.o
CC util/bufferiszero.o
CC util/lockcnt.o
CC util/aiocb.o
CC util/async.o
CC util/thread-pool.o
CC util/qemu-timer.o
CC util/main-loop.o
CC util/iohandler.o
CC util/compatfd.o
CC util/event_notifier-posix.o
CC util/mmap-alloc.o
CC util/oslib-posix.o
CC util/aio-posix.o
CC util/qemu-openpty.o
CC util/qemu-thread-posix.o
CC util/memfd.o
CC util/envlist.o
CC util/path.o
CC util/module.o
CC util/bitmap.o
CC util/bitops.o
CC util/hbitmap.o
CC util/host-utils.o
CC util/fifo8.o
CC util/acl.o
CC util/cacheinfo.o
CC util/error.o
CC util/qemu-error.o
CC util/id.o
CC util/iov.o
CC util/qemu-config.o
CC util/qemu-sockets.o
CC util/uri.o
CC util/notify.o
CC util/qemu-option.o
CC util/qemu-progress.o
CC util/uuid.o
CC util/crc32c.o
CC util/keyval.o
CC util/hexdump.o
CC util/getauxval.o
CC util/throttle.o
CC util/rcu.o
CC util/readline.o
CC util/qemu-coroutine-lock.o
CC util/qemu-coroutine.o
CC util/qemu-coroutine-io.o
CC util/timed-average.o
CC util/qemu-coroutine-sleep.o
CC util/buffer.o
CC util/coroutine-ucontext.o
CC util/log.o
CC util/base64.o
CC util/qdist.o
CC util/systemd.o
CC util/range.o
CC trace-root.o
CC util/qht.o
CC util/trace.o
CC util/stats64.o
CC io/trace.o
CC util/pagesize.o
CC crypto/trace.o
CC migration/trace.o
CC block/trace.o
CC chardev/trace.o
CC hw/block/trace.o
CC hw/block/dataplane/trace.o
CC hw/char/trace.o
CC hw/intc/trace.o
CC hw/virtio/trace.o
CC hw/audio/trace.o
CC hw/misc/trace.o
CC hw/net/trace.o
CC hw/usb/trace.o
CC hw/scsi/trace.o
CC hw/nvram/trace.o
CC hw/input/trace.o
CC hw/timer/trace.o
CC hw/sparc/trace.o
CC hw/display/trace.o
CC hw/dma/trace.o
CC hw/sd/trace.o
CC hw/isa/trace.o
CC hw/mem/trace.o
CC hw/i386/trace.o
CC hw/i386/xen/trace.o
CC hw/9pfs/trace.o
CC hw/ppc/trace.o
CC hw/pci/trace.o
CC hw/s390x/trace.o
CC hw/vfio/trace.o
CC hw/acpi/trace.o
CC hw/arm/trace.o
CC hw/alpha/trace.o
CC hw/xen/trace.o
CC ui/trace.o
CC hw/ide/trace.o
CC audio/trace.o
CC net/trace.o
CC target/arm/trace.o
CC target/i386/trace.o
CC target/mips/trace.o
CC target/sparc/trace.o
CC target/s390x/trace.o
CC target/ppc/trace.o
CC qom/trace.o
CC linux-user/trace.o
CC qapi/trace.o
CC accel/tcg/trace.o
CC accel/kvm/trace.o
CC nbd/trace.o
CC scsi/trace.o
CC crypto/pbkdf-stub.o
CC stubs/arch-query-cpu-def.o
CC stubs/arch-query-cpu-model-comparison.o
CC stubs/arch-query-cpu-model-baseline.o
CC stubs/bdrv-next-monitor-owned.o
CC stubs/arch-query-cpu-model-expansion.o
CC stubs/clock-warp.o
CC stubs/blockdev-close-all-bdrv-states.o
CC stubs/blk-commit-all.o
CC stubs/cpu-get-clock.o
CC stubs/cpu-get-icount.o
CC stubs/dump.o
CC stubs/error-printf.o
CC stubs/fdset.o
CC stubs/iothread.o
CC stubs/iothread-lock.o
CC stubs/gdbstub.o
CC stubs/is-daemonized.o
CC stubs/machine-init-done.o
CC stubs/get-vm-name.o
CC stubs/migr-blocker.o
CC stubs/change-state-handler.o
CC stubs/monitor.o
CC stubs/notify-event.o
CC stubs/qtest.o
CC stubs/linux-aio.o
CC stubs/replay.o
CC stubs/runstate-check.o
CC stubs/set-fd-handler.o
CC stubs/slirp.o
CC stubs/sysbus.o
CC stubs/tpm.o
CC stubs/trace-control.o
CC stubs/uuid.o
CC stubs/vm-stop.o
CC stubs/vmstate.o
CC stubs/qmp_pc_dimm.o
CC stubs/target-get-monitor-def.o
CC stubs/pc_madt_cpu_entry.o
CC stubs/target-monitor-defs.o
CC stubs/vmgenid.o
CC stubs/xen-common.o
CC stubs/xen-hvm.o
CC stubs/pci-host-piix.o
CC qemu-nbd.o
CC block/raw-format.o
CC blockjob.o
CC contrib/ivshmem-server/ivshmem-server.o
CC qemu-io-cmds.o
CC replication.o
CC block/vdi.o
CC block/qcow2-cluster.o
CC block/vvfat.o
CC block/qcow.o
CC block/bochs.o
CC block/qcow2.o
CC block/vpc.o
CC block.o
CC block/qcow2-refcount.o
CC block/dmg.o
CC block/qcow2-cache.o
CC block/qed-l2-cache.o
CC contrib/ivshmem-client/ivshmem-client.o
CC block/cloop.o
CC block/qcow2-bitmap.o
CC block/vmdk.o
CC block/qed.o
CC block/qcow2-snapshot.o
CC contrib/ivshmem-client/main.o
CC contrib/ivshmem-server/main.o
CC block/qed-table.o
CC block/qed-cluster.o
CC block/qed-check.o
CC block/vhdx.o
CC block/vhdx-endian.o
CC block/vhdx-log.o
CC block/parallels.o
CC block/blkdebug.o
CC block/quorum.o
CC block/blkverify.o
CC block/blkreplay.o
CC block/block-backend.o
CC block/snapshot.o
CC block/qapi.o
CC block/file-posix.o
CC block/linux-aio.o
CC block/null.o
CC block/mirror.o
CC block/commit.o
CC block/io.o
CC block/throttle-groups.o
CC block/nbd.o
CC block/nbd-client.o
CC block/sheepdog.o
CC block/accounting.o
CC block/dirty-bitmap.o
CC block/write-threshold.o
CC block/backup.o
CC block/replication.o
CC block/throttle.o
CC block/crypto.o
CC nbd/server.o
CC nbd/client.o
CC nbd/common.o
CC scsi/utils.o
CC scsi/pr-manager.o
CC scsi/pr-manager-helper.o
CC block/curl.o
CC block/dmg-bz2.o
CC crypto/init.o
CC crypto/hash-nettle.o
CC crypto/hmac.o
CC crypto/hash.o
CC crypto/hmac-nettle.o
CC crypto/aes.o
CC crypto/desrfb.o
CC crypto/cipher.o
CC crypto/tlscreds.o
CC crypto/tlscredsanon.o
CC crypto/tlscredsx509.o
CC crypto/tlssession.o
CC crypto/secret.o
CC crypto/random-gnutls.o
CC crypto/pbkdf-nettle.o
CC crypto/ivgen.o
CC crypto/pbkdf.o
CC crypto/ivgen-essiv.o
CC crypto/ivgen-plain.o
CC crypto/ivgen-plain64.o
CC crypto/afsplit.o
CC crypto/block-qcow.o
CC crypto/block-luks.o
CC crypto/block.o
CC crypto/xts.o
CC io/channel.o
CC io/channel-buffer.o
CC io/channel-command.o
CC io/channel-file.o
CC io/channel-socket.o
CC io/channel-tls.o
CC io/channel-watch.o
CC io/channel-websock.o
CC io/channel-util.o
CC io/dns-resolver.o
CC io/task.o
CC qom/object.o
CC qom/container.o
CC qom/qom-qobject.o
CC qom/object_interfaces.o
GEN qemu-img-cmds.h
CC qemu-io.o
CC fsdev/virtfs-proxy-helper.o
CC fsdev/9p-marshal.o
CC fsdev/9p-iov-marshal.o
CC scsi/qemu-pr-helper.o
CC qemu-bridge-helper.o
CC blockdev.o
CC bootdevice.o
CC blockdev-nbd.o
CC iothread.o
CC qdev-monitor.o
CC device-hotplug.o
CC os-posix.o
CC bt-host.o
CC bt-vhci.o
CC dma-helpers.o
CC vl.o
CC tpm.o
CC device_tree.o
CC qmp-marshal.o
CC qmp.o
CC hmp.o
CC cpus-common.o
CC audio/wavaudio.o
CC audio/mixeng.o
CC audio/audio.o
CC audio/sdlaudio.o
CC audio/noaudio.o
CC audio/ossaudio.o
CC audio/wavcapture.o
CC backends/rng.o
CC backends/rng-egd.o
CC backends/rng-random.o
CC backends/tpm.o
CC backends/hostmem.o
CC backends/hostmem-ram.o
CC backends/hostmem-file.o
CC backends/cryptodev.o
CC backends/cryptodev-builtin.o
CC block/stream.o
CC chardev/msmouse.o
CC chardev/wctablet.o
CC chardev/testdev.o
CC disas/alpha.o
CC disas/arm.o
CXX disas/arm-a64.o
CC disas/cris.o
CC disas/hppa.o
CC disas/i386.o
CC disas/m68k.o
CC disas/microblaze.o
CC disas/nios2.o
CC disas/moxie.o
CC disas/ppc.o
CC disas/mips.o
CC disas/s390.o
CC disas/sh4.o
CC disas/sparc.o
CC disas/lm32.o
CXX disas/libvixl/vixl/utils.o
CXX disas/libvixl/vixl/compiler-intrinsics.o
CXX disas/libvixl/vixl/a64/instructions-a64.o
CXX disas/libvixl/vixl/a64/decoder-a64.o
CXX disas/libvixl/vixl/a64/disasm-a64.o
CC fsdev/qemu-fsdev.o
CC fsdev/qemu-fsdev-opts.o
CC fsdev/qemu-fsdev-throttle.o
CC fsdev/qemu-fsdev-dummy.o
CC hw/9pfs/9p.o
CC hw/9pfs/9p-util.o
CC hw/9pfs/9p-local.o
CC hw/9pfs/9p-xattr.o
CC hw/9pfs/9p-xattr-user.o
CC hw/9pfs/9p-posix-acl.o
CC hw/9pfs/coth.o
CC hw/9pfs/cofs.o
CC hw/9pfs/codir.o
CC hw/9pfs/cofile.o
CC hw/9pfs/coxattr.o
CC hw/9pfs/9p-synth.o
CC hw/9pfs/9p-handle.o
CC hw/9pfs/9p-proxy.o
CC hw/acpi/core.o
CC hw/acpi/pcihp.o
CC hw/acpi/piix4.o
CC hw/acpi/ich9.o
CC hw/acpi/tco.o
CC hw/acpi/cpu_hotplug.o
CC hw/acpi/memory_hotplug.o
CC hw/acpi/nvdimm.o
CC hw/acpi/vmgenid.o
CC hw/acpi/acpi_interface.o
CC hw/acpi/cpu.o
CC hw/acpi/bios-linker-loader.o
CC hw/acpi/aml-build.o
CC hw/acpi/ipmi.o
CC hw/acpi/acpi-stub.o
CC hw/acpi/ipmi-stub.o
CC hw/audio/sb16.o
CC hw/audio/es1370.o
CC hw/audio/ac97.o
CC hw/audio/fmopl.o
CC hw/audio/adlib.o
CC hw/audio/gus.o
CC hw/audio/gusemu_hal.o
CC hw/audio/gusemu_mixer.o
CC hw/audio/cs4231a.o
CC hw/audio/intel-hda.o
CC hw/audio/hda-codec.o
CC hw/audio/pcspk.o
CC hw/audio/wm8750.o
CC hw/audio/pl041.o
CC hw/audio/lm4549.o
CC hw/audio/cs4231.o
CC hw/audio/marvell_88w8618.o
CC hw/audio/milkymist-ac97.o
CC hw/audio/soundhw.o
CC hw/block/block.o
CC hw/block/cdrom.o
CC hw/block/hd-geometry.o
CC hw/block/fdc.o
CC hw/block/m25p80.o
CC hw/block/nand.o
CC hw/block/pflash_cfi01.o
CC hw/block/pflash_cfi02.o
CC hw/block/ecc.o
CC hw/block/onenand.o
CC hw/block/nvme.o
CC hw/bt/core.o
CC hw/bt/l2cap.o
CC hw/bt/sdp.o
CC hw/bt/hci.o
CC hw/bt/hid.o
CC hw/bt/hci-csr.o
CC hw/char/ipoctal232.o
CC hw/char/escc.o
CC hw/char/parallel.o
CC hw/char/pl011.o
CC hw/char/serial-isa.o
CC hw/char/serial.o
CC hw/char/serial-pci.o
CC hw/char/virtio-console.o
CC hw/char/xilinx_uartlite.o
CC hw/char/cadence_uart.o
CC hw/char/cmsdk-apb-uart.o
CC hw/char/etraxfs_ser.o
CC hw/char/debugcon.o
CC hw/char/grlib_apbuart.o
CC hw/char/imx_serial.o
CC hw/char/lm32_juart.o
CC hw/char/lm32_uart.o
CC hw/char/milkymist-uart.o
CC hw/char/sclpconsole.o
CC hw/char/sclpconsole-lm.o
CC hw/core/qdev.o
CC hw/core/qdev-properties.o
CC hw/core/bus.o
CC hw/core/reset.o
CC hw/core/fw-path-provider.o
CC hw/core/irq.o
CC hw/core/hotplug.o
CC hw/core/nmi.o
CC hw/core/stream.o
CC hw/core/ptimer.o
CC hw/core/empty_slot.o
CC hw/core/sysbus.o
CC hw/core/machine.o
CC hw/core/loader.o
CC hw/core/loader-fit.o
CC hw/core/qdev-properties-system.o
CC hw/core/register.o
CC hw/core/or-irq.o
CC hw/core/platform-bus.o
CC hw/cpu/core.o
CC hw/display/ads7846.o
CC hw/display/cirrus_vga.o
CC hw/display/g364fb.o
CC hw/display/jazz_led.o
CC hw/display/pl110.o
CC hw/display/ssd0303.o
CC hw/display/ssd0323.o
CC hw/display/vga-pci.o
CC hw/display/vga-isa.o
CC hw/display/vga-isa-mm.o
CC hw/display/vmware_vga.o
CC hw/display/blizzard.o
CC hw/display/exynos4210_fimd.o
CC hw/display/framebuffer.o
CC hw/display/milkymist-vgafb.o
CC hw/display/tc6393xb.o
CC hw/dma/puv3_dma.o
CC hw/dma/rc4030.o
CC hw/dma/pl080.o
CC hw/dma/pl330.o
CC hw/dma/i82374.o
CC hw/dma/i8257.o
CC hw/dma/xilinx_axidma.o
CC hw/dma/xlnx-zynq-devcfg.o
CC hw/dma/etraxfs_dma.o
CC hw/dma/sparc32_dma.o
CC hw/dma/sun4m_iommu.o
CC hw/gpio/max7310.o
CC hw/gpio/pl061.o
CC hw/gpio/puv3_gpio.o
CC hw/gpio/zaurus.o
CC hw/gpio/mpc8xxx.o
CC hw/gpio/gpio_key.o
CC hw/i2c/core.o
CC hw/i2c/smbus.o
CC hw/i2c/smbus_eeprom.o
CC hw/i2c/i2c-ddc.o
CC hw/i2c/versatile_i2c.o
CC hw/i2c/smbus_ich9.o
CC hw/i2c/pm_smbus.o
CC hw/i2c/bitbang_i2c.o
CC hw/i2c/exynos4210_i2c.o
CC hw/i2c/imx_i2c.o
CC hw/ide/atapi.o
CC hw/ide/core.o
CC hw/i2c/aspeed_i2c.o
CC hw/ide/qdev.o
CC hw/ide/pci.o
CC hw/ide/isa.o
CC hw/ide/piix.o
CC hw/ide/cmd646.o
CC hw/ide/macio.o
CC hw/ide/mmio.o
CC hw/ide/via.o
CC hw/ide/microdrive.o
CC hw/ide/ahci.o
CC hw/ide/ich.o
CC hw/input/adb.o
CC hw/input/hid.o
CC hw/input/lm832x.o
CC hw/input/pckbd.o
CC hw/input/pl050.o
CC hw/input/ps2.o
CC hw/input/stellaris_input.o
CC hw/input/tsc2005.o
CC hw/input/vmmouse.o
CC hw/input/virtio-input.o
CC hw/input/virtio-input-hid.o
CC hw/input/virtio-input-host.o
CC hw/intc/heathrow_pic.o
CC hw/intc/i8259_common.o
CC hw/intc/i8259.o
CC hw/intc/pl190.o
CC hw/intc/lm32_pic.o
CC hw/intc/xilinx_intc.o
CC hw/intc/realview_gic.o
CC hw/intc/puv3_intc.o
CC hw/intc/imx_avic.o
CC hw/intc/etraxfs_pic.o
CC hw/intc/slavio_intctl.o
CC hw/intc/ioapic_common.o
CC hw/intc/arm_gic_common.o
CC hw/intc/arm_gic.o
CC hw/intc/arm_gicv2m.o
CC hw/intc/arm_gicv3_common.o
CC hw/intc/arm_gicv3.o
CC hw/intc/arm_gicv3_dist.o
CC hw/intc/arm_gicv3_redist.o
CC hw/intc/arm_gicv3_its_common.o
CC hw/intc/openpic.o
CC hw/intc/intc.o
CC hw/ipack/ipack.o
CC hw/ipack/tpci200.o
CC hw/ipmi/ipmi.o
CC hw/ipmi/ipmi_bmc_sim.o
CC hw/ipmi/ipmi_bmc_extern.o
CC hw/ipmi/isa_ipmi_kcs.o
CC hw/isa/isa-bus.o
CC hw/ipmi/isa_ipmi_bt.o
CC hw/isa/apm.o
CC hw/isa/i82378.o
CC hw/isa/pc87312.o
CC hw/isa/piix4.o
CC hw/isa/vt82c686.o
CC hw/mem/nvdimm.o
CC hw/mem/pc-dimm.o
CC hw/misc/applesmc.o
CC hw/misc/max111x.o
CC hw/misc/tmp105.o
CC hw/misc/tmp421.o
CC hw/misc/debugexit.o
CC hw/misc/sga.o
CC hw/misc/pc-testdev.o
CC hw/misc/pci-testdev.o
CC hw/misc/edu.o
CC hw/misc/unimp.o
CC hw/misc/vmcoreinfo.o
CC hw/misc/arm_l2x0.o
CC hw/misc/arm_integrator_debug.o
CC hw/misc/a9scu.o
CC hw/misc/puv3_pm.o
CC hw/misc/macio/macio.o
CC hw/misc/arm11scu.o
CC hw/misc/macio/cuda.o
CC hw/misc/macio/mac_dbdma.o
CC hw/net/dp8393x.o
CC hw/net/ne2000.o
CC hw/net/eepro100.o
CC hw/net/pcnet-pci.o
CC hw/net/pcnet.o
CC hw/net/e1000x_common.o
CC hw/net/e1000.o
CC hw/net/net_tx_pkt.o
CC hw/net/net_rx_pkt.o
CC hw/net/e1000e.o
CC hw/net/e1000e_core.o
CC hw/net/rtl8139.o
CC hw/net/vmxnet3.o
CC hw/net/ne2000-isa.o
CC hw/net/lan9118.o
CC hw/net/opencores_eth.o
CC hw/net/smc91c111.o
CC hw/net/xgmac.o
CC hw/net/mipsnet.o
CC hw/net/xilinx_axienet.o
CC hw/net/allwinner_emac.o
CC hw/net/imx_fec.o
CC hw/net/cadence_gem.o
CC hw/net/stellaris_enet.o
CC hw/net/lance.o
CC hw/net/sunhme.o
CC hw/net/ftgmac100.o
CC hw/net/rocker/rocker_fp.o
CC hw/net/sungem.o
CC hw/net/rocker/rocker_desc.o
CC hw/net/rocker/rocker_world.o
CC hw/net/rocker/rocker_of_dpa.o
CC hw/net/rocker/rocker.o
CC hw/nvram/ds1225y.o
CC hw/nvram/chrp_nvram.o
CC hw/nvram/eeprom93xx.o
CC hw/nvram/mac_nvram.o
CC hw/nvram/fw_cfg.o
CC hw/pci-bridge/pci_bridge_dev.o
CC hw/pci-bridge/pcie_pci_bridge.o
CC hw/pci-bridge/pcie_root_port.o
CC hw/pci-bridge/gen_pcie_root_port.o
CC hw/pci-bridge/pci_expander_bridge.o
CC hw/pci-bridge/xio3130_upstream.o
CC hw/pci-bridge/xio3130_downstream.o
CC hw/pci-bridge/ioh3420.o
CC hw/pci-bridge/i82801b11.o
CC hw/pci-bridge/dec.o
CC hw/pci-host/pam.o
CC hw/pci-host/prep.o
CC hw/pci-host/grackle.o
CC hw/pci-host/uninorth.o
CC hw/pci-host/ppce500.o
CC hw/pci-host/versatile.o
CC hw/pci-host/apb.o
CC hw/pci-host/bonito.o
CC hw/pci-host/piix.o
CC hw/pci-host/q35.o
CC hw/pci-host/gpex.o
CC hw/pci-host/xilinx-pcie.o
CC hw/pci/pci.o
CC hw/pci/pci_bridge.o
CC hw/pci/msix.o
CC hw/pci/msi.o
CC hw/pci/shpc.o
CC hw/pci/slotid_cap.o
CC hw/pci/pci_host.o
CC hw/pci/pcie_host.o
CC hw/pci/pcie.o
CC hw/pci/pcie_aer.o
CC hw/pci/pcie_port.o
CC hw/pci/pci-stub.o
CC hw/pcmcia/pcmcia.o
CC hw/scsi/scsi-disk.o
CC hw/scsi/scsi-generic.o
CC hw/scsi/scsi-bus.o
CC hw/scsi/lsi53c895a.o
CC hw/scsi/mptsas.o
CC hw/scsi/mptconfig.o
CC hw/scsi/mptendian.o
CC hw/scsi/megasas.o
CC hw/scsi/vmw_pvscsi.o
CC hw/scsi/esp.o
CC hw/scsi/esp-pci.o
CC hw/sd/pl181.o
CC hw/sd/ssi-sd.o
CC hw/sd/sd.o
CC hw/sd/core.o
CC hw/sd/sdhci.o
CC hw/smbios/smbios.o
CC hw/smbios/smbios_type_38.o
CC hw/smbios/smbios-stub.o
CC hw/smbios/smbios_type_38-stub.o
CC hw/ssi/pl022.o
CC hw/ssi/ssi.o
CC hw/ssi/xilinx_spi.o
CC hw/ssi/xilinx_spips.o
CC hw/ssi/aspeed_smc.o
CC hw/ssi/stm32f2xx_spi.o
CC hw/ssi/mss-spi.o
CC hw/timer/arm_timer.o
CC hw/timer/arm_mptimer.o
CC hw/timer/armv7m_systick.o
CC hw/timer/a9gtimer.o
CC hw/timer/cadence_ttc.o
CC hw/timer/ds1338.o
CC hw/timer/hpet.o
CC hw/timer/i8254_common.o
CC hw/timer/m48t59.o
CC hw/timer/m48t59-isa.o
CC hw/timer/i8254.o
CC hw/timer/pl031.o
CC hw/timer/puv3_ost.o
CC hw/timer/twl92230.o
CC hw/timer/xilinx_timer.o
CC hw/timer/slavio_timer.o
CC hw/timer/etraxfs_timer.o
CC hw/timer/grlib_gptimer.o
CC hw/timer/imx_epit.o
CC hw/timer/imx_gpt.o
CC hw/timer/lm32_timer.o
CC hw/timer/milkymist-sysctl.o
CC hw/timer/stm32f2xx_timer.o
CC hw/timer/aspeed_timer.o
CC hw/timer/sun4v-rtc.o
CC hw/timer/cmsdk-apb-timer.o
CC hw/timer/mss-timer.o
CC hw/tpm/tpm_tis.o
CC hw/tpm/tpm_emulator.o
CC hw/tpm/tpm_util.o
CC hw/usb/core.o
CC hw/usb/combined-packet.o
CC hw/usb/bus.o
CC hw/usb/libhw.o
CC hw/usb/desc.o
CC hw/usb/desc-msos.o
CC hw/usb/hcd-uhci.o
CC hw/usb/hcd-ohci.o
CC hw/usb/hcd-ehci.o
CC hw/usb/hcd-ehci-pci.o
CC hw/usb/hcd-ehci-sysbus.o
CC hw/usb/hcd-xhci.o
CC hw/usb/hcd-xhci-nec.o
CC hw/usb/hcd-musb.o
CC hw/usb/dev-hub.o
CC hw/usb/dev-hid.o
CC hw/usb/dev-wacom.o
CC hw/usb/dev-storage.o
CC hw/usb/dev-uas.o
CC hw/usb/dev-audio.o
CC hw/usb/dev-serial.o
CC hw/usb/dev-network.o
CC hw/usb/dev-bluetooth.o
CC hw/usb/dev-smartcard-reader.o
CC hw/usb/dev-mtp.o
CC hw/usb/host-libusb.o
CC hw/usb/host-legacy.o
CC hw/usb/host-stub.o
CC hw/virtio/virtio-rng.o
CC hw/virtio/virtio-pci.o
CC hw/virtio/virtio-bus.o
CC hw/virtio/virtio-mmio.o
CC hw/virtio/vhost-stub.o
CC hw/watchdog/wdt_i6300esb.o
CC hw/watchdog/wdt_diag288.o
CC hw/watchdog/watchdog.o
CC hw/watchdog/wdt_aspeed.o
CC hw/watchdog/wdt_ib700.o
CC migration/migration.o
CC migration/socket.o
CC migration/fd.o
CC migration/exec.o
CC migration/tls.o
CC migration/channel.o
CC migration/savevm.o
CC migration/colo-comm.o
CC migration/colo.o
CC migration/vmstate.o
CC migration/vmstate-types.o
CC migration/page_cache.o
CC migration/colo-failover.o
CC migration/qemu-file.o
CC migration/global_state.o
CC migration/qemu-file-channel.o
CC migration/xbzrle.o
CC migration/postcopy-ram.o
CC migration/qjson.o
CC migration/block-dirty-bitmap.o
CC migration/rdma.o
CC migration/block.o
CC net/net.o
CC net/queue.o
CC net/checksum.o
CC net/util.o
CC net/hub.o
CC net/socket.o
CC net/dump.o
CC net/l2tpv3.o
CC net/eth.o
CC net/vhost-user.o
CC net/slirp.o
CC net/filter.o
CC net/filter-buffer.o
CC net/colo-compare.o
CC net/colo.o
CC net/filter-mirror.o
CC net/filter-rewriter.o
CC net/filter-replay.o
CC net/tap.o
CC net/tap-linux.o
CC qom/cpu.o
CC replay/replay.o
CC replay/replay-internal.o
CC replay/replay-events.o
CC replay/replay-input.o
CC replay/replay-time.o
CC replay/replay-char.o
CC replay/replay-snapshot.o
CC replay/replay-net.o
CC replay/replay-audio.o
CC slirp/cksum.o
CC slirp/if.o
CC slirp/ip_icmp.o
CC slirp/ip6_icmp.o
CC slirp/ip6_input.o
CC slirp/ip6_output.o
CC slirp/ip_input.o
CC slirp/ip_output.o
CC slirp/dnssearch.o
CC slirp/dhcpv6.o
CC slirp/slirp.o
CC slirp/mbuf.o
CC slirp/misc.o
CC slirp/sbuf.o
CC slirp/socket.o
CC slirp/tcp_input.o
CC slirp/tcp_output.o
CC slirp/tcp_subr.o
CC slirp/tcp_timer.o
CC slirp/udp.o
CC slirp/udp6.o
CC slirp/bootp.o
CC slirp/tftp.o
CC slirp/arp_table.o
CC slirp/ndp_table.o
CC slirp/ncsi.o
CC ui/keymaps.o
CC ui/console.o
CC ui/cursor.o
CC ui/qemu-pixman.o
CC ui/input-legacy.o
CC ui/input.o
CC ui/input-linux.o
CC ui/input-keymap.o
CC ui/sdl.o
CC ui/sdl_zoom.o
CC ui/curses.o
CC ui/vnc.o
CC ui/vnc-enc-zlib.o
CC ui/vnc-enc-hextile.o
CC ui/x_keymap.o
CC ui/vnc-enc-tight.o
CC ui/vnc-palette.o
CC ui/vnc-enc-zrle.o
CC ui/vnc-auth-vencrypt.o
CC ui/vnc-auth-sasl.o
CC ui/vnc-ws.o
CC ui/vnc-jobs.o
CC ui/gtk.o
CC chardev/char.o
CC chardev/char-fd.o
CC chardev/char-fe.o
CC chardev/char-file.o
CC chardev/char-mux.o
CC chardev/char-io.o
CC chardev/char-null.o
CC chardev/char-parallel.o
CC chardev/char-pipe.o
CC chardev/char-pty.o
CC chardev/char-ringbuf.o
CC chardev/char-serial.o
CC chardev/char-socket.o
CC chardev/char-stdio.o
CC chardev/char-udp.o
CCAS spapr-rtas/spapr-rtas.o
Building spapr-rtas/spapr-rtas.img
Building spapr-rtas/spapr-rtas.bin
rm spapr-rtas.img spapr-rtas.o
LINK tests/qemu-iotests/socket_scm_helper
CC qga/commands.o
CC qga/guest-agent-command-state.o
CC qga/main.o
CC qga/commands-posix.o
CC qga/channel-posix.o
CC qga/qapi-generated/qga-qapi-types.o
CC qga/qapi-generated/qga-qapi-visit.o
CC qga/qapi-generated/qga-qmp-marshal.o
CC qemu-img.o
AR libqemuutil.a
LINK qemu-ga
LINK ivshmem-client
LINK ivshmem-server
LINK qemu-nbd
LINK qemu-img
LINK qemu-io
LINK fsdev/virtfs-proxy-helper
LINK scsi/qemu-pr-helper
LINK qemu-bridge-helper
GEN m68k-linux-user/config-target.h
GEN mips64el-linux-user/config-target.h
GEN armeb-linux-user/config-target.h
CC mips64el-linux-user/exec.o
CC mips64el-linux-user/tcg/tcg.o
CC mips64el-linux-user/tcg/tcg-op.o
CC mips64el-linux-user/tcg/optimize.o
CC mips64el-linux-user/tcg/tcg-common.o
CC mips64el-linux-user/fpu/softfloat.o
CC mips64el-linux-user/disas.o
GEN arm-linux-user/config-target.h
CC mips64el-linux-user/gdbstub.o
CC mips64el-linux-user/thunk.o
CC armeb-linux-user/exec.o
CC armeb-linux-user/tcg/tcg.o
CC mips64el-linux-user/accel/stubs/hax-stub.o
CC mips64el-linux-user/accel/stubs/kvm-stub.o
CC mips64el-linux-user/accel/tcg/tcg-runtime.o
CC armeb-linux-user/tcg/tcg-op.o
CC mips64el-linux-user/accel/tcg/cpu-exec.o
CC mips64el-linux-user/accel/tcg/translate-all.o
CC armeb-linux-user/tcg/optimize.o
CC mips64el-linux-user/accel/tcg/translator.o
CC armeb-linux-user/fpu/softfloat.o
GEN aarch64-linux-user/config-target.h
CC armeb-linux-user/tcg/tcg-common.o
CC mips64el-linux-user/accel/tcg/user-exec.o
CC mips64el-linux-user/accel/tcg/user-exec-stub.o
CC mips64el-linux-user/linux-user/main.o
GEN or1k-linux-user/config-target.h
CC mips64el-linux-user/linux-user/syscall.o
CC mips64el-linux-user/accel/tcg/cpu-exec-common.o
CC armeb-linux-user/disas.o
GEN armeb-linux-user/gdbstub-xml.c
CC armeb-linux-user/gdbstub.o
CC mips64el-linux-user/linux-user/strace.o
CC mips64el-linux-user/linux-user/signal.o
CC armeb-linux-user/thunk.o
CC armeb-linux-user/accel/stubs/hax-stub.o
CC mips64el-linux-user/linux-user/mmap.o
CC armeb-linux-user/accel/stubs/kvm-stub.o
CC armeb-linux-user/accel/tcg/tcg-runtime.o
CC armeb-linux-user/accel/tcg/cpu-exec-common.o
CC aarch64-linux-user/exec.o
CC armeb-linux-user/accel/tcg/translate-all.o
GEN mipsel-linux-user/config-target.h
CC aarch64-linux-user/tcg/tcg.o
CC armeb-linux-user/accel/tcg/cpu-exec.o
CC mips64el-linux-user/linux-user/uaccess.o
CC mips64el-linux-user/linux-user/elfload.o
CC mips64el-linux-user/linux-user/linuxload.o
CC arm-linux-user/exec.o
GEN hppa-linux-user/config-target.h
GEN microblazeel-linux-user/config-target.h
GEN alpha-linux-user/config-target.h
CC mipsel-linux-user/exec.o
CC or1k-linux-user/exec.o
GEN cris-linux-user/config-target.h
GEN mipsn32el-linux-user/config-target.h
GEN microblaze-linux-user/config-target.h
CC alpha-linux-user/exec.o
GEN mips64-linux-user/config-target.h
GEN ppc-linux-user/config-target.h
GEN nios2-linux-user/config-target.h
CC microblazeel-linux-user/exec.o
GEN i386-linux-user/config-target.h
GEN x86_64-linux-user/config-target.h
GEN sh4-linux-user/config-target.h
GEN sparc32plus-linux-user/config-target.h
GEN sparc-linux-user/config-target.h
CC mips64-linux-user/exec.o
CC cris-linux-user/exec.o
CC hppa-linux-user/exec.o
GEN mipsn32-linux-user/config-target.h
GEN tilegx-linux-user/config-target.h
CC sh4-linux-user/exec.o
CC mipsn32el-linux-user/exec.o
GEN moxie-softmmu/hmp-commands.h
GEN ppc64le-linux-user/config-target.h
GEN sparc64-linux-user/config-target.h
CC m68k-linux-user/exec.o
CC microblaze-linux-user/exec.o
GEN mips-linux-user/config-target.h
CC ppc-linux-user/exec.o
GEN ppc64abi32-linux-user/config-target.h
CC x86_64-linux-user/exec.o
CC sparc64-linux-user/exec.o
CC sparc32plus-linux-user/exec.o
CC i386-linux-user/exec.o
GEN m68k-softmmu/hmp-commands.h
CC nios2-linux-user/exec.o
CC arm-linux-user/tcg/tcg.o
CC tilegx-linux-user/exec.o
CC sparc-linux-user/exec.o
CC ppc64le-linux-user/exec.o
CC s390x-linux-user/gen-features
CC ppc64abi32-linux-user/exec.o
GEN ppc64-linux-user/config-target.h
CC mipsn32-linux-user/exec.o
CC x86_64-linux-user/tcg/tcg.o
CC mips-linux-user/exec.o
CC ppc64le-linux-user/tcg/tcg.o
GEN moxie-softmmu/hmp-commands-info.h
CC ppc64-linux-user/exec.o
GEN lm32-softmmu/hmp-commands.h
GEN sh4eb-linux-user/config-target.h
CC sparc32plus-linux-user/tcg/tcg.o
CC sh4eb-linux-user/exec.o
GEN m68k-softmmu/hmp-commands-info.h
CC x86_64-linux-user/tcg/tcg-op.o
GEN moxie-softmmu/config-target.h
CC mips64-linux-user/tcg/tcg.o
GEN m68k-softmmu/config-target.h
CC mips64-linux-user/tcg/tcg-op.o
CC sparc64-linux-user/tcg/tcg.o
GEN cris-softmmu/hmp-commands.h
GEN unicore32-softmmu/hmp-commands.h
CC moxie-softmmu/exec.o
CC m68k-softmmu/exec.o
GEN or1k-softmmu/hmp-commands.h
GEN xtensaeb-softmmu/hmp-commands.h
GEN sh4-softmmu/hmp-commands.h
GEN lm32-softmmu/hmp-commands-info.h
GEN s390x-linux-user/config-target.h
CC ppc64-linux-user/tcg/tcg.o
CC mips64el-linux-user/linux-user/uname.o
CC alpha-linux-user/tcg/tcg.o
CC sh4-linux-user/tcg/tcg.o
GEN lm32-softmmu/config-target.h
CC ppc64le-linux-user/tcg/tcg-op.o
CC m68k-linux-user/tcg/tcg.o
CC microblazeel-linux-user/tcg/tcg.o
GEN xtensa-softmmu/hmp-commands.h
CC alpha-linux-user/tcg/tcg-op.o
GEN s390x-softmmu/hmp-commands.h
CC x86_64-linux-user/tcg/optimize.o
GEN s390x-linux-user/gen-features.h
CC sparc-linux-user/tcg/tcg.o
CC lm32-softmmu/exec.o
CC mips-linux-user/tcg/tcg.o
GEN mips64-softmmu/hmp-commands.h
CC m68k-softmmu/tcg/tcg.o
GEN microblazeel-softmmu/hmp-commands.h
GEN nios2-softmmu/hmp-commands.h
GEN cris-softmmu/hmp-commands-info.h
GEN or1k-softmmu/hmp-commands-info.h
CC hppa-linux-user/tcg/tcg.o
CC s390x-linux-user/exec.o
GEN sh4-softmmu/hmp-commands-info.h
GEN nios2-softmmu/hmp-commands-info.h
GEN arm-softmmu/hmp-commands.h
CC alpha-linux-user/tcg/optimize.o
GEN unicore32-softmmu/hmp-commands-info.h
GEN cris-softmmu/config-target.h
GEN xtensaeb-softmmu/hmp-commands-info.h
CC hppa-linux-user/tcg/tcg-op.o
GEN microblaze-softmmu/hmp-commands.h
CC mipsel-linux-user/tcg/tcg.o
GEN sh4eb-softmmu/hmp-commands.h
GEN s390x-softmmu/hmp-commands-info.h
CC ppc-linux-user/tcg/tcg.o
CC s390x-linux-user/tcg/tcg.o
GEN mips64-softmmu/hmp-commands-info.h
CC cris-softmmu/exec.o
GEN unicore32-softmmu/config-target.h
GEN xtensaeb-softmmu/config-target.h
CC ppc-linux-user/tcg/tcg-op.o
CC or1k-linux-user/tcg/tcg.o
GEN microblaze-softmmu/hmp-commands-info.h
GEN tricore-softmmu/hmp-commands.h
CC unicore32-softmmu/exec.o
CC sparc32plus-linux-user/tcg/tcg-op.o
GEN or1k-softmmu/config-target.h
CC m68k-linux-user/tcg/tcg-op.o
GEN alpha-softmmu/hmp-commands.h
CC mipsn32el-linux-user/tcg/tcg.o
CC m68k-linux-user/tcg/optimize.o
CC s390x-softmmu/gen-features
GEN ppc-softmmu/hmp-commands.h
GEN xtensa-softmmu/hmp-commands-info.h
GEN sh4-softmmu/config-target.h
CC cris-linux-user/tcg/tcg.o
CC microblaze-linux-user/tcg/tcg.o
GEN nios2-softmmu/config-target.h
CC mipsn32-linux-user/tcg/tcg.o
GEN arm-softmmu/hmp-commands-info.h
CC xtensaeb-softmmu/exec.o
CC microblaze-linux-user/tcg/tcg-op.o
GEN mips64-softmmu/config-target.h
CC i386-linux-user/tcg/tcg.o
GEN sparc-softmmu/hmp-commands.h
GEN mips64el-softmmu/hmp-commands.h
CC sh4-softmmu/exec.o
CC tilegx-linux-user/tcg/tcg.o
GEN sh4eb-softmmu/hmp-commands-info.h
CC cris-linux-user/tcg/tcg-op.o
CC or1k-softmmu/exec.o
GEN arm-softmmu/config-target.h
GEN i386-softmmu/hmp-commands.h
CC mipsn32-linux-user/tcg/tcg-op.o
GEN microblazeel-softmmu/hmp-commands-info.h
CC nios2-softmmu/exec.o
CC aarch64-linux-user/tcg/tcg-op.o
CC xtensaeb-softmmu/tcg/tcg.o
CC mipsn32-linux-user/tcg/optimize.o
CC mips64-softmmu/exec.o
GEN microblaze-softmmu/config-target.h
CC sh4-linux-user/tcg/tcg-op.o
CC sh4eb-linux-user/tcg/tcg.o
GEN mips-softmmu/hmp-commands.h
GEN mipsel-softmmu/hmp-commands.h
CC or1k-linux-user/tcg/tcg-op.o
CC hppa-linux-user/tcg/optimize.o
GEN xtensa-softmmu/config-target.h
GEN microblazeel-softmmu/config-target.h
GEN ppcemb-softmmu/hmp-commands.h
CC lm32-softmmu/tcg/tcg.o
GEN i386-softmmu/hmp-commands-info.h
CC arm-softmmu/exec.o
GEN alpha-softmmu/hmp-commands-info.h
GEN ppc-softmmu/hmp-commands-info.h
CC microblazeel-softmmu/exec.o
GEN sh4eb-softmmu/config-target.h
CC nios2-linux-user/tcg/tcg.o
CC microblaze-softmmu/exec.o
GEN s390x-softmmu/config-target.h
GEN tricore-softmmu/hmp-commands-info.h
CC xtensa-softmmu/exec.o
CC ppc64abi32-linux-user/tcg/tcg.o
CC x86_64-linux-user/tcg/tcg-common.o
GEN mips64el-softmmu/hmp-commands-info.h
GEN sparc-softmmu/hmp-commands-info.h
GEN s390x-softmmu/gen-features.h
CC sh4eb-softmmu/exec.o
GEN ppc64-softmmu/hmp-commands.h
GEN ppc-softmmu/config-target.h
GEN mips-softmmu/hmp-commands-info.h
GEN sparc-softmmu/config-target.h
GEN tricore-softmmu/config-target.h
CC s390x-softmmu/exec.o
GEN i386-softmmu/config-target.h
CC sparc-softmmu/exec.o
GEN alpha-softmmu/config-target.h
CC sh4eb-linux-user/tcg/tcg-op.o
GEN mips-softmmu/config-target.h
CC ppc-softmmu/exec.o
GEN ppcemb-softmmu/hmp-commands-info.h
GEN mipsel-softmmu/hmp-commands-info.h
GEN mips64el-softmmu/config-target.h
CC microblaze-softmmu/tcg/tcg.o
CC sh4eb-softmmu/tcg/tcg.o
CC tricore-softmmu/exec.o
CC i386-softmmu/exec.o
CC alpha-softmmu/exec.o
GEN mipsel-softmmu/config-target.h
GEN ppcemb-softmmu/config-target.h
CC mips-softmmu/exec.o
GEN ppc64-softmmu/hmp-commands-info.h
CC mips64el-softmmu/exec.o
GEN ppc64-softmmu/config-target.h
CC mipsel-softmmu/exec.o
CC mipsel-softmmu/tcg/tcg.o
CC ppcemb-softmmu/exec.o
GEN aarch64-softmmu/hmp-commands.h
CC microblazeel-softmmu/tcg/tcg.o
CC ppc64-softmmu/exec.o
GEN sparc64-softmmu/hmp-commands.h
GEN aarch64-softmmu/hmp-commands-info.h
CC sh4-softmmu/tcg/tcg.o
CC sh4eb-linux-user/tcg/optimize.o
GEN x86_64-softmmu/hmp-commands.h
GEN aarch64-softmmu/config-target.h
CC s390x-softmmu/tcg/tcg.o
CC aarch64-softmmu/exec.o
CC s390x-softmmu/tcg/tcg-op.o
CC nios2-softmmu/tcg/tcg.o
GEN sparc64-softmmu/hmp-commands-info.h
CC hppa-linux-user/tcg/tcg-common.o
GEN x86_64-softmmu/hmp-commands-info.h
CC m68k-linux-user/tcg/tcg-common.o
GEN sparc64-softmmu/config-target.h
CC sparc64-softmmu/exec.o
GEN x86_64-softmmu/config-target.h
CC x86_64-softmmu/exec.o
CC x86_64-softmmu/tcg/tcg.o
CC mips-softmmu/tcg/tcg.o
CC armeb-linux-user/accel/tcg/translator.o
CC cris-linux-user/tcg/optimize.o
CC sh4eb-linux-user/tcg/tcg-common.o
CC ppcemb-softmmu/tcg/tcg.o
CC nios2-linux-user/tcg/tcg-op.o
CC tilegx-linux-user/tcg/tcg-op.o
CC ppc-softmmu/tcg/tcg.o
CC ppc64abi32-linux-user/tcg/tcg-op.o
CC nios2-softmmu/tcg/tcg-op.o
CC m68k-softmmu/tcg/tcg-op.o
CC m68k-linux-user/fpu/softfloat.o
CC microblaze-linux-user/tcg/optimize.o
CC aarch64-softmmu/tcg/tcg.o
CC ppc-softmmu/tcg/tcg-op.o
CC mips64-softmmu/tcg/tcg.o
CC unicore32-softmmu/tcg/tcg.o
CC sparc-linux-user/tcg/tcg-op.o
CC sh4-softmmu/tcg/tcg-op.o
CC microblaze-linux-user/tcg/tcg-common.o
CC or1k-softmmu/tcg/tcg.o
CC ppc-softmmu/tcg/optimize.o
CC xtensaeb-softmmu/tcg/tcg-op.o
CC xtensa-softmmu/tcg/tcg.o
CC s390x-linux-user/tcg/tcg-op.o
CC x86_64-linux-user/fpu/softfloat.o
CC mips-linux-user/tcg/tcg-op.o
CC lm32-softmmu/tcg/tcg-op.o
CC sparc32plus-linux-user/tcg/optimize.o
CC cris-softmmu/tcg/tcg.o
CC microblazeel-linux-user/tcg/tcg-op.o
CC microblaze-linux-user/fpu/softfloat.o
CC sh4-linux-user/tcg/optimize.o
CC alpha-linux-user/tcg/tcg-common.o
CC mips64-linux-user/tcg/optimize.o
CC arm-linux-user/tcg/tcg-op.o
CC arm-softmmu/tcg/tcg.o
CC sparc-softmmu/tcg/tcg.o
CC i386-linux-user/tcg/tcg-op.o
CC mipsel-linux-user/tcg/tcg-op.o
CC mipsel-softmmu/tcg/tcg-op.o
CC mipsn32el-linux-user/tcg/tcg-op.o
CC sparc32plus-linux-user/tcg/tcg-common.o
CC microblazeel-softmmu/tcg/tcg-op.o
CC sparc64-softmmu/tcg/tcg.o
CC hppa-linux-user/fpu/softfloat.o
CC xtensa-softmmu/tcg/tcg-op.o
CC lm32-softmmu/tcg/optimize.o
CC or1k-softmmu/tcg/tcg-op.o
CC alpha-softmmu/tcg/tcg.o
CC mips64-linux-user/tcg/tcg-common.o
CC sh4eb-softmmu/tcg/tcg-op.o
CC sparc32plus-linux-user/fpu/softfloat.o
CC alpha-linux-user/fpu/softfloat.o
CC aarch64-linux-user/tcg/optimize.o
CC ppc64le-linux-user/tcg/optimize.o
CC sparc64-linux-user/tcg/tcg-op.o
CC or1k-linux-user/tcg/optimize.o
CC xtensaeb-softmmu/tcg/optimize.o
CC mipsel-linux-user/tcg/optimize.o
CC cris-linux-user/tcg/tcg-common.o
CC m68k-softmmu/tcg/optimize.o
CC arm-softmmu/tcg/tcg-op.o
CC hppa-linux-user/disas.o
CC tricore-softmmu/tcg/tcg.o
CC ppc64-linux-user/tcg/tcg-op.o
CC tilegx-linux-user/tcg/optimize.o
CC hppa-linux-user/gdbstub.o
CC mipsel-linux-user/tcg/tcg-common.o
CC mips64-linux-user/fpu/softfloat.o
CC cris-linux-user/fpu/softfloat.o
CC sh4eb-linux-user/fpu/softfloat.o
CC s390x-softmmu/tcg/optimize.o
CC i386-softmmu/tcg/tcg.o
CC microblaze-softmmu/tcg/tcg-op.o
CC armeb-linux-user/accel/tcg/user-exec.o
CC ppcemb-softmmu/tcg/tcg-op.o
CC mipsn32-linux-user/tcg/tcg-common.o
CC mips-softmmu/tcg/tcg-op.o
CC sparc-linux-user/tcg/optimize.o
CC moxie-softmmu/tcg/tcg.o
CC ppc-linux-user/tcg/optimize.o
CC tilegx-linux-user/tcg/tcg-common.o
CC sh4-linux-user/tcg/tcg-common.o
CC hppa-linux-user/thunk.o
CC alpha-linux-user/disas.o
CC mipsn32el-linux-user/tcg/optimize.o
CC s390x-linux-user/tcg/optimize.o
CC i386-softmmu/tcg/tcg-op.o
CC microblaze-linux-user/disas.o
CC i386-linux-user/tcg/optimize.o
CC mipsn32-linux-user/fpu/softfloat.o
CC alpha-softmmu/tcg/tcg-op.o
CC i386-linux-user/tcg/tcg-common.o
CC ppc-linux-user/tcg/tcg-common.o
CC sparc64-linux-user/tcg/optimize.o
CC sh4-softmmu/tcg/optimize.o
CC mips64el-softmmu/tcg/tcg.o
CC sparc-softmmu/tcg/tcg-op.o
CC m68k-linux-user/disas.o
CC ppc-softmmu/tcg/tcg-common.o
CC sh4-softmmu/tcg/tcg-common.o
CC microblazeel-linux-user/tcg/optimize.o
CC sh4-linux-user/fpu/softfloat.o
CC tilegx-linux-user/fpu/softfloat.o
CC lm32-softmmu/tcg/tcg-common.o
CC mipsn32-linux-user/disas.o
CC arm-softmmu/tcg/optimize.o
CC or1k-linux-user/tcg/tcg-common.o
CC ppcemb-softmmu/tcg/optimize.o
CC i386-softmmu/tcg/optimize.o
CC microblazeel-linux-user/tcg/tcg-common.o
CC aarch64-linux-user/tcg/tcg-common.o
CC sh4eb-linux-user/disas.o
CCAS mips64el-linux-user/linux-user/safe-syscall.o
CC ppc64-softmmu/tcg/tcg.o
CC sparc64-linux-user/tcg/tcg-common.o
CC moxie-softmmu/tcg/tcg-op.o
CC ppc64-linux-user/tcg/optimize.o
CC tilegx-linux-user/disas.o
CC armeb-linux-user/accel/tcg/user-exec-stub.o
CC sparc64-linux-user/fpu/softfloat.o
CC nios2-linux-user/tcg/optimize.o
CC mips64el-softmmu/tcg/tcg-op.o
CC nios2-softmmu/tcg/optimize.o
CC unicore32-softmmu/tcg/tcg-op.o
CC x86_64-softmmu/tcg/tcg-op.o
CC moxie-softmmu/tcg/optimize.o
CC cris-linux-user/disas.o
CC mipsn32-linux-user/gdbstub.o
CC cris-linux-user/gdbstub.o
CC mips-linux-user/tcg/optimize.o
CC mips64el-linux-user/target/mips/translate.o
CC or1k-linux-user/fpu/softfloat.o
CC armeb-linux-user/linux-user/main.o
CC mipsel-softmmu/tcg/optimize.o
CC s390x-softmmu/tcg/tcg-common.o
CC x86_64-softmmu/tcg/optimize.o
CC sparc64-softmmu/tcg/tcg-op.o
CC lm32-softmmu/fpu/softfloat.o
CC mips-softmmu/tcg/optimize.o
CC sh4eb-linux-user/gdbstub.o
CC sparc64-linux-user/disas.o
CC s390x-softmmu/fpu/softfloat.o
CC ppc64abi32-linux-user/tcg/optimize.o
CC ppc64le-linux-user/tcg/tcg-common.o
CC sparc64-linux-user/gdbstub.o
CC mipsn32el-linux-user/tcg/tcg-common.o
CC m68k-softmmu/tcg/tcg-common.o
CC m68k-softmmu/fpu/softfloat.o
CC aarch64-linux-user/fpu/softfloat.o
CC mips64el-softmmu/tcg/optimize.o
CC sh4eb-linux-user/thunk.o
CC sparc64-softmmu/tcg/optimize.o
CC mips64-softmmu/tcg/tcg-op.o
CC microblaze-softmmu/tcg/optimize.o
CC sparc64-linux-user/thunk.o
CC ppc64le-linux-user/fpu/softfloat.o
CC sh4eb-linux-user/accel/stubs/hax-stub.o
CC nios2-linux-user/tcg/tcg-common.o
CC sparc-linux-user/tcg/tcg-common.o
CC i386-linux-user/fpu/softfloat.o
CC aarch64-softmmu/tcg/tcg-op.o
CC x86_64-softmmu/tcg/tcg-common.o
CC mips-linux-user/tcg/tcg-common.o
CC arm-linux-user/tcg/optimize.o
CC i386-softmmu/tcg/tcg-common.o
CC ppc-linux-user/fpu/softfloat.o
CC ppc-linux-user/disas.o
CC nios2-linux-user/fpu/softfloat.o
CC sparc64-softmmu/tcg/tcg-common.o
CC sparc-linux-user/fpu/softfloat.o
CC mipsel-linux-user/fpu/softfloat.o
CC mipsel-softmmu/tcg/tcg-common.o
CC x86_64-linux-user/disas.o
CC armeb-linux-user/linux-user/syscall.o
CC or1k-linux-user/disas.o
CC sh4-softmmu/fpu/softfloat.o
CC sparc64-linux-user/accel/stubs/hax-stub.o
CC arm-linux-user/tcg/tcg-common.o
CC mips64-linux-user/disas.o
CC cris-linux-user/thunk.o
CC mips64el-linux-user/target/mips/dsp_helper.o
CC ppcemb-softmmu/tcg/tcg-common.o
CC s390x-linux-user/tcg/tcg-common.o
CC mips64el-linux-user/target/mips/op_helper.o
CC alpha-softmmu/tcg/optimize.o
CC microblaze-linux-user/gdbstub.o
CC nios2-softmmu/tcg/tcg-common.o
CC ppc64-linux-user/tcg/tcg-common.o
CC ppc64le-linux-user/disas.o
CC or1k-softmmu/tcg/optimize.o
CC sh4eb-softmmu/tcg/optimize.o
CC sh4-linux-user/disas.o
CC lm32-softmmu/disas.o
GEN x86_64-linux-user/gdbstub-xml.c
CC arm-softmmu/tcg/tcg-common.o
CC sh4-softmmu/disas.o
CC ppc-softmmu/fpu/softfloat.o
CC xtensaeb-softmmu/tcg/tcg-common.o
CC microblazeel-linux-user/fpu/softfloat.o
CC sparc-linux-user/disas.o
CC mips64-linux-user/gdbstub.o
CC mips64el-linux-user/target/mips/lmi_helper.o
CC xtensaeb-softmmu/fpu/softfloat.o
CC sh4-linux-user/gdbstub.o
CC lm32-softmmu/arch_init.o
CC arm-linux-user/fpu/softfloat.o
CC m68k-softmmu/disas.o
CC hppa-linux-user/accel/stubs/hax-stub.o
CC i386-softmmu/fpu/softfloat.o
GEN m68k-linux-user/gdbstub-xml.c
CC sparc-linux-user/gdbstub.o
CC sparc-softmmu/tcg/optimize.o
CC nios2-linux-user/disas.o
CC sparc-softmmu/tcg/tcg-common.o
CC xtensa-softmmu/tcg/optimize.o
CC nios2-softmmu/fpu/softfloat.o
CC sparc64-linux-user/accel/stubs/kvm-stub.o
CC xtensa-softmmu/tcg/tcg-common.o
CC m68k-linux-user/gdbstub.o
CC cris-linux-user/accel/stubs/hax-stub.o
CC sparc64-softmmu/fpu/softfloat.o
CC mipsn32el-linux-user/fpu/softfloat.o
CC tricore-softmmu/tcg/tcg-op.o
CC lm32-softmmu/cpus.o
CC s390x-linux-user/fpu/softfloat.o
CC alpha-softmmu/tcg/tcg-common.o
CC mipsn32-linux-user/thunk.o
GEN ppc-linux-user/gdbstub-xml.c
CC ppc-softmmu/disas.o
CC nios2-softmmu/disas.o
CC sparc64-softmmu/disas.o
CC unicore32-softmmu/tcg/optimize.o
CC microblazeel-softmmu/tcg/optimize.o
CC unicore32-softmmu/tcg/tcg-common.o
CC mipsel-softmmu/fpu/softfloat.o
CC mipsel-linux-user/disas.o
CC sh4-linux-user/thunk.o
CC arm-linux-user/disas.o
CC mips-softmmu/tcg/tcg-common.o
CC mipsel-softmmu/disas.o
CC mips-softmmu/fpu/softfloat.o
CC alpha-linux-user/gdbstub.o
CC mipsn32el-linux-user/disas.o
CC mipsn32el-linux-user/gdbstub.o
CC or1k-linux-user/gdbstub.o
CC ppc64abi32-linux-user/tcg/tcg-common.o
CC armeb-linux-user/linux-user/strace.o
GEN ppc64le-linux-user/gdbstub-xml.c
CC hppa-linux-user/accel/stubs/kvm-stub.o
GEN arm-linux-user/gdbstub-xml.c
GEN ppc-softmmu/gdbstub-xml.c
CC or1k-softmmu/tcg/tcg-common.o
CC alpha-softmmu/fpu/softfloat.o
CC arm-linux-user/gdbstub.o
CC or1k-softmmu/fpu/softfloat.o
CC armeb-linux-user/linux-user/mmap.o
CC sh4eb-softmmu/tcg/tcg-common.o
CC m68k-linux-user/thunk.o
CC mipsn32-linux-user/accel/stubs/hax-stub.o
CC sh4-softmmu/arch_init.o
CC m68k-linux-user/accel/stubs/hax-stub.o
CC ppc64abi32-linux-user/fpu/softfloat.o
CC s390x-linux-user/disas.o
CC hppa-linux-user/accel/tcg/tcg-runtime.o
CC mips64-softmmu/tcg/optimize.o
CC mips-linux-user/fpu/softfloat.o
CC mips-linux-user/disas.o
CC nios2-softmmu/arch_init.o
CC ppc-softmmu/arch_init.o
CC mipsel-linux-user/gdbstub.o
CC m68k-linux-user/accel/stubs/kvm-stub.o
CC mips64-softmmu/tcg/tcg-common.o
CC s390x-softmmu/disas.o
CC xtensaeb-softmmu/disas.o
CC ppc64-linux-user/fpu/softfloat.o
CC aarch64-softmmu/tcg/optimize.o
CC mips64el-linux-user/target/mips/helper.o
CC m68k-linux-user/accel/tcg/tcg-runtime.o
CC sparc32plus-linux-user/disas.o
CC or1k-linux-user/thunk.o
CC microblaze-softmmu/tcg/tcg-common.o
CC ppc64abi32-linux-user/disas.o
CC mips-softmmu/disas.o
CC alpha-softmmu/disas.o
CC mips64el-softmmu/tcg/tcg-common.o
CC or1k-linux-user/accel/stubs/hax-stub.o
CC mips-linux-user/gdbstub.o
CC sh4eb-softmmu/fpu/softfloat.o
CC ppc-softmmu/cpus.o
CC cris-softmmu/tcg/tcg-op.o
CC m68k-linux-user/accel/tcg/cpu-exec.o
CC mips64el-linux-user/target/mips/cpu.o
CC microblazeel-linux-user/disas.o
CC x86_64-linux-user/gdbstub.o
CC arm-softmmu/fpu/softfloat.o
CC sparc-softmmu/fpu/softfloat.o
GEN ppc64abi32-linux-user/gdbstub-xml.c
CC alpha-softmmu/arch_init.o
CC microblazeel-softmmu/tcg/tcg-common.o
CC mips-linux-user/thunk.o
GEN s390x-softmmu/gdbstub-xml.c
CC sparc32plus-linux-user/gdbstub.o
CC ppc64abi32-linux-user/gdbstub.o
CC alpha-softmmu/cpus.o
CC mips64-linux-user/thunk.o
CC hppa-linux-user/accel/tcg/cpu-exec.o
CC ppc64-softmmu/tcg/tcg-op.o
CC unicore32-softmmu/fpu/softfloat.o
CC microblazeel-linux-user/gdbstub.o
CC tricore-softmmu/tcg/optimize.o
CC microblaze-softmmu/fpu/softfloat.o
CC alpha-softmmu/monitor.o
CC aarch64-linux-user/disas.o
CC m68k-linux-user/accel/tcg/cpu-exec-common.o
CC xtensaeb-softmmu/arch_init.o
CC alpha-linux-user/thunk.o
CC hppa-linux-user/accel/tcg/cpu-exec-common.o
CC microblazeel-softmmu/fpu/softfloat.o
CC nios2-linux-user/gdbstub.o
CC ppc-linux-user/gdbstub.o
CC unicore32-softmmu/disas.o
CC tricore-softmmu/tcg/tcg-common.o
CC sh4eb-linux-user/accel/stubs/kvm-stub.o
CC sparc-softmmu/disas.o
CC sh4-linux-user/accel/stubs/hax-stub.o
CC xtensa-softmmu/fpu/softfloat.o
CC ppc64-linux-user/disas.o
CC x86_64-linux-user/thunk.o
CC ppc64le-linux-user/gdbstub.o
CC x86_64-linux-user/accel/stubs/hax-stub.o
CC m68k-linux-user/accel/tcg/translate-all.o
CC unicore32-softmmu/arch_init.o
CC ppcemb-softmmu/fpu/softfloat.o
GEN ppc64-linux-user/gdbstub-xml.c
CC mips-linux-user/accel/stubs/hax-stub.o
CC s390x-softmmu/arch_init.o
CC x86_64-softmmu/fpu/softfloat.o
CC sparc32plus-linux-user/thunk.o
CC microblaze-softmmu/disas.o
CC mips-softmmu/arch_init.o
CC aarch64-softmmu/tcg/tcg-common.o
CC ppc-linux-user/thunk.o
CC x86_64-softmmu/disas.o
CC ppc-linux-user/accel/stubs/hax-stub.o
CC moxie-softmmu/tcg/tcg-common.o
CC microblaze-linux-user/thunk.o
CC mips-linux-user/accel/stubs/kvm-stub.o
CC nios2-linux-user/thunk.o
CC sparc64-linux-user/accel/tcg/tcg-runtime.o
CC alpha-linux-user/accel/stubs/hax-stub.o
CC unicore32-softmmu/cpus.o
CC tilegx-linux-user/gdbstub.o
CC lm32-softmmu/monitor.o
CC mipsel-softmmu/arch_init.o
CC mips64-linux-user/accel/stubs/hax-stub.o
CC mipsn32-linux-user/accel/stubs/kvm-stub.o
CC sh4eb-linux-user/accel/tcg/tcg-runtime.o
CC cris-softmmu/tcg/optimize.o
CC hppa-linux-user/accel/tcg/translate-all.o
CC ppc64abi32-linux-user/thunk.o
CC mips-softmmu/cpus.o
GEN aarch64-linux-user/gdbstub-xml.c
CC ppc64le-linux-user/thunk.o
CC ppc64le-linux-user/accel/stubs/hax-stub.o
CC cris-linux-user/accel/stubs/kvm-stub.o
CC or1k-linux-user/accel/stubs/kvm-stub.o
CC sh4eb-linux-user/accel/tcg/cpu-exec.o
CC cris-linux-user/accel/tcg/tcg-runtime.o
GEN x86_64-softmmu/gdbstub-xml.c
CC cris-softmmu/tcg/tcg-common.o
CC alpha-softmmu/gdbstub.o
CC microblaze-linux-user/accel/stubs/hax-stub.o
CC ppcemb-softmmu/disas.o
CC moxie-softmmu/fpu/softfloat.o
CC microblaze-linux-user/accel/stubs/kvm-stub.o
CC alpha-linux-user/accel/stubs/kvm-stub.o
CC unicore32-softmmu/monitor.o
CC mipsn32el-linux-user/thunk.o
CC xtensa-softmmu/disas.o
CC arm-softmmu/disas.o
CC sparc32plus-linux-user/accel/stubs/hax-stub.o
CC sparc64-softmmu/arch_init.o
CC x86_64-linux-user/accel/stubs/kvm-stub.o
CC aarch64-linux-user/gdbstub.o
CC xtensaeb-softmmu/cpus.o
CC lm32-softmmu/gdbstub.o
CC alpha-softmmu/balloon.o
CC armeb-linux-user/linux-user/signal.o
CC x86_64-linux-user/accel/tcg/tcg-runtime.o
CC mipsel-linux-user/thunk.o
CC microblaze-softmmu/arch_init.o
CC mipsn32el-linux-user/accel/stubs/hax-stub.o
CC sh4-linux-user/accel/stubs/kvm-stub.o
CC sh4-softmmu/cpus.o
CC nios2-softmmu/cpus.o
CC mips64-softmmu/fpu/softfloat.o
CC hppa-linux-user/accel/tcg/translator.o
CC mips64-linux-user/accel/stubs/kvm-stub.o
CC i386-linux-user/disas.o
CC mipsn32el-linux-user/accel/stubs/kvm-stub.o
CC ppc64abi32-linux-user/accel/stubs/hax-stub.o
CC unicore32-softmmu/gdbstub.o
CC cris-softmmu/fpu/softfloat.o
CC arm-linux-user/thunk.o
CC arm-linux-user/accel/stubs/hax-stub.o
CC sh4-linux-user/accel/tcg/tcg-runtime.o
CC m68k-linux-user/accel/tcg/translator.o
CC microblaze-linux-user/accel/tcg/tcg-runtime.o
CC alpha-linux-user/accel/tcg/tcg-runtime.o
CC alpha-linux-user/accel/tcg/cpu-exec.o
CC mipsel-linux-user/accel/stubs/hax-stub.o
CC cris-softmmu/disas.o
CC cris-linux-user/accel/tcg/cpu-exec.o
CC ppc64abi32-linux-user/accel/stubs/kvm-stub.o
CC mipsel-softmmu/cpus.o
CC sparc32plus-linux-user/accel/stubs/kvm-stub.o
CC x86_64-linux-user/accel/tcg/cpu-exec.o
CC mipsn32-linux-user/accel/tcg/tcg-runtime.o
CC mips64el-softmmu/fpu/softfloat.o
CC ppc64-linux-user/gdbstub.o
CC lm32-softmmu/balloon.o
CC mips-linux-user/accel/tcg/tcg-runtime.o
CC sh4eb-linux-user/accel/tcg/cpu-exec-common.o
CC alpha-softmmu/ioport.o
CC x86_64-linux-user/accel/tcg/cpu-exec-common.o
CC ppc-linux-user/accel/stubs/kvm-stub.o
CC mips64-linux-user/accel/tcg/tcg-runtime.o
CC microblazeel-softmmu/disas.o
CC ppc-linux-user/accel/tcg/tcg-runtime.o
CC aarch64-softmmu/fpu/softfloat.o
CC unicore32-softmmu/balloon.o
CC sh4eb-softmmu/disas.o
CC mips64-linux-user/accel/tcg/cpu-exec.o
GEN arm-softmmu/gdbstub-xml.c
CC ppc-linux-user/accel/tcg/cpu-exec.o
CC or1k-softmmu/disas.o
CC ppc64le-linux-user/accel/stubs/kvm-stub.o
CC or1k-softmmu/arch_init.o
CC mips-linux-user/accel/tcg/cpu-exec.o
CC sh4eb-linux-user/accel/tcg/translate-all.o
CC i386-softmmu/disas.o
CC arm-linux-user/accel/stubs/kvm-stub.o
CC sh4eb-linux-user/accel/tcg/translator.o
GEN ppcemb-softmmu/gdbstub-xml.c
CC xtensaeb-softmmu/monitor.o
CC ppc64-softmmu/tcg/optimize.o
CC hppa-linux-user/accel/tcg/user-exec.o
CC sparc64-linux-user/accel/tcg/cpu-exec.o
GEN i386-linux-user/gdbstub-xml.c
CC s390x-softmmu/cpus.o
CC microblaze-linux-user/accel/tcg/cpu-exec.o
GEN m68k-softmmu/gdbstub-xml.c
CC i386-linux-user/gdbstub.o
CC arm-linux-user/accel/tcg/tcg-runtime.o
CC sparc32plus-linux-user/accel/tcg/tcg-runtime.o
CC tilegx-linux-user/thunk.o
CC arm-softmmu/arch_init.o
CC mipsel-linux-user/accel/stubs/kvm-stub.o
CC m68k-linux-user/accel/tcg/user-exec.o
CC ppc64-softmmu/tcg/tcg-common.o
CC nios2-linux-user/accel/stubs/hax-stub.o
CC x86_64-linux-user/accel/tcg/translate-all.o
CC sparc32plus-linux-user/accel/tcg/cpu-exec.o
CC mips64el-linux-user/target/mips/gdbstub.o
CC unicore32-softmmu/ioport.o
CC mips-linux-user/accel/tcg/cpu-exec-common.o
CC i386-linux-user/thunk.o
GEN i386-softmmu/gdbstub-xml.c
CC microblazeel-linux-user/thunk.o
CC cris-softmmu/arch_init.o
CC sh4-linux-user/accel/tcg/cpu-exec.o
CC lm32-softmmu/ioport.o
CC mipsel-softmmu/monitor.o
CC ppc64le-linux-user/accel/tcg/tcg-runtime.o
CC mips64-softmmu/disas.o
CC ppc64-linux-user/thunk.o
CC nios2-linux-user/accel/stubs/kvm-stub.o
CC ppc-softmmu/monitor.o
CC alpha-linux-user/accel/tcg/cpu-exec-common.o
CC sparc64-softmmu/cpus.o
CC ppc-softmmu/gdbstub.o
CC mips-linux-user/accel/tcg/translate-all.o
CC microblaze-softmmu/cpus.o
CC i386-softmmu/arch_init.o
CC ppc-softmmu/balloon.o
CC mipsn32-linux-user/accel/tcg/cpu-exec.o
CC sh4eb-softmmu/arch_init.o
CC xtensaeb-softmmu/gdbstub.o
CC arm-softmmu/cpus.o
CC mipsn32-linux-user/accel/tcg/cpu-exec-common.o
CC ppc64le-linux-user/accel/tcg/cpu-exec.o
CC m68k-linux-user/accel/tcg/user-exec-stub.o
CC nios2-softmmu/monitor.o
CC aarch64-linux-user/thunk.o
CC sh4eb-linux-user/accel/tcg/user-exec.o
CC cris-linux-user/accel/tcg/cpu-exec-common.o
CC armeb-linux-user/linux-user/elfload.o
CC mipsel-softmmu/gdbstub.o
CC sparc-linux-user/thunk.o
CC mips64-linux-user/accel/tcg/cpu-exec-common.o
CC microblaze-linux-user/accel/tcg/cpu-exec-common.o
CC m68k-linux-user/linux-user/main.o
CC microblaze-linux-user/accel/tcg/translate-all.o
CC tilegx-linux-user/accel/stubs/hax-stub.o
CC xtensa-softmmu/arch_init.o
CC sh4eb-softmmu/cpus.o
CC alpha-linux-user/accel/tcg/translate-all.o
CC sparc-linux-user/accel/stubs/hax-stub.o
CC sparc-linux-user/accel/stubs/kvm-stub.o
CC sparc64-softmmu/monitor.o
CC microblazeel-linux-user/accel/stubs/hax-stub.o
CC moxie-softmmu/disas.o
CC ppc64-linux-user/accel/stubs/hax-stub.o
CC sparc32plus-linux-user/accel/tcg/cpu-exec-common.o
CC sparc64-linux-user/accel/tcg/cpu-exec-common.o
CC nios2-softmmu/gdbstub.o
CC aarch64-softmmu/disas.o
CC arm-linux-user/accel/tcg/cpu-exec.o
CC sparc-softmmu/arch_init.o
CC sparc64-linux-user/accel/tcg/translate-all.o
CC cris-linux-user/accel/tcg/translate-all.o
CC ppc64-softmmu/fpu/softfloat.o
CC ppcemb-softmmu/arch_init.o
CC sparc-softmmu/cpus.o
CC tilegx-linux-user/accel/stubs/kvm-stub.o
CC or1k-linux-user/accel/tcg/tcg-runtime.o
CC sh4-linux-user/accel/tcg/cpu-exec-common.o
CC mips64-linux-user/accel/tcg/translate-all.o
CC ppc64abi32-linux-user/accel/tcg/tcg-runtime.o
CC sh4-linux-user/accel/tcg/translate-all.o
CC xtensaeb-softmmu/balloon.o
CC tricore-softmmu/fpu/softfloat.o
CC arm-linux-user/accel/tcg/cpu-exec-common.o
CC s390x-softmmu/monitor.o
CC microblaze-softmmu/monitor.o
CC sparc64-linux-user/accel/tcg/translator.o
CC sh4-softmmu/monitor.o
CC nios2-softmmu/balloon.o
CC sparc64-softmmu/gdbstub.o
CC tilegx-linux-user/accel/tcg/tcg-runtime.o
CC mipsn32-linux-user/accel/tcg/translate-all.o
CC microblazeel-linux-user/accel/stubs/kvm-stub.o
CC mips-linux-user/accel/tcg/translator.o
CC ppc-softmmu/ioport.o
CC sparc32plus-linux-user/accel/tcg/translate-all.o
CC ppc-softmmu/numa.o
CC sh4eb-linux-user/accel/tcg/user-exec-stub.o
CC alpha-softmmu/numa.o
CC mipsn32-linux-user/accel/tcg/translator.o
CC aarch64-linux-user/accel/stubs/hax-stub.o
CC xtensa-softmmu/cpus.o
CC x86_64-linux-user/accel/tcg/translator.o
CC m68k-softmmu/arch_init.o
CC moxie-softmmu/arch_init.o
CC sparc-softmmu/monitor.o
CC ppc64le-linux-user/accel/tcg/cpu-exec-common.o
CC ppc64-linux-user/accel/stubs/kvm-stub.o
CC sparc32plus-linux-user/accel/tcg/translator.o
CC sparc-linux-user/accel/tcg/tcg-runtime.o
CC hppa-linux-user/accel/tcg/user-exec-stub.o
CC alpha-linux-user/accel/tcg/translator.o
CC or1k-linux-user/accel/tcg/cpu-exec.o
CC m68k-softmmu/cpus.o
CC ppcemb-softmmu/cpus.o
CC i386-linux-user/accel/stubs/hax-stub.o
CC ppc64le-linux-user/accel/tcg/translate-all.o
GEN aarch64-softmmu/gdbstub-xml.c
CC mipsel-softmmu/balloon.o
CC m68k-linux-user/linux-user/syscall.o
CC microblazeel-linux-user/accel/tcg/tcg-runtime.o
CC unicore32-softmmu/numa.o
CC mips-linux-user/accel/tcg/user-exec.o
CC alpha-linux-user/accel/tcg/user-exec.o
CC unicore32-softmmu/qtest.o
CC mips-softmmu/monitor.o
CC nios2-linux-user/accel/tcg/tcg-runtime.o
CC aarch64-linux-user/accel/stubs/kvm-stub.o
CC moxie-softmmu/cpus.o
CC sh4eb-linux-user/linux-user/main.o
CC ppc64-softmmu/disas.o
CC mips64-softmmu/arch_init.o
CC tilegx-linux-user/accel/tcg/cpu-exec.o
CC mips-softmmu/gdbstub.o
CC lm32-softmmu/numa.o
CC ppc-linux-user/accel/tcg/cpu-exec-common.o
CC or1k-linux-user/accel/tcg/cpu-exec-common.o
CC hppa-linux-user/linux-user/main.o
CC microblaze-softmmu/gdbstub.o
CC i386-softmmu/cpus.o
CC sparc-linux-user/accel/tcg/cpu-exec.o
CC sparc32plus-linux-user/accel/tcg/user-exec.o
CC i386-linux-user/accel/stubs/kvm-stub.o
CC sparc64-linux-user/accel/tcg/user-exec.o
CC or1k-softmmu/cpus.o
CC ppc-linux-user/accel/tcg/translate-all.o
CC or1k-softmmu/monitor.o
CC lm32-softmmu/qtest.o
CC microblaze-linux-user/accel/tcg/translator.o
CC hppa-linux-user/linux-user/syscall.o
CC ppc64le-linux-user/accel/tcg/translator.o
CC alpha-softmmu/qtest.o
CC mips64-linux-user/accel/tcg/translator.o
CC m68k-softmmu/monitor.o
CC ppc-softmmu/qtest.o
CC microblazeel-linux-user/accel/tcg/cpu-exec.o
CC mips-softmmu/balloon.o
CC aarch64-linux-user/accel/tcg/tcg-runtime.o
CC mips64-softmmu/cpus.o
CC sh4-softmmu/gdbstub.o
CC xtensaeb-softmmu/ioport.o
CC mipsn32el-linux-user/accel/tcg/tcg-runtime.o
CC ppcemb-softmmu/monitor.o
CC cris-linux-user/accel/tcg/translator.o
CC sparc64-linux-user/accel/tcg/user-exec-stub.o
CC nios2-linux-user/accel/tcg/cpu-exec.o
CC or1k-linux-user/accel/tcg/translate-all.o
GEN ppc64-softmmu/gdbstub-xml.c
CC unicore32-softmmu/memory.o
CC i386-linux-user/accel/tcg/tcg-runtime.o
CC x86_64-softmmu/arch_init.o
CC i386-linux-user/accel/tcg/cpu-exec.o
CC sh4-linux-user/accel/tcg/translator.o
CC x86_64-linux-user/accel/tcg/user-exec.o
CC xtensaeb-softmmu/numa.o
CC mips64-softmmu/monitor.o
CC sh4eb-softmmu/monitor.o
CC ppcemb-softmmu/gdbstub.o
CC hppa-linux-user/linux-user/strace.o
CC sparc32plus-linux-user/accel/tcg/user-exec-stub.o
CC ppc-softmmu/memory.o
CC armeb-linux-user/linux-user/linuxload.o
CC mipsn32-linux-user/accel/tcg/user-exec.o
CC alpha-softmmu/memory.o
CC mips64el-softmmu/disas.o
CC microblaze-linux-user/accel/tcg/user-exec.o
CC mipsel-linux-user/accel/tcg/tcg-runtime.o
GEN s390x-linux-user/gdbstub-xml.c
CC tilegx-linux-user/accel/tcg/cpu-exec-common.o
CC alpha-linux-user/accel/tcg/user-exec-stub.o
CC sh4eb-linux-user/linux-user/syscall.o
CC sparc-linux-user/accel/tcg/cpu-exec-common.o
CC mips64-softmmu/gdbstub.o
CC sh4eb-linux-user/linux-user/strace.o
CC tilegx-linux-user/accel/tcg/translate-all.o
CC microblazeel-linux-user/accel/tcg/cpu-exec-common.o
CC sh4eb-linux-user/linux-user/mmap.o
CC cris-linux-user/accel/tcg/user-exec.o
CC alpha-softmmu/memory_mapping.o
CC lm32-softmmu/memory.o
CC alpha-softmmu/dump.o
CC cris-linux-user/accel/tcg/user-exec-stub.o
CC microblaze-softmmu/balloon.o
CC aarch64-linux-user/accel/tcg/cpu-exec.o
CC sparc64-softmmu/balloon.o
CC xtensaeb-softmmu/qtest.o
CC sparc32plus-linux-user/linux-user/main.o
CC xtensa-softmmu/monitor.o
CC alpha-linux-user/linux-user/main.o
CC xtensa-softmmu/gdbstub.o
CC aarch64-softmmu/arch_init.o
CC sparc-linux-user/accel/tcg/translate-all.o
CC ppcemb-softmmu/balloon.o
CC hppa-linux-user/linux-user/mmap.o
CC microblazeel-linux-user/accel/tcg/translate-all.o
CC mipsel-linux-user/accel/tcg/cpu-exec.o
CC sh4-linux-user/accel/tcg/user-exec.o
CC sparc-softmmu/gdbstub.o
CC nios2-linux-user/accel/tcg/cpu-exec-common.o
CC ppcemb-softmmu/ioport.o
CC nios2-softmmu/ioport.o
CC mips-softmmu/ioport.o
CC mips64-linux-user/accel/tcg/user-exec.o
CC sparc64-linux-user/linux-user/main.o
CC i386-linux-user/accel/tcg/cpu-exec-common.o
CC s390x-linux-user/gdbstub.o
CC aarch64-softmmu/cpus.o
CC xtensaeb-softmmu/memory.o
CC microblaze-softmmu/ioport.o
CC s390x-softmmu/gdbstub.o
CC ppc64le-linux-user/accel/tcg/user-exec.o
CC mips-linux-user/accel/tcg/user-exec-stub.o
CC aarch64-linux-user/accel/tcg/cpu-exec-common.o
CC sparc-linux-user/accel/tcg/translator.o
CC arm-softmmu/monitor.o
CC unicore32-softmmu/memory_mapping.o
CC arm-linux-user/accel/tcg/translate-all.o
CC mips64-softmmu/balloon.o
CC mipsn32el-linux-user/accel/tcg/cpu-exec.o
CC arm-linux-user/accel/tcg/translator.o
CC i386-softmmu/monitor.o
CC x86_64-softmmu/cpus.o
CC alpha-softmmu/migration/ram.o
CC ppc-linux-user/accel/tcg/translator.o
CC mips64-softmmu/ioport.o
CC i386-linux-user/accel/tcg/translate-all.o
CC hppa-linux-user/linux-user/signal.o
CC xtensa-softmmu/balloon.o
CC arm-softmmu/gdbstub.o
CC sh4eb-softmmu/gdbstub.o
CC or1k-linux-user/accel/tcg/translator.o
CC microblaze-linux-user/accel/tcg/user-exec-stub.o
CC nios2-linux-user/accel/tcg/translate-all.o
CC sparc64-linux-user/linux-user/syscall.o
CC mips64el-softmmu/arch_init.o
CC hppa-linux-user/linux-user/elfload.o
CC nios2-softmmu/numa.o
CC cris-linux-user/linux-user/main.o
CC alpha-linux-user/linux-user/syscall.o
CC alpha-softmmu/accel/accel.o
CC nios2-softmmu/qtest.o
CC armeb-linux-user/linux-user/uaccess.o
CC ppc64-linux-user/accel/tcg/tcg-runtime.o
CC ppc64le-linux-user/accel/tcg/user-exec-stub.o
CC mipsn32el-linux-user/accel/tcg/cpu-exec-common.o
CC nios2-softmmu/memory.o
CC ppc-softmmu/memory_mapping.o
CC microblaze-linux-user/linux-user/main.o
CC mips64el-softmmu/cpus.o
CC ppc-softmmu/dump.o
CC ppc-softmmu/migration/ram.o
CC s390x-linux-user/thunk.o
CC x86_64-softmmu/monitor.o
CC or1k-linux-user/accel/tcg/user-exec.o
CC sparc32plus-linux-user/linux-user/syscall.o
CC mipsel-softmmu/ioport.o
CC microblaze-softmmu/numa.o
CC mipsn32-linux-user/accel/tcg/user-exec-stub.o
CC m68k-softmmu/gdbstub.o
CC sh4-softmmu/balloon.o
CC sparc64-softmmu/ioport.o
CC mipsel-linux-user/accel/tcg/cpu-exec-common.o
CC microblazeel-softmmu/arch_init.o
CC sparc64-softmmu/numa.o
CC sh4eb-linux-user/linux-user/signal.o
CC x86_64-linux-user/accel/tcg/user-exec-stub.o
CC aarch64-linux-user/accel/tcg/translate-all.o
CC aarch64-linux-user/accel/tcg/translator.o
CC aarch64-linux-user/accel/tcg/user-exec.o
CC hppa-linux-user/linux-user/linuxload.o
CC tilegx-linux-user/accel/tcg/translator.o
CC mipsel-softmmu/numa.o
CC cris-softmmu/cpus.o
CC mipsn32el-linux-user/accel/tcg/translate-all.o
CC sparc32plus-linux-user/linux-user/strace.o
CC ppc64abi32-linux-user/accel/tcg/cpu-exec.o
CC sparc64-linux-user/linux-user/strace.o
CC alpha-linux-user/linux-user/strace.o
CC lm32-softmmu/memory_mapping.o
CC sh4-linux-user/accel/tcg/user-exec-stub.o
CC mips64el-softmmu/monitor.o
CC ppc64le-linux-user/linux-user/main.o
CC mips64-softmmu/numa.o
CC ppcemb-softmmu/numa.o
CC sparc-linux-user/accel/tcg/user-exec.o
CC mipsel-linux-user/accel/tcg/translate-all.o
CC i386-linux-user/accel/tcg/translator.o
CC i386-linux-user/accel/tcg/user-exec.o
CC mipsn32-linux-user/linux-user/main.o
CC sparc-softmmu/balloon.o
CC s390x-softmmu/balloon.o
CC microblaze-linux-user/linux-user/syscall.o
CC microblazeel-linux-user/accel/tcg/translator.o
CC mips-linux-user/linux-user/main.o
CC armeb-linux-user/linux-user/uname.o
CC arm-linux-user/accel/tcg/user-exec.o
CC ppc64-linux-user/accel/tcg/cpu-exec.o
CC lm32-softmmu/dump.o
CC x86_64-linux-user/linux-user/main.o
CC xtensa-softmmu/ioport.o
CC microblazeel-softmmu/cpus.o
CC sparc-linux-user/accel/tcg/user-exec-stub.o
CC sparc64-softmmu/qtest.o
CC tilegx-linux-user/accel/tcg/user-exec.o
CC xtensa-softmmu/numa.o
CC ppc64le-linux-user/linux-user/syscall.o
CC s390x-linux-user/accel/stubs/hax-stub.o
CC alpha-softmmu/accel/stubs/hax-stub.o
CC aarch64-linux-user/accel/tcg/user-exec-stub.o
CC sparc32plus-linux-user/linux-user/mmap.o
CC mips64-linux-user/accel/tcg/user-exec-stub.o
CC arm-linux-user/accel/tcg/user-exec-stub.o
CC ppc-linux-user/accel/tcg/user-exec.o
CC sparc-softmmu/ioport.o
CC microblazeel-softmmu/monitor.o
CC cris-linux-user/linux-user/syscall.o
CC i386-linux-user/accel/tcg/user-exec-stub.o
CC microblaze-softmmu/qtest.o
CC m68k-linux-user/linux-user/strace.o
CC sh4-linux-user/linux-user/main.o
CC ppc64abi32-linux-user/accel/tcg/cpu-exec-common.o
CC nios2-linux-user/accel/tcg/translator.o
CC arm-softmmu/balloon.o
CC sparc64-softmmu/memory.o
CC xtensa-softmmu/qtest.o
CC microblaze-linux-user/linux-user/strace.o
CC mipsel-softmmu/qtest.o
CC xtensa-softmmu/memory.o
CC microblazeel-linux-user/accel/tcg/user-exec.o
CC x86_64-softmmu/gdbstub.o
CC xtensa-softmmu/memory_mapping.o
CC ppc-softmmu/accel/accel.o
CC or1k-linux-user/accel/tcg/user-exec-stub.o
CC m68k-softmmu/balloon.o
CC s390x-linux-user/accel/stubs/kvm-stub.o
CC s390x-softmmu/ioport.o
CC sh4-softmmu/ioport.o
CC nios2-linux-user/accel/tcg/user-exec.o
CC or1k-linux-user/linux-user/main.o
CC xtensaeb-softmmu/memory_mapping.o
CC mipsn32el-linux-user/accel/tcg/translator.o
CC mips-linux-user/linux-user/syscall.o
CC cris-linux-user/linux-user/strace.o
CC mipsel-linux-user/accel/tcg/translator.o
CC or1k-linux-user/linux-user/syscall.o
CC microblazeel-softmmu/gdbstub.o
CC cris-linux-user/linux-user/mmap.o
CC ppc64abi32-linux-user/accel/tcg/translate-all.o
CC x86_64-linux-user/linux-user/syscall.o
CC mipsn32-linux-user/linux-user/syscall.o
CC cris-softmmu/monitor.o
CC ppcemb-softmmu/qtest.o
CC s390x-linux-user/accel/tcg/tcg-runtime.o
CC arm-linux-user/linux-user/main.o
CC ppc64-linux-user/accel/tcg/cpu-exec-common.o
CC arm-softmmu/ioport.o
CC moxie-softmmu/monitor.o
CC sparc-linux-user/linux-user/main.o
CC m68k-linux-user/linux-user/mmap.o
CC sh4eb-softmmu/balloon.o
CC mips64-linux-user/linux-user/main.o
CC mips-softmmu/numa.o
CC mips64el-softmmu/gdbstub.o
CC or1k-softmmu/gdbstub.o
CC cris-linux-user/linux-user/signal.o
CC tricore-softmmu/disas.o
CC microblaze-softmmu/memory.o
CC moxie-softmmu/gdbstub.o
CC moxie-softmmu/balloon.o
CC nios2-linux-user/accel/tcg/user-exec-stub.o
CC mips64el-linux-user/target/mips/msa_helper.o
CC mipsn32el-linux-user/accel/tcg/user-exec.o
CC microblaze-softmmu/memory_mapping.o
CC m68k-softmmu/ioport.o
CC microblaze-linux-user/linux-user/mmap.o
CC ppcemb-softmmu/memory.o
CC ppc64-linux-user/accel/tcg/translate-all.o
CC sparc64-linux-user/linux-user/mmap.o
CC sh4-linux-user/linux-user/syscall.o
CC mips64el-linux-user/target/mips/mips-semi.o
CC i386-softmmu/gdbstub.o
CC sparc-softmmu/numa.o
CC nios2-linux-user/linux-user/main.o
CC i386-linux-user/linux-user/main.o
CC alpha-softmmu/accel/stubs/kvm-stub.o
CC mipsel-softmmu/memory.o
CC sh4eb-linux-user/linux-user/elfload.o
CC sh4-softmmu/numa.o
CC s390x-linux-user/accel/tcg/cpu-exec.o
CC tilegx-linux-user/accel/tcg/user-exec-stub.o
CC mips64-softmmu/qtest.o
CC i386-linux-user/linux-user/syscall.o
CC s390x-softmmu/numa.o
CC ppc-softmmu/accel/kvm/kvm-all.o
CC aarch64-linux-user/linux-user/main.o
CC m68k-softmmu/numa.o
CC hppa-linux-user/linux-user/uaccess.o
CC xtensaeb-softmmu/dump.o
CC sparc-linux-user/linux-user/syscall.o
CC s390x-linux-user/accel/tcg/cpu-exec-common.o
CC sh4eb-softmmu/ioport.o
CC or1k-linux-user/linux-user/strace.o
CC tricore-softmmu/arch_init.o
CC sparc32plus-linux-user/linux-user/signal.o
CC ppcemb-softmmu/memory_mapping.o
CC unicore32-softmmu/dump.o
CC or1k-linux-user/linux-user/mmap.o
CC microblaze-linux-user/linux-user/signal.o
CC unicore32-softmmu/migration/ram.o
CC ppc-linux-user/accel/tcg/user-exec-stub.o
CC tilegx-linux-user/linux-user/main.o
CC mipsn32-linux-user/linux-user/strace.o
CC mipsel-linux-user/accel/tcg/user-exec.o
CC mips-softmmu/qtest.o
CC sparc64-linux-user/linux-user/signal.o
CC sparc-softmmu/qtest.o
CC tilegx-linux-user/linux-user/syscall.o
CC sparc64-softmmu/memory_mapping.o
CC s390x-linux-user/accel/tcg/translate-all.o
CC arm-softmmu/numa.o
CC ppc-softmmu/accel/stubs/hax-stub.o
CC microblazeel-linux-user/accel/tcg/user-exec-stub.o
CC alpha-softmmu/accel/tcg/tcg-all.o
CC nios2-linux-user/linux-user/syscall.o
CC ppc64-softmmu/arch_init.o
CC ppc64-linux-user/accel/tcg/translator.o
CC lm32-softmmu/migration/ram.o
CC mipsn32el-linux-user/accel/tcg/user-exec-stub.o
CC mips64-softmmu/memory.o
CC xtensaeb-softmmu/migration/ram.o
CC ppc-softmmu/accel/tcg/tcg-all.o
CC x86_64-softmmu/balloon.o
CC arm-linux-user/linux-user/syscall.o
CC ppc-linux-user/linux-user/main.o
CC sparc-softmmu/memory.o
CC sparc-softmmu/memory_mapping.o
CC xtensaeb-softmmu/accel/accel.o
CC ppc64abi32-linux-user/accel/tcg/translator.o
CC ppc64abi32-linux-user/accel/tcg/user-exec.o
CC xtensa-softmmu/dump.o
CC ppc64-softmmu/cpus.o
CC mips-linux-user/linux-user/strace.o
CC tricore-softmmu/cpus.o
CC mips64el-softmmu/balloon.o
CC cris-linux-user/linux-user/elfload.o
CC mipsn32-linux-user/linux-user/mmap.o
CC tricore-softmmu/monitor.o
CC sh4eb-softmmu/numa.o
CC ppc64le-linux-user/linux-user/strace.o
CC mipsel-linux-user/accel/tcg/user-exec-stub.o
CC mips64-linux-user/linux-user/syscall.o
CC m68k-softmmu/qtest.o
CC m68k-linux-user/linux-user/signal.o
CC mipsel-softmmu/memory_mapping.o
CC microblazeel-linux-user/linux-user/main.o
CC ppc64-linux-user/accel/tcg/user-exec.o
CC s390x-softmmu/qtest.o
CC sh4-softmmu/qtest.o
CC sh4-softmmu/memory.o
CC alpha-softmmu/accel/tcg/cputlb.o
CC mipsn32-linux-user/linux-user/signal.o
CC mipsel-softmmu/dump.o
CC aarch64-softmmu/monitor.o
CC ppc64-linux-user/accel/tcg/user-exec-stub.o
CC mipsel-linux-user/linux-user/main.o
CC s390x-linux-user/accel/tcg/translator.o
CC mipsel-softmmu/migration/ram.o
CC or1k-softmmu/balloon.o
CC sh4eb-linux-user/linux-user/linuxload.o
CC alpha-linux-user/linux-user/mmap.o
CC microblazeel-softmmu/balloon.o
CC or1k-softmmu/ioport.o
CC sparc64-softmmu/dump.o
CC sparc64-softmmu/migration/ram.o
CC mipsn32el-linux-user/linux-user/main.o
CC aarch64-linux-user/linux-user/syscall.o
CC ppcemb-softmmu/dump.o
CC x86_64-softmmu/ioport.o
CC nios2-softmmu/memory_mapping.o
CC xtensa-softmmu/migration/ram.o
CC x86_64-softmmu/numa.o
CC microblaze-softmmu/dump.o
CC ppcemb-softmmu/migration/ram.o
CC mips64-linux-user/linux-user/strace.o
CC i386-softmmu/balloon.o
CC i386-softmmu/ioport.o
CC mips-softmmu/memory.o
CC i386-softmmu/numa.o
CC s390x-linux-user/accel/tcg/user-exec.o
CC sparc64-softmmu/accel/accel.o
CC x86_64-linux-user/linux-user/strace.o
CC arm-softmmu/qtest.o
CC xtensaeb-softmmu/accel/stubs/hax-stub.o
CC aarch64-linux-user/linux-user/strace.o
CC i386-softmmu/qtest.o
GEN trace/generated-helpers.c
CC sh4eb-softmmu/qtest.o
CC mipsel-softmmu/accel/accel.o
CC sh4-linux-user/linux-user/strace.o
CC i386-linux-user/linux-user/strace.o
CC mips64-linux-user/linux-user/mmap.o
CC hppa-linux-user/linux-user/uname.o
CC mipsn32el-linux-user/linux-user/syscall.o
CC microblazeel-linux-user/linux-user/syscall.o
CC aarch64-linux-user/linux-user/mmap.o
CC sparc-linux-user/linux-user/strace.o
CC aarch64-linux-user/linux-user/signal.o
CC sparc-linux-user/linux-user/mmap.o
CCAS hppa-linux-user/linux-user/safe-syscall.o
CC arm-softmmu/memory.o
CC mips64-softmmu/memory_mapping.o
CC nios2-softmmu/dump.o
CC xtensaeb-softmmu/accel/stubs/kvm-stub.o
CC microblaze-linux-user/linux-user/elfload.o
CC or1k-softmmu/numa.o
CCAS armeb-linux-user/linux-user/safe-syscall.o
CC mips-softmmu/memory_mapping.o
CC ppc-linux-user/linux-user/syscall.o
CC xtensa-softmmu/accel/accel.o
CC m68k-softmmu/memory.o
CC ppc64-linux-user/linux-user/main.o
CC ppcemb-softmmu/accel/accel.o
CC ppc64abi32-linux-user/accel/tcg/user-exec-stub.o
CC mipsel-linux-user/linux-user/syscall.o
CC mipsel-softmmu/accel/stubs/hax-stub.o
CC ppcemb-softmmu/accel/kvm/kvm-all.o
CC nios2-linux-user/linux-user/strace.o
CC tilegx-linux-user/linux-user/strace.o
CC s390x-softmmu/memory.o
CC alpha-linux-user/linux-user/signal.o
CC tilegx-linux-user/linux-user/mmap.o
CC mips64el-linux-user/trace/control-target.o
CC m68k-softmmu/memory_mapping.o
CC x86_64-softmmu/qtest.o
CC m68k-softmmu/dump.o
CC moxie-softmmu/ioport.o
CC ppc-softmmu/accel/tcg/cputlb.o
CC unicore32-softmmu/accel/accel.o
CC ppc-softmmu/accel/tcg/tcg-runtime.o
CC lm32-softmmu/accel/accel.o
CC ppc64le-linux-user/linux-user/mmap.o
CC ppc64abi32-linux-user/linux-user/main.o
CC ppc64le-linux-user/linux-user/signal.o
CC mips64el-softmmu/ioport.o
CC microblaze-softmmu/migration/ram.o
CC microblazeel-softmmu/ioport.o
CC ppcemb-softmmu/accel/stubs/hax-stub.o
CC sparc-softmmu/dump.o
CC ppc64-softmmu/monitor.o
CC s390x-softmmu/memory_mapping.o
CC lm32-softmmu/accel/stubs/hax-stub.o
CC mips64el-softmmu/numa.o
CC mips64-linux-user/linux-user/signal.o
CC cris-linux-user/linux-user/linuxload.o
CC xtensaeb-softmmu/accel/tcg/tcg-all.o
CC ppc-linux-user/linux-user/strace.o
CC sh4eb-softmmu/memory.o
CC alpha-linux-user/linux-user/elfload.o
CC i386-softmmu/memory.o
CC sparc-softmmu/migration/ram.o
CC cris-linux-user/linux-user/uaccess.o
CC or1k-softmmu/qtest.o
CC microblaze-linux-user/linux-user/linuxload.o
CC s390x-softmmu/dump.o
CC microblaze-softmmu/accel/accel.o
CC or1k-softmmu/memory.o
CC tricore-softmmu/gdbstub.o
CC or1k-softmmu/memory_mapping.o
CC m68k-linux-user/linux-user/elfload.o
CC mips64-linux-user/linux-user/elfload.o
CC mips64-softmmu/dump.o
CC lm32-softmmu/accel/stubs/kvm-stub.o
CC nios2-softmmu/migration/ram.o
CC cris-softmmu/gdbstub.o
CC ppc64-softmmu/gdbstub.o
CC microblaze-linux-user/linux-user/uaccess.o
CC microblaze-softmmu/accel/stubs/hax-stub.o
CC armeb-linux-user/linux-user/flatload.o
CC ppc64-softmmu/balloon.o
CC sparc64-softmmu/accel/stubs/hax-stub.o
CC unicore32-softmmu/accel/stubs/hax-stub.o
CC hppa-linux-user/target/hppa/translate.o
CC m68k-softmmu/migration/ram.o
CC aarch64-softmmu/gdbstub.o
CC aarch64-softmmu/balloon.o
CC s390x-linux-user/accel/tcg/user-exec-stub.o
CC mipsel-softmmu/accel/stubs/kvm-stub.o
CC xtensaeb-softmmu/accel/tcg/cputlb.o
CC microblazeel-linux-user/linux-user/strace.o
CC mips-softmmu/dump.o
CC nios2-softmmu/accel/accel.o
CC ppc64-linux-user/linux-user/syscall.o
CC nios2-softmmu/accel/stubs/hax-stub.o
CC moxie-softmmu/numa.o
CC moxie-softmmu/qtest.o
CC or1k-softmmu/dump.o
CC xtensa-softmmu/accel/stubs/hax-stub.o
CC moxie-softmmu/memory.o
CC lm32-softmmu/accel/tcg/tcg-all.o
CC mips-linux-user/linux-user/mmap.o
CC microblazeel-softmmu/numa.o
CC alpha-softmmu/accel/tcg/tcg-runtime.o
CC sparc64-softmmu/accel/stubs/kvm-stub.o
CC sparc-linux-user/linux-user/signal.o
CC unicore32-softmmu/accel/stubs/kvm-stub.o
CC sparc64-softmmu/accel/tcg/tcg-all.o
CC ppcemb-softmmu/accel/tcg/tcg-all.o
CC ppc64-linux-user/linux-user/strace.o
CC arm-softmmu/memory_mapping.o
CC lm32-softmmu/accel/tcg/cputlb.o
CC sparc64-linux-user/linux-user/elfload.o
CC mips64el-softmmu/qtest.o
CC armeb-linux-user/linux-user/arm/nwfpe/fpa11.o
CC s390x-linux-user/linux-user/main.o
CC xtensa-softmmu/accel/stubs/kvm-stub.o
CC mipsn32-linux-user/linux-user/elfload.o
CC s390x-linux-user/linux-user/syscall.o
CC mipsel-softmmu/accel/tcg/tcg-all.o
CC alpha-softmmu/accel/tcg/cpu-exec.o
CC x86_64-softmmu/memory.o
CC mips64-linux-user/linux-user/linuxload.o
CC sh4-softmmu/memory_mapping.o
CC sparc64-softmmu/accel/tcg/cputlb.o
CC mips64el-linux-user/trace/generated-helpers.o
CC ppc64abi32-linux-user/linux-user/syscall.o
CC x86_64-softmmu/memory_mapping.o
CC xtensaeb-softmmu/accel/tcg/tcg-runtime.o
CC i386-softmmu/memory_mapping.o
CC sparc-softmmu/accel/accel.o
CC mips64-softmmu/migration/ram.o
CC tilegx-linux-user/linux-user/signal.o
CC mips-linux-user/linux-user/signal.o
CC microblazeel-linux-user/linux-user/mmap.o
CC sh4eb-softmmu/memory_mapping.o
CC microblazeel-linux-user/linux-user/signal.o
CC mipsel-softmmu/accel/tcg/cputlb.o
CC ppc64-linux-user/linux-user/mmap.o
CC unicore32-softmmu/accel/tcg/tcg-all.o
CC s390x-linux-user/linux-user/strace.o
CC ppc64-linux-user/linux-user/signal.o
CC mips64-linux-user/linux-user/uaccess.o
CC xtensa-softmmu/accel/tcg/tcg-all.o
CC armeb-linux-user/linux-user/arm/nwfpe/fpa11_cpdo.o
CC microblaze-softmmu/accel/stubs/kvm-stub.o
CC sparc64-softmmu/accel/tcg/tcg-runtime.o
CC aarch64-linux-user/linux-user/elfload.o
CC sh4eb-linux-user/linux-user/uaccess.o
CC armeb-linux-user/linux-user/arm/nwfpe/fpa11_cpdt.o
CC sh4-softmmu/dump.o
CC mipsn32-linux-user/linux-user/linuxload.o
CC nios2-linux-user/linux-user/mmap.o
CC mipsel-linux-user/linux-user/strace.o
CC sparc-linux-user/linux-user/elfload.o
CC alpha-softmmu/accel/tcg/cpu-exec-common.o
CC m68k-softmmu/accel/accel.o
CC microblazeel-softmmu/qtest.o
CC s390x-linux-user/linux-user/mmap.o
CC unicore32-softmmu/accel/tcg/cputlb.o
CC mips64el-softmmu/memory.o
CC mips-linux-user/linux-user/elfload.o
CC sparc32plus-linux-user/linux-user/elfload.o
CC xtensa-softmmu/accel/tcg/cputlb.o
CC mips-softmmu/migration/ram.o
CC sparc64-linux-user/linux-user/linuxload.o
CC mipsn32-linux-user/linux-user/uaccess.o
CC arm-linux-user/linux-user/strace.o
CC mips-linux-user/linux-user/linuxload.o
CC nios2-softmmu/accel/stubs/kvm-stub.o
CC sh4eb-linux-user/linux-user/uname.o
CC microblaze-softmmu/accel/tcg/tcg-all.o
CC sh4eb-linux-user/linux-user/flatload.o
CCAS sh4eb-linux-user/linux-user/safe-syscall.o
CC x86_64-linux-user/linux-user/mmap.o
CC tricore-softmmu/balloon.o
CC cris-softmmu/balloon.o
CC aarch64-softmmu/ioport.o
CC alpha-linux-user/linux-user/linuxload.o
CC alpha-linux-user/linux-user/uaccess.o
CC or1k-linux-user/linux-user/signal.o
CC mipsn32el-linux-user/linux-user/strace.o
CC cris-softmmu/ioport.o
CC ppcemb-softmmu/accel/tcg/cputlb.o
CC sh4-softmmu/migration/ram.o
CC armeb-linux-user/linux-user/arm/nwfpe/fpa11_cprt.o
CC alpha-linux-user/linux-user/uname.o
CC xtensaeb-softmmu/accel/tcg/cpu-exec.o
CC ppcemb-softmmu/accel/tcg/tcg-runtime.o
CC ppc64-linux-user/linux-user/elfload.o
CC sparc-softmmu/accel/stubs/hax-stub.o
CC arm-softmmu/dump.o
CC microblaze-linux-user/linux-user/uname.o
CC s390x-softmmu/migration/ram.o
CC nios2-softmmu/accel/tcg/tcg-all.o
CC or1k-linux-user/linux-user/elfload.o
CC xtensa-softmmu/accel/tcg/tcg-runtime.o
CC nios2-linux-user/linux-user/signal.o
CC ppc64-linux-user/linux-user/linuxload.o
CC or1k-linux-user/linux-user/linuxload.o
CC microblaze-softmmu/accel/tcg/cputlb.o
CC arm-softmmu/migration/ram.o
CC or1k-linux-user/linux-user/uaccess.o
CC alpha-softmmu/accel/tcg/translate-all.o
CC lm32-softmmu/accel/tcg/tcg-runtime.o
CC nios2-softmmu/accel/tcg/cputlb.o
CC microblazeel-softmmu/memory.o
CC sparc-linux-user/linux-user/linuxload.o
CC ppc64abi32-linux-user/linux-user/strace.o
CC tricore-softmmu/ioport.o
CC ppcemb-softmmu/accel/tcg/cpu-exec.o
CC sh4eb-linux-user/target/sh4/translate.o
CC armeb-linux-user/linux-user/arm/nwfpe/fpopcode.o
CC sparc64-softmmu/accel/tcg/cpu-exec.o
CC mips-linux-user/linux-user/uaccess.o
CC mipsel-linux-user/linux-user/mmap.o
CC cris-softmmu/numa.o
CC sparc-softmmu/accel/stubs/kvm-stub.o
CC nios2-linux-user/linux-user/elfload.o
CC armeb-linux-user/linux-user/arm/nwfpe/single_cpdo.o
CC sparc64-linux-user/linux-user/uaccess.o
CC ppc64-linux-user/linux-user/uaccess.o
CC sparc64-linux-user/linux-user/uname.o
CC sh4-linux-user/linux-user/mmap.o
CCAS alpha-linux-user/linux-user/safe-syscall.o
CC ppc64abi32-linux-user/linux-user/mmap.o
CC mips64-softmmu/accel/accel.o
CC mips64el-softmmu/memory_mapping.o
CC aarch64-softmmu/numa.o
CC mips64el-softmmu/dump.o
CCAS sparc64-linux-user/linux-user/safe-syscall.o
CC i386-softmmu/dump.o
CC aarch64-linux-user/linux-user/linuxload.o
CC mips64el-softmmu/migration/ram.o
CC mipsn32el-linux-user/linux-user/mmap.o
CC ppc-softmmu/accel/tcg/cpu-exec.o
CC microblazeel-softmmu/memory_mapping.o
CC arm-linux-user/linux-user/mmap.o
CC microblazeel-linux-user/linux-user/elfload.o
CC moxie-softmmu/memory_mapping.o
CC sh4-linux-user/linux-user/signal.o
CC mips-linux-user/linux-user/uname.o
CC sh4eb-softmmu/dump.o
CC ppc64-softmmu/ioport.o
CC mips-softmmu/accel/accel.o
CC mipsel-softmmu/accel/tcg/tcg-runtime.o
CC armeb-linux-user/linux-user/arm/nwfpe/double_cpdo.o
CC alpha-linux-user/target/alpha/translate.o
CC sparc-softmmu/accel/tcg/tcg-all.o
CC alpha-softmmu/accel/tcg/translator.o
CC cris-linux-user/linux-user/uname.o
CC mipsel-linux-user/linux-user/signal.o
CC ppc-softmmu/accel/tcg/cpu-exec-common.o
CC tricore-softmmu/numa.o
CC mips64-softmmu/accel/stubs/hax-stub.o
CC arm-linux-user/linux-user/signal.o
CC or1k-softmmu/migration/ram.o
CC alpha-softmmu/hw/9pfs/virtio-9p-device.o
CC x86_64-linux-user/linux-user/signal.o
CC sh4-linux-user/linux-user/elfload.o
CC mips64el-softmmu/accel/accel.o
CC m68k-softmmu/accel/stubs/hax-stub.o
CC cris-softmmu/qtest.o
CC sparc-softmmu/accel/tcg/cputlb.o
CC ppcemb-softmmu/accel/tcg/cpu-exec-common.o
CC sparc-softmmu/accel/tcg/tcg-runtime.o
CC mipsel-softmmu/accel/tcg/cpu-exec.o
CC arm-softmmu/accel/accel.o
CC s390x-linux-user/linux-user/signal.o
CC mipsn32el-linux-user/linux-user/signal.o
CC mipsel-linux-user/linux-user/elfload.o
CC xtensaeb-softmmu/accel/tcg/cpu-exec-common.o
CC mipsel-softmmu/accel/tcg/cpu-exec-common.o
CC ppc-linux-user/linux-user/mmap.o
CC x86_64-softmmu/dump.o
CC microblaze-softmmu/accel/tcg/tcg-runtime.o
CC aarch64-softmmu/qtest.o
CC x86_64-softmmu/migration/ram.o
CC sparc32plus-linux-user/linux-user/linuxload.o
CC lm32-softmmu/accel/tcg/cpu-exec.o
CC m68k-linux-user/linux-user/linuxload.o
CC sh4eb-linux-user/target/sh4/op_helper.o
CC tilegx-linux-user/linux-user/elfload.o
CC tricore-softmmu/qtest.o
CC mips-softmmu/accel/stubs/hax-stub.o
CC arm-linux-user/linux-user/elfload.o
CC mips64-softmmu/accel/stubs/kvm-stub.o
CC alpha-linux-user/target/alpha/helper.o
CC armeb-linux-user/linux-user/arm/nwfpe/extended_cpdo.o
CC mips64-softmmu/accel/tcg/tcg-all.o
CC sparc32plus-linux-user/linux-user/uaccess.o
CC m68k-softmmu/accel/stubs/kvm-stub.o
CC sparc64-softmmu/accel/tcg/cpu-exec-common.o
CC sh4eb-softmmu/migration/ram.o
CC ppc64-softmmu/numa.o
CC microblazeel-softmmu/dump.o
CC xtensa-softmmu/accel/tcg/cpu-exec.o
CC xtensaeb-softmmu/accel/tcg/translate-all.o
CC ppc-softmmu/accel/tcg/translate-all.o
CC mipsel-linux-user/linux-user/linuxload.o
CC arm-linux-user/linux-user/linuxload.o
CC mipsel-softmmu/accel/tcg/translate-all.o
CC tilegx-linux-user/linux-user/linuxload.o
CC mips64-linux-user/linux-user/uname.o
CC armeb-linux-user/target/arm/arm-semi.o
CC or1k-linux-user/linux-user/uname.o
CC alpha-softmmu/hw/block/virtio-blk.o
CC hppa-linux-user/target/hppa/helper.o
CC mips64-softmmu/accel/tcg/cputlb.o
CC x86_64-linux-user/linux-user/elfload.o
CC sparc64-softmmu/accel/tcg/translate-all.o
CC m68k-softmmu/accel/tcg/tcg-all.o
CC unicore32-softmmu/accel/tcg/tcg-runtime.o
CC m68k-linux-user/linux-user/uaccess.o
CC microblazeel-softmmu/migration/ram.o
CC moxie-softmmu/dump.o
CC x86_64-softmmu/accel/accel.o
CCAS cris-linux-user/linux-user/safe-syscall.o
CC mipsn32el-linux-user/linux-user/elfload.o
CC mipsel-softmmu/accel/tcg/translator.o
CC mips-softmmu/accel/stubs/kvm-stub.o
CC sparc64-linux-user/target/sparc/translate.o
CC lm32-softmmu/accel/tcg/cpu-exec-common.o
CC x86_64-linux-user/linux-user/linuxload.o
CC cris-softmmu/memory.o
CC x86_64-linux-user/linux-user/uaccess.o
CC ppc64abi32-linux-user/linux-user/signal.o
CC sh4-softmmu/accel/accel.o
CC s390x-softmmu/accel/accel.o
CCAS or1k-linux-user/linux-user/safe-syscall.o
CC sparc64-linux-user/target/sparc/helper.o
CC mips64-softmmu/accel/tcg/tcg-runtime.o
CC xtensaeb-softmmu/accel/tcg/translator.o
CC aarch64-softmmu/memory.o
CC ppc64-softmmu/qtest.o
CC cris-linux-user/target/cris/translate.o
CC tricore-softmmu/memory.o
CC x86_64-linux-user/linux-user/uname.o
CC m68k-softmmu/accel/tcg/cputlb.o
CC mips64el-softmmu/accel/stubs/hax-stub.o
CC i386-softmmu/migration/ram.o
CC xtensaeb-softmmu/hw/core/generic-loader.o
CC unicore32-softmmu/accel/tcg/cpu-exec.o
CC arm-linux-user/linux-user/uaccess.o
CC mipsn32-linux-user/linux-user/uname.o
CC xtensaeb-softmmu/hw/core/null-machine.o
CC lm32-softmmu/accel/tcg/translate-all.o
CC microblazeel-linux-user/linux-user/linuxload.o
CC nios2-linux-user/linux-user/linuxload.o
CC unicore32-softmmu/accel/tcg/cpu-exec-common.o
CC i386-linux-user/linux-user/mmap.o
CC nios2-softmmu/accel/tcg/tcg-runtime.o
CC s390x-linux-user/linux-user/elfload.o
CCAS mips64-linux-user/linux-user/safe-syscall.o
CCAS mipsn32-linux-user/linux-user/safe-syscall.o
CC ppc-softmmu/accel/tcg/translator.o
CC mips-softmmu/accel/tcg/tcg-all.o
CC x86_64-softmmu/accel/stubs/hax-stub.o
CC microblaze-softmmu/accel/tcg/cpu-exec.o
CC ppc64-linux-user/linux-user/uname.o
CC sh4-softmmu/accel/stubs/hax-stub.o
CC sh4eb-linux-user/target/sh4/helper.o
CC tricore-softmmu/memory_mapping.o
CC hppa-linux-user/target/hppa/cpu.o
CC microblazeel-softmmu/accel/accel.o
CC microblazeel-linux-user/linux-user/uaccess.o
CC cris-linux-user/target/cris/op_helper.o
CC aarch64-softmmu/memory_mapping.o
CC cris-softmmu/memory_mapping.o
CC s390x-softmmu/accel/stubs/hax-stub.o
CC alpha-linux-user/target/alpha/cpu.o
CC microblaze-softmmu/accel/tcg/cpu-exec-common.o
CC moxie-softmmu/migration/ram.o
CC sparc-softmmu/accel/tcg/cpu-exec.o
CC arm-softmmu/accel/stubs/hax-stub.o
CC s390x-softmmu/accel/stubs/kvm-stub.o
CC mipsel-softmmu/hw/9pfs/virtio-9p-device.o
CC or1k-softmmu/accel/accel.o
CC mipsel-softmmu/hw/block/virtio-blk.o
CC ppc64abi32-linux-user/linux-user/elfload.o
CC sparc64-linux-user/target/sparc/cpu.o
CC xtensaeb-softmmu/hw/misc/mmio_interface.o
CC mipsel-linux-user/linux-user/uaccess.o
CC i386-linux-user/linux-user/signal.o
CC armeb-linux-user/target/arm/kvm-stub.o
CC sh4-softmmu/accel/stubs/kvm-stub.o
CC xtensa-softmmu/accel/tcg/cpu-exec-common.o
CC ppc-softmmu/hw/9pfs/virtio-9p-device.o
CC armeb-linux-user/target/arm/translate.o
CC hppa-linux-user/target/hppa/op_helper.o
CCAS microblaze-linux-user/linux-user/safe-syscall.o
CC alpha-linux-user/target/alpha/int_helper.o
CC arm-linux-user/linux-user/uname.o
CC microblazeel-softmmu/accel/stubs/hax-stub.o
CC microblazeel-softmmu/accel/stubs/kvm-stub.o
CC alpha-softmmu/hw/block/dataplane/virtio-blk.o
CC arm-softmmu/accel/stubs/kvm-stub.o
CC xtensaeb-softmmu/hw/net/vhost_net.o
CC s390x-softmmu/accel/tcg/tcg-all.o
CC sh4eb-softmmu/accel/accel.o
CC sparc32plus-linux-user/linux-user/uname.o
CC mips-softmmu/accel/tcg/cputlb.o
CC lm32-softmmu/accel/tcg/translator.o
CC microblaze-linux-user/linux-user/flatload.o
CCAS mips-linux-user/linux-user/safe-syscall.o
CC moxie-softmmu/accel/accel.o
CC xtensa-softmmu/accel/tcg/translate-all.o
CC mipsn32-linux-user/target/mips/translate.o
CC or1k-linux-user/target/openrisc/cpu.o
CC sh4-softmmu/accel/tcg/tcg-all.o
CC xtensa-softmmu/accel/tcg/translator.o
CC mips64el-softmmu/accel/stubs/kvm-stub.o
CC i386-linux-user/linux-user/elfload.o
CC m68k-linux-user/linux-user/uname.o
CC nios2-softmmu/accel/tcg/cpu-exec.o
CC arm-softmmu/accel/tcg/tcg-all.o
CC moxie-softmmu/accel/stubs/hax-stub.o
CC ppc64-softmmu/memory.o
CC mipsel-softmmu/hw/block/dataplane/virtio-blk.o
CC i386-linux-user/linux-user/linuxload.o
CC ppc-softmmu/hw/block/virtio-blk.o
CC ppcemb-softmmu/accel/tcg/translate-all.o
CC alpha-softmmu/hw/char/virtio-serial-bus.o
CC sh4-softmmu/accel/tcg/cputlb.o
CC s390x-linux-user/linux-user/linuxload.o
CC unicore32-softmmu/accel/tcg/translate-all.o
CC m68k-softmmu/accel/tcg/tcg-runtime.o
CC sh4eb-linux-user/target/sh4/cpu.o
CCAS x86_64-linux-user/linux-user/safe-syscall.o
CC nios2-softmmu/accel/tcg/cpu-exec-common.o
CC s390x-softmmu/accel/tcg/cputlb.o
CC mips64-linux-user/target/mips/translate.o
CC ppcemb-softmmu/accel/tcg/translator.o
CC nios2-softmmu/accel/tcg/translate-all.o
CC aarch64-linux-user/linux-user/uaccess.o
CC xtensaeb-softmmu/hw/net/rocker/qmp-norocker.o
CC x86_64-softmmu/accel/stubs/kvm-stub.o
CC sparc64-softmmu/accel/tcg/translator.o
CC x86_64-linux-user/target/i386/helper.o
CC mips64el-softmmu/accel/tcg/tcg-all.o
CC mipsel-linux-user/linux-user/uname.o
CC cris-linux-user/target/cris/helper.o
CC microblazeel-linux-user/linux-user/uname.o
CC microblazeel-softmmu/accel/tcg/tcg-all.o
CC mipsel-softmmu/hw/char/virtio-serial-bus.o
CC sparc64-linux-user/target/sparc/fop_helper.o
CCAS mipsel-linux-user/linux-user/safe-syscall.o
CC cris-softmmu/dump.o
CC lm32-softmmu/hw/core/generic-loader.o
CC aarch64-linux-user/linux-user/uname.o
CC mipsn32el-linux-user/linux-user/linuxload.o
CC armeb-linux-user/target/arm/op_helper.o
CCAS arm-linux-user/linux-user/safe-syscall.o
CC microblaze-softmmu/accel/tcg/translate-all.o
CC or1k-softmmu/accel/stubs/hax-stub.o
CC alpha-softmmu/hw/core/generic-loader.o
CC mips-softmmu/accel/tcg/tcg-runtime.o
CC arm-softmmu/accel/tcg/cputlb.o
CC cris-softmmu/migration/ram.o
CC sparc-softmmu/accel/tcg/cpu-exec-common.o
CCAS aarch64-linux-user/linux-user/safe-syscall.o
CC s390x-linux-user/linux-user/uaccess.o
CC m68k-softmmu/accel/tcg/cpu-exec.o
CC xtensaeb-softmmu/hw/vfio/common.o
CC microblazeel-softmmu/accel/tcg/cputlb.o
CC x86_64-softmmu/accel/tcg/tcg-all.o
CC or1k-softmmu/accel/stubs/kvm-stub.o
CC unicore32-softmmu/accel/tcg/translator.o
CC sparc64-linux-user/target/sparc/cc_helper.o
CC sparc64-softmmu/hw/9pfs/virtio-9p-device.o
CC cris-softmmu/accel/accel.o
CC mipsn32-linux-user/target/mips/dsp_helper.o
CC armeb-linux-user/target/arm/helper.o
CC s390x-linux-user/linux-user/uname.o
CC hppa-linux-user/target/hppa/gdbstub.o
CC mips64el-softmmu/accel/tcg/cputlb.o
CC tricore-softmmu/dump.o
CC nios2-softmmu/accel/tcg/translator.o
CCAS m68k-linux-user/linux-user/safe-syscall.o
CCAS sparc32plus-linux-user/linux-user/safe-syscall.o
CC tilegx-linux-user/linux-user/uaccess.o
CC sparc32plus-linux-user/target/sparc/translate.o
CC microblaze-linux-user/target/microblaze/translate.o
CCAS ppc64-linux-user/linux-user/safe-syscall.o
CC mips64-softmmu/accel/tcg/cpu-exec.o
CC ppc64abi32-linux-user/linux-user/linuxload.o
CC m68k-linux-user/linux-user/flatload.o
CCAS microblazeel-linux-user/linux-user/safe-syscall.o
CC m68k-softmmu/accel/tcg/cpu-exec-common.o
CC arm-linux-user/linux-user/flatload.o
CC sparc-softmmu/accel/tcg/translate-all.o
CC unicore32-softmmu/hw/core/generic-loader.o
CC x86_64-softmmu/accel/tcg/cputlb.o
CC sh4-linux-user/linux-user/linuxload.o
CC aarch64-softmmu/dump.o
CC sh4eb-softmmu/accel/stubs/hax-stub.o
CC x86_64-softmmu/accel/tcg/tcg-runtime.o
CC microblaze-softmmu/accel/tcg/translator.o
CC microblaze-softmmu/hw/core/generic-loader.o
CC lm32-softmmu/hw/core/null-machine.o
CC mips-linux-user/target/mips/translate.o
CC nios2-linux-user/linux-user/uaccess.o
CC x86_64-linux-user/target/i386/cpu.o
CC mipsel-softmmu/hw/core/generic-loader.o
CC mipsn32el-linux-user/linux-user/uaccess.o
CC sparc-softmmu/accel/tcg/translator.o
CC aarch64-linux-user/linux-user/flatload.o
CC mips64-softmmu/accel/tcg/cpu-exec-common.o
GEN trace/generated-helpers.c
CC sh4eb-softmmu/accel/stubs/kvm-stub.o
CC sparc64-softmmu/hw/block/virtio-blk.o
CC xtensa-softmmu/hw/core/generic-loader.o
CC or1k-softmmu/accel/tcg/tcg-all.o
CC or1k-linux-user/target/openrisc/exception.o
CC hppa-linux-user/trace/control-target.o
CC ppc64-softmmu/memory_mapping.o
CC aarch64-softmmu/migration/ram.o
CC aarch64-linux-user/target/arm/arm-semi.o
CC alpha-linux-user/target/alpha/fpu_helper.o
CC alpha-linux-user/target/alpha/vax_helper.o
CC aarch64-softmmu/accel/accel.o
CC nios2-softmmu/hw/core/generic-loader.o
CC mips-softmmu/accel/tcg/cpu-exec.o
CC arm-softmmu/accel/tcg/tcg-runtime.o
CC mips64-softmmu/accel/tcg/translate-all.o
CC sh4eb-linux-user/target/sh4/gdbstub.o
CC lm32-softmmu/hw/input/milkymist-softusb.o
GEN trace/generated-helpers.c
CC mips-linux-user/target/mips/dsp_helper.o
CC ppc64-softmmu/dump.o
CC ppc-softmmu/hw/block/dataplane/virtio-blk.o
CC alpha-softmmu/hw/core/null-machine.o
CC arm-softmmu/accel/tcg/cpu-exec.o
CC microblaze-softmmu/hw/core/null-machine.o
CC sh4-linux-user/linux-user/uaccess.o
CC sparc32plus-linux-user/target/sparc/helper.o
CC tilegx-linux-user/linux-user/uname.o
CC ppc-softmmu/hw/char/virtio-serial-bus.o
CC hppa-linux-user/trace/generated-helpers.o
CC unicore32-softmmu/hw/core/null-machine.o
CC mipsel-linux-user/target/mips/translate.o
CC or1k-linux-user/target/openrisc/interrupt.o
CC or1k-softmmu/accel/tcg/cputlb.o
CC x86_64-softmmu/accel/tcg/cpu-exec.o
CC m68k-linux-user/linux-user/m68k-sim.o
CC ppc64abi32-linux-user/linux-user/uaccess.o
CC i386-softmmu/accel/accel.o
CC sh4eb-softmmu/accel/tcg/tcg-all.o
CC sparc-linux-user/linux-user/uaccess.o
CC arm-softmmu/accel/tcg/cpu-exec-common.o
CC armeb-linux-user/target/arm/cpu.o
CC ppcemb-softmmu/hw/9pfs/virtio-9p-device.o
CC microblazeel-softmmu/accel/tcg/tcg-runtime.o
CC ppc64-softmmu/migration/ram.o
CC aarch64-linux-user/target/arm/kvm-stub.o
CC ppc-linux-user/linux-user/signal.o
CC mipsel-softmmu/hw/core/null-machine.o
CC sparc-linux-user/linux-user/uname.o
CC mipsel-linux-user/target/mips/dsp_helper.o
CC xtensa-softmmu/hw/core/null-machine.o
CC armeb-linux-user/target/arm/neon_helper.o
CC alpha-softmmu/hw/display/vga.o
CC unicore32-softmmu/hw/misc/mmio_interface.o
CC sh4eb-linux-user/trace/control-target.o
CC sh4-linux-user/linux-user/uname.o
CCAS sh4-linux-user/linux-user/safe-syscall.o
CC or1k-linux-user/target/openrisc/mmu.o
CC sparc64-softmmu/hw/block/dataplane/virtio-blk.o
CC xtensa-softmmu/hw/misc/mmio_interface.o
CC sparc-softmmu/hw/core/generic-loader.o
CC ppc64le-linux-user/linux-user/elfload.o
CC microblaze-softmmu/hw/misc/mmio_interface.o
CC microblazeel-softmmu/accel/tcg/cpu-exec.o
CC nios2-softmmu/hw/core/null-machine.o
CC m68k-linux-user/target/m68k/m68k-semi.o
CC mipsel-softmmu/hw/display/vga.o
CC sparc-softmmu/hw/core/null-machine.o
CC lm32-softmmu/hw/misc/milkymist-hpdmc.o
CC sparc32plus-linux-user/target/sparc/cpu.o
CC x86_64-softmmu/accel/tcg/cpu-exec-common.o
CC sh4eb-softmmu/accel/tcg/cputlb.o
CC m68k-softmmu/accel/tcg/translate-all.o
CC microblazeel-softmmu/accel/tcg/cpu-exec-common.o
CC alpha-linux-user/target/alpha/sys_helper.o
CC mips-linux-user/target/mips/op_helper.o
CC arm-softmmu/accel/tcg/translate-all.o
CC moxie-softmmu/accel/stubs/kvm-stub.o
CC sh4-softmmu/accel/tcg/tcg-runtime.o
CC moxie-softmmu/accel/tcg/tcg-all.o
CC i386-softmmu/accel/stubs/hax-stub.o
CC ppc64le-linux-user/linux-user/linuxload.o
LINK hppa-linux-user/qemu-hppa
CC mipsel-softmmu/hw/display/virtio-gpu.o
CC nios2-softmmu/hw/intc/nios2_iic.o
CC sparc64-linux-user/target/sparc/win_helper.o
CC ppcemb-softmmu/hw/block/virtio-blk.o
CC unicore32-softmmu/hw/net/vhost_net.o
CC xtensa-softmmu/hw/net/vhost_net.o
CC or1k-linux-user/target/openrisc/translate.o
CC cris-linux-user/target/cris/cpu.o
CC sh4eb-linux-user/trace/generated-helpers.o
CC mips64-softmmu/accel/tcg/translator.o
CC cris-linux-user/target/cris/gdbstub.o
CC microblaze-softmmu/hw/net/xilinx_ethlite.o
CC xtensaeb-softmmu/hw/vfio/platform.o
CC sparc32plus-linux-user/target/sparc/fop_helper.o
CC mipsel-linux-user/target/mips/op_helper.o
CC sh4-linux-user/linux-user/flatload.o
CC moxie-softmmu/accel/tcg/cputlb.o
CC sparc64-linux-user/target/sparc/mmu_helper.o
CC or1k-linux-user/target/openrisc/exception_helper.o
CC or1k-linux-user/target/openrisc/fpu_helper.o
CC sparc-softmmu/hw/display/tcx.o
CCAS tilegx-linux-user/linux-user/safe-syscall.o
CCAS s390x-linux-user/linux-user/safe-syscall.o
CC lm32-softmmu/hw/misc/milkymist-pfpu.o
CC x86_64-linux-user/target/i386/gdbstub.o
CC unicore32-softmmu/hw/net/rocker/qmp-norocker.o
CC alpha-softmmu/hw/display/virtio-gpu.o
CC mips-linux-user/target/mips/lmi_helper.o
CC sparc64-linux-user/target/sparc/ldst_helper.o
CC tilegx-linux-user/target/tilegx/cpu.o
CC i386-softmmu/accel/stubs/kvm-stub.o
CC microblazeel-linux-user/linux-user/flatload.o
CC alpha-linux-user/target/alpha/mem_helper.o
CC mips64-softmmu/hw/9pfs/virtio-9p-device.o
CC sparc64-softmmu/hw/char/virtio-serial-bus.o
CC nios2-softmmu/hw/misc/mmio_interface.o
CC ppc-softmmu/hw/core/generic-loader.o
CC s390x-softmmu/accel/tcg/tcg-runtime.o
CC microblaze-softmmu/hw/net/vhost_net.o
CC s390x-softmmu/accel/tcg/cpu-exec.o
CC unicore32-softmmu/hw/vfio/common.o
CC sh4-softmmu/accel/tcg/cpu-exec.o
CC xtensaeb-softmmu/hw/vfio/spapr.o
CC tricore-softmmu/migration/ram.o
CC arm-linux-user/linux-user/arm/nwfpe/fpa11.o
CC ppc-softmmu/hw/core/null-machine.o
CC sparc64-linux-user/target/sparc/int64_helper.o
CC sh4-softmmu/accel/tcg/cpu-exec-common.o
CC microblaze-linux-user/target/microblaze/op_helper.o
CC microblazeel-linux-user/target/microblaze/translate.o
CC sparc64-linux-user/target/sparc/vis_helper.o
CC xtensa-softmmu/hw/net/rocker/qmp-norocker.o
CC m68k-linux-user/target/m68k/translate.o
CC s390x-linux-user/target/s390x/cpu.o
CC tilegx-linux-user/target/tilegx/translate.o
CC s390x-linux-user/target/s390x/cpu_models.o
CC cris-softmmu/accel/stubs/hax-stub.o
CC nios2-softmmu/hw/net/vhost_net.o
CC x86_64-linux-user/target/i386/xsave_helper.o
CC ppc-linux-user/linux-user/elfload.o
CC alpha-linux-user/target/alpha/gdbstub.o
CC mips64-linux-user/target/mips/dsp_helper.o
CC mips64el-softmmu/accel/tcg/tcg-runtime.o
LINK sh4eb-linux-user/qemu-sh4eb
CC or1k-linux-user/target/openrisc/interrupt_helper.o
CC i386-linux-user/linux-user/uaccess.o
CC i386-softmmu/accel/tcg/tcg-all.o
CC alpha-softmmu/hw/display/virtio-gpu-3d.o
CC microblaze-softmmu/hw/net/rocker/qmp-norocker.o
CC armeb-linux-user/target/arm/iwmmxt_helper.o
CC sh4-softmmu/accel/tcg/translate-all.o
CC microblazeel-linux-user/target/microblaze/op_helper.o
CC sparc32plus-linux-user/target/sparc/cc_helper.o
CC unicore32-softmmu/hw/vfio/platform.o
CC sh4-linux-user/target/sh4/translate.o
CC m68k-softmmu/accel/tcg/translator.o
CC ppc64-softmmu/accel/accel.o
CC mips64-linux-user/target/mips/op_helper.o
CC aarch64-softmmu/accel/stubs/hax-stub.o
CC ppc-softmmu/hw/display/sm501.o
CC m68k-linux-user/target/m68k/op_helper.o
CC nios2-softmmu/hw/net/rocker/qmp-norocker.o
CC xtensa-softmmu/hw/vfio/common.o
CC cris-softmmu/accel/stubs/kvm-stub.o
CC aarch64-linux-user/target/arm/translate.o
CC nios2-linux-user/linux-user/uname.o
CC microblazeel-linux-user/target/microblaze/helper.o
CC lm32-softmmu/hw/misc/mmio_interface.o
CC arm-linux-user/linux-user/arm/nwfpe/fpa11_cpdo.o
CC xtensaeb-softmmu/hw/xtensa/pic_cpu.o
CC m68k-softmmu/hw/char/mcf_uart.o
CC mipsel-softmmu/hw/display/virtio-gpu-3d.o
GEN trace/generated-helpers.c
GEN trace/generated-helpers.c
CC sparc64-softmmu/hw/core/generic-loader.o
CC microblaze-softmmu/hw/vfio/common.o
CC alpha-softmmu/hw/display/virtio-gpu-pci.o
CC sparc-softmmu/hw/display/cg3.o
CC alpha-linux-user/trace/control-target.o
CC lm32-softmmu/hw/net/milkymist-minimac2.o
CC tilegx-linux-user/target/tilegx/helper.o
CC xtensaeb-softmmu/hw/xtensa/sim.o
CC lm32-softmmu/hw/net/vhost_net.o
CC ppc64le-linux-user/linux-user/uaccess.o
CC i386-linux-user/linux-user/uname.o
CC sh4-softmmu/accel/tcg/translator.o
CC i386-softmmu/accel/tcg/cputlb.o
CC x86_64-linux-user/target/i386/translate.o
CC x86_64-softmmu/accel/tcg/translate-all.o
CC mips-linux-user/target/mips/helper.o
CC nios2-softmmu/hw/timer/altera_timer.o
CC mipsel-linux-user/target/mips/lmi_helper.o
CC sparc32plus-linux-user/target/sparc/win_helper.o
CC mips64el-softmmu/accel/tcg/cpu-exec.o
CC microblazeel-softmmu/accel/tcg/translate-all.o
CC arm-softmmu/accel/tcg/translator.o
CC microblaze-linux-user/target/microblaze/helper.o
CC cris-softmmu/accel/tcg/tcg-all.o
CC alpha-softmmu/hw/misc/ivshmem.o
CC arm-softmmu/hw/9pfs/virtio-9p-device.o
CC s390x-softmmu/accel/tcg/cpu-exec-common.o
CC mips64-softmmu/hw/block/virtio-blk.o
CC arm-linux-user/linux-user/arm/nwfpe/fpa11_cpdt.o
CC xtensaeb-softmmu/hw/xtensa/xtfpga.o
CC ppcemb-softmmu/hw/block/dataplane/virtio-blk.o
CC i386-softmmu/accel/tcg/tcg-runtime.o
CCAS nios2-linux-user/linux-user/safe-syscall.o
CC sparc64-softmmu/hw/core/null-machine.o
CC x86_64-softmmu/accel/tcg/translator.o
CC nios2-softmmu/hw/vfio/common.o
CC nios2-linux-user/target/nios2/translate.o
CC ppc64abi32-linux-user/linux-user/uname.o
CC microblazeel-softmmu/accel/tcg/translator.o
CC arm-linux-user/linux-user/arm/nwfpe/fpa11_cprt.o
CC i386-softmmu/accel/tcg/cpu-exec.o
CC sparc64-linux-user/target/sparc/gdbstub.o
CC or1k-linux-user/target/openrisc/mmu_helper.o
CC ppc64-softmmu/accel/kvm/kvm-all.o
CC moxie-softmmu/accel/tcg/tcg-runtime.o
CC xtensa-softmmu/hw/vfio/platform.o
CC mipsel-softmmu/hw/display/virtio-gpu-pci.o
CC mips-softmmu/accel/tcg/cpu-exec-common.o
CC ppcemb-softmmu/hw/char/virtio-serial-bus.o
CC sparc-softmmu/hw/intc/grlib_irqmp.o
CC alpha-linux-user/trace/generated-helpers.o
CC aarch64-softmmu/accel/stubs/kvm-stub.o
CC s390x-softmmu/accel/tcg/translate-all.o
CC mipsn32el-linux-user/linux-user/uname.o
CC ppc64le-linux-user/linux-user/uname.o
CCAS i386-linux-user/linux-user/safe-syscall.o
CC sh4eb-softmmu/accel/tcg/tcg-runtime.o
CC m68k-softmmu/hw/core/generic-loader.o
CC i386-linux-user/linux-user/vm86.o
CC xtensaeb-softmmu/target/xtensa/xtensa-semi.o
CC mipsel-softmmu/hw/intc/mips_gic.o
CC ppc64-linux-user/target/ppc/cpu-models.o
CC cris-softmmu/accel/tcg/cputlb.o
CC s390x-softmmu/accel/tcg/translator.o
CC sparc64-softmmu/hw/display/vga.o
CC mips64-softmmu/hw/block/dataplane/virtio-blk.o
CC mipsel-softmmu/hw/misc/ivshmem.o
CC lm32-softmmu/hw/net/rocker/qmp-norocker.o
CC mips-softmmu/accel/tcg/translate-all.o
CC cris-linux-user/trace/control-target.o
CC sparc-softmmu/hw/misc/eccmemctl.o
CC sparc-softmmu/hw/misc/slavio_misc.o
CCAS sparc-linux-user/linux-user/safe-syscall.o
CC sparc32plus-linux-user/target/sparc/mmu_helper.o
CC xtensaeb-softmmu/target/xtensa/core-dc232b.o
CC or1k-linux-user/target/openrisc/sys_helper.o
CC armeb-linux-user/target/arm/gdbstub.o
CCAS mipsn32el-linux-user/linux-user/safe-syscall.o
CC arm-linux-user/linux-user/arm/nwfpe/fpopcode.o
CC tilegx-linux-user/target/tilegx/simd_helper.o
CC mips64el-softmmu/accel/tcg/cpu-exec-common.o
CC unicore32-softmmu/hw/vfio/spapr.o
CC x86_64-softmmu/hw/9pfs/virtio-9p-device.o
CC microblazeel-softmmu/hw/core/generic-loader.o
CC ppc64-linux-user/target/ppc/cpu.o
LINK alpha-linux-user/qemu-alpha
GEN trace/generated-helpers.c
GEN trace/generated-helpers.c
CC mips64-softmmu/hw/char/virtio-serial-bus.o
CC microblazeel-linux-user/target/microblaze/cpu.o
CC x86_64-softmmu/hw/block/virtio-blk.o
CC ppc-linux-user/linux-user/linuxload.o
CC x86_64-linux-user/target/i386/bpt_helper.o
CC sh4-softmmu/hw/9pfs/virtio-9p-device.o
CC x86_64-linux-user/target/i386/cc_helper.o
CCAS ppc64le-linux-user/linux-user/safe-syscall.o
CC alpha-softmmu/hw/misc/mmio_interface.o
CC sparc32plus-linux-user/target/sparc/ldst_helper.o
CC ppc64-softmmu/accel/stubs/hax-stub.o
CC lm32-softmmu/hw/sd/milkymist-memcard.o
CC x86_64-linux-user/target/i386/excp_helper.o
CC nios2-softmmu/hw/vfio/platform.o
CC sparc-linux-user/target/sparc/translate.o
CC ppc64le-linux-user/target/ppc/cpu-models.o
CC mipsn32-linux-user/target/mips/op_helper.o
CC i386-softmmu/accel/tcg/cpu-exec-common.o
CC aarch64-softmmu/accel/tcg/tcg-all.o
CC xtensaeb-softmmu/target/xtensa/core-dc233c.o
CC m68k-softmmu/hw/core/null-machine.o
CC mipsel-softmmu/hw/misc/mips_cmgcr.o
CC m68k-linux-user/target/m68k/helper.o
CC or1k-linux-user/target/openrisc/gdbstub.o
CC mipsn32el-linux-user/target/mips/translate.o
CC moxie-softmmu/accel/tcg/cpu-exec.o
CC arm-softmmu/hw/adc/stm32f2xx_adc.o
CC sparc64-linux-user/trace/control-target.o
CC x86_64-linux-user/target/i386/fpu_helper.o
CC cris-linux-user/trace/generated-helpers.o
CC ppc-softmmu/hw/display/vga.o
CC or1k-softmmu/accel/tcg/tcg-runtime.o
CC x86_64-linux-user/target/i386/int_helper.o
CC tricore-softmmu/accel/accel.o
CC ppc-softmmu/hw/display/virtio-gpu.o
CC cris-softmmu/accel/tcg/tcg-runtime.o
CC armeb-linux-user/target/arm/crypto_helper.o
CC mips64el-softmmu/accel/tcg/translate-all.o
CC arm-linux-user/linux-user/arm/nwfpe/single_cpdo.o
CC microblazeel-linux-user/target/microblaze/gdbstub.o
CC xtensa-softmmu/hw/vfio/spapr.o
CC mips-linux-user/target/mips/cpu.o
CC m68k-linux-user/target/m68k/cpu.o
CC m68k-softmmu/hw/misc/mmio_interface.o
CC m68k-softmmu/hw/net/mcf_fec.o
CC sh4-softmmu/hw/block/tc58128.o
CC xtensaeb-softmmu/target/xtensa/core-fsf.o
CC aarch64-softmmu/accel/tcg/cputlb.o
CC aarch64-softmmu/accel/tcg/tcg-runtime.o
CC s390x-softmmu/hw/9pfs/virtio-9p-device.o
CC mips64-softmmu/hw/core/generic-loader.o
CC m68k-softmmu/hw/net/vhost_net.o
CC microblazeel-softmmu/hw/core/null-machine.o
CC mips64-linux-user/target/mips/lmi_helper.o
CC xtensa-softmmu/hw/xtensa/pic_cpu.o
CC mipsel-linux-user/target/mips/helper.o
CC sparc-softmmu/hw/misc/mmio_interface.o
CC microblaze-softmmu/hw/vfio/platform.o
CC lm32-softmmu/hw/vfio/common.o
CC cris-softmmu/accel/tcg/cpu-exec.o
CC sh4-softmmu/hw/block/virtio-blk.o
CC alpha-softmmu/hw/net/virtio-net.o
CC ppc64le-linux-user/target/ppc/cpu.o
CC cris-softmmu/accel/tcg/cpu-exec-common.o
CC m68k-softmmu/hw/net/rocker/qmp-norocker.o
CC unicore32-softmmu/hw/unicore32/puv3.o
CC xtensa-softmmu/hw/xtensa/sim.o
CC s390x-linux-user/target/s390x/cpu_features.o
CC arm-softmmu/hw/block/virtio-blk.o
CC ppc-linux-user/linux-user/uaccess.o
CC xtensaeb-softmmu/target/xtensa/monitor.o
CC m68k-linux-user/target/m68k/fpu_helper.o
CC sh4eb-softmmu/accel/tcg/cpu-exec.o
CC i386-linux-user/target/i386/helper.o
CC sparc64-linux-user/trace/generated-helpers.o
CC tilegx-linux-user/trace/control-target.o
CC mips-softmmu/accel/tcg/translator.o
CC mipsel-softmmu/hw/misc/mips_cpc.o
GEN trace/generated-helpers.c
CC xtensa-softmmu/hw/xtensa/xtfpga.o
LINK cris-linux-user/qemu-cris
CC m68k-softmmu/hw/vfio/common.o
CC sparc64-softmmu/hw/display/virtio-gpu.o
CC aarch64-softmmu/accel/tcg/cpu-exec.o
CC mips-softmmu/hw/9pfs/virtio-9p-device.o
CC mipsel-linux-user/target/mips/cpu.o
CC sh4eb-softmmu/accel/tcg/cpu-exec-common.o
CC or1k-softmmu/accel/tcg/cpu-exec.o
CC mipsn32el-linux-user/target/mips/dsp_helper.o
CC sparc32plus-linux-user/target/sparc/int64_helper.o
CC i386-softmmu/accel/tcg/translate-all.o
CC or1k-linux-user/trace/control-target.o
CC xtensaeb-softmmu/target/xtensa/translate.o
CC arm-linux-user/linux-user/arm/nwfpe/double_cpdo.o
CC i386-softmmu/accel/tcg/translator.o
CC nios2-linux-user/target/nios2/op_helper.o
CC sparc-softmmu/hw/net/vhost_net.o
CC ppcemb-softmmu/hw/core/generic-loader.o
CC microblaze-linux-user/target/microblaze/cpu.o
CC i386-softmmu/hw/9pfs/virtio-9p-device.o
CC nios2-linux-user/target/nios2/helper.o
CC microblazeel-softmmu/hw/misc/mmio_interface.o
CC unicore32-softmmu/target/unicore32/translate.o
CC sparc-linux-user/target/sparc/helper.o
CC nios2-softmmu/hw/vfio/spapr.o
LINK mips64el-linux-user/qemu-mips64el
CC tricore-softmmu/accel/stubs/hax-stub.o
CC nios2-softmmu/hw/nios2/boot.o
CC i386-linux-user/target/i386/cpu.o
CCAS ppc64abi32-linux-user/linux-user/safe-syscall.o
CC sh4-softmmu/hw/block/dataplane/virtio-blk.o
CC ppc64-softmmu/accel/tcg/tcg-all.o
CC s390x-softmmu/hw/block/virtio-blk.o
CC mipsel-softmmu/hw/misc/mips_itu.o
CC ppc64abi32-linux-user/target/ppc/cpu-models.o
CC sparc32plus-linux-user/target/sparc/vis_helper.o
CC ppc64le-linux-user/target/ppc/translate.o
CC xtensaeb-softmmu/target/xtensa/op_helper.o
CC ppc-softmmu/hw/display/virtio-gpu-3d.o
CC mipsn32el-linux-user/target/mips/op_helper.o
CC mipsel-linux-user/target/mips/gdbstub.o
CC xtensaeb-softmmu/target/xtensa/helper.o
CC ppcemb-softmmu/hw/core/null-machine.o
CC ppc64le-linux-user/target/ppc/kvm-stub.o
CC sparc32plus-linux-user/target/sparc/gdbstub.o
CC microblaze-linux-user/target/microblaze/gdbstub.o
GEN trace/generated-helpers.c
CC nios2-linux-user/target/nios2/cpu.o
CC xtensaeb-softmmu/target/xtensa/cpu.o
CC or1k-linux-user/trace/generated-helpers.o
CC xtensaeb-softmmu/target/xtensa/gdbstub.o
CC arm-linux-user/linux-user/arm/nwfpe/extended_cpdo.o
CC tricore-softmmu/accel/stubs/kvm-stub.o
CC microblaze-softmmu/hw/vfio/spapr.o
GEN trace/generated-helpers.c
CC sparc-softmmu/hw/net/rocker/qmp-norocker.o
CC aarch64-linux-user/target/arm/op_helper.o
CC mips64el-softmmu/accel/tcg/translator.o
CC or1k-softmmu/accel/tcg/cpu-exec-common.o
GEN trace/generated-helpers.c
CC x86_64-softmmu/hw/block/dataplane/virtio-blk.o
CC nios2-softmmu/hw/nios2/cpu_pic.o
CC ppc-linux-user/linux-user/uname.o
LINK sparc64-linux-user/qemu-sparc64
CC sparc32plus-linux-user/trace/control-target.o
CC microblazeel-softmmu/hw/net/xilinx_ethlite.o
CC xtensa-softmmu/target/xtensa/xtensa-semi.o
CC s390x-softmmu/hw/block/dataplane/virtio-blk.o
CC sparc-softmmu/hw/vfio/common.o
CC m68k-linux-user/target/m68k/gdbstub.o
CC nios2-linux-user/target/nios2/mmu.o
CC unicore32-softmmu/target/unicore32/op_helper.o
CC sparc-softmmu/hw/vfio/platform.o
CC moxie-softmmu/accel/tcg/cpu-exec-common.o
CC ppc64-softmmu/accel/tcg/cputlb.o
CC arm-softmmu/hw/block/dataplane/virtio-blk.o
CC unicore32-softmmu/target/unicore32/helper.o
CCAS ppc-linux-user/linux-user/safe-syscall.o
CC aarch64-softmmu/accel/tcg/cpu-exec-common.o
CC x86_64-linux-user/target/i386/mem_helper.o
CC mips64-softmmu/hw/core/null-machine.o
CC x86_64-softmmu/hw/char/virtio-serial-bus.o
CC x86_64-softmmu/hw/core/generic-loader.o
CC aarch64-softmmu/accel/tcg/translate-all.o
CC or1k-softmmu/accel/tcg/translate-all.o
CC lm32-softmmu/hw/vfio/platform.o
CC sh4eb-softmmu/accel/tcg/translate-all.o
CC xtensa-softmmu/target/xtensa/core-dc232b.o
CC ppc64-linux-user/target/ppc/translate.o
CC nios2-softmmu/hw/nios2/10m50_devboard.o
CC ppc64le-linux-user/target/ppc/dfp_helper.o
CC sh4-softmmu/hw/char/sh_serial.o
CC mips-linux-user/target/mips/gdbstub.o
LINK or1k-linux-user/qemu-or1k
CC xtensa-softmmu/target/xtensa/core-dc233c.o
CC microblaze-linux-user/trace/control-target.o
CC x86_64-softmmu/hw/core/null-machine.o
CC x86_64-softmmu/hw/display/vga.o
CC microblaze-softmmu/hw/microblaze/petalogix_s3adsp1800_mmu.o
CC mips64el-softmmu/hw/9pfs/virtio-9p-device.o
CC cris-softmmu/accel/tcg/translate-all.o
CC ppcemb-softmmu/hw/display/sm501.o
CC s390x-linux-user/target/s390x/gdbstub.o
CC mips-softmmu/hw/block/virtio-blk.o
CC s390x-linux-user/target/s390x/interrupt.o
GEN trace/generated-helpers.c
CC mipsel-softmmu/hw/misc/mmio_interface.o
GEN trace/generated-helpers.c
CC sparc64-softmmu/hw/display/virtio-gpu-3d.o
CC arm-linux-user/target/arm/arm-semi.o
CC mips64-linux-user/target/mips/helper.o
CC mipsn32el-linux-user/target/mips/lmi_helper.o
CC or1k-softmmu/accel/tcg/translator.o
CC moxie-softmmu/accel/tcg/translate-all.o
CC microblazeel-softmmu/hw/net/vhost_net.o
CC nios2-linux-user/trace/control-target.o
CC ppc64-linux-user/target/ppc/kvm-stub.o
CC ppc64-softmmu/accel/tcg/tcg-runtime.o
CC tilegx-linux-user/trace/generated-helpers.o
CC microblazeel-softmmu/hw/net/rocker/qmp-norocker.o
CC sparc-linux-user/target/sparc/cpu.o
CC alpha-softmmu/hw/net/vhost_net.o
CC alpha-softmmu/hw/scsi/virtio-scsi.o
CC tricore-softmmu/accel/tcg/tcg-all.o
CC sh4-linux-user/target/sh4/op_helper.o
CC i386-softmmu/hw/block/virtio-blk.o
CC sparc64-softmmu/hw/display/virtio-gpu-pci.o
CC nios2-softmmu/target/nios2/translate.o
CC s390x-linux-user/target/s390x/helper.o
CC ppc-softmmu/hw/display/virtio-gpu-pci.o
CC mipsel-softmmu/hw/net/virtio-net.o
CC m68k-softmmu/hw/vfio/platform.o
CC mips64-softmmu/hw/display/vga.o
CC ppc-softmmu/hw/i2c/ppc4xx_i2c.o
CC alpha-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC cris-softmmu/accel/tcg/translator.o
CC s390x-softmmu/hw/char/virtio-serial-bus.o
CC tricore-softmmu/accel/tcg/cputlb.o
CC xtensa-softmmu/target/xtensa/core-fsf.o
CC sh4-softmmu/hw/char/virtio-serial-bus.o
CC microblaze-linux-user/trace/generated-helpers.o
CC sparc64-softmmu/hw/misc/ivshmem.o
CC nios2-linux-user/trace/generated-helpers.o
CC sh4-linux-user/target/sh4/helper.o
CC aarch64-linux-user/target/arm/helper.o
CC arm-softmmu/hw/char/exynos4210_uart.o
CC microblazeel-softmmu/hw/vfio/common.o
CC mips64el-softmmu/hw/block/virtio-blk.o
CC mips-linux-user/target/mips/msa_helper.o
CC x86_64-softmmu/hw/display/virtio-gpu.o
CC sparc-softmmu/hw/vfio/spapr.o
CC s390x-softmmu/hw/char/terminal3270.o
CC sh4eb-softmmu/accel/tcg/translator.o
CC nios2-softmmu/target/nios2/op_helper.o
CC microblazeel-softmmu/hw/vfio/platform.o
GEN trace/generated-helpers.c
CC arm-linux-user/target/arm/kvm-stub.o
CC alpha-softmmu/hw/scsi/vhost-scsi-common.o
CC mipsel-softmmu/hw/net/vhost_net.o
CC alpha-softmmu/hw/scsi/vhost-scsi.o
CC m68k-linux-user/trace/control-target.o
CC microblaze-softmmu/hw/microblaze/petalogix_ml605_mmu.o
CC ppc64-softmmu/accel/tcg/cpu-exec.o
CC aarch64-linux-user/target/arm/cpu.o
CC ppc64-softmmu/accel/tcg/cpu-exec-common.o
CC sh4-softmmu/hw/core/generic-loader.o
CC unicore32-softmmu/target/unicore32/cpu.o
CC alpha-softmmu/hw/scsi/vhost-user-scsi.o
LINK tilegx-linux-user/qemu-tilegx
CC microblazeel-linux-user/trace/control-target.o
CC nios2-softmmu/target/nios2/helper.o
CC mips64el-softmmu/hw/block/dataplane/virtio-blk.o
CC microblaze-softmmu/hw/microblaze/boot.o
CC aarch64-softmmu/accel/tcg/translator.o
CC sh4eb-softmmu/hw/9pfs/virtio-9p-device.o
CC mipsel-linux-user/target/mips/msa_helper.o
CC ppc64abi32-linux-user/target/ppc/cpu.o
CC xtensa-softmmu/target/xtensa/monitor.o
CC m68k-softmmu/hw/vfio/spapr.o
CC sparc64-softmmu/hw/misc/mmio_interface.o
CC m68k-softmmu/hw/m68k/an5206.o
CC mips-linux-user/target/mips/mips-semi.o
CC mipsel-linux-user/target/mips/mips-semi.o
CC arm-softmmu/hw/char/omap_uart.o
GEN trace/generated-helpers.c
CC aarch64-softmmu/hw/9pfs/virtio-9p-device.o
CC m68k-softmmu/hw/m68k/mcf5208.o
CC ppc64-linux-user/target/ppc/dfp_helper.o
CC arm-softmmu/hw/char/digic-uart.o
CC aarch64-softmmu/hw/adc/stm32f2xx_adc.o
CC ppc-softmmu/hw/intc/openpic_kvm.o
CC alpha-softmmu/hw/timer/mc146818rtc.o
CC lm32-softmmu/hw/vfio/spapr.o
GEN trace/generated-helpers.c
LINK microblaze-linux-user/qemu-microblaze
CC aarch64-linux-user/target/arm/neon_helper.o
CC sh4-linux-user/target/sh4/cpu.o
CC sparc-linux-user/target/sparc/fop_helper.o
CC x86_64-softmmu/hw/display/virtio-gpu-3d.o
CC nios2-softmmu/target/nios2/cpu.o
CC xtensa-softmmu/target/xtensa/translate.o
CC sparc32plus-linux-user/trace/generated-helpers.o
LINK nios2-linux-user/qemu-nios2
CC mips64el-softmmu/hw/char/virtio-serial-bus.o
CC arm-linux-user/target/arm/translate.o
CC ppcemb-softmmu/hw/display/vga.o
CC moxie-softmmu/accel/tcg/translator.o
CC ppc64-softmmu/accel/tcg/translate-all.o
CC arm-softmmu/hw/char/stm32f2xx_usart.o
CC cris-softmmu/hw/core/generic-loader.o
CC mips-softmmu/hw/block/dataplane/virtio-blk.o
CC s390x-linux-user/target/s390x/cc_helper.o
CC s390x-linux-user/target/s390x/translate.o
CC nios2-softmmu/target/nios2/mmu.o
GEN trace/generated-helpers.c
CC mips-softmmu/hw/char/virtio-serial-bus.o
CC xtensa-softmmu/target/xtensa/op_helper.o
CC s390x-softmmu/hw/core/generic-loader.o
CC arm-linux-user/target/arm/op_helper.o
CC x86_64-softmmu/hw/display/virtio-gpu-pci.o
CC sh4-softmmu/hw/core/null-machine.o
CC ppc64-softmmu/accel/tcg/translator.o
CC unicore32-softmmu/target/unicore32/ucf64_helper.o
CC ppc64-softmmu/hw/9pfs/virtio-9p-device.o
CC lm32-softmmu/hw/lm32/lm32_boards.o
CC arm-linux-user/target/arm/helper.o
CC sparc64-softmmu/hw/net/virtio-net.o
CC unicore32-softmmu/target/unicore32/softmmu.o
CC or1k-softmmu/hw/core/generic-loader.o
GEN trace/generated-helpers.c
CC sh4eb-softmmu/hw/block/tc58128.o
CC s390x-linux-user/target/s390x/excp_helper.o
CC microblaze-softmmu/target/microblaze/translate.o
CC i386-softmmu/hw/block/dataplane/virtio-blk.o
CC i386-softmmu/hw/char/virtio-serial-bus.o
CC xtensaeb-softmmu/trace/control-target.o
CC mips64el-softmmu/hw/core/generic-loader.o
CC i386-softmmu/hw/core/generic-loader.o
CC arm-linux-user/target/arm/cpu.o
CC microblazeel-softmmu/hw/vfio/spapr.o
CC ppcemb-softmmu/hw/display/virtio-gpu.o
CC sparc-softmmu/hw/sparc/sun4m.o
CC sparc-softmmu/hw/sparc/leon3.o
CC microblaze-softmmu/target/microblaze/op_helper.o
CC m68k-linux-user/gdbstub-xml.o
CC arm-softmmu/hw/char/bcm2835_aux.o
CC microblazeel-linux-user/trace/generated-helpers.o
CC ppc-softmmu/hw/misc/ivshmem.o
CC m68k-softmmu/hw/m68k/mcf5206.o
CC ppc64le-linux-user/target/ppc/excp_helper.o
CC mips64-softmmu/hw/display/virtio-gpu.o
CC aarch64-linux-user/target/arm/iwmmxt_helper.o
CC x86_64-linux-user/target/i386/misc_helper.o
CC i386-linux-user/target/i386/gdbstub.o
CC x86_64-linux-user/target/i386/mpx_helper.o
CC arm-softmmu/hw/char/virtio-serial-bus.o
CC mipsel-softmmu/hw/scsi/virtio-scsi.o
CC unicore32-softmmu/trace/control-target.o
CC s390x-softmmu/hw/core/null-machine.o
CC s390x-linux-user/target/s390x/fpu_helper.o
CC mipsel-linux-user/trace/control-target.o
CC sparc64-softmmu/hw/net/vhost_net.o
CC arm-softmmu/hw/core/generic-loader.o
CC cris-softmmu/hw/core/null-machine.o
CC nios2-softmmu/target/nios2/monitor.o
CC sh4eb-softmmu/hw/block/virtio-blk.o
CC ppc-linux-user/target/ppc/cpu-models.o
CC moxie-softmmu/hw/core/generic-loader.o
CC ppcemb-softmmu/hw/display/virtio-gpu-3d.o
CC microblazeel-softmmu/hw/microblaze/petalogix_s3adsp1800_mmu.o
CC ppc-softmmu/hw/misc/mmio_interface.o
CC aarch64-softmmu/hw/block/virtio-blk.o
CC lm32-softmmu/hw/lm32/milkymist.o
CC moxie-softmmu/hw/core/null-machine.o
CC sparc-linux-user/target/sparc/cc_helper.o
CC alpha-softmmu/hw/vfio/common.o
CC or1k-softmmu/hw/core/null-machine.o
CC tricore-softmmu/accel/tcg/tcg-runtime.o
CC ppc-linux-user/target/ppc/cpu.o
CC mips64-softmmu/hw/display/virtio-gpu-3d.o
CC mips64el-softmmu/hw/core/null-machine.o
CC armeb-linux-user/trace/control-target.o
CC m68k-softmmu/hw/m68k/mcf_intc.o
CC cris-softmmu/hw/misc/mmio_interface.o
CC sparc64-softmmu/hw/scsi/virtio-scsi.o
CC microblaze-softmmu/target/microblaze/helper.o
CC alpha-softmmu/hw/vfio/pci.o
CC sh4-softmmu/hw/display/sm501.o
CC arm-linux-user/target/arm/neon_helper.o
CC i386-linux-user/target/i386/xsave_helper.o
CC mipsn32el-linux-user/target/mips/helper.o
CC m68k-softmmu/target/m68k/m68k-semi.o
CC microblazeel-softmmu/hw/microblaze/petalogix_ml605_mmu.o
CC x86_64-softmmu/hw/display/virtio-vga.o
CC arm-linux-user/target/arm/iwmmxt_helper.o
CC m68k-softmmu/target/m68k/translate.o
CC mipsn32-linux-user/target/mips/lmi_helper.o
CC mips-softmmu/hw/core/generic-loader.o
CC aarch64-linux-user/target/arm/gdbstub.o
CC sh4eb-softmmu/hw/block/dataplane/virtio-blk.o
CC sparc-softmmu/target/sparc/machine.o
CC m68k-linux-user/trace/generated-helpers.o
CC microblazeel-softmmu/hw/microblaze/boot.o
CC ppc-softmmu/hw/net/xilinx_ethlite.o
CC s390x-softmmu/hw/display/virtio-gpu.o
CC ppc-softmmu/hw/net/virtio-net.o
GEN trace/generated-helpers.c
CC sparc-linux-user/target/sparc/win_helper.o
CC s390x-softmmu/hw/display/virtio-gpu-3d.o
CC mips-linux-user/trace/control-target.o
CC xtensa-softmmu/target/xtensa/helper.o
LINK microblazeel-linux-user/qemu-microblazeel
CC i386-softmmu/hw/core/null-machine.o
CC lm32-softmmu/target/lm32/translate.o
CC aarch64-linux-user/target/arm/cpu64.o
CC moxie-softmmu/hw/display/vga.o
CC mipsn32-linux-user/target/mips/helper.o
CC nios2-softmmu/trace/control-target.o
CC or1k-softmmu/hw/intc/ompic.o
CC sparc64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC ppc64-softmmu/hw/block/virtio-blk.o
CC mips-softmmu/hw/core/null-machine.o
CC x86_64-linux-user/target/i386/seg_helper.o
CC cris-softmmu/hw/net/etraxfs_eth.o
CC arm-linux-user/target/arm/gdbstub.o
CC ppc-linux-user/target/ppc/translate.o
CC mips64el-softmmu/hw/display/vga.o
CC lm32-softmmu/target/lm32/op_helper.o
CC unicore32-softmmu/trace/generated-helpers.o
CC mipsel-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC moxie-softmmu/hw/misc/mmio_interface.o
CC mipsel-softmmu/hw/scsi/vhost-scsi-common.o
CC mipsn32el-linux-user/target/mips/cpu.o
CC mips64-linux-user/target/mips/cpu.o
CC arm-linux-user/target/arm/crypto_helper.o
CC xtensa-softmmu/target/xtensa/cpu.o
CC s390x-linux-user/target/s390x/int_helper.o
CC ppc64abi32-linux-user/target/ppc/translate.o
CC xtensa-softmmu/target/xtensa/gdbstub.o
CC i386-softmmu/hw/display/vga.o
GEN trace/generated-helpers.c
CC sh4eb-softmmu/hw/char/sh_serial.o
CC i386-linux-user/target/i386/translate.o
CC i386-softmmu/hw/display/virtio-gpu.o
CC sparc64-softmmu/hw/scsi/vhost-scsi-common.o
CC s390x-softmmu/hw/display/virtio-gpu-pci.o
CC x86_64-softmmu/hw/intc/apic.o
CC arm-linux-user/trace/control-target.o
CC sparc64-softmmu/hw/scsi/vhost-scsi.o
CC x86_64-softmmu/hw/intc/apic_common.o
CC mips-softmmu/hw/display/vga.o
CC sparc-linux-user/target/sparc/mmu_helper.o
CC sh4eb-softmmu/hw/char/virtio-serial-bus.o
CC aarch64-linux-user/target/arm/translate-a64.o
CC microblazeel-softmmu/target/microblaze/translate.o
CC ppc64le-linux-user/target/ppc/fpu_helper.o
CC arm-softmmu/hw/core/null-machine.o
CC s390x-linux-user/target/s390x/mem_helper.o
CC aarch64-softmmu/hw/block/dataplane/virtio-blk.o
CC moxie-softmmu/hw/net/vhost_net.o
CC microblazeel-softmmu/target/microblaze/op_helper.o
CC sh4-linux-user/target/sh4/gdbstub.o
CC ppc64abi32-linux-user/target/ppc/kvm-stub.o
CC or1k-softmmu/hw/misc/mmio_interface.o
CC lm32-softmmu/target/lm32/helper.o
CC armeb-linux-user/gdbstub-xml.o
CC i386-linux-user/target/i386/bpt_helper.o
CC moxie-softmmu/hw/net/rocker/qmp-norocker.o
CC ppc-softmmu/hw/net/vhost_net.o
CC nios2-softmmu/trace/generated-helpers.o
GEN trace/generated-helpers.c
CC cris-softmmu/hw/net/vhost_net.o
CC arm-softmmu/hw/cpu/arm11mpcore.o
CC cris-softmmu/hw/net/rocker/qmp-norocker.o
CC sparc-linux-user/target/sparc/ldst_helper.o
CC sparc64-softmmu/hw/scsi/vhost-user-scsi.o
CC cris-softmmu/hw/vfio/common.o
CC ppcemb-softmmu/hw/display/virtio-gpu-pci.o
CC sparc-softmmu/target/sparc/monitor.o
CC sh4-softmmu/hw/display/vga.o
LINK unicore32-softmmu/qemu-system-unicore32
CC microblazeel-softmmu/target/microblaze/helper.o
CC ppcemb-softmmu/hw/i2c/ppc4xx_i2c.o
CC x86_64-softmmu/hw/intc/ioapic.o
GEN trace/generated-helpers.c
CC mipsn32-linux-user/target/mips/cpu.o
CC xtensaeb-softmmu/trace/generated-helpers.o
CC sh4eb-softmmu/hw/core/generic-loader.o
CC sparc-linux-user/target/sparc/int32_helper.o
CC sh4-softmmu/hw/display/virtio-gpu.o
CC cris-softmmu/hw/vfio/platform.o
CC or1k-softmmu/hw/net/vhost_net.o
CC sparc-linux-user/target/sparc/gdbstub.o
CC ppcemb-softmmu/hw/misc/ivshmem.o
CC ppc-linux-user/target/ppc/kvm-stub.o
CC arm-linux-user/gdbstub-xml.o
CC ppc64-linux-user/target/ppc/excp_helper.o
CC i386-linux-user/target/i386/cc_helper.o
CC arm-softmmu/hw/cpu/realview_mpcore.o
CC s390x-softmmu/hw/intc/s390_flic.o
CC mips64el-softmmu/hw/display/virtio-gpu.o
CC ppc-linux-user/target/ppc/dfp_helper.o
CC mipsel-softmmu/hw/scsi/vhost-scsi.o
CC mipsn32-linux-user/target/mips/gdbstub.o
CC microblazeel-softmmu/target/microblaze/cpu.o
CC i386-softmmu/hw/display/virtio-gpu-3d.o
CC mipsel-softmmu/hw/scsi/vhost-user-scsi.o
CC mips64-softmmu/hw/display/virtio-gpu-pci.o
CC aarch64-softmmu/hw/char/exynos4210_uart.o
CC sh4-linux-user/trace/control-target.o
CC sparc-softmmu/target/sparc/translate.o
CC ppc64abi32-linux-user/target/ppc/dfp_helper.o
CC mips64el-softmmu/hw/display/virtio-gpu-3d.o
CC ppc64abi32-linux-user/target/ppc/excp_helper.o
CC ppc64-linux-user/target/ppc/fpu_helper.o
CC mips-softmmu/hw/display/virtio-gpu.o
CC s390x-softmmu/hw/misc/mmio_interface.o
CC mips64-linux-user/target/mips/gdbstub.o
LINK nios2-softmmu/qemu-system-nios2
CC ppcemb-softmmu/hw/misc/mmio_interface.o
CC i386-linux-user/target/i386/excp_helper.o
CC alpha-softmmu/hw/vfio/pci-quirks.o
CC armeb-linux-user/trace/generated-helpers.o
GEN trace/generated-helpers.c
CC m68k-softmmu/target/m68k/op_helper.o
CC moxie-softmmu/hw/timer/mc146818rtc.o
CC mips-linux-user/trace/generated-helpers.o
CC moxie-softmmu/hw/vfio/common.o
CC sparc-softmmu/target/sparc/helper.o
CC sparc64-softmmu/hw/timer/mc146818rtc.o
CC or1k-softmmu/hw/net/rocker/qmp-norocker.o
CC sparc64-softmmu/hw/vfio/common.o
CC moxie-softmmu/hw/vfio/platform.o
CC ppc-softmmu/hw/net/fsl_etsec/etsec.o
CC sparc64-softmmu/hw/vfio/pci.o
CC mipsel-linux-user/trace/generated-helpers.o
CC ppc64-softmmu/hw/block/dataplane/virtio-blk.o
CC sh4eb-softmmu/hw/core/null-machine.o
CC arm-softmmu/hw/cpu/a9mpcore.o
CC mips64el-softmmu/hw/display/virtio-gpu-pci.o
CC s390x-softmmu/hw/net/virtio-net.o
CC or1k-softmmu/hw/vfio/common.o
CC mips64-softmmu/hw/intc/mips_gic.o
CC sparc-linux-user/trace/control-target.o
CC moxie-softmmu/hw/vfio/spapr.o
CC mipsn32el-linux-user/target/mips/gdbstub.o
CC microblazeel-softmmu/target/microblaze/gdbstub.o
CC s390x-softmmu/hw/net/vhost_net.o
CC lm32-softmmu/target/lm32/cpu.o
CC sh4-softmmu/hw/display/virtio-gpu-3d.o
CC aarch64-softmmu/hw/char/omap_uart.o
CC tricore-softmmu/accel/tcg/cpu-exec.o
CC mipsel-softmmu/hw/timer/mips_gictimer.o
CC mipsel-softmmu/hw/timer/mc146818rtc.o
CC cris-softmmu/hw/vfio/spapr.o
CC ppc-linux-user/target/ppc/excp_helper.o
CC ppcemb-softmmu/hw/net/xilinx_ethlite.o
CC moxie-softmmu/hw/moxie/moxiesim.o
CC mips-softmmu/hw/display/virtio-gpu-3d.o
CC sh4-linux-user/trace/generated-helpers.o
CC xtensa-softmmu/trace/control-target.o
CC mips64el-softmmu/hw/intc/mips_gic.o
CC ppc-softmmu/hw/net/fsl_etsec/registers.o
CC microblaze-softmmu/target/microblaze/cpu.o
CC sparc64-softmmu/hw/vfio/pci-quirks.o
CC ppc64abi32-linux-user/target/ppc/fpu_helper.o
CC ppc-linux-user/target/ppc/fpu_helper.o
CC lm32-softmmu/target/lm32/gdbstub.o
CC x86_64-softmmu/hw/isa/lpc_ich9.o
CC x86_64-linux-user/target/i386/smm_helper.o
CC s390x-softmmu/hw/net/rocker/qmp-norocker.o
CC sh4eb-softmmu/hw/display/sm501.o
CC sh4-softmmu/hw/display/virtio-gpu-pci.o
LINK m68k-linux-user/qemu-m68k
CC alpha-softmmu/hw/vfio/platform.o
CC ppc64abi32-linux-user/target/ppc/int_helper.o
CC ppc-softmmu/hw/net/fsl_etsec/rings.o
CC ppc-linux-user/target/ppc/int_helper.o
CC mipsn32-linux-user/target/mips/msa_helper.o
CC microblazeel-softmmu/target/microblaze/mmu.o
CC cris-softmmu/hw/cris/boot.o
CC arm-softmmu/hw/cpu/a15mpcore.o
CC ppc-linux-user/target/ppc/timebase_helper.o
CC ppc64-softmmu/hw/char/spapr_vty.o
CC m68k-softmmu/target/m68k/helper.o
CC sparc-softmmu/target/sparc/cpu.o
CC arm-softmmu/hw/display/omap_dss.o
CC mipsn32-linux-user/target/mips/mips-semi.o
LINK sparc32plus-linux-user/qemu-sparc32plus
CC arm-softmmu/hw/display/omap_lcdc.o
CC mips64el-softmmu/hw/misc/ivshmem.o
CC aarch64-softmmu/hw/char/digic-uart.o
GEN trace/generated-helpers.c
CC lm32-softmmu/target/lm32/lm32-semi.o
LINK sh4-linux-user/qemu-sh4
CC i386-linux-user/target/i386/fpu_helper.o
CC sh4eb-softmmu/hw/display/vga.o
CC tricore-softmmu/accel/tcg/cpu-exec-common.o
CC sparc-linux-user/trace/generated-helpers.o
GEN trace/generated-helpers.c
CC m68k-softmmu/target/m68k/cpu.o
CC cris-softmmu/hw/cris/axis_dev88.o
CC lm32-softmmu/target/lm32/machine.o
CC i386-linux-user/target/i386/int_helper.o
CC cris-softmmu/target/cris/translate.o
CC x86_64-linux-user/target/i386/svm_helper.o
CC ppcemb-softmmu/hw/net/virtio-net.o
CC mipsn32-linux-user/trace/control-target.o
CC s390x-linux-user/target/s390x/misc_helper.o
CC aarch64-softmmu/hw/char/stm32f2xx_usart.o
CC mips64-softmmu/hw/misc/ivshmem.o
CC ppc-softmmu/hw/net/fsl_etsec/miim.o
CC microblaze-softmmu/target/microblaze/gdbstub.o
CC sparc-softmmu/target/sparc/fop_helper.o
CC tricore-softmmu/accel/tcg/translate-all.o
CC aarch64-softmmu/hw/char/bcm2835_aux.o
CC x86_64-softmmu/hw/misc/vmport.o
CC microblazeel-softmmu/trace/control-target.o
CC cris-softmmu/target/cris/op_helper.o
CC s390x-softmmu/hw/scsi/virtio-scsi.o
CC x86_64-linux-user/target/i386/kvm-stub.o
CC mipsn32el-linux-user/target/mips/msa_helper.o
CC mipsn32el-linux-user/target/mips/mips-semi.o
GEN trace/generated-helpers.c
CC mipsn32-linux-user/trace/generated-helpers.o
CC ppc64abi32-linux-user/target/ppc/timebase_helper.o
CC s390x-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC sh4eb-softmmu/hw/display/virtio-gpu.o
CC ppc-softmmu/hw/scsi/virtio-scsi.o
CC arm-softmmu/hw/display/pxa2xx_lcd.o
CC s390x-linux-user/target/s390x/crypto_helper.o
CC sh4-softmmu/hw/intc/sh_intc.o
CC arm-linux-user/trace/generated-helpers.o
CC sh4-softmmu/hw/misc/ivshmem.o
CC ppc64-softmmu/hw/char/virtio-serial-bus.o
CC sparc64-softmmu/hw/vfio/platform.o
CC sparc64-softmmu/hw/vfio/spapr.o
LINK xtensaeb-softmmu/qemu-system-xtensaeb
CC ppc-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC ppcemb-softmmu/hw/net/vhost_net.o
CC lm32-softmmu/trace/control-target.o
CC moxie-softmmu/target/moxie/translate.o
CC mips64-linux-user/target/mips/msa_helper.o
CC s390x-softmmu/hw/scsi/vhost-scsi-common.o
CC x86_64-softmmu/hw/misc/ivshmem.o
CC mipsel-softmmu/hw/vfio/common.o
CC mips64-linux-user/target/mips/mips-semi.o
CC or1k-softmmu/hw/vfio/platform.o
CC sparc-softmmu/target/sparc/cc_helper.o
CC m68k-softmmu/target/m68k/fpu_helper.o
CC cris-softmmu/target/cris/helper.o
CC i386-softmmu/hw/display/virtio-gpu-pci.o
GEN trace/generated-helpers.c
CC mips-softmmu/hw/display/virtio-gpu-pci.o
CC alpha-softmmu/hw/vfio/spapr.o
CC microblaze-softmmu/target/microblaze/mmu.o
CC ppc64abi32-linux-user/target/ppc/misc_helper.o
LINK sparc-linux-user/qemu-sparc
CC s390x-linux-user/target/s390x/kvm-stub.o
CC mips64el-softmmu/hw/misc/mips_cmgcr.o
GEN trace/generated-helpers.c
CC ppc-softmmu/hw/scsi/vhost-scsi-common.o
CC mipsel-softmmu/hw/vfio/pci.o
CC aarch64-softmmu/hw/char/virtio-serial-bus.o
CC m68k-softmmu/target/m68k/gdbstub.o
CC ppc64-linux-user/target/ppc/int_helper.o
GEN trace/generated-helpers.c
CC mips-softmmu/hw/intc/mips_gic.o
CC moxie-softmmu/target/moxie/helper.o
GEN trace/generated-helpers.c
CC aarch64-softmmu/hw/core/generic-loader.o
CC moxie-softmmu/target/moxie/machine.o
CC or1k-softmmu/hw/vfio/spapr.o
CC tricore-softmmu/accel/tcg/translator.o
GEN trace/generated-helpers.c
CC sparc64-softmmu/hw/virtio/virtio.o
CC cris-softmmu/target/cris/cpu.o
CC cris-softmmu/target/cris/gdbstub.o
CC lm32-softmmu/trace/generated-helpers.o
CC aarch64-softmmu/hw/core/null-machine.o
CC aarch64-softmmu/hw/cpu/arm11mpcore.o
CC mips-softmmu/hw/misc/ivshmem.o
CC aarch64-softmmu/hw/cpu/realview_mpcore.o
CC s390x-softmmu/hw/scsi/vhost-scsi.o
CC cris-softmmu/target/cris/mmu.o
CC moxie-softmmu/target/moxie/cpu.o
CC tricore-softmmu/hw/core/generic-loader.o
CC ppcemb-softmmu/hw/scsi/virtio-scsi.o
CC ppc64-linux-user/target/ppc/timebase_helper.o
CC arm-softmmu/hw/display/bcm2835_fb.o
CC s390x-softmmu/hw/scsi/vhost-user-scsi.o
CC mips-softmmu/hw/misc/mips_cmgcr.o
CC i386-softmmu/hw/display/virtio-vga.o
CC microblaze-softmmu/trace/control-target.o
CC cris-softmmu/target/cris/machine.o
CC ppc-linux-user/target/ppc/misc_helper.o
CC sh4-softmmu/hw/misc/mmio_interface.o
CC moxie-softmmu/target/moxie/mmu.o
CC ppc-linux-user/target/ppc/mem_helper.o
CC i386-softmmu/hw/intc/apic.o
CC mips64-softmmu/hw/misc/mips_cmgcr.o
CC sparc64-softmmu/hw/virtio/virtio-balloon.o
CC aarch64-softmmu/hw/cpu/a9mpcore.o
CC m68k-softmmu/trace/control-target.o
CC ppc-linux-user/target/ppc/user_only_helper.o
CC sh4-softmmu/hw/net/virtio-net.o
CC x86_64-linux-user/trace/control-target.o
GEN trace/generated-helpers.c
CC x86_64-softmmu/hw/misc/pvpanic.o
CC mips64el-softmmu/hw/misc/mips_cpc.o
CC mips-softmmu/hw/misc/mips_cpc.o
CC ppc64le-linux-user/target/ppc/int_helper.o
CC aarch64-linux-user/target/arm/helper-a64.o
CC mipsel-softmmu/hw/vfio/pci-quirks.o
CC ppc64-linux-user/target/ppc/misc_helper.o
GEN trace/generated-helpers.c
CC mips64-linux-user/trace/control-target.o
CC alpha-softmmu/hw/virtio/virtio.o
CC alpha-softmmu/hw/virtio/virtio-balloon.o
CC ppc64abi32-linux-user/target/ppc/mem_helper.o
CC ppcemb-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC s390x-softmmu/hw/vfio/common.o
CC mips-softmmu/hw/misc/mips_itu.o
CC sparc-softmmu/target/sparc/win_helper.o
CC xtensa-softmmu/trace/generated-helpers.o
CC ppc-linux-user/target/ppc/gdbstub.o
CC or1k-softmmu/hw/openrisc/pic_cpu.o
CC mips64-softmmu/hw/misc/mips_cpc.o
CC ppc64abi32-linux-user/target/ppc/user_only_helper.o
CC s390x-softmmu/hw/vfio/pci.o
CC mipsel-softmmu/hw/vfio/platform.o
CC arm-softmmu/hw/display/vga.o
CC ppc-softmmu/hw/scsi/vhost-scsi.o
CC or1k-softmmu/hw/openrisc/cputimer.o
CC alpha-softmmu/hw/virtio/vhost.o
CC ppc64-softmmu/hw/core/generic-loader.o
CC mipsn32el-linux-user/trace/control-target.o
CC mips64-softmmu/hw/misc/mips_itu.o
CC m68k-softmmu/gdbstub-xml.o
CC or1k-softmmu/hw/openrisc/openrisc_sim.o
CC mips64el-softmmu/hw/misc/mips_itu.o
CC s390x-linux-user/trace/control-target.o
CC or1k-softmmu/target/openrisc/machine.o
CC sh4eb-softmmu/hw/display/virtio-gpu-3d.o
CC tricore-softmmu/hw/core/null-machine.o
CC ppc64-softmmu/hw/core/null-machine.o
CC x86_64-softmmu/hw/misc/mmio_interface.o
CC tricore-softmmu/hw/misc/mmio_interface.o
GEN trace/generated-helpers.c
CC microblaze-softmmu/trace/generated-helpers.o
CC i386-linux-user/target/i386/mem_helper.o
CC ppc64-linux-user/target/ppc/mem_helper.o
LINK lm32-softmmu/qemu-system-lm32
CC arm-softmmu/hw/display/virtio-gpu.o
CC microblazeel-softmmu/trace/generated-helpers.o
CC mips-softmmu/hw/misc/mmio_interface.o
CC aarch64-linux-user/target/arm/gdbstub64.o
CC ppc-linux-user/target/ppc/../../libdecnumber/decContext.o
CC s390x-softmmu/hw/vfio/pci-quirks.o
CC i386-linux-user/target/i386/misc_helper.o
CC arm-softmmu/hw/display/virtio-gpu-3d.o
CC or1k-softmmu/target/openrisc/cpu.o
CC alpha-softmmu/hw/virtio/vhost-backend.o
CC aarch64-softmmu/hw/cpu/a15mpcore.o
CC ppc-softmmu/hw/scsi/vhost-user-scsi.o
CC tricore-softmmu/hw/net/vhost_net.o
CC i386-linux-user/target/i386/mpx_helper.o
CC mips64el-softmmu/hw/misc/mmio_interface.o
CC x86_64-linux-user/gdbstub-xml.o
CC i386-softmmu/hw/intc/apic_common.o
CC i386-linux-user/target/i386/seg_helper.o
CC x86_64-softmmu/hw/net/virtio-net.o
CC cris-softmmu/trace/control-target.o
CC alpha-softmmu/hw/virtio/vhost-user.o
CC x86_64-softmmu/hw/net/vhost_net.o
CC ppc64le-linux-user/target/ppc/timebase_helper.o
CC ppc64-linux-user/target/ppc/user_only_helper.o
CC sh4-softmmu/hw/net/vhost_net.o
CC or1k-softmmu/target/openrisc/exception.o
CC mips64-softmmu/hw/misc/mmio_interface.o
CC moxie-softmmu/trace/control-target.o
CC mips-softmmu/hw/net/virtio-net.o
CC ppcemb-softmmu/hw/scsi/vhost-scsi-common.o
CC ppc64-linux-user/target/ppc/gdbstub.o
CC ppc-softmmu/hw/timer/mc146818rtc.o
CC sparc-softmmu/target/sparc/mmu_helper.o
CC sparc-softmmu/target/sparc/ldst_helper.o
CC ppc64-softmmu/hw/display/sm501.o
CC s390x-linux-user/gdbstub-xml.o
CC ppcemb-softmmu/hw/scsi/vhost-scsi.o
CC arm-softmmu/hw/display/virtio-gpu-pci.o
CC sh4eb-softmmu/hw/display/virtio-gpu-pci.o
CC i386-softmmu/hw/intc/ioapic.o
CC ppcemb-softmmu/hw/scsi/vhost-user-scsi.o
CC aarch64-softmmu/hw/display/omap_dss.o
CC ppc-softmmu/hw/vfio/common.o
CC ppc64-linux-user/target/ppc/../../libdecnumber/decContext.o
CC sparc-softmmu/target/sparc/int32_helper.o
CC mips64-softmmu/hw/net/virtio-net.o
CC i386-softmmu/hw/isa/lpc_ich9.o
CC tricore-softmmu/hw/net/rocker/qmp-norocker.o
LINK microblaze-softmmu/qemu-system-microblaze
CC sh4eb-softmmu/hw/intc/sh_intc.o
CC mips64el-softmmu/hw/net/virtio-net.o
CC i386-softmmu/hw/misc/vmport.o
LINK microblazeel-softmmu/qemu-system-microblazeel
CC ppc64-softmmu/hw/display/vga.o
CC x86_64-linux-user/trace/generated-helpers.o
CC tricore-softmmu/hw/vfio/common.o
CC mips64-softmmu/hw/net/vhost_net.o
CC x86_64-softmmu/hw/scsi/virtio-scsi.o
CC i386-softmmu/hw/misc/ivshmem.o
CC mipsel-softmmu/hw/vfio/spapr.o
CC ppcemb-softmmu/hw/vfio/common.o
CC mipsel-softmmu/hw/virtio/virtio.o
CC s390x-softmmu/hw/vfio/ccw.o
CC mips64-softmmu/hw/scsi/virtio-scsi.o
CC sparc64-softmmu/hw/virtio/vhost.o
CC sh4-softmmu/hw/scsi/virtio-scsi.o
LINK xtensa-softmmu/qemu-system-xtensa
CC mipsel-softmmu/hw/virtio/virtio-balloon.o
CC or1k-softmmu/target/openrisc/interrupt.o
CC m68k-softmmu/trace/generated-helpers.o
CC s390x-linux-user/trace/generated-helpers.o
CC ppc-softmmu/hw/vfio/pci.o
CC ppcemb-softmmu/hw/vfio/pci.o
CC ppcemb-softmmu/hw/vfio/pci-quirks.o
CC or1k-softmmu/target/openrisc/mmu.o
CC s390x-softmmu/hw/vfio/platform.o
CC sh4-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC ppc64abi32-linux-user/target/ppc/gdbstub.o
CC ppcemb-softmmu/hw/vfio/platform.o
CC mips64-linux-user/trace/generated-helpers.o
CC aarch64-linux-user/target/arm/crypto_helper.o
CC i386-linux-user/target/i386/smm_helper.o
GEN trace/generated-helpers.c
CC ppc64abi32-linux-user/target/ppc/../../libdecnumber/decContext.o
CC sparc64-softmmu/hw/virtio/vhost-backend.o
CC mips64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC sparc-softmmu/target/sparc/gdbstub.o
CC sh4eb-softmmu/hw/misc/ivshmem.o
CC sh4eb-softmmu/hw/misc/mmio_interface.o
CC moxie-softmmu/trace/generated-helpers.o
CC mipsn32el-linux-user/trace/generated-helpers.o
CC s390x-softmmu/hw/vfio/spapr.o
CC mipsel-softmmu/hw/virtio/vhost.o
CC aarch64-linux-user/trace/control-target.o
CC aarch64-softmmu/hw/display/omap_lcdc.o
CC s390x-softmmu/hw/virtio/virtio.o
CC ppc-softmmu/hw/vfio/pci-quirks.o
CC ppc64le-linux-user/target/ppc/misc_helper.o
CC ppc64-softmmu/hw/display/virtio-gpu.o
CC arm-softmmu/hw/dma/omap_dma.o
CC ppc64-linux-user/target/ppc/../../libdecnumber/decNumber.o
CC i386-linux-user/target/i386/svm_helper.o
CC arm-softmmu/hw/dma/soc_dma.o
CC aarch64-softmmu/hw/display/pxa2xx_lcd.o
GEN trace/generated-helpers.c
CC sh4-softmmu/hw/scsi/vhost-scsi-common.o
CC or1k-softmmu/target/openrisc/translate.o
CC mips-softmmu/hw/net/vhost_net.o
CC tricore-softmmu/hw/vfio/platform.o
CC ppc64-linux-user/target/ppc/../../libdecnumber/dpd/decimal32.o
CC ppc-softmmu/hw/vfio/platform.o
CC sparc-softmmu/trace/control-target.o
CC aarch64-softmmu/hw/display/bcm2835_fb.o
CC mipsel-softmmu/hw/virtio/vhost-backend.o
CC ppc64le-linux-user/target/ppc/mem_helper.o
CC x86_64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC mips64el-softmmu/hw/net/vhost_net.o
CC x86_64-softmmu/hw/scsi/vhost-scsi-common.o
CC i386-linux-user/target/i386/kvm-stub.o
CC ppc64-softmmu/hw/display/virtio-gpu-3d.o
CC tricore-softmmu/hw/vfio/spapr.o
CC ppc-linux-user/target/ppc/../../libdecnumber/decNumber.o
CC mips64el-softmmu/hw/scsi/virtio-scsi.o
CC mipsel-softmmu/hw/virtio/vhost-user.o
CC arm-softmmu/hw/dma/pxa2xx_dma.o
CC mips64el-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC mips-softmmu/hw/scsi/virtio-scsi.o
CC i386-softmmu/hw/misc/pvpanic.o
GEN trace/generated-helpers.c
CC ppcemb-softmmu/hw/vfio/spapr.o
CC s390x-softmmu/hw/virtio/virtio-balloon.o
LINK moxie-softmmu/qemu-system-moxie
CC sh4eb-softmmu/hw/net/virtio-net.o
CC s390x-softmmu/hw/virtio/vhost.o
CC ppc64abi32-linux-user/target/ppc/../../libdecnumber/decNumber.o
CC sh4-softmmu/hw/scsi/vhost-scsi.o
CC or1k-softmmu/target/openrisc/exception_helper.o
CC sh4eb-softmmu/hw/net/vhost_net.o
CC arm-softmmu/hw/dma/bcm2835_dma.o
CC mipsel-softmmu/hw/virtio/vhost-vsock.o
CC mips64-softmmu/hw/scsi/vhost-scsi-common.o
CC ppc64-softmmu/hw/display/virtio-gpu-pci.o
CC ppc64abi32-linux-user/target/ppc/../../libdecnumber/dpd/decimal32.o
CC ppc64le-linux-user/target/ppc/user_only_helper.o
CC mips64-softmmu/hw/scsi/vhost-scsi.o
CC alpha-softmmu/hw/virtio/vhost-vsock.o
CC i386-linux-user/trace/control-target.o
CC ppc64abi32-linux-user/target/ppc/../../libdecnumber/dpd/decimal64.o
CC sh4eb-softmmu/hw/scsi/virtio-scsi.o
CC sparc-softmmu/trace/generated-helpers.o
CC i386-softmmu/hw/misc/mmio_interface.o
CC mips64-softmmu/hw/scsi/vhost-user-scsi.o
CC ppc-softmmu/hw/vfio/spapr.o
CC sparc64-softmmu/hw/virtio/vhost-user.o
CC ppc-softmmu/hw/virtio/virtio.o
CC sh4eb-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC cris-softmmu/trace/generated-helpers.o
CC mips-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC aarch64-linux-user/gdbstub-xml.o
CC arm-softmmu/hw/gpio/omap_gpio.o
CC mips64-softmmu/hw/timer/mips_gictimer.o
CC ppc-linux-user/target/ppc/../../libdecnumber/dpd/decimal32.o
CC mips-softmmu/hw/scsi/vhost-scsi-common.o
CC or1k-softmmu/target/openrisc/fpu_helper.o
CC sparc64-softmmu/hw/virtio/vhost-vsock.o
CC ppc-linux-user/target/ppc/../../libdecnumber/dpd/decimal64.o
CC ppc-linux-user/target/ppc/../../libdecnumber/dpd/decimal128.o
CC ppc-softmmu/hw/virtio/virtio-balloon.o
CC ppc64-softmmu/hw/display/virtio-vga.o
CC aarch64-softmmu/hw/display/vga.o
CC sh4-softmmu/hw/scsi/vhost-user-scsi.o
GEN trace/generated-helpers.c
CC ppc64abi32-linux-user/target/ppc/../../libdecnumber/dpd/decimal128.o
CC tricore-softmmu/hw/tricore/tricore_testboard.o
GEN trace/generated-helpers.c
CC mips64el-softmmu/hw/scsi/vhost-scsi-common.o
CC i386-softmmu/hw/net/virtio-net.o
CC sh4eb-softmmu/hw/scsi/vhost-scsi-common.o
CC arm-softmmu/hw/gpio/imx_gpio.o
CC ppc64abi32-linux-user/trace/control-target.o
CC or1k-softmmu/target/openrisc/interrupt_helper.o
CC x86_64-softmmu/hw/scsi/vhost-scsi.o
CC ppc64-linux-user/target/ppc/../../libdecnumber/dpd/decimal64.o
LINK sparc-softmmu/qemu-system-sparc
CC mips64-softmmu/hw/timer/mc146818rtc.o
CC tricore-softmmu/target/tricore/translate.o
CC i386-softmmu/hw/net/vhost_net.o
CC alpha-softmmu/hw/virtio/virtio-crypto.o
CC sparc64-softmmu/hw/virtio/virtio-crypto.o
CC ppc-linux-user/trace/control-target.o
CC mips64-softmmu/hw/vfio/common.o
CC alpha-softmmu/hw/virtio/virtio-crypto-pci.o
CC alpha-softmmu/hw/alpha/dp264.o
CC i386-softmmu/hw/scsi/virtio-scsi.o
CC ppc-softmmu/hw/virtio/vhost.o
CC ppc64abi32-linux-user/gdbstub-xml.o
CC ppc-softmmu/hw/virtio/vhost-backend.o
CC aarch64-softmmu/hw/display/virtio-gpu.o
CC aarch64-linux-user/trace/generated-helpers.o
CC mips64el-softmmu/hw/scsi/vhost-scsi.o
CC tricore-softmmu/target/tricore/helper.o
CC alpha-softmmu/hw/alpha/pci.o
CC ppc64-linux-user/target/ppc/../../libdecnumber/dpd/decimal128.o
CC sh4eb-softmmu/hw/scsi/vhost-scsi.o
CC mips-softmmu/hw/scsi/vhost-scsi.o
GEN trace/generated-helpers.c
CC sh4-softmmu/hw/timer/sh_timer.o
CC ppc64-softmmu/hw/i2c/ppc4xx_i2c.o
CC aarch64-softmmu/hw/display/virtio-gpu-3d.o
CC ppc-softmmu/hw/virtio/vhost-user.o
CC alpha-softmmu/hw/alpha/typhoon.o
CC alpha-softmmu/target/alpha/machine.o
CC ppc64-softmmu/hw/intc/openpic_kvm.o
CC ppc-softmmu/hw/virtio/vhost-vsock.o
CC ppc64-softmmu/hw/intc/xics.o
CC alpha-softmmu/target/alpha/translate.o
CC mipsel-softmmu/hw/virtio/virtio-crypto.o
CC ppc-softmmu/hw/virtio/virtio-crypto.o
CC arm-softmmu/hw/gpio/bcm2835_gpio.o
CC ppc64-softmmu/hw/intc/xics_spapr.o
CC s390x-softmmu/hw/virtio/vhost-backend.o
CC ppc64le-linux-user/target/ppc/gdbstub.o
CC ppc64abi32-linux-user/trace/generated-helpers.o
CC ppc64-softmmu/hw/intc/xics_kvm.o
CC ppc64le-linux-user/target/ppc/../../libdecnumber/decContext.o
CC mipsel-softmmu/hw/virtio/virtio-crypto-pci.o
CC ppc64-linux-user/trace/control-target.o
CC ppc-linux-user/gdbstub-xml.o
CC x86_64-softmmu/hw/scsi/vhost-user-scsi.o
CC i386-linux-user/gdbstub-xml.o
CC ppc64le-linux-user/target/ppc/../../libdecnumber/decNumber.o
CC arm-softmmu/hw/i2c/omap_i2c.o
CC x86_64-softmmu/hw/timer/mc146818rtc.o
CC i386-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC ppcemb-softmmu/hw/virtio/virtio.o
LINK cris-softmmu/qemu-system-cris
CC mips-softmmu/hw/scsi/vhost-user-scsi.o
CC mips-softmmu/hw/timer/mips_gictimer.o
CC or1k-softmmu/target/openrisc/mmu_helper.o
CC ppc64-softmmu/hw/intc/xics_pnv.o
CC arm-softmmu/hw/input/pxa2xx_keypad.o
CC sparc64-softmmu/hw/virtio/virtio-crypto-pci.o
CC mips-softmmu/hw/timer/mc146818rtc.o
CC tricore-softmmu/target/tricore/cpu.o
CC mips64-softmmu/hw/vfio/pci.o
CC mipsel-softmmu/hw/mips/mips_r4k.o
CC mipsel-softmmu/hw/mips/mips_malta.o
CC mips64el-softmmu/hw/scsi/vhost-user-scsi.o
CC or1k-softmmu/target/openrisc/sys_helper.o
CC sh4-softmmu/hw/timer/mc146818rtc.o
CC ppc64le-linux-user/target/ppc/../../libdecnumber/dpd/decimal32.o
CC ppc64-softmmu/hw/misc/ivshmem.o
CC mipsel-softmmu/hw/mips/mips_mipssim.o
CC x86_64-softmmu/hw/vfio/common.o
CC sh4-softmmu/hw/vfio/common.o
CC i386-softmmu/hw/scsi/vhost-scsi-common.o
CC mipsel-softmmu/hw/mips/addr.o
CC sparc64-softmmu/hw/sparc64/sparc64.o
CC i386-softmmu/hw/scsi/vhost-scsi.o
CC ppc-softmmu/hw/virtio/virtio-crypto-pci.o
CC mips64el-softmmu/hw/timer/mips_gictimer.o
CC s390x-softmmu/hw/virtio/vhost-user.o
CC ppcemb-softmmu/hw/virtio/virtio-balloon.o
CC tricore-softmmu/target/tricore/op_helper.o
CC or1k-softmmu/target/openrisc/gdbstub.o
CC ppc64le-linux-user/target/ppc/../../libdecnumber/dpd/decimal64.o
CC x86_64-softmmu/hw/vfio/pci.o
CC sparc64-softmmu/hw/sparc64/sun4u.o
CC ppc-linux-user/trace/generated-helpers.o
CC ppc64-linux-user/gdbstub-xml.o
CC i386-softmmu/hw/scsi/vhost-user-scsi.o
CC mips64el-softmmu/hw/timer/mc146818rtc.o
CC mipsel-softmmu/hw/mips/mips_int.o
CC x86_64-softmmu/hw/vfio/pci-quirks.o
CC alpha-softmmu/target/alpha/helper.o
CC mips-softmmu/hw/vfio/common.o
CC arm-softmmu/hw/input/tsc210x.o
CC sh4eb-softmmu/hw/scsi/vhost-user-scsi.o
CC x86_64-softmmu/hw/vfio/platform.o
CC ppc64-linux-user/trace/generated-helpers.o
CC sparc64-softmmu/hw/sparc64/niagara.o
CC mipsel-softmmu/hw/mips/gt64xxx_pci.o
CC mipsel-softmmu/hw/mips/cps.o
CC ppc64-softmmu/hw/misc/mmio_interface.o
CC sh4-softmmu/hw/vfio/pci.o
CC mipsel-softmmu/target/mips/translate.o
CC alpha-softmmu/target/alpha/cpu.o
CC mips-softmmu/hw/vfio/pci.o
CC sh4-softmmu/hw/vfio/pci-quirks.o
CC i386-softmmu/hw/timer/mc146818rtc.o
CC alpha-softmmu/target/alpha/int_helper.o
CC sh4-softmmu/hw/vfio/platform.o
CC arm-softmmu/hw/intc/armv7m_nvic.o
CC aarch64-softmmu/hw/display/virtio-gpu-pci.o
CC mips-softmmu/hw/vfio/pci-quirks.o
CC sh4eb-softmmu/hw/timer/sh_timer.o
CC s390x-softmmu/hw/virtio/vhost-vsock.o
GEN trace/generated-helpers.c
CC arm-softmmu/hw/intc/exynos4210_gic.o
CC sh4eb-softmmu/hw/timer/mc146818rtc.o
CC mips-softmmu/hw/vfio/platform.o
CC sh4-softmmu/hw/vfio/spapr.o
CC aarch64-softmmu/hw/display/dpcd.o
CC or1k-softmmu/trace/control-target.o
CC mips64-softmmu/hw/vfio/pci-quirks.o
CC sh4eb-softmmu/hw/vfio/common.o
CC mips-softmmu/hw/vfio/spapr.o
CC alpha-softmmu/target/alpha/fpu_helper.o
CC mips-softmmu/hw/virtio/virtio.o
CC mips64-softmmu/hw/vfio/platform.o
CC mips-softmmu/hw/virtio/virtio-balloon.o
CC ppcemb-softmmu/hw/virtio/vhost.o
CC alpha-softmmu/target/alpha/vax_helper.o
CC sh4-softmmu/hw/virtio/virtio.o
CC arm-softmmu/hw/intc/exynos4210_combiner.o
CC sparc64-softmmu/target/sparc/machine.o
CC mips-softmmu/hw/virtio/vhost.o
CC arm-softmmu/hw/intc/omap_intc.o
CC ppc-softmmu/hw/ppc/ppc.o
CC i386-linux-user/trace/generated-helpers.o
CC sh4eb-softmmu/hw/vfio/pci.o
CC alpha-softmmu/target/alpha/sys_helper.o
CC sparc64-softmmu/target/sparc/monitor.o
LINK m68k-softmmu/qemu-system-m68k
CC sparc64-softmmu/target/sparc/translate.o
CC ppcemb-softmmu/hw/virtio/vhost-backend.o
CC sh4-softmmu/hw/virtio/virtio-balloon.o
CC ppc-softmmu/hw/ppc/ppc_booke.o
CC ppcemb-softmmu/hw/virtio/vhost-user.o
CC s390x-softmmu/hw/virtio/virtio-crypto.o
CC tricore-softmmu/target/tricore/fpu_helper.o
CC sh4-softmmu/hw/virtio/vhost.o
CC alpha-softmmu/target/alpha/mem_helper.o
CC sh4-softmmu/hw/virtio/vhost-backend.o
CC mips64el-softmmu/hw/vfio/common.o
CC sh4-softmmu/hw/virtio/vhost-user.o
CC ppcemb-softmmu/hw/virtio/vhost-vsock.o
CC mips-softmmu/hw/virtio/vhost-backend.o
CC aarch64-softmmu/hw/display/xlnx_dp.o
CC s390x-softmmu/hw/virtio/virtio-crypto-pci.o
CC ppc64le-linux-user/target/ppc/../../libdecnumber/dpd/decimal128.o
CC sh4eb-softmmu/hw/vfio/pci-quirks.o
CC mips64el-softmmu/hw/vfio/pci.o
GEN trace/generated-helpers.c
CC ppc64-softmmu/hw/net/spapr_llan.o
CC or1k-softmmu/trace/generated-helpers.o
CC mips64-softmmu/hw/vfio/spapr.o
CC alpha-softmmu/target/alpha/gdbstub.o
CC ppc64-softmmu/hw/net/xilinx_ethlite.o
CC mips-softmmu/hw/virtio/vhost-user.o
CC arm-softmmu/hw/intc/bcm2835_ic.o
CC sh4-softmmu/hw/virtio/vhost-vsock.o
CC ppc64-softmmu/hw/net/virtio-net.o
CC sh4eb-softmmu/hw/vfio/platform.o
CC mips64el-softmmu/hw/vfio/pci-quirks.o
CC mips64el-softmmu/hw/vfio/platform.o
CC s390x-softmmu/hw/s390x/s390-virtio-hcall.o
CC ppc-softmmu/hw/ppc/fdt.o
GEN trace/generated-helpers.c
CC mips64-softmmu/hw/virtio/virtio.o
GEN trace/generated-helpers.c
CC mips-softmmu/hw/virtio/vhost-vsock.o
CC x86_64-softmmu/hw/vfio/spapr.o
CC aarch64-softmmu/hw/dma/omap_dma.o
CC x86_64-softmmu/hw/virtio/virtio.o
CC aarch64-softmmu/hw/dma/soc_dma.o
CC aarch64-softmmu/hw/dma/xlnx_dpdma.o
CC alpha-softmmu/trace/control-target.o
CC ppc64le-linux-user/trace/control-target.o
CC ppcemb-softmmu/hw/virtio/virtio-crypto.o
CC ppc-softmmu/hw/ppc/ppc405_boards.o
CC arm-softmmu/hw/intc/bcm2836_control.o
LINK or1k-softmmu/qemu-system-or1k
CC tricore-softmmu/trace/control-target.o
CC mips64el-softmmu/hw/vfio/spapr.o
CC i386-softmmu/hw/vfio/common.o
CC x86_64-softmmu/hw/virtio/virtio-balloon.o
CC ppcemb-softmmu/hw/virtio/virtio-crypto-pci.o
CC sh4eb-softmmu/hw/vfio/spapr.o
CC sh4eb-softmmu/hw/virtio/virtio.o
CC sh4eb-softmmu/hw/virtio/virtio-balloon.o
CC ppcemb-softmmu/hw/ppc/ppc.o
CC s390x-softmmu/hw/s390x/sclp.o
CC i386-softmmu/hw/vfio/pci.o
CC sh4-softmmu/hw/virtio/virtio-crypto.o
CC mipsel-softmmu/target/mips/dsp_helper.o
CC sparc64-softmmu/target/sparc/helper.o
CC ppc64le-linux-user/gdbstub-xml.o
CC ppc64le-linux-user/trace/generated-helpers.o
CC mips-softmmu/hw/virtio/virtio-crypto.o
CC i386-softmmu/hw/vfio/pci-quirks.o
CC mips64el-softmmu/hw/virtio/virtio.o
CC mips64el-softmmu/hw/virtio/virtio-balloon.o
CC sh4eb-softmmu/hw/virtio/vhost.o
CC mips64el-softmmu/hw/virtio/vhost.o
CC ppcemb-softmmu/hw/ppc/ppc_booke.o
CC s390x-softmmu/hw/s390x/event-facility.o
CC mipsel-softmmu/target/mips/op_helper.o
CC aarch64-softmmu/hw/dma/pxa2xx_dma.o
CC mips64-softmmu/hw/virtio/virtio-balloon.o
CC mips64-softmmu/hw/virtio/vhost.o
CC sh4eb-softmmu/hw/virtio/vhost-backend.o
CC arm-softmmu/hw/intc/allwinner-a10-pic.o
CC sh4eb-softmmu/hw/virtio/vhost-user.o
CC mips-softmmu/hw/virtio/virtio-crypto-pci.o
CC mips-softmmu/hw/mips/mips_r4k.o
CC mips-softmmu/hw/mips/mips_malta.o
CC i386-softmmu/hw/vfio/platform.o
CC mips64el-softmmu/hw/virtio/vhost-backend.o
CC mipsel-softmmu/target/mips/lmi_helper.o
CC sparc64-softmmu/target/sparc/cpu.o
CC i386-softmmu/hw/vfio/spapr.o
CC sh4-softmmu/hw/virtio/virtio-crypto-pci.o
CC ppc-softmmu/hw/ppc/ppc4xx_devs.o
CC sh4-softmmu/hw/sh4/shix.o
CC x86_64-softmmu/hw/virtio/vhost.o
CC i386-softmmu/hw/virtio/virtio.o
CC arm-softmmu/hw/intc/aspeed_vic.o
CC sh4-softmmu/hw/sh4/r2d.o
CC ppc-softmmu/hw/ppc/ppc405_uc.o
CC sparc64-softmmu/target/sparc/fop_helper.o
CC mips64el-softmmu/hw/virtio/vhost-user.o
CC ppc-softmmu/hw/ppc/ppc440_bamboo.o
CC mipsel-softmmu/target/mips/helper.o
CC tricore-softmmu/trace/generated-helpers.o
CC mips64-softmmu/hw/virtio/vhost-backend.o
CC mips-softmmu/hw/mips/mips_mipssim.o
CC mips-softmmu/hw/mips/addr.o
CC arm-softmmu/hw/intc/arm_gicv3_cpuif.o
CC mips-softmmu/hw/mips/mips_int.o
CC sparc64-softmmu/target/sparc/cc_helper.o
CC ppcemb-softmmu/hw/ppc/fdt.o
CC ppc64-softmmu/hw/net/vhost_net.o
CC ppc-softmmu/hw/ppc/ppc4xx_pci.o
CC mips64-softmmu/hw/virtio/vhost-user.o
CC ppc64-softmmu/hw/net/fsl_etsec/etsec.o
CC i386-softmmu/hw/virtio/virtio-balloon.o
CC arm-softmmu/hw/misc/ivshmem.o
CC alpha-softmmu/trace/generated-helpers.o
CC s390x-softmmu/hw/s390x/sclpquiesce.o
CC sh4eb-softmmu/hw/virtio/vhost-vsock.o
CC ppc64-softmmu/hw/net/fsl_etsec/registers.o
CC mips-softmmu/hw/mips/gt64xxx_pci.o
CC aarch64-softmmu/hw/dma/bcm2835_dma.o
CC mips64-softmmu/hw/virtio/vhost-vsock.o
CC ppcemb-softmmu/hw/ppc/ppc405_boards.o
CC sh4-softmmu/hw/sh4/sh7750.o
CC mips-softmmu/hw/mips/cps.o
CC s390x-softmmu/hw/s390x/sclpcpu.o
CC s390x-softmmu/hw/s390x/ipl.o
CC ppc64-softmmu/hw/net/fsl_etsec/rings.o
CC aarch64-softmmu/hw/gpio/omap_gpio.o
CC ppcemb-softmmu/hw/ppc/ppc4xx_devs.o
CC sh4-softmmu/hw/sh4/sh7750_regnames.o
CC aarch64-softmmu/hw/gpio/imx_gpio.o
CC arm-softmmu/hw/misc/arm_sysctl.o
CC ppcemb-softmmu/hw/ppc/ppc405_uc.o
CC mips64el-softmmu/hw/virtio/vhost-vsock.o
CC aarch64-softmmu/hw/gpio/bcm2835_gpio.o
CC x86_64-softmmu/hw/virtio/vhost-backend.o
CC aarch64-softmmu/hw/i2c/omap_i2c.o
CC arm-softmmu/hw/misc/cbus.o
CC mips-softmmu/target/mips/translate.o
CC x86_64-softmmu/hw/virtio/vhost-user.o
CC sh4-softmmu/hw/sh4/sh_pci.o
CC sh4eb-softmmu/hw/virtio/virtio-crypto.o
CC ppc64-softmmu/hw/net/fsl_etsec/miim.o
CC ppc-softmmu/hw/ppc/prep.o
CC mips-softmmu/target/mips/dsp_helper.o
CC mipsel-softmmu/target/mips/cpu.o
CC sh4eb-softmmu/hw/virtio/virtio-crypto-pci.o
CC i386-softmmu/hw/virtio/vhost.o
CC mips64-softmmu/hw/virtio/virtio-crypto.o
CC arm-softmmu/hw/misc/exynos4210_pmu.o
CC i386-softmmu/hw/virtio/vhost-backend.o
CC mipsel-softmmu/target/mips/gdbstub.o
CC s390x-softmmu/hw/s390x/css.o
CC arm-softmmu/hw/misc/exynos4210_clk.o
CC sh4eb-softmmu/hw/sh4/shix.o
CC ppc64-softmmu/hw/nvram/spapr_nvram.o
CC ppcemb-softmmu/hw/ppc/ppc440_bamboo.o
CC ppc64-softmmu/hw/scsi/spapr_vscsi.o
CC i386-softmmu/hw/virtio/vhost-user.o
CC mips64el-softmmu/hw/virtio/virtio-crypto.o
CC sh4-softmmu/target/sh4/translate.o
CC x86_64-softmmu/hw/virtio/vhost-vsock.o
CC s390x-softmmu/hw/s390x/s390-virtio-ccw.o
CC sh4eb-softmmu/hw/sh4/r2d.o
CC ppcemb-softmmu/hw/ppc/ppc4xx_pci.o
CC arm-softmmu/hw/misc/exynos4210_rng.o
LINK s390x-linux-user/qemu-s390x
CC x86_64-softmmu/hw/virtio/virtio-crypto.o
CC ppcemb-softmmu/hw/ppc/virtex_ml507.o
CC mips64-softmmu/hw/virtio/virtio-crypto-pci.o
CC mipsel-softmmu/target/mips/msa_helper.o
CC sh4-softmmu/target/sh4/op_helper.o
CC ppcemb-softmmu/target/ppc/cpu-models.o
CC sh4eb-softmmu/hw/sh4/sh7750.o
CC x86_64-softmmu/hw/virtio/virtio-crypto-pci.o
CC mips64-softmmu/hw/mips/mips_r4k.o
CC mips64-softmmu/hw/mips/mips_malta.o
CC s390x-softmmu/hw/s390x/3270-ccw.o
CC aarch64-softmmu/hw/input/pxa2xx_keypad.o
CC mips64-softmmu/hw/mips/mips_mipssim.o
CC ppcemb-softmmu/target/ppc/cpu.o
CC sh4eb-softmmu/hw/sh4/sh7750_regnames.o
CC aarch64-softmmu/hw/input/tsc210x.o
CC mips-softmmu/target/mips/op_helper.o
CC ppcemb-softmmu/target/ppc/translate.o
CC s390x-softmmu/hw/s390x/virtio-ccw.o
CC i386-softmmu/hw/virtio/vhost-vsock.o
CC mips64-softmmu/hw/mips/addr.o
CC sh4-softmmu/target/sh4/helper.o
CC ppc-softmmu/hw/ppc/prep_systemio.o
CC sparc64-softmmu/target/sparc/win_helper.o
CC aarch64-softmmu/hw/intc/armv7m_nvic.o
CC mips64el-softmmu/hw/virtio/virtio-crypto-pci.o
CC aarch64-softmmu/hw/intc/exynos4210_gic.o
CC arm-softmmu/hw/misc/imx_ccm.o
CC mips-softmmu/target/mips/lmi_helper.o
CC sh4eb-softmmu/hw/sh4/sh_pci.o
CC mipsel-softmmu/target/mips/mips-semi.o
CC sparc64-softmmu/target/sparc/mmu_helper.o
CC sh4eb-softmmu/target/sh4/translate.o
CC ppc-softmmu/hw/ppc/rs6000_mc.o
CC sh4-softmmu/target/sh4/cpu.o
CC i386-softmmu/hw/virtio/virtio-crypto.o
CC ppc64-softmmu/hw/scsi/virtio-scsi.o
CC sh4-softmmu/target/sh4/monitor.o
CC arm-softmmu/hw/misc/imx31_ccm.o
CC sh4-softmmu/target/sh4/gdbstub.o
CC mipsel-softmmu/target/mips/machine.o
CC i386-softmmu/hw/virtio/virtio-crypto-pci.o
CC sh4eb-softmmu/target/sh4/op_helper.o
CC sparc64-softmmu/target/sparc/ldst_helper.o
CC arm-softmmu/hw/misc/imx25_ccm.o
CC ppc64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC aarch64-softmmu/hw/intc/exynos4210_combiner.o
CC mips64-softmmu/hw/mips/mips_int.o
CC s390x-softmmu/hw/s390x/css-bridge.o
CC arm-softmmu/hw/misc/imx6_ccm.o
CC arm-softmmu/hw/misc/imx6_src.o
CC ppc64-softmmu/hw/scsi/vhost-scsi-common.o
CC arm-softmmu/hw/misc/mst_fpga.o
CC x86_64-softmmu/hw/i386/multiboot.o
CC ppc64-softmmu/hw/scsi/vhost-scsi.o
CC s390x-softmmu/hw/s390x/ccw-device.o
CC x86_64-softmmu/hw/i386/pc.o
CC aarch64-softmmu/hw/intc/omap_intc.o
CC i386-softmmu/hw/i386/multiboot.o
CC mips-softmmu/target/mips/helper.o
CC s390x-softmmu/hw/s390x/s390-pci-bus.o
CC mips64el-softmmu/hw/mips/mips_r4k.o
CC mipsel-softmmu/target/mips/cp0_timer.o
CC i386-softmmu/hw/i386/pc.o
CC mips-softmmu/target/mips/cpu.o
CC mips-softmmu/target/mips/gdbstub.o
CC s390x-softmmu/hw/s390x/s390-pci-inst.o
GEN trace/generated-helpers.c
CC mips-softmmu/target/mips/msa_helper.o
CC s390x-softmmu/hw/s390x/s390-skeys.o
CC arm-softmmu/hw/misc/omap_clk.o
CC sh4eb-softmmu/target/sh4/helper.o
CC ppc64-softmmu/hw/scsi/vhost-user-scsi.o
CC s390x-softmmu/hw/s390x/s390-stattrib.o
CC mipsel-softmmu/trace/control-target.o
CC x86_64-softmmu/hw/i386/pc_piix.o
CC ppc-softmmu/hw/ppc/mac_oldworld.o
CC s390x-softmmu/hw/s390x/s390-ccw.o
CC mips-softmmu/target/mips/mips-semi.o
CC x86_64-softmmu/hw/i386/pc_q35.o
CC sparc64-softmmu/target/sparc/int64_helper.o
CC ppcemb-softmmu/target/ppc/machine.o
CC mips64el-softmmu/hw/mips/mips_malta.o
CC sh4eb-softmmu/target/sh4/cpu.o
CC sparc64-softmmu/target/sparc/vis_helper.o
CC mips64-softmmu/hw/mips/mips_jazz.o
CC mips64el-softmmu/hw/mips/mips_mipssim.o
CC aarch64-softmmu/hw/intc/bcm2835_ic.o
/var/tmp/patchew-tester-tmp-845hv716/src/hw/s390x/s390-stattrib.c: In function ‘s390_stattrib_instance_init’:
/var/tmp/patchew-tester-tmp-845hv716/src/hw/s390x/s390-stattrib.c:379:28: error: assignment from incompatible pointer type [-Werror]
ops->save_live_pending = cmma_save_pending;
^
GEN trace/generated-helpers.c
cc1: all warnings being treated as errors
make[1]: *** [hw/s390x/s390-stattrib.o] Error 1
make[1]: *** Waiting for unfinished jobs....
CC x86_64-softmmu/hw/i386/pc_sysfw.o
CC arm-softmmu/hw/misc/omap_gpmc.o
CC i386-softmmu/hw/i386/pc_piix.o
CC aarch64-softmmu/hw/intc/bcm2836_control.o
CC sh4eb-softmmu/target/sh4/monitor.o
CC sparc64-softmmu/target/sparc/gdbstub.o
CC x86_64-softmmu/hw/i386/x86-iommu.o
CC mips64el-softmmu/hw/mips/addr.o
CC ppcemb-softmmu/target/ppc/mmu_helper.o
CC ppc-softmmu/hw/ppc/mac_newworld.o
CC i386-softmmu/hw/i386/pc_q35.o
CC ppcemb-softmmu/target/ppc/mmu-hash32.o
CC ppcemb-softmmu/target/ppc/monitor.o
GEN trace/generated-helpers.c
CC arm-softmmu/hw/misc/omap_l4.o
CC sh4eb-softmmu/target/sh4/gdbstub.o
CC x86_64-softmmu/hw/i386/intel_iommu.o
CC sparc64-softmmu/trace/control-target.o
CC arm-softmmu/hw/misc/omap_sdrc.o
CC aarch64-softmmu/hw/intc/allwinner-a10-pic.o
CC arm-softmmu/hw/misc/omap_tap.o
CC mips64el-softmmu/hw/mips/mips_int.o
CC sh4-softmmu/trace/control-target.o
CC aarch64-softmmu/hw/intc/aspeed_vic.o
CC x86_64-softmmu/hw/i386/amd_iommu.o
CC i386-softmmu/hw/i386/pc_sysfw.o
GEN trace/generated-helpers.c
CC sh4eb-softmmu/trace/control-target.o
CC arm-softmmu/hw/misc/bcm2835_mbox.o
CC mips-softmmu/target/mips/machine.o
CC ppc64-softmmu/hw/timer/mc146818rtc.o
LINK alpha-softmmu/qemu-system-alpha
CC x86_64-softmmu/hw/i386/kvmvapic.o
CC mipsel-softmmu/trace/generated-helpers.o
CC ppc-softmmu/hw/ppc/e500.o
CC arm-softmmu/hw/misc/bcm2835_property.o
CC ppcemb-softmmu/target/ppc/arch_dump.o
CC arm-softmmu/hw/misc/bcm2835_rng.o
CC x86_64-softmmu/hw/i386/acpi-build.o
CC x86_64-softmmu/hw/i386/pci-assign-load-rom.o
CC x86_64-softmmu/target/i386/helper.o
CC i386-softmmu/hw/i386/x86-iommu.o
CC ppc64-softmmu/hw/vfio/common.o
CC i386-softmmu/hw/i386/intel_iommu.o
CC arm-softmmu/hw/misc/zynq_slcr.o
CC i386-softmmu/hw/i386/amd_iommu.o
CC mips64el-softmmu/hw/mips/mips_jazz.o
CC mips64el-softmmu/hw/mips/mips_fulong2e.o
CC ppcemb-softmmu/target/ppc/kvm.o
CC arm-softmmu/hw/misc/zynq-xadc.o
CC mips64-softmmu/hw/mips/gt64xxx_pci.o
LINK x86_64-linux-user/qemu-x86_64
CC aarch64-softmmu/hw/intc/arm_gicv3_cpuif.o
CC ppc-softmmu/hw/ppc/mpc8544ds.o
CC arm-softmmu/hw/misc/stm32f2xx_syscfg.o
CC ppc-softmmu/hw/ppc/e500plat.o
CC i386-softmmu/hw/i386/kvmvapic.o
CC sparc64-softmmu/trace/generated-helpers.o
CC x86_64-softmmu/target/i386/cpu.o
CC mips64-softmmu/hw/mips/cps.o
CC ppc-softmmu/hw/ppc/mpc8544_guts.o
CC ppc-softmmu/hw/ppc/ppce500_spin.o
CC mips64el-softmmu/hw/mips/gt64xxx_pci.o
CC ppc-softmmu/hw/ppc/virtex_ml507.o
CC ppc64-softmmu/hw/vfio/pci.o
CC x86_64-softmmu/target/i386/gdbstub.o
CC i386-softmmu/hw/i386/acpi-build.o
CC mips-softmmu/target/mips/cp0_timer.o
GEN trace/generated-helpers.c
CC x86_64-softmmu/target/i386/xsave_helper.o
CC ppcemb-softmmu/target/ppc/dfp_helper.o
CC ppc64-softmmu/hw/vfio/pci-quirks.o
CC sh4eb-softmmu/trace/generated-helpers.o
CC x86_64-softmmu/target/i386/translate.o
CC arm-softmmu/hw/misc/mps2-scc.o
CC x86_64-softmmu/target/i386/bpt_helper.o
CC arm-softmmu/hw/misc/aspeed_scu.o
CC mips64el-softmmu/hw/mips/cps.o
CC i386-softmmu/hw/i386/pci-assign-load-rom.o
CC aarch64-softmmu/hw/misc/ivshmem.o
LINK armeb-linux-user/qemu-armeb
CC mips64-softmmu/target/mips/translate.o
CC aarch64-softmmu/hw/misc/arm_sysctl.o
CC aarch64-softmmu/hw/misc/cbus.o
CC arm-softmmu/hw/misc/aspeed_sdmc.o
CC mips-softmmu/trace/control-target.o
CC mips64el-softmmu/hw/mips/boston.o
CC arm-softmmu/hw/misc/mmio_interface.o
CC i386-softmmu/target/i386/helper.o
CC ppcemb-softmmu/target/ppc/excp_helper.o
CC x86_64-softmmu/target/i386/cc_helper.o
CC i386-softmmu/target/i386/cpu.o
CC i386-softmmu/target/i386/gdbstub.o
CC x86_64-softmmu/target/i386/excp_helper.o
CC i386-softmmu/target/i386/xsave_helper.o
CC ppc-softmmu/target/ppc/cpu-models.o
CC arm-softmmu/hw/misc/msf2-sysreg.o
CC ppcemb-softmmu/target/ppc/fpu_helper.o
CC mips64el-softmmu/target/mips/translate.o
CC ppc-softmmu/target/ppc/cpu.o
CC i386-softmmu/target/i386/translate.o
CC x86_64-softmmu/target/i386/fpu_helper.o
CC x86_64-softmmu/target/i386/int_helper.o
CC aarch64-softmmu/hw/misc/exynos4210_pmu.o
CC ppcemb-softmmu/target/ppc/int_helper.o
CC arm-softmmu/hw/net/virtio-net.o
CC arm-softmmu/hw/net/vhost_net.o
LINK aarch64-linux-user/qemu-aarch64
CC ppc64-softmmu/hw/vfio/platform.o
CC mips64el-softmmu/target/mips/dsp_helper.o
CC sh4-softmmu/trace/generated-helpers.o
CC ppc-softmmu/target/ppc/translate.o
CC mips-softmmu/trace/generated-helpers.o
CC mips64el-softmmu/target/mips/op_helper.o
CC i386-softmmu/target/i386/bpt_helper.o
CC mips64-softmmu/target/mips/dsp_helper.o
CC mips64el-softmmu/target/mips/lmi_helper.o
CC aarch64-softmmu/hw/misc/exynos4210_clk.o
CC ppc-softmmu/target/ppc/machine.o
LINK mipsn32-linux-user/qemu-mipsn32
CC ppcemb-softmmu/target/ppc/timebase_helper.o
CC x86_64-softmmu/target/i386/mem_helper.o
CC aarch64-softmmu/hw/misc/exynos4210_rng.o
CC arm-softmmu/hw/pcmcia/pxa2xx.o
CC ppc64-softmmu/hw/vfio/spapr.o
CC mips64-softmmu/target/mips/op_helper.o
CC ppc-softmmu/target/ppc/mmu_helper.o
CC ppc-softmmu/target/ppc/mmu-hash32.o
CC mips64-softmmu/target/mips/lmi_helper.o
CC ppc64-softmmu/hw/virtio/virtio.o
CC mips64-softmmu/target/mips/helper.o
CC mips64el-softmmu/target/mips/helper.o
make: *** [subdir-s390x-softmmu] Error 2
make: *** Waiting for unfinished jobs....
CC aarch64-softmmu/hw/misc/imx_ccm.o
CC aarch64-softmmu/hw/misc/imx31_ccm.o
CC x86_64-softmmu/target/i386/misc_helper.o
LINK mipsel-linux-user/qemu-mipsel
CC mips64el-softmmu/target/mips/cpu.o
CC aarch64-softmmu/hw/misc/imx25_ccm.o
CC i386-softmmu/target/i386/cc_helper.o
CC aarch64-softmmu/hw/misc/imx6_ccm.o
CC x86_64-softmmu/target/i386/mpx_helper.o
CC mips64el-softmmu/target/mips/gdbstub.o
CC mips64el-softmmu/target/mips/msa_helper.o
CC x86_64-softmmu/target/i386/seg_helper.o
CC ppc-softmmu/target/ppc/monitor.o
CC mips64-softmmu/target/mips/cpu.o
CC x86_64-softmmu/target/i386/smm_helper.o
CC mips64el-softmmu/target/mips/mips-semi.o
CC arm-softmmu/hw/scsi/virtio-scsi.o
CC arm-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC mips64el-softmmu/target/mips/machine.o
CC mips64el-softmmu/target/mips/cp0_timer.o
CC x86_64-softmmu/target/i386/svm_helper.o
CC x86_64-softmmu/target/i386/machine.o
CC x86_64-softmmu/target/i386/arch_memory_mapping.o
CC i386-softmmu/target/i386/excp_helper.o
CC ppc-softmmu/target/ppc/arch_dump.o
CC ppc64-softmmu/hw/virtio/virtio-balloon.o
CC aarch64-softmmu/hw/misc/imx6_src.o
CC arm-softmmu/hw/scsi/vhost-scsi-common.o
CC arm-softmmu/hw/scsi/vhost-scsi.o
CC ppc-softmmu/target/ppc/kvm.o
CC arm-softmmu/hw/scsi/vhost-user-scsi.o
CC aarch64-softmmu/hw/misc/mst_fpga.o
CC mips64-softmmu/target/mips/gdbstub.o
CC i386-softmmu/target/i386/fpu_helper.o
CC ppcemb-softmmu/target/ppc/misc_helper.o
GEN trace/generated-helpers.c
CC ppcemb-softmmu/target/ppc/mem_helper.o
CC mips64-softmmu/target/mips/msa_helper.o
CC i386-softmmu/target/i386/int_helper.o
CC mips64-softmmu/target/mips/mips-semi.o
CC ppcemb-softmmu/target/ppc/gdbstub.o
CC mips64-softmmu/target/mips/machine.o
CC aarch64-softmmu/hw/misc/omap_clk.o
CC ppc64-softmmu/hw/virtio/vhost.o
CC x86_64-softmmu/target/i386/arch_dump.o
CC mips64-softmmu/target/mips/cp0_timer.o
CC i386-softmmu/target/i386/mem_helper.o
CC arm-softmmu/hw/sd/omap_mmc.o
CC ppc64-softmmu/hw/virtio/vhost-backend.o
CC ppc64-softmmu/hw/virtio/vhost-user.o
CC x86_64-softmmu/target/i386/monitor.o
CC x86_64-softmmu/target/i386/kvm-stub.o
CC ppcemb-softmmu/target/ppc/../../libdecnumber/decContext.o
CC aarch64-softmmu/hw/misc/omap_gpmc.o
CC ppc-softmmu/target/ppc/dfp_helper.o
CC aarch64-softmmu/hw/misc/omap_l4.o
CC mips64el-softmmu/trace/control-target.o
CC i386-softmmu/target/i386/misc_helper.o
CC ppc-softmmu/target/ppc/excp_helper.o
CC ppcemb-softmmu/target/ppc/../../libdecnumber/decNumber.o
CC arm-softmmu/hw/sd/pxa2xx_mmci.o
GEN trace/generated-helpers.c
CC i386-softmmu/target/i386/mpx_helper.o
CC mips64-softmmu/trace/control-target.o
CC arm-softmmu/hw/sd/bcm2835_sdhost.o
CC arm-softmmu/hw/ssi/omap_spi.o
CC arm-softmmu/hw/ssi/imx_spi.o
GEN trace/generated-helpers.c
CC arm-softmmu/hw/timer/exynos4210_mct.o
CC ppc-softmmu/target/ppc/fpu_helper.o
CC arm-softmmu/hw/timer/exynos4210_pwm.o
CC arm-softmmu/hw/timer/exynos4210_rtc.o
CC ppcemb-softmmu/target/ppc/../../libdecnumber/dpd/decimal32.o
CC mips64-softmmu/trace/generated-helpers.o
CC x86_64-softmmu/trace/control-target.o
CC ppcemb-softmmu/target/ppc/../../libdecnumber/dpd/decimal64.o
CC x86_64-softmmu/gdbstub-xml.o
CC i386-softmmu/target/i386/seg_helper.o
CC ppcemb-softmmu/target/ppc/../../libdecnumber/dpd/decimal128.o
GEN trace/generated-helpers.c
CC arm-softmmu/hw/timer/omap_gptimer.o
CC i386-softmmu/target/i386/smm_helper.o
CC ppcemb-softmmu/trace/control-target.o
CC ppc-softmmu/target/ppc/int_helper.o
CC ppc64-softmmu/hw/virtio/vhost-vsock.o
CC i386-softmmu/target/i386/svm_helper.o
CC arm-softmmu/hw/timer/omap_synctimer.o
CC mips64el-softmmu/trace/generated-helpers.o
CC arm-softmmu/hw/timer/pxa2xx_timer.o
CC ppc64-softmmu/hw/virtio/virtio-crypto.o
CC aarch64-softmmu/hw/misc/omap_sdrc.o
CC i386-softmmu/target/i386/machine.o
CC ppcemb-softmmu/gdbstub-xml.o
CC i386-softmmu/target/i386/arch_memory_mapping.o
CC arm-softmmu/hw/timer/digic-timer.o
CC arm-softmmu/hw/timer/allwinner-a10-pit.o
CC ppc64-softmmu/hw/virtio/virtio-crypto-pci.o
CC aarch64-softmmu/hw/misc/omap_tap.o
CC ppc64-softmmu/hw/ppc/ppc.o
CC i386-softmmu/target/i386/arch_dump.o
CC arm-softmmu/hw/usb/tusb6010.o
CC ppc64-softmmu/hw/ppc/ppc_booke.o
CC i386-softmmu/target/i386/monitor.o
CC arm-softmmu/hw/vfio/common.o
CC ppcemb-softmmu/trace/generated-helpers.o
CC ppc-softmmu/target/ppc/timebase_helper.o
CC ppc-softmmu/target/ppc/misc_helper.o
CC ppc-softmmu/target/ppc/mem_helper.o
CC ppc64-softmmu/hw/ppc/fdt.o
CC arm-softmmu/hw/vfio/pci.o
CC ppc-softmmu/target/ppc/gdbstub.o
CC x86_64-softmmu/trace/generated-helpers.o
CC aarch64-softmmu/hw/misc/bcm2835_mbox.o
CC ppc-softmmu/target/ppc/../../libdecnumber/decContext.o
CC ppc64-softmmu/hw/ppc/spapr.o
CC i386-softmmu/target/i386/kvm-stub.o
CC arm-softmmu/hw/vfio/pci-quirks.o
CC arm-softmmu/hw/vfio/platform.o
CC aarch64-softmmu/hw/misc/bcm2835_property.o
CC ppc-softmmu/target/ppc/../../libdecnumber/decNumber.o
CC arm-softmmu/hw/vfio/calxeda-xgmac.o
CC ppc-softmmu/target/ppc/../../libdecnumber/dpd/decimal32.o
CC ppc64-softmmu/hw/ppc/spapr_vio.o
CC aarch64-softmmu/hw/misc/bcm2835_rng.o
CC aarch64-softmmu/hw/misc/zynq_slcr.o
CC arm-softmmu/hw/vfio/amd-xgbe.o
GEN trace/generated-helpers.c
CC arm-softmmu/hw/vfio/spapr.o
CC arm-softmmu/hw/virtio/virtio.o
CC ppc64-softmmu/hw/ppc/spapr_events.o
CC i386-softmmu/trace/control-target.o
CC ppc-softmmu/target/ppc/../../libdecnumber/dpd/decimal64.o
CC ppc64-softmmu/hw/ppc/spapr_hcall.o
CC ppc-softmmu/target/ppc/../../libdecnumber/dpd/decimal128.o
CC ppc64-softmmu/hw/ppc/spapr_iommu.o
CC ppc64-softmmu/hw/ppc/spapr_rtas.o
CC aarch64-softmmu/hw/misc/zynq-xadc.o
CC i386-softmmu/gdbstub-xml.o
GEN trace/generated-helpers.c
CC aarch64-softmmu/hw/misc/stm32f2xx_syscfg.o
CC ppc64-softmmu/hw/ppc/spapr_pci.o
CC ppc-softmmu/trace/control-target.o
CC arm-softmmu/hw/virtio/virtio-balloon.o
CC ppc64-softmmu/hw/ppc/spapr_rtc.o
CC ppc64-softmmu/hw/ppc/spapr_drc.o
CC ppc64-softmmu/hw/ppc/spapr_rng.o
CC i386-softmmu/trace/generated-helpers.o
CC aarch64-softmmu/hw/misc/mps2-scc.o
CC arm-softmmu/hw/virtio/vhost.o
CC aarch64-softmmu/hw/misc/auxbus.o
CC ppc-softmmu/gdbstub-xml.o
CC ppc64-softmmu/hw/ppc/spapr_cpu_core.o
CC aarch64-softmmu/hw/misc/aspeed_scu.o
CC arm-softmmu/hw/virtio/vhost-backend.o
CC aarch64-softmmu/hw/misc/aspeed_sdmc.o
CC aarch64-softmmu/hw/misc/mmio_interface.o
CC arm-softmmu/hw/virtio/vhost-user.o
CC arm-softmmu/hw/virtio/vhost-vsock.o
CC ppc64-softmmu/hw/ppc/spapr_ovec.o
CC aarch64-softmmu/hw/misc/msf2-sysreg.o
CC ppc64-softmmu/hw/ppc/pnv.o
CC aarch64-softmmu/hw/net/virtio-net.o
CC ppc64-softmmu/hw/ppc/pnv_xscom.o
CC arm-softmmu/hw/virtio/virtio-crypto.o
CC aarch64-softmmu/hw/net/vhost_net.o
CC aarch64-softmmu/hw/pcmcia/pxa2xx.o
CC aarch64-softmmu/hw/scsi/virtio-scsi.o
CC ppc64-softmmu/hw/ppc/pnv_core.o
CC aarch64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC ppc-softmmu/trace/generated-helpers.o
CC aarch64-softmmu/hw/scsi/vhost-scsi-common.o
CC aarch64-softmmu/hw/scsi/vhost-scsi.o
CC arm-softmmu/hw/virtio/virtio-crypto-pci.o
CC ppc64-softmmu/hw/ppc/pnv_lpc.o
CC aarch64-softmmu/hw/scsi/vhost-user-scsi.o
CC arm-softmmu/hw/arm/boot.o
CC ppc64-softmmu/hw/ppc/pnv_psi.o
CC ppc64-softmmu/hw/ppc/pnv_occ.o
CC aarch64-softmmu/hw/sd/omap_mmc.o
CC aarch64-softmmu/hw/sd/pxa2xx_mmci.o
CC arm-softmmu/hw/arm/collie.o
CC ppc64-softmmu/hw/ppc/pnv_bmc.o
CC arm-softmmu/hw/arm/exynos4_boards.o
CC ppc64-softmmu/hw/ppc/spapr_pci_vfio.o
CC arm-softmmu/hw/arm/gumstix.o
CC ppc64-softmmu/hw/ppc/spapr_rtas_ddw.o
CC aarch64-softmmu/hw/sd/bcm2835_sdhost.o
CC arm-softmmu/hw/arm/highbank.o
CC aarch64-softmmu/hw/ssi/omap_spi.o
CC ppc64-softmmu/hw/ppc/ppc405_boards.o
CC aarch64-softmmu/hw/ssi/imx_spi.o
CC aarch64-softmmu/hw/timer/exynos4210_mct.o
CC ppc64-softmmu/hw/ppc/ppc4xx_devs.o
CC ppc64-softmmu/hw/ppc/ppc405_uc.o
LINK arm-linux-user/qemu-arm
CC ppc64-softmmu/hw/ppc/ppc440_bamboo.o
CC aarch64-softmmu/hw/timer/exynos4210_pwm.o
CC ppc64-softmmu/hw/ppc/ppc4xx_pci.o
CC ppc64-softmmu/hw/ppc/prep.o
CC aarch64-softmmu/hw/timer/exynos4210_rtc.o
CC arm-softmmu/hw/arm/digic_boards.o
CC ppc64-softmmu/hw/ppc/prep_systemio.o
CC ppc64-softmmu/hw/ppc/rs6000_mc.o
LINK sh4-softmmu/qemu-system-sh4
CC arm-softmmu/hw/arm/integratorcp.o
CC aarch64-softmmu/hw/timer/omap_gptimer.o
CC ppc64-softmmu/hw/ppc/mac_oldworld.o
CC aarch64-softmmu/hw/timer/omap_synctimer.o
CC ppc64-softmmu/hw/ppc/mac_newworld.o
CC ppc64-softmmu/hw/ppc/e500.o
CC arm-softmmu/hw/arm/mainstone.o
CC aarch64-softmmu/hw/timer/pxa2xx_timer.o
CC ppc64-softmmu/hw/ppc/mpc8544ds.o
CC arm-softmmu/hw/arm/musicpal.o
CC aarch64-softmmu/hw/timer/digic-timer.o
CC arm-softmmu/hw/arm/nseries.o
CC ppc64-softmmu/hw/ppc/e500plat.o
CC arm-softmmu/hw/arm/omap_sx1.o
CC ppc64-softmmu/hw/ppc/mpc8544_guts.o
CC aarch64-softmmu/hw/timer/allwinner-a10-pit.o
LINK sh4eb-softmmu/qemu-system-sh4eb
CC aarch64-softmmu/hw/usb/tusb6010.o
CC aarch64-softmmu/hw/vfio/common.o
CC arm-softmmu/hw/arm/palm.o
CC arm-softmmu/hw/arm/realview.o
CC aarch64-softmmu/hw/vfio/pci.o
CC arm-softmmu/hw/arm/spitz.o
CC aarch64-softmmu/hw/vfio/pci-quirks.o
CC arm-softmmu/hw/arm/stellaris.o
CC arm-softmmu/hw/arm/tosa.o
CC ppc64-softmmu/hw/ppc/ppce500_spin.o
CC arm-softmmu/hw/arm/versatilepb.o
CC arm-softmmu/hw/arm/vexpress.o
CC ppc64-softmmu/hw/ppc/virtex_ml507.o
CC aarch64-softmmu/hw/vfio/platform.o
CC arm-softmmu/hw/arm/virt.o
CC arm-softmmu/hw/arm/xilinx_zynq.o
CC arm-softmmu/hw/arm/z2.o
CC arm-softmmu/hw/arm/virt-acpi-build.o
CC ppc64-softmmu/target/ppc/cpu-models.o
CC aarch64-softmmu/hw/vfio/calxeda-xgmac.o
CC aarch64-softmmu/hw/vfio/amd-xgbe.o
CC ppc64-softmmu/target/ppc/cpu.o
CC ppc64-softmmu/target/ppc/translate.o
CC arm-softmmu/hw/arm/netduino2.o
CC ppc64-softmmu/target/ppc/machine.o
CC aarch64-softmmu/hw/vfio/spapr.o
CC aarch64-softmmu/hw/virtio/virtio.o
CC arm-softmmu/hw/arm/sysbus-fdt.o
CC arm-softmmu/hw/arm/armv7m.o
CC ppc64-softmmu/target/ppc/mmu_helper.o
CC aarch64-softmmu/hw/virtio/virtio-balloon.o
CC arm-softmmu/hw/arm/exynos4210.o
CC ppc64-softmmu/target/ppc/mmu-hash32.o
CC arm-softmmu/hw/arm/pxa2xx.o
CC ppc64-softmmu/target/ppc/monitor.o
CC aarch64-softmmu/hw/virtio/vhost.o
CC arm-softmmu/hw/arm/pxa2xx_gpio.o
LINK sparc64-softmmu/qemu-system-sparc64
CC aarch64-softmmu/hw/virtio/vhost-backend.o
CC aarch64-softmmu/hw/virtio/vhost-user.o
CC arm-softmmu/hw/arm/pxa2xx_pic.o
CC arm-softmmu/hw/arm/digic.o
CC aarch64-softmmu/hw/virtio/vhost-vsock.o
CC ppc64-softmmu/target/ppc/arch_dump.o
CC ppc64-softmmu/target/ppc/mmu-hash64.o
CC aarch64-softmmu/hw/virtio/virtio-crypto.o
CC aarch64-softmmu/hw/virtio/virtio-crypto-pci.o
CC arm-softmmu/hw/arm/omap1.o
CC aarch64-softmmu/hw/arm/boot.o
CC ppc64-softmmu/target/ppc/mmu-book3s-v3.o
CC arm-softmmu/hw/arm/omap2.o
CC ppc64-softmmu/target/ppc/compat.o
CC aarch64-softmmu/hw/arm/collie.o
CC ppc64-softmmu/target/ppc/mmu-radix64.o
CC ppc64-softmmu/target/ppc/kvm.o
CC aarch64-softmmu/hw/arm/exynos4_boards.o
CC arm-softmmu/hw/arm/strongarm.o
CC arm-softmmu/hw/arm/allwinner-a10.o
CC ppc64-softmmu/target/ppc/dfp_helper.o
CC arm-softmmu/hw/arm/cubieboard.o
CC aarch64-softmmu/hw/arm/gumstix.o
CC aarch64-softmmu/hw/arm/highbank.o
CC ppc64-softmmu/target/ppc/excp_helper.o
CC arm-softmmu/hw/arm/bcm2835_peripherals.o
CC ppc64-softmmu/target/ppc/fpu_helper.o
CC aarch64-softmmu/hw/arm/digic_boards.o
CC ppc64-softmmu/target/ppc/int_helper.o
CC aarch64-softmmu/hw/arm/integratorcp.o
LINK mips-linux-user/qemu-mips
CC arm-softmmu/hw/arm/bcm2836.o
CC ppc64-softmmu/target/ppc/timebase_helper.o
CC aarch64-softmmu/hw/arm/mainstone.o
CC ppc64-softmmu/target/ppc/misc_helper.o
CC ppc64-softmmu/target/ppc/mem_helper.o
CC arm-softmmu/hw/arm/stm32f205_soc.o
CC arm-softmmu/hw/arm/raspi.o
CC ppc64-softmmu/target/ppc/gdbstub.o
CC arm-softmmu/hw/arm/fsl-imx25.o
CC arm-softmmu/hw/arm/imx25_pdk.o
CC ppc64-softmmu/target/ppc/../../libdecnumber/decContext.o
CC arm-softmmu/hw/arm/fsl-imx31.o
CC aarch64-softmmu/hw/arm/musicpal.o
CC ppc64-softmmu/target/ppc/../../libdecnumber/decNumber.o
CC aarch64-softmmu/hw/arm/nseries.o
CC arm-softmmu/hw/arm/kzm.o
CC ppc64-softmmu/target/ppc/../../libdecnumber/dpd/decimal32.o
CC ppc64-softmmu/target/ppc/../../libdecnumber/dpd/decimal64.o
CC aarch64-softmmu/hw/arm/omap_sx1.o
CC aarch64-softmmu/hw/arm/palm.o
CC ppc64-softmmu/target/ppc/../../libdecnumber/dpd/decimal128.o
CC aarch64-softmmu/hw/arm/realview.o
CC arm-softmmu/hw/arm/fsl-imx6.o
CC arm-softmmu/hw/arm/sabrelite.o
GEN trace/generated-helpers.c
CC aarch64-softmmu/hw/arm/spitz.o
CC aarch64-softmmu/hw/arm/stellaris.o
CC ppc64-softmmu/trace/control-target.o
CC aarch64-softmmu/hw/arm/tosa.o
CC arm-softmmu/hw/arm/aspeed_soc.o
CC ppc64-softmmu/gdbstub-xml.o
CC aarch64-softmmu/hw/arm/versatilepb.o
CC arm-softmmu/hw/arm/aspeed.o
CC arm-softmmu/hw/arm/mps2.o
CC aarch64-softmmu/hw/arm/vexpress.o
CC arm-softmmu/hw/arm/msf2-soc.o
CC ppc64-softmmu/trace/generated-helpers.o
CC aarch64-softmmu/hw/arm/xilinx_zynq.o
CC aarch64-softmmu/hw/arm/virt.o
CC aarch64-softmmu/hw/arm/z2.o
CC aarch64-softmmu/hw/arm/virt-acpi-build.o
CC aarch64-softmmu/hw/arm/netduino2.o
CC arm-softmmu/hw/arm/msf2-som.o
CC arm-softmmu/target/arm/arm-semi.o
CC aarch64-softmmu/hw/arm/sysbus-fdt.o
CC arm-softmmu/target/arm/machine.o
CC arm-softmmu/target/arm/psci.o
CC aarch64-softmmu/hw/arm/armv7m.o
CC arm-softmmu/target/arm/arch_dump.o
CC arm-softmmu/target/arm/monitor.o
CC aarch64-softmmu/hw/arm/exynos4210.o
CC arm-softmmu/target/arm/kvm-stub.o
CC arm-softmmu/target/arm/translate.o
CC arm-softmmu/target/arm/op_helper.o
CC arm-softmmu/target/arm/helper.o
CC aarch64-softmmu/hw/arm/pxa2xx.o
CC arm-softmmu/target/arm/cpu.o
CC aarch64-softmmu/hw/arm/pxa2xx_gpio.o
CC aarch64-softmmu/hw/arm/pxa2xx_pic.o
CC aarch64-softmmu/hw/arm/digic.o
CC aarch64-softmmu/hw/arm/omap1.o
CC arm-softmmu/target/arm/neon_helper.o
CC aarch64-softmmu/hw/arm/omap2.o
CC aarch64-softmmu/hw/arm/strongarm.o
CC aarch64-softmmu/hw/arm/allwinner-a10.o
CC arm-softmmu/target/arm/iwmmxt_helper.o
CC aarch64-softmmu/hw/arm/cubieboard.o
CC aarch64-softmmu/hw/arm/bcm2835_peripherals.o
CC arm-softmmu/target/arm/gdbstub.o
CC arm-softmmu/target/arm/crypto_helper.o
CC arm-softmmu/target/arm/arm-powerctl.o
CC aarch64-softmmu/hw/arm/bcm2836.o
GEN trace/generated-helpers.c
CC aarch64-softmmu/hw/arm/raspi.o
CC aarch64-softmmu/hw/arm/stm32f205_soc.o
CC arm-softmmu/trace/control-target.o
CC arm-softmmu/gdbstub-xml.o
CC aarch64-softmmu/hw/arm/xlnx-zynqmp.o
CC aarch64-softmmu/hw/arm/xlnx-zcu102.o
CC aarch64-softmmu/hw/arm/fsl-imx25.o
CC aarch64-softmmu/hw/arm/imx25_pdk.o
CC aarch64-softmmu/hw/arm/fsl-imx31.o
CC arm-softmmu/trace/generated-helpers.o
CC aarch64-softmmu/hw/arm/kzm.o
CC aarch64-softmmu/hw/arm/fsl-imx6.o
CC aarch64-softmmu/hw/arm/sabrelite.o
CC aarch64-softmmu/hw/arm/aspeed_soc.o
CC aarch64-softmmu/hw/arm/aspeed.o
CC aarch64-softmmu/hw/arm/mps2.o
CC aarch64-softmmu/hw/arm/msf2-soc.o
CC aarch64-softmmu/hw/arm/msf2-som.o
CC aarch64-softmmu/target/arm/arm-semi.o
CC aarch64-softmmu/target/arm/machine.o
CC aarch64-softmmu/target/arm/psci.o
CC aarch64-softmmu/target/arm/arch_dump.o
CC aarch64-softmmu/target/arm/monitor.o
CC aarch64-softmmu/target/arm/kvm-stub.o
CC aarch64-softmmu/target/arm/translate.o
CC aarch64-softmmu/target/arm/op_helper.o
CC aarch64-softmmu/target/arm/helper.o
CC aarch64-softmmu/target/arm/cpu.o
CC aarch64-softmmu/target/arm/neon_helper.o
CC aarch64-softmmu/target/arm/iwmmxt_helper.o
CC aarch64-softmmu/target/arm/gdbstub.o
CC aarch64-softmmu/target/arm/cpu64.o
CC aarch64-softmmu/target/arm/translate-a64.o
CC aarch64-softmmu/target/arm/helper-a64.o
CC aarch64-softmmu/target/arm/gdbstub64.o
CC aarch64-softmmu/target/arm/crypto_helper.o
CC aarch64-softmmu/target/arm/arm-powerctl.o
GEN trace/generated-helpers.c
CC aarch64-softmmu/trace/control-target.o
CC aarch64-softmmu/gdbstub-xml.o
CC aarch64-softmmu/trace/generated-helpers.o
LINK i386-linux-user/qemu-i386
LINK mips64-linux-user/qemu-mips64
LINK tricore-softmmu/qemu-system-tricore
LINK mipsn32el-linux-user/qemu-mipsn32el
LINK i386-softmmu/qemu-system-i386
LINK x86_64-softmmu/qemu-system-x86_64
LINK mipsel-softmmu/qemu-system-mipsel
LINK aarch64-softmmu/qemu-system-aarch64
LINK mips-softmmu/qemu-system-mips
LINK arm-softmmu/qemu-system-arm
LINK ppc64le-linux-user/qemu-ppc64le
LINK ppc-linux-user/qemu-ppc
LINK ppc64abi32-linux-user/qemu-ppc64abi32
LINK mips64-softmmu/qemu-system-mips64
LINK ppc64-linux-user/qemu-ppc64
LINK mips64el-softmmu/qemu-system-mips64el
LINK ppcemb-softmmu/qemu-system-ppcemb
LINK ppc-softmmu/qemu-system-ppc
LINK ppc64-softmmu/qemu-system-ppc64
=== 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] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (14 preceding siblings ...)
2017-10-30 16:54 ` [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration no-reply
@ 2017-10-30 16:55 ` no-reply
2017-10-30 18:22 ` Vladimir Sementsov-Ogievskiy
16 siblings, 0 replies; 44+ messages in thread
From: no-reply @ 2017-10-30 16:55 UTC (permalink / raw)
To: vsementsov; +Cc: famz, qemu-block, qemu-devel, kwolf, peter.maydell
Hi,
This series failed build test on s390x host. Please find the details below.
Message-id: 20171030163309.75770-1-vsementsov@virtuozzo.com
Subject: [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration
Type: series
=== TEST SCRIPT BEGIN ===
#!/bin/bash
# Testing script will be invoked under the git checkout with
# HEAD pointing to a commit that has the patches applied on top of "base"
# branch
set -e
echo "=== ENV ==="
env
echo "=== PACKAGES ==="
rpm -qa
echo "=== TEST BEGIN ==="
CC=$HOME/bin/cc
INSTALL=$PWD/install
BUILD=$PWD/build
echo -n "Using CC: "
realpath $CC
mkdir -p $BUILD $INSTALL
SRC=$PWD
cd $BUILD
$SRC/configure --cc=$CC --prefix=$INSTALL
make -j4
# XXX: we need reliable clean up
# make check -j4 V=1
make install
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
- [tag update] patchew/150822818243.26242.12993827911736928961.stgit@bahia.lan -> patchew/150822818243.26242.12993827911736928961.stgit@bahia.lan
- [tag update] patchew/20171027104037.8319-1-eblake@redhat.com -> patchew/20171027104037.8319-1-eblake@redhat.com
- [tag update] patchew/20171029125338.25988-1-kwolf@redhat.com -> patchew/20171029125338.25988-1-kwolf@redhat.com
- [tag update] patchew/20171030102830.4469-1-kraxel@redhat.com -> patchew/20171030102830.4469-1-kraxel@redhat.com
* [new tag] patchew/20171030163309.75770-1-vsementsov@virtuozzo.com -> patchew/20171030163309.75770-1-vsementsov@virtuozzo.com
Switched to a new branch 'test'
b200358 iotests: add persistent bitmap migration test
2bc0dad iotests: add dirty bitmap postcopy test
a572a25 iotests: add dirty bitmap migration test
012af82 iotests: add default node-name
d0573d2 migration: add postcopy migration of dirty bitmaps
1c5318d migration: add is_active_iterate handler
7697c9a migration/qemu-file: add qemu_put_counted_string()
b4e20bb migration: include migrate_dirty_bitmaps in migrate_postcopy
272f21c qapi: add dirty-bitmaps migration capability
7f3bb03 migration: introduce postcopy-only pending
c8f365f block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen
93cb6f1 block/dirty-bitmap: add bdrv_dirty_bitmap_release_successor
92ce534 block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap
abf3538 block/dirty-bitmap: add bdrv_dirty_bitmap_enable_successor()
=== OUTPUT BEGIN ===
=== ENV ===
XDG_SESSION_ID=69560
SHELL=/bin/sh
USER=fam
PATCHEW=/home/fam/patchew/patchew-cli -s http://patchew.org --nodebug
PATH=/usr/bin:/bin
PWD=/var/tmp/patchew-tester-tmp-30ljxus4/src
LANG=en_US.UTF-8
HOME=/home/fam
SHLVL=2
LOGNAME=fam
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1012/bus
XDG_RUNTIME_DIR=/run/user/1012
_=/usr/bin/env
=== PACKAGES ===
gpg-pubkey-873529b8-54e386ff
xz-libs-5.2.2-2.fc24.s390x
libxshmfence-1.2-3.fc24.s390x
giflib-4.1.6-15.fc24.s390x
trousers-lib-0.3.13-6.fc24.s390x
ncurses-base-6.0-6.20160709.fc25.noarch
gmp-6.1.1-1.fc25.s390x
libidn-1.33-1.fc25.s390x
slang-2.3.0-7.fc25.s390x
pkgconfig-0.29.1-1.fc25.s390x
alsa-lib-1.1.1-2.fc25.s390x
yum-metadata-parser-1.1.4-17.fc25.s390x
python3-slip-dbus-0.6.4-4.fc25.noarch
python2-cssselect-0.9.2-1.fc25.noarch
createrepo_c-libs-0.10.0-6.fc25.s390x
initscripts-9.69-1.fc25.s390x
parted-3.2-21.fc25.s390x
flex-2.6.0-3.fc25.s390x
colord-libs-1.3.4-1.fc25.s390x
python-osbs-client-0.33-3.fc25.noarch
perl-Pod-Simple-3.35-1.fc25.noarch
python2-simplejson-3.10.0-1.fc25.s390x
brltty-5.4-2.fc25.s390x
librados2-10.2.4-2.fc25.s390x
tcp_wrappers-7.6-83.fc25.s390x
libcephfs_jni1-10.2.4-2.fc25.s390x
nettle-devel-3.3-1.fc25.s390x
bzip2-devel-1.0.6-21.fc25.s390x
libuuid-2.28.2-2.fc25.s390x
python3-dnf-1.1.10-6.fc25.noarch
texlive-kpathsea-doc-svn41139-33.fc25.1.noarch
openssh-7.4p1-4.fc25.s390x
texlive-kpathsea-bin-svn40473-33.20160520.fc25.1.s390x
texlive-graphics-svn41015-33.fc25.1.noarch
texlive-dvipdfmx-def-svn40328-33.fc25.1.noarch
texlive-mfware-svn40768-33.fc25.1.noarch
texlive-texlive-scripts-svn41433-33.fc25.1.noarch
texlive-euro-svn22191.1.1-33.fc25.1.noarch
texlive-etex-svn37057.0-33.fc25.1.noarch
texlive-iftex-svn29654.0.2-33.fc25.1.noarch
texlive-palatino-svn31835.0-33.fc25.1.noarch
texlive-texlive-docindex-svn41430-33.fc25.1.noarch
texlive-xunicode-svn30466.0.981-33.fc25.1.noarch
texlive-koma-script-svn41508-33.fc25.1.noarch
texlive-pst-grad-svn15878.1.06-33.fc25.1.noarch
texlive-pst-blur-svn15878.2.0-33.fc25.1.noarch
texlive-jknapltx-svn19440.0-33.fc25.1.noarch
texinfo-6.1-4.fc25.s390x
openssl-devel-1.0.2k-1.fc25.s390x
jansson-2.10-2.fc25.s390x
fedora-repos-25-4.noarch
perl-Errno-1.25-387.fc25.s390x
acl-2.2.52-13.fc25.s390x
systemd-pam-231-17.fc25.s390x
NetworkManager-libnm-1.4.4-5.fc25.s390x
poppler-0.45.0-5.fc25.s390x
ccache-3.3.4-1.fc25.s390x
valgrind-3.12.0-9.fc25.s390x
perl-open-1.10-387.fc25.noarch
libgcc-6.4.1-1.fc25.s390x
libsoup-2.56.1-1.fc25.s390x
libstdc++-devel-6.4.1-1.fc25.s390x
libobjc-6.4.1-1.fc25.s390x
python2-rpm-4.13.0.1-2.fc25.s390x
python2-gluster-3.10.5-1.fc25.s390x
rpm-build-4.13.0.1-2.fc25.s390x
glibc-static-2.24-10.fc25.s390x
lz4-1.8.0-1.fc25.s390x
xapian-core-libs-1.2.24-1.fc25.s390x
elfutils-libelf-devel-0.169-1.fc25.s390x
nss-softokn-3.32.0-1.2.fc25.s390x
pango-1.40.9-1.fc25.s390x
glibc-debuginfo-common-2.24-10.fc25.s390x
libaio-0.3.110-6.fc24.s390x
libfontenc-1.1.3-3.fc24.s390x
lzo-2.08-8.fc24.s390x
isl-0.14-5.fc24.s390x
libXau-1.0.8-6.fc24.s390x
linux-atm-libs-2.5.1-14.fc24.s390x
libXext-1.3.3-4.fc24.s390x
libXxf86vm-1.1.4-3.fc24.s390x
bison-3.0.4-4.fc24.s390x
perl-srpm-macros-1-20.fc25.noarch
gawk-4.1.3-8.fc25.s390x
libwayland-client-1.12.0-1.fc25.s390x
perl-Exporter-5.72-366.fc25.noarch
perl-version-0.99.17-1.fc25.s390x
fftw-libs-double-3.3.5-3.fc25.s390x
libssh2-1.8.0-1.fc25.s390x
ModemManager-glib-1.6.4-1.fc25.s390x
newt-python3-0.52.19-2.fc25.s390x
python-munch-2.0.4-3.fc25.noarch
python-bugzilla-1.2.2-4.fc25.noarch
libedit-3.1-16.20160618cvs.fc25.s390x
createrepo_c-0.10.0-6.fc25.s390x
device-mapper-multipath-libs-0.4.9-83.fc25.s390x
yum-3.4.3-510.fc25.noarch
mozjs17-17.0.0-16.fc25.s390x
libselinux-2.5-13.fc25.s390x
python2-pyparsing-2.1.10-1.fc25.noarch
cairo-gobject-1.14.8-1.fc25.s390x
xorg-x11-proto-devel-7.7-20.fc25.noarch
brlapi-0.6.5-2.fc25.s390x
librados-devel-10.2.4-2.fc25.s390x
libXinerama-devel-1.1.3-6.fc24.s390x
lua-posix-33.3.1-3.fc25.s390x
usbredir-devel-0.7.1-2.fc24.s390x
python3-dnf-plugins-core-0.1.21-5.fc25.noarch
texlive-pdftex-doc-svn41149-33.fc25.1.noarch
openssh-clients-7.4p1-4.fc25.s390x
iptables-1.6.0-3.fc25.s390x
texlive-texlive.infra-svn41280-33.fc25.1.noarch
texlive-graphics-cfg-svn40269-33.fc25.1.noarch
texlive-bibtex-svn40768-33.fc25.1.noarch
texlive-mfware-bin-svn40473-33.20160520.fc25.1.s390x
texlive-texlive-scripts-bin-svn29741.0-33.20160520.fc25.1.noarch
texlive-sauerj-svn15878.0-33.fc25.1.noarch
texlive-enctex-svn34957.0-33.fc25.1.noarch
texlive-ifetex-svn24853.1.2-33.fc25.1.noarch
texlive-ntgclass-svn15878.2.1a-33.fc25.1.noarch
texlive-tex-gyre-math-svn41264-33.fc25.1.noarch
texlive-bera-svn20031.0-33.fc25.1.noarch
texlive-ms-svn29849.0-33.fc25.1.noarch
texlive-pst-fill-svn15878.1.01-33.fc25.1.noarch
texlive-ctable-svn38672-33.fc25.1.noarch
texlive-extsizes-svn17263.1.4a-33.fc25.1.noarch
texlive-collection-latexrecommended-svn35765.0-33.20160520.fc25.1.noarch
perl-Filter-1.57-1.fc25.s390x
python2-rpm-macros-3-12.fc25.noarch
gdbm-1.13-1.fc25.s390x
libtasn1-4.12-1.fc25.s390x
fedora-release-25-2.noarch
gdb-headless-7.12.1-48.fc25.s390x
perl-macros-5.24.2-387.fc25.s390x
pcre-devel-8.41-1.fc25.s390x
libX11-1.6.5-1.fc25.s390x
coreutils-8.25-17.fc25.s390x
python2-openidc-client-0-3.20170523git77cb3ee.fc25.noarch
systemtap-client-3.1-5.fc25.s390x
firewalld-0.4.4.5-1.fc25.noarch
glibc-2.24-10.fc25.s390x
libglvnd-egl-0.2.999-24.20170818git8d4d03f.fc25.s390x
libkadm5-1.14.4-8.fc25.s390x
glusterfs-fuse-3.10.5-1.fc25.s390x
libgfortran-6.4.1-1.fc25.s390x
python3-rpm-4.13.0.1-2.fc25.s390x
glusterfs-extra-xlators-3.10.5-1.fc25.s390x
dracut-config-rescue-046-2.git20170811.fc25.s390x
python2-sphinx-theme-alabaster-0.7.9-1.fc25.noarch
elfutils-devel-0.169-1.fc25.s390x
nss-3.32.0-1.1.fc25.s390x
pango-devel-1.40.9-1.fc25.s390x
glibc-debuginfo-2.24-10.fc25.s390x
gpg-pubkey-efe550f5-5220ba41
gpg-pubkey-81b46521-55b3ca9a
filesystem-3.2-37.fc24.s390x
libffi-3.1-9.fc24.s390x
keyutils-libs-1.5.9-8.fc24.s390x
libnfnetlink-1.0.1-8.fc24.s390x
libtheora-1.1.1-14.fc24.s390x
xml-common-0.6.3-44.fc24.noarch
autoconf-2.69-22.fc24.noarch
libXt-1.1.5-3.fc24.s390x
kbd-legacy-2.0.3-3.fc24.noarch
ghostscript-fonts-5.50-35.fc24.noarch
libXevie-1.0.3-11.fc24.s390x
libcap-2.25-2.fc25.s390x
mpfr-3.1.5-1.fc25.s390x
perl-Carp-1.40-365.fc25.noarch
libmnl-1.0.4-1.fc25.s390x
perl-Unicode-EastAsianWidth-1.33-8.fc25.noarch
libwayland-cursor-1.12.0-1.fc25.s390x
python-krbV-1.0.90-12.fc25.s390x
python2-urllib3-1.15.1-3.fc25.noarch
fipscheck-1.4.1-11.fc25.s390x
libndp-1.6-1.fc25.s390x
gnupg2-2.1.13-2.fc25.s390x
libXfixes-5.0.3-1.fc25.s390x
adwaita-icon-theme-3.22.0-1.fc25.noarch
dconf-0.26.0-1.fc25.s390x
ncurses-devel-6.0-6.20160709.fc25.s390x
dejagnu-1.6-1.fc25.noarch
device-mapper-1.02.136-3.fc25.s390x
libevent-2.0.22-1.fc25.s390x
atk-devel-2.22.0-1.fc25.s390x
libev-4.24-1.fc25.s390x
xorg-x11-fonts-Type1-7.5-16.fc24.noarch
brlapi-devel-0.6.5-2.fc25.s390x
pulseaudio-libs-10.0-2.fc25.s390x
glib2-2.50.3-1.fc25.s390x
dnf-1.1.10-6.fc25.noarch
texlive-metafont-bin-svn40987-33.20160520.fc25.1.s390x
texlive-xkeyval-svn35741.2.7a-33.fc25.1.noarch
texlive-euler-svn17261.2.5-33.fc25.1.noarch
texlive-mptopdf-svn41282-33.fc25.1.noarch
texlive-wasy-svn35831.0-33.fc25.1.noarch
texlive-avantgar-svn31835.0-33.fc25.1.noarch
texlive-eurosym-svn17265.1.4_subrfix-33.fc25.1.noarch
texlive-knuth-lib-svn35820.0-33.fc25.1.noarch
texlive-parallel-svn15878.0-33.fc25.1.noarch
texlive-texlive-msg-translations-svn41431-33.fc25.1.noarch
texlive-latex-svn40218-33.fc25.1.noarch
texlive-lualatex-math-svn40621-33.fc25.1.noarch
texlive-auto-pst-pdf-svn23723.0.6-33.fc25.1.noarch
texlive-powerdot-svn38984-33.fc25.1.noarch
texlive-wasysym-svn15878.2.0-33.fc25.1.noarch
ImageMagick-libs-6.9.3.0-6.fc25.s390x
geoclue2-2.4.5-1.fc25.s390x
perl-IO-Socket-IP-0.39-1.fc25.noarch
python2-pyasn1-0.2.3-1.fc25.noarch
at-spi2-core-devel-2.22.1-1.fc25.s390x
libacl-2.2.52-13.fc25.s390x
perl-libs-5.24.2-387.fc25.s390x
mesa-libglapi-17.0.5-3.fc25.s390x
python3-rpmconf-1.0.19-1.fc25.noarch
pcre-utf32-8.41-1.fc25.s390x
libX11-common-1.6.5-1.fc25.noarch
coreutils-common-8.25-17.fc25.s390x
mesa-libEGL-17.0.5-3.fc25.s390x
systemtap-runtime-3.1-5.fc25.s390x
NetworkManager-glib-1.4.4-5.fc25.s390x
audit-2.7.7-1.fc25.s390x
glibc-all-langpacks-2.24-10.fc25.s390x
libglvnd-glx-0.2.999-24.20170818git8d4d03f.fc25.s390x
glusterfs-api-3.10.5-1.fc25.s390x
libepoxy-devel-1.4.3-1.fc25.1.s390x
gtk3-3.22.17-2.fc25.s390x
rpm-4.13.0.1-2.fc25.s390x
net-snmp-agent-libs-5.7.3-15.fc25.s390x
pcre2-devel-10.23-9.fc25.s390x
subversion-1.9.7-1.fc25.s390x
libsndfile-1.0.28-6.fc25.s390x
lasi-1.1.2-6.fc24.s390x
python2-snowballstemmer-1.2.1-1.fc25.noarch
nss-util-devel-3.32.0-1.0.fc25.s390x
vim-common-8.0.1030-1.fc25.s390x
gd-2.2.5-1.fc25.s390x
gpg-pubkey-34ec9cba-54e38751
gpg-pubkey-030d5aed-55b577f0
basesystem-11-2.fc24.noarch
libmpc-1.0.2-5.fc24.s390x
libunistring-0.9.4-3.fc24.s390x
libmodman-2.0.1-12.fc24.s390x
lsscsi-0.28-3.fc24.s390x
kbd-misc-2.0.3-3.fc24.noarch
kmod-23-1.fc25.s390x
newt-0.52.19-2.fc25.s390x
perl-Text-Unidecode-1.27-3.fc25.noarch
plymouth-core-libs-0.9.3-0.6.20160620git0e65b86c.fc25.s390x
which-2.21-1.fc25.s390x
python3-slip-0.6.4-4.fc25.noarch
python3-systemd-232-1.fc25.s390x
python-lockfile-0.11.0-4.fc25.noarch
python2-requests-2.10.0-4.fc25.noarch
libnghttp2-1.13.0-2.fc25.s390x
python-urlgrabber-3.10.1-9.fc25.noarch
iputils-20161105-1.fc25.s390x
rest-0.8.0-1.fc25.s390x
adwaita-cursor-theme-3.22.0-1.fc25.noarch
authconfig-6.2.10-14.fc25.s390x
automake-1.15-7.fc25.noarch
shared-mime-info-1.8-1.fc25.s390x
pigz-2.3.4-1.fc25.s390x
device-mapper-libs-1.02.136-3.fc25.s390x
dnsmasq-2.76-2.fc25.s390x
fedora-packager-0.6.0.1-1.fc25.noarch
libwebp-0.5.2-1.fc25.s390x
boost-system-1.60.0-10.fc25.s390x
libasyncns-0.8-10.fc24.s390x
libXau-devel-1.0.8-6.fc24.s390x
libverto-libev-0.2.6-6.fc24.s390x
python3-html5lib-0.999-9.fc25.noarch
ttmkfdir-3.0.9-48.fc24.s390x
pulseaudio-libs-glib2-10.0-2.fc25.s390x
texlive-lib-2016-33.20160520.fc25.s390x
libXi-devel-1.7.9-1.fc25.s390x
python3-distro-1.0.3-1.fc25.noarch
texlive-texlive-common-doc-svn40682-33.fc25.1.noarch
packagedb-cli-2.14.1-1.fc25.noarch
texlive-metafont-svn40793-33.fc25.1.noarch
texlive-tools-svn40934-33.fc25.1.noarch
texlive-enumitem-svn24146.3.5.2-33.fc25.1.noarch
texlive-mptopdf-bin-svn18674.0-33.20160520.fc25.1.noarch
texlive-underscore-svn18261.0-33.fc25.1.noarch
texlive-anysize-svn15878.0-33.fc25.1.noarch
texlive-euenc-svn19795.0.1h-33.fc25.1.noarch
texlive-kastrup-svn15878.0-33.fc25.1.noarch
texlive-paralist-svn39247-33.fc25.1.noarch
texlive-texlive-en-svn41185-33.fc25.1.noarch
texlive-tipa-svn29349.1.3-33.fc25.1.noarch
texlive-currfile-svn40725-33.fc25.1.noarch
texlive-pst-node-svn40743-33.fc25.1.noarch
texlive-pst-slpe-svn24391.1.31-33.fc25.1.noarch
texlive-typehtml-svn17134.0-33.fc25.1.noarch
SDL2-devel-2.0.5-3.fc25.s390x
libcroco-0.6.11-3.fc25.s390x
bluez-libs-devel-5.44-1.fc25.s390x
firewalld-filesystem-0.4.4.5-1.fc25.noarch
pcre-cpp-8.41-1.fc25.s390x
python3-firewall-0.4.4.5-1.fc25.noarch
freetype-devel-2.6.5-9.fc25.s390x
pcre-utf16-8.41-1.fc25.s390x
linux-firmware-20170605-74.git37857004.fc25.noarch
kernel-modules-4.11.10-200.fc25.s390x
systemtap-devel-3.1-5.fc25.s390x
polkit-0.113-8.fc25.s390x
perl-SelfLoader-1.23-387.fc25.noarch
libdb-utils-5.3.28-24.fc25.s390x
glibc-common-2.24-10.fc25.s390x
libglvnd-0.2.999-24.20170818git8d4d03f.fc25.s390x
webkitgtk4-2.16.6-1.fc25.s390x
rpm-build-libs-4.13.0.1-2.fc25.s390x
libglvnd-core-devel-0.2.999-24.20170818git8d4d03f.fc25.s390x
rpm-devel-4.13.0.1-2.fc25.s390x
kernel-4.12.9-200.fc25.s390x
libtool-ltdl-2.4.6-14.fc25.s390x
gts-0.7.6-29.20121130.fc24.s390x
python2-imagesize-0.7.1-2.fc25.noarch
nss-softokn-freebl-3.32.0-1.2.fc25.s390x
selinux-policy-3.13.1-225.22.fc25.noarch
kernel-devel-4.12.11-200.fc25.s390x
fontpackages-filesystem-1.44-17.fc24.noarch
groff-base-1.22.3-8.fc24.s390x
ilmbase-2.2.0-5.fc24.s390x
OpenEXR-libs-2.2.0-5.fc24.s390x
hesiod-3.2.1-6.fc24.s390x
sysfsutils-2.1.0-19.fc24.s390x
ocaml-srpm-macros-2-4.fc24.noarch
mailx-12.5-19.fc24.s390x
ncurses-libs-6.0-6.20160709.fc25.s390x
ipset-libs-6.29-1.fc25.s390x
gmp-devel-6.1.1-1.fc25.s390x
python-pip-8.1.2-2.fc25.noarch
harfbuzz-1.3.2-1.fc25.s390x
python2-iniparse-0.4-20.fc25.noarch
python3-iniparse-0.4-20.fc25.noarch
python3-kickstart-2.32-1.fc25.noarch
perl-Net-SSLeay-1.78-1.fc25.s390x
drpm-0.3.0-3.fc25.s390x
glib-networking-2.50.0-1.fc25.s390x
webkitgtk3-2.4.11-3.fc25.s390x
libXaw-1.0.13-4.fc25.s390x
xorg-x11-font-utils-7.5-32.fc25.s390x
hardlink-1.1-1.fc25.s390x
libcom_err-1.43.3-1.fc25.s390x
python2-dateutil-2.6.0-1.fc25.noarch
libXpm-3.5.12-1.fc25.s390x
poppler-data-0.4.7-6.fc25.noarch
librbd1-10.2.4-2.fc25.s390x
perl-Digest-MD5-2.55-2.fc25.s390x
wayland-protocols-devel-1.7-1.fc25.noarch
texi2html-5.0-4.fc24.noarch
libxkbcommon-0.7.1-1.fc25.s390x
libuuid-devel-2.28.2-2.fc25.s390x
libcacard-2.5.3-1.fc25.s390x
libwmf-lite-0.2.8.4-50.fc25.s390x
texlive-tetex-svn41059-33.fc25.1.noarch
texlive-thumbpdf-svn34621.3.16-33.fc25.1.noarch
texlive-carlisle-svn18258.0-33.fc25.1.noarch
texlive-makeindex-bin-svn40473-33.20160520.fc25.1.s390x
texlive-pdftex-svn41149-33.fc25.1.noarch
texlive-csquotes-svn39538-33.fc25.1.noarch
texlive-courier-svn35058.0-33.fc25.1.noarch
texlive-helvetic-svn31835.0-33.fc25.1.noarch
texlive-mfnfss-svn19410.0-33.fc25.1.noarch
texlive-sepnum-svn20186.2.0-33.fc25.1.noarch
texlive-utopia-svn15878.0-33.fc25.1.noarch
texlive-luatexbase-svn38550-33.fc25.1.noarch
texlive-pst-3d-svn17257.1.10-33.fc25.1.noarch
texlive-latex-bin-bin-svn14050.0-33.20160520.fc25.1.noarch
texlive-l3experimental-svn41163-33.fc25.1.noarch
net-tools-2.0-0.40.20160329git.fc25.s390x
perl-Pod-Perldoc-3.28-1.fc25.noarch
openssl-1.0.2k-1.fc25.s390x
man-pages-4.06-4.fc25.noarch
libxml2-2.9.4-2.fc25.s390x
python3-dateutil-2.6.0-1.fc25.noarch
perl-threads-shared-1.57-1.fc25.s390x
libnotify-0.7.7-1.fc25.s390x
unzip-6.0-32.fc25.s390x
python-beautifulsoup4-4.6.0-1.fc25.noarch
dhcp-client-4.3.5-3.fc25.s390x
python2-fedora-0.9.0-6.fc25.noarch
gdb-7.12.1-48.fc25.s390x
sqlite-libs-3.14.2-3.fc25.s390x
webkitgtk4-jsc-2.16.6-1.fc25.s390x
libgomp-6.4.1-1.fc25.s390x
p11-kit-trust-0.23.8-1.fc25.s390x
gdk-pixbuf2-devel-2.36.9-1.fc25.s390x
rpm-plugin-selinux-4.13.0.1-2.fc25.s390x
mariadb-common-10.1.25-1.fc25.s390x
dbus-devel-1.11.16-1.fc25.s390x
lz4-libs-1.8.0-1.fc25.s390x
python2-jinja2-2.8.1-1.fc25.noarch
system-python-libs-3.5.4-1.fc25.s390x
python2-rpkg-1.50-2.fc25.noarch
libsolv-0.6.29-1.fc25.s390x
gpg-pubkey-95a43f54-5284415a
dejavu-fonts-common-2.35-3.fc24.noarch
libSM-1.2.2-4.fc24.s390x
diffutils-3.3-13.fc24.s390x
libogg-1.3.2-5.fc24.s390x
hunspell-en-US-0.20140811.1-5.fc24.noarch
libdaemon-0.14-10.fc24.s390x
patch-2.7.5-3.fc24.s390x
libsysfs-2.1.0-19.fc24.s390x
procmail-3.22-39.fc24.s390x
libXdamage-1.1.4-8.fc24.s390x
libotf-0.9.13-7.fc24.s390x
urw-fonts-2.4-22.fc24.noarch
crontabs-1.11-12.20150630git.fc24.noarch
ppp-2.4.7-9.fc24.s390x
cyrus-sasl-2.1.26-26.2.fc24.s390x
zlib-devel-1.2.8-10.fc24.s390x
time-1.7-49.fc24.s390x
gpg-pubkey-fdb19c98-56fd6333
libcap-ng-0.7.8-1.fc25.s390x
binutils-2.26.1-1.fc25.s390x
lcms2-2.8-2.fc25.s390x
libcomps-0.1.7-5.fc25.s390x
perl-constant-1.33-367.fc25.noarch
perl-Data-Dumper-2.161-1.fc25.s390x
ipcalc-0.1.8-1.fc25.s390x
gmp-c++-6.1.1-1.fc25.s390x
fontconfig-2.12.1-1.fc25.s390x
enchant-1.6.0-14.fc25.s390x
pyliblzma-0.5.3-16.fc25.s390x
libsepol-devel-2.5-10.fc25.s390x
python3-ordered-set-2.0.0-4.fc25.noarch
python-ipaddress-1.0.16-3.fc25.noarch
python2-kerberos-1.2.5-1.fc25.s390x
python2-pysocks-1.5.6-5.fc25.noarch
fipscheck-lib-1.4.1-11.fc25.s390x
libatomic_ops-7.4.4-1.fc25.s390x
python2-pygpgme-0.3-18.fc25.s390x
orc-0.4.26-1.fc25.s390x
yum-utils-1.1.31-511.fc25.noarch
libXrender-0.9.10-1.fc25.s390x
libXrandr-1.5.1-1.fc25.s390x
go-srpm-macros-2-7.fc25.noarch
gnupg2-smime-2.1.13-2.fc25.s390x
guile-devel-2.0.13-1.fc25.s390x
uboot-tools-2016.09.01-2.fc25.s390x
pykickstart-2.32-1.fc25.noarch
python-bunch-1.0.1-9.fc25.noarch
perl-generators-1.10-1.fc25.noarch
perl-Mozilla-CA-20160104-3.fc25.noarch
bzip2-libs-1.0.6-21.fc25.s390x
libpng-1.6.27-1.fc25.s390x
desktop-file-utils-0.23-2.fc25.s390x
python2-cccolutils-1.4-1.fc25.s390x
python2-lxml-3.7.2-1.fc25.s390x
redhat-rpm-config-45-1.fc25.noarch
device-mapper-event-libs-1.02.136-3.fc25.s390x
lvm2-libs-2.02.167-3.fc25.s390x
libselinux-python-2.5-13.fc25.s390x
boost-thread-1.60.0-10.fc25.s390x
librbd-devel-10.2.4-2.fc25.s390x
libXcursor-devel-1.1.14-6.fc24.s390x
latex2html-2012-7.fc24.noarch
lksctp-tools-1.0.16-5.fc24.s390x
libfdt-1.4.2-1.fc25.s390x
libXft-devel-2.3.2-4.fc24.s390x
libattr-devel-2.4.47-16.fc24.s390x
libiscsi-devel-1.15.0-2.fc24.s390x
gettext-0.19.8.1-3.fc25.s390x
libjpeg-turbo-devel-1.5.1-0.fc25.s390x
pulseaudio-libs-devel-10.0-2.fc25.s390x
libmount-2.28.2-2.fc25.s390x
python3-decorator-4.0.11-1.fc25.noarch
tzdata-java-2017b-1.fc25.noarch
python-srpm-macros-3-12.fc25.noarch
libsmartcols-2.28.2-2.fc25.s390x
texlive-kpathsea-svn41139-33.fc25.1.noarch
texlive-amsmath-svn41561-33.fc25.1.noarch
texlive-thumbpdf-bin-svn6898.0-33.20160520.fc25.1.noarch
texlive-psnfss-svn33946.9.2a-33.fc25.1.noarch
texlive-subfig-svn15878.1.3-33.fc25.1.noarch
texlive-fancybox-svn18304.1.4-33.fc25.1.noarch
texlive-lua-alt-getopt-svn29349.0.7.0-33.fc25.1.noarch
texlive-natbib-svn20668.8.31b-33.fc25.1.noarch
texlive-pdftex-bin-svn40987-33.20160520.fc25.1.s390x
texlive-xdvi-svn40768-33.fc25.1.noarch
texlive-crop-svn15878.1.5-33.fc25.1.noarch
texlive-babel-english-svn30264.3.3p-33.fc25.1.noarch
texlive-cmextra-svn32831.0-33.fc25.1.noarch
texlive-fancyhdr-svn15878.3.1-33.fc25.1.noarch
texlive-luatex-svn40963-33.fc25.1.noarch
texlive-knuth-local-svn38627-33.fc25.1.noarch
texlive-mflogo-font-svn36898.1.002-33.fc25.1.noarch
texlive-parskip-svn19963.2.0-33.fc25.1.noarch
texlive-section-svn20180.0-33.fc25.1.noarch
texlive-textcase-svn15878.0-33.fc25.1.noarch
texlive-updmap-map-svn41159-33.fc25.1.noarch
texlive-attachfile-svn38830-33.fc25.1.noarch
libtiff-4.0.8-1.fc25.s390x
libdb-5.3.28-24.fc25.s390x
bind-license-9.10.5-2.P2.fc25.noarch
mesa-libGLES-17.0.5-3.fc25.s390x
python3-requests-kerberos-0.10.0-2.fc25.noarch
python3-pyOpenSSL-16.2.0-1.fc25.noarch
perl-threads-2.16-1.fc25.s390x
cryptsetup-libs-1.7.5-1.fc25.s390x
netpbm-10.79.00-1.fc25.s390x
qrencode-libs-3.4.4-1.fc25.s390x
gstreamer1-plugins-base-1.10.5-1.fc25.s390x
elfutils-default-yama-scope-0.169-1.fc25.noarch
systemd-udev-231-17.fc25.s390x
python2-koji-1.13.0-2.fc25.noarch
unbound-libs-1.6.3-1.fc25.s390x
openldap-2.4.44-11.fc25.s390x
koji-1.13.0-2.fc25.noarch
bind99-libs-9.9.10-2.P3.fc25.s390x
mesa-libGL-devel-17.0.5-3.fc25.s390x
graphite2-devel-1.3.10-1.fc25.s390x
systemtap-sdt-devel-3.1-5.fc25.s390x
iproute-tc-4.11.0-1.fc25.s390x
libarchive-3.2.2-2.fc25.s390x
publicsuffix-list-dafsa-20170424-1.fc25.noarch
expat-2.2.3-1.fc25.s390x
p11-kit-0.23.8-1.fc25.s390x
kernel-core-4.12.9-200.fc25.s390x
emacs-filesystem-25.2-3.fc25.noarch
ca-certificates-2017.2.16-1.0.fc25.noarch
librsvg2-2.40.18-1.fc25.s390x
gtk-update-icon-cache-3.22.17-2.fc25.s390x
libidn2-2.0.4-1.fc25.s390x
rpm-libs-4.13.0.1-2.fc25.s390x
mariadb-libs-10.1.25-1.fc25.s390x
java-1.8.0-openjdk-headless-1.8.0.144-5.b01.fc25.s390x
gcc-objc-6.4.1-1.fc25.s390x
p11-kit-devel-0.23.8-1.fc25.s390x
ethtool-4.11-1.fc25.s390x
python2-sssdconfig-1.15.3-1.fc25.noarch
xorg-x11-fonts-ISO8859-1-100dpi-7.5-16.fc24.noarch
lato-fonts-2.015-2.fc24.noarch
python-sphinx-locale-1.5.2-2.fc25.noarch
dpkg-1.17.27-1.fc25.s390x
gnutls-3.5.15-1.fc25.s390x
nss-softokn-freebl-devel-3.32.0-1.2.fc25.s390x
vim-filesystem-8.0.1030-1.fc25.s390x
gnutls-devel-3.5.15-1.fc25.s390x
kernel-headers-4.12.11-200.fc25.s390x
texlive-luaotfload-svn40902-33.fc25.1.noarch
texlive-unicode-math-svn38462-33.fc25.1.noarch
texlive-fancyvrb-svn18492.2.8-33.fc25.1.noarch
texlive-pst-pdf-bin-svn7838.0-33.20160520.fc25.1.noarch
texlive-amscls-svn36804.0-33.fc25.1.noarch
texlive-ltxmisc-svn21927.0-33.fc25.1.noarch
texlive-breqn-svn38099.0.98d-33.fc25.1.noarch
texlive-xetex-def-svn40327-33.fc25.1.noarch
openssh-server-7.4p1-4.fc25.s390x
sendmail-8.15.2-8.fc25.s390x
tzdata-2017b-1.fc25.noarch
hunspell-1.4.1-2.fc25.s390x
gpg-pubkey-8e1431d5-53bcbac7
zlib-1.2.8-10.fc24.s390x
sed-4.2.2-15.fc24.s390x
psmisc-22.21-8.fc24.s390x
gpm-libs-1.20.7-9.fc24.s390x
zip-3.0-16.fc24.s390x
libyubikey-1.13-2.fc24.s390x
sg3_utils-libs-1.41-3.fc24.s390x
polkit-pkla-compat-0.1-7.fc24.s390x
passwd-0.79-8.fc24.s390x
trousers-0.3.13-6.fc24.s390x
grubby-8.40-3.fc24.s390x
rootfiles-8.1-19.fc24.noarch
nettle-3.3-1.fc25.s390x
libksba-1.3.5-1.fc25.s390x
perl-Text-ParseWords-3.30-365.fc25.noarch
perl-PathTools-3.63-366.fc25.s390x
perl-File-Temp-0.23.04-365.fc25.noarch
fuse-libs-2.9.7-1.fc25.s390x
perl-Pod-Escapes-1.07-365.fc25.noarch
perl-Term-ANSIColor-4.05-2.fc25.noarch
perl-URI-1.71-5.fc25.noarch
libXfont-1.5.2-1.fc25.s390x
python-six-1.10.0-3.fc25.noarch
dbus-glib-0.108-1.fc25.s390x
gobject-introspection-1.50.0-1.fc25.s390x
libpwquality-1.3.0-6.fc25.s390x
python-gobject-base-3.22.0-1.fc25.s390x
python-html5lib-0.999-9.fc25.noarch
python3-dbus-1.2.4-2.fc25.s390x
python3-chardet-2.3.0-1.fc25.noarch
python3-urllib3-1.15.1-3.fc25.noarch
python-offtrac-0.1.0-7.fc25.noarch
python2-cryptography-1.5.3-3.fc25.s390x
python2-requests-kerberos-0.10.0-2.fc25.noarch
libserf-1.3.9-1.fc25.s390x
libdatrie-0.2.9-3.fc25.s390x
s390utils-base-1.36.0-1.fc25.s390x
kpartx-0.4.9-83.fc25.s390x
s390utils-cpuplugd-1.36.0-1.fc25.s390x
s390utils-osasnmpd-1.36.0-1.fc25.s390x
python-dnf-plugins-extras-common-0.0.12-4.fc25.noarch
fpc-srpm-macros-1.0-1.fc25.noarch
libuser-0.62-4.fc25.s390x
man-db-2.7.5-3.fc25.s390x
python-systemd-doc-232-1.fc25.s390x
bodhi-client-0.9.12.2-6.fc25.noarch
cairo-1.14.8-1.fc25.s390x
cracklib-dicts-2.9.6-4.fc25.s390x
libselinux-python3-2.5-13.fc25.s390x
python2-enchant-1.6.8-1.fc25.noarch
boost-iostreams-1.60.0-10.fc25.s390x
userspace-rcu-0.9.2-2.fc25.s390x
libXext-devel-1.3.3-4.fc24.s390x
libXrandr-devel-1.5.1-1.fc25.s390x
python3-lxml-3.7.2-1.fc25.s390x
libiscsi-1.15.0-2.fc24.s390x
fontconfig-devel-2.12.1-1.fc25.s390x
libfdt-devel-1.4.2-1.fc25.s390x
ceph-devel-compat-10.2.4-2.fc25.s390x
zlib-static-1.2.8-10.fc24.s390x
chrpath-0.16-3.fc24.s390x
info-6.1-4.fc25.s390x
iptables-libs-1.6.0-3.fc25.s390x
libfdisk-2.28.2-2.fc25.s390x
dnf-plugins-core-0.1.21-5.fc25.noarch
perl-Storable-2.56-368.fc25.s390x
python2-decorator-4.0.11-1.fc25.noarch
libnetfilter_conntrack-1.0.6-2.fc25.s390x
texlive-texlive.infra-bin-svn40312-33.20160520.fc25.1.s390x
texlive-ifluatex-svn41346-33.fc25.1.noarch
texlive-fp-svn15878.0-33.fc25.1.noarch
texlive-latex-fonts-svn28888.0-33.fc25.1.noarch
texlive-bibtex-bin-svn40473-33.20160520.fc25.1.s390x
texlive-glyphlist-svn28576.0-33.fc25.1.noarch
texlive-marvosym-svn29349.2.2a-33.fc25.1.noarch
texlive-tex-bin-svn40987-33.20160520.fc25.1.s390x
texlive-texconfig-svn40768-33.fc25.1.noarch
texlive-wasy2-ps-svn35830.0-33.fc25.1.noarch
texlive-psfrag-svn15878.3.04-33.fc25.1.noarch
texlive-charter-svn15878.0-33.fc25.1.noarch
texlive-ec-svn25033.1.0-33.fc25.1.noarch
texlive-lineno-svn21442.4.41-33.fc25.1.noarch
texlive-hyphen-base-svn41138-33.fc25.1.noarch
texlive-manfnt-font-svn35799.0-33.fc25.1.noarch
texlive-ncntrsbk-svn31835.0-33.fc25.1.noarch
texlive-pst-math-svn34786.0.63-33.fc25.1.noarch
texlive-symbol-svn31835.0-33.fc25.1.noarch
texlive-environ-svn33821.0.3-33.fc25.1.noarch
texlive-algorithms-svn38085.0.1-33.fc25.1.noarch
python3-hawkey-0.6.4-3.fc25.s390x
freetype-2.6.5-9.fc25.s390x
mesa-libwayland-egl-17.0.5-3.fc25.s390x
libicu-57.1-5.fc25.s390x
libnl3-cli-3.2.29-3.fc25.s390x
cups-libs-2.2.0-9.fc25.s390x
bind-libs-lite-9.10.5-2.P2.fc25.s390x
python3-kerberos-1.2.5-1.fc25.s390x
python3-cryptography-1.5.3-3.fc25.s390x
perl-IO-1.36-387.fc25.s390x
dhcp-libs-4.3.5-3.fc25.s390x
rsync-3.1.2-4.fc25.s390x
make-4.1-6.fc25.s390x
quota-4.03-8.fc25.s390x
libX11-devel-1.6.5-1.fc25.s390x
ghostscript-9.20-9.fc25.s390x
rpcbind-0.2.4-6.rc2.fc25.s390x
pyOpenSSL-16.2.0-1.fc25.noarch
python3-pycurl-7.43.0-6.fc25.s390x
bind99-license-9.9.10-2.P3.fc25.noarch
python-firewall-0.4.4.5-1.fc25.noarch
netpbm-progs-10.79.00-1.fc25.s390x
wget-1.18-3.fc25.s390x
libsemanage-2.5-9.fc25.s390x
telnet-0.17-68.fc25.s390x
gdk-pixbuf2-2.36.9-1.fc25.s390x
dbus-libs-1.11.16-1.fc25.s390x
glusterfs-client-xlators-3.10.5-1.fc25.s390x
libepoxy-1.4.3-1.fc25.1.s390x
dracut-046-2.git20170811.fc25.s390x
net-snmp-libs-5.7.3-15.fc25.s390x
libgo-devel-6.4.1-1.fc25.s390x
libglvnd-opengl-0.2.999-24.20170818git8d4d03f.fc25.s390x
sqlite-devel-3.14.2-3.fc25.s390x
cpp-6.4.1-1.fc25.s390x
git-2.9.5-1.fc25.s390x
pcre2-10.23-9.fc25.s390x
python2-GitPython-2.1.5-1.fc25.noarch
glusterfs-devel-3.10.5-1.fc25.s390x
net-snmp-5.7.3-15.fc25.s390x
rpm-plugin-systemd-inhibit-4.13.0.1-2.fc25.s390x
emacs-25.2-3.fc25.s390x
libstdc++-static-6.4.1-1.fc25.s390x
expat-devel-2.2.3-1.fc25.s390x
perl-Time-HiRes-1.9744-1.fc25.s390x
fontawesome-fonts-4.7.0-1.fc25.noarch
python-markupsafe-0.23-10.fc25.s390x
pytz-2016.6.1-1.fc25.noarch
python2-sphinx-1.5.2-2.fc25.noarch
nss-util-3.32.0-1.0.fc25.s390x
nss-sysinit-3.32.0-1.1.fc25.s390x
python3-3.5.4-1.fc25.s390x
selinux-policy-targeted-3.13.1-225.22.fc25.noarch
vim-minimal-8.0.1030-1.fc25.s390x
texlive-ifplatform-svn21156.0.4-33.fc25.1.noarch
texlive-eso-pic-svn37925.2.0g-33.fc25.1.noarch
texlive-xcolor-svn41044-33.fc25.1.noarch
texlive-pst-eps-svn15878.1.0-33.fc25.1.noarch
texlive-pst-text-svn15878.1.00-33.fc25.1.noarch
texlive-rotating-svn16832.2.16b-33.fc25.1.noarch
texlive-pdfpages-svn40638-33.fc25.1.noarch
texlive-cm-super-svn15878.0-33.fc25.1.noarch
texlive-xetex-svn41438-33.fc25.1.noarch
dnf-yum-1.1.10-6.fc25.noarch
libseccomp-devel-2.3.2-1.fc25.s390x
gpgme-1.8.0-10.fc25.s390x
apr-util-1.5.4-3.fc24.s390x
jbigkit-libs-2.1-5.fc24.s390x
pixman-0.34.0-2.fc24.s390x
dwz-0.12-2.fc24.s390x
expect-5.45-22.fc24.s390x
libsigsegv-2.10-10.fc24.s390x
fakeroot-libs-1.20.2-4.fc24.s390x
m17n-lib-1.7.0-5.fc24.s390x
libverto-0.2.6-6.fc24.s390x
libXmu-1.1.2-4.fc24.s390x
libXcursor-1.1.14-6.fc24.s390x
python-kitchen-1.2.4-2.fc24.noarch
fakeroot-1.20.2-4.fc24.s390x
blktrace-1.1.0-3.fc24.s390x
usermode-1.111-8.fc24.s390x
kbd-2.0.3-3.fc24.s390x
libaio-devel-0.3.110-6.fc24.s390x
web-assets-filesystem-5-4.fc24.noarch
libgpg-error-1.24-1.fc25.s390x
findutils-4.6.0-8.fc25.s390x
libassuan-2.4.3-1.fc25.s390x
libusbx-1.0.21-1.fc25.s390x
libxslt-1.1.28-13.fc25.s390x
libmetalink-0.1.3-1.fc25.s390x
perl-MIME-Base64-3.15-365.fc25.s390x
ncurses-6.0-6.20160709.fc25.s390x
libwayland-server-1.12.0-1.fc25.s390x
perl-Fedora-VSP-0.001-4.fc25.noarch
perl-libintl-perl-1.26-1.fc25.s390x
shadow-utils-4.2.1-11.fc25.s390x
atk-2.22.0-1.fc25.s390x
pam-1.3.0-1.fc25.s390x
harfbuzz-icu-1.3.2-1.fc25.s390x
libsecret-0.18.5-2.fc25.s390x
s390utils-iucvterm-1.36.0-1.fc25.s390x
python3-requests-2.10.0-4.fc25.noarch
pyusb-1.0.0-2.fc25.noarch
python-enum34-1.0.4-6.fc25.noarch
pyxattr-0.5.3-8.fc25.s390x
libbabeltrace-1.4.0-3.fc25.s390x
libthai-0.1.25-1.fc25.s390x
deltarpm-3.6-17.fc25.s390x
s390utils-mon_statd-1.36.0-1.fc25.s390x
device-mapper-multipath-0.4.9-83.fc25.s390x
python3-pygpgme-0.3-18.fc25.s390x
libreport-filesystem-2.8.0-1.fc25.s390x
ghc-srpm-macros-1.4.2-4.fc25.noarch
rpmdevtools-8.9-1.fc25.noarch
python-dnf-plugins-extras-migrate-0.0.12-4.fc25.noarch
perl-IO-Socket-SSL-2.038-1.fc25.noarch
perl-File-ShareDir-1.102-7.fc25.noarch
tcl-8.6.6-1.fc25.s390x
bzip2-1.0.6-21.fc25.s390x
libss-1.43.3-1.fc25.s390x
libselinux-utils-2.5-13.fc25.s390x
python3-enchant-1.6.8-1.fc25.noarch
python2-dockerfile-parse-0.0.5-7.fc25.noarch
systemd-bootchart-231-2.fc25.s390x
e2fsprogs-1.43.3-1.fc25.s390x
libpng-devel-1.6.27-1.fc25.s390x
perl-XML-Parser-2.44-5.fc25.s390x
lttng-ust-2.8.1-2.fc25.s390x
libXfixes-devel-5.0.3-1.fc25.s390x
libXcomposite-devel-0.4.4-8.fc24.s390x
python3-javapackages-4.7.0-6.1.fc25.noarch
libcephfs_jni-devel-10.2.4-2.fc25.s390x
keyutils-libs-devel-1.5.9-8.fc24.s390x
harfbuzz-devel-1.3.2-1.fc25.s390x
libidn-devel-1.33-1.fc25.s390x
libnfs-1.9.8-2.fc24.s390x
libssh2-devel-1.8.0-1.fc25.s390x
qemu-sanity-check-nodeps-1.1.5-5.fc24.s390x
alsa-lib-devel-1.1.1-2.fc25.s390x
libpsl-0.17.0-1.fc25.s390x
libseccomp-2.3.2-1.fc25.s390x
json-glib-1.2.6-1.fc25.s390x
python2-dnf-1.1.10-6.fc25.noarch
texlive-tetex-bin-svn36770.0-33.20160520.fc25.1.noarch
texlive-amsfonts-svn29208.3.04-33.fc25.1.noarch
texlive-babel-svn40706-33.fc25.1.noarch
texlive-colortbl-svn29803.v1.0a-33.fc25.1.noarch
texlive-babelbib-svn25245.1.31-33.fc25.1.noarch
texlive-footmisc-svn23330.5.5b-33.fc25.1.noarch
texlive-makeindex-svn40768-33.fc25.1.noarch
texlive-plain-svn40274-33.fc25.1.noarch
texlive-texconfig-bin-svn29741.0-33.20160520.fc25.1.noarch
texlive-zapfding-svn31835.0-33.fc25.1.noarch
texlive-microtype-svn41127-33.fc25.1.noarch
texlive-bookman-svn31835.0-33.fc25.1.noarch
texlive-dvisvgm-def-svn41011-33.fc25.1.noarch
texlive-finstrut-svn21719.0.5-33.fc25.1.noarch
texlive-hyph-utf8-svn41189-33.fc25.1.noarch
texlive-lualibs-svn40370-33.fc25.1.noarch
python2-hawkey-0.6.4-3.fc25.s390x
elfutils-libelf-0.169-1.fc25.s390x
libnl3-3.2.29-3.fc25.s390x
gstreamer1-1.10.5-1.fc25.s390x
polkit-libs-0.113-8.fc25.s390x
libtirpc-1.0.2-0.fc25.s390x
libteam-1.27-1.fc25.s390x
python3-pyasn1-0.2.3-1.fc25.noarch
perl-File-Path-2.12-366.fc25.noarch
mesa-libwayland-egl-devel-17.0.5-3.fc25.s390x
libacl-devel-2.2.52-13.fc25.s390x
lua-libs-5.3.4-3.fc25.s390x
quota-nls-4.03-8.fc25.noarch
ghostscript-x11-9.20-9.fc25.s390x
systemd-231-17.fc25.s390x
dhcp-common-4.3.5-3.fc25.noarch
vte291-devel-0.46.2-1.fc25.s390x
python-devel-2.7.13-2.fc25.s390x
elfutils-0.169-1.fc25.s390x
lua-5.3.4-3.fc25.s390x
python3-beautifulsoup4-4.6.0-1.fc25.noarch
libmicrohttpd-0.9.55-1.fc25.s390x
screen-4.6.1-1.fc25.s390x
strace-4.18-1.fc25.s390x
libstdc++-6.4.1-1.fc25.s390x
glusterfs-3.10.5-1.fc25.s390x
file-5.29-9.fc25.s390x
libgo-6.4.1-1.fc25.s390x
tar-1.29-4.fc25.s390x
subversion-libs-1.9.7-1.fc25.s390x
libglvnd-gles-0.2.999-24.20170818git8d4d03f.fc25.s390x
gdk-pixbuf2-modules-2.36.9-1.fc25.s390x
gcc-6.4.1-1.fc25.s390x
curl-7.51.0-9.fc25.s390x
pcre2-utf16-10.23-9.fc25.s390x
mariadb-config-10.1.25-1.fc25.s390x
distribution-gpg-keys-1.14-1.fc25.noarch
libcurl-devel-7.51.0-9.fc25.s390x
gtk3-devel-3.22.17-2.fc25.s390x
krb5-devel-1.14.4-8.fc25.s390x
wpa_supplicant-2.6-3.fc25.s390x
fontawesome-fonts-web-4.7.0-1.fc25.noarch
python2-pygments-2.2.0-7.fc25.noarch
python2-babel-2.3.4-2.fc25.noarch
doxygen-1.8.13-9.fc25.s390x
nspr-devel-4.16.0-1.fc25.s390x
kernel-core-4.12.11-200.fc25.s390x
rpmlint-1.10-3.fc25.noarch
vim-enhanced-8.0.1030-1.fc25.s390x
openjpeg2-2.2.0-3.fc25.s390x
texlive-mparhack-svn15878.1.4-33.fc25.1.noarch
texlive-pspicture-svn15878.0-33.fc25.1.noarch
texlive-soul-svn15878.2.4-33.fc25.1.noarch
texlive-trimspaces-svn15878.1.1-33.fc25.1.noarch
texlive-varwidth-svn24104.0.92-33.fc25.1.noarch
texlive-geometry-svn19716.5.6-33.fc25.1.noarch
texlive-memoir-svn41203-33.fc25.1.noarch
texlive-pgf-svn40966-33.fc25.1.noarch
texlive-pst-coil-svn37377.1.07-33.fc25.1.noarch
texlive-pst-plot-svn41242-33.fc25.1.noarch
texlive-latex-bin-svn41438-33.fc25.1.noarch
texlive-ucs-svn35853.2.2-33.fc25.1.noarch
texlive-ae-svn15878.1.4-33.fc25.1.noarch
texlive-xetex-bin-svn41091-33.20160520.fc25.1.s390x
fedora-upgrade-26.1-1.fc25.noarch
perl-Thread-Queue-3.12-1.fc25.noarch
cdparanoia-libs-10.2-21.fc24.s390x
ustr-1.0.4-21.fc24.s390x
libusb-0.1.5-7.fc24.s390x
readline-devel-6.3-8.fc24.s390x
chkconfig-1.8-1.fc25.s390x
avahi-libs-0.6.32-4.fc25.s390x
perl-Unicode-Normalize-1.25-365.fc25.s390x
perl-libnet-3.10-1.fc25.noarch
perl-podlators-4.09-1.fc25.noarch
dbus-python-1.2.4-2.fc25.s390x
libgnome-keyring-3.12.0-7.fc25.s390x
python-backports-1.0-8.fc25.s390x
python-pycparser-2.14-7.fc25.noarch
plymouth-scripts-0.9.3-0.6.20160620git0e65b86c.fc25.s390x
cronie-1.5.1-2.fc25.s390x
python2-librepo-1.7.18-3.fc25.s390x
libXv-1.0.11-1.fc25.s390x
python2-ndg_httpsclient-0.4.0-4.fc25.noarch
btrfs-progs-4.6.1-1.fc25.s390x
perl-Encode-2.88-5.fc25.s390x
cracklib-2.9.6-4.fc25.s390x
python3-dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch
boost-random-1.60.0-10.fc25.s390x
libref_array-0.1.5-29.fc25.s390x
libXrender-devel-0.9.10-1.fc25.s390x
javapackages-tools-4.7.0-6.1.fc25.noarch
keyutils-1.5.9-8.fc24.s390x
libcom_err-devel-1.43.3-1.fc25.s390x
lzo-minilzo-2.08-8.fc24.s390x
libusbx-devel-1.0.21-1.fc25.s390x
virglrenderer-devel-0.5.0-1.20160411git61846f92f.fc25.s390x
acpica-tools-20160831-1.fc25.s390x
grep-2.27-2.fc25.s390x
dnf-conf-1.1.10-6.fc25.noarch
crypto-policies-20160921-4.gitf3018dd.fc25.noarch
libnfsidmap-0.27-1.fc25.s390x
SDL2-2.0.5-3.fc25.s390x
texlive-etex-pkg-svn39355-33.fc25.1.noarch
texlive-multido-svn18302.1.42-33.fc25.1.noarch
texlive-gsftopk-svn40768-33.fc25.1.noarch
texlive-pst-ovl-svn40873-33.fc25.1.noarch
texlive-ltabptch-svn17533.1.74d-33.fc25.1.noarch
texlive-cite-svn36428.5.5-33.fc25.1.noarch
texlive-fpl-svn15878.1.002-33.fc25.1.noarch
texlive-mathpazo-svn15878.1.003-33.fc25.1.noarch
texlive-rcs-svn15878.0-33.fc25.1.noarch
texlive-type1cm-svn21820.0-33.fc25.1.noarch
texlive-l3kernel-svn41246-33.fc25.1.noarch
texlive-hyperref-svn41396-33.fc25.1.noarch
texlive-pst-tree-svn24142.1.12-33.fc25.1.noarch
texlive-sansmathaccent-svn30187.0-33.fc25.1.noarch
texlive-dvipdfmx-bin-svn40273-33.20160520.fc25.1.s390x
texlive-zapfchan-svn31835.0-33.fc25.1.noarch
glib2-static-2.50.3-1.fc25.s390x
bash-completion-2.5-1.fc25.noarch
hyphen-2.8.8-4.fc24.s390x
python3-idna-2.5-1.fc25.noarch
less-481-7.fc25.s390x
rpmconf-base-1.0.19-1.fc25.noarch
gtk2-2.24.31-2.fc25.s390x
mesa-libgbm-17.0.5-3.fc25.s390x
nfs-utils-2.1.1-5.rc4.fc25.s390x
mc-4.8.19-5.fc25.s390x
pcre-static-8.41-1.fc25.s390x
bind-libs-9.10.5-2.P2.fc25.s390x
libproxy-0.4.15-2.fc25.s390x
file-libs-5.29-9.fc25.s390x
glibc-devel-2.24-10.fc25.s390x
glusterfs-server-3.10.5-1.fc25.s390x
git-core-doc-2.9.5-1.fc25.s390x
python2-smmap-2.0.3-1.fc25.noarch
glusterfs-api-devel-3.10.5-1.fc25.s390x
gcc-gdb-plugin-6.4.1-1.fc25.s390x
python3-magic-5.29-9.fc25.noarch
GeoIP-GeoLite-data-2017.07-1.fc25.noarch
python2-funcsigs-1.0.2-2.fc25.noarch
dos2unix-7.3.4-1.fc25.s390x
gnutls-c++-3.5.15-1.fc25.s390x
nss-tools-3.32.0-1.1.fc25.s390x
gpg-pubkey-a29cb19c-53bcbba6
m4-1.4.17-9.fc24.s390x
liblockfile-1.09-4.fc24.s390x
sg3_utils-1.41-3.fc24.s390x
libXinerama-1.1.3-6.fc24.s390x
libXft-2.3.2-4.fc24.s390x
tcp_wrappers-libs-7.6-83.fc25.s390x
perl-Text-Tabs+Wrap-2013.0523-365.fc25.noarch
perl-Error-0.17024-7.fc25.noarch
perl-Term-Cap-1.17-365.fc25.noarch
perl-Pod-Usage-1.69-1.fc25.noarch
device-mapper-persistent-data-0.6.3-1.fc25.s390x
python3-six-1.10.0-3.fc25.noarch
python3-pysocks-1.5.6-5.fc25.noarch
python-chardet-2.3.0-1.fc25.noarch
python2-cffi-1.7.0-2.fc25.s390x
gc-devel-7.4.4-1.fc25.s390x
plymouth-0.9.3-0.6.20160620git0e65b86c.fc25.s390x
ebtables-2.0.10-21.fc25.s390x
python3-librepo-1.7.18-3.fc25.s390x
at-spi2-atk-2.22.0-1.fc25.s390x
avahi-autoipd-0.6.32-4.fc25.s390x
pyparsing-2.1.10-1.fc25.noarch
python3-pyparsing-2.1.10-1.fc25.noarch
libcollection-0.7.0-29.fc25.s390x
libcephfs-devel-10.2.4-2.fc25.s390x
libXdamage-devel-1.1.4-8.fc24.s390x
libverto-devel-0.2.6-6.fc24.s390x
snappy-1.1.3-2.fc24.s390x
cairo-gobject-devel-1.14.8-1.fc25.s390x
cyrus-sasl-devel-2.1.26-26.2.fc24.s390x
libXi-1.7.9-1.fc25.s390x
texlive-base-2016-33.20160520.fc25.noarch
texlive-booktabs-svn40846-33.fc25.1.noarch
texlive-lm-svn28119.2.004-33.fc25.1.noarch
texlive-gsftopk-bin-svn40473-33.20160520.fc25.1.s390x
texlive-tex-svn40793-33.fc25.1.noarch
texlive-fancyref-svn15878.0.9c-33.fc25.1.noarch
texlive-chngcntr-svn17157.1.0a-33.fc25.1.noarch
texlive-fix2col-svn38770-33.fc25.1.noarch
texlive-marginnote-svn41382-33.fc25.1.noarch
texlive-pxfonts-svn15878.0-33.fc25.1.noarch
texlive-txfonts-svn15878.0-33.fc25.1.noarch
texlive-l3packages-svn41246-33.fc25.1.noarch
texlive-oberdiek-svn41346-33.fc25.1.noarch
texlive-pst-tools-svn34067.0.05-33.fc25.1.noarch
texlive-tex-gyre-svn18651.2.004-33.fc25.1.noarch
texlive-dvipdfmx-svn41149-33.fc25.1.noarch
texlive-collection-fontsrecommended-svn35830.0-33.20160520.fc25.1.noarch
libcacard-devel-2.5.3-1.fc25.s390x
ykpers-1.18.0-2.fc25.s390x
python2-idna-2.5-1.fc25.noarch
policycoreutils-2.5-20.fc25.s390x
libgcrypt-1.7.8-1.fc25.s390x
pcre-8.41-1.fc25.s390x
GeoIP-1.6.11-1.fc25.s390x
ghostscript-core-9.20-9.fc25.s390x
python3-cffi-1.7.0-2.fc25.s390x
json-c-0.12.1-2.fc25.s390x
vte291-0.46.2-1.fc25.s390x
gssproxy-0.7.0-9.fc25.s390x
systemtap-3.1-5.fc25.s390x
mesa-libgbm-devel-17.0.5-3.fc25.s390x
libgusb-0.2.10-1.fc25.s390x
kernel-modules-4.12.9-200.fc25.s390x
sqlite-3.14.2-3.fc25.s390x
perl-Git-2.9.5-1.fc25.noarch
python2-gitdb-2.0.2-1.fc25.noarch
libglvnd-devel-0.2.999-24.20170818git8d4d03f.fc25.s390x
gcc-c++-6.4.1-1.fc25.s390x
python-magic-5.29-9.fc25.noarch
kernel-devel-4.12.9-200.fc25.s390x
python2-mock-2.0.0-2.fc25.noarch
nspr-4.16.0-1.fc25.s390x
python3-libs-3.5.4-1.fc25.s390x
system-python-3.5.4-1.fc25.s390x
python-async-0.6.1-9.fc22.s390x
dejavu-sans-mono-fonts-2.35-3.fc24.noarch
popt-1.16-7.fc24.s390x
cyrus-sasl-lib-2.1.26-26.2.fc24.s390x
xz-5.2.2-2.fc24.s390x
libpipeline-1.4.1-2.fc24.s390x
pinentry-0.9.7-2.fc24.s390x
pth-2.0.7-27.fc24.s390x
libsepol-2.5-10.fc25.s390x
libxcb-1.12-1.fc25.s390x
perl-Getopt-Long-2.49.1-1.fc25.noarch
avahi-glib-0.6.32-4.fc25.s390x
python3-pip-8.1.2-2.fc25.noarch
python3-libcomps-0.1.7-5.fc25.s390x
python-slip-0.6.4-4.fc25.noarch
python2-libcomps-0.1.7-5.fc25.s390x
gc-7.4.4-1.fc25.s390x
s390utils-cmsfs-1.36.0-1.fc25.s390x
newt-python-0.52.19-2.fc25.s390x
qt5-srpm-macros-5.7.1-1.fc25.noarch
device-mapper-event-1.02.136-3.fc25.s390x
perl-Class-Inspector-1.31-2.fc25.noarch
libbasicobjects-0.1.1-29.fc25.s390x
libradosstriper1-10.2.4-2.fc25.s390x
libXxf86vm-devel-1.1.4-3.fc24.s390x
zziplib-0.13.62-7.fc24.s390x
libpaper-1.1.24-12.fc24.s390x
libini_config-1.3.0-29.fc25.s390x
snappy-devel-1.1.3-2.fc24.s390x
libcap-ng-devel-0.7.8-1.fc25.s390x
libxkbcommon-devel-0.7.1-1.fc25.s390x
openssl-libs-1.0.2k-1.fc25.s390x
util-linux-2.28.2-2.fc25.s390x
texlive-etoolbox-svn38031.2.2a-33.fc25.1.noarch
texlive-dvips-svn41149-33.fc25.1.noarch
texlive-latexconfig-svn40274-33.fc25.1.noarch
texlive-tex-ini-files-svn40533-33.fc25.1.noarch
texlive-qstest-svn15878.0-33.fc25.1.noarch
texlive-cmap-svn41168-33.fc25.1.noarch
texlive-luatex-bin-svn41091-33.20160520.fc25.1.s390x
texlive-mflogo-svn38628-33.fc25.1.noarch
texlive-sansmath-svn17997.1.1-33.fc25.1.noarch
texlive-unicode-data-svn39808-33.fc25.1.noarch
texlive-luaotfload-bin-svn34647.0-33.20160520.fc25.1.noarch
texlive-listings-svn37534.1.6-33.fc25.1.noarch
texlive-pstricks-svn41321-33.fc25.1.noarch
texlive-metalogo-svn18611.0.12-33.fc25.1.noarch
texlive-collection-latex-svn41011-33.20160520.fc25.1.noarch
python2-dnf-plugins-core-0.1.21-5.fc25.noarch
xkeyboard-config-2.20-2.fc25.noarch
perl-Test-Harness-3.39-1.fc25.noarch
systemd-libs-231-17.fc25.s390x
python3-pycparser-2.14-7.fc25.noarch
kernel-devel-4.11.10-200.fc25.s390x
gsm-1.0.17-1.fc25.s390x
python-2.7.13-2.fc25.s390x
kernel-4.11.10-200.fc25.s390x
rpmconf-1.0.19-1.fc25.noarch
teamd-1.27-1.fc25.s390x
jasper-libs-1.900.13-4.fc25.s390x
glusterfs-libs-3.10.5-1.fc25.s390x
libcrypt-nss-2.24-10.fc25.s390x
emacs-common-25.2-3.fc25.s390x
libcurl-7.51.0-9.fc25.s390x
java-1.8.0-openjdk-1.8.0.144-5.b01.fc25.s390x
gcc-go-6.4.1-1.fc25.s390x
perl-XML-XPath-1.39-2.fc25.noarch
python2-sphinx_rtd_theme-0.1.9-2.fc24.noarch
libxml2-devel-2.9.4-2.fc25.s390x
nss-softokn-devel-3.32.0-1.2.fc25.s390x
nss-devel-3.32.0-1.1.fc25.s390x
libattr-2.4.47-16.fc24.s390x
libvisual-0.4.0-20.fc24.s390x
libpcap-1.7.4-2.fc24.s390x
libutempter-1.1.6-8.fc24.s390x
libgudev-230-3.fc24.s390x
popt-devel-1.16-7.fc24.s390x
hicolor-icon-theme-0.15-3.fc24.noarch
setup-2.10.4-1.fc25.noarch
bash-4.3.43-4.fc25.s390x
libjpeg-turbo-1.5.1-0.fc25.s390x
perl-Socket-2.024-1.fc25.s390x
perl-HTTP-Tiny-0.070-1.fc25.noarch
ipset-6.29-1.fc25.s390x
python2-setuptools-25.1.1-1.fc25.noarch
gsettings-desktop-schemas-3.22.0-1.fc25.s390x
python3-setuptools-25.1.1-1.fc25.noarch
python-slip-dbus-0.6.4-4.fc25.noarch
python2-ply-3.8-2.fc25.noarch
dtc-1.4.2-1.fc25.s390x
guile-2.0.13-1.fc25.s390x
cronie-anacron-1.5.1-2.fc25.s390x
libXtst-1.2.3-1.fc25.s390x
iso-codes-3.70-1.fc25.noarch
s390utils-1.36.0-1.fc25.s390x
python-backports-ssl_match_hostname-3.5.0.1-3.fc25.noarch
fedora-cert-0.6.0.1-1.fc25.noarch
dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch
lvm2-2.02.167-3.fc25.s390x
libselinux-devel-2.5-13.fc25.s390x
perl-Time-Local-1.250-1.fc25.noarch
libradosstriper-devel-10.2.4-2.fc25.s390x
flac-libs-1.3.2-1.fc25.s390x
perl-Digest-1.17-366.fc25.noarch
teckit-2.5.1-15.fc24.s390x
libpath_utils-0.2.1-29.fc25.s390x
attr-2.4.47-16.fc24.s390x
usbredir-0.7.1-2.fc24.s390x
cairo-devel-1.14.8-1.fc25.s390x
lzo-devel-2.08-8.fc24.s390x
libcap-devel-2.25-2.fc25.s390x
libbsd-0.8.3-1.fc25.s390x
texlive-url-svn32528.3.4-33.fc25.1.noarch
texlive-dvips-bin-svn40987-33.20160520.fc25.1.s390x
texlive-index-svn24099.4.1beta-33.fc25.1.noarch
texlive-setspace-svn24881.6.7a-33.fc25.1.noarch
texlive-mathtools-svn38833-33.fc25.1.noarch
texlive-cm-svn32865.0-33.fc25.1.noarch
texlive-graphics-def-svn41879-33.fc25.1.noarch
texlive-mdwtools-svn15878.1.05.4-33.fc25.1.noarch
texlive-rsfs-svn15878.0-33.fc25.1.noarch
texlive-ucharcat-svn38907-33.fc25.1.noarch
texlive-fontspec-svn41262-33.fc25.1.noarch
texlive-showexpl-svn32737.v0.3l-33.fc25.1.noarch
texlive-pstricks-add-svn40744-33.fc25.1.noarch
texlive-beamer-svn36461.3.36-33.fc25.1.noarch
texlive-collection-basic-svn41149-33.20160520.fc25.1.noarch
xemacs-filesystem-21.5.34-20.20170124hgf412e9f093d4.fc25.noarch
hawkey-0.6.4-3.fc25.s390x
bluez-libs-5.44-1.fc25.s390x
audit-libs-2.7.7-1.fc25.s390x
iproute-4.11.0-1.fc25.s390x
libICE-1.0.9-9.fc25.s390x
python3-ply-3.8-2.fc25.noarch
perl-5.24.2-387.fc25.s390x
graphite2-1.3.10-1.fc25.s390x
vte-profile-0.46.2-1.fc25.s390x
python-libs-2.7.13-2.fc25.s390x
mesa-libGL-17.0.5-3.fc25.s390x
python2-pycurl-7.43.0-6.fc25.s390x
NetworkManager-1.4.4-5.fc25.s390x
mesa-libEGL-devel-17.0.5-3.fc25.s390x
mesa-libGLES-devel-17.0.5-3.fc25.s390x
hostname-3.15-8.fc25.s390x
glibc-headers-2.24-10.fc25.s390x
glusterfs-cli-3.10.5-1.fc25.s390x
git-core-2.9.5-1.fc25.s390x
mock-1.4.3-1.fc25.noarch
gcc-gfortran-6.4.1-1.fc25.s390x
webkitgtk4-plugin-process-gtk2-2.16.6-1.fc25.s390x
perl-Module-CoreList-5.20170821-1.fc25.noarch
python2-pbr-1.10.0-1.fc25.noarch
libtool-2.4.6-14.fc25.s390x
gnutls-dane-3.5.15-1.fc25.s390x
kernel-4.12.11-200.fc25.s390x
gpg-pubkey-a0a7badb-52844296
readline-6.3-8.fc24.s390x
cpio-2.12-3.fc24.s390x
libXcomposite-0.4.4-8.fc24.s390x
procps-ng-3.3.10-11.fc24.s390x
GConf2-3.2.6-16.fc24.s390x
xz-devel-5.2.2-2.fc24.s390x
fedora-logos-22.0.0-3.fc24.s390x
gpg-pubkey-e372e838-56fd7943
kmod-libs-23-1.fc25.s390x
perl-parent-0.236-1.fc25.noarch
perl-TermReadKey-2.37-1.fc25.s390x
ncurses-c++-libs-6.0-6.20160709.fc25.s390x
gzip-1.8-1.fc25.s390x
python3-gobject-base-3.22.0-1.fc25.s390x
python2-yubico-1.3.2-3.fc25.noarch
s390utils-ziomon-1.36.0-1.fc25.s390x
librepo-1.7.18-3.fc25.s390x
gnat-srpm-macros-4-1.fc25.noarch
python-decoratortools-1.8-12.fc25.noarch
m17n-db-1.7.0-7.fc25.noarch
e2fsprogs-libs-1.43.3-1.fc25.s390x
libvorbis-1.3.5-1.fc25.s390x
npth-1.3-1.fc25.s390x
libcephfs1-10.2.4-2.fc25.s390x
wayland-devel-1.12.0-1.fc25.s390x
libxcb-devel-1.12-1.fc25.s390x
perl-encoding-2.19-5.fc25.s390x
python3-cssselect-0.9.2-1.fc25.noarch
gettext-libs-0.19.8.1-3.fc25.s390x
at-spi2-atk-devel-2.22.0-1.fc25.s390x
virglrenderer-0.5.0-1.20160411git61846f92f.fc25.s390x
pixman-devel-0.34.0-2.fc24.s390x
libnfs-devel-1.9.8-2.fc24.s390x
libblkid-2.28.2-2.fc25.s390x
glib2-devel-2.50.3-1.fc25.s390x
texlive-ifxetex-svn19685.0.5-33.fc25.1.noarch
texlive-caption-svn41409-33.fc25.1.noarch
texlive-float-svn15878.1.3d-33.fc25.1.noarch
texlive-pdftex-def-svn22653.0.06d-33.fc25.1.noarch
texlive-xdvi-bin-svn40750-33.20160520.fc25.1.s390x
texlive-beton-svn15878.0-33.fc25.1.noarch
texlive-filecontents-svn24250.1.3-33.fc25.1.noarch
texlive-lm-math-svn36915.1.959-33.fc25.1.noarch
texlive-pslatex-svn16416.0-33.fc25.1.noarch
texlive-times-svn35058.0-33.fc25.1.noarch
texlive-breakurl-svn29901.1.40-33.fc25.1.noarch
texlive-filehook-svn24280.0.5d-33.fc25.1.noarch
texlive-pst-pdf-svn31660.1.1v-33.fc25.1.noarch
texlive-seminar-svn34011.1.62-33.fc25.1.noarch
texlive-xetexconfig-svn41133-33.fc25.1.noarch
python-rpm-macros-3-12.fc25.noarch
nss-pem-1.0.3-3.fc25.s390x
at-spi2-core-2.22.1-1.fc25.s390x
perl-Scalar-List-Utils-1.48-1.fc25.s390x
libtasn1-devel-4.12-1.fc25.s390x
python3-koji-1.13.0-2.fc25.noarch
opus-1.1.5-1.fc25.s390x
elfutils-libs-0.169-1.fc25.s390x
kernel-core-4.11.10-200.fc25.s390x
systemd-container-231-17.fc25.s390x
sudo-1.8.20p2-1.fc25.s390x
libicu-devel-57.1-5.fc25.s390x
js-jquery-2.2.4-3.fc25.noarch
krb5-libs-1.14.4-8.fc25.s390x
apr-1.6.2-1.fc25.s390x
dbus-1.11.16-1.fc25.s390x
libdrm-2.4.82-1.fc25.s390x
pcre2-utf32-10.23-9.fc25.s390x
copy-jdk-configs-2.3-1.fc25.noarch
libdrm-devel-2.4.82-1.fc25.s390x
krb5-workstation-1.14.4-8.fc25.s390x
python3-sssdconfig-1.15.3-1.fc25.noarch
python2-docutils-0.13.1-3.fc25.noarch
graphviz-2.38.0-39.fc25.s390x
kernel-modules-4.12.11-200.fc25.s390x
fedpkg-1.29-3.fc25.noarch
=== TEST BEGIN ===
Using CC: /home/fam/bin/cc
Install prefix /var/tmp/patchew-tester-tmp-30ljxus4/src/install
BIOS directory /var/tmp/patchew-tester-tmp-30ljxus4/src/install/share/qemu
firmware path /var/tmp/patchew-tester-tmp-30ljxus4/src/install/share/qemu-firmware
binary directory /var/tmp/patchew-tester-tmp-30ljxus4/src/install/bin
library directory /var/tmp/patchew-tester-tmp-30ljxus4/src/install/lib
module directory /var/tmp/patchew-tester-tmp-30ljxus4/src/install/lib/qemu
libexec directory /var/tmp/patchew-tester-tmp-30ljxus4/src/install/libexec
include directory /var/tmp/patchew-tester-tmp-30ljxus4/src/install/include
config directory /var/tmp/patchew-tester-tmp-30ljxus4/src/install/etc
local state directory /var/tmp/patchew-tester-tmp-30ljxus4/src/install/var
Manual directory /var/tmp/patchew-tester-tmp-30ljxus4/src/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path /var/tmp/patchew-tester-tmp-30ljxus4/src
GIT submodules ui/keycodemapdb capstone
C compiler /home/fam/bin/cc
Host C compiler cc
C++ compiler c++
Objective-C compiler /home/fam/bin/cc
ARFLAGS rv
CFLAGS -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g
QEMU_CFLAGS -I/usr/include/pixman-1 -Werror -DHAS_LIBSSH2_SFTP_FSYNC -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -DNCURSES_WIDECHAR -D_GNU_SOURCE -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong -I/usr/include/p11-kit-1 -I/usr/include/libpng16 -I/usr/include/libdrm -I$(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 s390x
host big endian yes
target list aarch64-softmmu alpha-softmmu arm-softmmu cris-softmmu i386-softmmu lm32-softmmu m68k-softmmu microblazeel-softmmu microblaze-softmmu mips64el-softmmu mips64-softmmu mipsel-softmmu mips-softmmu moxie-softmmu nios2-softmmu or1k-softmmu ppc64-softmmu ppcemb-softmmu ppc-softmmu s390x-softmmu sh4eb-softmmu sh4-softmmu sparc64-softmmu sparc-softmmu tricore-softmmu unicore32-softmmu x86_64-softmmu xtensaeb-softmmu xtensa-softmmu aarch64-linux-user alpha-linux-user armeb-linux-user arm-linux-user cris-linux-user hppa-linux-user i386-linux-user m68k-linux-user microblazeel-linux-user microblaze-linux-user mips64el-linux-user mips64-linux-user mipsel-linux-user mips-linux-user mipsn32el-linux-user mipsn32-linux-user nios2-linux-user or1k-linux-user ppc64abi32-linux-user ppc64le-linux-user ppc64-linux-user ppc-linux-user s390x-linux-user sh4eb-linux-user sh4-linux-user sparc32plus-linux-user sparc64-linux-user sparc-linux-user tilegx-linux-user x86_64-linux-user
gprof enabled no
sparse enabled no
strip binaries yes
profiler no
static build no
SDL support yes (2.0.5)
GTK support yes (3.22.17)
GTK GL support yes
VTE support yes (0.46.2)
TLS priority NORMAL
GNUTLS support yes
GNUTLS rnd yes
libgcrypt no
libgcrypt kdf no
nettle yes (3.3)
nettle kdf yes
libtasn1 yes
curses support yes
virgl support yes
curl support yes
mingw32 support no
Audio drivers oss
Block whitelist (rw)
Block whitelist (ro)
VirtFS support yes
Multipath support no
VNC support yes
VNC SASL support yes
VNC JPEG support yes
VNC PNG support yes
xen support no
brlapi support yes
bluez support yes
Documentation yes
PIE no
vde support no
netmap support no
Linux AIO support yes
ATTR/XATTR support yes
Install blobs yes
KVM support yes
HAX support no
TCG support yes
TCG debug enabled no
TCG interpreter no
RDMA support no
fdt support yes
preadv support yes
fdatasync yes
madvise yes
posix_madvise yes
libcap-ng support yes
vhost-net support yes
vhost-scsi support yes
vhost-vsock support yes
vhost-user support yes
Trace backends log
spice support no
rbd support yes
xfsctl support no
smartcard support yes
libusb yes
usb net redir yes
OpenGL support yes
OpenGL dmabufs yes
libiscsi support yes
libnfs support yes
build guest agent yes
QGA VSS support no
QGA w32 disk info no
QGA MSI support no
seccomp support yes
coroutine backend ucontext
coroutine pool yes
debug stack usage no
crypto afalg no
GlusterFS support yes
gcov gcov
gcov enabled no
TPM support yes
libssh2 support yes
TPM passthrough no
TPM emulator yes
QOM debugging yes
Live block migration yes
lzo support yes
snappy support yes
bzip2 support yes
NUMA host support no
tcmalloc support no
jemalloc support no
avx2 optimization no
replication support yes
VxHS block device no
capstone git
GEN aarch64-softmmu/config-devices.mak.tmp
GEN arm-softmmu/config-devices.mak.tmp
GEN cris-softmmu/config-devices.mak.tmp
GEN alpha-softmmu/config-devices.mak.tmp
GEN cris-softmmu/config-devices.mak
GEN i386-softmmu/config-devices.mak.tmp
GEN arm-softmmu/config-devices.mak
GEN alpha-softmmu/config-devices.mak
GEN aarch64-softmmu/config-devices.mak
GEN lm32-softmmu/config-devices.mak.tmp
GEN m68k-softmmu/config-devices.mak.tmp
GEN microblazeel-softmmu/config-devices.mak.tmp
GEN lm32-softmmu/config-devices.mak
GEN m68k-softmmu/config-devices.mak
GEN microblaze-softmmu/config-devices.mak.tmp
GEN mips64el-softmmu/config-devices.mak.tmp
GEN microblaze-softmmu/config-devices.mak
GEN mips64-softmmu/config-devices.mak.tmp
GEN i386-softmmu/config-devices.mak
GEN mipsel-softmmu/config-devices.mak.tmp
GEN microblazeel-softmmu/config-devices.mak
GEN mips-softmmu/config-devices.mak.tmp
GEN mips64el-softmmu/config-devices.mak
GEN mipsel-softmmu/config-devices.mak
GEN mips-softmmu/config-devices.mak
GEN nios2-softmmu/config-devices.mak.tmp
GEN moxie-softmmu/config-devices.mak.tmp
GEN or1k-softmmu/config-devices.mak.tmp
GEN nios2-softmmu/config-devices.mak
GEN moxie-softmmu/config-devices.mak
GEN mips64-softmmu/config-devices.mak
GEN or1k-softmmu/config-devices.mak
GEN ppc64-softmmu/config-devices.mak.tmp
GEN ppcemb-softmmu/config-devices.mak.tmp
GEN ppc-softmmu/config-devices.mak.tmp
GEN s390x-softmmu/config-devices.mak.tmp
GEN s390x-softmmu/config-devices.mak
GEN sh4eb-softmmu/config-devices.mak.tmp
GEN ppc64-softmmu/config-devices.mak
GEN sh4-softmmu/config-devices.mak.tmp
GEN ppc-softmmu/config-devices.mak
GEN ppcemb-softmmu/config-devices.mak
GEN sparc64-softmmu/config-devices.mak.tmp
GEN sparc-softmmu/config-devices.mak.tmp
GEN sh4eb-softmmu/config-devices.mak
GEN sh4-softmmu/config-devices.mak
GEN tricore-softmmu/config-devices.mak.tmp
GEN unicore32-softmmu/config-devices.mak.tmp
GEN sparc64-softmmu/config-devices.mak
GEN sparc-softmmu/config-devices.mak
GEN x86_64-softmmu/config-devices.mak.tmp
GEN xtensaeb-softmmu/config-devices.mak.tmp
GEN tricore-softmmu/config-devices.mak
GEN xtensa-softmmu/config-devices.mak.tmp
GEN unicore32-softmmu/config-devices.mak
GEN xtensa-softmmu/config-devices.mak
GEN xtensaeb-softmmu/config-devices.mak
GEN aarch64-linux-user/config-devices.mak.tmp
GEN alpha-linux-user/config-devices.mak.tmp
GEN x86_64-softmmu/config-devices.mak
GEN armeb-linux-user/config-devices.mak.tmp
GEN aarch64-linux-user/config-devices.mak
GEN alpha-linux-user/config-devices.mak
GEN arm-linux-user/config-devices.mak.tmp
GEN cris-linux-user/config-devices.mak.tmp
GEN armeb-linux-user/config-devices.mak
GEN hppa-linux-user/config-devices.mak.tmp
GEN arm-linux-user/config-devices.mak
GEN hppa-linux-user/config-devices.mak
GEN i386-linux-user/config-devices.mak.tmp
GEN m68k-linux-user/config-devices.mak.tmp
GEN cris-linux-user/config-devices.mak
GEN microblazeel-linux-user/config-devices.mak.tmp
GEN microblaze-linux-user/config-devices.mak.tmp
GEN microblazeel-linux-user/config-devices.mak
GEN microblaze-linux-user/config-devices.mak
GEN m68k-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 mips64el-linux-user/config-devices.mak
GEN mips64-linux-user/config-devices.mak
GEN mips-linux-user/config-devices.mak.tmp
GEN i386-linux-user/config-devices.mak
GEN mipsn32el-linux-user/config-devices.mak.tmp
GEN mipsel-linux-user/config-devices.mak
GEN mipsn32-linux-user/config-devices.mak.tmp
GEN nios2-linux-user/config-devices.mak.tmp
GEN mipsn32-linux-user/config-devices.mak
GEN mips-linux-user/config-devices.mak
GEN mipsn32el-linux-user/config-devices.mak
GEN or1k-linux-user/config-devices.mak.tmp
GEN ppc64abi32-linux-user/config-devices.mak.tmp
GEN nios2-linux-user/config-devices.mak
GEN ppc64-linux-user/config-devices.mak.tmp
GEN ppc64le-linux-user/config-devices.mak.tmp
GEN or1k-linux-user/config-devices.mak
GEN ppc64abi32-linux-user/config-devices.mak
GEN ppc-linux-user/config-devices.mak.tmp
GEN s390x-linux-user/config-devices.mak.tmp
GEN ppc64-linux-user/config-devices.mak
GEN ppc64le-linux-user/config-devices.mak
GEN sh4eb-linux-user/config-devices.mak.tmp
GEN sh4-linux-user/config-devices.mak.tmp
GEN ppc-linux-user/config-devices.mak
GEN sh4eb-linux-user/config-devices.mak
GEN s390x-linux-user/config-devices.mak
GEN sparc32plus-linux-user/config-devices.mak.tmp
GEN sparc64-linux-user/config-devices.mak.tmp
GEN sparc64-linux-user/config-devices.mak
GEN sparc32plus-linux-user/config-devices.mak
GEN tilegx-linux-user/config-devices.mak.tmp
GEN x86_64-linux-user/config-devices.mak.tmp
GEN sparc-linux-user/config-devices.mak.tmp
GEN sh4-linux-user/config-devices.mak
GEN sparc-linux-user/config-devices.mak
GEN config-host.h
GEN x86_64-linux-user/config-devices.mak
GIT ui/keycodemapdb capstone
GEN tilegx-linux-user/config-devices.mak
GEN qemu-options.def
GEN qmp-commands.h
GEN qapi-types.h
GEN qapi-visit.h
GEN qapi-event.h
Submodule 'capstone' (git://git.qemu.org/capstone.git) registered for path 'capstone'
Submodule 'ui/keycodemapdb' (git://git.qemu.org/keycodemapdb.git) registered for path 'ui/keycodemapdb'
GEN qmp-marshal.c
Cloning into '/var/tmp/patchew-tester-tmp-30ljxus4/src/capstone'...
GEN qapi-types.c
GEN qapi-visit.c
GEN qapi-event.c
GEN qmp-introspect.h
GEN qmp-introspect.c
GEN trace/generated-tcg-tracers.h
GEN trace/generated-helpers-wrappers.h
GEN trace/generated-helpers.h
GEN trace/generated-helpers.c
GEN module_block.h
GEN tests/test-qapi-types.h
GEN tests/test-qapi-visit.h
GEN tests/test-qmp-commands.h
GEN tests/test-qapi-event.h
GEN tests/test-qmp-introspect.h
GEN trace-root.h
GEN util/trace.h
GEN crypto/trace.h
GEN io/trace.h
GEN migration/trace.h
GEN block/trace.h
GEN chardev/trace.h
GEN hw/block/trace.h
GEN hw/block/dataplane/trace.h
GEN hw/char/trace.h
GEN hw/intc/trace.h
GEN hw/net/trace.h
GEN hw/virtio/trace.h
GEN hw/audio/trace.h
GEN hw/misc/trace.h
GEN hw/usb/trace.h
GEN hw/scsi/trace.h
GEN hw/nvram/trace.h
GEN hw/display/trace.h
GEN hw/input/trace.h
GEN hw/timer/trace.h
GEN hw/dma/trace.h
GEN hw/sparc/trace.h
GEN hw/sd/trace.h
GEN hw/isa/trace.h
GEN hw/mem/trace.h
GEN hw/i386/trace.h
GEN hw/i386/xen/trace.h
GEN hw/9pfs/trace.h
GEN hw/ppc/trace.h
GEN hw/s390x/trace.h
GEN hw/vfio/trace.h
GEN hw/acpi/trace.h
GEN hw/pci/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 migration/trace.c
GEN io/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/audio/trace.c
GEN hw/misc/trace.c
GEN hw/virtio/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/sparc/trace.c
GEN hw/dma/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/ide/trace.c
GEN hw/xen/trace.c
GEN ui/trace.c
GEN audio/trace.c
GEN net/trace.c
GEN target/arm/trace.c
GEN target/i386/trace.c
GEN target/mips/trace.c
GEN target/sparc/trace.c
GEN target/s390x/trace.c
GEN target/ppc/trace.c
GEN qom/trace.c
GEN linux-user/trace.c
GEN qapi/trace.c
GEN accel/tcg/trace.c
GEN accel/kvm/trace.c
GEN nbd/trace.c
GEN scsi/trace.c
GEN config-all-devices.mak
Cloning into '/var/tmp/patchew-tester-tmp-30ljxus4/src/ui/keycodemapdb'...
GEN ui/input-keymap-linux-to-qcode.c
GEN ui/input-keymap-qnum-to-qcode.c
GEN ui/input-keymap-qcode-to-qnum.c
CC cs.o
CC utils.o
CC MCInstrDesc.o
CC SStream.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
CC arch/Mips/MipsMapping.o
CC arch/Mips/MipsModule.o
CC arch/PowerPC/PPCDisassembler.o
CC arch/PowerPC/PPCInstPrinter.o
CC arch/PowerPC/PPCMapping.o
CC arch/PowerPC/PPCModule.o
CC arch/Sparc/SparcDisassembler.o
CC arch/Sparc/SparcInstPrinter.o
CC arch/Sparc/SparcMapping.o
CC arch/Sparc/SparcModule.o
CC arch/SystemZ/SystemZDisassembler.o
CC arch/SystemZ/SystemZInstPrinter.o
CC arch/SystemZ/SystemZMapping.o
CC arch/SystemZ/SystemZModule.o
CC arch/X86/X86DisassemblerDecoder.o
CC arch/SystemZ/SystemZMCTargetDesc.o
CC arch/X86/X86Disassembler.o
CC arch/X86/X86IntelInstPrinter.o
CC arch/X86/X86ATTInstPrinter.o
CC arch/X86/X86Mapping.o
CC arch/X86/X86Module.o
CC arch/XCore/XCoreDisassembler.o
CC arch/XCore/XCoreInstPrinter.o
CC arch/XCore/XCoreMapping.o
CC arch/XCore/XCoreModule.o
CC MCInst.o
AR libcapstone.a
ar: creating /var/tmp/patchew-tester-tmp-30ljxus4/src/build/capstone/libcapstone.a
make[1]: '/var/tmp/patchew-tester-tmp-30ljxus4/src/build/capstone/libcapstone.a' is up to date.
GEN docs/version.texi
GEN qemu-options.texi
GEN qemu-monitor.texi
CC tests/qemu-iotests/socket_scm_helper.o
GEN qemu-img-cmds.texi
GEN qemu-monitor-info.texi
GEN qemu-img.1
GEN qemu-nbd.8
GEN qemu-ga.8
GEN docs/interop/qemu-qmp-qapi.texi
GEN docs/interop/qemu-ga-qapi.texi
GEN docs/qemu-block-drivers.7
GEN fsdev/virtfs-proxy-helper.1
GEN qga/qapi-generated/qga-qapi-types.h
GEN qga/qapi-generated/qga-qapi-visit.h
GEN qga/qapi-generated/qga-qmp-commands.h
GEN qga/qapi-generated/qga-qapi-visit.c
GEN qga/qapi-generated/qga-qapi-types.c
GEN qga/qapi-generated/qga-qmp-marshal.c
CC qapi-types.o
CC qmp-introspect.o
CC qapi-visit.o
CC qapi-event.o
CC qapi/qapi-visit-core.o
CC qapi/qapi-dealloc-visitor.o
CC qapi/qobject-input-visitor.o
CC qapi/qobject-output-visitor.o
CC qapi/qmp-registry.o
CC qapi/qmp-dispatch.o
CC qapi/string-input-visitor.o
CC qapi/string-output-visitor.o
CC qapi/opts-visitor.o
CC qapi/qapi-clone-visitor.o
CC qapi/qmp-event.o
CC qapi/qapi-util.o
CC qobject/qnum.o
CC qobject/qnull.o
CC qobject/qstring.o
CC qobject/qdict.o
CC qobject/qlist.o
CC qobject/qbool.o
CC qobject/qjson.o
CC qobject/qlit.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/aiocb.o
CC util/async.o
CC util/thread-pool.o
CC util/qemu-timer.o
CC util/main-loop.o
CC util/iohandler.o
CC util/aio-posix.o
CC util/compatfd.o
CC util/event_notifier-posix.o
CC util/mmap-alloc.o
CC util/oslib-posix.o
CC util/qemu-thread-posix.o
CC util/qemu-openpty.o
CC util/memfd.o
CC util/envlist.o
CC util/path.o
CC util/host-utils.o
CC util/module.o
CC util/bitmap.o
CC util/hbitmap.o
CC util/bitops.o
CC util/fifo8.o
CC util/acl.o
CC util/cacheinfo.o
CC util/error.o
CC util/qemu-error.o
CC util/id.o
CC util/iov.o
CC util/qemu-config.o
CC util/qemu-sockets.o
CC util/uri.o
CC util/qemu-option.o
CC util/notify.o
CC util/qemu-progress.o
CC util/keyval.o
CC util/hexdump.o
CC util/crc32c.o
CC util/uuid.o
CC util/throttle.o
CC util/getauxval.o
CC util/readline.o
CC util/rcu.o
CC util/qemu-coroutine.o
CC util/qemu-coroutine-lock.o
CC util/qemu-coroutine-io.o
CC util/qemu-coroutine-sleep.o
CC util/coroutine-ucontext.o
CC util/buffer.o
CC util/timed-average.o
CC util/base64.o
CC util/log.o
CC util/pagesize.o
CC util/qdist.o
CC util/qht.o
CC util/range.o
CC util/stats64.o
CC util/systemd.o
CC trace-root.o
CC util/trace.o
CC crypto/trace.o
CC io/trace.o
CC migration/trace.o
CC block/trace.o
CC chardev/trace.o
CC hw/block/trace.o
CC hw/block/dataplane/trace.o
CC hw/char/trace.o
CC hw/intc/trace.o
CC hw/net/trace.o
CC hw/virtio/trace.o
CC hw/audio/trace.o
CC hw/misc/trace.o
CC hw/usb/trace.o
CC hw/scsi/trace.o
CC hw/nvram/trace.o
CC hw/display/trace.o
CC hw/input/trace.o
CC hw/timer/trace.o
CC hw/dma/trace.o
CC hw/sparc/trace.o
CC hw/sd/trace.o
CC hw/isa/trace.o
CC hw/mem/trace.o
CC hw/i386/trace.o
CC hw/i386/xen/trace.o
CC hw/9pfs/trace.o
CC hw/ppc/trace.o
CC hw/pci/trace.o
CC hw/s390x/trace.o
CC hw/vfio/trace.o
CC hw/acpi/trace.o
CC hw/arm/trace.o
CC hw/alpha/trace.o
CC hw/xen/trace.o
CC hw/ide/trace.o
CC ui/trace.o
CC audio/trace.o
CC net/trace.o
CC target/i386/trace.o
CC target/arm/trace.o
CC target/mips/trace.o
CC target/s390x/trace.o
CC target/ppc/trace.o
CC target/sparc/trace.o
CC qom/trace.o
CC linux-user/trace.o
CC qapi/trace.o
CC accel/tcg/trace.o
CC accel/kvm/trace.o
CC nbd/trace.o
CC scsi/trace.o
CC crypto/pbkdf-stub.o
CC stubs/arch-query-cpu-def.o
CC stubs/arch-query-cpu-model-expansion.o
CC stubs/arch-query-cpu-model-comparison.o
CC stubs/arch-query-cpu-model-baseline.o
CC stubs/bdrv-next-monitor-owned.o
CC stubs/blk-commit-all.o
CC stubs/blockdev-close-all-bdrv-states.o
CC stubs/clock-warp.o
CC stubs/cpu-get-clock.o
CC stubs/cpu-get-icount.o
CC stubs/error-printf.o
CC stubs/dump.o
CC stubs/fdset.o
CC stubs/gdbstub.o
CC stubs/get-vm-name.o
CC stubs/iothread.o
CC stubs/iothread-lock.o
CC stubs/is-daemonized.o
CC stubs/linux-aio.o
CC stubs/machine-init-done.o
CC stubs/migr-blocker.o
CC stubs/change-state-handler.o
CC stubs/monitor.o
CC stubs/qtest.o
CC stubs/notify-event.o
CC stubs/replay.o
CC stubs/runstate-check.o
CC stubs/slirp.o
CC stubs/set-fd-handler.o
CC stubs/sysbus.o
CC stubs/tpm.o
CC stubs/trace-control.o
CC stubs/uuid.o
CC stubs/vm-stop.o
CC stubs/vmstate.o
CC stubs/qmp_pc_dimm.o
CC stubs/target-monitor-defs.o
CC stubs/target-get-monitor-def.o
CC stubs/pc_madt_cpu_entry.o
CC stubs/vmgenid.o
CC stubs/xen-common.o
CC stubs/xen-hvm.o
CC qemu-keymap.o
CC stubs/pci-host-piix.o
CC ui/input-keymap.o
CC contrib/ivshmem-client/ivshmem-client.o
CC contrib/ivshmem-client/main.o
CC contrib/ivshmem-server/ivshmem-server.o
CC contrib/ivshmem-server/main.o
CC qemu-nbd.o
CC block.o
CC blockjob.o
CC qemu-io-cmds.o
CC replication.o
CC block/raw-format.o
CC block/qcow.o
CC block/vdi.o
CC block/vmdk.o
CC block/cloop.o
CC block/bochs.o
CC block/vpc.o
CC block/vvfat.o
CC block/dmg.o
CC block/qcow2.o
CC block/qcow2-refcount.o
CC block/qcow2-cluster.o
CC block/qcow2-snapshot.o
CC block/qcow2-cache.o
CC block/qcow2-bitmap.o
CC block/qed.o
CC block/qed-l2-cache.o
CC block/qed-table.o
CC block/qed-cluster.o
CC block/qed-check.o
CC block/vhdx.o
CC block/vhdx-endian.o
CC block/vhdx-log.o
CC block/quorum.o
CC block/parallels.o
CC block/blkdebug.o
CC block/blkverify.o
CC block/blkreplay.o
CC block/block-backend.o
CC block/snapshot.o
CC block/qapi.o
CC block/file-posix.o
CC block/linux-aio.o
CC block/null.o
CC block/mirror.o
CC block/commit.o
CC block/io.o
CC block/throttle-groups.o
CC block/nbd.o
CC block/nbd-client.o
CC block/sheepdog.o
CC block/iscsi-opts.o
CC block/accounting.o
CC block/dirty-bitmap.o
CC block/write-threshold.o
CC block/replication.o
CC block/throttle.o
CC block/backup.o
CC block/crypto.o
CC nbd/server.o
CC nbd/client.o
CC nbd/common.o
CC scsi/utils.o
CC scsi/pr-manager-helper.o
CC scsi/pr-manager.o
CC block/iscsi.o
CC block/nfs.o
CC block/curl.o
CC block/rbd.o
CC block/gluster.o
CC block/ssh.o
CC block/dmg-bz2.o
CC crypto/init.o
CC crypto/hash.o
CC crypto/hash-nettle.o
CC crypto/hmac.o
CC crypto/hmac-nettle.o
CC crypto/aes.o
CC crypto/desrfb.o
CC crypto/cipher.o
CC crypto/tlscreds.o
CC crypto/tlscredsanon.o
CC crypto/tlscredsx509.o
CC crypto/tlssession.o
CC crypto/secret.o
CC crypto/pbkdf.o
CC crypto/random-gnutls.o
CC crypto/pbkdf-nettle.o
CC crypto/ivgen.o
CC crypto/ivgen-essiv.o
CC crypto/ivgen-plain64.o
CC crypto/ivgen-plain.o
CC crypto/afsplit.o
CC crypto/xts.o
CC crypto/block.o
CC crypto/block-qcow.o
CC crypto/block-luks.o
CC io/channel.o
CC io/channel-command.o
CC io/channel-buffer.o
CC io/channel-file.o
CC io/channel-socket.o
CC io/channel-tls.o
CC io/channel-watch.o
CC io/channel-websock.o
CC io/channel-util.o
CC io/dns-resolver.o
CC io/task.o
CC qom/container.o
CC qom/object.o
CC qom/qom-qobject.o
CC qom/object_interfaces.o
GEN qemu-img-cmds.h
CC qemu-io.o
CC fsdev/9p-marshal.o
CC fsdev/virtfs-proxy-helper.o
CC fsdev/9p-iov-marshal.o
CC scsi/qemu-pr-helper.o
CC qemu-bridge-helper.o
CC blockdev.o
CC blockdev-nbd.o
CC bootdevice.o
CC iothread.o
CC qdev-monitor.o
CC device-hotplug.o
CC os-posix.o
CC bt-host.o
CC bt-vhci.o
CC dma-helpers.o
CC vl.o
CC tpm.o
CC qemu-seccomp.o
CC device_tree.o
CC qmp-marshal.o
CC qmp.o
CC hmp.o
CC cpus-common.o
CC audio/audio.o
CC audio/noaudio.o
CC audio/wavaudio.o
CC audio/mixeng.o
CC audio/sdlaudio.o
CC audio/ossaudio.o
CC backends/rng.o
CC audio/wavcapture.o
CC backends/rng-egd.o
CC backends/rng-random.o
CC backends/tpm.o
CC backends/hostmem.o
CC backends/hostmem-ram.o
CC backends/hostmem-file.o
CC backends/cryptodev.o
CC backends/cryptodev-builtin.o
CC chardev/msmouse.o
CC block/stream.o
CC chardev/wctablet.o
CC chardev/testdev.o
CC chardev/baum.o
CC disas/alpha.o
CXX disas/arm-a64.o
CC disas/arm.o
CC disas/cris.o
CC disas/hppa.o
CC disas/i386.o
CC disas/m68k.o
CC disas/mips.o
CC disas/microblaze.o
CC disas/nios2.o
CC disas/moxie.o
CC disas/ppc.o
CC disas/s390.o
CC disas/sh4.o
CC disas/sparc.o
CC disas/lm32.o
CXX disas/libvixl/vixl/utils.o
CXX disas/libvixl/vixl/compiler-intrinsics.o
CXX disas/libvixl/vixl/a64/instructions-a64.o
CXX disas/libvixl/vixl/a64/decoder-a64.o
CXX disas/libvixl/vixl/a64/disasm-a64.o
CC fsdev/qemu-fsdev.o
CC fsdev/qemu-fsdev-opts.o
CC fsdev/qemu-fsdev-throttle.o
CC fsdev/qemu-fsdev-dummy.o
CC hw/9pfs/9p.o
CC hw/9pfs/9p-util.o
CC hw/9pfs/9p-local.o
CC hw/9pfs/9p-xattr.o
CC hw/9pfs/9p-xattr-user.o
CC hw/9pfs/9p-posix-acl.o
CC hw/9pfs/coth.o
CC hw/9pfs/cofs.o
CC hw/9pfs/codir.o
CC hw/9pfs/cofile.o
CC hw/9pfs/coxattr.o
CC hw/9pfs/9p-synth.o
CC hw/9pfs/9p-handle.o
CC hw/9pfs/9p-proxy.o
CC hw/acpi/core.o
CC hw/acpi/piix4.o
CC hw/acpi/pcihp.o
CC hw/acpi/ich9.o
CC hw/acpi/tco.o
CC hw/acpi/cpu_hotplug.o
CC hw/acpi/memory_hotplug.o
CC hw/acpi/cpu.o
CC hw/acpi/nvdimm.o
CC hw/acpi/vmgenid.o
CC hw/acpi/acpi_interface.o
CC hw/acpi/bios-linker-loader.o
CC hw/acpi/aml-build.o
CC hw/acpi/ipmi.o
CC hw/acpi/acpi-stub.o
CC hw/acpi/ipmi-stub.o
CC hw/audio/sb16.o
CC hw/audio/es1370.o
CC hw/audio/ac97.o
CC hw/audio/fmopl.o
CC hw/audio/adlib.o
CC hw/audio/gus.o
CC hw/audio/gusemu_hal.o
CC hw/audio/gusemu_mixer.o
CC hw/audio/cs4231a.o
CC hw/audio/intel-hda.o
CC hw/audio/hda-codec.o
CC hw/audio/pcspk.o
CC hw/audio/wm8750.o
CC hw/audio/pl041.o
CC hw/audio/lm4549.o
CC hw/audio/cs4231.o
CC hw/audio/marvell_88w8618.o
CC hw/audio/milkymist-ac97.o
CC hw/audio/soundhw.o
CC hw/block/block.o
CC hw/block/cdrom.o
CC hw/block/hd-geometry.o
CC hw/block/fdc.o
CC hw/block/m25p80.o
CC hw/block/nand.o
CC hw/block/pflash_cfi01.o
CC hw/block/pflash_cfi02.o
CC hw/block/ecc.o
CC hw/block/onenand.o
CC hw/block/nvme.o
CC hw/bt/core.o
CC hw/bt/l2cap.o
CC hw/bt/sdp.o
CC hw/bt/hci.o
CC hw/bt/hid.o
CC hw/bt/hci-csr.o
CC hw/char/ipoctal232.o
CC hw/char/escc.o
CC hw/char/parallel.o
CC hw/char/pl011.o
CC hw/char/serial.o
CC hw/char/serial-pci.o
CC hw/char/serial-isa.o
CC hw/char/virtio-console.o
CC hw/char/xilinx_uartlite.o
CC hw/char/cadence_uart.o
CC hw/char/cmsdk-apb-uart.o
CC hw/char/etraxfs_ser.o
CC hw/char/debugcon.o
CC hw/char/grlib_apbuart.o
CC hw/char/imx_serial.o
CC hw/char/lm32_juart.o
CC hw/char/lm32_uart.o
CC hw/char/milkymist-uart.o
CC hw/char/sclpconsole.o
CC hw/char/sclpconsole-lm.o
CC hw/core/qdev.o
CC hw/core/qdev-properties.o
CC hw/core/bus.o
CC hw/core/reset.o
CC hw/core/fw-path-provider.o
CC hw/core/irq.o
CC hw/core/hotplug.o
CC hw/core/nmi.o
CC hw/core/empty_slot.o
CC hw/core/stream.o
CC hw/core/ptimer.o
CC hw/core/sysbus.o
CC hw/core/machine.o
CC hw/core/loader.o
CC hw/core/loader-fit.o
CC hw/core/qdev-properties-system.o
CC hw/core/register.o
CC hw/core/or-irq.o
CC hw/core/platform-bus.o
CC hw/cpu/core.o
CC hw/display/ads7846.o
CC hw/display/cirrus_vga.o
CC hw/display/g364fb.o
CC hw/display/jazz_led.o
CC hw/display/pl110.o
CC hw/display/ssd0323.o
CC hw/display/ssd0303.o
CC hw/display/vga-pci.o
CC hw/display/vga-isa.o
CC hw/display/vga-isa-mm.o
CC hw/display/vmware_vga.o
CC hw/display/blizzard.o
CC hw/display/exynos4210_fimd.o
CC hw/display/framebuffer.o
CC hw/display/milkymist-vgafb.o
CC hw/display/tc6393xb.o
CC hw/dma/puv3_dma.o
CC hw/display/milkymist-tmu2.o
CC hw/dma/rc4030.o
CC hw/dma/pl080.o
CC hw/dma/pl330.o
CC hw/dma/i82374.o
CC hw/dma/i8257.o
CC hw/dma/xilinx_axidma.o
CC hw/dma/xlnx-zynq-devcfg.o
CC hw/dma/etraxfs_dma.o
CC hw/dma/sparc32_dma.o
CC hw/dma/sun4m_iommu.o
CC hw/gpio/max7310.o
CC hw/gpio/pl061.o
CC hw/gpio/puv3_gpio.o
CC hw/gpio/zaurus.o
CC hw/gpio/mpc8xxx.o
CC hw/gpio/gpio_key.o
CC hw/i2c/core.o
CC hw/i2c/smbus.o
CC hw/i2c/smbus_eeprom.o
CC hw/i2c/i2c-ddc.o
CC hw/i2c/versatile_i2c.o
CC hw/i2c/smbus_ich9.o
CC hw/i2c/pm_smbus.o
CC hw/i2c/bitbang_i2c.o
CC hw/i2c/exynos4210_i2c.o
CC hw/i2c/imx_i2c.o
CC hw/ide/core.o
CC hw/i2c/aspeed_i2c.o
CC hw/ide/atapi.o
CC hw/ide/qdev.o
CC hw/ide/pci.o
CC hw/ide/isa.o
CC hw/ide/piix.o
CC hw/ide/cmd646.o
CC hw/ide/macio.o
CC hw/ide/mmio.o
CC hw/ide/via.o
CC hw/ide/microdrive.o
CC hw/ide/ahci.o
CC hw/ide/ich.o
CC hw/input/adb.o
CC hw/input/hid.o
CC hw/input/lm832x.o
CC hw/input/pckbd.o
CC hw/input/pl050.o
CC hw/input/ps2.o
CC hw/input/tsc2005.o
CC hw/input/stellaris_input.o
CC hw/input/vmmouse.o
CC hw/input/virtio-input.o
CC hw/input/virtio-input-hid.o
CC hw/input/virtio-input-host.o
CC hw/intc/heathrow_pic.o
CC hw/intc/i8259_common.o
CC hw/intc/i8259.o
CC hw/intc/pl190.o
CC hw/intc/puv3_intc.o
CC hw/intc/xilinx_intc.o
CC hw/intc/etraxfs_pic.o
CC hw/intc/imx_avic.o
CC hw/intc/lm32_pic.o
CC hw/intc/realview_gic.o
CC hw/intc/slavio_intctl.o
CC hw/intc/ioapic_common.o
CC hw/intc/arm_gic_common.o
CC hw/intc/arm_gic.o
CC hw/intc/arm_gicv2m.o
CC hw/intc/arm_gicv3_common.o
CC hw/intc/arm_gicv3.o
CC hw/intc/arm_gicv3_dist.o
CC hw/intc/arm_gicv3_redist.o
CC hw/intc/arm_gicv3_its_common.o
CC hw/intc/openpic.o
CC hw/intc/intc.o
CC hw/ipack/ipack.o
CC hw/ipack/tpci200.o
CC hw/ipmi/ipmi.o
CC hw/ipmi/ipmi_bmc_sim.o
CC hw/ipmi/ipmi_bmc_extern.o
CC hw/ipmi/isa_ipmi_kcs.o
CC hw/ipmi/isa_ipmi_bt.o
CC hw/isa/isa-bus.o
CC hw/isa/apm.o
CC hw/isa/i82378.o
CC hw/isa/pc87312.o
CC hw/isa/piix4.o
CC hw/isa/vt82c686.o
CC hw/mem/pc-dimm.o
CC hw/mem/nvdimm.o
CC hw/misc/applesmc.o
CC hw/misc/max111x.o
CC hw/misc/tmp105.o
CC hw/misc/tmp421.o
CC hw/misc/debugexit.o
CC hw/misc/sga.o
CC hw/misc/pc-testdev.o
CC hw/misc/pci-testdev.o
CC hw/misc/edu.o
CC hw/misc/unimp.o
CC hw/misc/vmcoreinfo.o
CC hw/misc/arm_l2x0.o
CC hw/misc/arm_integrator_debug.o
CC hw/misc/a9scu.o
CC hw/misc/arm11scu.o
CC hw/misc/puv3_pm.o
CC hw/misc/macio/macio.o
CC hw/misc/macio/cuda.o
CC hw/misc/macio/mac_dbdma.o
CC hw/net/dp8393x.o
CC hw/net/ne2000.o
CC hw/net/eepro100.o
CC hw/net/pcnet-pci.o
CC hw/net/pcnet.o
CC hw/net/e1000.o
CC hw/net/e1000x_common.o
CC hw/net/net_tx_pkt.o
CC hw/net/net_rx_pkt.o
CC hw/net/e1000e.o
CC hw/net/e1000e_core.o
CC hw/net/rtl8139.o
CC hw/net/vmxnet3.o
CC hw/net/smc91c111.o
CC hw/net/lan9118.o
CC hw/net/ne2000-isa.o
CC hw/net/opencores_eth.o
CC hw/net/xgmac.o
CC hw/net/mipsnet.o
CC hw/net/xilinx_axienet.o
CC hw/net/allwinner_emac.o
CC hw/net/imx_fec.o
CC hw/net/cadence_gem.o
CC hw/net/stellaris_enet.o
CC hw/net/lance.o
CC hw/net/sunhme.o
CC hw/net/ftgmac100.o
CC hw/net/sungem.o
CC hw/net/rocker/rocker.o
CC hw/net/rocker/rocker_fp.o
CC hw/net/rocker/rocker_desc.o
CC hw/net/rocker/rocker_world.o
CC hw/net/rocker/rocker_of_dpa.o
CC hw/nvram/ds1225y.o
CC hw/nvram/eeprom93xx.o
CC hw/nvram/fw_cfg.o
CC hw/nvram/chrp_nvram.o
CC hw/nvram/mac_nvram.o
CC hw/pci-bridge/pci_bridge_dev.o
CC hw/pci-bridge/pcie_pci_bridge.o
CC hw/pci-bridge/pcie_root_port.o
CC hw/pci-bridge/gen_pcie_root_port.o
CC hw/pci-bridge/pci_expander_bridge.o
CC hw/pci-bridge/xio3130_downstream.o
CC hw/pci-bridge/xio3130_upstream.o
CC hw/pci-bridge/ioh3420.o
CC hw/pci-bridge/i82801b11.o
CC hw/pci-bridge/dec.o
CC hw/pci-host/pam.o
CC hw/pci-host/prep.o
CC hw/pci-host/grackle.o
CC hw/pci-host/uninorth.o
CC hw/pci-host/ppce500.o
CC hw/pci-host/versatile.o
CC hw/pci-host/apb.o
CC hw/pci-host/bonito.o
CC hw/pci-host/piix.o
CC hw/pci-host/q35.o
CC hw/pci-host/gpex.o
CC hw/pci-host/xilinx-pcie.o
CC hw/pci/pci.o
CC hw/pci/pci_bridge.o
CC hw/pci/msix.o
CC hw/pci/msi.o
CC hw/pci/shpc.o
CC hw/pci/slotid_cap.o
CC hw/pci/pci_host.o
CC hw/pci/pcie_host.o
CC hw/pci/pcie.o
CC hw/pci/pcie_aer.o
CC hw/pci/pcie_port.o
CC hw/pci/pci-stub.o
CC hw/pcmcia/pcmcia.o
CC hw/scsi/scsi-disk.o
CC hw/scsi/scsi-generic.o
CC hw/scsi/scsi-bus.o
CC hw/scsi/lsi53c895a.o
CC hw/scsi/mptsas.o
CC hw/scsi/mptconfig.o
CC hw/scsi/mptendian.o
CC hw/scsi/megasas.o
CC hw/scsi/vmw_pvscsi.o
CC hw/scsi/esp.o
CC hw/scsi/esp-pci.o
CC hw/sd/pl181.o
CC hw/sd/ssi-sd.o
CC hw/sd/sd.o
CC hw/sd/core.o
CC hw/sd/sdhci.o
CC hw/smbios/smbios.o
CC hw/smbios/smbios_type_38.o
CC hw/smbios/smbios-stub.o
CC hw/smbios/smbios_type_38-stub.o
CC hw/ssi/pl022.o
CC hw/ssi/ssi.o
CC hw/ssi/xilinx_spi.o
CC hw/ssi/xilinx_spips.o
CC hw/ssi/aspeed_smc.o
CC hw/ssi/stm32f2xx_spi.o
CC hw/ssi/mss-spi.o
CC hw/timer/arm_timer.o
CC hw/timer/arm_mptimer.o
CC hw/timer/armv7m_systick.o
CC hw/timer/a9gtimer.o
CC hw/timer/cadence_ttc.o
CC hw/timer/ds1338.o
CC hw/timer/hpet.o
CC hw/timer/i8254_common.o
CC hw/timer/i8254.o
CC hw/timer/m48t59.o
CC hw/timer/m48t59-isa.o
CC hw/timer/pl031.o
CC hw/timer/puv3_ost.o
CC hw/timer/twl92230.o
CC hw/timer/xilinx_timer.o
CC hw/timer/slavio_timer.o
CC hw/timer/etraxfs_timer.o
CC hw/timer/grlib_gptimer.o
CC hw/timer/imx_epit.o
CC hw/timer/imx_gpt.o
CC hw/timer/lm32_timer.o
CC hw/timer/milkymist-sysctl.o
CC hw/timer/stm32f2xx_timer.o
CC hw/timer/sun4v-rtc.o
CC hw/timer/aspeed_timer.o
CC hw/timer/cmsdk-apb-timer.o
CC hw/timer/mss-timer.o
CC hw/tpm/tpm_tis.o
CC hw/tpm/tpm_emulator.o
CC hw/tpm/tpm_util.o
CC hw/usb/core.o
CC hw/usb/combined-packet.o
CC hw/usb/bus.o
CC hw/usb/libhw.o
CC hw/usb/desc.o
CC hw/usb/desc-msos.o
CC hw/usb/hcd-uhci.o
CC hw/usb/hcd-ohci.o
CC hw/usb/hcd-ehci.o
CC hw/usb/hcd-ehci-pci.o
CC hw/usb/hcd-ehci-sysbus.o
CC hw/usb/hcd-xhci.o
CC hw/usb/hcd-xhci-nec.o
CC hw/usb/hcd-musb.o
CC hw/usb/dev-hub.o
CC hw/usb/dev-hid.o
CC hw/usb/dev-wacom.o
CC hw/usb/dev-storage.o
CC hw/usb/dev-uas.o
CC hw/usb/dev-audio.o
CC hw/usb/dev-serial.o
CC hw/usb/dev-network.o
CC hw/usb/dev-bluetooth.o
CC hw/usb/dev-smartcard-reader.o
CC hw/usb/ccid-card-passthru.o
CC hw/usb/ccid-card-emulated.o
CC hw/usb/dev-mtp.o
CC hw/usb/redirect.o
CC hw/usb/quirks.o
CC hw/usb/host-libusb.o
CC hw/usb/host-legacy.o
CC hw/usb/host-stub.o
CC hw/virtio/virtio-rng.o
CC hw/virtio/virtio-pci.o
CC hw/virtio/virtio-bus.o
CC hw/virtio/virtio-mmio.o
CC hw/virtio/vhost-stub.o
CC hw/watchdog/watchdog.o
CC hw/watchdog/wdt_i6300esb.o
CC hw/watchdog/wdt_ib700.o
CC hw/watchdog/wdt_diag288.o
CC hw/watchdog/wdt_aspeed.o
CC migration/migration.o
CC migration/socket.o
CC migration/fd.o
CC migration/exec.o
CC migration/tls.o
CC migration/savevm.o
CC migration/channel.o
CC migration/colo-comm.o
CC migration/colo.o
CC migration/colo-failover.o
CC migration/vmstate.o
CC migration/vmstate-types.o
CC migration/page_cache.o
CC migration/qemu-file.o
CC migration/global_state.o
CC migration/xbzrle.o
CC migration/qemu-file-channel.o
CC migration/postcopy-ram.o
CC migration/qjson.o
CC migration/block-dirty-bitmap.o
CC migration/block.o
CC net/net.o
CC net/queue.o
CC net/checksum.o
CC net/util.o
CC net/hub.o
CC net/socket.o
CC net/dump.o
CC net/eth.o
CC net/l2tpv3.o
CC net/vhost-user.o
CC net/slirp.o
CC net/filter.o
CC net/filter-mirror.o
CC net/filter-buffer.o
CC net/colo-compare.o
CC net/colo.o
CC net/filter-rewriter.o
CC net/filter-replay.o
CC net/tap.o
CC net/tap-linux.o
CC qom/cpu.o
CC replay/replay.o
CC replay/replay-internal.o
CC replay/replay-events.o
CC replay/replay-time.o
CC replay/replay-input.o
CC replay/replay-char.o
CC replay/replay-snapshot.o
CC replay/replay-net.o
CC replay/replay-audio.o
CC slirp/cksum.o
CC slirp/if.o
CC slirp/ip_icmp.o
CC slirp/ip6_icmp.o
CC slirp/ip6_input.o
CC slirp/ip6_output.o
CC slirp/ip_input.o
CC slirp/ip_output.o
CC slirp/dnssearch.o
CC slirp/dhcpv6.o
CC slirp/slirp.o
CC slirp/mbuf.o
CC slirp/misc.o
CC slirp/sbuf.o
CC slirp/socket.o
CC slirp/tcp_input.o
CC slirp/tcp_output.o
CC slirp/tcp_subr.o
CC slirp/tcp_timer.o
CC slirp/udp.o
CC slirp/udp6.o
CC slirp/bootp.o
CC slirp/tftp.o
CC slirp/arp_table.o
CC slirp/ndp_table.o
CC slirp/ncsi.o
CC ui/keymaps.o
CC ui/console.o
CC ui/cursor.o
CC ui/qemu-pixman.o
CC ui/input.o
CC ui/input-legacy.o
CC ui/input-linux.o
CC ui/sdl2.o
CC ui/sdl2-input.o
CC ui/sdl2-2d.o
CC ui/sdl2-gl.o
CC ui/x_keymap.o
CC ui/curses.o
CC ui/vnc.o
CC ui/vnc-enc-zlib.o
CC ui/vnc-enc-hextile.o
CC ui/vnc-enc-tight.o
CC ui/vnc-palette.o
CC ui/vnc-enc-zrle.o
CC ui/vnc-auth-vencrypt.o
CC ui/vnc-auth-sasl.o
CC ui/vnc-jobs.o
CC ui/vnc-ws.o
CC ui/gtk.o
VERT ui/shader/texture-blit-vert.h
VERT ui/shader/texture-blit-flip-vert.h
FRAG ui/shader/texture-blit-frag.h
CC ui/console-gl.o
CC ui/egl-helpers.o
CC ui/egl-context.o
CC ui/egl-headless.o
CC ui/gtk-gl-area.o
CC chardev/char.o
CC chardev/char-fd.o
CC chardev/char-fe.o
CC chardev/char-file.o
CC chardev/char-io.o
CC chardev/char-mux.o
CC chardev/char-null.o
CC chardev/char-parallel.o
CC chardev/char-pipe.o
CC chardev/char-ringbuf.o
CC chardev/char-pty.o
CC chardev/char-serial.o
CC chardev/char-socket.o
CC chardev/char-stdio.o
CC chardev/char-udp.o
LINK tests/qemu-iotests/socket_scm_helper
GEN qemu-doc.html
CCAS s390-ccw/start.o
GEN qemu-doc.txt
GEN qemu.1
CC s390-ccw/main.o
CC s390-ccw/bootmap.o
GEN docs/interop/qemu-qmp-ref.html
CC s390-ccw/sclp.o
CC s390-ccw/virtio.o
GEN docs/interop/qemu-qmp-ref.txt
CC s390-ccw/virtio-scsi.o
GEN docs/interop/qemu-qmp-ref.7
CC s390-ccw/virtio-blkdev.o
GEN docs/interop/qemu-ga-ref.html
s390-netboot.img not built since roms/SLOF/ is not available.
BUILD s390-ccw/s390-ccw.elf
STRIP s390-ccw/s390-ccw.img
GEN docs/interop/qemu-ga-ref.txt
GEN docs/interop/qemu-ga-ref.7
CC qga/commands.o
CC qga/guest-agent-command-state.o
CC qga/main.o
CC qga/commands-posix.o
CC qga/channel-posix.o
CC qga/qapi-generated/qga-qapi-types.o
CC qga/qapi-generated/qga-qapi-visit.o
CC qga/qapi-generated/qga-qmp-marshal.o
AR libqemuutil.a
CC ui/shader.o
CC qemu-img.o
LINK qemu-keymap
LINK ivshmem-client
LINK ivshmem-server
LINK qemu-nbd
LINK qemu-io
LINK fsdev/virtfs-proxy-helper
LINK scsi/qemu-pr-helper
LINK qemu-bridge-helper
GEN cris-softmmu/hmp-commands.h
GEN alpha-softmmu/hmp-commands.h
GEN cris-softmmu/hmp-commands-info.h
GEN arm-softmmu/hmp-commands.h
GEN cris-softmmu/config-target.h
GEN arm-softmmu/hmp-commands-info.h
GEN alpha-softmmu/hmp-commands-info.h
CC cris-softmmu/exec.o
GEN arm-softmmu/config-target.h
CC arm-softmmu/exec.o
GEN alpha-softmmu/config-target.h
CC alpha-softmmu/exec.o
GEN aarch64-softmmu/hmp-commands.h
GEN aarch64-softmmu/hmp-commands-info.h
GEN aarch64-softmmu/config-target.h
CC aarch64-softmmu/exec.o
CC arm-softmmu/tcg/tcg.o
CC cris-softmmu/tcg/tcg.o
CC alpha-softmmu/tcg/tcg.o
CC aarch64-softmmu/tcg/tcg.o
CC arm-softmmu/tcg/tcg-op.o
CC alpha-softmmu/tcg/tcg-op.o
CC cris-softmmu/tcg/tcg-op.o
CC aarch64-softmmu/tcg/tcg-op.o
CC arm-softmmu/tcg/optimize.o
CC alpha-softmmu/tcg/optimize.o
CC cris-softmmu/tcg/optimize.o
CC arm-softmmu/tcg/tcg-common.o
CC arm-softmmu/fpu/softfloat.o
CC alpha-softmmu/tcg/tcg-common.o
CC cris-softmmu/tcg/tcg-common.o
CC alpha-softmmu/fpu/softfloat.o
CC aarch64-softmmu/tcg/optimize.o
CC cris-softmmu/fpu/softfloat.o
CC aarch64-softmmu/tcg/tcg-common.o
CC arm-softmmu/disas.o
CC alpha-softmmu/disas.o
CC aarch64-softmmu/fpu/softfloat.o
GEN arm-softmmu/gdbstub-xml.c
CC alpha-softmmu/arch_init.o
CC alpha-softmmu/cpus.o
CC arm-softmmu/arch_init.o
CC alpha-softmmu/monitor.o
CC cris-softmmu/disas.o
CC arm-softmmu/cpus.o
CC cris-softmmu/arch_init.o
CC arm-softmmu/monitor.o
CC cris-softmmu/cpus.o
CC alpha-softmmu/gdbstub.o
CC aarch64-softmmu/disas.o
CC cris-softmmu/monitor.o
CC alpha-softmmu/balloon.o
GEN aarch64-softmmu/gdbstub-xml.c
CC alpha-softmmu/ioport.o
CC arm-softmmu/gdbstub.o
CC alpha-softmmu/numa.o
CC cris-softmmu/gdbstub.o
CC arm-softmmu/balloon.o
CC aarch64-softmmu/arch_init.o
CC alpha-softmmu/qtest.o
CC aarch64-softmmu/cpus.o
CC cris-softmmu/balloon.o
CC arm-softmmu/ioport.o
CC alpha-softmmu/memory.o
CC cris-softmmu/ioport.o
CC arm-softmmu/numa.o
CC aarch64-softmmu/monitor.o
CC cris-softmmu/numa.o
CC arm-softmmu/qtest.o
CC cris-softmmu/qtest.o
CC alpha-softmmu/memory_mapping.o
CC arm-softmmu/memory.o
CC alpha-softmmu/dump.o
CC cris-softmmu/memory.o
CC aarch64-softmmu/gdbstub.o
CC alpha-softmmu/migration/ram.o
CC arm-softmmu/memory_mapping.o
CC aarch64-softmmu/balloon.o
CC aarch64-softmmu/ioport.o
CC arm-softmmu/dump.o
CC cris-softmmu/memory_mapping.o
CC alpha-softmmu/accel/accel.o
CC aarch64-softmmu/numa.o
CC alpha-softmmu/accel/stubs/hax-stub.o
CC cris-softmmu/dump.o
CC arm-softmmu/migration/ram.o
CC alpha-softmmu/accel/stubs/kvm-stub.o
CC aarch64-softmmu/qtest.o
CC alpha-softmmu/accel/tcg/tcg-all.o
CC alpha-softmmu/accel/tcg/cputlb.o
CC cris-softmmu/migration/ram.o
CC aarch64-softmmu/memory.o
CC arm-softmmu/accel/accel.o
CC arm-softmmu/accel/stubs/hax-stub.o
CC cris-softmmu/accel/accel.o
CC arm-softmmu/accel/stubs/kvm-stub.o
CC cris-softmmu/accel/stubs/hax-stub.o
CC aarch64-softmmu/memory_mapping.o
CC alpha-softmmu/accel/tcg/tcg-runtime.o
CC cris-softmmu/accel/stubs/kvm-stub.o
CC arm-softmmu/accel/tcg/tcg-all.o
CC aarch64-softmmu/dump.o
CC cris-softmmu/accel/tcg/tcg-all.o
CC arm-softmmu/accel/tcg/cputlb.o
CC alpha-softmmu/accel/tcg/cpu-exec.o
CC cris-softmmu/accel/tcg/cputlb.o
CC alpha-softmmu/accel/tcg/cpu-exec-common.o
CC aarch64-softmmu/migration/ram.o
CC alpha-softmmu/accel/tcg/translate-all.o
CC cris-softmmu/accel/tcg/tcg-runtime.o
CC arm-softmmu/accel/tcg/tcg-runtime.o
CC alpha-softmmu/accel/tcg/translator.o
CC cris-softmmu/accel/tcg/cpu-exec.o
CC aarch64-softmmu/accel/accel.o
CC alpha-softmmu/hw/9pfs/virtio-9p-device.o
CC arm-softmmu/accel/tcg/cpu-exec.o
CC aarch64-softmmu/accel/stubs/hax-stub.o
CC cris-softmmu/accel/tcg/cpu-exec-common.o
CC aarch64-softmmu/accel/stubs/kvm-stub.o
CC alpha-softmmu/hw/block/virtio-blk.o
CC cris-softmmu/accel/tcg/translate-all.o
CC aarch64-softmmu/accel/tcg/tcg-all.o
CC arm-softmmu/accel/tcg/cpu-exec-common.o
CC alpha-softmmu/hw/block/dataplane/virtio-blk.o
CC aarch64-softmmu/accel/tcg/cputlb.o
CC arm-softmmu/accel/tcg/translate-all.o
CC alpha-softmmu/hw/char/virtio-serial-bus.o
CC cris-softmmu/accel/tcg/translator.o
CC cris-softmmu/hw/core/generic-loader.o
CC alpha-softmmu/hw/core/generic-loader.o
CC arm-softmmu/accel/tcg/translator.o
CC alpha-softmmu/hw/core/null-machine.o
CC cris-softmmu/hw/core/null-machine.o
CC alpha-softmmu/hw/display/vga.o
CC cris-softmmu/hw/misc/mmio_interface.o
CC aarch64-softmmu/accel/tcg/tcg-runtime.o
CC arm-softmmu/hw/9pfs/virtio-9p-device.o
CC cris-softmmu/hw/net/etraxfs_eth.o
CC cris-softmmu/hw/net/vhost_net.o
CC arm-softmmu/hw/adc/stm32f2xx_adc.o
CC aarch64-softmmu/accel/tcg/cpu-exec.o
CC cris-softmmu/hw/net/rocker/qmp-norocker.o
CC arm-softmmu/hw/block/virtio-blk.o
CC cris-softmmu/hw/vfio/common.o
CC alpha-softmmu/hw/display/virtio-gpu.o
CC arm-softmmu/hw/block/dataplane/virtio-blk.o
CC aarch64-softmmu/accel/tcg/cpu-exec-common.o
CC aarch64-softmmu/accel/tcg/translate-all.o
CC arm-softmmu/hw/char/exynos4210_uart.o
CC cris-softmmu/hw/vfio/platform.o
CC alpha-softmmu/hw/display/virtio-gpu-3d.o
CC arm-softmmu/hw/char/omap_uart.o
CC aarch64-softmmu/accel/tcg/translator.o
CC cris-softmmu/hw/vfio/spapr.o
CC alpha-softmmu/hw/display/virtio-gpu-pci.o
CC arm-softmmu/hw/char/digic-uart.o
CC arm-softmmu/hw/char/stm32f2xx_usart.o
CC cris-softmmu/hw/cris/boot.o
CC aarch64-softmmu/hw/9pfs/virtio-9p-device.o
CC alpha-softmmu/hw/misc/ivshmem.o
CC cris-softmmu/hw/cris/axis_dev88.o
CC arm-softmmu/hw/char/bcm2835_aux.o
CC aarch64-softmmu/hw/adc/stm32f2xx_adc.o
CC cris-softmmu/target/cris/translate.o
CC aarch64-softmmu/hw/block/virtio-blk.o
CC arm-softmmu/hw/char/virtio-serial-bus.o
CC alpha-softmmu/hw/misc/mmio_interface.o
CC arm-softmmu/hw/core/generic-loader.o
CC aarch64-softmmu/hw/block/dataplane/virtio-blk.o
CC alpha-softmmu/hw/net/virtio-net.o
CC arm-softmmu/hw/core/null-machine.o
CC aarch64-softmmu/hw/char/exynos4210_uart.o
CC aarch64-softmmu/hw/char/omap_uart.o
CC arm-softmmu/hw/cpu/arm11mpcore.o
CC aarch64-softmmu/hw/char/digic-uart.o
CC alpha-softmmu/hw/net/vhost_net.o
CC arm-softmmu/hw/cpu/realview_mpcore.o
CC cris-softmmu/target/cris/op_helper.o
CC aarch64-softmmu/hw/char/stm32f2xx_usart.o
CC alpha-softmmu/hw/scsi/virtio-scsi.o
CC arm-softmmu/hw/cpu/a9mpcore.o
CC cris-softmmu/target/cris/helper.o
CC arm-softmmu/hw/cpu/a15mpcore.o
CC aarch64-softmmu/hw/char/bcm2835_aux.o
CC cris-softmmu/target/cris/cpu.o
CC alpha-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC arm-softmmu/hw/display/omap_dss.o
CC cris-softmmu/target/cris/gdbstub.o
CC alpha-softmmu/hw/scsi/vhost-scsi-common.o
CC aarch64-softmmu/hw/char/virtio-serial-bus.o
CC cris-softmmu/target/cris/mmu.o
CC alpha-softmmu/hw/scsi/vhost-scsi.o
CC arm-softmmu/hw/display/omap_lcdc.o
CC cris-softmmu/target/cris/machine.o
CC alpha-softmmu/hw/scsi/vhost-user-scsi.o
CC aarch64-softmmu/hw/core/generic-loader.o
CC alpha-softmmu/hw/timer/mc146818rtc.o
GEN trace/generated-helpers.c
CC aarch64-softmmu/hw/core/null-machine.o
CC cris-softmmu/trace/control-target.o
CC arm-softmmu/hw/display/pxa2xx_lcd.o
CC aarch64-softmmu/hw/cpu/arm11mpcore.o
CC alpha-softmmu/hw/vfio/common.o
CC aarch64-softmmu/hw/cpu/realview_mpcore.o
CC cris-softmmu/trace/generated-helpers.o
CC aarch64-softmmu/hw/cpu/a9mpcore.o
LINK cris-softmmu/qemu-system-cris
CC aarch64-softmmu/hw/cpu/a15mpcore.o
CC alpha-softmmu/hw/vfio/pci.o
CC arm-softmmu/hw/display/bcm2835_fb.o
CC aarch64-softmmu/hw/display/omap_dss.o
CC arm-softmmu/hw/display/vga.o
CC aarch64-softmmu/hw/display/omap_lcdc.o
CC alpha-softmmu/hw/vfio/pci-quirks.o
CC arm-softmmu/hw/display/virtio-gpu.o
CC aarch64-softmmu/hw/display/pxa2xx_lcd.o
CC alpha-softmmu/hw/vfio/platform.o
CC arm-softmmu/hw/display/virtio-gpu-3d.o
CC alpha-softmmu/hw/vfio/spapr.o
GEN i386-softmmu/hmp-commands.h
GEN i386-softmmu/hmp-commands-info.h
CC alpha-softmmu/hw/virtio/virtio.o
GEN i386-softmmu/config-target.h
CC aarch64-softmmu/hw/display/bcm2835_fb.o
CC i386-softmmu/exec.o
CC arm-softmmu/hw/display/virtio-gpu-pci.o
CC aarch64-softmmu/hw/display/vga.o
CC alpha-softmmu/hw/virtio/virtio-balloon.o
CC arm-softmmu/hw/dma/omap_dma.o
CC alpha-softmmu/hw/virtio/vhost.o
CC aarch64-softmmu/hw/display/virtio-gpu.o
CC arm-softmmu/hw/dma/soc_dma.o
CC i386-softmmu/tcg/tcg.o
CC arm-softmmu/hw/dma/pxa2xx_dma.o
CC alpha-softmmu/hw/virtio/vhost-backend.o
CC arm-softmmu/hw/dma/bcm2835_dma.o
CC aarch64-softmmu/hw/display/virtio-gpu-3d.o
CC alpha-softmmu/hw/virtio/vhost-user.o
CC arm-softmmu/hw/gpio/omap_gpio.o
CC alpha-softmmu/hw/virtio/vhost-vsock.o
CC aarch64-softmmu/hw/display/virtio-gpu-pci.o
CC arm-softmmu/hw/gpio/imx_gpio.o
CC alpha-softmmu/hw/virtio/virtio-crypto.o
CC arm-softmmu/hw/gpio/bcm2835_gpio.o
CC aarch64-softmmu/hw/display/dpcd.o
CC alpha-softmmu/hw/virtio/virtio-crypto-pci.o
CC i386-softmmu/tcg/tcg-op.o
CC arm-softmmu/hw/i2c/omap_i2c.o
CC aarch64-softmmu/hw/display/xlnx_dp.o
CC arm-softmmu/hw/input/pxa2xx_keypad.o
CC alpha-softmmu/hw/alpha/dp264.o
CC aarch64-softmmu/hw/dma/xlnx_dpdma.o
CC arm-softmmu/hw/input/tsc210x.o
CC alpha-softmmu/hw/alpha/pci.o
CC arm-softmmu/hw/intc/armv7m_nvic.o
CC aarch64-softmmu/hw/dma/omap_dma.o
CC alpha-softmmu/hw/alpha/typhoon.o
CC i386-softmmu/tcg/optimize.o
CC alpha-softmmu/target/alpha/machine.o
CC alpha-softmmu/target/alpha/translate.o
CC aarch64-softmmu/hw/dma/soc_dma.o
CC arm-softmmu/hw/intc/exynos4210_gic.o
CC aarch64-softmmu/hw/dma/pxa2xx_dma.o
CC i386-softmmu/tcg/tcg-common.o
CC arm-softmmu/hw/intc/exynos4210_combiner.o
CC i386-softmmu/fpu/softfloat.o
CC aarch64-softmmu/hw/dma/bcm2835_dma.o
CC arm-softmmu/hw/intc/omap_intc.o
CC alpha-softmmu/target/alpha/helper.o
CC aarch64-softmmu/hw/gpio/omap_gpio.o
CC arm-softmmu/hw/intc/bcm2835_ic.o
CC aarch64-softmmu/hw/gpio/imx_gpio.o
CC alpha-softmmu/target/alpha/cpu.o
CC arm-softmmu/hw/intc/bcm2836_control.o
CC alpha-softmmu/target/alpha/int_helper.o
CC aarch64-softmmu/hw/gpio/bcm2835_gpio.o
CC arm-softmmu/hw/intc/allwinner-a10-pic.o
CC aarch64-softmmu/hw/i2c/omap_i2c.o
CC arm-softmmu/hw/intc/aspeed_vic.o
CC aarch64-softmmu/hw/input/pxa2xx_keypad.o
CC alpha-softmmu/target/alpha/fpu_helper.o
CC arm-softmmu/hw/intc/arm_gicv3_cpuif.o
CC aarch64-softmmu/hw/input/tsc210x.o
CC alpha-softmmu/target/alpha/vax_helper.o
CC i386-softmmu/disas.o
CC aarch64-softmmu/hw/intc/armv7m_nvic.o
CC alpha-softmmu/target/alpha/sys_helper.o
GEN i386-softmmu/gdbstub-xml.c
CC arm-softmmu/hw/misc/ivshmem.o
CC alpha-softmmu/target/alpha/mem_helper.o
CC i386-softmmu/arch_init.o
CC alpha-softmmu/target/alpha/gdbstub.o
CC aarch64-softmmu/hw/intc/exynos4210_gic.o
CC i386-softmmu/cpus.o
CC arm-softmmu/hw/misc/arm_sysctl.o
GEN trace/generated-helpers.c
CC alpha-softmmu/trace/control-target.o
CC aarch64-softmmu/hw/intc/exynos4210_combiner.o
CC arm-softmmu/hw/misc/cbus.o
CC aarch64-softmmu/hw/intc/omap_intc.o
CC alpha-softmmu/trace/generated-helpers.o
CC i386-softmmu/monitor.o
CC arm-softmmu/hw/misc/exynos4210_pmu.o
CC aarch64-softmmu/hw/intc/bcm2835_ic.o
LINK alpha-softmmu/qemu-system-alpha
CC arm-softmmu/hw/misc/exynos4210_clk.o
CC aarch64-softmmu/hw/intc/bcm2836_control.o
CC arm-softmmu/hw/misc/exynos4210_rng.o
CC aarch64-softmmu/hw/intc/allwinner-a10-pic.o
CC arm-softmmu/hw/misc/imx_ccm.o
CC i386-softmmu/gdbstub.o
CC arm-softmmu/hw/misc/imx31_ccm.o
CC aarch64-softmmu/hw/intc/aspeed_vic.o
CC arm-softmmu/hw/misc/imx25_ccm.o
CC arm-softmmu/hw/misc/imx6_ccm.o
CC aarch64-softmmu/hw/intc/arm_gicv3_cpuif.o
CC i386-softmmu/balloon.o
CC arm-softmmu/hw/misc/imx6_src.o
CC i386-softmmu/ioport.o
CC arm-softmmu/hw/misc/mst_fpga.o
CC i386-softmmu/numa.o
CC arm-softmmu/hw/misc/omap_clk.o
GEN lm32-softmmu/hmp-commands.h
GEN lm32-softmmu/hmp-commands-info.h
GEN lm32-softmmu/config-target.h
CC aarch64-softmmu/hw/misc/ivshmem.o
CC lm32-softmmu/exec.o
CC i386-softmmu/qtest.o
CC arm-softmmu/hw/misc/omap_gpmc.o
CC aarch64-softmmu/hw/misc/arm_sysctl.o
CC i386-softmmu/memory.o
CC aarch64-softmmu/hw/misc/cbus.o
CC arm-softmmu/hw/misc/omap_l4.o
CC arm-softmmu/hw/misc/omap_sdrc.o
CC aarch64-softmmu/hw/misc/exynos4210_pmu.o
CC aarch64-softmmu/hw/misc/exynos4210_clk.o
CC arm-softmmu/hw/misc/omap_tap.o
CC arm-softmmu/hw/misc/bcm2835_mbox.o
CC i386-softmmu/memory_mapping.o
CC lm32-softmmu/tcg/tcg.o
CC aarch64-softmmu/hw/misc/exynos4210_rng.o
CC arm-softmmu/hw/misc/bcm2835_property.o
CC i386-softmmu/dump.o
CC aarch64-softmmu/hw/misc/imx_ccm.o
CC aarch64-softmmu/hw/misc/imx31_ccm.o
CC arm-softmmu/hw/misc/bcm2835_rng.o
CC i386-softmmu/migration/ram.o
CC aarch64-softmmu/hw/misc/imx25_ccm.o
CC arm-softmmu/hw/misc/zynq_slcr.o
CC aarch64-softmmu/hw/misc/imx6_ccm.o
CC lm32-softmmu/tcg/tcg-op.o
CC arm-softmmu/hw/misc/zynq-xadc.o
CC aarch64-softmmu/hw/misc/imx6_src.o
CC i386-softmmu/accel/accel.o
CC arm-softmmu/hw/misc/stm32f2xx_syscfg.o
CC arm-softmmu/hw/misc/mps2-scc.o
CC aarch64-softmmu/hw/misc/mst_fpga.o
CC i386-softmmu/accel/stubs/hax-stub.o
CC arm-softmmu/hw/misc/aspeed_scu.o
CC aarch64-softmmu/hw/misc/omap_clk.o
CC i386-softmmu/accel/stubs/kvm-stub.o
CC arm-softmmu/hw/misc/aspeed_sdmc.o
CC aarch64-softmmu/hw/misc/omap_gpmc.o
CC i386-softmmu/accel/tcg/tcg-all.o
CC arm-softmmu/hw/misc/mmio_interface.o
CC lm32-softmmu/tcg/optimize.o
CC aarch64-softmmu/hw/misc/omap_l4.o
CC i386-softmmu/accel/tcg/cputlb.o
CC arm-softmmu/hw/misc/msf2-sysreg.o
CC aarch64-softmmu/hw/misc/omap_sdrc.o
CC arm-softmmu/hw/net/virtio-net.o
CC lm32-softmmu/tcg/tcg-common.o
CC aarch64-softmmu/hw/misc/omap_tap.o
CC lm32-softmmu/fpu/softfloat.o
CC aarch64-softmmu/hw/misc/bcm2835_mbox.o
CC arm-softmmu/hw/net/vhost_net.o
CC i386-softmmu/accel/tcg/tcg-runtime.o
CC arm-softmmu/hw/pcmcia/pxa2xx.o
CC aarch64-softmmu/hw/misc/bcm2835_property.o
CC arm-softmmu/hw/scsi/virtio-scsi.o
CC i386-softmmu/accel/tcg/cpu-exec.o
CC arm-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC aarch64-softmmu/hw/misc/bcm2835_rng.o
CC i386-softmmu/accel/tcg/cpu-exec-common.o
CC aarch64-softmmu/hw/misc/zynq_slcr.o
CC arm-softmmu/hw/scsi/vhost-scsi-common.o
CC i386-softmmu/accel/tcg/translate-all.o
CC aarch64-softmmu/hw/misc/zynq-xadc.o
CC arm-softmmu/hw/scsi/vhost-scsi.o
CC i386-softmmu/accel/tcg/translator.o
CC aarch64-softmmu/hw/misc/stm32f2xx_syscfg.o
CC arm-softmmu/hw/scsi/vhost-user-scsi.o
CC lm32-softmmu/disas.o
CC i386-softmmu/hw/9pfs/virtio-9p-device.o
CC aarch64-softmmu/hw/misc/mps2-scc.o
CC lm32-softmmu/arch_init.o
CC arm-softmmu/hw/sd/omap_mmc.o
CC aarch64-softmmu/hw/misc/auxbus.o
CC i386-softmmu/hw/block/virtio-blk.o
CC lm32-softmmu/cpus.o
CC aarch64-softmmu/hw/misc/aspeed_scu.o
CC arm-softmmu/hw/sd/pxa2xx_mmci.o
CC aarch64-softmmu/hw/misc/aspeed_sdmc.o
CC i386-softmmu/hw/block/dataplane/virtio-blk.o
CC arm-softmmu/hw/sd/bcm2835_sdhost.o
CC aarch64-softmmu/hw/misc/mmio_interface.o
CC i386-softmmu/hw/char/virtio-serial-bus.o
CC lm32-softmmu/monitor.o
CC arm-softmmu/hw/ssi/omap_spi.o
CC aarch64-softmmu/hw/misc/msf2-sysreg.o
CC i386-softmmu/hw/core/generic-loader.o
CC arm-softmmu/hw/ssi/imx_spi.o
CC i386-softmmu/hw/core/null-machine.o
CC aarch64-softmmu/hw/net/virtio-net.o
CC arm-softmmu/hw/timer/exynos4210_mct.o
CC i386-softmmu/hw/display/vga.o
CC arm-softmmu/hw/timer/exynos4210_pwm.o
CC lm32-softmmu/gdbstub.o
CC arm-softmmu/hw/timer/exynos4210_rtc.o
CC aarch64-softmmu/hw/net/vhost_net.o
CC aarch64-softmmu/hw/pcmcia/pxa2xx.o
CC arm-softmmu/hw/timer/omap_gptimer.o
CC lm32-softmmu/balloon.o
CC aarch64-softmmu/hw/scsi/virtio-scsi.o
CC arm-softmmu/hw/timer/omap_synctimer.o
CC i386-softmmu/hw/display/virtio-gpu.o
CC lm32-softmmu/ioport.o
CC arm-softmmu/hw/timer/pxa2xx_timer.o
CC lm32-softmmu/numa.o
CC aarch64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC arm-softmmu/hw/timer/digic-timer.o
CC aarch64-softmmu/hw/scsi/vhost-scsi-common.o
CC i386-softmmu/hw/display/virtio-gpu-3d.o
CC lm32-softmmu/qtest.o
CC arm-softmmu/hw/timer/allwinner-a10-pit.o
CC aarch64-softmmu/hw/scsi/vhost-scsi.o
CC arm-softmmu/hw/usb/tusb6010.o
CC lm32-softmmu/memory.o
CC i386-softmmu/hw/display/virtio-gpu-pci.o
CC aarch64-softmmu/hw/scsi/vhost-user-scsi.o
CC arm-softmmu/hw/vfio/common.o
CC aarch64-softmmu/hw/sd/omap_mmc.o
CC i386-softmmu/hw/display/virtio-vga.o
CC arm-softmmu/hw/vfio/pci.o
CC aarch64-softmmu/hw/sd/pxa2xx_mmci.o
CC i386-softmmu/hw/intc/apic.o
CC lm32-softmmu/memory_mapping.o
CC aarch64-softmmu/hw/sd/bcm2835_sdhost.o
CC lm32-softmmu/dump.o
CC i386-softmmu/hw/intc/apic_common.o
CC aarch64-softmmu/hw/ssi/omap_spi.o
CC arm-softmmu/hw/vfio/pci-quirks.o
CC aarch64-softmmu/hw/ssi/imx_spi.o
CC i386-softmmu/hw/intc/ioapic.o
CC lm32-softmmu/migration/ram.o
CC aarch64-softmmu/hw/timer/exynos4210_mct.o
CC arm-softmmu/hw/vfio/platform.o
CC i386-softmmu/hw/isa/lpc_ich9.o
CC aarch64-softmmu/hw/timer/exynos4210_pwm.o
CC arm-softmmu/hw/vfio/calxeda-xgmac.o
CC lm32-softmmu/accel/accel.o
CC aarch64-softmmu/hw/timer/exynos4210_rtc.o
CC i386-softmmu/hw/misc/vmport.o
CC arm-softmmu/hw/vfio/amd-xgbe.o
CC aarch64-softmmu/hw/timer/omap_gptimer.o
CC arm-softmmu/hw/vfio/spapr.o
CC lm32-softmmu/accel/stubs/hax-stub.o
CC i386-softmmu/hw/misc/ivshmem.o
CC lm32-softmmu/accel/stubs/kvm-stub.o
CC aarch64-softmmu/hw/timer/omap_synctimer.o
CC arm-softmmu/hw/virtio/virtio.o
CC lm32-softmmu/accel/tcg/tcg-all.o
CC aarch64-softmmu/hw/timer/pxa2xx_timer.o
CC lm32-softmmu/accel/tcg/cputlb.o
CC i386-softmmu/hw/misc/pvpanic.o
CC aarch64-softmmu/hw/timer/digic-timer.o
CC i386-softmmu/hw/misc/mmio_interface.o
CC arm-softmmu/hw/virtio/virtio-balloon.o
CC aarch64-softmmu/hw/timer/allwinner-a10-pit.o
CC i386-softmmu/hw/net/virtio-net.o
CC arm-softmmu/hw/virtio/vhost.o
CC aarch64-softmmu/hw/usb/tusb6010.o
CC i386-softmmu/hw/net/vhost_net.o
CC lm32-softmmu/accel/tcg/tcg-runtime.o
CC aarch64-softmmu/hw/vfio/common.o
CC i386-softmmu/hw/scsi/virtio-scsi.o
CC arm-softmmu/hw/virtio/vhost-backend.o
CC lm32-softmmu/accel/tcg/cpu-exec.o
CC arm-softmmu/hw/virtio/vhost-user.o
CC i386-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC aarch64-softmmu/hw/vfio/pci.o
CC lm32-softmmu/accel/tcg/cpu-exec-common.o
CC i386-softmmu/hw/scsi/vhost-scsi-common.o
CC arm-softmmu/hw/virtio/vhost-vsock.o
CC i386-softmmu/hw/scsi/vhost-scsi.o
CC lm32-softmmu/accel/tcg/translate-all.o
CC arm-softmmu/hw/virtio/virtio-crypto.o
CC i386-softmmu/hw/scsi/vhost-user-scsi.o
CC aarch64-softmmu/hw/vfio/pci-quirks.o
CC i386-softmmu/hw/timer/mc146818rtc.o
CC lm32-softmmu/accel/tcg/translator.o
CC arm-softmmu/hw/virtio/virtio-crypto-pci.o
CC i386-softmmu/hw/vfio/common.o
CC lm32-softmmu/hw/core/generic-loader.o
CC aarch64-softmmu/hw/vfio/platform.o
CC arm-softmmu/hw/arm/boot.o
CC lm32-softmmu/hw/core/null-machine.o
CC i386-softmmu/hw/vfio/pci.o
CC aarch64-softmmu/hw/vfio/calxeda-xgmac.o
CC lm32-softmmu/hw/input/milkymist-softusb.o
CC arm-softmmu/hw/arm/collie.o
CC aarch64-softmmu/hw/vfio/amd-xgbe.o
CC arm-softmmu/hw/arm/exynos4_boards.o
CC aarch64-softmmu/hw/vfio/spapr.o
CC lm32-softmmu/hw/misc/milkymist-hpdmc.o
CC arm-softmmu/hw/arm/gumstix.o
CC aarch64-softmmu/hw/virtio/virtio.o
CC i386-softmmu/hw/vfio/pci-quirks.o
CC lm32-softmmu/hw/misc/milkymist-pfpu.o
CC arm-softmmu/hw/arm/highbank.o
CC lm32-softmmu/hw/misc/mmio_interface.o
CC arm-softmmu/hw/arm/digic_boards.o
CC i386-softmmu/hw/vfio/platform.o
CC aarch64-softmmu/hw/virtio/virtio-balloon.o
CC lm32-softmmu/hw/net/milkymist-minimac2.o
CC arm-softmmu/hw/arm/integratorcp.o
CC i386-softmmu/hw/vfio/spapr.o
CC aarch64-softmmu/hw/virtio/vhost.o
CC lm32-softmmu/hw/net/vhost_net.o
CC arm-softmmu/hw/arm/mainstone.o
CC i386-softmmu/hw/virtio/virtio.o
CC lm32-softmmu/hw/net/rocker/qmp-norocker.o
CC arm-softmmu/hw/arm/musicpal.o
CC aarch64-softmmu/hw/virtio/vhost-backend.o
CC lm32-softmmu/hw/sd/milkymist-memcard.o
CC aarch64-softmmu/hw/virtio/vhost-user.o
CC arm-softmmu/hw/arm/nseries.o
CC lm32-softmmu/hw/vfio/common.o
CC i386-softmmu/hw/virtio/virtio-balloon.o
CC i386-softmmu/hw/virtio/vhost.o
CC aarch64-softmmu/hw/virtio/vhost-vsock.o
CC lm32-softmmu/hw/vfio/platform.o
CC arm-softmmu/hw/arm/omap_sx1.o
CC aarch64-softmmu/hw/virtio/virtio-crypto.o
CC lm32-softmmu/hw/vfio/spapr.o
CC i386-softmmu/hw/virtio/vhost-backend.o
CC arm-softmmu/hw/arm/palm.o
CC aarch64-softmmu/hw/virtio/virtio-crypto-pci.o
CC lm32-softmmu/hw/lm32/lm32_boards.o
CC i386-softmmu/hw/virtio/vhost-user.o
CC arm-softmmu/hw/arm/realview.o
CC lm32-softmmu/hw/lm32/milkymist.o
CC aarch64-softmmu/hw/arm/boot.o
CC i386-softmmu/hw/virtio/vhost-vsock.o
CC arm-softmmu/hw/arm/spitz.o
CC lm32-softmmu/target/lm32/translate.o
CC i386-softmmu/hw/virtio/virtio-crypto.o
CC aarch64-softmmu/hw/arm/collie.o
CC arm-softmmu/hw/arm/stellaris.o
CC i386-softmmu/hw/virtio/virtio-crypto-pci.o
CC aarch64-softmmu/hw/arm/exynos4_boards.o
CC lm32-softmmu/target/lm32/op_helper.o
CC aarch64-softmmu/hw/arm/gumstix.o
CC arm-softmmu/hw/arm/tosa.o
CC lm32-softmmu/target/lm32/helper.o
CC i386-softmmu/hw/i386/multiboot.o
CC aarch64-softmmu/hw/arm/highbank.o
CC lm32-softmmu/target/lm32/cpu.o
CC arm-softmmu/hw/arm/versatilepb.o
CC i386-softmmu/hw/i386/pc.o
CC aarch64-softmmu/hw/arm/digic_boards.o
CC lm32-softmmu/target/lm32/gdbstub.o
CC arm-softmmu/hw/arm/vexpress.o
CC lm32-softmmu/target/lm32/lm32-semi.o
CC aarch64-softmmu/hw/arm/integratorcp.o
CC arm-softmmu/hw/arm/virt.o
CC i386-softmmu/hw/i386/pc_piix.o
CC lm32-softmmu/target/lm32/machine.o
CC aarch64-softmmu/hw/arm/mainstone.o
CC arm-softmmu/hw/arm/xilinx_zynq.o
GEN trace/generated-helpers.c
CC lm32-softmmu/trace/control-target.o
CC i386-softmmu/hw/i386/pc_q35.o
CC aarch64-softmmu/hw/arm/musicpal.o
CC arm-softmmu/hw/arm/z2.o
CC lm32-softmmu/trace/generated-helpers.o
CC aarch64-softmmu/hw/arm/nseries.o
CC i386-softmmu/hw/i386/pc_sysfw.o
CC arm-softmmu/hw/arm/virt-acpi-build.o
LINK lm32-softmmu/qemu-system-lm32
CC i386-softmmu/hw/i386/x86-iommu.o
CC aarch64-softmmu/hw/arm/omap_sx1.o
CC arm-softmmu/hw/arm/netduino2.o
CC i386-softmmu/hw/i386/intel_iommu.o
CC arm-softmmu/hw/arm/sysbus-fdt.o
CC aarch64-softmmu/hw/arm/palm.o
CC arm-softmmu/hw/arm/armv7m.o
CC i386-softmmu/hw/i386/amd_iommu.o
CC aarch64-softmmu/hw/arm/realview.o
CC arm-softmmu/hw/arm/exynos4210.o
CC aarch64-softmmu/hw/arm/spitz.o
CC i386-softmmu/hw/i386/kvmvapic.o
GEN m68k-softmmu/hmp-commands.h
CC arm-softmmu/hw/arm/pxa2xx.o
GEN m68k-softmmu/hmp-commands-info.h
GEN m68k-softmmu/config-target.h
CC m68k-softmmu/exec.o
CC i386-softmmu/hw/i386/acpi-build.o
CC aarch64-softmmu/hw/arm/stellaris.o
CC aarch64-softmmu/hw/arm/tosa.o
CC arm-softmmu/hw/arm/pxa2xx_gpio.o
CC i386-softmmu/hw/i386/pci-assign-load-rom.o
CC aarch64-softmmu/hw/arm/versatilepb.o
CC aarch64-softmmu/hw/arm/vexpress.o
CC arm-softmmu/hw/arm/pxa2xx_pic.o
CC i386-softmmu/target/i386/helper.o
CC aarch64-softmmu/hw/arm/virt.o
CC i386-softmmu/target/i386/cpu.o
CC arm-softmmu/hw/arm/digic.o
CC m68k-softmmu/tcg/tcg.o
CC aarch64-softmmu/hw/arm/xilinx_zynq.o
CC arm-softmmu/hw/arm/omap1.o
CC aarch64-softmmu/hw/arm/z2.o
CC i386-softmmu/target/i386/gdbstub.o
CC i386-softmmu/target/i386/xsave_helper.o
CC aarch64-softmmu/hw/arm/virt-acpi-build.o
CC arm-softmmu/hw/arm/omap2.o
CC i386-softmmu/target/i386/translate.o
CC m68k-softmmu/tcg/tcg-op.o
CC aarch64-softmmu/hw/arm/netduino2.o
CC arm-softmmu/hw/arm/strongarm.o
CC aarch64-softmmu/hw/arm/sysbus-fdt.o
CC aarch64-softmmu/hw/arm/armv7m.o
CC arm-softmmu/hw/arm/allwinner-a10.o
CC aarch64-softmmu/hw/arm/exynos4210.o
CC m68k-softmmu/tcg/optimize.o
CC aarch64-softmmu/hw/arm/pxa2xx.o
CC arm-softmmu/hw/arm/cubieboard.o
CC arm-softmmu/hw/arm/bcm2835_peripherals.o
CC m68k-softmmu/tcg/tcg-common.o
CC aarch64-softmmu/hw/arm/pxa2xx_gpio.o
CC m68k-softmmu/fpu/softfloat.o
CC arm-softmmu/hw/arm/bcm2836.o
CC aarch64-softmmu/hw/arm/pxa2xx_pic.o
CC arm-softmmu/hw/arm/raspi.o
CC aarch64-softmmu/hw/arm/digic.o
CC aarch64-softmmu/hw/arm/omap1.o
CC arm-softmmu/hw/arm/stm32f205_soc.o
CC arm-softmmu/hw/arm/fsl-imx25.o
CC i386-softmmu/target/i386/bpt_helper.o
CC m68k-softmmu/disas.o
CC aarch64-softmmu/hw/arm/omap2.o
CC i386-softmmu/target/i386/cc_helper.o
CC arm-softmmu/hw/arm/imx25_pdk.o
CC i386-softmmu/target/i386/excp_helper.o
GEN m68k-softmmu/gdbstub-xml.c
CC arm-softmmu/hw/arm/fsl-imx31.o
CC i386-softmmu/target/i386/fpu_helper.o
CC m68k-softmmu/arch_init.o
CC aarch64-softmmu/hw/arm/strongarm.o
CC arm-softmmu/hw/arm/kzm.o
CC m68k-softmmu/cpus.o
CC aarch64-softmmu/hw/arm/allwinner-a10.o
CC arm-softmmu/hw/arm/fsl-imx6.o
CC aarch64-softmmu/hw/arm/cubieboard.o
CC m68k-softmmu/monitor.o
CC aarch64-softmmu/hw/arm/bcm2835_peripherals.o
CC arm-softmmu/hw/arm/sabrelite.o
CC aarch64-softmmu/hw/arm/bcm2836.o
CC arm-softmmu/hw/arm/aspeed_soc.o
CC i386-softmmu/target/i386/int_helper.o
CC aarch64-softmmu/hw/arm/raspi.o
CC m68k-softmmu/gdbstub.o
CC arm-softmmu/hw/arm/aspeed.o
CC i386-softmmu/target/i386/mem_helper.o
CC arm-softmmu/hw/arm/mps2.o
CC aarch64-softmmu/hw/arm/stm32f205_soc.o
CC m68k-softmmu/balloon.o
CC arm-softmmu/hw/arm/msf2-soc.o
CC i386-softmmu/target/i386/misc_helper.o
CC aarch64-softmmu/hw/arm/xlnx-zynqmp.o
CC m68k-softmmu/ioport.o
CC aarch64-softmmu/hw/arm/xlnx-zcu102.o
CC arm-softmmu/hw/arm/msf2-som.o
CC i386-softmmu/target/i386/mpx_helper.o
CC m68k-softmmu/numa.o
CC aarch64-softmmu/hw/arm/fsl-imx25.o
CC arm-softmmu/target/arm/arm-semi.o
CC i386-softmmu/target/i386/seg_helper.o
CC m68k-softmmu/qtest.o
CC aarch64-softmmu/hw/arm/imx25_pdk.o
CC arm-softmmu/target/arm/machine.o
CC aarch64-softmmu/hw/arm/fsl-imx31.o
CC arm-softmmu/target/arm/psci.o
CC m68k-softmmu/memory.o
CC aarch64-softmmu/hw/arm/kzm.o
CC arm-softmmu/target/arm/arch_dump.o
CC aarch64-softmmu/hw/arm/fsl-imx6.o
CC aarch64-softmmu/hw/arm/sabrelite.o
CC arm-softmmu/target/arm/monitor.o
CC i386-softmmu/target/i386/smm_helper.o
CC aarch64-softmmu/hw/arm/aspeed_soc.o
CC arm-softmmu/target/arm/kvm-stub.o
CC m68k-softmmu/memory_mapping.o
CC m68k-softmmu/dump.o
CC i386-softmmu/target/i386/svm_helper.o
CC aarch64-softmmu/hw/arm/aspeed.o
CC arm-softmmu/target/arm/translate.o
CC aarch64-softmmu/hw/arm/mps2.o
CC m68k-softmmu/migration/ram.o
CC i386-softmmu/target/i386/machine.o
CC aarch64-softmmu/hw/arm/msf2-soc.o
CC i386-softmmu/target/i386/arch_memory_mapping.o
CC aarch64-softmmu/hw/arm/msf2-som.o
CC m68k-softmmu/accel/accel.o
CC i386-softmmu/target/i386/arch_dump.o
CC aarch64-softmmu/target/arm/arm-semi.o
CC m68k-softmmu/accel/stubs/hax-stub.o
CC i386-softmmu/target/i386/monitor.o
CC m68k-softmmu/accel/stubs/kvm-stub.o
CC aarch64-softmmu/target/arm/machine.o
CC i386-softmmu/target/i386/kvm-stub.o
CC m68k-softmmu/accel/tcg/tcg-all.o
CC aarch64-softmmu/target/arm/psci.o
GEN trace/generated-helpers.c
CC m68k-softmmu/accel/tcg/cputlb.o
CC i386-softmmu/trace/control-target.o
CC aarch64-softmmu/target/arm/arch_dump.o
CC i386-softmmu/gdbstub-xml.o
CC aarch64-softmmu/target/arm/monitor.o
CC i386-softmmu/trace/generated-helpers.o
CC aarch64-softmmu/target/arm/kvm-stub.o
LINK i386-softmmu/qemu-system-i386
CC aarch64-softmmu/target/arm/translate.o
CC m68k-softmmu/accel/tcg/tcg-runtime.o
CC arm-softmmu/target/arm/op_helper.o
CC m68k-softmmu/accel/tcg/cpu-exec.o
CC m68k-softmmu/accel/tcg/cpu-exec-common.o
CC arm-softmmu/target/arm/helper.o
CC m68k-softmmu/accel/tcg/translate-all.o
CC arm-softmmu/target/arm/cpu.o
CC m68k-softmmu/accel/tcg/translator.o
CC m68k-softmmu/hw/char/mcf_uart.o
CC m68k-softmmu/hw/core/generic-loader.o
GEN microblazeel-softmmu/hmp-commands.h
GEN microblazeel-softmmu/hmp-commands-info.h
GEN microblazeel-softmmu/config-target.h
CC m68k-softmmu/hw/core/null-machine.o
CC microblazeel-softmmu/exec.o
CC m68k-softmmu/hw/misc/mmio_interface.o
CC arm-softmmu/target/arm/neon_helper.o
CC m68k-softmmu/hw/net/mcf_fec.o
CC m68k-softmmu/hw/net/vhost_net.o
CC aarch64-softmmu/target/arm/op_helper.o
CC m68k-softmmu/hw/net/rocker/qmp-norocker.o
CC arm-softmmu/target/arm/iwmmxt_helper.o
CC m68k-softmmu/hw/vfio/common.o
CC microblazeel-softmmu/tcg/tcg.o
CC arm-softmmu/target/arm/gdbstub.o
CC m68k-softmmu/hw/vfio/platform.o
CC aarch64-softmmu/target/arm/helper.o
CC m68k-softmmu/hw/vfio/spapr.o
CC arm-softmmu/target/arm/crypto_helper.o
CC microblazeel-softmmu/tcg/tcg-op.o
CC m68k-softmmu/hw/m68k/an5206.o
CC arm-softmmu/target/arm/arm-powerctl.o
CC m68k-softmmu/hw/m68k/mcf5208.o
GEN trace/generated-helpers.c
CC arm-softmmu/trace/control-target.o
CC m68k-softmmu/hw/m68k/mcf5206.o
CC arm-softmmu/gdbstub-xml.o
CC microblazeel-softmmu/tcg/optimize.o
CC m68k-softmmu/hw/m68k/mcf_intc.o
CC arm-softmmu/trace/generated-helpers.o
CC m68k-softmmu/target/m68k/m68k-semi.o
CC microblazeel-softmmu/tcg/tcg-common.o
CC aarch64-softmmu/target/arm/cpu.o
LINK arm-softmmu/qemu-system-arm
CC m68k-softmmu/target/m68k/translate.o
CC microblazeel-softmmu/fpu/softfloat.o
CC aarch64-softmmu/target/arm/neon_helper.o
CC aarch64-softmmu/target/arm/iwmmxt_helper.o
CC m68k-softmmu/target/m68k/op_helper.o
CC aarch64-softmmu/target/arm/gdbstub.o
CC aarch64-softmmu/target/arm/cpu64.o
CC m68k-softmmu/target/m68k/helper.o
CC aarch64-softmmu/target/arm/translate-a64.o
CC microblazeel-softmmu/disas.o
CC m68k-softmmu/target/m68k/cpu.o
CC microblazeel-softmmu/arch_init.o
CC m68k-softmmu/target/m68k/fpu_helper.o
CC microblazeel-softmmu/cpus.o
CC m68k-softmmu/target/m68k/gdbstub.o
GEN microblaze-softmmu/hmp-commands.h
GEN microblaze-softmmu/hmp-commands-info.h
CC microblazeel-softmmu/monitor.o
GEN microblaze-softmmu/config-target.h
GEN trace/generated-helpers.c
CC m68k-softmmu/trace/control-target.o
CC microblaze-softmmu/exec.o
CC m68k-softmmu/gdbstub-xml.o
CC m68k-softmmu/trace/generated-helpers.o
CC microblazeel-softmmu/gdbstub.o
LINK m68k-softmmu/qemu-system-m68k
CC microblaze-softmmu/tcg/tcg.o
CC microblazeel-softmmu/balloon.o
CC microblazeel-softmmu/ioport.o
CC aarch64-softmmu/target/arm/helper-a64.o
CC microblazeel-softmmu/numa.o
CC aarch64-softmmu/target/arm/gdbstub64.o
CC microblaze-softmmu/tcg/tcg-op.o
CC aarch64-softmmu/target/arm/crypto_helper.o
CC microblazeel-softmmu/qtest.o
CC aarch64-softmmu/target/arm/arm-powerctl.o
GEN mips64el-softmmu/hmp-commands.h
GEN mips64el-softmmu/hmp-commands-info.h
CC microblazeel-softmmu/memory.o
GEN mips64el-softmmu/config-target.h
GEN trace/generated-helpers.c
CC aarch64-softmmu/trace/control-target.o
CC mips64el-softmmu/exec.o
CC aarch64-softmmu/gdbstub-xml.o
CC microblaze-softmmu/tcg/optimize.o
CC aarch64-softmmu/trace/generated-helpers.o
CC microblazeel-softmmu/memory_mapping.o
LINK aarch64-softmmu/qemu-system-aarch64
CC microblazeel-softmmu/dump.o
CC microblaze-softmmu/tcg/tcg-common.o
CC mips64el-softmmu/tcg/tcg.o
CC microblaze-softmmu/fpu/softfloat.o
CC microblazeel-softmmu/migration/ram.o
CC microblazeel-softmmu/accel/accel.o
CC microblazeel-softmmu/accel/stubs/hax-stub.o
CC mips64el-softmmu/tcg/tcg-op.o
CC microblazeel-softmmu/accel/stubs/kvm-stub.o
CC microblazeel-softmmu/accel/tcg/tcg-all.o
CC microblaze-softmmu/disas.o
CC microblazeel-softmmu/accel/tcg/cputlb.o
CC microblaze-softmmu/arch_init.o
GEN mips64-softmmu/hmp-commands.h
GEN mips64-softmmu/hmp-commands-info.h
GEN mips64-softmmu/config-target.h
CC mips64-softmmu/exec.o
CC microblaze-softmmu/cpus.o
CC mips64el-softmmu/tcg/optimize.o
CC microblazeel-softmmu/accel/tcg/tcg-runtime.o
CC microblaze-softmmu/monitor.o
CC microblazeel-softmmu/accel/tcg/cpu-exec.o
CC mips64-softmmu/tcg/tcg.o
CC mips64el-softmmu/tcg/tcg-common.o
CC mips64el-softmmu/fpu/softfloat.o
CC microblazeel-softmmu/accel/tcg/cpu-exec-common.o
CC microblaze-softmmu/gdbstub.o
CC microblazeel-softmmu/accel/tcg/translate-all.o
CC microblazeel-softmmu/accel/tcg/translator.o
CC microblaze-softmmu/balloon.o
CC mips64-softmmu/tcg/tcg-op.o
CC microblazeel-softmmu/hw/core/generic-loader.o
CC microblaze-softmmu/ioport.o
CC microblazeel-softmmu/hw/core/null-machine.o
CC microblaze-softmmu/numa.o
CC mips64el-softmmu/disas.o
CC microblazeel-softmmu/hw/misc/mmio_interface.o
CC mips64el-softmmu/arch_init.o
CC microblaze-softmmu/qtest.o
CC microblazeel-softmmu/hw/net/xilinx_ethlite.o
CC mips64el-softmmu/cpus.o
CC microblazeel-softmmu/hw/net/vhost_net.o
CC mips64-softmmu/tcg/optimize.o
CC microblaze-softmmu/memory.o
CC microblazeel-softmmu/hw/net/rocker/qmp-norocker.o
CC mips64el-softmmu/monitor.o
CC microblazeel-softmmu/hw/vfio/common.o
CC microblaze-softmmu/memory_mapping.o
CC mips64-softmmu/tcg/tcg-common.o
CC mips64el-softmmu/gdbstub.o
CC microblazeel-softmmu/hw/vfio/platform.o
CC microblaze-softmmu/dump.o
CC mips64-softmmu/fpu/softfloat.o
CC microblazeel-softmmu/hw/vfio/spapr.o
CC mips64el-softmmu/balloon.o
CC mips64el-softmmu/ioport.o
CC microblaze-softmmu/migration/ram.o
CC microblazeel-softmmu/hw/microblaze/petalogix_s3adsp1800_mmu.o
CC mips64el-softmmu/numa.o
CC microblazeel-softmmu/hw/microblaze/petalogix_ml605_mmu.o
CC microblazeel-softmmu/hw/microblaze/boot.o
CC mips64el-softmmu/qtest.o
CC microblaze-softmmu/accel/accel.o
CC microblaze-softmmu/accel/stubs/hax-stub.o
CC microblazeel-softmmu/target/microblaze/translate.o
CC microblaze-softmmu/accel/stubs/kvm-stub.o
CC mips64el-softmmu/memory.o
CC mips64-softmmu/disas.o
CC microblaze-softmmu/accel/tcg/tcg-all.o
CC microblaze-softmmu/accel/tcg/cputlb.o
CC mips64-softmmu/arch_init.o
CC microblazeel-softmmu/target/microblaze/op_helper.o
CC mips64-softmmu/cpus.o
CC mips64el-softmmu/memory_mapping.o
CC mips64el-softmmu/dump.o
CC microblazeel-softmmu/target/microblaze/helper.o
CC mips64-softmmu/monitor.o
CC microblazeel-softmmu/target/microblaze/cpu.o
CC microblaze-softmmu/accel/tcg/tcg-runtime.o
CC mips64el-softmmu/migration/ram.o
CC microblazeel-softmmu/target/microblaze/gdbstub.o
CC microblaze-softmmu/accel/tcg/cpu-exec.o
CC microblazeel-softmmu/target/microblaze/mmu.o
CC mips64-softmmu/gdbstub.o
CC microblaze-softmmu/accel/tcg/cpu-exec-common.o
CC mips64el-softmmu/accel/accel.o
GEN trace/generated-helpers.c
CC microblazeel-softmmu/trace/control-target.o
CC microblaze-softmmu/accel/tcg/translate-all.o
CC mips64-softmmu/balloon.o
CC mips64el-softmmu/accel/stubs/hax-stub.o
CC microblazeel-softmmu/trace/generated-helpers.o
CC mips64el-softmmu/accel/stubs/kvm-stub.o
CC mips64-softmmu/ioport.o
CC microblaze-softmmu/accel/tcg/translator.o
LINK microblazeel-softmmu/qemu-system-microblazeel
CC mips64el-softmmu/accel/tcg/tcg-all.o
CC microblaze-softmmu/hw/core/generic-loader.o
CC mips64-softmmu/numa.o
CC mips64el-softmmu/accel/tcg/cputlb.o
CC microblaze-softmmu/hw/core/null-machine.o
CC mips64-softmmu/qtest.o
CC microblaze-softmmu/hw/misc/mmio_interface.o
CC mips64-softmmu/memory.o
CC microblaze-softmmu/hw/net/xilinx_ethlite.o
CC mips64el-softmmu/accel/tcg/tcg-runtime.o
CC microblaze-softmmu/hw/net/vhost_net.o
CC mips64-softmmu/memory_mapping.o
CC mips64el-softmmu/accel/tcg/cpu-exec.o
CC mips64el-softmmu/accel/tcg/cpu-exec-common.o
CC microblaze-softmmu/hw/net/rocker/qmp-norocker.o
CC mips64el-softmmu/accel/tcg/translate-all.o
CC mips64-softmmu/dump.o
CC microblaze-softmmu/hw/vfio/common.o
GEN mipsel-softmmu/hmp-commands.h
GEN mipsel-softmmu/hmp-commands-info.h
GEN mipsel-softmmu/config-target.h
CC mipsel-softmmu/exec.o
CC mips64-softmmu/migration/ram.o
CC mips64el-softmmu/accel/tcg/translator.o
CC microblaze-softmmu/hw/vfio/platform.o
CC mips64-softmmu/accel/accel.o
CC mips64el-softmmu/hw/9pfs/virtio-9p-device.o
CC microblaze-softmmu/hw/vfio/spapr.o
CC mips64-softmmu/accel/stubs/hax-stub.o
CC mips64el-softmmu/hw/block/virtio-blk.o
CC mipsel-softmmu/tcg/tcg.o
CC microblaze-softmmu/hw/microblaze/petalogix_s3adsp1800_mmu.o
CC mips64-softmmu/accel/stubs/kvm-stub.o
CC microblaze-softmmu/hw/microblaze/petalogix_ml605_mmu.o
CC mips64-softmmu/accel/tcg/tcg-all.o
CC mips64el-softmmu/hw/block/dataplane/virtio-blk.o
CC microblaze-softmmu/hw/microblaze/boot.o
CC mips64-softmmu/accel/tcg/cputlb.o
CC mips64el-softmmu/hw/char/virtio-serial-bus.o
CC microblaze-softmmu/target/microblaze/translate.o
CC mips64el-softmmu/hw/core/generic-loader.o
CC mipsel-softmmu/tcg/tcg-op.o
CC mips64-softmmu/accel/tcg/tcg-runtime.o
CC mips64el-softmmu/hw/core/null-machine.o
CC mips64el-softmmu/hw/display/vga.o
CC mips64-softmmu/accel/tcg/cpu-exec.o
CC microblaze-softmmu/target/microblaze/op_helper.o
CC microblaze-softmmu/target/microblaze/helper.o
CC mips64-softmmu/accel/tcg/cpu-exec-common.o
CC mips64el-softmmu/hw/display/virtio-gpu.o
CC microblaze-softmmu/target/microblaze/cpu.o
CC mips64-softmmu/accel/tcg/translate-all.o
CC mipsel-softmmu/tcg/optimize.o
CC microblaze-softmmu/target/microblaze/gdbstub.o
CC mips64el-softmmu/hw/display/virtio-gpu-3d.o
CC mips64-softmmu/accel/tcg/translator.o
CC microblaze-softmmu/target/microblaze/mmu.o
CC mips64el-softmmu/hw/display/virtio-gpu-pci.o
GEN trace/generated-helpers.c
CC microblaze-softmmu/trace/control-target.o
CC mipsel-softmmu/tcg/tcg-common.o
CC mips64el-softmmu/hw/intc/mips_gic.o
CC microblaze-softmmu/trace/generated-helpers.o
CC mipsel-softmmu/fpu/softfloat.o
CC mips64-softmmu/hw/9pfs/virtio-9p-device.o
CC mips64el-softmmu/hw/misc/ivshmem.o
LINK microblaze-softmmu/qemu-system-microblaze
CC mips64-softmmu/hw/block/virtio-blk.o
CC mips64el-softmmu/hw/misc/mips_cmgcr.o
CC mips64-softmmu/hw/block/dataplane/virtio-blk.o
CC mips64el-softmmu/hw/misc/mips_cpc.o
CC mips64-softmmu/hw/char/virtio-serial-bus.o
CC mips64el-softmmu/hw/misc/mips_itu.o
CC mips64-softmmu/hw/core/generic-loader.o
CC mips64el-softmmu/hw/misc/mmio_interface.o
CC mips64-softmmu/hw/core/null-machine.o
GEN mips-softmmu/hmp-commands.h
CC mips64el-softmmu/hw/net/virtio-net.o
CC mipsel-softmmu/disas.o
GEN mips-softmmu/hmp-commands-info.h
GEN mips-softmmu/config-target.h
CC mips-softmmu/exec.o
CC mips64-softmmu/hw/display/vga.o
CC mipsel-softmmu/arch_init.o
CC mips64el-softmmu/hw/net/vhost_net.o
CC mipsel-softmmu/cpus.o
CC mips64el-softmmu/hw/scsi/virtio-scsi.o
CC mips64-softmmu/hw/display/virtio-gpu.o
CC mipsel-softmmu/monitor.o
CC mips64el-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC mips64el-softmmu/hw/scsi/vhost-scsi-common.o
CC mips-softmmu/tcg/tcg.o
CC mips64el-softmmu/hw/scsi/vhost-scsi.o
CC mips64-softmmu/hw/display/virtio-gpu-3d.o
CC mips64el-softmmu/hw/scsi/vhost-user-scsi.o
CC mipsel-softmmu/gdbstub.o
CC mips64-softmmu/hw/display/virtio-gpu-pci.o
CC mips64el-softmmu/hw/timer/mips_gictimer.o
CC mips64-softmmu/hw/intc/mips_gic.o
CC mips64el-softmmu/hw/timer/mc146818rtc.o
CC mipsel-softmmu/balloon.o
CC mips64-softmmu/hw/misc/ivshmem.o
CC mips64el-softmmu/hw/vfio/common.o
CC mipsel-softmmu/ioport.o
CC mips-softmmu/tcg/tcg-op.o
CC mips64-softmmu/hw/misc/mips_cmgcr.o
CC mipsel-softmmu/numa.o
CC mips64el-softmmu/hw/vfio/pci.o
CC mipsel-softmmu/qtest.o
CC mips64-softmmu/hw/misc/mips_cpc.o
CC mips64-softmmu/hw/misc/mips_itu.o
CC mips64el-softmmu/hw/vfio/pci-quirks.o
CC mipsel-softmmu/memory.o
CC mips64-softmmu/hw/misc/mmio_interface.o
CC mips-softmmu/tcg/optimize.o
CC mips64el-softmmu/hw/vfio/platform.o
CC mips64-softmmu/hw/net/virtio-net.o
CC mipsel-softmmu/memory_mapping.o
CC mips64el-softmmu/hw/vfio/spapr.o
CC mips64-softmmu/hw/net/vhost_net.o
CC mipsel-softmmu/dump.o
CC mips-softmmu/tcg/tcg-common.o
CC mips64-softmmu/hw/scsi/virtio-scsi.o
CC mips64el-softmmu/hw/virtio/virtio.o
CC mipsel-softmmu/migration/ram.o
CC mips-softmmu/fpu/softfloat.o
CC mips64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC mips64el-softmmu/hw/virtio/virtio-balloon.o
CC mips64-softmmu/hw/scsi/vhost-scsi-common.o
CC mipsel-softmmu/accel/accel.o
CC mips64el-softmmu/hw/virtio/vhost.o
CC mipsel-softmmu/accel/stubs/hax-stub.o
CC mips64-softmmu/hw/scsi/vhost-scsi.o
CC mipsel-softmmu/accel/stubs/kvm-stub.o
CC mips64-softmmu/hw/scsi/vhost-user-scsi.o
CC mips64el-softmmu/hw/virtio/vhost-backend.o
CC mipsel-softmmu/accel/tcg/tcg-all.o
CC mips64el-softmmu/hw/virtio/vhost-user.o
CC mips64-softmmu/hw/timer/mips_gictimer.o
CC mipsel-softmmu/accel/tcg/cputlb.o
CC mips64el-softmmu/hw/virtio/vhost-vsock.o
CC mips64-softmmu/hw/timer/mc146818rtc.o
CC mips-softmmu/disas.o
CC mips64el-softmmu/hw/virtio/virtio-crypto.o
CC mips64-softmmu/hw/vfio/common.o
CC mips64el-softmmu/hw/virtio/virtio-crypto-pci.o
CC mips-softmmu/arch_init.o
CC mips64-softmmu/hw/vfio/pci.o
CC mips64el-softmmu/hw/mips/mips_r4k.o
CC mipsel-softmmu/accel/tcg/tcg-runtime.o
CC mips-softmmu/cpus.o
CC mips64el-softmmu/hw/mips/mips_malta.o
CC mipsel-softmmu/accel/tcg/cpu-exec.o
CC mips64-softmmu/hw/vfio/pci-quirks.o
CC mips-softmmu/monitor.o
CC mips64el-softmmu/hw/mips/mips_mipssim.o
CC mipsel-softmmu/accel/tcg/cpu-exec-common.o
CC mipsel-softmmu/accel/tcg/translate-all.o
CC mips64-softmmu/hw/vfio/platform.o
CC mips64el-softmmu/hw/mips/addr.o
CC mipsel-softmmu/accel/tcg/translator.o
CC mips64-softmmu/hw/vfio/spapr.o
CC mips64el-softmmu/hw/mips/mips_int.o
CC mips-softmmu/gdbstub.o
CC mips64-softmmu/hw/virtio/virtio.o
CC mips64el-softmmu/hw/mips/mips_jazz.o
CC mips-softmmu/balloon.o
CC mipsel-softmmu/hw/9pfs/virtio-9p-device.o
CC mips64el-softmmu/hw/mips/mips_fulong2e.o
CC mips-softmmu/ioport.o
CC mipsel-softmmu/hw/block/virtio-blk.o
CC mips64el-softmmu/hw/mips/gt64xxx_pci.o
CC mips64-softmmu/hw/virtio/virtio-balloon.o
CC mips-softmmu/numa.o
CC mips64el-softmmu/hw/mips/cps.o
CC mipsel-softmmu/hw/block/dataplane/virtio-blk.o
CC mips64-softmmu/hw/virtio/vhost.o
CC mipsel-softmmu/hw/char/virtio-serial-bus.o
CC mips-softmmu/qtest.o
CC mips64el-softmmu/hw/mips/boston.o
CC mips-softmmu/memory.o
CC mips64el-softmmu/target/mips/translate.o
CC mipsel-softmmu/hw/core/generic-loader.o
CC mips64-softmmu/hw/virtio/vhost-backend.o
CC mipsel-softmmu/hw/core/null-machine.o
CC mips64-softmmu/hw/virtio/vhost-user.o
CC mipsel-softmmu/hw/display/vga.o
CC mips-softmmu/memory_mapping.o
CC mips64-softmmu/hw/virtio/vhost-vsock.o
CC mips-softmmu/dump.o
CC mips64-softmmu/hw/virtio/virtio-crypto.o
CC mipsel-softmmu/hw/display/virtio-gpu.o
CC mips64-softmmu/hw/virtio/virtio-crypto-pci.o
CC mips-softmmu/migration/ram.o
CC mips64-softmmu/hw/mips/mips_r4k.o
CC mipsel-softmmu/hw/display/virtio-gpu-3d.o
CC mips64-softmmu/hw/mips/mips_malta.o
CC mips-softmmu/accel/accel.o
CC mipsel-softmmu/hw/display/virtio-gpu-pci.o
CC mips-softmmu/accel/stubs/hax-stub.o
CC mips64-softmmu/hw/mips/mips_mipssim.o
CC mips-softmmu/accel/stubs/kvm-stub.o
CC mips-softmmu/accel/tcg/tcg-all.o
CC mipsel-softmmu/hw/intc/mips_gic.o
CC mips64-softmmu/hw/mips/addr.o
CC mips-softmmu/accel/tcg/cputlb.o
CC mipsel-softmmu/hw/misc/ivshmem.o
CC mips64-softmmu/hw/mips/mips_int.o
CC mips64-softmmu/hw/mips/mips_jazz.o
CC mipsel-softmmu/hw/misc/mips_cmgcr.o
CC mips64-softmmu/hw/mips/gt64xxx_pci.o
CC mips-softmmu/accel/tcg/tcg-runtime.o
CC mipsel-softmmu/hw/misc/mips_cpc.o
CC mips64-softmmu/hw/mips/cps.o
CC mips-softmmu/accel/tcg/cpu-exec.o
CC mipsel-softmmu/hw/misc/mips_itu.o
CC mips64-softmmu/target/mips/translate.o
CC mips-softmmu/accel/tcg/cpu-exec-common.o
CC mipsel-softmmu/hw/misc/mmio_interface.o
CC mips-softmmu/accel/tcg/translate-all.o
CC mipsel-softmmu/hw/net/virtio-net.o
CC mips-softmmu/accel/tcg/translator.o
CC mipsel-softmmu/hw/net/vhost_net.o
CC mipsel-softmmu/hw/scsi/virtio-scsi.o
CC mips-softmmu/hw/9pfs/virtio-9p-device.o
CC mips64el-softmmu/target/mips/dsp_helper.o
CC mipsel-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC mips-softmmu/hw/block/virtio-blk.o
CC mipsel-softmmu/hw/scsi/vhost-scsi-common.o
CC mips-softmmu/hw/block/dataplane/virtio-blk.o
CC mipsel-softmmu/hw/scsi/vhost-scsi.o
CC mips-softmmu/hw/char/virtio-serial-bus.o
CC mips64el-softmmu/target/mips/op_helper.o
CC mipsel-softmmu/hw/scsi/vhost-user-scsi.o
CC mips-softmmu/hw/core/generic-loader.o
CC mipsel-softmmu/hw/timer/mips_gictimer.o
CC mips-softmmu/hw/core/null-machine.o
CC mips-softmmu/hw/display/vga.o
CC mipsel-softmmu/hw/timer/mc146818rtc.o
CC mipsel-softmmu/hw/vfio/common.o
CC mips64el-softmmu/target/mips/lmi_helper.o
CC mips-softmmu/hw/display/virtio-gpu.o
CC mipsel-softmmu/hw/vfio/pci.o
CC mips64el-softmmu/target/mips/helper.o
CC mips-softmmu/hw/display/virtio-gpu-3d.o
CC mipsel-softmmu/hw/vfio/pci-quirks.o
CC mips64el-softmmu/target/mips/cpu.o
CC mips-softmmu/hw/display/virtio-gpu-pci.o
CC mips64el-softmmu/target/mips/gdbstub.o
CC mipsel-softmmu/hw/vfio/platform.o
CC mips64el-softmmu/target/mips/msa_helper.o
CC mips-softmmu/hw/intc/mips_gic.o
CC mipsel-softmmu/hw/vfio/spapr.o
CC mips-softmmu/hw/misc/ivshmem.o
CC mips64-softmmu/target/mips/dsp_helper.o
CC mipsel-softmmu/hw/virtio/virtio.o
CC mips-softmmu/hw/misc/mips_cmgcr.o
CC mips-softmmu/hw/misc/mips_cpc.o
CC mips64-softmmu/target/mips/op_helper.o
CC mipsel-softmmu/hw/virtio/virtio-balloon.o
CC mips-softmmu/hw/misc/mips_itu.o
CC mipsel-softmmu/hw/virtio/vhost.o
CC mips-softmmu/hw/misc/mmio_interface.o
CC mips64el-softmmu/target/mips/mips-semi.o
CC mipsel-softmmu/hw/virtio/vhost-backend.o
CC mips-softmmu/hw/net/virtio-net.o
CC mips64el-softmmu/target/mips/machine.o
CC mipsel-softmmu/hw/virtio/vhost-user.o
CC mips64el-softmmu/target/mips/cp0_timer.o
CC mips-softmmu/hw/net/vhost_net.o
CC mipsel-softmmu/hw/virtio/vhost-vsock.o
GEN trace/generated-helpers.c
CC mips64el-softmmu/trace/control-target.o
CC mips-softmmu/hw/scsi/virtio-scsi.o
CC mips64-softmmu/target/mips/lmi_helper.o
CC mipsel-softmmu/hw/virtio/virtio-crypto.o
CC mips64el-softmmu/trace/generated-helpers.o
CC mips64-softmmu/target/mips/helper.o
CC mips-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC mipsel-softmmu/hw/virtio/virtio-crypto-pci.o
CC mips-softmmu/hw/scsi/vhost-scsi-common.o
LINK mips64el-softmmu/qemu-system-mips64el
CC mips64-softmmu/target/mips/cpu.o
CC mipsel-softmmu/hw/mips/mips_r4k.o
CC mips-softmmu/hw/scsi/vhost-scsi.o
CC mipsel-softmmu/hw/mips/mips_malta.o
CC mips-softmmu/hw/scsi/vhost-user-scsi.o
CC mips64-softmmu/target/mips/gdbstub.o
CC mips-softmmu/hw/timer/mips_gictimer.o
CC mipsel-softmmu/hw/mips/mips_mipssim.o
CC mips64-softmmu/target/mips/msa_helper.o
CC mips-softmmu/hw/timer/mc146818rtc.o
CC mipsel-softmmu/hw/mips/addr.o
CC mips-softmmu/hw/vfio/common.o
CC mipsel-softmmu/hw/mips/mips_int.o
CC mipsel-softmmu/hw/mips/gt64xxx_pci.o
GEN moxie-softmmu/hmp-commands.h
GEN moxie-softmmu/hmp-commands-info.h
GEN moxie-softmmu/config-target.h
CC moxie-softmmu/exec.o
CC mips-softmmu/hw/vfio/pci.o
CC mipsel-softmmu/hw/mips/cps.o
CC mipsel-softmmu/target/mips/translate.o
CC mips-softmmu/hw/vfio/pci-quirks.o
CC moxie-softmmu/tcg/tcg.o
CC mips-softmmu/hw/vfio/platform.o
CC mips64-softmmu/target/mips/mips-semi.o
CC mips64-softmmu/target/mips/machine.o
CC mips-softmmu/hw/vfio/spapr.o
CC mips64-softmmu/target/mips/cp0_timer.o
CC mips-softmmu/hw/virtio/virtio.o
GEN trace/generated-helpers.c
CC mips64-softmmu/trace/control-target.o
CC moxie-softmmu/tcg/tcg-op.o
CC mips64-softmmu/trace/generated-helpers.o
CC mips-softmmu/hw/virtio/virtio-balloon.o
LINK mips64-softmmu/qemu-system-mips64
CC mips-softmmu/hw/virtio/vhost.o
CC moxie-softmmu/tcg/optimize.o
CC mips-softmmu/hw/virtio/vhost-backend.o
CC moxie-softmmu/tcg/tcg-common.o
CC mips-softmmu/hw/virtio/vhost-user.o
CC moxie-softmmu/fpu/softfloat.o
CC mipsel-softmmu/target/mips/dsp_helper.o
CC mips-softmmu/hw/virtio/vhost-vsock.o
CC mips-softmmu/hw/virtio/virtio-crypto.o
CC mips-softmmu/hw/virtio/virtio-crypto-pci.o
GEN nios2-softmmu/hmp-commands.h
GEN nios2-softmmu/hmp-commands-info.h
GEN nios2-softmmu/config-target.h
CC nios2-softmmu/exec.o
CC mipsel-softmmu/target/mips/op_helper.o
CC mips-softmmu/hw/mips/mips_r4k.o
CC mips-softmmu/hw/mips/mips_malta.o
CC moxie-softmmu/disas.o
CC mips-softmmu/hw/mips/mips_mipssim.o
CC moxie-softmmu/arch_init.o
CC nios2-softmmu/tcg/tcg.o
CC mips-softmmu/hw/mips/addr.o
CC moxie-softmmu/cpus.o
CC mips-softmmu/hw/mips/mips_int.o
CC mipsel-softmmu/target/mips/lmi_helper.o
CC mips-softmmu/hw/mips/gt64xxx_pci.o
CC moxie-softmmu/monitor.o
CC mips-softmmu/hw/mips/cps.o
CC mipsel-softmmu/target/mips/helper.o
CC mips-softmmu/target/mips/translate.o
CC nios2-softmmu/tcg/tcg-op.o
CC mipsel-softmmu/target/mips/cpu.o
CC mipsel-softmmu/target/mips/gdbstub.o
CC moxie-softmmu/gdbstub.o
CC mipsel-softmmu/target/mips/msa_helper.o
CC moxie-softmmu/balloon.o
CC nios2-softmmu/tcg/optimize.o
CC moxie-softmmu/ioport.o
CC moxie-softmmu/numa.o
CC nios2-softmmu/tcg/tcg-common.o
CC nios2-softmmu/fpu/softfloat.o
CC moxie-softmmu/qtest.o
CC moxie-softmmu/memory.o
CC mipsel-softmmu/target/mips/mips-semi.o
CC mipsel-softmmu/target/mips/machine.o
CC mipsel-softmmu/target/mips/cp0_timer.o
CC moxie-softmmu/memory_mapping.o
CC nios2-softmmu/disas.o
GEN trace/generated-helpers.c
CC mipsel-softmmu/trace/control-target.o
CC moxie-softmmu/dump.o
CC nios2-softmmu/arch_init.o
CC nios2-softmmu/cpus.o
CC mipsel-softmmu/trace/generated-helpers.o
CC moxie-softmmu/migration/ram.o
LINK mipsel-softmmu/qemu-system-mipsel
CC nios2-softmmu/monitor.o
CC mips-softmmu/target/mips/dsp_helper.o
CC moxie-softmmu/accel/accel.o
CC mips-softmmu/target/mips/op_helper.o
CC moxie-softmmu/accel/stubs/hax-stub.o
CC moxie-softmmu/accel/stubs/kvm-stub.o
CC nios2-softmmu/gdbstub.o
CC moxie-softmmu/accel/tcg/tcg-all.o
CC moxie-softmmu/accel/tcg/cputlb.o
GEN or1k-softmmu/hmp-commands.h
CC nios2-softmmu/balloon.o
GEN or1k-softmmu/hmp-commands-info.h
GEN or1k-softmmu/config-target.h
CC or1k-softmmu/exec.o
CC nios2-softmmu/ioport.o
CC nios2-softmmu/numa.o
CC moxie-softmmu/accel/tcg/tcg-runtime.o
CC mips-softmmu/target/mips/lmi_helper.o
CC nios2-softmmu/qtest.o
CC moxie-softmmu/accel/tcg/cpu-exec.o
CC moxie-softmmu/accel/tcg/cpu-exec-common.o
CC mips-softmmu/target/mips/helper.o
CC nios2-softmmu/memory.o
CC moxie-softmmu/accel/tcg/translate-all.o
CC or1k-softmmu/tcg/tcg.o
CC mips-softmmu/target/mips/cpu.o
CC moxie-softmmu/accel/tcg/translator.o
CC mips-softmmu/target/mips/gdbstub.o
CC moxie-softmmu/hw/core/generic-loader.o
CC nios2-softmmu/memory_mapping.o
CC mips-softmmu/target/mips/msa_helper.o
CC nios2-softmmu/dump.o
CC moxie-softmmu/hw/core/null-machine.o
CC nios2-softmmu/migration/ram.o
CC moxie-softmmu/hw/display/vga.o
CC or1k-softmmu/tcg/tcg-op.o
CC nios2-softmmu/accel/accel.o
CC moxie-softmmu/hw/misc/mmio_interface.o
CC nios2-softmmu/accel/stubs/hax-stub.o
CC moxie-softmmu/hw/net/vhost_net.o
CC or1k-softmmu/tcg/optimize.o
CC nios2-softmmu/accel/stubs/kvm-stub.o
CC moxie-softmmu/hw/net/rocker/qmp-norocker.o
CC moxie-softmmu/hw/timer/mc146818rtc.o
CC nios2-softmmu/accel/tcg/tcg-all.o
CC mips-softmmu/target/mips/mips-semi.o
CC nios2-softmmu/accel/tcg/cputlb.o
CC moxie-softmmu/hw/vfio/common.o
CC or1k-softmmu/tcg/tcg-common.o
CC mips-softmmu/target/mips/machine.o
CC or1k-softmmu/fpu/softfloat.o
CC moxie-softmmu/hw/vfio/platform.o
CC mips-softmmu/target/mips/cp0_timer.o
CC moxie-softmmu/hw/vfio/spapr.o
CC nios2-softmmu/accel/tcg/tcg-runtime.o
GEN trace/generated-helpers.c
CC mips-softmmu/trace/control-target.o
CC moxie-softmmu/hw/moxie/moxiesim.o
CC nios2-softmmu/accel/tcg/cpu-exec.o
CC mips-softmmu/trace/generated-helpers.o
CC moxie-softmmu/target/moxie/translate.o
LINK mips-softmmu/qemu-system-mips
CC nios2-softmmu/accel/tcg/cpu-exec-common.o
CC moxie-softmmu/target/moxie/helper.o
CC nios2-softmmu/accel/tcg/translate-all.o
CC or1k-softmmu/disas.o
CC moxie-softmmu/target/moxie/machine.o
CC nios2-softmmu/accel/tcg/translator.o
CC moxie-softmmu/target/moxie/cpu.o
CC or1k-softmmu/arch_init.o
CC moxie-softmmu/target/moxie/mmu.o
CC or1k-softmmu/cpus.o
CC nios2-softmmu/hw/core/generic-loader.o
CC nios2-softmmu/hw/core/null-machine.o
GEN trace/generated-helpers.c
CC moxie-softmmu/trace/control-target.o
CC or1k-softmmu/monitor.o
CC nios2-softmmu/hw/intc/nios2_iic.o
CC moxie-softmmu/trace/generated-helpers.o
CC nios2-softmmu/hw/misc/mmio_interface.o
CC nios2-softmmu/hw/net/vhost_net.o
LINK moxie-softmmu/qemu-system-moxie
CC nios2-softmmu/hw/net/rocker/qmp-norocker.o
GEN ppc64-softmmu/hmp-commands.h
GEN ppc64-softmmu/hmp-commands-info.h
GEN ppc64-softmmu/config-target.h
CC nios2-softmmu/hw/timer/altera_timer.o
CC ppc64-softmmu/exec.o
CC or1k-softmmu/gdbstub.o
CC or1k-softmmu/balloon.o
CC nios2-softmmu/hw/vfio/common.o
CC nios2-softmmu/hw/vfio/platform.o
CC or1k-softmmu/ioport.o
CC nios2-softmmu/hw/vfio/spapr.o
CC or1k-softmmu/numa.o
CC nios2-softmmu/hw/nios2/boot.o
CC nios2-softmmu/hw/nios2/cpu_pic.o
CC or1k-softmmu/qtest.o
CC ppc64-softmmu/tcg/tcg.o
CC nios2-softmmu/hw/nios2/10m50_devboard.o
GEN ppcemb-softmmu/hmp-commands.h
GEN ppcemb-softmmu/hmp-commands-info.h
GEN ppcemb-softmmu/config-target.h
CC or1k-softmmu/memory.o
CC nios2-softmmu/target/nios2/translate.o
CC ppcemb-softmmu/exec.o
CC nios2-softmmu/target/nios2/op_helper.o
CC nios2-softmmu/target/nios2/helper.o
CC or1k-softmmu/memory_mapping.o
CC nios2-softmmu/target/nios2/cpu.o
CC ppcemb-softmmu/tcg/tcg.o
CC ppc64-softmmu/tcg/tcg-op.o
CC nios2-softmmu/target/nios2/mmu.o
CC or1k-softmmu/dump.o
CC nios2-softmmu/target/nios2/monitor.o
CC or1k-softmmu/migration/ram.o
GEN trace/generated-helpers.c
CC nios2-softmmu/trace/control-target.o
CC ppc64-softmmu/tcg/optimize.o
CC nios2-softmmu/trace/generated-helpers.o
CC or1k-softmmu/accel/accel.o
CC ppcemb-softmmu/tcg/tcg-op.o
CC or1k-softmmu/accel/stubs/hax-stub.o
LINK nios2-softmmu/qemu-system-nios2
CC or1k-softmmu/accel/stubs/kvm-stub.o
CC ppc64-softmmu/tcg/tcg-common.o
CC or1k-softmmu/accel/tcg/tcg-all.o
CC ppc64-softmmu/fpu/softfloat.o
CC or1k-softmmu/accel/tcg/cputlb.o
CC ppc64-softmmu/disas.o
CC or1k-softmmu/accel/tcg/tcg-runtime.o
CC ppcemb-softmmu/tcg/optimize.o
CC or1k-softmmu/accel/tcg/cpu-exec.o
CC or1k-softmmu/accel/tcg/cpu-exec-common.o
GEN ppc-softmmu/hmp-commands.h
GEN ppc-softmmu/hmp-commands-info.h
GEN ppc-softmmu/config-target.h
CC ppc-softmmu/exec.o
CC ppcemb-softmmu/tcg/tcg-common.o
CC or1k-softmmu/accel/tcg/translate-all.o
CC ppcemb-softmmu/fpu/softfloat.o
GEN ppc64-softmmu/gdbstub-xml.c
CC or1k-softmmu/accel/tcg/translator.o
CC or1k-softmmu/hw/core/generic-loader.o
CC or1k-softmmu/hw/core/null-machine.o
CC or1k-softmmu/hw/intc/ompic.o
CC ppc64-softmmu/arch_init.o
CC ppc-softmmu/tcg/tcg.o
CC or1k-softmmu/hw/misc/mmio_interface.o
CC ppc64-softmmu/cpus.o
CC or1k-softmmu/hw/net/vhost_net.o
CC ppcemb-softmmu/disas.o
CC or1k-softmmu/hw/net/rocker/qmp-norocker.o
CC ppc64-softmmu/monitor.o
GEN ppcemb-softmmu/gdbstub-xml.c
CC or1k-softmmu/hw/vfio/common.o
CC or1k-softmmu/hw/vfio/platform.o
CC ppc-softmmu/tcg/tcg-op.o
CC ppcemb-softmmu/arch_init.o
CC ppcemb-softmmu/cpus.o
CC ppc64-softmmu/gdbstub.o
CC or1k-softmmu/hw/vfio/spapr.o
CC ppcemb-softmmu/monitor.o
CC or1k-softmmu/hw/openrisc/pic_cpu.o
CC ppc64-softmmu/balloon.o
CC or1k-softmmu/hw/openrisc/cputimer.o
CC ppc-softmmu/tcg/optimize.o
CC ppc64-softmmu/ioport.o
CC or1k-softmmu/hw/openrisc/openrisc_sim.o
CC ppc64-softmmu/numa.o
CC ppcemb-softmmu/gdbstub.o
CC or1k-softmmu/target/openrisc/machine.o
CC or1k-softmmu/target/openrisc/cpu.o
CC ppc64-softmmu/qtest.o
CC ppc-softmmu/tcg/tcg-common.o
CC ppc-softmmu/fpu/softfloat.o
CC or1k-softmmu/target/openrisc/exception.o
CC ppcemb-softmmu/balloon.o
CC or1k-softmmu/target/openrisc/interrupt.o
CC ppc64-softmmu/memory.o
CC ppcemb-softmmu/ioport.o
CC or1k-softmmu/target/openrisc/mmu.o
CC ppcemb-softmmu/numa.o
CC or1k-softmmu/target/openrisc/translate.o
CC ppcemb-softmmu/qtest.o
CC ppcemb-softmmu/memory.o
CC ppc64-softmmu/memory_mapping.o
CC or1k-softmmu/target/openrisc/exception_helper.o
CC ppc-softmmu/disas.o
CC ppc64-softmmu/dump.o
CC or1k-softmmu/target/openrisc/fpu_helper.o
GEN ppc-softmmu/gdbstub-xml.c
CC ppcemb-softmmu/memory_mapping.o
CC ppc64-softmmu/migration/ram.o
CC ppc-softmmu/arch_init.o
CC or1k-softmmu/target/openrisc/interrupt_helper.o
CC ppcemb-softmmu/dump.o
CC ppc-softmmu/cpus.o
CC or1k-softmmu/target/openrisc/mmu_helper.o
CC ppc64-softmmu/accel/accel.o
CC or1k-softmmu/target/openrisc/sys_helper.o
CC ppc-softmmu/monitor.o
CC ppcemb-softmmu/migration/ram.o
CC ppc64-softmmu/accel/stubs/hax-stub.o
CC or1k-softmmu/target/openrisc/gdbstub.o
CC ppc64-softmmu/accel/stubs/kvm-stub.o
CC ppc64-softmmu/accel/tcg/tcg-all.o
GEN trace/generated-helpers.c
CC or1k-softmmu/trace/control-target.o
CC ppc64-softmmu/accel/tcg/cputlb.o
CC ppcemb-softmmu/accel/accel.o
CC or1k-softmmu/trace/generated-helpers.o
CC ppcemb-softmmu/accel/stubs/hax-stub.o
CC ppc-softmmu/gdbstub.o
LINK or1k-softmmu/qemu-system-or1k
CC ppcemb-softmmu/accel/stubs/kvm-stub.o
CC ppc-softmmu/balloon.o
CC ppcemb-softmmu/accel/tcg/tcg-all.o
CC ppc64-softmmu/accel/tcg/tcg-runtime.o
CC ppc-softmmu/ioport.o
CC ppcemb-softmmu/accel/tcg/cputlb.o
CC ppc64-softmmu/accel/tcg/cpu-exec.o
CC ppcemb-softmmu/accel/tcg/tcg-runtime.o
CC ppc-softmmu/numa.o
CC ppc64-softmmu/accel/tcg/cpu-exec-common.o
CC ppc64-softmmu/accel/tcg/translate-all.o
GEN s390x-softmmu/hmp-commands.h
CC ppc-softmmu/qtest.o
GEN s390x-softmmu/hmp-commands-info.h
CC s390x-softmmu/gen-features
GEN s390x-softmmu/config-target.h
CC ppcemb-softmmu/accel/tcg/cpu-exec.o
GEN s390x-softmmu/gen-features.h
CC ppc64-softmmu/accel/tcg/translator.o
CC s390x-softmmu/exec.o
CC ppc-softmmu/memory.o
CC ppcemb-softmmu/accel/tcg/cpu-exec-common.o
CC ppc64-softmmu/hw/9pfs/virtio-9p-device.o
CC ppcemb-softmmu/accel/tcg/translate-all.o
CC ppc-softmmu/memory_mapping.o
CC ppcemb-softmmu/accel/tcg/translator.o
CC ppc64-softmmu/hw/block/virtio-blk.o
CC ppc-softmmu/dump.o
CC ppc64-softmmu/hw/block/dataplane/virtio-blk.o
CC ppcemb-softmmu/hw/9pfs/virtio-9p-device.o
CC ppc-softmmu/migration/ram.o
CC s390x-softmmu/tcg/tcg.o
CC ppc64-softmmu/hw/char/spapr_vty.o
CC ppcemb-softmmu/hw/block/virtio-blk.o
CC ppcemb-softmmu/hw/block/dataplane/virtio-blk.o
CC ppc64-softmmu/hw/char/virtio-serial-bus.o
CC ppc-softmmu/accel/accel.o
CC ppcemb-softmmu/hw/char/virtio-serial-bus.o
CC ppc-softmmu/accel/stubs/hax-stub.o
CC ppc64-softmmu/hw/core/generic-loader.o
CC ppcemb-softmmu/hw/core/generic-loader.o
CC ppc-softmmu/accel/stubs/kvm-stub.o
CC ppc64-softmmu/hw/core/null-machine.o
CC s390x-softmmu/tcg/tcg-op.o
CC ppc64-softmmu/hw/display/sm501.o
CC ppc-softmmu/accel/tcg/tcg-all.o
CC ppcemb-softmmu/hw/core/null-machine.o
CC ppc-softmmu/accel/tcg/cputlb.o
CC ppcemb-softmmu/hw/display/sm501.o
CC ppc64-softmmu/hw/display/vga.o
CC s390x-softmmu/tcg/optimize.o
CC ppcemb-softmmu/hw/display/vga.o
CC ppc-softmmu/accel/tcg/tcg-runtime.o
CC ppc64-softmmu/hw/display/virtio-gpu.o
CC ppc-softmmu/accel/tcg/cpu-exec.o
CC ppcemb-softmmu/hw/display/virtio-gpu.o
CC s390x-softmmu/tcg/tcg-common.o
CC s390x-softmmu/fpu/softfloat.o
CC ppc-softmmu/accel/tcg/cpu-exec-common.o
CC ppcemb-softmmu/hw/display/virtio-gpu-3d.o
CC ppc64-softmmu/hw/display/virtio-gpu-3d.o
CC ppc-softmmu/accel/tcg/translate-all.o
CC ppcemb-softmmu/hw/display/virtio-gpu-pci.o
CC ppc64-softmmu/hw/display/virtio-gpu-pci.o
CC ppcemb-softmmu/hw/i2c/ppc4xx_i2c.o
CC ppc-softmmu/accel/tcg/translator.o
CC ppcemb-softmmu/hw/misc/ivshmem.o
CC ppc64-softmmu/hw/display/virtio-vga.o
CC ppcemb-softmmu/hw/misc/mmio_interface.o
CC ppc-softmmu/hw/9pfs/virtio-9p-device.o
CC ppcemb-softmmu/hw/net/xilinx_ethlite.o
CC ppc64-softmmu/hw/i2c/ppc4xx_i2c.o
CC ppc-softmmu/hw/block/virtio-blk.o
CC s390x-softmmu/disas.o
CC ppcemb-softmmu/hw/net/virtio-net.o
CC ppc64-softmmu/hw/intc/xics.o
CC ppc-softmmu/hw/block/dataplane/virtio-blk.o
GEN s390x-softmmu/gdbstub-xml.c
CC ppc64-softmmu/hw/intc/xics_spapr.o
CC ppcemb-softmmu/hw/net/vhost_net.o
CC ppc-softmmu/hw/char/virtio-serial-bus.o
CC ppcemb-softmmu/hw/scsi/virtio-scsi.o
CC ppc64-softmmu/hw/intc/xics_pnv.o
CC ppc64-softmmu/hw/misc/ivshmem.o
CC s390x-softmmu/arch_init.o
CC ppc-softmmu/hw/core/generic-loader.o
CC ppcemb-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC s390x-softmmu/cpus.o
CC ppc64-softmmu/hw/misc/mmio_interface.o
CC ppc-softmmu/hw/core/null-machine.o
CC ppcemb-softmmu/hw/scsi/vhost-scsi-common.o
CC ppc64-softmmu/hw/net/spapr_llan.o
CC ppc-softmmu/hw/display/sm501.o
CC ppcemb-softmmu/hw/scsi/vhost-scsi.o
CC s390x-softmmu/monitor.o
CC ppc64-softmmu/hw/net/xilinx_ethlite.o
CC ppcemb-softmmu/hw/scsi/vhost-user-scsi.o
CC ppcemb-softmmu/hw/vfio/common.o
CC ppc64-softmmu/hw/net/virtio-net.o
CC ppc-softmmu/hw/display/vga.o
CC s390x-softmmu/gdbstub.o
CC ppcemb-softmmu/hw/vfio/pci.o
CC ppc64-softmmu/hw/net/vhost_net.o
CC ppc-softmmu/hw/display/virtio-gpu.o
CC ppc64-softmmu/hw/net/fsl_etsec/etsec.o
CC s390x-softmmu/balloon.o
CC ppc-softmmu/hw/display/virtio-gpu-3d.o
CC s390x-softmmu/ioport.o
CC ppcemb-softmmu/hw/vfio/pci-quirks.o
CC ppc64-softmmu/hw/net/fsl_etsec/registers.o
CC ppc64-softmmu/hw/net/fsl_etsec/rings.o
CC s390x-softmmu/numa.o
CC ppc-softmmu/hw/display/virtio-gpu-pci.o
CC ppc64-softmmu/hw/net/fsl_etsec/miim.o
CC ppcemb-softmmu/hw/vfio/platform.o
CC s390x-softmmu/qtest.o
CC ppc64-softmmu/hw/nvram/spapr_nvram.o
CC ppc-softmmu/hw/i2c/ppc4xx_i2c.o
CC ppcemb-softmmu/hw/vfio/spapr.o
CC s390x-softmmu/memory.o
CC ppc64-softmmu/hw/scsi/spapr_vscsi.o
CC ppc-softmmu/hw/misc/ivshmem.o
CC ppcemb-softmmu/hw/virtio/virtio.o
CC ppc-softmmu/hw/misc/mmio_interface.o
CC ppc64-softmmu/hw/scsi/virtio-scsi.o
CC ppc-softmmu/hw/net/xilinx_ethlite.o
CC ppc-softmmu/hw/net/virtio-net.o
CC s390x-softmmu/memory_mapping.o
CC ppcemb-softmmu/hw/virtio/virtio-balloon.o
CC ppc64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC s390x-softmmu/dump.o
CC ppcemb-softmmu/hw/virtio/vhost.o
CC ppc64-softmmu/hw/scsi/vhost-scsi-common.o
CC ppc-softmmu/hw/net/vhost_net.o
CC ppc64-softmmu/hw/scsi/vhost-scsi.o
CC ppcemb-softmmu/hw/virtio/vhost-backend.o
CC ppc-softmmu/hw/net/fsl_etsec/etsec.o
CC s390x-softmmu/migration/ram.o
CC ppc64-softmmu/hw/scsi/vhost-user-scsi.o
CC ppcemb-softmmu/hw/virtio/vhost-user.o
CC ppc-softmmu/hw/net/fsl_etsec/registers.o
CC ppc64-softmmu/hw/timer/mc146818rtc.o
CC ppc-softmmu/hw/net/fsl_etsec/rings.o
CC ppcemb-softmmu/hw/virtio/vhost-vsock.o
CC s390x-softmmu/accel/accel.o
CC ppc64-softmmu/hw/vfio/common.o
CC s390x-softmmu/accel/kvm/kvm-all.o
CC ppc-softmmu/hw/net/fsl_etsec/miim.o
CC ppcemb-softmmu/hw/virtio/virtio-crypto.o
CC ppc-softmmu/hw/scsi/virtio-scsi.o
CC ppc64-softmmu/hw/vfio/pci.o
CC ppcemb-softmmu/hw/virtio/virtio-crypto-pci.o
CC s390x-softmmu/accel/stubs/hax-stub.o
CC ppc-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC ppcemb-softmmu/hw/ppc/ppc.o
CC s390x-softmmu/accel/tcg/tcg-all.o
CC ppc-softmmu/hw/scsi/vhost-scsi-common.o
CC s390x-softmmu/accel/tcg/cputlb.o
CC ppc64-softmmu/hw/vfio/pci-quirks.o
CC ppcemb-softmmu/hw/ppc/ppc_booke.o
CC ppc-softmmu/hw/scsi/vhost-scsi.o
CC ppcemb-softmmu/hw/ppc/fdt.o
CC ppc-softmmu/hw/scsi/vhost-user-scsi.o
CC ppc64-softmmu/hw/vfio/platform.o
CC ppcemb-softmmu/hw/ppc/ppc405_boards.o
CC ppc-softmmu/hw/timer/mc146818rtc.o
CC ppc64-softmmu/hw/vfio/spapr.o
CC s390x-softmmu/accel/tcg/tcg-runtime.o
CC ppcemb-softmmu/hw/ppc/ppc4xx_devs.o
CC ppc-softmmu/hw/vfio/common.o
CC ppc64-softmmu/hw/virtio/virtio.o
CC s390x-softmmu/accel/tcg/cpu-exec.o
CC ppcemb-softmmu/hw/ppc/ppc405_uc.o
CC ppc-softmmu/hw/vfio/pci.o
CC s390x-softmmu/accel/tcg/cpu-exec-common.o
CC ppcemb-softmmu/hw/ppc/ppc440_bamboo.o
CC ppc64-softmmu/hw/virtio/virtio-balloon.o
CC s390x-softmmu/accel/tcg/translate-all.o
CC ppcemb-softmmu/hw/ppc/ppc4xx_pci.o
CC ppc-softmmu/hw/vfio/pci-quirks.o
CC ppc64-softmmu/hw/virtio/vhost.o
CC ppcemb-softmmu/hw/ppc/virtex_ml507.o
CC s390x-softmmu/accel/tcg/translator.o
CC ppc-softmmu/hw/vfio/platform.o
CC ppc64-softmmu/hw/virtio/vhost-backend.o
CC ppcemb-softmmu/target/ppc/cpu-models.o
CC s390x-softmmu/hw/9pfs/virtio-9p-device.o
CC ppc64-softmmu/hw/virtio/vhost-user.o
CC ppc-softmmu/hw/vfio/spapr.o
CC s390x-softmmu/hw/block/virtio-blk.o
CC ppc64-softmmu/hw/virtio/vhost-vsock.o
CC ppc-softmmu/hw/virtio/virtio.o
CC s390x-softmmu/hw/block/dataplane/virtio-blk.o
CC ppc64-softmmu/hw/virtio/virtio-crypto.o
CC ppcemb-softmmu/target/ppc/cpu.o
CC ppc64-softmmu/hw/virtio/virtio-crypto-pci.o
CC s390x-softmmu/hw/char/virtio-serial-bus.o
CC ppcemb-softmmu/target/ppc/translate.o
CC ppc-softmmu/hw/virtio/virtio-balloon.o
CC ppc64-softmmu/hw/ppc/ppc.o
CC ppc-softmmu/hw/virtio/vhost.o
CC s390x-softmmu/hw/char/terminal3270.o
CC ppc64-softmmu/hw/ppc/ppc_booke.o
CC s390x-softmmu/hw/core/generic-loader.o
CC ppc-softmmu/hw/virtio/vhost-backend.o
CC ppc64-softmmu/hw/ppc/fdt.o
CC s390x-softmmu/hw/core/null-machine.o
CC ppc-softmmu/hw/virtio/vhost-user.o
CC ppc64-softmmu/hw/ppc/spapr.o
CC s390x-softmmu/hw/display/virtio-gpu.o
CC ppc-softmmu/hw/virtio/vhost-vsock.o
CC s390x-softmmu/hw/display/virtio-gpu-3d.o
CC ppc-softmmu/hw/virtio/virtio-crypto.o
CC ppc64-softmmu/hw/ppc/spapr_vio.o
CC s390x-softmmu/hw/display/virtio-gpu-pci.o
CC ppc-softmmu/hw/virtio/virtio-crypto-pci.o
CC ppc64-softmmu/hw/ppc/spapr_events.o
CC s390x-softmmu/hw/intc/s390_flic.o
CC ppc-softmmu/hw/ppc/ppc.o
CC ppc64-softmmu/hw/ppc/spapr_hcall.o
CC s390x-softmmu/hw/intc/s390_flic_kvm.o
CC ppc-softmmu/hw/ppc/ppc_booke.o
CC ppc64-softmmu/hw/ppc/spapr_iommu.o
CC s390x-softmmu/hw/misc/mmio_interface.o
CC ppc-softmmu/hw/ppc/fdt.o
CC s390x-softmmu/hw/net/virtio-net.o
CC ppc64-softmmu/hw/ppc/spapr_rtas.o
CC ppc-softmmu/hw/ppc/ppc405_boards.o
CC s390x-softmmu/hw/net/vhost_net.o
CC ppc-softmmu/hw/ppc/ppc4xx_devs.o
CC ppc64-softmmu/hw/ppc/spapr_pci.o
CC s390x-softmmu/hw/net/rocker/qmp-norocker.o
CC ppc-softmmu/hw/ppc/ppc405_uc.o
CC s390x-softmmu/hw/scsi/virtio-scsi.o
CC ppc64-softmmu/hw/ppc/spapr_rtc.o
CC ppc-softmmu/hw/ppc/ppc440_bamboo.o
CC s390x-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC ppc64-softmmu/hw/ppc/spapr_drc.o
CC ppc-softmmu/hw/ppc/ppc4xx_pci.o
CC s390x-softmmu/hw/scsi/vhost-scsi-common.o
CC ppc-softmmu/hw/ppc/prep.o
CC ppc64-softmmu/hw/ppc/spapr_rng.o
CC s390x-softmmu/hw/scsi/vhost-scsi.o
CC ppc64-softmmu/hw/ppc/spapr_cpu_core.o
CC s390x-softmmu/hw/scsi/vhost-user-scsi.o
CC ppc-softmmu/hw/ppc/prep_systemio.o
CC ppc64-softmmu/hw/ppc/spapr_ovec.o
CC s390x-softmmu/hw/vfio/common.o
CC ppc-softmmu/hw/ppc/rs6000_mc.o
CC ppc64-softmmu/hw/ppc/pnv.o
CC s390x-softmmu/hw/vfio/pci.o
CC ppc-softmmu/hw/ppc/mac_oldworld.o
CC ppc-softmmu/hw/ppc/mac_newworld.o
CC ppc64-softmmu/hw/ppc/pnv_xscom.o
CC ppc-softmmu/hw/ppc/e500.o
CC s390x-softmmu/hw/vfio/pci-quirks.o
CC ppc64-softmmu/hw/ppc/pnv_core.o
CC ppc-softmmu/hw/ppc/mpc8544ds.o
CC ppc64-softmmu/hw/ppc/pnv_lpc.o
CC s390x-softmmu/hw/vfio/ccw.o
CC ppc-softmmu/hw/ppc/e500plat.o
CC ppc64-softmmu/hw/ppc/pnv_psi.o
CC s390x-softmmu/hw/vfio/platform.o
CC ppc-softmmu/hw/ppc/mpc8544_guts.o
CC ppc64-softmmu/hw/ppc/pnv_occ.o
CC ppc-softmmu/hw/ppc/ppce500_spin.o
CC s390x-softmmu/hw/vfio/spapr.o
CC ppcemb-softmmu/target/ppc/machine.o
CC ppc64-softmmu/hw/ppc/pnv_bmc.o
CC ppc-softmmu/hw/ppc/virtex_ml507.o
CC s390x-softmmu/hw/virtio/virtio.o
CC ppcemb-softmmu/target/ppc/mmu_helper.o
CC ppc64-softmmu/hw/ppc/spapr_pci_vfio.o
CC ppc-softmmu/target/ppc/cpu-models.o
CC ppc64-softmmu/hw/ppc/spapr_rtas_ddw.o
CC ppc64-softmmu/hw/ppc/ppc405_boards.o
CC s390x-softmmu/hw/virtio/virtio-balloon.o
CC ppcemb-softmmu/target/ppc/mmu-hash32.o
CC ppc64-softmmu/hw/ppc/ppc4xx_devs.o
CC ppc-softmmu/target/ppc/cpu.o
CC s390x-softmmu/hw/virtio/vhost.o
CC ppcemb-softmmu/target/ppc/monitor.o
CC ppc64-softmmu/hw/ppc/ppc405_uc.o
CC ppcemb-softmmu/target/ppc/arch_dump.o
CC ppc-softmmu/target/ppc/translate.o
CC ppcemb-softmmu/target/ppc/kvm-stub.o
CC s390x-softmmu/hw/virtio/vhost-backend.o
CC ppc64-softmmu/hw/ppc/ppc440_bamboo.o
CC ppcemb-softmmu/target/ppc/dfp_helper.o
CC ppc64-softmmu/hw/ppc/ppc4xx_pci.o
CC s390x-softmmu/hw/virtio/vhost-user.o
CC ppc64-softmmu/hw/ppc/prep.o
CC s390x-softmmu/hw/virtio/vhost-vsock.o
CC ppcemb-softmmu/target/ppc/excp_helper.o
CC ppc64-softmmu/hw/ppc/prep_systemio.o
CC s390x-softmmu/hw/virtio/virtio-crypto.o
CC ppcemb-softmmu/target/ppc/fpu_helper.o
CC ppc64-softmmu/hw/ppc/rs6000_mc.o
CC s390x-softmmu/hw/virtio/virtio-crypto-pci.o
CC ppc64-softmmu/hw/ppc/mac_oldworld.o
CC s390x-softmmu/hw/s390x/s390-virtio-hcall.o
CC ppc64-softmmu/hw/ppc/mac_newworld.o
CC s390x-softmmu/hw/s390x/sclp.o
CC s390x-softmmu/hw/s390x/event-facility.o
CC ppc64-softmmu/hw/ppc/e500.o
CC s390x-softmmu/hw/s390x/sclpquiesce.o
CC s390x-softmmu/hw/s390x/sclpcpu.o
CC ppc64-softmmu/hw/ppc/mpc8544ds.o
CC s390x-softmmu/hw/s390x/ipl.o
CC ppc64-softmmu/hw/ppc/e500plat.o
CC s390x-softmmu/hw/s390x/css.o
CC ppcemb-softmmu/target/ppc/int_helper.o
CC ppc64-softmmu/hw/ppc/mpc8544_guts.o
CC ppc64-softmmu/hw/ppc/ppce500_spin.o
CC s390x-softmmu/hw/s390x/s390-virtio-ccw.o
CC ppc64-softmmu/hw/ppc/virtex_ml507.o
CC ppc64-softmmu/target/ppc/cpu-models.o
CC s390x-softmmu/hw/s390x/3270-ccw.o
CC ppcemb-softmmu/target/ppc/timebase_helper.o
CC s390x-softmmu/hw/s390x/virtio-ccw.o
CC ppcemb-softmmu/target/ppc/misc_helper.o
CC ppcemb-softmmu/target/ppc/mem_helper.o
CC ppc64-softmmu/target/ppc/cpu.o
CC s390x-softmmu/hw/s390x/css-bridge.o
CC ppc64-softmmu/target/ppc/translate.o
CC ppcemb-softmmu/target/ppc/gdbstub.o
CC s390x-softmmu/hw/s390x/ccw-device.o
CC ppcemb-softmmu/target/ppc/../../libdecnumber/decContext.o
CC s390x-softmmu/hw/s390x/s390-pci-bus.o
CC ppcemb-softmmu/target/ppc/../../libdecnumber/decNumber.o
CC s390x-softmmu/hw/s390x/s390-pci-inst.o
CC s390x-softmmu/hw/s390x/s390-skeys.o
CC ppcemb-softmmu/target/ppc/../../libdecnumber/dpd/decimal32.o
CC s390x-softmmu/hw/s390x/s390-stattrib.o
CC ppcemb-softmmu/target/ppc/../../libdecnumber/dpd/decimal64.o
CC ppc-softmmu/target/ppc/machine.o
/var/tmp/patchew-tester-tmp-30ljxus4/src/hw/s390x/s390-stattrib.c: In function ‘s390_stattrib_instance_init’:
/var/tmp/patchew-tester-tmp-30ljxus4/src/hw/s390x/s390-stattrib.c:379:28: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
ops->save_live_pending = cmma_save_pending;
^
cc1: all warnings being treated as errors
/var/tmp/patchew-tester-tmp-30ljxus4/src/rules.mak:66: recipe for target 'hw/s390x/s390-stattrib.o' failed
make[1]: *** [hw/s390x/s390-stattrib.o] Error 1
Makefile:374: recipe for target 'subdir-s390x-softmmu' failed
make: *** [subdir-s390x-softmmu] Error 2
make: *** Waiting for unfinished jobs....
CC ppcemb-softmmu/target/ppc/../../libdecnumber/dpd/decimal128.o
CC ppc-softmmu/target/ppc/mmu_helper.o
CC ppc64-softmmu/target/ppc/machine.o
GEN trace/generated-helpers.c
CC ppcemb-softmmu/trace/control-target.o
CC ppc-softmmu/target/ppc/mmu-hash32.o
CC ppcemb-softmmu/gdbstub-xml.o
CC ppc-softmmu/target/ppc/monitor.o
CC ppcemb-softmmu/trace/generated-helpers.o
CC ppc-softmmu/target/ppc/arch_dump.o
CC ppc-softmmu/target/ppc/kvm-stub.o
CC ppc64-softmmu/target/ppc/mmu_helper.o
LINK ppcemb-softmmu/qemu-system-ppcemb
CC ppc-softmmu/target/ppc/dfp_helper.o
CC ppc-softmmu/target/ppc/excp_helper.o
CC ppc64-softmmu/target/ppc/mmu-hash32.o
CC ppc64-softmmu/target/ppc/monitor.o
CC ppc64-softmmu/target/ppc/arch_dump.o
CC ppc-softmmu/target/ppc/fpu_helper.o
CC ppc64-softmmu/target/ppc/mmu-hash64.o
CC ppc-softmmu/target/ppc/int_helper.o
CC ppc64-softmmu/target/ppc/mmu-book3s-v3.o
CC ppc-softmmu/target/ppc/timebase_helper.o
CC ppc-softmmu/target/ppc/misc_helper.o
CC ppc-softmmu/target/ppc/mem_helper.o
CC ppc-softmmu/target/ppc/gdbstub.o
CC ppc-softmmu/target/ppc/../../libdecnumber/decContext.o
CC ppc-softmmu/target/ppc/../../libdecnumber/decNumber.o
CC ppc-softmmu/target/ppc/../../libdecnumber/dpd/decimal32.o
CC ppc-softmmu/target/ppc/../../libdecnumber/dpd/decimal64.o
CC ppc-softmmu/target/ppc/../../libdecnumber/dpd/decimal128.o
GEN trace/generated-helpers.c
CC ppc-softmmu/trace/control-target.o
CC ppc-softmmu/gdbstub-xml.o
CC ppc-softmmu/trace/generated-helpers.o
CC ppc64-softmmu/target/ppc/compat.o
CC ppc64-softmmu/target/ppc/mmu-radix64.o
CC ppc64-softmmu/target/ppc/kvm-stub.o
LINK ppc-softmmu/qemu-system-ppc
CC ppc64-softmmu/target/ppc/dfp_helper.o
CC ppc64-softmmu/target/ppc/excp_helper.o
CC ppc64-softmmu/target/ppc/fpu_helper.o
CC ppc64-softmmu/target/ppc/int_helper.o
CC ppc64-softmmu/target/ppc/timebase_helper.o
CC ppc64-softmmu/target/ppc/misc_helper.o
CC ppc64-softmmu/target/ppc/mem_helper.o
CC ppc64-softmmu/target/ppc/gdbstub.o
CC ppc64-softmmu/target/ppc/../../libdecnumber/decContext.o
CC ppc64-softmmu/target/ppc/../../libdecnumber/decNumber.o
CC ppc64-softmmu/target/ppc/../../libdecnumber/dpd/decimal32.o
CC ppc64-softmmu/target/ppc/../../libdecnumber/dpd/decimal64.o
CC ppc64-softmmu/target/ppc/../../libdecnumber/dpd/decimal128.o
GEN trace/generated-helpers.c
CC ppc64-softmmu/trace/control-target.o
CC ppc64-softmmu/gdbstub-xml.o
CC ppc64-softmmu/trace/generated-helpers.o
LINK ppc64-softmmu/qemu-system-ppc64
=== 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] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 05/14] migration: introduce postcopy-only pending
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 05/14] migration: introduce postcopy-only pending Vladimir Sementsov-Ogievskiy
@ 2017-10-30 17:31 ` Dr. David Alan Gilbert
2017-10-30 18:17 ` Vladimir Sementsov-Ogievskiy
2017-10-30 18:19 ` [Qemu-devel] [PATCH v8.1 " Vladimir Sementsov-Ogievskiy
1 sibling, 1 reply; 44+ messages in thread
From: Dr. David Alan Gilbert @ 2017-10-30 17:31 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy
Cc: qemu-block, qemu-devel, pbonzini, armbru, eblake, famz, stefanha,
amit.shah, quintela, mreitz, kwolf, peter.maydell, den, jsnow,
lirans
* Vladimir Sementsov-Ogievskiy (vsementsov@virtuozzo.com) wrote:
> There would be savevm states (dirty-bitmap) which can migrate only in
> postcopy stage. The corresponding pending is introduced here.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> Reviewed-by: Juan Quintela <quintela@redhat.com>
Note the error patchew picked up on this for s390 which has
cmma_save_pending.
Dave
> ---
> include/migration/register.h | 17 +++++++++++++++--
> migration/savevm.h | 5 +++--
> migration/block.c | 7 ++++---
> migration/migration.c | 15 ++++++++-------
> migration/ram.c | 9 +++++----
> migration/savevm.c | 13 ++++++++-----
> migration/trace-events | 2 +-
> 7 files changed, 44 insertions(+), 24 deletions(-)
>
> diff --git a/include/migration/register.h b/include/migration/register.h
> index f4f7bdc177..9436a87678 100644
> --- a/include/migration/register.h
> +++ b/include/migration/register.h
> @@ -37,8 +37,21 @@ typedef struct SaveVMHandlers {
> int (*save_setup)(QEMUFile *f, void *opaque);
> void (*save_live_pending)(QEMUFile *f, void *opaque,
> uint64_t threshold_size,
> - uint64_t *non_postcopiable_pending,
> - uint64_t *postcopiable_pending);
> + uint64_t *res_precopy_only,
> + uint64_t *res_compatible,
> + uint64_t *res_postcopy_only);
> + /* Note for save_live_pending:
> + * - res_precopy_only is for data which must be migrated in precopy phase
> + * or in stopped state, in other words - before target vm start
> + * - res_compatible is for data which may be migrated in any phase
> + * - res_postcopy_only is for data which must be migrated in postcopy phase
> + * or in stopped state, in other words - after source vm stop
> + *
> + * Sum of res_postcopy_only, res_compatible and res_postcopy_only is the
> + * whole amount of pending data.
> + */
> +
> +
> LoadStateHandler *load_state;
> int (*load_setup)(QEMUFile *f, void *opaque);
> int (*load_cleanup)(void *opaque);
> diff --git a/migration/savevm.h b/migration/savevm.h
> index 295c4a1f2c..cf4f0d37ca 100644
> --- a/migration/savevm.h
> +++ b/migration/savevm.h
> @@ -38,8 +38,9 @@ void qemu_savevm_state_complete_postcopy(QEMUFile *f);
> int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
> bool inactivate_disks);
> void qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size,
> - uint64_t *res_non_postcopiable,
> - uint64_t *res_postcopiable);
> + uint64_t *res_precopy_only,
> + uint64_t *res_compatible,
> + uint64_t *res_postcopy_only);
> void qemu_savevm_send_ping(QEMUFile *f, uint32_t value);
> void qemu_savevm_send_open_return_path(QEMUFile *f);
> int qemu_savevm_send_packaged(QEMUFile *f, const uint8_t *buf, size_t len);
> diff --git a/migration/block.c b/migration/block.c
> index 3282809583..39dfa567e8 100644
> --- a/migration/block.c
> +++ b/migration/block.c
> @@ -865,8 +865,9 @@ static int block_save_complete(QEMUFile *f, void *opaque)
> }
>
> static void block_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
> - uint64_t *non_postcopiable_pending,
> - uint64_t *postcopiable_pending)
> + uint64_t *res_precopy_only,
> + uint64_t *res_compatible,
> + uint64_t *res_postcopy_only)
> {
> /* Estimate pending number of bytes to send */
> uint64_t pending;
> @@ -887,7 +888,7 @@ static void block_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
>
> DPRINTF("Enter save live pending %" PRIu64 "\n", pending);
> /* We don't do postcopy */
> - *non_postcopiable_pending += pending;
> + *res_precopy_only += pending;
> }
>
> static int block_load(QEMUFile *f, void *opaque, int version_id)
> diff --git a/migration/migration.c b/migration/migration.c
> index 4de3b551fe..e6c9be3cca 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -2216,20 +2216,21 @@ static void *migration_thread(void *opaque)
> uint64_t pending_size;
>
> if (!qemu_file_rate_limit(s->to_dst_file)) {
> - uint64_t pend_post, pend_nonpost;
> + uint64_t pend_pre, pend_compat, pend_post;
>
> - qemu_savevm_state_pending(s->to_dst_file, threshold_size,
> - &pend_nonpost, &pend_post);
> - pending_size = pend_nonpost + pend_post;
> + qemu_savevm_state_pending(s->to_dst_file, threshold_size, &pend_pre,
> + &pend_compat, &pend_post);
> + pending_size = pend_pre + pend_compat + pend_post;
> trace_migrate_pending(pending_size, threshold_size,
> - pend_post, pend_nonpost);
> + pend_pre, pend_compat, pend_post);
> if (pending_size && pending_size >= threshold_size) {
> /* Still a significant amount to transfer */
>
> if (migrate_postcopy() &&
> s->state != MIGRATION_STATUS_POSTCOPY_ACTIVE &&
> - pend_nonpost <= threshold_size &&
> - atomic_read(&s->start_postcopy)) {
> + pend_pre <= threshold_size &&
> + (atomic_read(&s->start_postcopy) ||
> + (pend_pre + pend_compat <= threshold_size))) {
>
> if (!postcopy_start(s, &old_vm_running)) {
> current_active_state = MIGRATION_STATUS_POSTCOPY_ACTIVE;
> diff --git a/migration/ram.c b/migration/ram.c
> index 8620aa400a..1b664a2d9a 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -2358,8 +2358,9 @@ static int ram_save_complete(QEMUFile *f, void *opaque)
> }
>
> static void ram_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
> - uint64_t *non_postcopiable_pending,
> - uint64_t *postcopiable_pending)
> + uint64_t *res_precopy_only,
> + uint64_t *res_compatible,
> + uint64_t *res_postcopy_only)
> {
> RAMState **temp = opaque;
> RAMState *rs = *temp;
> @@ -2379,9 +2380,9 @@ static void ram_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
>
> if (migrate_postcopy_ram()) {
> /* We can do postcopy, and all the data is postcopiable */
> - *postcopiable_pending += remaining_size;
> + *res_compatible += remaining_size;
> } else {
> - *non_postcopiable_pending += remaining_size;
> + *res_precopy_only += remaining_size;
> }
> }
>
> diff --git a/migration/savevm.c b/migration/savevm.c
> index 4a88228614..f6b62cb202 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -1218,13 +1218,15 @@ int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
> * for units that can't do postcopy.
> */
> void qemu_savevm_state_pending(QEMUFile *f, uint64_t threshold_size,
> - uint64_t *res_non_postcopiable,
> - uint64_t *res_postcopiable)
> + uint64_t *res_precopy_only,
> + uint64_t *res_compatible,
> + uint64_t *res_postcopy_only)
> {
> SaveStateEntry *se;
>
> - *res_non_postcopiable = 0;
> - *res_postcopiable = 0;
> + *res_precopy_only = 0;
> + *res_compatible = 0;
> + *res_postcopy_only = 0;
>
>
> QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
> @@ -1237,7 +1239,8 @@ void qemu_savevm_state_pending(QEMUFile *f, uint64_t threshold_size,
> }
> }
> se->ops->save_live_pending(f, se->opaque, threshold_size,
> - res_non_postcopiable, res_postcopiable);
> + res_precopy_only, res_compatible,
> + res_postcopy_only);
> }
> }
>
> diff --git a/migration/trace-events b/migration/trace-events
> index 6f29fcc686..a04fffb877 100644
> --- a/migration/trace-events
> +++ b/migration/trace-events
> @@ -86,7 +86,7 @@ migrate_fd_cleanup(void) ""
> migrate_fd_error(const char *error_desc) "error=%s"
> migrate_fd_cancel(void) ""
> migrate_handle_rp_req_pages(const char *rbname, size_t start, size_t len) "in %s at 0x%zx len 0x%zx"
> -migrate_pending(uint64_t size, uint64_t max, uint64_t post, uint64_t nonpost) "pending size %" PRIu64 " max %" PRIu64 " (post=%" PRIu64 " nonpost=%" PRIu64 ")"
> +migrate_pending(uint64_t size, uint64_t max, uint64_t pre, uint64_t compat, uint64_t post) "pending size %" PRIu64 " max %" PRIu64 " (pre = %" PRIu64 " compat=%" PRIu64 " post=%" PRIu64 ")"
> migrate_send_rp_message(int msg_type, uint16_t len) "%d: len %d"
> migration_completion_file_err(void) ""
> migration_completion_postcopy_end(void) ""
> --
> 2.11.1
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 05/14] migration: introduce postcopy-only pending
2017-10-30 17:31 ` Dr. David Alan Gilbert
@ 2017-10-30 18:17 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 18:17 UTC (permalink / raw)
To: Dr. David Alan Gilbert
Cc: qemu-block, qemu-devel, pbonzini, armbru, eblake, famz, stefanha,
amit.shah, quintela, mreitz, kwolf, peter.maydell, den, jsnow,
lirans
30.10.2017 20:31, Dr. David Alan Gilbert wrote:
> * Vladimir Sementsov-Ogievskiy (vsementsov@virtuozzo.com) wrote:
>> There would be savevm states (dirty-bitmap) which can migrate only in
>> postcopy stage. The corresponding pending is introduced here.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> Reviewed-by: Juan Quintela <quintela@redhat.com>
> Note the error patchew picked up on this for s390 which has
> cmma_save_pending.
>
> Dave
Thanks for pointing here, I'll update the patch.
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 44+ messages in thread
* [Qemu-devel] [PATCH v8.1 05/14] migration: introduce postcopy-only pending
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 05/14] migration: introduce postcopy-only pending Vladimir Sementsov-Ogievskiy
2017-10-30 17:31 ` Dr. David Alan Gilbert
@ 2017-10-30 18:19 ` Vladimir Sementsov-Ogievskiy
2017-11-14 0:09 ` John Snow
1 sibling, 1 reply; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 18:19 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, vsementsov,
lirans
There would be savevm states (dirty-bitmap) which can migrate only in
postcopy stage. The corresponding pending is introduced here.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
---
8.1: add new version for cmma_save_pending too.
include/migration/register.h | 17 +++++++++++++++--
migration/savevm.h | 5 +++--
hw/s390x/s390-stattrib.c | 7 ++++---
migration/block.c | 7 ++++---
migration/migration.c | 15 ++++++++-------
migration/ram.c | 9 +++++----
migration/savevm.c | 13 ++++++++-----
migration/trace-events | 2 +-
8 files changed, 48 insertions(+), 27 deletions(-)
diff --git a/include/migration/register.h b/include/migration/register.h
index f4f7bdc177..9436a87678 100644
--- a/include/migration/register.h
+++ b/include/migration/register.h
@@ -37,8 +37,21 @@ typedef struct SaveVMHandlers {
int (*save_setup)(QEMUFile *f, void *opaque);
void (*save_live_pending)(QEMUFile *f, void *opaque,
uint64_t threshold_size,
- uint64_t *non_postcopiable_pending,
- uint64_t *postcopiable_pending);
+ uint64_t *res_precopy_only,
+ uint64_t *res_compatible,
+ uint64_t *res_postcopy_only);
+ /* Note for save_live_pending:
+ * - res_precopy_only is for data which must be migrated in precopy phase
+ * or in stopped state, in other words - before target vm start
+ * - res_compatible is for data which may be migrated in any phase
+ * - res_postcopy_only is for data which must be migrated in postcopy phase
+ * or in stopped state, in other words - after source vm stop
+ *
+ * Sum of res_postcopy_only, res_compatible and res_postcopy_only is the
+ * whole amount of pending data.
+ */
+
+
LoadStateHandler *load_state;
int (*load_setup)(QEMUFile *f, void *opaque);
int (*load_cleanup)(void *opaque);
diff --git a/migration/savevm.h b/migration/savevm.h
index 295c4a1f2c..cf4f0d37ca 100644
--- a/migration/savevm.h
+++ b/migration/savevm.h
@@ -38,8 +38,9 @@ void qemu_savevm_state_complete_postcopy(QEMUFile *f);
int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
bool inactivate_disks);
void qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size,
- uint64_t *res_non_postcopiable,
- uint64_t *res_postcopiable);
+ uint64_t *res_precopy_only,
+ uint64_t *res_compatible,
+ uint64_t *res_postcopy_only);
void qemu_savevm_send_ping(QEMUFile *f, uint32_t value);
void qemu_savevm_send_open_return_path(QEMUFile *f);
int qemu_savevm_send_packaged(QEMUFile *f, const uint8_t *buf, size_t len);
diff --git a/hw/s390x/s390-stattrib.c b/hw/s390x/s390-stattrib.c
index 2902f54f11..dd3fbfd1eb 100644
--- a/hw/s390x/s390-stattrib.c
+++ b/hw/s390x/s390-stattrib.c
@@ -183,15 +183,16 @@ static int cmma_save_setup(QEMUFile *f, void *opaque)
}
static void cmma_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
- uint64_t *non_postcopiable_pending,
- uint64_t *postcopiable_pending)
+ uint64_t *res_precopy_only,
+ uint64_t *res_compatible,
+ uint64_t *res_postcopy_only)
{
S390StAttribState *sas = S390_STATTRIB(opaque);
S390StAttribClass *sac = S390_STATTRIB_GET_CLASS(sas);
long long res = sac->get_dirtycount(sas);
if (res >= 0) {
- *non_postcopiable_pending += res;
+ *res_precopy_only += res;
}
}
diff --git a/migration/block.c b/migration/block.c
index 3282809583..39dfa567e8 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -865,8 +865,9 @@ static int block_save_complete(QEMUFile *f, void *opaque)
}
static void block_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
- uint64_t *non_postcopiable_pending,
- uint64_t *postcopiable_pending)
+ uint64_t *res_precopy_only,
+ uint64_t *res_compatible,
+ uint64_t *res_postcopy_only)
{
/* Estimate pending number of bytes to send */
uint64_t pending;
@@ -887,7 +888,7 @@ static void block_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
DPRINTF("Enter save live pending %" PRIu64 "\n", pending);
/* We don't do postcopy */
- *non_postcopiable_pending += pending;
+ *res_precopy_only += pending;
}
static int block_load(QEMUFile *f, void *opaque, int version_id)
diff --git a/migration/migration.c b/migration/migration.c
index 4de3b551fe..e6c9be3cca 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2216,20 +2216,21 @@ static void *migration_thread(void *opaque)
uint64_t pending_size;
if (!qemu_file_rate_limit(s->to_dst_file)) {
- uint64_t pend_post, pend_nonpost;
+ uint64_t pend_pre, pend_compat, pend_post;
- qemu_savevm_state_pending(s->to_dst_file, threshold_size,
- &pend_nonpost, &pend_post);
- pending_size = pend_nonpost + pend_post;
+ qemu_savevm_state_pending(s->to_dst_file, threshold_size, &pend_pre,
+ &pend_compat, &pend_post);
+ pending_size = pend_pre + pend_compat + pend_post;
trace_migrate_pending(pending_size, threshold_size,
- pend_post, pend_nonpost);
+ pend_pre, pend_compat, pend_post);
if (pending_size && pending_size >= threshold_size) {
/* Still a significant amount to transfer */
if (migrate_postcopy() &&
s->state != MIGRATION_STATUS_POSTCOPY_ACTIVE &&
- pend_nonpost <= threshold_size &&
- atomic_read(&s->start_postcopy)) {
+ pend_pre <= threshold_size &&
+ (atomic_read(&s->start_postcopy) ||
+ (pend_pre + pend_compat <= threshold_size))) {
if (!postcopy_start(s, &old_vm_running)) {
current_active_state = MIGRATION_STATUS_POSTCOPY_ACTIVE;
diff --git a/migration/ram.c b/migration/ram.c
index 8620aa400a..1b664a2d9a 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -2358,8 +2358,9 @@ static int ram_save_complete(QEMUFile *f, void *opaque)
}
static void ram_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
- uint64_t *non_postcopiable_pending,
- uint64_t *postcopiable_pending)
+ uint64_t *res_precopy_only,
+ uint64_t *res_compatible,
+ uint64_t *res_postcopy_only)
{
RAMState **temp = opaque;
RAMState *rs = *temp;
@@ -2379,9 +2380,9 @@ static void ram_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
if (migrate_postcopy_ram()) {
/* We can do postcopy, and all the data is postcopiable */
- *postcopiable_pending += remaining_size;
+ *res_compatible += remaining_size;
} else {
- *non_postcopiable_pending += remaining_size;
+ *res_precopy_only += remaining_size;
}
}
diff --git a/migration/savevm.c b/migration/savevm.c
index 4a88228614..f6b62cb202 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1218,13 +1218,15 @@ int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
* for units that can't do postcopy.
*/
void qemu_savevm_state_pending(QEMUFile *f, uint64_t threshold_size,
- uint64_t *res_non_postcopiable,
- uint64_t *res_postcopiable)
+ uint64_t *res_precopy_only,
+ uint64_t *res_compatible,
+ uint64_t *res_postcopy_only)
{
SaveStateEntry *se;
- *res_non_postcopiable = 0;
- *res_postcopiable = 0;
+ *res_precopy_only = 0;
+ *res_compatible = 0;
+ *res_postcopy_only = 0;
QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
@@ -1237,7 +1239,8 @@ void qemu_savevm_state_pending(QEMUFile *f, uint64_t threshold_size,
}
}
se->ops->save_live_pending(f, se->opaque, threshold_size,
- res_non_postcopiable, res_postcopiable);
+ res_precopy_only, res_compatible,
+ res_postcopy_only);
}
}
diff --git a/migration/trace-events b/migration/trace-events
index 6f29fcc686..a04fffb877 100644
--- a/migration/trace-events
+++ b/migration/trace-events
@@ -86,7 +86,7 @@ migrate_fd_cleanup(void) ""
migrate_fd_error(const char *error_desc) "error=%s"
migrate_fd_cancel(void) ""
migrate_handle_rp_req_pages(const char *rbname, size_t start, size_t len) "in %s at 0x%zx len 0x%zx"
-migrate_pending(uint64_t size, uint64_t max, uint64_t post, uint64_t nonpost) "pending size %" PRIu64 " max %" PRIu64 " (post=%" PRIu64 " nonpost=%" PRIu64 ")"
+migrate_pending(uint64_t size, uint64_t max, uint64_t pre, uint64_t compat, uint64_t post) "pending size %" PRIu64 " max %" PRIu64 " (pre = %" PRIu64 " compat=%" PRIu64 " post=%" PRIu64 ")"
migrate_send_rp_message(int msg_type, uint16_t len) "%d: len %d"
migration_completion_file_err(void) ""
migration_completion_postcopy_end(void) ""
--
2.11.1
^ permalink raw reply related [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
` (15 preceding siblings ...)
2017-10-30 16:55 ` no-reply
@ 2017-10-30 18:22 ` Vladimir Sementsov-Ogievskiy
16 siblings, 0 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-10-30 18:22 UTC (permalink / raw)
To: qemu-block, qemu-devel
Cc: pbonzini, armbru, eblake, famz, stefanha, amit.shah, quintela,
mreitz, kwolf, peter.maydell, dgilbert, den, jsnow, lirans
30.10.2017 19:32, Vladimir Sementsov-Ogievskiy wrote:
> Hi all!
>
> There is a new version of dirty bitmap postcopy migration series.
>
> v8
>
> clone: tag postcopy-v8 from https://src.openvz.org/scm/~vsementsov/qemu.git
> online: https://src.openvz.org/users/vsementsov/repos/qemu/browse?at=postcopy-v8
compilation is broken for s390, so updated version is:
clone: tag postcopy-v8.1 from https://src.openvz.org/scm/~vsementsov/qemu.git
online: https://src.openvz.org/users/vsementsov/repos/qemu/browse?at=postcopy-v8.1
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 01/14] block/dirty-bitmap: add bdrv_dirty_bitmap_enable_successor()
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 01/14] block/dirty-bitmap: add bdrv_dirty_bitmap_enable_successor() Vladimir Sementsov-Ogievskiy
@ 2017-11-10 0:47 ` John Snow
0 siblings, 0 replies; 44+ messages in thread
From: John Snow @ 2017-11-10 0:47 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
> Enabling bitmap successor is necessary to enable successors of bitmaps
> being migrated before target vm start.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> include/block/dirty-bitmap.h | 1 +
> block/dirty-bitmap.c | 8 ++++++++
> 2 files changed, 9 insertions(+)
>
> diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
> index 3579a7597c..93d4336505 100644
> --- a/include/block/dirty-bitmap.h
> +++ b/include/block/dirty-bitmap.h
> @@ -20,6 +20,7 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
> BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
> BdrvDirtyBitmap *bitmap,
> Error **errp);
> +void bdrv_dirty_bitmap_enable_successor(BdrvDirtyBitmap *bitmap);
> BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs,
> const char *name);
> void bdrv_dirty_bitmap_make_anon(BdrvDirtyBitmap *bitmap);
> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
> index bd04e991b1..81adbeb6d4 100644
> --- a/block/dirty-bitmap.c
> +++ b/block/dirty-bitmap.c
> @@ -237,6 +237,14 @@ int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
> return 0;
> }
>
> +/* Called with BQL taken. */
> +void bdrv_dirty_bitmap_enable_successor(BdrvDirtyBitmap *bitmap)
> +{
> + qemu_mutex_lock(bitmap->mutex);
> + bdrv_enable_dirty_bitmap(bitmap->successor);
> + qemu_mutex_unlock(bitmap->mutex);
> +}
> +
> /**
> * For a bitmap with a successor, yield our name to the successor,
> * delete the old bitmap, and return a handle to the new bitmap.
>
Mechanically correct; though I haven't looked forward to how it's used yet.
Reviewed-by: John Snow <jsnow@redhat.com>
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 02/14] block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 02/14] block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap Vladimir Sementsov-Ogievskiy
@ 2017-11-10 22:52 ` John Snow
2017-11-16 8:56 ` Vladimir Sementsov-Ogievskiy
2017-11-17 8:07 ` Vladimir Sementsov-Ogievskiy
0 siblings, 2 replies; 44+ messages in thread
From: John Snow @ 2017-11-10 22:52 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
> It is needed to realize bdrv_dirty_bitmap_release_successor in
> the following patch.
>
OK, but...
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/dirty-bitmap.c | 25 ++++++++++++++++++++-----
> 1 file changed, 20 insertions(+), 5 deletions(-)
>
> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
> index 81adbeb6d4..981f99d362 100644
> --- a/block/dirty-bitmap.c
> +++ b/block/dirty-bitmap.c
> @@ -326,13 +326,13 @@ static bool bdrv_dirty_bitmap_has_name(BdrvDirtyBitmap *bitmap)
> return !!bdrv_dirty_bitmap_name(bitmap);
> }
>
> -/* Called with BQL taken. */
> -static void bdrv_do_release_matching_dirty_bitmap(
> +/* Called within bdrv_dirty_bitmap_lock..unlock */
...Add this so it will compile:
__attribute__((__unused__))
> +static void bdrv_do_release_matching_dirty_bitmap_locked(
> BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
> bool (*cond)(BdrvDirtyBitmap *bitmap))
> {
> BdrvDirtyBitmap *bm, *next;
> - bdrv_dirty_bitmaps_lock(bs);
> +
> QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
> if ((!bitmap || bm == bitmap) && (!cond || cond(bm))) {
> assert(!bm->active_iterators);
> @@ -344,18 +344,33 @@ static void bdrv_do_release_matching_dirty_bitmap(
> g_free(bm);
>
> if (bitmap) {
> - goto out;
> + return;
> }
> }
> }
> +
> if (bitmap) {
> abort();
> }
Do we have any style guide rules on using abort() instead of assert()?
The rest of this function uses assert, and it'd be less lines to simply
write:
assert(!bitmap);
which I think might also carry better semantic information for coverity
beyond an actual runtime conditional branch.
(I think. Please correct me if I am wrong, I'm a little hazy on this.)
> +}
>
> -out:
> +/* Called with BQL taken. */
> +static void bdrv_do_release_matching_dirty_bitmap(
> + BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
> + bool (*cond)(BdrvDirtyBitmap *bitmap))
> +{
> + bdrv_dirty_bitmaps_lock(bs);
> + bdrv_do_release_matching_dirty_bitmap_locked(bs, bitmap, cond);
> bdrv_dirty_bitmaps_unlock(bs);
> }
>
> +/* Called within bdrv_dirty_bitmap_lock..unlock */
> +static void bdrv_release_dirty_bitmap_locked(BlockDriverState *bs,
> + BdrvDirtyBitmap *bitmap)
> +{
> + bdrv_do_release_matching_dirty_bitmap_locked(bs, bitmap, NULL);
> +}
> +
> /* Called with BQL taken. */
> void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
> {
>
If you agree with those two changes, you may add:
Reviewed-by: John Snow <jsnow@redhat.com>
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 03/14] block/dirty-bitmap: add bdrv_dirty_bitmap_release_successor
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 03/14] block/dirty-bitmap: add bdrv_dirty_bitmap_release_successor Vladimir Sementsov-Ogievskiy
@ 2017-11-13 22:17 ` John Snow
0 siblings, 0 replies; 44+ messages in thread
From: John Snow @ 2017-11-13 22:17 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
> To just release successor and unfreeze bitmap without any additional
> work.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> ---
> include/block/dirty-bitmap.h | 2 ++
> block/dirty-bitmap.c | 14 ++++++++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
> index 93d4336505..a9e2a92e4f 100644
> --- a/include/block/dirty-bitmap.h
> +++ b/include/block/dirty-bitmap.h
> @@ -20,6 +20,8 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
> BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
> BdrvDirtyBitmap *bitmap,
> Error **errp);
> +void bdrv_dirty_bitmap_release_successor(BlockDriverState *bs,
> + BdrvDirtyBitmap *bitmap);
> void bdrv_dirty_bitmap_enable_successor(BdrvDirtyBitmap *bitmap);
> BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs,
> const char *name);
> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
> index 981f99d362..7578863aa1 100644
> --- a/block/dirty-bitmap.c
> +++ b/block/dirty-bitmap.c
> @@ -431,6 +431,20 @@ void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
> bitmap->disabled = false;
> }
>
> +/* Called with BQL taken. */
> +void bdrv_dirty_bitmap_release_successor(BlockDriverState *bs,
> + BdrvDirtyBitmap *parent)
> +{
> + qemu_mutex_lock(parent->mutex);
> +
> + if (parent->successor) {
> + bdrv_release_dirty_bitmap_locked(bs, parent->successor);
> + parent->successor = NULL;
> + }
> +
> + qemu_mutex_unlock(parent->mutex);
> +}
> +
> BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
> {
> BdrvDirtyBitmap *bm;
>
Not sure what this is useful for just yet, but it looks okay, tentatively..
Reviewed-by: John Snow <jsnow@redhat.com>
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 04/14] block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 04/14] block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen Vladimir Sementsov-Ogievskiy
@ 2017-11-13 23:32 ` John Snow
2017-11-17 14:46 ` Vladimir Sementsov-Ogievskiy
0 siblings, 1 reply; 44+ messages in thread
From: John Snow @ 2017-11-13 23:32 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel, famz
Cc: kwolf, peter.maydell, lirans, quintela, armbru, mreitz, stefanha,
den, amit.shah, pbonzini, dgilbert
On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
> Make it possible to set bitmap 'frozen' without a successor.
> This is needed to protect the bitmap during outgoing bitmap postcopy
> migration.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> include/block/dirty-bitmap.h | 1 +
> block/dirty-bitmap.c | 22 ++++++++++++++++++++--
> 2 files changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
> index a9e2a92e4f..ae6d697850 100644
> --- a/include/block/dirty-bitmap.h
> +++ b/include/block/dirty-bitmap.h
> @@ -39,6 +39,7 @@ uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs);
> uint32_t bdrv_dirty_bitmap_granularity(const BdrvDirtyBitmap *bitmap);
> bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap);
> bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap);
> +void bdrv_dirty_bitmap_set_frozen(BdrvDirtyBitmap *bitmap, bool frozen);
> const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap);
> int64_t bdrv_dirty_bitmap_size(const BdrvDirtyBitmap *bitmap);
> DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap);
> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
> index 7578863aa1..67fc6bd6e0 100644
> --- a/block/dirty-bitmap.c
> +++ b/block/dirty-bitmap.c
> @@ -40,6 +40,8 @@ struct BdrvDirtyBitmap {
> QemuMutex *mutex;
> HBitmap *bitmap; /* Dirty bitmap implementation */
> HBitmap *meta; /* Meta dirty bitmap */
> + bool frozen; /* Bitmap is frozen, it can't be modified
> + through QMP */
I hesitate, because this now means that we have two independent bits of
state we need to update and maintain consistency with.
Before:
Frozen: "Bitmap has a successor and is no longer itself recording
writes, though we are guaranteed to have a successor doing so on our
behalf."
After:
Frozen: "Bitmap may or may not have a successor, but it is disabled with
an even more limited subset of tasks than a traditionally disabled bitmap."
This changes the meaning of "frozen" a little, and I am not sure that is
a problem as such, but it does make the interface seem a little
"fuzzier" than it did prior.
> BdrvDirtyBitmap *successor; /* Anonymous child; implies frozen status */
> char *name; /* Optional non-empty unique ID */
> int64_t size; /* Size of the bitmap, in bytes */
> @@ -183,13 +185,22 @@ const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap)
> /* Called with BQL taken. */
> bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap)
> {
> - return bitmap->successor;
> + return bitmap->frozen;
> +}
Are there any cases where we will be unfrozen, but actually have a
successor now? If so, under what circumstances does that happen?
> +
> +/* Called with BQL taken. */
> +void bdrv_dirty_bitmap_set_frozen(BdrvDirtyBitmap *bitmap, bool frozen)
> +{
> + qemu_mutex_lock(bitmap->mutex);
> + assert(bitmap->successor == NULL);
> + bitmap->frozen = frozen;
> + qemu_mutex_unlock(bitmap->mutex);
> }
>
OK, so we can only "set frozen" (or unset) if we don't have a successor.
> /* Called with BQL taken. */
> bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
> {
> - return !(bitmap->disabled || bitmap->successor);
> + return !(bitmap->disabled || (bitmap->successor != NULL));
> }
>
I guess this just makes 'successor' more obviously non-boolean, which is
fine.
> /* Called with BQL taken. */
> @@ -234,6 +245,7 @@ int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
>
> /* Install the successor and freeze the parent */
> bitmap->successor = child;
> + bitmap->frozen = true;
> return 0;
> }
>
> @@ -266,6 +278,8 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
> name = bitmap->name;
> bitmap->name = NULL;
> successor->name = name;
> + assert(bitmap->frozen);
> + bitmap->frozen = false;
> bitmap->successor = NULL;
> successor->persistent = bitmap->persistent;
> bitmap->persistent = false;
> @@ -298,6 +312,8 @@ BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
> return NULL;
> }
> bdrv_release_dirty_bitmap(bs, successor);
> + assert(parent->frozen);
> + parent->frozen = false;
> parent->successor = NULL;
>
> return parent;
> @@ -439,6 +455,8 @@ void bdrv_dirty_bitmap_release_successor(BlockDriverState *bs,
>
> if (parent->successor) {
> bdrv_release_dirty_bitmap_locked(bs, parent->successor);
> + assert(parent->frozen);
> + parent->frozen = false;
> parent->successor = NULL;
> }
>
>
Tentatively:
Reviewed-by: John Snow <jsnow@redhat.com>
Fam, any thoughts?
--John
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8.1 05/14] migration: introduce postcopy-only pending
2017-10-30 18:19 ` [Qemu-devel] [PATCH v8.1 " Vladimir Sementsov-Ogievskiy
@ 2017-11-14 0:09 ` John Snow
0 siblings, 0 replies; 44+ messages in thread
From: John Snow @ 2017-11-14 0:09 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
On 10/30/2017 02:19 PM, Vladimir Sementsov-Ogievskiy wrote:
> There would be savevm states (dirty-bitmap) which can migrate only in
> postcopy stage. The corresponding pending is introduced here.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> Reviewed-by: Juan Quintela <quintela@redhat.com>
> ---
>
> 8.1: add new version for cmma_save_pending too.
I love "8.1" :)
With this fixup applied to fix the s390x build issue,
Reviewed-by: John Snow <jsnow@redhat.com>
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 07/14] migration: include migrate_dirty_bitmaps in migrate_postcopy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 07/14] migration: include migrate_dirty_bitmaps in migrate_postcopy Vladimir Sementsov-Ogievskiy
@ 2017-11-14 0:19 ` John Snow
0 siblings, 0 replies; 44+ messages in thread
From: John Snow @ 2017-11-14 0:19 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
On 10/30/2017 12:33 PM, Vladimir Sementsov-Ogievskiy wrote:
> Enable postcopy if dirty bitmap migration is endabled.
>
"enabled"
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 09/14] migration: add is_active_iterate handler
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 09/14] migration: add is_active_iterate handler Vladimir Sementsov-Ogievskiy
@ 2017-11-14 0:29 ` John Snow
0 siblings, 0 replies; 44+ messages in thread
From: John Snow @ 2017-11-14 0:29 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
On 10/30/2017 12:33 PM, Vladimir Sementsov-Ogievskiy wrote:
> Only-postcopy savevm states (dirty-bitmap) don't need live iteration, so
> to disable them and stop transporting empty sections there is a new
> savevm handler.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 10/14] migration: add postcopy migration of dirty bitmaps
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 10/14] migration: add postcopy migration of dirty bitmaps Vladimir Sementsov-Ogievskiy
@ 2017-11-15 1:58 ` John Snow
2017-11-16 10:24 ` Vladimir Sementsov-Ogievskiy
2017-11-16 16:50 ` Dr. David Alan Gilbert
0 siblings, 2 replies; 44+ messages in thread
From: John Snow @ 2017-11-15 1:58 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
On 10/30/2017 12:33 PM, Vladimir Sementsov-Ogievskiy wrote:
> Postcopy migration of dirty bitmaps. Only named dirty bitmaps,
> associated with root nodes and non-root named nodes are migrated.
>
> If destination qemu is already containing a dirty bitmap with the same name
> as a migrated bitmap (for the same node), then, if their granularities are
> the same the migration will be done, otherwise the error will be generated.
>
> If destination qemu doesn't contain such bitmap it will be created.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> include/migration/misc.h | 3 +
> migration/migration.h | 3 +
> migration/block-dirty-bitmap.c | 734 +++++++++++++++++++++++++++++++++++++++++
Ouch :\
> migration/migration.c | 3 +
> migration/savevm.c | 2 +
> vl.c | 1 +
> migration/Makefile.objs | 1 +
> migration/trace-events | 14 +
> 8 files changed, 761 insertions(+)
> create mode 100644 migration/block-dirty-bitmap.c
>
Organizationally, you introduce three new 'public' prototypes:
dirty_bitmap_mig_init
dirty_bitmap_mig_before_vm_start
init_dirty_bitmap_incoming_migration
mig_init is advertised in migration/misc.h, the other two are in
migration/migration.h.
The definitions for all three are in migration/block-dirty-bitmap.c
In pure naivety, I find it weird to have something that you use in
migration.c and advertised in migration.h actually exist separately in
block-dirty-bitmap.c; but maybe this is the sanest thing to do.
> diff --git a/include/migration/misc.h b/include/migration/misc.h
> index c079b7771b..9cc539e232 100644
> --- a/include/migration/misc.h
> +++ b/include/migration/misc.h
> @@ -55,4 +55,7 @@ bool migration_has_failed(MigrationState *);
> bool migration_in_postcopy_after_devices(MigrationState *);
> void migration_global_dump(Monitor *mon);
>
> +/* migration/block-dirty-bitmap.c */
> +void dirty_bitmap_mig_init(void);
> +
> #endif
> diff --git a/migration/migration.h b/migration/migration.h
> index 50d1f01346..4e3ad04664 100644
> --- a/migration/migration.h
> +++ b/migration/migration.h
> @@ -211,4 +211,7 @@ void migrate_send_rp_pong(MigrationIncomingState *mis,
> void migrate_send_rp_req_pages(MigrationIncomingState *mis, const char* rbname,
> ram_addr_t start, size_t len);
>
> +void dirty_bitmap_mig_before_vm_start(void);
> +void init_dirty_bitmap_incoming_migration(void);
> +
> #endif
> diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
> new file mode 100644
> index 0000000000..53cb20045d
> --- /dev/null
> +++ b/migration/block-dirty-bitmap.c
> @@ -0,0 +1,734 @@
> +/*
> + * Block dirty bitmap postcopy migration
> + *
> + * Copyright IBM, Corp. 2009
> + * Copyright (c) 2016-2017 Parallels International GmbH
> + *
> + * Authors:
> + * Liran Schour <lirans@il.ibm.com>
> + * Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2. See
> + * the COPYING file in the top-level directory.
> + * This file is derived from migration/block.c, so it's author and IBM copyright
> + * are here, although content is quite different.
> + *
> + * Contributions after 2012-01-13 are licensed under the terms of the
> + * GNU GPL, version 2 or (at your option) any later version.
> + *
> + * ***
> + *
> + * Here postcopy migration of dirty bitmaps is realized. Only named dirty
> + * bitmaps, associated with root nodes and non-root named nodes are migrated.
Put another way, only QMP-addressable bitmaps. Nodes without a name that
are not the root have no way to be addressed.
> + *
> + * If destination qemu is already containing a dirty bitmap with the same name
"If the destination QEMU already contains a dirty bitmap with the same name"
> + * as a migrated bitmap (for the same node), then, if their granularities are
> + * the same the migration will be done, otherwise the error will be generated.
"an error"
> + *
> + * If destination qemu doesn't contain such bitmap it will be created.
"If the destination QEMU doesn't contain such a bitmap, it will be created."
> + *
> + * format of migration:
> + *
> + * # Header (shared for different chunk types)
> + * 1, 2 or 4 bytes: flags (see qemu_{put,put}_flags)
> + * [ 1 byte: node name size ] \ flags & DEVICE_NAME
> + * [ n bytes: node name ] /
> + * [ 1 byte: bitmap name size ] \ flags & BITMAP_NAME
> + * [ n bytes: bitmap name ] /
> + *
> + * # Start of bitmap migration (flags & START)
> + * header
> + * be64: granularity
> + * 1 byte: bitmap flags (corresponds to BdrvDirtyBitmap)
> + * bit 0 - bitmap is enabled
> + * bit 1 - bitmap is persistent
> + * bit 2 - bitmap is autoloading
> + * bits 3-7 - reserved, must be zero
> + *
> + * # Complete of bitmap migration (flags & COMPLETE)
> + * header
> + *
> + * # Data chunk of bitmap migration
> + * header
> + * be64: start sector
> + * be32: number of sectors
> + * [ be64: buffer size ] \ ! (flags & ZEROES)
> + * [ n bytes: buffer ] /
> + *
> + * The last chunk in stream should contain flags & EOS. The chunk may skip
> + * device and/or bitmap names, assuming them to be the same with the previous
> + * chunk.
> + */
> +
Been a while since I reviewed the format, but it seems sane.
> +#include "qemu/osdep.h"
> +#include "block/block.h"
> +#include "block/block_int.h"
> +#include "sysemu/block-backend.h"
> +#include "qemu/main-loop.h"
> +#include "qemu/error-report.h"
> +#include "migration/misc.h"
> +#include "migration/migration.h"
> +#include "migration/qemu-file.h"
> +#include "migration/vmstate.h"
> +#include "migration/register.h"
> +#include "qemu/hbitmap.h"
> +#include "sysemu/sysemu.h"
> +#include "qemu/cutils.h"
> +#include "qapi/error.h"
> +#include "trace.h"
> +
> +#define CHUNK_SIZE (1 << 10)
> +
> +/* Flags occupy one, two or four bytes (Big Endian). The size is determined as
> + * follows:
> + * in first (most significant) byte bit 8 is clear --> one byte
> + * in first byte bit 8 is set --> two or four bytes, depending on second
> + * byte:
> + * | in second byte bit 8 is clear --> two bytes
> + * | in second byte bit 8 is set --> four bytes
> + */
> +#define DIRTY_BITMAP_MIG_FLAG_EOS 0x01
> +#define DIRTY_BITMAP_MIG_FLAG_ZEROES 0x02
> +#define DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME 0x04
> +#define DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME 0x08
> +#define DIRTY_BITMAP_MIG_FLAG_START 0x10
> +#define DIRTY_BITMAP_MIG_FLAG_COMPLETE 0x20
> +#define DIRTY_BITMAP_MIG_FLAG_BITS 0x40
> +
> +#define DIRTY_BITMAP_MIG_EXTRA_FLAGS 0x80
> +
> +#define DIRTY_BITMAP_MIG_START_FLAG_ENABLED 0x01
> +#define DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT 0x02
> +#define DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD 0x04
> +#define DIRTY_BITMAP_MIG_START_FLAG_RESERVED_MASK 0xf8
> +
> +typedef struct DirtyBitmapMigBitmapState {
> + /* Written during setup phase. */
> + BlockDriverState *bs;
> + const char *node_name;
> + BdrvDirtyBitmap *bitmap;
> + uint64_t total_sectors;
> + uint64_t sectors_per_chunk;
> + QSIMPLEQ_ENTRY(DirtyBitmapMigBitmapState) entry;
> + uint8_t flags;
> +
> + /* For bulk phase. */
> + bool bulk_completed;
> + uint64_t cur_sector;
> +} DirtyBitmapMigBitmapState;
> +
> +typedef struct DirtyBitmapMigState {
> + QSIMPLEQ_HEAD(dbms_list, DirtyBitmapMigBitmapState) dbms_list;
> +
> + bool bulk_completed;
> +
> + /* for send_bitmap_bits() */
> + BlockDriverState *prev_bs;
> + BdrvDirtyBitmap *prev_bitmap;
> +} DirtyBitmapMigState;
> +
> +typedef struct DirtyBitmapLoadState {
> + uint32_t flags;
> + char node_name[256];
> + char bitmap_name[256];
> + BlockDriverState *bs;
> + BdrvDirtyBitmap *bitmap;
> +} DirtyBitmapLoadState;
> +
> +static DirtyBitmapMigState dirty_bitmap_mig_state;
> +
> +typedef struct DirtyBitmapLoadBitmapState {
> + BlockDriverState *bs;
> + BdrvDirtyBitmap *bitmap;
> + bool migrated;
> +} DirtyBitmapLoadBitmapState;
> +static GSList *enabled_bitmaps;
> +QemuMutex finish_lock;
> +
> +void init_dirty_bitmap_incoming_migration(void)
> +{
> + qemu_mutex_init(&finish_lock);
> +}
> +
This is a little odd as public interface. David, is there a nicer way to
integrate in-migrate hooks? I guess it hasn't come up yet. Anyway, it
might be nice to leave a comment here for now that says that the only
caller is migration.c, and it will only ever call it once.
> +static uint32_t qemu_get_bitmap_flags(QEMUFile *f)
> +{
> + uint8_t flags = qemu_get_byte(f);
> + if (flags & DIRTY_BITMAP_MIG_EXTRA_FLAGS) {
> + flags = flags << 8 | qemu_get_byte(f);
> + if (flags & DIRTY_BITMAP_MIG_EXTRA_FLAGS) {
> + flags = flags << 16 | qemu_get_be16(f);
> + }
> + }
> +
> + return flags;
> +}
> +
ok
(Sorry for the per-function ACKs, it's just helpful for me to know which
functions I followed execution of on paper to make sure I got everything
in this big patch.)
> +static void qemu_put_bitmap_flags(QEMUFile *f, uint32_t flags)
> +{
> + /* The code currently do not send flags more than one byte */
> + assert(!(flags & (0xffffff00 | DIRTY_BITMAP_MIG_EXTRA_FLAGS)));
> +
> + qemu_put_byte(f, flags);
> +}
> +
ok
> +static void send_bitmap_header(QEMUFile *f, DirtyBitmapMigBitmapState *dbms,
> + uint32_t additional_flags)
> +{
> + BlockDriverState *bs = dbms->bs;
> + BdrvDirtyBitmap *bitmap = dbms->bitmap;
> + uint32_t flags = additional_flags;
> + trace_send_bitmap_header_enter();
> +
> + if (bs != dirty_bitmap_mig_state.prev_bs) {
> + dirty_bitmap_mig_state.prev_bs = bs;
> + flags |= DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME;
> + }
> +
> + if (bitmap != dirty_bitmap_mig_state.prev_bitmap) {
> + dirty_bitmap_mig_state.prev_bitmap = bitmap;
> + flags |= DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME;
> + }
> +
I guess the idea here is that we might be able to skip the node name
broadcast, leaving the possibilities as:
- new node and bitmap: send both
- new bitmap, but not node: send bitmap name only
- same for both: send neither
and that otherwise it's not possible to have a new node but "same
bitmap" by nature of how the structures are organized.
> + qemu_put_bitmap_flags(f, flags);
> +
> + if (flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) {
> + qemu_put_counted_string(f, dbms->node_name);
> + }
> +
> + if (flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) {
> + qemu_put_counted_string(f, bdrv_dirty_bitmap_name(bitmap));
> + }
> +}
> +
ok
> +static void send_bitmap_start(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
> +{
> + send_bitmap_header(f, dbms, DIRTY_BITMAP_MIG_FLAG_START);
> + qemu_put_be32(f, bdrv_dirty_bitmap_granularity(dbms->bitmap));
> + qemu_put_byte(f, dbms->flags);
> +}
> +
ok
> +static void send_bitmap_complete(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
> +{
> + send_bitmap_header(f, dbms, DIRTY_BITMAP_MIG_FLAG_COMPLETE);
> +}
> +
ok
> +static void send_bitmap_bits(QEMUFile *f, DirtyBitmapMigBitmapState *dbms,
> + uint64_t start_sector, uint32_t nr_sectors)
> +{
> + /* align for buffer_is_zero() */
> + uint64_t align = 4 * sizeof(long);
> + uint64_t unaligned_size =
> + bdrv_dirty_bitmap_serialization_size(
> + dbms->bitmap, start_sector << BDRV_SECTOR_BITS,
> + (uint64_t)nr_sectors << BDRV_SECTOR_BITS);
> + uint64_t buf_size = (unaligned_size + align - 1) & ~(align - 1);
> + uint8_t *buf = g_malloc0(buf_size);
> + uint32_t flags = DIRTY_BITMAP_MIG_FLAG_BITS;
> +
> + bdrv_dirty_bitmap_serialize_part(
> + dbms->bitmap, buf, start_sector << BDRV_SECTOR_BITS,
> + (uint64_t)nr_sectors << BDRV_SECTOR_BITS);
> +
> + if (buffer_is_zero(buf, buf_size)) {
> + g_free(buf);
> + buf = NULL;
> + flags |= DIRTY_BITMAP_MIG_FLAG_ZEROES;
> + }
> +
> + trace_send_bitmap_bits(flags, start_sector, nr_sectors, buf_size);
> +
> + send_bitmap_header(f, dbms, flags);
> +
> + qemu_put_be64(f, start_sector);
> + qemu_put_be32(f, nr_sectors);
> +
> + /* if a block is zero we need to flush here since the network
> + * bandwidth is now a lot higher than the storage device bandwidth.
> + * thus if we queue zero blocks we slow down the migration. */
Can you elaborate on this for me?
> + if (flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
> + qemu_fflush(f);
> + } else {
> + qemu_put_be64(f, buf_size);
> + qemu_put_buffer(f, buf, buf_size);
> + }
> +
> + g_free(buf);
> +}
> +
> +
> +/* Called with iothread lock taken. */
> +
> +static int init_dirty_bitmap_migration(void)
> +{
> + BlockDriverState *bs;
> + BdrvDirtyBitmap *bitmap;
> + DirtyBitmapMigBitmapState *dbms;
> + BdrvNextIterator it;
> +
> + dirty_bitmap_mig_state.bulk_completed = false;
> + dirty_bitmap_mig_state.prev_bs = NULL;
> + dirty_bitmap_mig_state.prev_bitmap = NULL;
> +
> + for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
> + if (!bdrv_get_device_or_node_name(bs)) {
> + /* not named non-root node */
I can't imagine the situation it would arise in, but is it possible to
have a named bitmap attached to a now-anonymous node?
Let's say we attach a bitmap to a root node, but then later we insert a
filter or something above it and it's no longer at the root.
We should probably prohibit such things, or at the very least toss out
an error here instead of silently continuing.
I think the only things valid to just *skip* are nameless bitmaps.
Anything named we really ought to either migrate or error out over, I
think, even if the circumstances leading to such a configuration are
very unlikely.
> + continue;
> + }
> +
> + for (bitmap = bdrv_dirty_bitmap_next(bs, NULL); bitmap;
> + bitmap = bdrv_dirty_bitmap_next(bs, bitmap)) {
> + if (!bdrv_dirty_bitmap_name(bitmap)) {
> + continue;
> + }
> +
> + if (bdrv_dirty_bitmap_frozen(bitmap)) {
> + error_report("Can't migrate frozen dirty bitmap: '%s",
> + bdrv_dirty_bitmap_name(bitmap));
> + return -1;
> + }
> + }
> + }
> +
> + for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
> + if (!bdrv_get_device_or_node_name(bs)) {
> + /* not named non-root node */
> + continue;
> + }
Why two-pass? I guess because we don't have to tear anything down if we
check for errors in advance?
I worry that if we need to amend the logic here that it's error-prone to
update it in two places, so maybe we ought to just have one loop.
> +
> + for (bitmap = bdrv_dirty_bitmap_next(bs, NULL); bitmap;
> + bitmap = bdrv_dirty_bitmap_next(bs, bitmap)) {
> + if (!bdrv_dirty_bitmap_name(bitmap)) {
> + continue;
> + }
> +
> + bdrv_ref(bs);
> + bdrv_dirty_bitmap_set_frozen(bitmap, true);
> +
We could say that for any bitmap in the list of pending bitmaps to
migrate, we know that we have to un-freeze it, since we never add any
bitmaps that are frozen to our list.
> + dbms = g_new0(DirtyBitmapMigBitmapState, 1);
> + dbms->bs = bs;
> + dbms->node_name = bdrv_get_node_name(bs);
> + if (!dbms->node_name || dbms->node_name[0] == '\0') {
> + dbms->node_name = bdrv_get_device_name(bs);
> + }
> + dbms->bitmap = bitmap;
> + dbms->total_sectors = bdrv_nb_sectors(bs);
> + dbms->sectors_per_chunk = CHUNK_SIZE * 8 *
> + bdrv_dirty_bitmap_granularity(bitmap) >> BDRV_SECTOR_BITS;
Eric may want to avoid checking in new code that thinks in sectors, but
for the sake of review I don't mind right now.
(Sorry, Eric!)
> + if (bdrv_dirty_bitmap_enabled(bitmap)) {
> + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_ENABLED;
> + }
> + if (bdrv_dirty_bitmap_get_persistance(bitmap)) {
> + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT;
> + }
> + if (bdrv_dirty_bitmap_get_autoload(bitmap)) {
> + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD;
> + }
> +
> + bdrv_dirty_bitmap_set_persistance(bitmap, false);
Oh, this might be stranger to undo. Perhaps what we CAN do is limit the
second pass to just this action and allow ourselves to unroll everything
else.
> +
> + QSIMPLEQ_INSERT_TAIL(&dirty_bitmap_mig_state.dbms_list,
> + dbms, entry);
> + }
> + }
> +
> + return 0;
> +}
> +
> +/* Called with no lock taken. */
> +static void bulk_phase_send_chunk(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
> +{
> + uint32_t nr_sectors = MIN(dbms->total_sectors - dbms->cur_sector,
> + dbms->sectors_per_chunk);
> +
> + send_bitmap_bits(f, dbms, dbms->cur_sector, nr_sectors);
> +
> + dbms->cur_sector += nr_sectors;
> + if (dbms->cur_sector >= dbms->total_sectors) {
> + dbms->bulk_completed = true;
> + }
> +}
> +
> +/* Called with no lock taken. */
> +static void bulk_phase(QEMUFile *f, bool limit)
> +{
> + DirtyBitmapMigBitmapState *dbms;
> +
> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
> + while (!dbms->bulk_completed) {
> + bulk_phase_send_chunk(f, dbms);
> + if (limit && qemu_file_rate_limit(f)) {
> + return;
> + }
> + }
> + }
> +
> + dirty_bitmap_mig_state.bulk_completed = true;
> +}
> +
> +/* Called with iothread lock taken. */
> +static void dirty_bitmap_mig_cleanup(void)
> +{
> + DirtyBitmapMigBitmapState *dbms;
> +
> + while ((dbms = QSIMPLEQ_FIRST(&dirty_bitmap_mig_state.dbms_list)) != NULL) {
> + QSIMPLEQ_REMOVE_HEAD(&dirty_bitmap_mig_state.dbms_list, entry);
> + bdrv_dirty_bitmap_set_frozen(dbms->bitmap, false);
> + bdrv_unref(dbms->bs);
> + g_free(dbms);
> + }
> +}
> +
ok
> +/* for SaveVMHandlers */
> +static void dirty_bitmap_save_cleanup(void *opaque)
> +{
> + dirty_bitmap_mig_cleanup();
> +}
> +
ok
> +static int dirty_bitmap_save_iterate(QEMUFile *f, void *opaque)
> +{
> + trace_dirty_bitmap_save_iterate(migration_in_postcopy());
> +
> + if (migration_in_postcopy() && !dirty_bitmap_mig_state.bulk_completed) {
> + bulk_phase(f, true);
> + }
> +
> + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
> +
> + return dirty_bitmap_mig_state.bulk_completed;
> +}
> +
What's the purpose behind doing bulk save both here and in
dirty_bitmap_save_complete? Is there a path that isn't guaranteed to
call one of the completion functions?
(The way it's coded seems like it'll work fine, but I'm curious about
what looks like a redundancy at a glance.)
> +/* Called with iothread lock taken. */
> +
> +static int dirty_bitmap_save_complete(QEMUFile *f, void *opaque)
> +{
> + DirtyBitmapMigBitmapState *dbms;
> + trace_dirty_bitmap_save_complete_enter();
> +
> + if (!dirty_bitmap_mig_state.bulk_completed) {
> + bulk_phase(f, false);
> + }
> +
funny now that we don't actually really iterate over the data, and the
bulk phase is now really the _only_ phase :)
> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
> + send_bitmap_complete(f, dbms);
> + }
> +
> + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
> +
> + trace_dirty_bitmap_save_complete_finish();
> +
> + dirty_bitmap_mig_cleanup();
> + return 0;
> +}
> +
ok
> +static void dirty_bitmap_save_pending(QEMUFile *f, void *opaque,
> + uint64_t max_size,
> + uint64_t *res_precopy_only,
> + uint64_t *res_compatible,
> + uint64_t *res_postcopy_only)
> +{
> + DirtyBitmapMigBitmapState *dbms;
> + uint64_t pending = 0;
> +
> + qemu_mutex_lock_iothread();
> +
> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
> + uint64_t gran = bdrv_dirty_bitmap_granularity(dbms->bitmap);
> + uint64_t sectors = dbms->bulk_completed ? 0 :
> + dbms->total_sectors - dbms->cur_sector;
> +
> + pending += (sectors * BDRV_SECTOR_SIZE + gran - 1) / gran;
> + }
> +
> + qemu_mutex_unlock_iothread();
> +
> + trace_dirty_bitmap_save_pending(pending, max_size);
> +
> + *res_postcopy_only += pending;
> +}
> +
ok
> +/* First occurrence of this bitmap. It should be created if doesn't exist */
> +static int dirty_bitmap_load_start(QEMUFile *f, DirtyBitmapLoadState *s)
> +{
> + Error *local_err = NULL;
> + uint32_t granularity = qemu_get_be32(f);
> + uint8_t flags = qemu_get_byte(f);
> +
> + if (!s->bitmap) {
> + s->bitmap = bdrv_create_dirty_bitmap(s->bs, granularity,
> + s->bitmap_name, &local_err);
> + if (!s->bitmap) {
> + error_report_err(local_err);
> + return -EINVAL;
> + }
> + } else {
> + uint32_t dest_granularity =
> + bdrv_dirty_bitmap_granularity(s->bitmap);
> + if (dest_granularity != granularity) {
> + error_report("Error: "
> + "Migrated bitmap granularity (%" PRIu32 ") "
> + "doesn't match the destination bitmap '%s' "
> + "granularity (%" PRIu32 ")",
> + granularity,
> + bdrv_dirty_bitmap_name(s->bitmap),
> + dest_granularity);
> + return -EINVAL;
> + }
> + }
> +
I'm a fan of auto-creating the bitmaps. Do you have a use-case for why
creating them ahead of time is better, or are you just attempting to be
flexible?
> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_RESERVED_MASK) {
> + error_report("Unknown flags in migrated dirty bitmap header: %x",
> + flags);
> + return -EINVAL;
> + }
> +
> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT) {
> + bdrv_dirty_bitmap_set_persistance(s->bitmap, true);
> + }
> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD) {
> + bdrv_dirty_bitmap_set_autoload(s->bitmap, true);
> + }
> +
> + bdrv_disable_dirty_bitmap(s->bitmap);
OK, so we start them off as disabled, and
> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_ENABLED) {
> + DirtyBitmapLoadBitmapState *b;
> +
> + bdrv_dirty_bitmap_create_successor(s->bs, s->bitmap, &local_err);
> + if (local_err) {
> + error_report_err(local_err);
> + return -EINVAL;
> + }
> +
If they weren't disabled on the host, we create a successor to record
writes while we wait for the rest of the data to arrive.
> + b = g_new(DirtyBitmapLoadBitmapState, 1);
> + b->bs = s->bs;
> + b->bitmap = s->bitmap;
> + b->migrated = false;
> + enabled_bitmaps = g_slist_prepend(enabled_bitmaps, b);
And we make a note of which ones we were supposed to re-enable.
> + }
> +
> + return 0;
> +}
OK
> +
> +void dirty_bitmap_mig_before_vm_start(void)
Similarly, I guess I find it weird that this is a callable interface.
David, no nice hook for just-prior-to-vm-start calls? a
.postcopy_pivot() hook or something might be nice..
> +{
> + GSList *item;
> +
> + qemu_mutex_lock(&finish_lock);
> +
> + for (item = enabled_bitmaps; item; item = g_slist_next(item)) {
> + DirtyBitmapLoadBitmapState *b = item->data;
> +
Anyway, if I am reading this right; we call this in the postcopy phase
prior to receiving the entirety of the bitmaps (so before receiving
COMPLETE) ... right?
> + if (b->migrated) {
> + bdrv_enable_dirty_bitmap(b->bitmap);
...or, am I confused, and we might receive a COMPLETE event prior to the
postcopy pivot?
Anyway, I suppose this code says "If we received the entire bitmap, go
ahead and enable it."
> + } else {
> + bdrv_dirty_bitmap_enable_successor(b->bitmap);
And this says "If we haven't received it yet, enable the successor to
record writes until we get the rest of the data."
> + }
> +
> + g_free(b);
> + }
> +
> + g_slist_free(enabled_bitmaps);
> + enabled_bitmaps = NULL;
> +
> + qemu_mutex_unlock(&finish_lock);
> +}
> +
> +static void dirty_bitmap_load_complete(QEMUFile *f, DirtyBitmapLoadState *s)
> +{
> + GSList *item;
> + trace_dirty_bitmap_load_complete();
> + bdrv_dirty_bitmap_deserialize_finish(s->bitmap);
> +
> + qemu_mutex_lock(&finish_lock);
> +
> + for (item = enabled_bitmaps; item; item = g_slist_next(item)) {
> + DirtyBitmapLoadBitmapState *b = item->data;
> +
> + if (b->bitmap == s->bitmap) {
> + b->migrated = true;
we can probably break; here now, right?
(This whole stanza is a little strange, can't we cache the active
DirtyBitmapLoadBitmapState in DirtyBitmapLoadState? I guess not, because
we're looking up the BdrvDirtyBitmap itself and caching that instead, so
either way we have some kind of lookup on every context switch.)
> + }
> + }
> +
> + if (bdrv_dirty_bitmap_frozen(s->bitmap)) {
> + if (enabled_bitmaps == NULL) {
> + /* in postcopy */
> + AioContext *aio_context = bdrv_get_aio_context(s->bs);
> + aio_context_acquire(aio_context);
> +
> + bdrv_reclaim_dirty_bitmap(s->bs, s->bitmap, &error_abort);
> + bdrv_enable_dirty_bitmap(s->bitmap);
> +
OK, so if enabled_bitmaps is gone, that means we already pivoted and
we're live on the receiving end here. We merge the successor into the
fully deserialized bitmap and enable it.
> + aio_context_release(aio_context);
> + } else {
> + /* target not started, successor is empty */
> + bdrv_dirty_bitmap_release_successor(s->bs, s->bitmap);
Otherwise we just trash the successor. Did we really need a new call for
this? I suppose it's faster than merging a 0-bit bitmap, but the
additional API complexity for the speed win here seems like premature
optimization.
...well, you already wrote it, so I won't argue.
> + }
> + }
> +
> + qemu_mutex_unlock(&finish_lock);
> +}
> +
> +static int dirty_bitmap_load_bits(QEMUFile *f, DirtyBitmapLoadState *s)
> +{
> + uint64_t first_byte = qemu_get_be64(f) << BDRV_SECTOR_BITS;
> + uint64_t nr_bytes = (uint64_t)qemu_get_be32(f) << BDRV_SECTOR_BITS;
> + trace_dirty_bitmap_load_bits_enter(first_byte >> BDRV_SECTOR_BITS,
> + nr_bytes >> BDRV_SECTOR_BITS);
> +
> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
> + trace_dirty_bitmap_load_bits_zeroes();
> + bdrv_dirty_bitmap_deserialize_zeroes(s->bitmap, first_byte, nr_bytes,
> + false);
> + } else {
> + uint8_t *buf;
> + uint64_t buf_size = qemu_get_be64(f);
> + uint64_t needed_size =
> + bdrv_dirty_bitmap_serialization_size(s->bitmap,
> + first_byte, nr_bytes);
> +
> + if (needed_size > buf_size) {
> + error_report("Error: Migrated bitmap granularity doesn't "
> + "match the destination bitmap '%s' granularity",
> + bdrv_dirty_bitmap_name(s->bitmap));
> + return -EINVAL;
> + }
> +
> + buf = g_malloc(buf_size);
> + qemu_get_buffer(f, buf, buf_size);
> + bdrv_dirty_bitmap_deserialize_part(s->bitmap, buf, first_byte, nr_bytes,
> + false);
> + g_free(buf);
> + }
> +
> + return 0;
> +}
> +
ok
> +static int dirty_bitmap_load_header(QEMUFile *f, DirtyBitmapLoadState *s)
> +{
> + Error *local_err = NULL;
> + s->flags = qemu_get_bitmap_flags(f);
> + trace_dirty_bitmap_load_header(s->flags);
> +
> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) {
> + if (!qemu_get_counted_string(f, s->node_name)) {
> + error_report("Unable to read node name string");
> + return -EINVAL;
> + }
> + s->bs = bdrv_lookup_bs(s->node_name, s->node_name, &local_err);
> + if (!s->bs) {
> + error_report_err(local_err);
> + return -EINVAL;
> + }
> + } else if (!s->bs) {
> + error_report("Error: block device name is not set");
> + return -EINVAL;
> + }
> +
> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) {
> + if (!qemu_get_counted_string(f, s->bitmap_name)) {
> + error_report("Unable to read node name string");
> + return -EINVAL;
> + }
> + s->bitmap = bdrv_find_dirty_bitmap(s->bs, s->bitmap_name);
> +
> + /* bitmap may be NULL here, it wouldn't be an error if it is the
> + * first occurrence of the bitmap */
> + if (!s->bitmap && !(s->flags & DIRTY_BITMAP_MIG_FLAG_START)) {
> + error_report("Error: unknown dirty bitmap "
> + "'%s' for block device '%s'",
> + s->bitmap_name, s->node_name);
> + return -EINVAL;
> + }
> + } else if (!s->bitmap) {
> + error_report("Error: block device name is not set");
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
ok
> +static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id)
> +{
> + static DirtyBitmapLoadState s;
> + int ret = 0;
> +
> + trace_dirty_bitmap_load_enter();
> +
> + if (version_id != 1) {
> + return -EINVAL;
> + }
> +
> + do {
> + dirty_bitmap_load_header(f, &s);
> +
> + if (s.flags & DIRTY_BITMAP_MIG_FLAG_START) {
> + ret = dirty_bitmap_load_start(f, &s);
> + } else if (s.flags & DIRTY_BITMAP_MIG_FLAG_COMPLETE) {
> + dirty_bitmap_load_complete(f, &s);
> + } else if (s.flags & DIRTY_BITMAP_MIG_FLAG_BITS) {
> + ret = dirty_bitmap_load_bits(f, &s);
> + }
> +
> + if (!ret) {
> + ret = qemu_file_get_error(f);
> + }
> +
> + if (ret) {
> + return ret;
> + }
> + } while (!(s.flags & DIRTY_BITMAP_MIG_FLAG_EOS));
> +
> + trace_dirty_bitmap_load_success();
> + return 0;
> +}
OK
> +
> +static int dirty_bitmap_save_setup(QEMUFile *f, void *opaque)
> +{
> + DirtyBitmapMigBitmapState *dbms = NULL;
> + if (init_dirty_bitmap_migration() < 0) {
> + return -1;
> + }
> +
> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
> + send_bitmap_start(f, dbms);
> + }
> + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
> +
> + return 0;
> +}
> +
ok
> +static bool dirty_bitmap_is_active(void *opaque)
> +{
> + return migrate_dirty_bitmaps();
> +}
> +
ok
> +static bool dirty_bitmap_is_active_iterate(void *opaque)
> +{
> + return dirty_bitmap_is_active(opaque) && !runstate_is_running();
> +}
> +
On second thought, in patch 9, can you add a little tiny bit of
documentation text explaining the exact nature of this callback?
Is the second portion of the conditional here so that once we reach the
postcopy state that .is_active_iterate starts returning true?
"ok" if I'm reading this right, but it might be helped along by a little
comment.
> +static bool dirty_bitmap_has_postcopy(void *opaque)
> +{
> + return true;
> +}
> +
ok! :)
> +static SaveVMHandlers savevm_dirty_bitmap_handlers = {
> + .save_setup = dirty_bitmap_save_setup,
> + .save_live_complete_postcopy = dirty_bitmap_save_complete,
> + .save_live_complete_precopy = dirty_bitmap_save_complete,
> + .has_postcopy = dirty_bitmap_has_postcopy,
> + .save_live_pending = dirty_bitmap_save_pending,
> + .save_live_iterate = dirty_bitmap_save_iterate,
> + .is_active_iterate = dirty_bitmap_is_active_iterate,
> + .load_state = dirty_bitmap_load,
> + .save_cleanup = dirty_bitmap_save_cleanup,
> + .is_active = dirty_bitmap_is_active,
> +};
> +
> +void dirty_bitmap_mig_init(void)
> +{
> + QSIMPLEQ_INIT(&dirty_bitmap_mig_state.dbms_list);
> +
> + register_savevm_live(NULL, "dirty-bitmap", 0, 1,
> + &savevm_dirty_bitmap_handlers,
> + &dirty_bitmap_mig_state);
> +}
ok
dgilbert, would it be worth registering a block-driver-like registration
trick that automatically invokes these functions instead of having to
hook them up in vl.c? the more we add, the more hacky it looks to not
have some subsystem-wide registration hook.
> diff --git a/migration/migration.c b/migration/migration.c
> index e973837bfd..66e9cf03cd 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -150,6 +150,9 @@ MigrationIncomingState *migration_incoming_get_current(void)
> memset(&mis_current, 0, sizeof(MigrationIncomingState));
> qemu_mutex_init(&mis_current.rp_mutex);
> qemu_event_init(&mis_current.main_thread_load_event, false);
> +
> + init_dirty_bitmap_incoming_migration();
> +
> once = true;
> }
> return &mis_current;
> diff --git a/migration/savevm.c b/migration/savevm.c
> index 9bbfb3fa1b..b0c37ef9f1 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -1673,6 +1673,8 @@ static void loadvm_postcopy_handle_run_bh(void *opaque)
>
> trace_loadvm_postcopy_handle_run_vmstart();
>
> + dirty_bitmap_mig_before_vm_start();
> +
> if (autostart) {
> /* Hold onto your hats, starting the CPU */
> vm_start();
> diff --git a/vl.c b/vl.c
> index ec299099ff..3d393aaf2c 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -4642,6 +4642,7 @@ int main(int argc, char **argv, char **envp)
>
> blk_mig_init();
> ram_mig_init();
> + dirty_bitmap_mig_init();
>
> /* If the currently selected machine wishes to override the units-per-bus
> * property of its default HBA interface type, do so now. */
> diff --git a/migration/Makefile.objs b/migration/Makefile.objs
> index 99e038024d..c83ec47ba8 100644
> --- a/migration/Makefile.objs
> +++ b/migration/Makefile.objs
> @@ -6,6 +6,7 @@ common-obj-y += qemu-file.o global_state.o
> common-obj-y += qemu-file-channel.o
> common-obj-y += xbzrle.o postcopy-ram.o
> common-obj-y += qjson.o
> +common-obj-y += block-dirty-bitmap.o
>
> common-obj-$(CONFIG_RDMA) += rdma.o
>
> diff --git a/migration/trace-events b/migration/trace-events
> index a04fffb877..e9eb8078d4 100644
> --- a/migration/trace-events
> +++ b/migration/trace-events
> @@ -227,3 +227,17 @@ colo_vm_state_change(const char *old, const char *new) "Change '%s' => '%s'"
> colo_send_message(const char *msg) "Send '%s' message"
> colo_receive_message(const char *msg) "Receive '%s' message"
> colo_failover_set_state(const char *new_state) "new state %s"
> +
> +# migration/block-dirty-bitmap.c
> +send_bitmap_header_enter(void) ""
> +send_bitmap_bits(uint32_t flags, uint64_t start_sector, uint32_t nr_sectors, uint64_t data_size) "\n flags: 0x%x\n start_sector: %" PRIu64 "\n nr_sectors: %" PRIu32 "\n data_size: %" PRIu64 "\n"
> +dirty_bitmap_save_iterate(int in_postcopy) "in postcopy: %d"
> +dirty_bitmap_save_complete_enter(void) ""
> +dirty_bitmap_save_complete_finish(void) ""
> +dirty_bitmap_save_pending(uint64_t pending, uint64_t max_size) "pending %" PRIu64 " max: %" PRIu64
> +dirty_bitmap_load_complete(void) ""
> +dirty_bitmap_load_bits_enter(uint64_t first_sector, uint32_t nr_sectors) "chunk: %" PRIu64 " %" PRIu32
> +dirty_bitmap_load_bits_zeroes(void) ""
> +dirty_bitmap_load_header(uint32_t flags) "flags 0x%x"
> +dirty_bitmap_load_enter(void) ""
> +dirty_bitmap_load_success(void) ""
>
OK, I think everything here is probably in order, and it's only my
understanding that is a barrier at this point. Help me understand the
rest of this patch and I'll re-pester migration to get this staged for
qemu-next.
--js
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 02/14] block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap
2017-11-10 22:52 ` John Snow
@ 2017-11-16 8:56 ` Vladimir Sementsov-Ogievskiy
2017-11-16 18:18 ` John Snow
2017-11-17 8:07 ` Vladimir Sementsov-Ogievskiy
1 sibling, 1 reply; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-11-16 8:56 UTC (permalink / raw)
To: John Snow, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
11.11.2017 01:52, John Snow wrote:
>
> On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
>> It is needed to realize bdrv_dirty_bitmap_release_successor in
>> the following patch.
>>
> OK, but...
>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>> block/dirty-bitmap.c | 25 ++++++++++++++++++++-----
>> 1 file changed, 20 insertions(+), 5 deletions(-)
>>
>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>> index 81adbeb6d4..981f99d362 100644
>> --- a/block/dirty-bitmap.c
>> +++ b/block/dirty-bitmap.c
>> @@ -326,13 +326,13 @@ static bool bdrv_dirty_bitmap_has_name(BdrvDirtyBitmap *bitmap)
>> return !!bdrv_dirty_bitmap_name(bitmap);
>> }
>>
>> -/* Called with BQL taken. */
>> -static void bdrv_do_release_matching_dirty_bitmap(
>> +/* Called within bdrv_dirty_bitmap_lock..unlock */
> ...Add this so it will compile:
>
> __attribute__((__unused__))
ok
>> +static void bdrv_do_release_matching_dirty_bitmap_locked(
>> BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
>> bool (*cond)(BdrvDirtyBitmap *bitmap))
>> {
>> BdrvDirtyBitmap *bm, *next;
>> - bdrv_dirty_bitmaps_lock(bs);
>> +
>> QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
>> if ((!bitmap || bm == bitmap) && (!cond || cond(bm))) {
>> assert(!bm->active_iterators);
>> @@ -344,18 +344,33 @@ static void bdrv_do_release_matching_dirty_bitmap(
>> g_free(bm);
>>
>> if (bitmap) {
>> - goto out;
>> + return;
>> }
>> }
>> }
>> +
>> if (bitmap) {
>> abort();
>> }
> Do we have any style guide rules on using abort() instead of assert()?
> The rest of this function uses assert, and it'd be less lines to simply
> write:
>
> assert(!bitmap);
>
> which I think might also carry better semantic information for coverity
> beyond an actual runtime conditional branch.
>
> (I think. Please correct me if I am wrong, I'm a little hazy on this.)
agree, but it is a preexisting code, so I'll fix it with an additional
patch.
>
>> +}
>>
>> -out:
>> +/* Called with BQL taken. */
>> +static void bdrv_do_release_matching_dirty_bitmap(
>> + BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
>> + bool (*cond)(BdrvDirtyBitmap *bitmap))
>> +{
>> + bdrv_dirty_bitmaps_lock(bs);
>> + bdrv_do_release_matching_dirty_bitmap_locked(bs, bitmap, cond);
>> bdrv_dirty_bitmaps_unlock(bs);
>> }
>>
>> +/* Called within bdrv_dirty_bitmap_lock..unlock */
>> +static void bdrv_release_dirty_bitmap_locked(BlockDriverState *bs,
>> + BdrvDirtyBitmap *bitmap)
>> +{
>> + bdrv_do_release_matching_dirty_bitmap_locked(bs, bitmap, NULL);
>> +}
>> +
>> /* Called with BQL taken. */
>> void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
>> {
>>
> If you agree with those two changes, you may add:
ok
>
> Reviewed-by: John Snow <jsnow@redhat.com>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 10/14] migration: add postcopy migration of dirty bitmaps
2017-11-15 1:58 ` John Snow
@ 2017-11-16 10:24 ` Vladimir Sementsov-Ogievskiy
2017-11-17 0:36 ` John Snow
2017-11-17 0:47 ` John Snow
2017-11-16 16:50 ` Dr. David Alan Gilbert
1 sibling, 2 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-11-16 10:24 UTC (permalink / raw)
To: John Snow, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
15.11.2017 04:58, John Snow wrote:
>
> On 10/30/2017 12:33 PM, Vladimir Sementsov-Ogievskiy wrote:
>> Postcopy migration of dirty bitmaps. Only named dirty bitmaps,
>> associated with root nodes and non-root named nodes are migrated.
>>
>> If destination qemu is already containing a dirty bitmap with the same name
>> as a migrated bitmap (for the same node), then, if their granularities are
>> the same the migration will be done, otherwise the error will be generated.
>>
>> If destination qemu doesn't contain such bitmap it will be created.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>> include/migration/misc.h | 3 +
>> migration/migration.h | 3 +
>> migration/block-dirty-bitmap.c | 734 +++++++++++++++++++++++++++++++++++++++++
> Ouch :\
>
>> migration/migration.c | 3 +
>> migration/savevm.c | 2 +
>> vl.c | 1 +
>> migration/Makefile.objs | 1 +
>> migration/trace-events | 14 +
>> 8 files changed, 761 insertions(+)
>> create mode 100644 migration/block-dirty-bitmap.c
>>
> Organizationally, you introduce three new 'public' prototypes:
>
> dirty_bitmap_mig_init
> dirty_bitmap_mig_before_vm_start
> init_dirty_bitmap_incoming_migration
>
> mig_init is advertised in migration/misc.h, the other two are in
> migration/migration.h.
> The definitions for all three are in migration/block-dirty-bitmap.c
>
> In pure naivety, I find it weird to have something that you use in
> migration.c and advertised in migration.h actually exist separately in
> block-dirty-bitmap.c; but maybe this is the sanest thing to do.
>
>> diff --git a/include/migration/misc.h b/include/migration/misc.h
>> index c079b7771b..9cc539e232 100644
>> --- a/include/migration/misc.h
>> +++ b/include/migration/misc.h
>> @@ -55,4 +55,7 @@ bool migration_has_failed(MigrationState *);
>> bool migration_in_postcopy_after_devices(MigrationState *);
>> void migration_global_dump(Monitor *mon);
>>
>> +/* migration/block-dirty-bitmap.c */
>> +void dirty_bitmap_mig_init(void);
>> +
>> #endif
>> diff --git a/migration/migration.h b/migration/migration.h
>> index 50d1f01346..4e3ad04664 100644
>> --- a/migration/migration.h
>> +++ b/migration/migration.h
>> @@ -211,4 +211,7 @@ void migrate_send_rp_pong(MigrationIncomingState *mis,
>> void migrate_send_rp_req_pages(MigrationIncomingState *mis, const char* rbname,
>> ram_addr_t start, size_t len);
>>
>> +void dirty_bitmap_mig_before_vm_start(void);
>> +void init_dirty_bitmap_incoming_migration(void);
>> +
>> #endif
>> diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
>> new file mode 100644
>> index 0000000000..53cb20045d
>> --- /dev/null
>> +++ b/migration/block-dirty-bitmap.c
>> @@ -0,0 +1,734 @@
>> +/*
>> + * Block dirty bitmap postcopy migration
>> + *
>> + * Copyright IBM, Corp. 2009
>> + * Copyright (c) 2016-2017 Parallels International GmbH
>> + *
>> + * Authors:
>> + * Liran Schour <lirans@il.ibm.com>
>> + * Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2. See
>> + * the COPYING file in the top-level directory.
>> + * This file is derived from migration/block.c, so it's author and IBM copyright
>> + * are here, although content is quite different.
>> + *
>> + * Contributions after 2012-01-13 are licensed under the terms of the
>> + * GNU GPL, version 2 or (at your option) any later version.
>> + *
>> + * ***
>> + *
>> + * Here postcopy migration of dirty bitmaps is realized. Only named dirty
>> + * bitmaps, associated with root nodes and non-root named nodes are migrated.
> Put another way, only QMP-addressable bitmaps. Nodes without a name that
> are not the root have no way to be addressed.
>
>> + *
>> + * If destination qemu is already containing a dirty bitmap with the same name
> "If the destination QEMU already contains a dirty bitmap with the same name"
>
>> + * as a migrated bitmap (for the same node), then, if their granularities are
>> + * the same the migration will be done, otherwise the error will be generated.
> "an error"
>
>> + *
>> + * If destination qemu doesn't contain such bitmap it will be created.
> "If the destination QEMU doesn't contain such a bitmap, it will be created."
>
>> + *
>> + * format of migration:
>> + *
>> + * # Header (shared for different chunk types)
>> + * 1, 2 or 4 bytes: flags (see qemu_{put,put}_flags)
>> + * [ 1 byte: node name size ] \ flags & DEVICE_NAME
>> + * [ n bytes: node name ] /
>> + * [ 1 byte: bitmap name size ] \ flags & BITMAP_NAME
>> + * [ n bytes: bitmap name ] /
>> + *
>> + * # Start of bitmap migration (flags & START)
>> + * header
>> + * be64: granularity
>> + * 1 byte: bitmap flags (corresponds to BdrvDirtyBitmap)
>> + * bit 0 - bitmap is enabled
>> + * bit 1 - bitmap is persistent
>> + * bit 2 - bitmap is autoloading
>> + * bits 3-7 - reserved, must be zero
>> + *
>> + * # Complete of bitmap migration (flags & COMPLETE)
>> + * header
>> + *
>> + * # Data chunk of bitmap migration
>> + * header
>> + * be64: start sector
>> + * be32: number of sectors
>> + * [ be64: buffer size ] \ ! (flags & ZEROES)
>> + * [ n bytes: buffer ] /
>> + *
>> + * The last chunk in stream should contain flags & EOS. The chunk may skip
>> + * device and/or bitmap names, assuming them to be the same with the previous
>> + * chunk.
>> + */
>> +
> Been a while since I reviewed the format, but it seems sane.
>
>> +#include "qemu/osdep.h"
>> +#include "block/block.h"
>> +#include "block/block_int.h"
>> +#include "sysemu/block-backend.h"
>> +#include "qemu/main-loop.h"
>> +#include "qemu/error-report.h"
>> +#include "migration/misc.h"
>> +#include "migration/migration.h"
>> +#include "migration/qemu-file.h"
>> +#include "migration/vmstate.h"
>> +#include "migration/register.h"
>> +#include "qemu/hbitmap.h"
>> +#include "sysemu/sysemu.h"
>> +#include "qemu/cutils.h"
>> +#include "qapi/error.h"
>> +#include "trace.h"
>> +
>> +#define CHUNK_SIZE (1 << 10)
>> +
>> +/* Flags occupy one, two or four bytes (Big Endian). The size is determined as
>> + * follows:
>> + * in first (most significant) byte bit 8 is clear --> one byte
>> + * in first byte bit 8 is set --> two or four bytes, depending on second
>> + * byte:
>> + * | in second byte bit 8 is clear --> two bytes
>> + * | in second byte bit 8 is set --> four bytes
>> + */
>> +#define DIRTY_BITMAP_MIG_FLAG_EOS 0x01
>> +#define DIRTY_BITMAP_MIG_FLAG_ZEROES 0x02
>> +#define DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME 0x04
>> +#define DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME 0x08
>> +#define DIRTY_BITMAP_MIG_FLAG_START 0x10
>> +#define DIRTY_BITMAP_MIG_FLAG_COMPLETE 0x20
>> +#define DIRTY_BITMAP_MIG_FLAG_BITS 0x40
>> +
>> +#define DIRTY_BITMAP_MIG_EXTRA_FLAGS 0x80
>> +
>> +#define DIRTY_BITMAP_MIG_START_FLAG_ENABLED 0x01
>> +#define DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT 0x02
>> +#define DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD 0x04
>> +#define DIRTY_BITMAP_MIG_START_FLAG_RESERVED_MASK 0xf8
>> +
>> +typedef struct DirtyBitmapMigBitmapState {
>> + /* Written during setup phase. */
>> + BlockDriverState *bs;
>> + const char *node_name;
>> + BdrvDirtyBitmap *bitmap;
>> + uint64_t total_sectors;
>> + uint64_t sectors_per_chunk;
>> + QSIMPLEQ_ENTRY(DirtyBitmapMigBitmapState) entry;
>> + uint8_t flags;
>> +
>> + /* For bulk phase. */
>> + bool bulk_completed;
>> + uint64_t cur_sector;
>> +} DirtyBitmapMigBitmapState;
>> +
>> +typedef struct DirtyBitmapMigState {
>> + QSIMPLEQ_HEAD(dbms_list, DirtyBitmapMigBitmapState) dbms_list;
>> +
>> + bool bulk_completed;
>> +
>> + /* for send_bitmap_bits() */
>> + BlockDriverState *prev_bs;
>> + BdrvDirtyBitmap *prev_bitmap;
>> +} DirtyBitmapMigState;
>> +
>> +typedef struct DirtyBitmapLoadState {
>> + uint32_t flags;
>> + char node_name[256];
>> + char bitmap_name[256];
>> + BlockDriverState *bs;
>> + BdrvDirtyBitmap *bitmap;
>> +} DirtyBitmapLoadState;
>> +
>> +static DirtyBitmapMigState dirty_bitmap_mig_state;
>> +
>> +typedef struct DirtyBitmapLoadBitmapState {
>> + BlockDriverState *bs;
>> + BdrvDirtyBitmap *bitmap;
>> + bool migrated;
>> +} DirtyBitmapLoadBitmapState;
>> +static GSList *enabled_bitmaps;
>> +QemuMutex finish_lock;
>> +
>> +void init_dirty_bitmap_incoming_migration(void)
>> +{
>> + qemu_mutex_init(&finish_lock);
>> +}
>> +
> This is a little odd as public interface. David, is there a nicer way to
> integrate in-migrate hooks? I guess it hasn't come up yet. Anyway, it
> might be nice to leave a comment here for now that says that the only
> caller is migration.c, and it will only ever call it once.
>
>> +static uint32_t qemu_get_bitmap_flags(QEMUFile *f)
>> +{
>> + uint8_t flags = qemu_get_byte(f);
>> + if (flags & DIRTY_BITMAP_MIG_EXTRA_FLAGS) {
>> + flags = flags << 8 | qemu_get_byte(f);
>> + if (flags & DIRTY_BITMAP_MIG_EXTRA_FLAGS) {
>> + flags = flags << 16 | qemu_get_be16(f);
>> + }
>> + }
>> +
>> + return flags;
>> +}
>> +
> ok
>
> (Sorry for the per-function ACKs, it's just helpful for me to know which
> functions I followed execution of on paper to make sure I got everything
> in this big patch.)
>
>> +static void qemu_put_bitmap_flags(QEMUFile *f, uint32_t flags)
>> +{
>> + /* The code currently do not send flags more than one byte */
>> + assert(!(flags & (0xffffff00 | DIRTY_BITMAP_MIG_EXTRA_FLAGS)));
>> +
>> + qemu_put_byte(f, flags);
>> +}
>> +
> ok
>
>> +static void send_bitmap_header(QEMUFile *f, DirtyBitmapMigBitmapState *dbms,
>> + uint32_t additional_flags)
>> +{
>> + BlockDriverState *bs = dbms->bs;
>> + BdrvDirtyBitmap *bitmap = dbms->bitmap;
>> + uint32_t flags = additional_flags;
>> + trace_send_bitmap_header_enter();
>> +
>> + if (bs != dirty_bitmap_mig_state.prev_bs) {
>> + dirty_bitmap_mig_state.prev_bs = bs;
>> + flags |= DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME;
>> + }
>> +
>> + if (bitmap != dirty_bitmap_mig_state.prev_bitmap) {
>> + dirty_bitmap_mig_state.prev_bitmap = bitmap;
>> + flags |= DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME;
>> + }
>> +
> I guess the idea here is that we might be able to skip the node name
> broadcast, leaving the possibilities as:
>
> - new node and bitmap: send both
> - new bitmap, but not node: send bitmap name only
> - same for both: send neither
yes
>
> and that otherwise it's not possible to have a new node but "same
> bitmap" by nature of how the structures are organized.
I hope we don't have bitmaps, shared between nodes)
>
>> + qemu_put_bitmap_flags(f, flags);
>> +
>> + if (flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) {
>> + qemu_put_counted_string(f, dbms->node_name);
>> + }
>> +
>> + if (flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) {
>> + qemu_put_counted_string(f, bdrv_dirty_bitmap_name(bitmap));
>> + }
>> +}
>> +
> ok
>
>> +static void send_bitmap_start(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
>> +{
>> + send_bitmap_header(f, dbms, DIRTY_BITMAP_MIG_FLAG_START);
>> + qemu_put_be32(f, bdrv_dirty_bitmap_granularity(dbms->bitmap));
>> + qemu_put_byte(f, dbms->flags);
>> +}
>> +
> ok
>
>> +static void send_bitmap_complete(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
>> +{
>> + send_bitmap_header(f, dbms, DIRTY_BITMAP_MIG_FLAG_COMPLETE);
>> +}
>> +
> ok
>
>> +static void send_bitmap_bits(QEMUFile *f, DirtyBitmapMigBitmapState *dbms,
>> + uint64_t start_sector, uint32_t nr_sectors)
>> +{
>> + /* align for buffer_is_zero() */
>> + uint64_t align = 4 * sizeof(long);
>> + uint64_t unaligned_size =
>> + bdrv_dirty_bitmap_serialization_size(
>> + dbms->bitmap, start_sector << BDRV_SECTOR_BITS,
>> + (uint64_t)nr_sectors << BDRV_SECTOR_BITS);
>> + uint64_t buf_size = (unaligned_size + align - 1) & ~(align - 1);
>> + uint8_t *buf = g_malloc0(buf_size);
>> + uint32_t flags = DIRTY_BITMAP_MIG_FLAG_BITS;
>> +
>> + bdrv_dirty_bitmap_serialize_part(
>> + dbms->bitmap, buf, start_sector << BDRV_SECTOR_BITS,
>> + (uint64_t)nr_sectors << BDRV_SECTOR_BITS);
>> +
>> + if (buffer_is_zero(buf, buf_size)) {
>> + g_free(buf);
>> + buf = NULL;
>> + flags |= DIRTY_BITMAP_MIG_FLAG_ZEROES;
>> + }
>> +
>> + trace_send_bitmap_bits(flags, start_sector, nr_sectors, buf_size);
>> +
>> + send_bitmap_header(f, dbms, flags);
>> +
>> + qemu_put_be64(f, start_sector);
>> + qemu_put_be32(f, nr_sectors);
>> +
>> + /* if a block is zero we need to flush here since the network
>> + * bandwidth is now a lot higher than the storage device bandwidth.
>> + * thus if we queue zero blocks we slow down the migration. */
> Can you elaborate on this for me?
it comes from migration/block.c, as it was a prototype for dirty bitmaps
migration.
May be the original thought was to give destination storage more time to
handle
write-zeros? It may make sense if it can't do it fast but really writes
zeros.
>
>> + if (flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
>> + qemu_fflush(f);
>> + } else {
>> + qemu_put_be64(f, buf_size);
>> + qemu_put_buffer(f, buf, buf_size);
>> + }
>> +
>> + g_free(buf);
>> +}
>> +
>> +
>> +/* Called with iothread lock taken. */
>> +
>> +static int init_dirty_bitmap_migration(void)
>> +{
>> + BlockDriverState *bs;
>> + BdrvDirtyBitmap *bitmap;
>> + DirtyBitmapMigBitmapState *dbms;
>> + BdrvNextIterator it;
>> +
>> + dirty_bitmap_mig_state.bulk_completed = false;
>> + dirty_bitmap_mig_state.prev_bs = NULL;
>> + dirty_bitmap_mig_state.prev_bitmap = NULL;
>> +
>> + for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
>> + if (!bdrv_get_device_or_node_name(bs)) {
>> + /* not named non-root node */
> I can't imagine the situation it would arise in, but is it possible to
> have a named bitmap attached to a now-anonymous node?
>
> Let's say we attach a bitmap to a root node, but then later we insert a
> filter or something above it and it's no longer at the root.
>
> We should probably prohibit such things, or at the very least toss out
> an error here instead of silently continuing.
>
> I think the only things valid to just *skip* are nameless bitmaps.
> Anything named we really ought to either migrate or error out over, I
> think, even if the circumstances leading to such a configuration are
> very unlikely.
agree, will fix.
>
>> + continue;
>> + }
>> +
>> + for (bitmap = bdrv_dirty_bitmap_next(bs, NULL); bitmap;
>> + bitmap = bdrv_dirty_bitmap_next(bs, bitmap)) {
>> + if (!bdrv_dirty_bitmap_name(bitmap)) {
>> + continue;
>> + }
>> +
>> + if (bdrv_dirty_bitmap_frozen(bitmap)) {
>> + error_report("Can't migrate frozen dirty bitmap: '%s",
>> + bdrv_dirty_bitmap_name(bitmap));
>> + return -1;
>> + }
>> + }
>> + }
>> +
>> + for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
>> + if (!bdrv_get_device_or_node_name(bs)) {
>> + /* not named non-root node */
>> + continue;
>> + }
> Why two-pass? I guess because we don't have to tear anything down if we
> check for errors in advance?
>
> I worry that if we need to amend the logic here that it's error-prone to
> update it in two places, so maybe we ought to just have one loop.
why? just check all errors in first loop and then do all preparations in
the second..
>
>> +
>> + for (bitmap = bdrv_dirty_bitmap_next(bs, NULL); bitmap;
>> + bitmap = bdrv_dirty_bitmap_next(bs, bitmap)) {
>> + if (!bdrv_dirty_bitmap_name(bitmap)) {
>> + continue;
>> + }
>> +
>> + bdrv_ref(bs);
>> + bdrv_dirty_bitmap_set_frozen(bitmap, true);
>> +
> We could say that for any bitmap in the list of pending bitmaps to
> migrate, we know that we have to un-freeze it, since we never add any
> bitmaps that are frozen to our list.
>
>> + dbms = g_new0(DirtyBitmapMigBitmapState, 1);
>> + dbms->bs = bs;
>> + dbms->node_name = bdrv_get_node_name(bs);
>> + if (!dbms->node_name || dbms->node_name[0] == '\0') {
>> + dbms->node_name = bdrv_get_device_name(bs);
>> + }
>> + dbms->bitmap = bitmap;
>> + dbms->total_sectors = bdrv_nb_sectors(bs);
>> + dbms->sectors_per_chunk = CHUNK_SIZE * 8 *
>> + bdrv_dirty_bitmap_granularity(bitmap) >> BDRV_SECTOR_BITS;
> Eric may want to avoid checking in new code that thinks in sectors, but
> for the sake of review I don't mind right now.
>
> (Sorry, Eric!)
>
>> + if (bdrv_dirty_bitmap_enabled(bitmap)) {
>> + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_ENABLED;
>> + }
>> + if (bdrv_dirty_bitmap_get_persistance(bitmap)) {
>> + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT;
>> + }
>> + if (bdrv_dirty_bitmap_get_autoload(bitmap)) {
>> + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD;
>> + }
>> +
>> + bdrv_dirty_bitmap_set_persistance(bitmap, false);
> Oh, this might be stranger to undo. Perhaps what we CAN do is limit the
> second pass to just this action and allow ourselves to unroll everything
> else.
>
>> +
>> + QSIMPLEQ_INSERT_TAIL(&dirty_bitmap_mig_state.dbms_list,
>> + dbms, entry);
>> + }
>> + }
>> +
hmm, I need to think about correct bitmap locking in the code
(BdrvDirtyBitmap.lock)
>> + return 0;
>> +}
>> +
>> +/* Called with no lock taken. */
>> +static void bulk_phase_send_chunk(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
>> +{
>> + uint32_t nr_sectors = MIN(dbms->total_sectors - dbms->cur_sector,
>> + dbms->sectors_per_chunk);
>> +
>> + send_bitmap_bits(f, dbms, dbms->cur_sector, nr_sectors);
>> +
>> + dbms->cur_sector += nr_sectors;
>> + if (dbms->cur_sector >= dbms->total_sectors) {
>> + dbms->bulk_completed = true;
>> + }
>> +}
>> +
>> +/* Called with no lock taken. */
>> +static void bulk_phase(QEMUFile *f, bool limit)
>> +{
>> + DirtyBitmapMigBitmapState *dbms;
>> +
>> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
>> + while (!dbms->bulk_completed) {
>> + bulk_phase_send_chunk(f, dbms);
>> + if (limit && qemu_file_rate_limit(f)) {
>> + return;
>> + }
>> + }
>> + }
>> +
>> + dirty_bitmap_mig_state.bulk_completed = true;
>> +}
>> +
>> +/* Called with iothread lock taken. */
>> +static void dirty_bitmap_mig_cleanup(void)
>> +{
>> + DirtyBitmapMigBitmapState *dbms;
>> +
>> + while ((dbms = QSIMPLEQ_FIRST(&dirty_bitmap_mig_state.dbms_list)) != NULL) {
>> + QSIMPLEQ_REMOVE_HEAD(&dirty_bitmap_mig_state.dbms_list, entry);
>> + bdrv_dirty_bitmap_set_frozen(dbms->bitmap, false);
>> + bdrv_unref(dbms->bs);
>> + g_free(dbms);
>> + }
>> +}
>> +
> ok
>
>> +/* for SaveVMHandlers */
>> +static void dirty_bitmap_save_cleanup(void *opaque)
>> +{
>> + dirty_bitmap_mig_cleanup();
>> +}
>> +
> ok
>
>> +static int dirty_bitmap_save_iterate(QEMUFile *f, void *opaque)
>> +{
>> + trace_dirty_bitmap_save_iterate(migration_in_postcopy());
>> +
>> + if (migration_in_postcopy() && !dirty_bitmap_mig_state.bulk_completed) {
>> + bulk_phase(f, true);
>> + }
>> +
>> + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
>> +
>> + return dirty_bitmap_mig_state.bulk_completed;
>> +}
>> +
> What's the purpose behind doing bulk save both here and in
> dirty_bitmap_save_complete? Is there a path that isn't guaranteed to
> call one of the completion functions?
>
> (The way it's coded seems like it'll work fine, but I'm curious about
> what looks like a redundancy at a glance.)
bulk_phase(f, true) is not guaranteed to do all the work. so in complete()
we call it with false, to complete.
hmm, it is saved from precopy migration approach. And looks like really,
in case of postcopy
we need only blulk_phase(f, false) in _complete and nothing else. I'll
check.
>
>> +/* Called with iothread lock taken. */
>> +
>> +static int dirty_bitmap_save_complete(QEMUFile *f, void *opaque)
>> +{
>> + DirtyBitmapMigBitmapState *dbms;
>> + trace_dirty_bitmap_save_complete_enter();
>> +
>> + if (!dirty_bitmap_mig_state.bulk_completed) {
>> + bulk_phase(f, false);
>> + }
>> +
> funny now that we don't actually really iterate over the data, and the
> bulk phase is now really the _only_ phase :)
>
>> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
>> + send_bitmap_complete(f, dbms);
>> + }
>> +
>> + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
>> +
>> + trace_dirty_bitmap_save_complete_finish();
>> +
>> + dirty_bitmap_mig_cleanup();
>> + return 0;
>> +}
>> +
> ok
>
>> +static void dirty_bitmap_save_pending(QEMUFile *f, void *opaque,
>> + uint64_t max_size,
>> + uint64_t *res_precopy_only,
>> + uint64_t *res_compatible,
>> + uint64_t *res_postcopy_only)
>> +{
>> + DirtyBitmapMigBitmapState *dbms;
>> + uint64_t pending = 0;
>> +
>> + qemu_mutex_lock_iothread();
>> +
>> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
>> + uint64_t gran = bdrv_dirty_bitmap_granularity(dbms->bitmap);
>> + uint64_t sectors = dbms->bulk_completed ? 0 :
>> + dbms->total_sectors - dbms->cur_sector;
>> +
>> + pending += (sectors * BDRV_SECTOR_SIZE + gran - 1) / gran;
>> + }
>> +
>> + qemu_mutex_unlock_iothread();
>> +
>> + trace_dirty_bitmap_save_pending(pending, max_size);
>> +
>> + *res_postcopy_only += pending;
>> +}
>> +
> ok
>
>> +/* First occurrence of this bitmap. It should be created if doesn't exist */
>> +static int dirty_bitmap_load_start(QEMUFile *f, DirtyBitmapLoadState *s)
>> +{
>> + Error *local_err = NULL;
>> + uint32_t granularity = qemu_get_be32(f);
>> + uint8_t flags = qemu_get_byte(f);
>> +
>> + if (!s->bitmap) {
>> + s->bitmap = bdrv_create_dirty_bitmap(s->bs, granularity,
>> + s->bitmap_name, &local_err);
>> + if (!s->bitmap) {
>> + error_report_err(local_err);
>> + return -EINVAL;
>> + }
>> + } else {
>> + uint32_t dest_granularity =
>> + bdrv_dirty_bitmap_granularity(s->bitmap);
>> + if (dest_granularity != granularity) {
>> + error_report("Error: "
>> + "Migrated bitmap granularity (%" PRIu32 ") "
>> + "doesn't match the destination bitmap '%s' "
>> + "granularity (%" PRIu32 ")",
>> + granularity,
>> + bdrv_dirty_bitmap_name(s->bitmap),
>> + dest_granularity);
>> + return -EINVAL;
>> + }
>> + }
>> +
> I'm a fan of auto-creating the bitmaps. Do you have a use-case for why
> creating them ahead of time is better, or are you just attempting to be
> flexible?
the second. I just was my first approach about two years ago and it was not
discussed until now). In our scenarios we use auto-creating way. So, it may
be better to just fail if corresponding bitmap exists on destination without
any granularity checks.
>
>> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_RESERVED_MASK) {
>> + error_report("Unknown flags in migrated dirty bitmap header: %x",
>> + flags);
>> + return -EINVAL;
>> + }
>> +
>> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT) {
>> + bdrv_dirty_bitmap_set_persistance(s->bitmap, true);
>> + }
>> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD) {
>> + bdrv_dirty_bitmap_set_autoload(s->bitmap, true);
>> + }
>> +
>> + bdrv_disable_dirty_bitmap(s->bitmap);
> OK, so we start them off as disabled, and
>
>> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_ENABLED) {
>> + DirtyBitmapLoadBitmapState *b;
>> +
>> + bdrv_dirty_bitmap_create_successor(s->bs, s->bitmap, &local_err);
>> + if (local_err) {
>> + error_report_err(local_err);
>> + return -EINVAL;
>> + }
>> +
> If they weren't disabled on the host, we create a successor to record
> writes while we wait for the rest of the data to arrive.
>
>> + b = g_new(DirtyBitmapLoadBitmapState, 1);
>> + b->bs = s->bs;
>> + b->bitmap = s->bitmap;
>> + b->migrated = false;
>> + enabled_bitmaps = g_slist_prepend(enabled_bitmaps, b);
> And we make a note of which ones we were supposed to re-enable.
>
>> + }
>> +
>> + return 0;
>> +}
> OK
>
>> +
>> +void dirty_bitmap_mig_before_vm_start(void)
> Similarly, I guess I find it weird that this is a callable interface.
>
> David, no nice hook for just-prior-to-vm-start calls? a
> .postcopy_pivot() hook or something might be nice..
>
>> +{
>> + GSList *item;
>> +
>> + qemu_mutex_lock(&finish_lock);
>> +
>> + for (item = enabled_bitmaps; item; item = g_slist_next(item)) {
>> + DirtyBitmapLoadBitmapState *b = item->data;
>> +
> Anyway, if I am reading this right; we call this in the postcopy phase
> prior to receiving the entirety of the bitmaps (so before receiving
> COMPLETE) ... right?
>
>> + if (b->migrated) {
>> + bdrv_enable_dirty_bitmap(b->bitmap);
This is the most difficult thing here. Race is possible between postcopy
complete
and vm start. So, here is a finish_lock. And bitmap may be already
migrated or not.
> ...or, am I confused, and we might receive a COMPLETE event prior to the
> postcopy pivot?
>
> Anyway, I suppose this code says "If we received the entire bitmap, go
> ahead and enable it."
>
>> + } else {
>> + bdrv_dirty_bitmap_enable_successor(b->bitmap);
> And this says "If we haven't received it yet, enable the successor to
> record writes until we get the rest of the data."
yes
>
>> + }
>> +
>> + g_free(b);
>> + }
>> +
>> + g_slist_free(enabled_bitmaps);
>> + enabled_bitmaps = NULL;
>> +
>> + qemu_mutex_unlock(&finish_lock);
>> +}
>> +
>> +static void dirty_bitmap_load_complete(QEMUFile *f, DirtyBitmapLoadState *s)
>> +{
>> + GSList *item;
>> + trace_dirty_bitmap_load_complete();
>> + bdrv_dirty_bitmap_deserialize_finish(s->bitmap);
>> +
>> + qemu_mutex_lock(&finish_lock);
>> +
>> + for (item = enabled_bitmaps; item; item = g_slist_next(item)) {
>> + DirtyBitmapLoadBitmapState *b = item->data;
>> +
>> + if (b->bitmap == s->bitmap) {
>> + b->migrated = true;
> we can probably break; here now, right?
agree.
>
> (This whole stanza is a little strange, can't we cache the active
> DirtyBitmapLoadBitmapState in DirtyBitmapLoadState? I guess not, because
> we're looking up the BdrvDirtyBitmap itself and caching that instead, so
> either way we have some kind of lookup on every context switch.)
this search is needed only once, so caching will not help.
>
>> + }
>> + }
>> +
>> + if (bdrv_dirty_bitmap_frozen(s->bitmap)) {
>> + if (enabled_bitmaps == NULL) {
>> + /* in postcopy */
>> + AioContext *aio_context = bdrv_get_aio_context(s->bs);
>> + aio_context_acquire(aio_context);
looks like it should be moved to use new BdrvDirtyBitmap locks.
>> +
>> + bdrv_reclaim_dirty_bitmap(s->bs, s->bitmap, &error_abort);
>> + bdrv_enable_dirty_bitmap(s->bitmap);
>> +
> OK, so if enabled_bitmaps is gone, that means we already pivoted and
> we're live on the receiving end here. We merge the successor into the
> fully deserialized bitmap and enable it.
>
>> + aio_context_release(aio_context);
>> + } else {
>> + /* target not started, successor is empty */
>> + bdrv_dirty_bitmap_release_successor(s->bs, s->bitmap);
> Otherwise we just trash the successor. Did we really need a new call for
> this? I suppose it's faster than merging a 0-bit bitmap, but the
> additional API complexity for the speed win here seems like premature
> optimization.
>
> ...well, you already wrote it, so I won't argue.
right idea. However in this case (and even with my approach) it is good
to assert here
that successor is empty. and additional api is needed for it.
>
>> + }
>> + }
>> +
>> + qemu_mutex_unlock(&finish_lock);
>> +}
>> +
>> +static int dirty_bitmap_load_bits(QEMUFile *f, DirtyBitmapLoadState *s)
>> +{
>> + uint64_t first_byte = qemu_get_be64(f) << BDRV_SECTOR_BITS;
>> + uint64_t nr_bytes = (uint64_t)qemu_get_be32(f) << BDRV_SECTOR_BITS;
>> + trace_dirty_bitmap_load_bits_enter(first_byte >> BDRV_SECTOR_BITS,
>> + nr_bytes >> BDRV_SECTOR_BITS);
>> +
>> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
>> + trace_dirty_bitmap_load_bits_zeroes();
>> + bdrv_dirty_bitmap_deserialize_zeroes(s->bitmap, first_byte, nr_bytes,
>> + false);
>> + } else {
>> + uint8_t *buf;
>> + uint64_t buf_size = qemu_get_be64(f);
>> + uint64_t needed_size =
>> + bdrv_dirty_bitmap_serialization_size(s->bitmap,
>> + first_byte, nr_bytes);
>> +
>> + if (needed_size > buf_size) {
>> + error_report("Error: Migrated bitmap granularity doesn't "
>> + "match the destination bitmap '%s' granularity",
>> + bdrv_dirty_bitmap_name(s->bitmap));
>> + return -EINVAL;
>> + }
>> +
>> + buf = g_malloc(buf_size);
>> + qemu_get_buffer(f, buf, buf_size);
>> + bdrv_dirty_bitmap_deserialize_part(s->bitmap, buf, first_byte, nr_bytes,
>> + false);
>> + g_free(buf);
>> + }
>> +
>> + return 0;
>> +}
>> +
> ok
>
>> +static int dirty_bitmap_load_header(QEMUFile *f, DirtyBitmapLoadState *s)
>> +{
>> + Error *local_err = NULL;
>> + s->flags = qemu_get_bitmap_flags(f);
>> + trace_dirty_bitmap_load_header(s->flags);
>> +
>> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) {
>> + if (!qemu_get_counted_string(f, s->node_name)) {
>> + error_report("Unable to read node name string");
>> + return -EINVAL;
>> + }
>> + s->bs = bdrv_lookup_bs(s->node_name, s->node_name, &local_err);
>> + if (!s->bs) {
>> + error_report_err(local_err);
>> + return -EINVAL;
>> + }
>> + } else if (!s->bs) {
>> + error_report("Error: block device name is not set");
>> + return -EINVAL;
>> + }
>> +
>> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) {
>> + if (!qemu_get_counted_string(f, s->bitmap_name)) {
>> + error_report("Unable to read node name string");
>> + return -EINVAL;
>> + }
>> + s->bitmap = bdrv_find_dirty_bitmap(s->bs, s->bitmap_name);
>> +
>> + /* bitmap may be NULL here, it wouldn't be an error if it is the
>> + * first occurrence of the bitmap */
>> + if (!s->bitmap && !(s->flags & DIRTY_BITMAP_MIG_FLAG_START)) {
>> + error_report("Error: unknown dirty bitmap "
>> + "'%s' for block device '%s'",
>> + s->bitmap_name, s->node_name);
>> + return -EINVAL;
>> + }
>> + } else if (!s->bitmap) {
>> + error_report("Error: block device name is not set");
>> + return -EINVAL;
>> + }
>> +
>> + return 0;
>> +}
>> +
> ok
>
>> +static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id)
>> +{
>> + static DirtyBitmapLoadState s;
>> + int ret = 0;
>> +
>> + trace_dirty_bitmap_load_enter();
>> +
>> + if (version_id != 1) {
>> + return -EINVAL;
>> + }
>> +
>> + do {
>> + dirty_bitmap_load_header(f, &s);
>> +
>> + if (s.flags & DIRTY_BITMAP_MIG_FLAG_START) {
>> + ret = dirty_bitmap_load_start(f, &s);
>> + } else if (s.flags & DIRTY_BITMAP_MIG_FLAG_COMPLETE) {
>> + dirty_bitmap_load_complete(f, &s);
>> + } else if (s.flags & DIRTY_BITMAP_MIG_FLAG_BITS) {
>> + ret = dirty_bitmap_load_bits(f, &s);
>> + }
>> +
>> + if (!ret) {
>> + ret = qemu_file_get_error(f);
>> + }
>> +
>> + if (ret) {
>> + return ret;
>> + }
>> + } while (!(s.flags & DIRTY_BITMAP_MIG_FLAG_EOS));
>> +
>> + trace_dirty_bitmap_load_success();
>> + return 0;
>> +}
> OK
>
>> +
>> +static int dirty_bitmap_save_setup(QEMUFile *f, void *opaque)
>> +{
>> + DirtyBitmapMigBitmapState *dbms = NULL;
>> + if (init_dirty_bitmap_migration() < 0) {
>> + return -1;
>> + }
>> +
>> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
>> + send_bitmap_start(f, dbms);
>> + }
>> + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
>> +
>> + return 0;
>> +}
>> +
> ok
>
>> +static bool dirty_bitmap_is_active(void *opaque)
>> +{
>> + return migrate_dirty_bitmaps();
>> +}
>> +
> ok
>
>> +static bool dirty_bitmap_is_active_iterate(void *opaque)
>> +{
>> + return dirty_bitmap_is_active(opaque) && !runstate_is_running();
>> +}
>> +
> On second thought, in patch 9, can you add a little tiny bit of
> documentation text explaining the exact nature of this callback?
>
> Is the second portion of the conditional here so that once we reach the
> postcopy state that .is_active_iterate starts returning true?
>
> "ok" if I'm reading this right, but it might be helped along by a little
> comment.
yes. ok, I'll add a comment.
>
>> +static bool dirty_bitmap_has_postcopy(void *opaque)
>> +{
>> + return true;
>> +}
>> +
> ok! :)
>
>> +static SaveVMHandlers savevm_dirty_bitmap_handlers = {
>> + .save_setup = dirty_bitmap_save_setup,
>> + .save_live_complete_postcopy = dirty_bitmap_save_complete,
>> + .save_live_complete_precopy = dirty_bitmap_save_complete,
>> + .has_postcopy = dirty_bitmap_has_postcopy,
>> + .save_live_pending = dirty_bitmap_save_pending,
>> + .save_live_iterate = dirty_bitmap_save_iterate,
>> + .is_active_iterate = dirty_bitmap_is_active_iterate,
>> + .load_state = dirty_bitmap_load,
>> + .save_cleanup = dirty_bitmap_save_cleanup,
>> + .is_active = dirty_bitmap_is_active,
>> +};
>> +
>> +void dirty_bitmap_mig_init(void)
>> +{
>> + QSIMPLEQ_INIT(&dirty_bitmap_mig_state.dbms_list);
>> +
>> + register_savevm_live(NULL, "dirty-bitmap", 0, 1,
>> + &savevm_dirty_bitmap_handlers,
>> + &dirty_bitmap_mig_state);
>> +}
> ok
>
> dgilbert, would it be worth registering a block-driver-like registration
> trick that automatically invokes these functions instead of having to
> hook them up in vl.c? the more we add, the more hacky it looks to not
> have some subsystem-wide registration hook.
>
>> diff --git a/migration/migration.c b/migration/migration.c
>> index e973837bfd..66e9cf03cd 100644
>> --- a/migration/migration.c
>> +++ b/migration/migration.c
>> @@ -150,6 +150,9 @@ MigrationIncomingState *migration_incoming_get_current(void)
>> memset(&mis_current, 0, sizeof(MigrationIncomingState));
>> qemu_mutex_init(&mis_current.rp_mutex);
>> qemu_event_init(&mis_current.main_thread_load_event, false);
>> +
>> + init_dirty_bitmap_incoming_migration();
>> +
>> once = true;
>> }
>> return &mis_current;
>> diff --git a/migration/savevm.c b/migration/savevm.c
>> index 9bbfb3fa1b..b0c37ef9f1 100644
>> --- a/migration/savevm.c
>> +++ b/migration/savevm.c
>> @@ -1673,6 +1673,8 @@ static void loadvm_postcopy_handle_run_bh(void *opaque)
>>
>> trace_loadvm_postcopy_handle_run_vmstart();
>>
>> + dirty_bitmap_mig_before_vm_start();
>> +
>> if (autostart) {
>> /* Hold onto your hats, starting the CPU */
>> vm_start();
>> diff --git a/vl.c b/vl.c
>> index ec299099ff..3d393aaf2c 100644
>> --- a/vl.c
>> +++ b/vl.c
>> @@ -4642,6 +4642,7 @@ int main(int argc, char **argv, char **envp)
>>
>> blk_mig_init();
>> ram_mig_init();
>> + dirty_bitmap_mig_init();
>>
>> /* If the currently selected machine wishes to override the units-per-bus
>> * property of its default HBA interface type, do so now. */
>> diff --git a/migration/Makefile.objs b/migration/Makefile.objs
>> index 99e038024d..c83ec47ba8 100644
>> --- a/migration/Makefile.objs
>> +++ b/migration/Makefile.objs
>> @@ -6,6 +6,7 @@ common-obj-y += qemu-file.o global_state.o
>> common-obj-y += qemu-file-channel.o
>> common-obj-y += xbzrle.o postcopy-ram.o
>> common-obj-y += qjson.o
>> +common-obj-y += block-dirty-bitmap.o
>>
>> common-obj-$(CONFIG_RDMA) += rdma.o
>>
>> diff --git a/migration/trace-events b/migration/trace-events
>> index a04fffb877..e9eb8078d4 100644
>> --- a/migration/trace-events
>> +++ b/migration/trace-events
>> @@ -227,3 +227,17 @@ colo_vm_state_change(const char *old, const char *new) "Change '%s' => '%s'"
>> colo_send_message(const char *msg) "Send '%s' message"
>> colo_receive_message(const char *msg) "Receive '%s' message"
>> colo_failover_set_state(const char *new_state) "new state %s"
>> +
>> +# migration/block-dirty-bitmap.c
>> +send_bitmap_header_enter(void) ""
>> +send_bitmap_bits(uint32_t flags, uint64_t start_sector, uint32_t nr_sectors, uint64_t data_size) "\n flags: 0x%x\n start_sector: %" PRIu64 "\n nr_sectors: %" PRIu32 "\n data_size: %" PRIu64 "\n"
>> +dirty_bitmap_save_iterate(int in_postcopy) "in postcopy: %d"
>> +dirty_bitmap_save_complete_enter(void) ""
>> +dirty_bitmap_save_complete_finish(void) ""
>> +dirty_bitmap_save_pending(uint64_t pending, uint64_t max_size) "pending %" PRIu64 " max: %" PRIu64
>> +dirty_bitmap_load_complete(void) ""
>> +dirty_bitmap_load_bits_enter(uint64_t first_sector, uint32_t nr_sectors) "chunk: %" PRIu64 " %" PRIu32
>> +dirty_bitmap_load_bits_zeroes(void) ""
>> +dirty_bitmap_load_header(uint32_t flags) "flags 0x%x"
>> +dirty_bitmap_load_enter(void) ""
>> +dirty_bitmap_load_success(void) ""
>>
> OK, I think everything here is probably in order, and it's only my
> understanding that is a barrier at this point. Help me understand the
> rest of this patch and I'll re-pester migration to get this staged for
> qemu-next.
>
> --js
Thank you for reviewing! I hope, I'll post new version next week.
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 10/14] migration: add postcopy migration of dirty bitmaps
2017-11-15 1:58 ` John Snow
2017-11-16 10:24 ` Vladimir Sementsov-Ogievskiy
@ 2017-11-16 16:50 ` Dr. David Alan Gilbert
2017-11-17 1:27 ` John Snow
1 sibling, 1 reply; 44+ messages in thread
From: Dr. David Alan Gilbert @ 2017-11-16 16:50 UTC (permalink / raw)
To: John Snow
Cc: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel, kwolf,
peter.maydell, famz, lirans, quintela, armbru, mreitz, stefanha,
den, amit.shah, pbonzini
* John Snow (jsnow@redhat.com) wrote:
>
>
> On 10/30/2017 12:33 PM, Vladimir Sementsov-Ogievskiy wrote:
> > Postcopy migration of dirty bitmaps. Only named dirty bitmaps,
> > associated with root nodes and non-root named nodes are migrated.
> >
> > If destination qemu is already containing a dirty bitmap with the same name
> > as a migrated bitmap (for the same node), then, if their granularities are
> > the same the migration will be done, otherwise the error will be generated.
> >
> > If destination qemu doesn't contain such bitmap it will be created.
> >
> > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> > ---
> > include/migration/misc.h | 3 +
> > migration/migration.h | 3 +
> > migration/block-dirty-bitmap.c | 734 +++++++++++++++++++++++++++++++++++++++++
>
> Ouch :\
>
> > migration/migration.c | 3 +
> > migration/savevm.c | 2 +
> > vl.c | 1 +
> > migration/Makefile.objs | 1 +
> > migration/trace-events | 14 +
> > 8 files changed, 761 insertions(+)
> > create mode 100644 migration/block-dirty-bitmap.c
> >
>
> Organizationally, you introduce three new 'public' prototypes:
>
> dirty_bitmap_mig_init
> dirty_bitmap_mig_before_vm_start
> init_dirty_bitmap_incoming_migration
>
> mig_init is advertised in migration/misc.h, the other two are in
> migration/migration.h.
> The definitions for all three are in migration/block-dirty-bitmap.c
>
> In pure naivety, I find it weird to have something that you use in
> migration.c and advertised in migration.h actually exist separately in
> block-dirty-bitmap.c; but maybe this is the sanest thing to do.
Actually I think that's OK; it makes sense for all of the code for this
feature to sit in one place, and there doesn't seem any point creating
a header just for this one function.
> > diff --git a/include/migration/misc.h b/include/migration/misc.h
> > index c079b7771b..9cc539e232 100644
> > --- a/include/migration/misc.h
> > +++ b/include/migration/misc.h
> > @@ -55,4 +55,7 @@ bool migration_has_failed(MigrationState *);
> > bool migration_in_postcopy_after_devices(MigrationState *);
> > void migration_global_dump(Monitor *mon);
> >
> > +/* migration/block-dirty-bitmap.c */
> > +void dirty_bitmap_mig_init(void);
> > +
> > #endif
> > diff --git a/migration/migration.h b/migration/migration.h
> > index 50d1f01346..4e3ad04664 100644
> > --- a/migration/migration.h
> > +++ b/migration/migration.h
> > @@ -211,4 +211,7 @@ void migrate_send_rp_pong(MigrationIncomingState *mis,
> > void migrate_send_rp_req_pages(MigrationIncomingState *mis, const char* rbname,
> > ram_addr_t start, size_t len);
> >
> > +void dirty_bitmap_mig_before_vm_start(void);
> > +void init_dirty_bitmap_incoming_migration(void);
> > +
> > #endif
> > diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
> > new file mode 100644
> > index 0000000000..53cb20045d
> > --- /dev/null
> > +++ b/migration/block-dirty-bitmap.c
> > @@ -0,0 +1,734 @@
> > +/*
> > + * Block dirty bitmap postcopy migration
> > + *
> > + * Copyright IBM, Corp. 2009
> > + * Copyright (c) 2016-2017 Parallels International GmbH
> > + *
> > + * Authors:
> > + * Liran Schour <lirans@il.ibm.com>
> > + * Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> > + *
> > + * This work is licensed under the terms of the GNU GPL, version 2. See
> > + * the COPYING file in the top-level directory.
> > + * This file is derived from migration/block.c, so it's author and IBM copyright
> > + * are here, although content is quite different.
> > + *
> > + * Contributions after 2012-01-13 are licensed under the terms of the
> > + * GNU GPL, version 2 or (at your option) any later version.
> > + *
> > + * ***
> > + *
> > + * Here postcopy migration of dirty bitmaps is realized. Only named dirty
> > + * bitmaps, associated with root nodes and non-root named nodes are migrated.
>
> Put another way, only QMP-addressable bitmaps. Nodes without a name that
> are not the root have no way to be addressed.
>
> > + *
> > + * If destination qemu is already containing a dirty bitmap with the same name
>
> "If the destination QEMU already contains a dirty bitmap with the same name"
>
> > + * as a migrated bitmap (for the same node), then, if their granularities are
> > + * the same the migration will be done, otherwise the error will be generated.
>
> "an error"
>
> > + *
> > + * If destination qemu doesn't contain such bitmap it will be created.
>
> "If the destination QEMU doesn't contain such a bitmap, it will be created."
>
> > + *
> > + * format of migration:
> > + *
> > + * # Header (shared for different chunk types)
> > + * 1, 2 or 4 bytes: flags (see qemu_{put,put}_flags)
> > + * [ 1 byte: node name size ] \ flags & DEVICE_NAME
> > + * [ n bytes: node name ] /
> > + * [ 1 byte: bitmap name size ] \ flags & BITMAP_NAME
> > + * [ n bytes: bitmap name ] /
> > + *
> > + * # Start of bitmap migration (flags & START)
> > + * header
> > + * be64: granularity
> > + * 1 byte: bitmap flags (corresponds to BdrvDirtyBitmap)
> > + * bit 0 - bitmap is enabled
> > + * bit 1 - bitmap is persistent
> > + * bit 2 - bitmap is autoloading
> > + * bits 3-7 - reserved, must be zero
> > + *
> > + * # Complete of bitmap migration (flags & COMPLETE)
> > + * header
> > + *
> > + * # Data chunk of bitmap migration
> > + * header
> > + * be64: start sector
> > + * be32: number of sectors
> > + * [ be64: buffer size ] \ ! (flags & ZEROES)
> > + * [ n bytes: buffer ] /
> > + *
> > + * The last chunk in stream should contain flags & EOS. The chunk may skip
> > + * device and/or bitmap names, assuming them to be the same with the previous
> > + * chunk.
> > + */
> > +
>
> Been a while since I reviewed the format, but it seems sane.
>
> > +#include "qemu/osdep.h"
> > +#include "block/block.h"
> > +#include "block/block_int.h"
> > +#include "sysemu/block-backend.h"
> > +#include "qemu/main-loop.h"
> > +#include "qemu/error-report.h"
> > +#include "migration/misc.h"
> > +#include "migration/migration.h"
> > +#include "migration/qemu-file.h"
> > +#include "migration/vmstate.h"
> > +#include "migration/register.h"
> > +#include "qemu/hbitmap.h"
> > +#include "sysemu/sysemu.h"
> > +#include "qemu/cutils.h"
> > +#include "qapi/error.h"
> > +#include "trace.h"
> > +
> > +#define CHUNK_SIZE (1 << 10)
> > +
> > +/* Flags occupy one, two or four bytes (Big Endian). The size is determined as
> > + * follows:
> > + * in first (most significant) byte bit 8 is clear --> one byte
> > + * in first byte bit 8 is set --> two or four bytes, depending on second
> > + * byte:
> > + * | in second byte bit 8 is clear --> two bytes
> > + * | in second byte bit 8 is set --> four bytes
> > + */
> > +#define DIRTY_BITMAP_MIG_FLAG_EOS 0x01
> > +#define DIRTY_BITMAP_MIG_FLAG_ZEROES 0x02
> > +#define DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME 0x04
> > +#define DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME 0x08
> > +#define DIRTY_BITMAP_MIG_FLAG_START 0x10
> > +#define DIRTY_BITMAP_MIG_FLAG_COMPLETE 0x20
> > +#define DIRTY_BITMAP_MIG_FLAG_BITS 0x40
> > +
> > +#define DIRTY_BITMAP_MIG_EXTRA_FLAGS 0x80
> > +
> > +#define DIRTY_BITMAP_MIG_START_FLAG_ENABLED 0x01
> > +#define DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT 0x02
> > +#define DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD 0x04
> > +#define DIRTY_BITMAP_MIG_START_FLAG_RESERVED_MASK 0xf8
> > +
> > +typedef struct DirtyBitmapMigBitmapState {
> > + /* Written during setup phase. */
> > + BlockDriverState *bs;
> > + const char *node_name;
> > + BdrvDirtyBitmap *bitmap;
> > + uint64_t total_sectors;
> > + uint64_t sectors_per_chunk;
> > + QSIMPLEQ_ENTRY(DirtyBitmapMigBitmapState) entry;
> > + uint8_t flags;
> > +
> > + /* For bulk phase. */
> > + bool bulk_completed;
> > + uint64_t cur_sector;
> > +} DirtyBitmapMigBitmapState;
> > +
> > +typedef struct DirtyBitmapMigState {
> > + QSIMPLEQ_HEAD(dbms_list, DirtyBitmapMigBitmapState) dbms_list;
> > +
> > + bool bulk_completed;
> > +
> > + /* for send_bitmap_bits() */
> > + BlockDriverState *prev_bs;
> > + BdrvDirtyBitmap *prev_bitmap;
> > +} DirtyBitmapMigState;
> > +
> > +typedef struct DirtyBitmapLoadState {
> > + uint32_t flags;
> > + char node_name[256];
> > + char bitmap_name[256];
> > + BlockDriverState *bs;
> > + BdrvDirtyBitmap *bitmap;
> > +} DirtyBitmapLoadState;
> > +
> > +static DirtyBitmapMigState dirty_bitmap_mig_state;
> > +
> > +typedef struct DirtyBitmapLoadBitmapState {
> > + BlockDriverState *bs;
> > + BdrvDirtyBitmap *bitmap;
> > + bool migrated;
> > +} DirtyBitmapLoadBitmapState;
> > +static GSList *enabled_bitmaps;
> > +QemuMutex finish_lock;
> > +
> > +void init_dirty_bitmap_incoming_migration(void)
> > +{
> > + qemu_mutex_init(&finish_lock);
> > +}
> > +
>
> This is a little odd as public interface. David, is there a nicer way to
> integrate in-migrate hooks? I guess it hasn't come up yet. Anyway, it
> might be nice to leave a comment here for now that says that the only
> caller is migration.c, and it will only ever call it once.
I don't think having an init_ function like that is a problem;
we've got an init_blk_migration, so I guess it's similar.
I generally prefer things to be part of the incoming state structure
rather than a file global; but that's not a huge one.
> > +static uint32_t qemu_get_bitmap_flags(QEMUFile *f)
> > +{
> > + uint8_t flags = qemu_get_byte(f);
> > + if (flags & DIRTY_BITMAP_MIG_EXTRA_FLAGS) {
> > + flags = flags << 8 | qemu_get_byte(f);
> > + if (flags & DIRTY_BITMAP_MIG_EXTRA_FLAGS) {
> > + flags = flags << 16 | qemu_get_be16(f);
> > + }
> > + }
> > +
> > + return flags;
> > +}
> > +
>
> ok
>
> (Sorry for the per-function ACKs, it's just helpful for me to know which
> functions I followed execution of on paper to make sure I got everything
> in this big patch.)
>
> > +static void qemu_put_bitmap_flags(QEMUFile *f, uint32_t flags)
> > +{
> > + /* The code currently do not send flags more than one byte */
> > + assert(!(flags & (0xffffff00 | DIRTY_BITMAP_MIG_EXTRA_FLAGS)));
> > +
> > + qemu_put_byte(f, flags);
> > +}
> > +
>
> ok
>
> > +static void send_bitmap_header(QEMUFile *f, DirtyBitmapMigBitmapState *dbms,
> > + uint32_t additional_flags)
> > +{
> > + BlockDriverState *bs = dbms->bs;
> > + BdrvDirtyBitmap *bitmap = dbms->bitmap;
> > + uint32_t flags = additional_flags;
> > + trace_send_bitmap_header_enter();
> > +
> > + if (bs != dirty_bitmap_mig_state.prev_bs) {
> > + dirty_bitmap_mig_state.prev_bs = bs;
> > + flags |= DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME;
> > + }
> > +
> > + if (bitmap != dirty_bitmap_mig_state.prev_bitmap) {
> > + dirty_bitmap_mig_state.prev_bitmap = bitmap;
> > + flags |= DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME;
> > + }
> > +
>
> I guess the idea here is that we might be able to skip the node name
> broadcast, leaving the possibilities as:
>
> - new node and bitmap: send both
> - new bitmap, but not node: send bitmap name only
> - same for both: send neither
>
> and that otherwise it's not possible to have a new node but "same
> bitmap" by nature of how the structures are organized.
>
> > + qemu_put_bitmap_flags(f, flags);
> > +
> > + if (flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) {
> > + qemu_put_counted_string(f, dbms->node_name);
> > + }
> > +
> > + if (flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) {
> > + qemu_put_counted_string(f, bdrv_dirty_bitmap_name(bitmap));
> > + }
> > +}
> > +
>
> ok
>
> > +static void send_bitmap_start(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
> > +{
> > + send_bitmap_header(f, dbms, DIRTY_BITMAP_MIG_FLAG_START);
> > + qemu_put_be32(f, bdrv_dirty_bitmap_granularity(dbms->bitmap));
> > + qemu_put_byte(f, dbms->flags);
> > +}
> > +
>
> ok
>
> > +static void send_bitmap_complete(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
> > +{
> > + send_bitmap_header(f, dbms, DIRTY_BITMAP_MIG_FLAG_COMPLETE);
> > +}
> > +
>
> ok
>
> > +static void send_bitmap_bits(QEMUFile *f, DirtyBitmapMigBitmapState *dbms,
> > + uint64_t start_sector, uint32_t nr_sectors)
> > +{
> > + /* align for buffer_is_zero() */
> > + uint64_t align = 4 * sizeof(long);
> > + uint64_t unaligned_size =
> > + bdrv_dirty_bitmap_serialization_size(
> > + dbms->bitmap, start_sector << BDRV_SECTOR_BITS,
> > + (uint64_t)nr_sectors << BDRV_SECTOR_BITS);
> > + uint64_t buf_size = (unaligned_size + align - 1) & ~(align - 1);
> > + uint8_t *buf = g_malloc0(buf_size);
> > + uint32_t flags = DIRTY_BITMAP_MIG_FLAG_BITS;
> > +
> > + bdrv_dirty_bitmap_serialize_part(
> > + dbms->bitmap, buf, start_sector << BDRV_SECTOR_BITS,
> > + (uint64_t)nr_sectors << BDRV_SECTOR_BITS);
> > +
> > + if (buffer_is_zero(buf, buf_size)) {
> > + g_free(buf);
> > + buf = NULL;
> > + flags |= DIRTY_BITMAP_MIG_FLAG_ZEROES;
> > + }
> > +
> > + trace_send_bitmap_bits(flags, start_sector, nr_sectors, buf_size);
> > +
> > + send_bitmap_header(f, dbms, flags);
> > +
> > + qemu_put_be64(f, start_sector);
> > + qemu_put_be32(f, nr_sectors);
> > +
> > + /* if a block is zero we need to flush here since the network
> > + * bandwidth is now a lot higher than the storage device bandwidth.
> > + * thus if we queue zero blocks we slow down the migration. */
>
> Can you elaborate on this for me?
>
> > + if (flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
> > + qemu_fflush(f);
> > + } else {
> > + qemu_put_be64(f, buf_size);
> > + qemu_put_buffer(f, buf, buf_size);
> > + }
> > +
> > + g_free(buf);
> > +}
> > +
> > +
> > +/* Called with iothread lock taken. */
> > +
> > +static int init_dirty_bitmap_migration(void)
> > +{
> > + BlockDriverState *bs;
> > + BdrvDirtyBitmap *bitmap;
> > + DirtyBitmapMigBitmapState *dbms;
> > + BdrvNextIterator it;
> > +
> > + dirty_bitmap_mig_state.bulk_completed = false;
> > + dirty_bitmap_mig_state.prev_bs = NULL;
> > + dirty_bitmap_mig_state.prev_bitmap = NULL;
> > +
> > + for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
> > + if (!bdrv_get_device_or_node_name(bs)) {
> > + /* not named non-root node */
>
> I can't imagine the situation it would arise in, but is it possible to
> have a named bitmap attached to a now-anonymous node?
>
> Let's say we attach a bitmap to a root node, but then later we insert a
> filter or something above it and it's no longer at the root.
>
> We should probably prohibit such things, or at the very least toss out
> an error here instead of silently continuing.
>
> I think the only things valid to just *skip* are nameless bitmaps.
> Anything named we really ought to either migrate or error out over, I
> think, even if the circumstances leading to such a configuration are
> very unlikely.
>
> > + continue;
> > + }
> > +
> > + for (bitmap = bdrv_dirty_bitmap_next(bs, NULL); bitmap;
> > + bitmap = bdrv_dirty_bitmap_next(bs, bitmap)) {
> > + if (!bdrv_dirty_bitmap_name(bitmap)) {
> > + continue;
> > + }
> > +
> > + if (bdrv_dirty_bitmap_frozen(bitmap)) {
> > + error_report("Can't migrate frozen dirty bitmap: '%s",
> > + bdrv_dirty_bitmap_name(bitmap));
> > + return -1;
> > + }
> > + }
> > + }
> > +
> > + for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
> > + if (!bdrv_get_device_or_node_name(bs)) {
> > + /* not named non-root node */
> > + continue;
> > + }
>
> Why two-pass? I guess because we don't have to tear anything down if we
> check for errors in advance?
>
> I worry that if we need to amend the logic here that it's error-prone to
> update it in two places, so maybe we ought to just have one loop.
>
> > +
> > + for (bitmap = bdrv_dirty_bitmap_next(bs, NULL); bitmap;
> > + bitmap = bdrv_dirty_bitmap_next(bs, bitmap)) {
> > + if (!bdrv_dirty_bitmap_name(bitmap)) {
> > + continue;
> > + }
> > +
> > + bdrv_ref(bs);
> > + bdrv_dirty_bitmap_set_frozen(bitmap, true);
> > +
>
> We could say that for any bitmap in the list of pending bitmaps to
> migrate, we know that we have to un-freeze it, since we never add any
> bitmaps that are frozen to our list.
>
> > + dbms = g_new0(DirtyBitmapMigBitmapState, 1);
> > + dbms->bs = bs;
> > + dbms->node_name = bdrv_get_node_name(bs);
> > + if (!dbms->node_name || dbms->node_name[0] == '\0') {
> > + dbms->node_name = bdrv_get_device_name(bs);
> > + }
> > + dbms->bitmap = bitmap;
> > + dbms->total_sectors = bdrv_nb_sectors(bs);
> > + dbms->sectors_per_chunk = CHUNK_SIZE * 8 *
> > + bdrv_dirty_bitmap_granularity(bitmap) >> BDRV_SECTOR_BITS;
>
> Eric may want to avoid checking in new code that thinks in sectors, but
> for the sake of review I don't mind right now.
>
> (Sorry, Eric!)
>
> > + if (bdrv_dirty_bitmap_enabled(bitmap)) {
> > + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_ENABLED;
> > + }
> > + if (bdrv_dirty_bitmap_get_persistance(bitmap)) {
> > + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT;
> > + }
> > + if (bdrv_dirty_bitmap_get_autoload(bitmap)) {
> > + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD;
> > + }
> > +
> > + bdrv_dirty_bitmap_set_persistance(bitmap, false);
>
> Oh, this might be stranger to undo. Perhaps what we CAN do is limit the
> second pass to just this action and allow ourselves to unroll everything
> else.
>
> > +
> > + QSIMPLEQ_INSERT_TAIL(&dirty_bitmap_mig_state.dbms_list,
> > + dbms, entry);
> > + }
> > + }
> > +
> > + return 0;
> > +}
> > +
> > +/* Called with no lock taken. */
> > +static void bulk_phase_send_chunk(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
> > +{
> > + uint32_t nr_sectors = MIN(dbms->total_sectors - dbms->cur_sector,
> > + dbms->sectors_per_chunk);
> > +
> > + send_bitmap_bits(f, dbms, dbms->cur_sector, nr_sectors);
> > +
> > + dbms->cur_sector += nr_sectors;
> > + if (dbms->cur_sector >= dbms->total_sectors) {
> > + dbms->bulk_completed = true;
> > + }
> > +}
> > +
> > +/* Called with no lock taken. */
> > +static void bulk_phase(QEMUFile *f, bool limit)
> > +{
> > + DirtyBitmapMigBitmapState *dbms;
> > +
> > + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
> > + while (!dbms->bulk_completed) {
> > + bulk_phase_send_chunk(f, dbms);
> > + if (limit && qemu_file_rate_limit(f)) {
> > + return;
> > + }
> > + }
> > + }
> > +
> > + dirty_bitmap_mig_state.bulk_completed = true;
> > +}
> > +
> > +/* Called with iothread lock taken. */
> > +static void dirty_bitmap_mig_cleanup(void)
> > +{
> > + DirtyBitmapMigBitmapState *dbms;
> > +
> > + while ((dbms = QSIMPLEQ_FIRST(&dirty_bitmap_mig_state.dbms_list)) != NULL) {
> > + QSIMPLEQ_REMOVE_HEAD(&dirty_bitmap_mig_state.dbms_list, entry);
> > + bdrv_dirty_bitmap_set_frozen(dbms->bitmap, false);
> > + bdrv_unref(dbms->bs);
> > + g_free(dbms);
> > + }
> > +}
> > +
>
> ok
>
> > +/* for SaveVMHandlers */
> > +static void dirty_bitmap_save_cleanup(void *opaque)
> > +{
> > + dirty_bitmap_mig_cleanup();
> > +}
> > +
>
> ok
>
> > +static int dirty_bitmap_save_iterate(QEMUFile *f, void *opaque)
> > +{
> > + trace_dirty_bitmap_save_iterate(migration_in_postcopy());
> > +
> > + if (migration_in_postcopy() && !dirty_bitmap_mig_state.bulk_completed) {
> > + bulk_phase(f, true);
> > + }
> > +
> > + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
> > +
> > + return dirty_bitmap_mig_state.bulk_completed;
> > +}
> > +
>
> What's the purpose behind doing bulk save both here and in
> dirty_bitmap_save_complete? Is there a path that isn't guaranteed to
> call one of the completion functions?
>
> (The way it's coded seems like it'll work fine, but I'm curious about
> what looks like a redundancy at a glance.)
I think I can see the reasoning; I think the idea is that in each
iteration you send a chunk of data (note the 'true' means that it
gets modulated by bandwidth limiting - although we currently don't
have that in postcopy - I need to fix that) - so it might
not actually send all of it.
The complete guarantees it's all sent.
So note this IS iterating potentially (OK but probably not
at the moment)
> > +/* Called with iothread lock taken. */
> > +
> > +static int dirty_bitmap_save_complete(QEMUFile *f, void *opaque)
> > +{
> > + DirtyBitmapMigBitmapState *dbms;
> > + trace_dirty_bitmap_save_complete_enter();
> > +
> > + if (!dirty_bitmap_mig_state.bulk_completed) {
> > + bulk_phase(f, false);
> > + }
> > +
>
> funny now that we don't actually really iterate over the data, and the
> bulk phase is now really the _only_ phase :)
>
> > + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
> > + send_bitmap_complete(f, dbms);
> > + }
> > +
> > + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
> > +
> > + trace_dirty_bitmap_save_complete_finish();
> > +
> > + dirty_bitmap_mig_cleanup();
> > + return 0;
> > +}
> > +
>
> ok
>
> > +static void dirty_bitmap_save_pending(QEMUFile *f, void *opaque,
> > + uint64_t max_size,
> > + uint64_t *res_precopy_only,
> > + uint64_t *res_compatible,
> > + uint64_t *res_postcopy_only)
> > +{
> > + DirtyBitmapMigBitmapState *dbms;
> > + uint64_t pending = 0;
> > +
> > + qemu_mutex_lock_iothread();
> > +
> > + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
> > + uint64_t gran = bdrv_dirty_bitmap_granularity(dbms->bitmap);
> > + uint64_t sectors = dbms->bulk_completed ? 0 :
> > + dbms->total_sectors - dbms->cur_sector;
> > +
> > + pending += (sectors * BDRV_SECTOR_SIZE + gran - 1) / gran;
> > + }
> > +
> > + qemu_mutex_unlock_iothread();
> > +
> > + trace_dirty_bitmap_save_pending(pending, max_size);
> > +
> > + *res_postcopy_only += pending;
> > +}
> > +
>
> ok
>
> > +/* First occurrence of this bitmap. It should be created if doesn't exist */
> > +static int dirty_bitmap_load_start(QEMUFile *f, DirtyBitmapLoadState *s)
> > +{
> > + Error *local_err = NULL;
> > + uint32_t granularity = qemu_get_be32(f);
> > + uint8_t flags = qemu_get_byte(f);
> > +
> > + if (!s->bitmap) {
> > + s->bitmap = bdrv_create_dirty_bitmap(s->bs, granularity,
> > + s->bitmap_name, &local_err);
> > + if (!s->bitmap) {
> > + error_report_err(local_err);
> > + return -EINVAL;
> > + }
> > + } else {
> > + uint32_t dest_granularity =
> > + bdrv_dirty_bitmap_granularity(s->bitmap);
> > + if (dest_granularity != granularity) {
> > + error_report("Error: "
> > + "Migrated bitmap granularity (%" PRIu32 ") "
> > + "doesn't match the destination bitmap '%s' "
> > + "granularity (%" PRIu32 ")",
> > + granularity,
> > + bdrv_dirty_bitmap_name(s->bitmap),
> > + dest_granularity);
> > + return -EINVAL;
> > + }
> > + }
> > +
>
> I'm a fan of auto-creating the bitmaps. Do you have a use-case for why
> creating them ahead of time is better, or are you just attempting to be
> flexible?
>
> > + if (flags & DIRTY_BITMAP_MIG_START_FLAG_RESERVED_MASK) {
> > + error_report("Unknown flags in migrated dirty bitmap header: %x",
> > + flags);
> > + return -EINVAL;
> > + }
> > +
> > + if (flags & DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT) {
> > + bdrv_dirty_bitmap_set_persistance(s->bitmap, true);
> > + }
> > + if (flags & DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD) {
> > + bdrv_dirty_bitmap_set_autoload(s->bitmap, true);
> > + }
> > +
> > + bdrv_disable_dirty_bitmap(s->bitmap);
>
> OK, so we start them off as disabled, and
>
> > + if (flags & DIRTY_BITMAP_MIG_START_FLAG_ENABLED) {
> > + DirtyBitmapLoadBitmapState *b;
> > +
> > + bdrv_dirty_bitmap_create_successor(s->bs, s->bitmap, &local_err);
> > + if (local_err) {
> > + error_report_err(local_err);
> > + return -EINVAL;
> > + }
> > +
>
> If they weren't disabled on the host, we create a successor to record
> writes while we wait for the rest of the data to arrive.
>
> > + b = g_new(DirtyBitmapLoadBitmapState, 1);
> > + b->bs = s->bs;
> > + b->bitmap = s->bitmap;
> > + b->migrated = false;
> > + enabled_bitmaps = g_slist_prepend(enabled_bitmaps, b);
>
> And we make a note of which ones we were supposed to re-enable.
>
> > + }
> > +
> > + return 0;
> > +}
>
> OK
>
> > +
> > +void dirty_bitmap_mig_before_vm_start(void)
>
> Similarly, I guess I find it weird that this is a callable interface.
>
> David, no nice hook for just-prior-to-vm-start calls? a
> .postcopy_pivot() hook or something might be nice..
Hmm, the other way a lot of devices do it is to hook the runstate
change.
> > +{
> > + GSList *item;
> > +
> > + qemu_mutex_lock(&finish_lock);
> > +
> > + for (item = enabled_bitmaps; item; item = g_slist_next(item)) {
> > + DirtyBitmapLoadBitmapState *b = item->data;
> > +
>
> Anyway, if I am reading this right; we call this in the postcopy phase
> prior to receiving the entirety of the bitmaps (so before receiving
> COMPLETE) ... right?
>
> > + if (b->migrated) {
> > + bdrv_enable_dirty_bitmap(b->bitmap);
>
> ...or, am I confused, and we might receive a COMPLETE event prior to the
> postcopy pivot?
>
> Anyway, I suppose this code says "If we received the entire bitmap, go
> ahead and enable it."
>
> > + } else {
> > + bdrv_dirty_bitmap_enable_successor(b->bitmap);
>
> And this says "If we haven't received it yet, enable the successor to
> record writes until we get the rest of the data."
>
> > + }
> > +
> > + g_free(b);
> > + }
> > +
> > + g_slist_free(enabled_bitmaps);
> > + enabled_bitmaps = NULL;
> > +
> > + qemu_mutex_unlock(&finish_lock);
> > +}
> > +
> > +static void dirty_bitmap_load_complete(QEMUFile *f, DirtyBitmapLoadState *s)
> > +{
> > + GSList *item;
> > + trace_dirty_bitmap_load_complete();
> > + bdrv_dirty_bitmap_deserialize_finish(s->bitmap);
> > +
> > + qemu_mutex_lock(&finish_lock);
> > +
> > + for (item = enabled_bitmaps; item; item = g_slist_next(item)) {
> > + DirtyBitmapLoadBitmapState *b = item->data;
> > +
> > + if (b->bitmap == s->bitmap) {
> > + b->migrated = true;
>
> we can probably break; here now, right?
>
> (This whole stanza is a little strange, can't we cache the active
> DirtyBitmapLoadBitmapState in DirtyBitmapLoadState? I guess not, because
> we're looking up the BdrvDirtyBitmap itself and caching that instead, so
> either way we have some kind of lookup on every context switch.)
>
> > + }
> > + }
> > +
> > + if (bdrv_dirty_bitmap_frozen(s->bitmap)) {
> > + if (enabled_bitmaps == NULL) {
> > + /* in postcopy */
> > + AioContext *aio_context = bdrv_get_aio_context(s->bs);
> > + aio_context_acquire(aio_context);
> > +
> > + bdrv_reclaim_dirty_bitmap(s->bs, s->bitmap, &error_abort);
> > + bdrv_enable_dirty_bitmap(s->bitmap);
> > +
>
> OK, so if enabled_bitmaps is gone, that means we already pivoted and
> we're live on the receiving end here. We merge the successor into the
> fully deserialized bitmap and enable it.
>
> > + aio_context_release(aio_context);
> > + } else {
> > + /* target not started, successor is empty */
> > + bdrv_dirty_bitmap_release_successor(s->bs, s->bitmap);
>
> Otherwise we just trash the successor. Did we really need a new call for
> this? I suppose it's faster than merging a 0-bit bitmap, but the
> additional API complexity for the speed win here seems like premature
> optimization.
>
> ...well, you already wrote it, so I won't argue.
>
> > + }
> > + }
> > +
> > + qemu_mutex_unlock(&finish_lock);
> > +}
> > +
> > +static int dirty_bitmap_load_bits(QEMUFile *f, DirtyBitmapLoadState *s)
> > +{
> > + uint64_t first_byte = qemu_get_be64(f) << BDRV_SECTOR_BITS;
> > + uint64_t nr_bytes = (uint64_t)qemu_get_be32(f) << BDRV_SECTOR_BITS;
> > + trace_dirty_bitmap_load_bits_enter(first_byte >> BDRV_SECTOR_BITS,
> > + nr_bytes >> BDRV_SECTOR_BITS);
> > +
> > + if (s->flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
> > + trace_dirty_bitmap_load_bits_zeroes();
> > + bdrv_dirty_bitmap_deserialize_zeroes(s->bitmap, first_byte, nr_bytes,
> > + false);
> > + } else {
> > + uint8_t *buf;
> > + uint64_t buf_size = qemu_get_be64(f);
> > + uint64_t needed_size =
> > + bdrv_dirty_bitmap_serialization_size(s->bitmap,
> > + first_byte, nr_bytes);
> > +
> > + if (needed_size > buf_size) {
> > + error_report("Error: Migrated bitmap granularity doesn't "
> > + "match the destination bitmap '%s' granularity",
> > + bdrv_dirty_bitmap_name(s->bitmap));
> > + return -EINVAL;
> > + }
> > +
> > + buf = g_malloc(buf_size);
> > + qemu_get_buffer(f, buf, buf_size);
> > + bdrv_dirty_bitmap_deserialize_part(s->bitmap, buf, first_byte, nr_bytes,
> > + false);
> > + g_free(buf);
> > + }
> > +
> > + return 0;
> > +}
> > +
>
> ok
>
> > +static int dirty_bitmap_load_header(QEMUFile *f, DirtyBitmapLoadState *s)
> > +{
> > + Error *local_err = NULL;
> > + s->flags = qemu_get_bitmap_flags(f);
> > + trace_dirty_bitmap_load_header(s->flags);
> > +
> > + if (s->flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) {
> > + if (!qemu_get_counted_string(f, s->node_name)) {
> > + error_report("Unable to read node name string");
> > + return -EINVAL;
> > + }
> > + s->bs = bdrv_lookup_bs(s->node_name, s->node_name, &local_err);
> > + if (!s->bs) {
> > + error_report_err(local_err);
> > + return -EINVAL;
> > + }
> > + } else if (!s->bs) {
> > + error_report("Error: block device name is not set");
> > + return -EINVAL;
> > + }
> > +
> > + if (s->flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) {
> > + if (!qemu_get_counted_string(f, s->bitmap_name)) {
> > + error_report("Unable to read node name string");
> > + return -EINVAL;
> > + }
> > + s->bitmap = bdrv_find_dirty_bitmap(s->bs, s->bitmap_name);
> > +
> > + /* bitmap may be NULL here, it wouldn't be an error if it is the
> > + * first occurrence of the bitmap */
> > + if (!s->bitmap && !(s->flags & DIRTY_BITMAP_MIG_FLAG_START)) {
> > + error_report("Error: unknown dirty bitmap "
> > + "'%s' for block device '%s'",
> > + s->bitmap_name, s->node_name);
> > + return -EINVAL;
> > + }
> > + } else if (!s->bitmap) {
> > + error_report("Error: block device name is not set");
> > + return -EINVAL;
> > + }
> > +
> > + return 0;
> > +}
> > +
>
> ok
>
> > +static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id)
> > +{
> > + static DirtyBitmapLoadState s;
> > + int ret = 0;
> > +
> > + trace_dirty_bitmap_load_enter();
> > +
> > + if (version_id != 1) {
> > + return -EINVAL;
> > + }
> > +
> > + do {
> > + dirty_bitmap_load_header(f, &s);
> > +
> > + if (s.flags & DIRTY_BITMAP_MIG_FLAG_START) {
> > + ret = dirty_bitmap_load_start(f, &s);
> > + } else if (s.flags & DIRTY_BITMAP_MIG_FLAG_COMPLETE) {
> > + dirty_bitmap_load_complete(f, &s);
> > + } else if (s.flags & DIRTY_BITMAP_MIG_FLAG_BITS) {
> > + ret = dirty_bitmap_load_bits(f, &s);
> > + }
> > +
> > + if (!ret) {
> > + ret = qemu_file_get_error(f);
> > + }
> > +
> > + if (ret) {
> > + return ret;
> > + }
> > + } while (!(s.flags & DIRTY_BITMAP_MIG_FLAG_EOS));
> > +
> > + trace_dirty_bitmap_load_success();
> > + return 0;
> > +}
>
> OK
>
> > +
> > +static int dirty_bitmap_save_setup(QEMUFile *f, void *opaque)
> > +{
> > + DirtyBitmapMigBitmapState *dbms = NULL;
> > + if (init_dirty_bitmap_migration() < 0) {
> > + return -1;
> > + }
> > +
> > + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
> > + send_bitmap_start(f, dbms);
> > + }
> > + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
> > +
> > + return 0;
> > +}
> > +
>
> ok
>
> > +static bool dirty_bitmap_is_active(void *opaque)
> > +{
> > + return migrate_dirty_bitmaps();
> > +}
> > +
>
> ok
>
> > +static bool dirty_bitmap_is_active_iterate(void *opaque)
> > +{
> > + return dirty_bitmap_is_active(opaque) && !runstate_is_running();
> > +}
> > +
>
> On second thought, in patch 9, can you add a little tiny bit of
> documentation text explaining the exact nature of this callback?
>
> Is the second portion of the conditional here so that once we reach the
> postcopy state that .is_active_iterate starts returning true?
>
> "ok" if I'm reading this right, but it might be helped along by a little
> comment.
>
> > +static bool dirty_bitmap_has_postcopy(void *opaque)
> > +{
> > + return true;
> > +}
> > +
>
> ok! :)
>
> > +static SaveVMHandlers savevm_dirty_bitmap_handlers = {
> > + .save_setup = dirty_bitmap_save_setup,
> > + .save_live_complete_postcopy = dirty_bitmap_save_complete,
> > + .save_live_complete_precopy = dirty_bitmap_save_complete,
> > + .has_postcopy = dirty_bitmap_has_postcopy,
> > + .save_live_pending = dirty_bitmap_save_pending,
> > + .save_live_iterate = dirty_bitmap_save_iterate,
> > + .is_active_iterate = dirty_bitmap_is_active_iterate,
> > + .load_state = dirty_bitmap_load,
> > + .save_cleanup = dirty_bitmap_save_cleanup,
> > + .is_active = dirty_bitmap_is_active,
> > +};
> > +
> > +void dirty_bitmap_mig_init(void)
> > +{
> > + QSIMPLEQ_INIT(&dirty_bitmap_mig_state.dbms_list);
> > +
> > + register_savevm_live(NULL, "dirty-bitmap", 0, 1,
> > + &savevm_dirty_bitmap_handlers,
> > + &dirty_bitmap_mig_state);
> > +}
>
> ok
>
> dgilbert, would it be worth registering a block-driver-like registration
> trick that automatically invokes these functions instead of having to
> hook them up in vl.c? the more we add, the more hacky it looks to not
> have some subsystem-wide registration hook.
Maybe it's just simpler to put a mig_init in migration/migration.c and
make one call in vl.c; I'd rather keep a simple function than a whole
registration mechanism.
> > diff --git a/migration/migration.c b/migration/migration.c
> > index e973837bfd..66e9cf03cd 100644
> > --- a/migration/migration.c
> > +++ b/migration/migration.c
> > @@ -150,6 +150,9 @@ MigrationIncomingState *migration_incoming_get_current(void)
> > memset(&mis_current, 0, sizeof(MigrationIncomingState));
> > qemu_mutex_init(&mis_current.rp_mutex);
> > qemu_event_init(&mis_current.main_thread_load_event, false);
> > +
> > + init_dirty_bitmap_incoming_migration();
> > +
> > once = true;
> > }
> > return &mis_current;
> > diff --git a/migration/savevm.c b/migration/savevm.c
> > index 9bbfb3fa1b..b0c37ef9f1 100644
> > --- a/migration/savevm.c
> > +++ b/migration/savevm.c
> > @@ -1673,6 +1673,8 @@ static void loadvm_postcopy_handle_run_bh(void *opaque)
> >
> > trace_loadvm_postcopy_handle_run_vmstart();
> >
> > + dirty_bitmap_mig_before_vm_start();
> > +
> > if (autostart) {
> > /* Hold onto your hats, starting the CPU */
> > vm_start();
> > diff --git a/vl.c b/vl.c
> > index ec299099ff..3d393aaf2c 100644
> > --- a/vl.c
> > +++ b/vl.c
> > @@ -4642,6 +4642,7 @@ int main(int argc, char **argv, char **envp)
> >
> > blk_mig_init();
> > ram_mig_init();
> > + dirty_bitmap_mig_init();
> >
> > /* If the currently selected machine wishes to override the units-per-bus
> > * property of its default HBA interface type, do so now. */
> > diff --git a/migration/Makefile.objs b/migration/Makefile.objs
> > index 99e038024d..c83ec47ba8 100644
> > --- a/migration/Makefile.objs
> > +++ b/migration/Makefile.objs
> > @@ -6,6 +6,7 @@ common-obj-y += qemu-file.o global_state.o
> > common-obj-y += qemu-file-channel.o
> > common-obj-y += xbzrle.o postcopy-ram.o
> > common-obj-y += qjson.o
> > +common-obj-y += block-dirty-bitmap.o
> >
> > common-obj-$(CONFIG_RDMA) += rdma.o
> >
> > diff --git a/migration/trace-events b/migration/trace-events
> > index a04fffb877..e9eb8078d4 100644
> > --- a/migration/trace-events
> > +++ b/migration/trace-events
> > @@ -227,3 +227,17 @@ colo_vm_state_change(const char *old, const char *new) "Change '%s' => '%s'"
> > colo_send_message(const char *msg) "Send '%s' message"
> > colo_receive_message(const char *msg) "Receive '%s' message"
> > colo_failover_set_state(const char *new_state) "new state %s"
> > +
> > +# migration/block-dirty-bitmap.c
> > +send_bitmap_header_enter(void) ""
> > +send_bitmap_bits(uint32_t flags, uint64_t start_sector, uint32_t nr_sectors, uint64_t data_size) "\n flags: 0x%x\n start_sector: %" PRIu64 "\n nr_sectors: %" PRIu32 "\n data_size: %" PRIu64 "\n"
> > +dirty_bitmap_save_iterate(int in_postcopy) "in postcopy: %d"
> > +dirty_bitmap_save_complete_enter(void) ""
> > +dirty_bitmap_save_complete_finish(void) ""
> > +dirty_bitmap_save_pending(uint64_t pending, uint64_t max_size) "pending %" PRIu64 " max: %" PRIu64
> > +dirty_bitmap_load_complete(void) ""
> > +dirty_bitmap_load_bits_enter(uint64_t first_sector, uint32_t nr_sectors) "chunk: %" PRIu64 " %" PRIu32
> > +dirty_bitmap_load_bits_zeroes(void) ""
> > +dirty_bitmap_load_header(uint32_t flags) "flags 0x%x"
> > +dirty_bitmap_load_enter(void) ""
> > +dirty_bitmap_load_success(void) ""
> >
>
> OK, I think everything here is probably in order, and it's only my
> understanding that is a barrier at this point. Help me understand the
> rest of this patch and I'll re-pester migration to get this staged for
> qemu-next.
>
> --js
Dave
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 02/14] block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap
2017-11-16 8:56 ` Vladimir Sementsov-Ogievskiy
@ 2017-11-16 18:18 ` John Snow
0 siblings, 0 replies; 44+ messages in thread
From: John Snow @ 2017-11-16 18:18 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
On 11/16/2017 03:56 AM, Vladimir Sementsov-Ogievskiy wrote:
> 11.11.2017 01:52, John Snow wrote:
>>
>> On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
>>> It is needed to realize bdrv_dirty_bitmap_release_successor in
>>> the following patch.
>>>
>> OK, but...
>>
>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> ---
>>> block/dirty-bitmap.c | 25 ++++++++++++++++++++-----
>>> 1 file changed, 20 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>>> index 81adbeb6d4..981f99d362 100644
>>> --- a/block/dirty-bitmap.c
>>> +++ b/block/dirty-bitmap.c
>>> @@ -326,13 +326,13 @@ static bool
>>> bdrv_dirty_bitmap_has_name(BdrvDirtyBitmap *bitmap)
>>> return !!bdrv_dirty_bitmap_name(bitmap);
>>> }
>>> -/* Called with BQL taken. */
>>> -static void bdrv_do_release_matching_dirty_bitmap(
>>> +/* Called within bdrv_dirty_bitmap_lock..unlock */
>> ...Add this so it will compile:
>>
>> __attribute__((__unused__))
>
> ok
>
>>> +static void bdrv_do_release_matching_dirty_bitmap_locked(
>>> BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
>>> bool (*cond)(BdrvDirtyBitmap *bitmap))
>>> {
>>> BdrvDirtyBitmap *bm, *next;
>>> - bdrv_dirty_bitmaps_lock(bs);
>>> +
>>> QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
>>> if ((!bitmap || bm == bitmap) && (!cond || cond(bm))) {
>>> assert(!bm->active_iterators);
>>> @@ -344,18 +344,33 @@ static void bdrv_do_release_matching_dirty_bitmap(
>>> g_free(bm);
>>> if (bitmap) {
>>> - goto out;
>>> + return;
>>> }
>>> }
>>> }
>>> +
>>> if (bitmap) {
>>> abort();
>>> }
>> Do we have any style guide rules on using abort() instead of assert()?
>> The rest of this function uses assert, and it'd be less lines to simply
>> write:
>>
>> assert(!bitmap);
>>
>> which I think might also carry better semantic information for coverity
>> beyond an actual runtime conditional branch.
>>
>> (I think. Please correct me if I am wrong, I'm a little hazy on this.)
>
> agree, but it is a preexisting code, so I'll fix it with an additional
> patch.
>
You're right. I didn't notice it was pre-existing where I was looking at
it. I'll send my own little fixup. My mistake.
>>
>>> +}
>>> -out:
>>> +/* Called with BQL taken. */
>>> +static void bdrv_do_release_matching_dirty_bitmap(
>>> + BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
>>> + bool (*cond)(BdrvDirtyBitmap *bitmap))
>>> +{
>>> + bdrv_dirty_bitmaps_lock(bs);
>>> + bdrv_do_release_matching_dirty_bitmap_locked(bs, bitmap, cond);
>>> bdrv_dirty_bitmaps_unlock(bs);
>>> }
>>> +/* Called within bdrv_dirty_bitmap_lock..unlock */
>>> +static void bdrv_release_dirty_bitmap_locked(BlockDriverState *bs,
>>> + BdrvDirtyBitmap *bitmap)
>>> +{
>>> + bdrv_do_release_matching_dirty_bitmap_locked(bs, bitmap, NULL);
>>> +}
>>> +
>>> /* Called with BQL taken. */
>>> void bdrv_release_dirty_bitmap(BlockDriverState *bs,
>>> BdrvDirtyBitmap *bitmap)
>>> {
>>>
>> If you agree with those two changes, you may add:
>
> ok
>
>>
>> Reviewed-by: John Snow <jsnow@redhat.com>
>
>
Just make sure it compiles standalone by using the unused attribute and
you can add the RB.
--js
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 10/14] migration: add postcopy migration of dirty bitmaps
2017-11-16 10:24 ` Vladimir Sementsov-Ogievskiy
@ 2017-11-17 0:36 ` John Snow
2017-11-17 0:47 ` John Snow
1 sibling, 0 replies; 44+ messages in thread
From: John Snow @ 2017-11-17 0:36 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel
Cc: stefanha, Peter Lieven
On 11/16/2017 05:24 AM, Vladimir Sementsov-Ogievskiy wrote:
>>> + /* if a block is zero we need to flush here since the network
>>> + * bandwidth is now a lot higher than the storage device bandwidth.
>>> + * thus if we queue zero blocks we slow down the migration. */
>> Can you elaborate on this for me?
>
> it comes from migration/block.c, as it was a prototype for dirty bitmaps
> migration.
> May be the original thought was to give destination storage more time to
> handle
> write-zeros? It may make sense if it can't do it fast but really writes
> zeros.
>
>>
>>> + if (flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
>>> + qemu_fflush(f);
>>> + } else {
>>> + qemu_put_be64(f, buf_size);
>>> + qemu_put_buffer(f, buf, buf_size);
>>> + }
>>> +
>>> + g_free(buf);
>>> +}
Peter, Stefan; do you have any insight on the reason for this blurb's
appearance in migration/block.c? Looks like it showed up in
323004a39d4d8d33c744a5b108f80bfe6402fca3
I'm not sure I understand what the concern was that lead to this, unless
it's simply that without a flush() we can't guarantee progress.
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 10/14] migration: add postcopy migration of dirty bitmaps
2017-11-16 10:24 ` Vladimir Sementsov-Ogievskiy
2017-11-17 0:36 ` John Snow
@ 2017-11-17 0:47 ` John Snow
1 sibling, 0 replies; 44+ messages in thread
From: John Snow @ 2017-11-17 0:47 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
On 11/16/2017 05:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> 15.11.2017 04:58, John Snow wrote:
>>
>> On 10/30/2017 12:33 PM, Vladimir Sementsov-Ogievskiy wrote:
>>> Postcopy migration of dirty bitmaps. Only named dirty bitmaps,
>>> associated with root nodes and non-root named nodes are migrated.
>>>
>>> If destination qemu is already containing a dirty bitmap with the
>>> same name
>>> as a migrated bitmap (for the same node), then, if their
>>> granularities are
>>> the same the migration will be done, otherwise the error will be
>>> generated.
>>>
>>> If destination qemu doesn't contain such bitmap it will be created.
>>>
>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> ---
>>> include/migration/misc.h | 3 +
>>> migration/migration.h | 3 +
>>> migration/block-dirty-bitmap.c | 734
>>> +++++++++++++++++++++++++++++++++++++++++
>> Ouch :\
>>
>>> migration/migration.c | 3 +
>>> migration/savevm.c | 2 +
>>> vl.c | 1 +
>>> migration/Makefile.objs | 1 +
>>> migration/trace-events | 14 +
>>> 8 files changed, 761 insertions(+)
>>> create mode 100644 migration/block-dirty-bitmap.c
>>>
>> Organizationally, you introduce three new 'public' prototypes:
>>
>> dirty_bitmap_mig_init
>> dirty_bitmap_mig_before_vm_start
>> init_dirty_bitmap_incoming_migration
>>
>> mig_init is advertised in migration/misc.h, the other two are in
>> migration/migration.h.
>> The definitions for all three are in migration/block-dirty-bitmap.c
>>
>> In pure naivety, I find it weird to have something that you use in
>> migration.c and advertised in migration.h actually exist separately in
>> block-dirty-bitmap.c; but maybe this is the sanest thing to do.
>>
>>> diff --git a/include/migration/misc.h b/include/migration/misc.h
>>> index c079b7771b..9cc539e232 100644
>>> --- a/include/migration/misc.h
>>> +++ b/include/migration/misc.h
>>> @@ -55,4 +55,7 @@ bool migration_has_failed(MigrationState *);
>>> bool migration_in_postcopy_after_devices(MigrationState *);
>>> void migration_global_dump(Monitor *mon);
>>> +/* migration/block-dirty-bitmap.c */
>>> +void dirty_bitmap_mig_init(void);
>>> +
>>> #endif
>>> diff --git a/migration/migration.h b/migration/migration.h
>>> index 50d1f01346..4e3ad04664 100644
>>> --- a/migration/migration.h
>>> +++ b/migration/migration.h
>>> @@ -211,4 +211,7 @@ void migrate_send_rp_pong(MigrationIncomingState
>>> *mis,
>>> void migrate_send_rp_req_pages(MigrationIncomingState *mis, const
>>> char* rbname,
>>> ram_addr_t start, size_t len);
>>> +void dirty_bitmap_mig_before_vm_start(void);
>>> +void init_dirty_bitmap_incoming_migration(void);
>>> +
>>> #endif
>>> diff --git a/migration/block-dirty-bitmap.c
>>> b/migration/block-dirty-bitmap.c
>>> new file mode 100644
>>> index 0000000000..53cb20045d
>>> --- /dev/null
>>> +++ b/migration/block-dirty-bitmap.c
>>> @@ -0,0 +1,734 @@
>>> +/*
>>> + * Block dirty bitmap postcopy migration
>>> + *
>>> + * Copyright IBM, Corp. 2009
>>> + * Copyright (c) 2016-2017 Parallels International GmbH
>>> + *
>>> + * Authors:
>>> + * Liran Schour <lirans@il.ibm.com>
>>> + * Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> + *
>>> + * This work is licensed under the terms of the GNU GPL, version 2.
>>> See
>>> + * the COPYING file in the top-level directory.
>>> + * This file is derived from migration/block.c, so it's author and
>>> IBM copyright
>>> + * are here, although content is quite different.
>>> + *
>>> + * Contributions after 2012-01-13 are licensed under the terms of the
>>> + * GNU GPL, version 2 or (at your option) any later version.
>>> + *
>>> + * ***
>>> + *
>>> + * Here postcopy migration of dirty bitmaps is realized. Only named
>>> dirty
>>> + * bitmaps, associated with root nodes and non-root named nodes are
>>> migrated.
>> Put another way, only QMP-addressable bitmaps. Nodes without a name that
>> are not the root have no way to be addressed.
>>
>>> + *
>>> + * If destination qemu is already containing a dirty bitmap with the
>>> same name
>> "If the destination QEMU already contains a dirty bitmap with the same
>> name"
>>
>>> + * as a migrated bitmap (for the same node), then, if their
>>> granularities are
>>> + * the same the migration will be done, otherwise the error will be
>>> generated.
>> "an error"
>>
>>> + *
>>> + * If destination qemu doesn't contain such bitmap it will be created.
>> "If the destination QEMU doesn't contain such a bitmap, it will be
>> created."
>>
>>> + *
>>> + * format of migration:
>>> + *
>>> + * # Header (shared for different chunk types)
>>> + * 1, 2 or 4 bytes: flags (see qemu_{put,put}_flags)
>>> + * [ 1 byte: node name size ] \ flags & DEVICE_NAME
>>> + * [ n bytes: node name ] /
>>> + * [ 1 byte: bitmap name size ] \ flags & BITMAP_NAME
>>> + * [ n bytes: bitmap name ] /
>>> + *
>>> + * # Start of bitmap migration (flags & START)
>>> + * header
>>> + * be64: granularity
>>> + * 1 byte: bitmap flags (corresponds to BdrvDirtyBitmap)
>>> + * bit 0 - bitmap is enabled
>>> + * bit 1 - bitmap is persistent
>>> + * bit 2 - bitmap is autoloading
>>> + * bits 3-7 - reserved, must be zero
>>> + *
>>> + * # Complete of bitmap migration (flags & COMPLETE)
>>> + * header
>>> + *
>>> + * # Data chunk of bitmap migration
>>> + * header
>>> + * be64: start sector
>>> + * be32: number of sectors
>>> + * [ be64: buffer size ] \ ! (flags & ZEROES)
>>> + * [ n bytes: buffer ] /
>>> + *
>>> + * The last chunk in stream should contain flags & EOS. The chunk
>>> may skip
>>> + * device and/or bitmap names, assuming them to be the same with the
>>> previous
>>> + * chunk.
>>> + */
>>> +
>> Been a while since I reviewed the format, but it seems sane.
>>
>>> +#include "qemu/osdep.h"
>>> +#include "block/block.h"
>>> +#include "block/block_int.h"
>>> +#include "sysemu/block-backend.h"
>>> +#include "qemu/main-loop.h"
>>> +#include "qemu/error-report.h"
>>> +#include "migration/misc.h"
>>> +#include "migration/migration.h"
>>> +#include "migration/qemu-file.h"
>>> +#include "migration/vmstate.h"
>>> +#include "migration/register.h"
>>> +#include "qemu/hbitmap.h"
>>> +#include "sysemu/sysemu.h"
>>> +#include "qemu/cutils.h"
>>> +#include "qapi/error.h"
>>> +#include "trace.h"
>>> +
>>> +#define CHUNK_SIZE (1 << 10)
>>> +
>>> +/* Flags occupy one, two or four bytes (Big Endian). The size is
>>> determined as
>>> + * follows:
>>> + * in first (most significant) byte bit 8 is clear --> one byte
>>> + * in first byte bit 8 is set --> two or four bytes, depending
>>> on second
>>> + * byte:
>>> + * | in second byte bit 8 is clear --> two bytes
>>> + * | in second byte bit 8 is set --> four bytes
>>> + */
>>> +#define DIRTY_BITMAP_MIG_FLAG_EOS 0x01
>>> +#define DIRTY_BITMAP_MIG_FLAG_ZEROES 0x02
>>> +#define DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME 0x04
>>> +#define DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME 0x08
>>> +#define DIRTY_BITMAP_MIG_FLAG_START 0x10
>>> +#define DIRTY_BITMAP_MIG_FLAG_COMPLETE 0x20
>>> +#define DIRTY_BITMAP_MIG_FLAG_BITS 0x40
>>> +
>>> +#define DIRTY_BITMAP_MIG_EXTRA_FLAGS 0x80
>>> +
>>> +#define DIRTY_BITMAP_MIG_START_FLAG_ENABLED 0x01
>>> +#define DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT 0x02
>>> +#define DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD 0x04
>>> +#define DIRTY_BITMAP_MIG_START_FLAG_RESERVED_MASK 0xf8
>>> +
>>> +typedef struct DirtyBitmapMigBitmapState {
>>> + /* Written during setup phase. */
>>> + BlockDriverState *bs;
>>> + const char *node_name;
>>> + BdrvDirtyBitmap *bitmap;
>>> + uint64_t total_sectors;
>>> + uint64_t sectors_per_chunk;
>>> + QSIMPLEQ_ENTRY(DirtyBitmapMigBitmapState) entry;
>>> + uint8_t flags;
>>> +
>>> + /* For bulk phase. */
>>> + bool bulk_completed;
>>> + uint64_t cur_sector;
>>> +} DirtyBitmapMigBitmapState;
>>> +
>>> +typedef struct DirtyBitmapMigState {
>>> + QSIMPLEQ_HEAD(dbms_list, DirtyBitmapMigBitmapState) dbms_list;
>>> +
>>> + bool bulk_completed;
>>> +
>>> + /* for send_bitmap_bits() */
>>> + BlockDriverState *prev_bs;
>>> + BdrvDirtyBitmap *prev_bitmap;
>>> +} DirtyBitmapMigState;
>>> +
>>> +typedef struct DirtyBitmapLoadState {
>>> + uint32_t flags;
>>> + char node_name[256];
>>> + char bitmap_name[256];
>>> + BlockDriverState *bs;
>>> + BdrvDirtyBitmap *bitmap;
>>> +} DirtyBitmapLoadState;
>>> +
>>> +static DirtyBitmapMigState dirty_bitmap_mig_state;
>>> +
>>> +typedef struct DirtyBitmapLoadBitmapState {
>>> + BlockDriverState *bs;
>>> + BdrvDirtyBitmap *bitmap;
>>> + bool migrated;
>>> +} DirtyBitmapLoadBitmapState;
>>> +static GSList *enabled_bitmaps;
>>> +QemuMutex finish_lock;
>>> +
>>> +void init_dirty_bitmap_incoming_migration(void)
>>> +{
>>> + qemu_mutex_init(&finish_lock);
>>> +}
>>> +
>> This is a little odd as public interface. David, is there a nicer way to
>> integrate in-migrate hooks? I guess it hasn't come up yet. Anyway, it
>> might be nice to leave a comment here for now that says that the only
>> caller is migration.c, and it will only ever call it once.
>>
>>> +static uint32_t qemu_get_bitmap_flags(QEMUFile *f)
>>> +{
>>> + uint8_t flags = qemu_get_byte(f);
>>> + if (flags & DIRTY_BITMAP_MIG_EXTRA_FLAGS) {
>>> + flags = flags << 8 | qemu_get_byte(f);
>>> + if (flags & DIRTY_BITMAP_MIG_EXTRA_FLAGS) {
>>> + flags = flags << 16 | qemu_get_be16(f);
>>> + }
>>> + }
>>> +
>>> + return flags;
>>> +}
>>> +
>> ok
>>
>> (Sorry for the per-function ACKs, it's just helpful for me to know which
>> functions I followed execution of on paper to make sure I got everything
>> in this big patch.)
>>
>>> +static void qemu_put_bitmap_flags(QEMUFile *f, uint32_t flags)
>>> +{
>>> + /* The code currently do not send flags more than one byte */
>>> + assert(!(flags & (0xffffff00 | DIRTY_BITMAP_MIG_EXTRA_FLAGS)));
>>> +
>>> + qemu_put_byte(f, flags);
>>> +}
>>> +
>> ok
>>
>>> +static void send_bitmap_header(QEMUFile *f,
>>> DirtyBitmapMigBitmapState *dbms,
>>> + uint32_t additional_flags)
>>> +{
>>> + BlockDriverState *bs = dbms->bs;
>>> + BdrvDirtyBitmap *bitmap = dbms->bitmap;
>>> + uint32_t flags = additional_flags;
>>> + trace_send_bitmap_header_enter();
>>> +
>>> + if (bs != dirty_bitmap_mig_state.prev_bs) {
>>> + dirty_bitmap_mig_state.prev_bs = bs;
>>> + flags |= DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME;
>>> + }
>>> +
>>> + if (bitmap != dirty_bitmap_mig_state.prev_bitmap) {
>>> + dirty_bitmap_mig_state.prev_bitmap = bitmap;
>>> + flags |= DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME;
>>> + }
>>> +
>> I guess the idea here is that we might be able to skip the node name
>> broadcast, leaving the possibilities as:
>>
>> - new node and bitmap: send both
>> - new bitmap, but not node: send bitmap name only
>> - same for both: send neither
>
> yes
>
>>
>> and that otherwise it's not possible to have a new node but "same
>> bitmap" by nature of how the structures are organized.
>
> I hope we don't have bitmaps, shared between nodes)
>
>>
>>> + qemu_put_bitmap_flags(f, flags);
>>> +
>>> + if (flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) {
>>> + qemu_put_counted_string(f, dbms->node_name);
>>> + }
>>> +
>>> + if (flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) {
>>> + qemu_put_counted_string(f, bdrv_dirty_bitmap_name(bitmap));
>>> + }
>>> +}
>>> +
>> ok
>>
>>> +static void send_bitmap_start(QEMUFile *f, DirtyBitmapMigBitmapState
>>> *dbms)
>>> +{
>>> + send_bitmap_header(f, dbms, DIRTY_BITMAP_MIG_FLAG_START);
>>> + qemu_put_be32(f, bdrv_dirty_bitmap_granularity(dbms->bitmap));
>>> + qemu_put_byte(f, dbms->flags);
>>> +}
>>> +
>> ok
>>
>>> +static void send_bitmap_complete(QEMUFile *f,
>>> DirtyBitmapMigBitmapState *dbms)
>>> +{
>>> + send_bitmap_header(f, dbms, DIRTY_BITMAP_MIG_FLAG_COMPLETE);
>>> +}
>>> +
>> ok
>>
>>> +static void send_bitmap_bits(QEMUFile *f, DirtyBitmapMigBitmapState
>>> *dbms,
>>> + uint64_t start_sector, uint32_t
>>> nr_sectors)
>>> +{
>>> + /* align for buffer_is_zero() */
>>> + uint64_t align = 4 * sizeof(long);
>>> + uint64_t unaligned_size =
>>> + bdrv_dirty_bitmap_serialization_size(
>>> + dbms->bitmap, start_sector << BDRV_SECTOR_BITS,
>>> + (uint64_t)nr_sectors << BDRV_SECTOR_BITS);
>>> + uint64_t buf_size = (unaligned_size + align - 1) & ~(align - 1);
>>> + uint8_t *buf = g_malloc0(buf_size);
>>> + uint32_t flags = DIRTY_BITMAP_MIG_FLAG_BITS;
>>> +
>>> + bdrv_dirty_bitmap_serialize_part(
>>> + dbms->bitmap, buf, start_sector << BDRV_SECTOR_BITS,
>>> + (uint64_t)nr_sectors << BDRV_SECTOR_BITS);
>>> +
>>> + if (buffer_is_zero(buf, buf_size)) {
>>> + g_free(buf);
>>> + buf = NULL;
>>> + flags |= DIRTY_BITMAP_MIG_FLAG_ZEROES;
>>> + }
>>> +
>>> + trace_send_bitmap_bits(flags, start_sector, nr_sectors, buf_size);
>>> +
>>> + send_bitmap_header(f, dbms, flags);
>>> +
>>> + qemu_put_be64(f, start_sector);
>>> + qemu_put_be32(f, nr_sectors);
>>> +
>>> + /* if a block is zero we need to flush here since the network
>>> + * bandwidth is now a lot higher than the storage device bandwidth.
>>> + * thus if we queue zero blocks we slow down the migration. */
>> Can you elaborate on this for me?
>
> it comes from migration/block.c, as it was a prototype for dirty bitmaps
> migration.
> May be the original thought was to give destination storage more time to
> handle
> write-zeros? It may make sense if it can't do it fast but really writes
> zeros.
>
>>
>>> + if (flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
>>> + qemu_fflush(f);
>>> + } else {
>>> + qemu_put_be64(f, buf_size);
>>> + qemu_put_buffer(f, buf, buf_size);
>>> + }
>>> +
>>> + g_free(buf);
>>> +}
>>> +
>>> +
>>> +/* Called with iothread lock taken. */
>>> +
>>> +static int init_dirty_bitmap_migration(void)
>>> +{
>>> + BlockDriverState *bs;
>>> + BdrvDirtyBitmap *bitmap;
>>> + DirtyBitmapMigBitmapState *dbms;
>>> + BdrvNextIterator it;
>>> +
>>> + dirty_bitmap_mig_state.bulk_completed = false;
>>> + dirty_bitmap_mig_state.prev_bs = NULL;
>>> + dirty_bitmap_mig_state.prev_bitmap = NULL;
>>> +
>>> + for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
>>> + if (!bdrv_get_device_or_node_name(bs)) {
>>> + /* not named non-root node */
>> I can't imagine the situation it would arise in, but is it possible to
>> have a named bitmap attached to a now-anonymous node?
>>
>> Let's say we attach a bitmap to a root node, but then later we insert a
>> filter or something above it and it's no longer at the root.
>>
>> We should probably prohibit such things, or at the very least toss out
>> an error here instead of silently continuing.
>>
>> I think the only things valid to just *skip* are nameless bitmaps.
>> Anything named we really ought to either migrate or error out over, I
>> think, even if the circumstances leading to such a configuration are
>> very unlikely.
>
> agree, will fix.
>
>>
>>> + continue;
>>> + }
>>> +
>>> + for (bitmap = bdrv_dirty_bitmap_next(bs, NULL); bitmap;
>>> + bitmap = bdrv_dirty_bitmap_next(bs, bitmap)) {
>>> + if (!bdrv_dirty_bitmap_name(bitmap)) {
>>> + continue;
>>> + }
>>> +
>>> + if (bdrv_dirty_bitmap_frozen(bitmap)) {
>>> + error_report("Can't migrate frozen dirty bitmap: '%s",
>>> + bdrv_dirty_bitmap_name(bitmap));
>>> + return -1;
>>> + }
>>> + }
>>> + }
>>> +
>>> + for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
>>> + if (!bdrv_get_device_or_node_name(bs)) {
>>> + /* not named non-root node */
>>> + continue;
>>> + }
>> Why two-pass? I guess because we don't have to tear anything down if we
>> check for errors in advance?
>>
>> I worry that if we need to amend the logic here that it's error-prone to
>> update it in two places, so maybe we ought to just have one loop.
>
> why? just check all errors in first loop and then do all preparations in
> the second..
>
Sure, keep it this way for now. It just struck me as odd, but you're the
one writing it and it's not wrong; I just wondered if there was a way to
not have to select the bitmaps to work on separately, twice.
If it doesn't strike you as particularly worth changing, then I wouldn't
worry about it.
>>
>>> +
>>> + for (bitmap = bdrv_dirty_bitmap_next(bs, NULL); bitmap;
>>> + bitmap = bdrv_dirty_bitmap_next(bs, bitmap)) {
>>> + if (!bdrv_dirty_bitmap_name(bitmap)) {
>>> + continue;
>>> + }
>>> +
>>> + bdrv_ref(bs);
>>> + bdrv_dirty_bitmap_set_frozen(bitmap, true);
>>> +
>> We could say that for any bitmap in the list of pending bitmaps to
>> migrate, we know that we have to un-freeze it, since we never add any
>> bitmaps that are frozen to our list.
>>
>>> + dbms = g_new0(DirtyBitmapMigBitmapState, 1);
>>> + dbms->bs = bs;
>>> + dbms->node_name = bdrv_get_node_name(bs);
>>> + if (!dbms->node_name || dbms->node_name[0] == '\0') {
>>> + dbms->node_name = bdrv_get_device_name(bs);
>>> + }
>>> + dbms->bitmap = bitmap;
>>> + dbms->total_sectors = bdrv_nb_sectors(bs);
>>> + dbms->sectors_per_chunk = CHUNK_SIZE * 8 *
>>> + bdrv_dirty_bitmap_granularity(bitmap) >>
>>> BDRV_SECTOR_BITS;
>> Eric may want to avoid checking in new code that thinks in sectors, but
>> for the sake of review I don't mind right now.
>>
>> (Sorry, Eric!)
>>
>>> + if (bdrv_dirty_bitmap_enabled(bitmap)) {
>>> + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_ENABLED;
>>> + }
>>> + if (bdrv_dirty_bitmap_get_persistance(bitmap)) {
>>> + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT;
>>> + }
>>> + if (bdrv_dirty_bitmap_get_autoload(bitmap)) {
>>> + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD;
>>> + }
>>> +
>>> + bdrv_dirty_bitmap_set_persistance(bitmap, false);
>> Oh, this might be stranger to undo. Perhaps what we CAN do is limit the
>> second pass to just this action and allow ourselves to unroll everything
>> else.
>>
>>> +
>>> + QSIMPLEQ_INSERT_TAIL(&dirty_bitmap_mig_state.dbms_list,
>>> + dbms, entry);
>>> + }
>>> + }
>>> +
>
> hmm, I need to think about correct bitmap locking in the code
> (BdrvDirtyBitmap.lock)
>
Only if you felt like combining the two loops.
>>> + return 0;
>>> +}
>>> +
>>> +/* Called with no lock taken. */
>>> +static void bulk_phase_send_chunk(QEMUFile *f,
>>> DirtyBitmapMigBitmapState *dbms)
>>> +{
>>> + uint32_t nr_sectors = MIN(dbms->total_sectors - dbms->cur_sector,
>>> + dbms->sectors_per_chunk);
>>> +
>>> + send_bitmap_bits(f, dbms, dbms->cur_sector, nr_sectors);
>>> +
>>> + dbms->cur_sector += nr_sectors;
>>> + if (dbms->cur_sector >= dbms->total_sectors) {
>>> + dbms->bulk_completed = true;
>>> + }
>>> +}
>>> +
>>> +/* Called with no lock taken. */
>>> +static void bulk_phase(QEMUFile *f, bool limit)
>>> +{
>>> + DirtyBitmapMigBitmapState *dbms;
>>> +
>>> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
>>> + while (!dbms->bulk_completed) {
>>> + bulk_phase_send_chunk(f, dbms);
>>> + if (limit && qemu_file_rate_limit(f)) {
>>> + return;
>>> + }
>>> + }
>>> + }
>>> +
>>> + dirty_bitmap_mig_state.bulk_completed = true;
>>> +}
>>> +
>>> +/* Called with iothread lock taken. */
>>> +static void dirty_bitmap_mig_cleanup(void)
>>> +{
>>> + DirtyBitmapMigBitmapState *dbms;
>>> +
>>> + while ((dbms =
>>> QSIMPLEQ_FIRST(&dirty_bitmap_mig_state.dbms_list)) != NULL) {
>>> + QSIMPLEQ_REMOVE_HEAD(&dirty_bitmap_mig_state.dbms_list, entry);
>>> + bdrv_dirty_bitmap_set_frozen(dbms->bitmap, false);
>>> + bdrv_unref(dbms->bs);
>>> + g_free(dbms);
>>> + }
>>> +}
>>> +
>> ok
>>
>>> +/* for SaveVMHandlers */
>>> +static void dirty_bitmap_save_cleanup(void *opaque)
>>> +{
>>> + dirty_bitmap_mig_cleanup();
>>> +}
>>> +
>> ok
>>
>>> +static int dirty_bitmap_save_iterate(QEMUFile *f, void *opaque)
>>> +{
>>> + trace_dirty_bitmap_save_iterate(migration_in_postcopy());
>>> +
>>> + if (migration_in_postcopy() &&
>>> !dirty_bitmap_mig_state.bulk_completed) {
>>> + bulk_phase(f, true);
>>> + }
>>> +
>>> + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
>>> +
>>> + return dirty_bitmap_mig_state.bulk_completed;
>>> +}
>>> +
>> What's the purpose behind doing bulk save both here and in
>> dirty_bitmap_save_complete? Is there a path that isn't guaranteed to
>> call one of the completion functions?
>>
>> (The way it's coded seems like it'll work fine, but I'm curious about
>> what looks like a redundancy at a glance.)
>
> bulk_phase(f, true) is not guaranteed to do all the work. so in complete()
> we call it with false, to complete.
>
> hmm, it is saved from precopy migration approach. And looks like really,
> in case of postcopy
> we need only blulk_phase(f, false) in _complete and nothing else. I'll
> check.
>
OK, so more of a holdover that covers all the bases than something that
arose out of necessity. That makes sense to me.
>>
>>> +/* Called with iothread lock taken. */
>>> +
>>> +static int dirty_bitmap_save_complete(QEMUFile *f, void *opaque)
>>> +{
>>> + DirtyBitmapMigBitmapState *dbms;
>>> + trace_dirty_bitmap_save_complete_enter();
>>> +
>>> + if (!dirty_bitmap_mig_state.bulk_completed) {
>>> + bulk_phase(f, false);
>>> + }
>>> +
>> funny now that we don't actually really iterate over the data, and the
>> bulk phase is now really the _only_ phase :)
>>
>>> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
>>> + send_bitmap_complete(f, dbms);
>>> + }
>>> +
>>> + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
>>> +
>>> + trace_dirty_bitmap_save_complete_finish();
>>> +
>>> + dirty_bitmap_mig_cleanup();
>>> + return 0;
>>> +}
>>> +
>> ok
>>
>>> +static void dirty_bitmap_save_pending(QEMUFile *f, void *opaque,
>>> + uint64_t max_size,
>>> + uint64_t *res_precopy_only,
>>> + uint64_t *res_compatible,
>>> + uint64_t *res_postcopy_only)
>>> +{
>>> + DirtyBitmapMigBitmapState *dbms;
>>> + uint64_t pending = 0;
>>> +
>>> + qemu_mutex_lock_iothread();
>>> +
>>> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
>>> + uint64_t gran = bdrv_dirty_bitmap_granularity(dbms->bitmap);
>>> + uint64_t sectors = dbms->bulk_completed ? 0 :
>>> + dbms->total_sectors - dbms->cur_sector;
>>> +
>>> + pending += (sectors * BDRV_SECTOR_SIZE + gran - 1) / gran;
>>> + }
>>> +
>>> + qemu_mutex_unlock_iothread();
>>> +
>>> + trace_dirty_bitmap_save_pending(pending, max_size);
>>> +
>>> + *res_postcopy_only += pending;
>>> +}
>>> +
>> ok
>>
>>> +/* First occurrence of this bitmap. It should be created if doesn't
>>> exist */
>>> +static int dirty_bitmap_load_start(QEMUFile *f, DirtyBitmapLoadState
>>> *s)
>>> +{
>>> + Error *local_err = NULL;
>>> + uint32_t granularity = qemu_get_be32(f);
>>> + uint8_t flags = qemu_get_byte(f);
>>> +
>>> + if (!s->bitmap) {
>>> + s->bitmap = bdrv_create_dirty_bitmap(s->bs, granularity,
>>> + s->bitmap_name,
>>> &local_err);
>>> + if (!s->bitmap) {
>>> + error_report_err(local_err);
>>> + return -EINVAL;
>>> + }
>>> + } else {
>>> + uint32_t dest_granularity =
>>> + bdrv_dirty_bitmap_granularity(s->bitmap);
>>> + if (dest_granularity != granularity) {
>>> + error_report("Error: "
>>> + "Migrated bitmap granularity (%" PRIu32 ") "
>>> + "doesn't match the destination bitmap '%s' "
>>> + "granularity (%" PRIu32 ")",
>>> + granularity,
>>> + bdrv_dirty_bitmap_name(s->bitmap),
>>> + dest_granularity);
>>> + return -EINVAL;
>>> + }
>>> + }
>>> +
>> I'm a fan of auto-creating the bitmaps. Do you have a use-case for why
>> creating them ahead of time is better, or are you just attempting to be
>> flexible?
>
> the second. I just was my first approach about two years ago and it was not
> discussed until now). In our scenarios we use auto-creating way. So, it may
> be better to just fail if corresponding bitmap exists on destination
> without
> any granularity checks.
>
I don't think you need to change anything yet, I was just curious as to
what inspired the flexibility here.
>>
>>> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_RESERVED_MASK) {
>>> + error_report("Unknown flags in migrated dirty bitmap header:
>>> %x",
>>> + flags);
>>> + return -EINVAL;
>>> + }
>>> +
>>> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT) {
>>> + bdrv_dirty_bitmap_set_persistance(s->bitmap, true);
>>> + }
>>> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD) {
>>> + bdrv_dirty_bitmap_set_autoload(s->bitmap, true);
>>> + }
>>> +
>>> + bdrv_disable_dirty_bitmap(s->bitmap);
>> OK, so we start them off as disabled, and
>>
>>> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_ENABLED) {
>>> + DirtyBitmapLoadBitmapState *b;
>>> +
>>> + bdrv_dirty_bitmap_create_successor(s->bs, s->bitmap,
>>> &local_err);
>>> + if (local_err) {
>>> + error_report_err(local_err);
>>> + return -EINVAL;
>>> + }
>>> +
>> If they weren't disabled on the host, we create a successor to record
>> writes while we wait for the rest of the data to arrive.
>>
>>> + b = g_new(DirtyBitmapLoadBitmapState, 1);
>>> + b->bs = s->bs;
>>> + b->bitmap = s->bitmap;
>>> + b->migrated = false;
>>> + enabled_bitmaps = g_slist_prepend(enabled_bitmaps, b);
>> And we make a note of which ones we were supposed to re-enable.
>>
>>> + }
>>> +
>>> + return 0;
>>> +}
>> OK
>>
>>> +
>>> +void dirty_bitmap_mig_before_vm_start(void)
>> Similarly, I guess I find it weird that this is a callable interface.
>>
>> David, no nice hook for just-prior-to-vm-start calls? a
>> .postcopy_pivot() hook or something might be nice..
>>
>>> +{
>>> + GSList *item;
>>> +
>>> + qemu_mutex_lock(&finish_lock);
>>> +
>>> + for (item = enabled_bitmaps; item; item = g_slist_next(item)) {
>>> + DirtyBitmapLoadBitmapState *b = item->data;
>>> +
>> Anyway, if I am reading this right; we call this in the postcopy phase
>> prior to receiving the entirety of the bitmaps (so before receiving
>> COMPLETE) ... right?
>>
>>> + if (b->migrated) {
>>> + bdrv_enable_dirty_bitmap(b->bitmap);
>
> This is the most difficult thing here. Race is possible between postcopy
> complete
> and vm start. So, here is a finish_lock. And bitmap may be already
> migrated or not.
>
That makes sense. Figured it could be something of the kind, but wanted
to make sure I was reading it right.
>> ...or, am I confused, and we might receive a COMPLETE event prior to the
>> postcopy pivot?
>>
>> Anyway, I suppose this code says "If we received the entire bitmap, go
>> ahead and enable it."
>>
>>> + } else {
>>> + bdrv_dirty_bitmap_enable_successor(b->bitmap);
>> And this says "If we haven't received it yet, enable the successor to
>> record writes until we get the rest of the data."
>
> yes
>
>>
>>> + }
>>> +
>>> + g_free(b);
>>> + }
>>> +
>>> + g_slist_free(enabled_bitmaps);
>>> + enabled_bitmaps = NULL;
>>> +
>>> + qemu_mutex_unlock(&finish_lock);
>>> +}
>>> +
>>> +static void dirty_bitmap_load_complete(QEMUFile *f,
>>> DirtyBitmapLoadState *s)
>>> +{
>>> + GSList *item;
>>> + trace_dirty_bitmap_load_complete();
>>> + bdrv_dirty_bitmap_deserialize_finish(s->bitmap);
>>> +
>>> + qemu_mutex_lock(&finish_lock);
>>> +
>>> + for (item = enabled_bitmaps; item; item = g_slist_next(item)) {
>>> + DirtyBitmapLoadBitmapState *b = item->data;
>>> +
>>> + if (b->bitmap == s->bitmap) {
>>> + b->migrated = true;
>> we can probably break; here now, right?
>
> agree.
>
>>
>> (This whole stanza is a little strange, can't we cache the active
>> DirtyBitmapLoadBitmapState in DirtyBitmapLoadState? I guess not, because
>> we're looking up the BdrvDirtyBitmap itself and caching that instead, so
>> either way we have some kind of lookup on every context switch.)
>
> this search is needed only once, so caching will not help.
>
Yep, gotcha.
>>
>>> + }
>>> + }
>>> +
>>> + if (bdrv_dirty_bitmap_frozen(s->bitmap)) {
>>> + if (enabled_bitmaps == NULL) {
>>> + /* in postcopy */
>>> + AioContext *aio_context = bdrv_get_aio_context(s->bs);
>>> + aio_context_acquire(aio_context);
>
> looks like it should be moved to use new BdrvDirtyBitmap locks.
>
Good catch!
>>> +
>>> + bdrv_reclaim_dirty_bitmap(s->bs, s->bitmap, &error_abort);
>>> + bdrv_enable_dirty_bitmap(s->bitmap);
>>> +
>> OK, so if enabled_bitmaps is gone, that means we already pivoted and
>> we're live on the receiving end here. We merge the successor into the
>> fully deserialized bitmap and enable it.
>>
>>> + aio_context_release(aio_context);
>>> + } else {
>>> + /* target not started, successor is empty */
>>> + bdrv_dirty_bitmap_release_successor(s->bs, s->bitmap);
>> Otherwise we just trash the successor. Did we really need a new call for
>> this? I suppose it's faster than merging a 0-bit bitmap, but the
>> additional API complexity for the speed win here seems like premature
>> optimization.
>>
>> ...well, you already wrote it, so I won't argue.
>
> right idea. However in this case (and even with my approach) it is good
> to assert here
> that successor is empty. and additional api is needed for it.
>
Sure, it's less flexible and that will help us spot errors in our
thinking. Can't argue with that.
>>
>>> + }
>>> + }
>>> +
>>> + qemu_mutex_unlock(&finish_lock);
>>> +}
>>> +
>>> +static int dirty_bitmap_load_bits(QEMUFile *f, DirtyBitmapLoadState *s)
>>> +{
>>> + uint64_t first_byte = qemu_get_be64(f) << BDRV_SECTOR_BITS;
>>> + uint64_t nr_bytes = (uint64_t)qemu_get_be32(f) << BDRV_SECTOR_BITS;
>>> + trace_dirty_bitmap_load_bits_enter(first_byte >> BDRV_SECTOR_BITS,
>>> + nr_bytes >> BDRV_SECTOR_BITS);
>>> +
>>> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
>>> + trace_dirty_bitmap_load_bits_zeroes();
>>> + bdrv_dirty_bitmap_deserialize_zeroes(s->bitmap, first_byte,
>>> nr_bytes,
>>> + false);
>>> + } else {
>>> + uint8_t *buf;
>>> + uint64_t buf_size = qemu_get_be64(f);
>>> + uint64_t needed_size =
>>> + bdrv_dirty_bitmap_serialization_size(s->bitmap,
>>> + first_byte, nr_bytes);
>>> +
>>> + if (needed_size > buf_size) {
>>> + error_report("Error: Migrated bitmap granularity doesn't "
>>> + "match the destination bitmap '%s'
>>> granularity",
>>> + bdrv_dirty_bitmap_name(s->bitmap));
>>> + return -EINVAL;
>>> + }
>>> +
>>> + buf = g_malloc(buf_size);
>>> + qemu_get_buffer(f, buf, buf_size);
>>> + bdrv_dirty_bitmap_deserialize_part(s->bitmap, buf,
>>> first_byte, nr_bytes,
>>> + false);
>>> + g_free(buf);
>>> + }
>>> +
>>> + return 0;
>>> +}
>>> +
>> ok
>>
>>> +static int dirty_bitmap_load_header(QEMUFile *f,
>>> DirtyBitmapLoadState *s)
>>> +{
>>> + Error *local_err = NULL;
>>> + s->flags = qemu_get_bitmap_flags(f);
>>> + trace_dirty_bitmap_load_header(s->flags);
>>> +
>>> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) {
>>> + if (!qemu_get_counted_string(f, s->node_name)) {
>>> + error_report("Unable to read node name string");
>>> + return -EINVAL;
>>> + }
>>> + s->bs = bdrv_lookup_bs(s->node_name, s->node_name, &local_err);
>>> + if (!s->bs) {
>>> + error_report_err(local_err);
>>> + return -EINVAL;
>>> + }
>>> + } else if (!s->bs) {
>>> + error_report("Error: block device name is not set");
>>> + return -EINVAL;
>>> + }
>>> +
>>> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) {
>>> + if (!qemu_get_counted_string(f, s->bitmap_name)) {
>>> + error_report("Unable to read node name string");
>>> + return -EINVAL;
>>> + }
>>> + s->bitmap = bdrv_find_dirty_bitmap(s->bs, s->bitmap_name);
>>> +
>>> + /* bitmap may be NULL here, it wouldn't be an error if it is
>>> the
>>> + * first occurrence of the bitmap */
>>> + if (!s->bitmap && !(s->flags & DIRTY_BITMAP_MIG_FLAG_START)) {
>>> + error_report("Error: unknown dirty bitmap "
>>> + "'%s' for block device '%s'",
>>> + s->bitmap_name, s->node_name);
>>> + return -EINVAL;
>>> + }
>>> + } else if (!s->bitmap) {
>>> + error_report("Error: block device name is not set");
>>> + return -EINVAL;
>>> + }
>>> +
>>> + return 0;
>>> +}
>>> +
>> ok
>>
>>> +static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id)
>>> +{
>>> + static DirtyBitmapLoadState s;
>>> + int ret = 0;
>>> +
>>> + trace_dirty_bitmap_load_enter();
>>> +
>>> + if (version_id != 1) {
>>> + return -EINVAL;
>>> + }
>>> +
>>> + do {
>>> + dirty_bitmap_load_header(f, &s);
>>> +
>>> + if (s.flags & DIRTY_BITMAP_MIG_FLAG_START) {
>>> + ret = dirty_bitmap_load_start(f, &s);
>>> + } else if (s.flags & DIRTY_BITMAP_MIG_FLAG_COMPLETE) {
>>> + dirty_bitmap_load_complete(f, &s);
>>> + } else if (s.flags & DIRTY_BITMAP_MIG_FLAG_BITS) {
>>> + ret = dirty_bitmap_load_bits(f, &s);
>>> + }
>>> +
>>> + if (!ret) {
>>> + ret = qemu_file_get_error(f);
>>> + }
>>> +
>>> + if (ret) {
>>> + return ret;
>>> + }
>>> + } while (!(s.flags & DIRTY_BITMAP_MIG_FLAG_EOS));
>>> +
>>> + trace_dirty_bitmap_load_success();
>>> + return 0;
>>> +}
>> OK
>>
>>> +
>>> +static int dirty_bitmap_save_setup(QEMUFile *f, void *opaque)
>>> +{
>>> + DirtyBitmapMigBitmapState *dbms = NULL;
>>> + if (init_dirty_bitmap_migration() < 0) {
>>> + return -1;
>>> + }
>>> +
>>> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
>>> + send_bitmap_start(f, dbms);
>>> + }
>>> + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
>>> +
>>> + return 0;
>>> +}
>>> +
>> ok
>>
>>> +static bool dirty_bitmap_is_active(void *opaque)
>>> +{
>>> + return migrate_dirty_bitmaps();
>>> +}
>>> +
>> ok
>>
>>> +static bool dirty_bitmap_is_active_iterate(void *opaque)
>>> +{
>>> + return dirty_bitmap_is_active(opaque) && !runstate_is_running();
>>> +}
>>> +
>> On second thought, in patch 9, can you add a little tiny bit of
>> documentation text explaining the exact nature of this callback?
>>
>> Is the second portion of the conditional here so that once we reach the
>> postcopy state that .is_active_iterate starts returning true?
>>
>> "ok" if I'm reading this right, but it might be helped along by a little
>> comment.
>
> yes. ok, I'll add a comment.
>
>>
>>> +static bool dirty_bitmap_has_postcopy(void *opaque)
>>> +{
>>> + return true;
>>> +}
>>> +
>> ok! :)
>>
>>> +static SaveVMHandlers savevm_dirty_bitmap_handlers = {
>>> + .save_setup = dirty_bitmap_save_setup,
>>> + .save_live_complete_postcopy = dirty_bitmap_save_complete,
>>> + .save_live_complete_precopy = dirty_bitmap_save_complete,
>>> + .has_postcopy = dirty_bitmap_has_postcopy,
>>> + .save_live_pending = dirty_bitmap_save_pending,
>>> + .save_live_iterate = dirty_bitmap_save_iterate,
>>> + .is_active_iterate = dirty_bitmap_is_active_iterate,
>>> + .load_state = dirty_bitmap_load,
>>> + .save_cleanup = dirty_bitmap_save_cleanup,
>>> + .is_active = dirty_bitmap_is_active,
>>> +};
>>> +
>>> +void dirty_bitmap_mig_init(void)
>>> +{
>>> + QSIMPLEQ_INIT(&dirty_bitmap_mig_state.dbms_list);
>>> +
>>> + register_savevm_live(NULL, "dirty-bitmap", 0, 1,
>>> + &savevm_dirty_bitmap_handlers,
>>> + &dirty_bitmap_mig_state);
>>> +}
>> ok
>>
>> dgilbert, would it be worth registering a block-driver-like registration
>> trick that automatically invokes these functions instead of having to
>> hook them up in vl.c? the more we add, the more hacky it looks to not
>> have some subsystem-wide registration hook.
>>
>>> diff --git a/migration/migration.c b/migration/migration.c
>>> index e973837bfd..66e9cf03cd 100644
>>> --- a/migration/migration.c
>>> +++ b/migration/migration.c
>>> @@ -150,6 +150,9 @@ MigrationIncomingState
>>> *migration_incoming_get_current(void)
>>> memset(&mis_current, 0, sizeof(MigrationIncomingState));
>>> qemu_mutex_init(&mis_current.rp_mutex);
>>> qemu_event_init(&mis_current.main_thread_load_event, false);
>>> +
>>> + init_dirty_bitmap_incoming_migration();
>>> +
>>> once = true;
>>> }
>>> return &mis_current;
>>> diff --git a/migration/savevm.c b/migration/savevm.c
>>> index 9bbfb3fa1b..b0c37ef9f1 100644
>>> --- a/migration/savevm.c
>>> +++ b/migration/savevm.c
>>> @@ -1673,6 +1673,8 @@ static void loadvm_postcopy_handle_run_bh(void
>>> *opaque)
>>> trace_loadvm_postcopy_handle_run_vmstart();
>>> + dirty_bitmap_mig_before_vm_start();
>>> +
>>> if (autostart) {
>>> /* Hold onto your hats, starting the CPU */
>>> vm_start();
>>> diff --git a/vl.c b/vl.c
>>> index ec299099ff..3d393aaf2c 100644
>>> --- a/vl.c
>>> +++ b/vl.c
>>> @@ -4642,6 +4642,7 @@ int main(int argc, char **argv, char **envp)
>>> blk_mig_init();
>>> ram_mig_init();
>>> + dirty_bitmap_mig_init();
>>> /* If the currently selected machine wishes to override the
>>> units-per-bus
>>> * property of its default HBA interface type, do so now. */
>>> diff --git a/migration/Makefile.objs b/migration/Makefile.objs
>>> index 99e038024d..c83ec47ba8 100644
>>> --- a/migration/Makefile.objs
>>> +++ b/migration/Makefile.objs
>>> @@ -6,6 +6,7 @@ common-obj-y += qemu-file.o global_state.o
>>> common-obj-y += qemu-file-channel.o
>>> common-obj-y += xbzrle.o postcopy-ram.o
>>> common-obj-y += qjson.o
>>> +common-obj-y += block-dirty-bitmap.o
>>> common-obj-$(CONFIG_RDMA) += rdma.o
>>> diff --git a/migration/trace-events b/migration/trace-events
>>> index a04fffb877..e9eb8078d4 100644
>>> --- a/migration/trace-events
>>> +++ b/migration/trace-events
>>> @@ -227,3 +227,17 @@ colo_vm_state_change(const char *old, const char
>>> *new) "Change '%s' => '%s'"
>>> colo_send_message(const char *msg) "Send '%s' message"
>>> colo_receive_message(const char *msg) "Receive '%s' message"
>>> colo_failover_set_state(const char *new_state) "new state %s"
>>> +
>>> +# migration/block-dirty-bitmap.c
>>> +send_bitmap_header_enter(void) ""
>>> +send_bitmap_bits(uint32_t flags, uint64_t start_sector, uint32_t
>>> nr_sectors, uint64_t data_size) "\n flags: 0x%x\n
>>> start_sector: %" PRIu64 "\n nr_sectors: %" PRIu32 "\n
>>> data_size: %" PRIu64 "\n"
>>> +dirty_bitmap_save_iterate(int in_postcopy) "in postcopy: %d"
>>> +dirty_bitmap_save_complete_enter(void) ""
>>> +dirty_bitmap_save_complete_finish(void) ""
>>> +dirty_bitmap_save_pending(uint64_t pending, uint64_t max_size)
>>> "pending %" PRIu64 " max: %" PRIu64
>>> +dirty_bitmap_load_complete(void) ""
>>> +dirty_bitmap_load_bits_enter(uint64_t first_sector, uint32_t
>>> nr_sectors) "chunk: %" PRIu64 " %" PRIu32
>>> +dirty_bitmap_load_bits_zeroes(void) ""
>>> +dirty_bitmap_load_header(uint32_t flags) "flags 0x%x"
>>> +dirty_bitmap_load_enter(void) ""
>>> +dirty_bitmap_load_success(void) ""
>>>
>> OK, I think everything here is probably in order, and it's only my
>> understanding that is a barrier at this point. Help me understand the
>> rest of this patch and I'll re-pester migration to get this staged for
>> qemu-next.
>>
>> --js
>
> Thank you for reviewing! I hope, I'll post new version next week.
>
It looks pretty much all set from my end apart from just minor little
things. Max reviewed most of the tests and Juan reviewed most of the
migration system bits, so I'm hopeful that this will be done soon.
Thanks!
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 10/14] migration: add postcopy migration of dirty bitmaps
2017-11-16 16:50 ` Dr. David Alan Gilbert
@ 2017-11-17 1:27 ` John Snow
0 siblings, 0 replies; 44+ messages in thread
From: John Snow @ 2017-11-17 1:27 UTC (permalink / raw)
To: Dr. David Alan Gilbert
Cc: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel, kwolf,
peter.maydell, famz, lirans, quintela, armbru, mreitz, stefanha,
den, amit.shah, pbonzini
On 11/16/2017 11:50 AM, Dr. David Alan Gilbert wrote:
> * John Snow (jsnow@redhat.com) wrote:
>>
>>
>> On 10/30/2017 12:33 PM, Vladimir Sementsov-Ogievskiy wrote:
>>> Postcopy migration of dirty bitmaps. Only named dirty bitmaps,
>>> associated with root nodes and non-root named nodes are migrated.
>>>
>>> If destination qemu is already containing a dirty bitmap with the same name
>>> as a migrated bitmap (for the same node), then, if their granularities are
>>> the same the migration will be done, otherwise the error will be generated.
>>>
>>> If destination qemu doesn't contain such bitmap it will be created.
>>>
>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> ---
>>> include/migration/misc.h | 3 +
>>> migration/migration.h | 3 +
>>> migration/block-dirty-bitmap.c | 734 +++++++++++++++++++++++++++++++++++++++++
>>
>> Ouch :\
>>
>>> migration/migration.c | 3 +
>>> migration/savevm.c | 2 +
>>> vl.c | 1 +
>>> migration/Makefile.objs | 1 +
>>> migration/trace-events | 14 +
>>> 8 files changed, 761 insertions(+)
>>> create mode 100644 migration/block-dirty-bitmap.c
>>>
>>
>> Organizationally, you introduce three new 'public' prototypes:
>>
>> dirty_bitmap_mig_init
>> dirty_bitmap_mig_before_vm_start
>> init_dirty_bitmap_incoming_migration
>>
>> mig_init is advertised in migration/misc.h, the other two are in
>> migration/migration.h.
>> The definitions for all three are in migration/block-dirty-bitmap.c
>>
>> In pure naivety, I find it weird to have something that you use in
>> migration.c and advertised in migration.h actually exist separately in
>> block-dirty-bitmap.c; but maybe this is the sanest thing to do.
>
> Actually I think that's OK; it makes sense for all of the code for this
> feature to sit in one place, and there doesn't seem any point creating
> a header just for this one function.
>
OK, just stood out to me at first. I don't really have better ideas.
>>> diff --git a/include/migration/misc.h b/include/migration/misc.h
>>> index c079b7771b..9cc539e232 100644
>>> --- a/include/migration/misc.h
>>> +++ b/include/migration/misc.h
>>> @@ -55,4 +55,7 @@ bool migration_has_failed(MigrationState *);
>>> bool migration_in_postcopy_after_devices(MigrationState *);
>>> void migration_global_dump(Monitor *mon);
>>>
>>> +/* migration/block-dirty-bitmap.c */
>>> +void dirty_bitmap_mig_init(void);
>>> +
>>> #endif
>>> diff --git a/migration/migration.h b/migration/migration.h
>>> index 50d1f01346..4e3ad04664 100644
>>> --- a/migration/migration.h
>>> +++ b/migration/migration.h
>>> @@ -211,4 +211,7 @@ void migrate_send_rp_pong(MigrationIncomingState *mis,
>>> void migrate_send_rp_req_pages(MigrationIncomingState *mis, const char* rbname,
>>> ram_addr_t start, size_t len);
>>>
>>> +void dirty_bitmap_mig_before_vm_start(void);
>>> +void init_dirty_bitmap_incoming_migration(void);
>>> +
>>> #endif
>>> diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
>>> new file mode 100644
>>> index 0000000000..53cb20045d
>>> --- /dev/null
>>> +++ b/migration/block-dirty-bitmap.c
>>> @@ -0,0 +1,734 @@
>>> +/*
>>> + * Block dirty bitmap postcopy migration
>>> + *
>>> + * Copyright IBM, Corp. 2009
>>> + * Copyright (c) 2016-2017 Parallels International GmbH
>>> + *
>>> + * Authors:
>>> + * Liran Schour <lirans@il.ibm.com>
>>> + * Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> + *
>>> + * This work is licensed under the terms of the GNU GPL, version 2. See
>>> + * the COPYING file in the top-level directory.
>>> + * This file is derived from migration/block.c, so it's author and IBM copyright
>>> + * are here, although content is quite different.
>>> + *
>>> + * Contributions after 2012-01-13 are licensed under the terms of the
>>> + * GNU GPL, version 2 or (at your option) any later version.
>>> + *
>>> + * ***
>>> + *
>>> + * Here postcopy migration of dirty bitmaps is realized. Only named dirty
>>> + * bitmaps, associated with root nodes and non-root named nodes are migrated.
>>
>> Put another way, only QMP-addressable bitmaps. Nodes without a name that
>> are not the root have no way to be addressed.
>>
>>> + *
>>> + * If destination qemu is already containing a dirty bitmap with the same name
>>
>> "If the destination QEMU already contains a dirty bitmap with the same name"
>>
>>> + * as a migrated bitmap (for the same node), then, if their granularities are
>>> + * the same the migration will be done, otherwise the error will be generated.
>>
>> "an error"
>>
>>> + *
>>> + * If destination qemu doesn't contain such bitmap it will be created.
>>
>> "If the destination QEMU doesn't contain such a bitmap, it will be created."
>>
>>> + *
>>> + * format of migration:
>>> + *
>>> + * # Header (shared for different chunk types)
>>> + * 1, 2 or 4 bytes: flags (see qemu_{put,put}_flags)
>>> + * [ 1 byte: node name size ] \ flags & DEVICE_NAME
>>> + * [ n bytes: node name ] /
>>> + * [ 1 byte: bitmap name size ] \ flags & BITMAP_NAME
>>> + * [ n bytes: bitmap name ] /
>>> + *
>>> + * # Start of bitmap migration (flags & START)
>>> + * header
>>> + * be64: granularity
>>> + * 1 byte: bitmap flags (corresponds to BdrvDirtyBitmap)
>>> + * bit 0 - bitmap is enabled
>>> + * bit 1 - bitmap is persistent
>>> + * bit 2 - bitmap is autoloading
>>> + * bits 3-7 - reserved, must be zero
>>> + *
>>> + * # Complete of bitmap migration (flags & COMPLETE)
>>> + * header
>>> + *
>>> + * # Data chunk of bitmap migration
>>> + * header
>>> + * be64: start sector
>>> + * be32: number of sectors
>>> + * [ be64: buffer size ] \ ! (flags & ZEROES)
>>> + * [ n bytes: buffer ] /
>>> + *
>>> + * The last chunk in stream should contain flags & EOS. The chunk may skip
>>> + * device and/or bitmap names, assuming them to be the same with the previous
>>> + * chunk.
>>> + */
>>> +
>>
>> Been a while since I reviewed the format, but it seems sane.
>>
>>> +#include "qemu/osdep.h"
>>> +#include "block/block.h"
>>> +#include "block/block_int.h"
>>> +#include "sysemu/block-backend.h"
>>> +#include "qemu/main-loop.h"
>>> +#include "qemu/error-report.h"
>>> +#include "migration/misc.h"
>>> +#include "migration/migration.h"
>>> +#include "migration/qemu-file.h"
>>> +#include "migration/vmstate.h"
>>> +#include "migration/register.h"
>>> +#include "qemu/hbitmap.h"
>>> +#include "sysemu/sysemu.h"
>>> +#include "qemu/cutils.h"
>>> +#include "qapi/error.h"
>>> +#include "trace.h"
>>> +
>>> +#define CHUNK_SIZE (1 << 10)
>>> +
>>> +/* Flags occupy one, two or four bytes (Big Endian). The size is determined as
>>> + * follows:
>>> + * in first (most significant) byte bit 8 is clear --> one byte
>>> + * in first byte bit 8 is set --> two or four bytes, depending on second
>>> + * byte:
>>> + * | in second byte bit 8 is clear --> two bytes
>>> + * | in second byte bit 8 is set --> four bytes
>>> + */
>>> +#define DIRTY_BITMAP_MIG_FLAG_EOS 0x01
>>> +#define DIRTY_BITMAP_MIG_FLAG_ZEROES 0x02
>>> +#define DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME 0x04
>>> +#define DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME 0x08
>>> +#define DIRTY_BITMAP_MIG_FLAG_START 0x10
>>> +#define DIRTY_BITMAP_MIG_FLAG_COMPLETE 0x20
>>> +#define DIRTY_BITMAP_MIG_FLAG_BITS 0x40
>>> +
>>> +#define DIRTY_BITMAP_MIG_EXTRA_FLAGS 0x80
>>> +
>>> +#define DIRTY_BITMAP_MIG_START_FLAG_ENABLED 0x01
>>> +#define DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT 0x02
>>> +#define DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD 0x04
>>> +#define DIRTY_BITMAP_MIG_START_FLAG_RESERVED_MASK 0xf8
>>> +
>>> +typedef struct DirtyBitmapMigBitmapState {
>>> + /* Written during setup phase. */
>>> + BlockDriverState *bs;
>>> + const char *node_name;
>>> + BdrvDirtyBitmap *bitmap;
>>> + uint64_t total_sectors;
>>> + uint64_t sectors_per_chunk;
>>> + QSIMPLEQ_ENTRY(DirtyBitmapMigBitmapState) entry;
>>> + uint8_t flags;
>>> +
>>> + /* For bulk phase. */
>>> + bool bulk_completed;
>>> + uint64_t cur_sector;
>>> +} DirtyBitmapMigBitmapState;
>>> +
>>> +typedef struct DirtyBitmapMigState {
>>> + QSIMPLEQ_HEAD(dbms_list, DirtyBitmapMigBitmapState) dbms_list;
>>> +
>>> + bool bulk_completed;
>>> +
>>> + /* for send_bitmap_bits() */
>>> + BlockDriverState *prev_bs;
>>> + BdrvDirtyBitmap *prev_bitmap;
>>> +} DirtyBitmapMigState;
>>> +
>>> +typedef struct DirtyBitmapLoadState {
>>> + uint32_t flags;
>>> + char node_name[256];
>>> + char bitmap_name[256];
>>> + BlockDriverState *bs;
>>> + BdrvDirtyBitmap *bitmap;
>>> +} DirtyBitmapLoadState;
>>> +
>>> +static DirtyBitmapMigState dirty_bitmap_mig_state;
>>> +
>>> +typedef struct DirtyBitmapLoadBitmapState {
>>> + BlockDriverState *bs;
>>> + BdrvDirtyBitmap *bitmap;
>>> + bool migrated;
>>> +} DirtyBitmapLoadBitmapState;
>>> +static GSList *enabled_bitmaps;
>>> +QemuMutex finish_lock;
>>> +
>>> +void init_dirty_bitmap_incoming_migration(void)
>>> +{
>>> + qemu_mutex_init(&finish_lock);
>>> +}
>>> +
>>
>> This is a little odd as public interface. David, is there a nicer way to
>> integrate in-migrate hooks? I guess it hasn't come up yet. Anyway, it
>> might be nice to leave a comment here for now that says that the only
>> caller is migration.c, and it will only ever call it once.
>
> I don't think having an init_ function like that is a problem;
> we've got an init_blk_migration, so I guess it's similar.
> I generally prefer things to be part of the incoming state structure
> rather than a file global; but that's not a huge one.
>
Okey-Dokey.
>>> +static uint32_t qemu_get_bitmap_flags(QEMUFile *f)
>>> +{
>>> + uint8_t flags = qemu_get_byte(f);
>>> + if (flags & DIRTY_BITMAP_MIG_EXTRA_FLAGS) {
>>> + flags = flags << 8 | qemu_get_byte(f);
>>> + if (flags & DIRTY_BITMAP_MIG_EXTRA_FLAGS) {
>>> + flags = flags << 16 | qemu_get_be16(f);
>>> + }
>>> + }
>>> +
>>> + return flags;
>>> +}
>>> +
>>
>> ok
>>
>> (Sorry for the per-function ACKs, it's just helpful for me to know which
>> functions I followed execution of on paper to make sure I got everything
>> in this big patch.)
>>
>>> +static void qemu_put_bitmap_flags(QEMUFile *f, uint32_t flags)
>>> +{
>>> + /* The code currently do not send flags more than one byte */
>>> + assert(!(flags & (0xffffff00 | DIRTY_BITMAP_MIG_EXTRA_FLAGS)));
>>> +
>>> + qemu_put_byte(f, flags);
>>> +}
>>> +
>>
>> ok
>>
>>> +static void send_bitmap_header(QEMUFile *f, DirtyBitmapMigBitmapState *dbms,
>>> + uint32_t additional_flags)
>>> +{
>>> + BlockDriverState *bs = dbms->bs;
>>> + BdrvDirtyBitmap *bitmap = dbms->bitmap;
>>> + uint32_t flags = additional_flags;
>>> + trace_send_bitmap_header_enter();
>>> +
>>> + if (bs != dirty_bitmap_mig_state.prev_bs) {
>>> + dirty_bitmap_mig_state.prev_bs = bs;
>>> + flags |= DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME;
>>> + }
>>> +
>>> + if (bitmap != dirty_bitmap_mig_state.prev_bitmap) {
>>> + dirty_bitmap_mig_state.prev_bitmap = bitmap;
>>> + flags |= DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME;
>>> + }
>>> +
>>
>> I guess the idea here is that we might be able to skip the node name
>> broadcast, leaving the possibilities as:
>>
>> - new node and bitmap: send both
>> - new bitmap, but not node: send bitmap name only
>> - same for both: send neither
>>
>> and that otherwise it's not possible to have a new node but "same
>> bitmap" by nature of how the structures are organized.
>>
>>> + qemu_put_bitmap_flags(f, flags);
>>> +
>>> + if (flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) {
>>> + qemu_put_counted_string(f, dbms->node_name);
>>> + }
>>> +
>>> + if (flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) {
>>> + qemu_put_counted_string(f, bdrv_dirty_bitmap_name(bitmap));
>>> + }
>>> +}
>>> +
>>
>> ok
>>
>>> +static void send_bitmap_start(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
>>> +{
>>> + send_bitmap_header(f, dbms, DIRTY_BITMAP_MIG_FLAG_START);
>>> + qemu_put_be32(f, bdrv_dirty_bitmap_granularity(dbms->bitmap));
>>> + qemu_put_byte(f, dbms->flags);
>>> +}
>>> +
>>
>> ok
>>
>>> +static void send_bitmap_complete(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
>>> +{
>>> + send_bitmap_header(f, dbms, DIRTY_BITMAP_MIG_FLAG_COMPLETE);
>>> +}
>>> +
>>
>> ok
>>
>>> +static void send_bitmap_bits(QEMUFile *f, DirtyBitmapMigBitmapState *dbms,
>>> + uint64_t start_sector, uint32_t nr_sectors)
>>> +{
>>> + /* align for buffer_is_zero() */
>>> + uint64_t align = 4 * sizeof(long);
>>> + uint64_t unaligned_size =
>>> + bdrv_dirty_bitmap_serialization_size(
>>> + dbms->bitmap, start_sector << BDRV_SECTOR_BITS,
>>> + (uint64_t)nr_sectors << BDRV_SECTOR_BITS);
>>> + uint64_t buf_size = (unaligned_size + align - 1) & ~(align - 1);
>>> + uint8_t *buf = g_malloc0(buf_size);
>>> + uint32_t flags = DIRTY_BITMAP_MIG_FLAG_BITS;
>>> +
>>> + bdrv_dirty_bitmap_serialize_part(
>>> + dbms->bitmap, buf, start_sector << BDRV_SECTOR_BITS,
>>> + (uint64_t)nr_sectors << BDRV_SECTOR_BITS);
>>> +
>>> + if (buffer_is_zero(buf, buf_size)) {
>>> + g_free(buf);
>>> + buf = NULL;
>>> + flags |= DIRTY_BITMAP_MIG_FLAG_ZEROES;
>>> + }
>>> +
>>> + trace_send_bitmap_bits(flags, start_sector, nr_sectors, buf_size);
>>> +
>>> + send_bitmap_header(f, dbms, flags);
>>> +
>>> + qemu_put_be64(f, start_sector);
>>> + qemu_put_be32(f, nr_sectors);
>>> +
>>> + /* if a block is zero we need to flush here since the network
>>> + * bandwidth is now a lot higher than the storage device bandwidth.
>>> + * thus if we queue zero blocks we slow down the migration. */
>>
>> Can you elaborate on this for me?
>>
>>> + if (flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
>>> + qemu_fflush(f);
>>> + } else {
>>> + qemu_put_be64(f, buf_size);
>>> + qemu_put_buffer(f, buf, buf_size);
>>> + }
>>> +
>>> + g_free(buf);
>>> +}
>>> +
>>> +
>>> +/* Called with iothread lock taken. */
>>> +
>>> +static int init_dirty_bitmap_migration(void)
>>> +{
>>> + BlockDriverState *bs;
>>> + BdrvDirtyBitmap *bitmap;
>>> + DirtyBitmapMigBitmapState *dbms;
>>> + BdrvNextIterator it;
>>> +
>>> + dirty_bitmap_mig_state.bulk_completed = false;
>>> + dirty_bitmap_mig_state.prev_bs = NULL;
>>> + dirty_bitmap_mig_state.prev_bitmap = NULL;
>>> +
>>> + for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
>>> + if (!bdrv_get_device_or_node_name(bs)) {
>>> + /* not named non-root node */
>>
>> I can't imagine the situation it would arise in, but is it possible to
>> have a named bitmap attached to a now-anonymous node?
>>
>> Let's say we attach a bitmap to a root node, but then later we insert a
>> filter or something above it and it's no longer at the root.
>>
>> We should probably prohibit such things, or at the very least toss out
>> an error here instead of silently continuing.
>>
>> I think the only things valid to just *skip* are nameless bitmaps.
>> Anything named we really ought to either migrate or error out over, I
>> think, even if the circumstances leading to such a configuration are
>> very unlikely.
>>
>>> + continue;
>>> + }
>>> +
>>> + for (bitmap = bdrv_dirty_bitmap_next(bs, NULL); bitmap;
>>> + bitmap = bdrv_dirty_bitmap_next(bs, bitmap)) {
>>> + if (!bdrv_dirty_bitmap_name(bitmap)) {
>>> + continue;
>>> + }
>>> +
>>> + if (bdrv_dirty_bitmap_frozen(bitmap)) {
>>> + error_report("Can't migrate frozen dirty bitmap: '%s",
>>> + bdrv_dirty_bitmap_name(bitmap));
>>> + return -1;
>>> + }
>>> + }
>>> + }
>>> +
>>> + for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
>>> + if (!bdrv_get_device_or_node_name(bs)) {
>>> + /* not named non-root node */
>>> + continue;
>>> + }
>>
>> Why two-pass? I guess because we don't have to tear anything down if we
>> check for errors in advance?
>>
>> I worry that if we need to amend the logic here that it's error-prone to
>> update it in two places, so maybe we ought to just have one loop.
>>
>>> +
>>> + for (bitmap = bdrv_dirty_bitmap_next(bs, NULL); bitmap;
>>> + bitmap = bdrv_dirty_bitmap_next(bs, bitmap)) {
>>> + if (!bdrv_dirty_bitmap_name(bitmap)) {
>>> + continue;
>>> + }
>>> +
>>> + bdrv_ref(bs);
>>> + bdrv_dirty_bitmap_set_frozen(bitmap, true);
>>> +
>>
>> We could say that for any bitmap in the list of pending bitmaps to
>> migrate, we know that we have to un-freeze it, since we never add any
>> bitmaps that are frozen to our list.
>>
>>> + dbms = g_new0(DirtyBitmapMigBitmapState, 1);
>>> + dbms->bs = bs;
>>> + dbms->node_name = bdrv_get_node_name(bs);
>>> + if (!dbms->node_name || dbms->node_name[0] == '\0') {
>>> + dbms->node_name = bdrv_get_device_name(bs);
>>> + }
>>> + dbms->bitmap = bitmap;
>>> + dbms->total_sectors = bdrv_nb_sectors(bs);
>>> + dbms->sectors_per_chunk = CHUNK_SIZE * 8 *
>>> + bdrv_dirty_bitmap_granularity(bitmap) >> BDRV_SECTOR_BITS;
>>
>> Eric may want to avoid checking in new code that thinks in sectors, but
>> for the sake of review I don't mind right now.
>>
>> (Sorry, Eric!)
>>
>>> + if (bdrv_dirty_bitmap_enabled(bitmap)) {
>>> + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_ENABLED;
>>> + }
>>> + if (bdrv_dirty_bitmap_get_persistance(bitmap)) {
>>> + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT;
>>> + }
>>> + if (bdrv_dirty_bitmap_get_autoload(bitmap)) {
>>> + dbms->flags |= DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD;
>>> + }
>>> +
>>> + bdrv_dirty_bitmap_set_persistance(bitmap, false);
>>
>> Oh, this might be stranger to undo. Perhaps what we CAN do is limit the
>> second pass to just this action and allow ourselves to unroll everything
>> else.
>>
>>> +
>>> + QSIMPLEQ_INSERT_TAIL(&dirty_bitmap_mig_state.dbms_list,
>>> + dbms, entry);
>>> + }
>>> + }
>>> +
>>> + return 0;
>>> +}
>>> +
>>> +/* Called with no lock taken. */
>>> +static void bulk_phase_send_chunk(QEMUFile *f, DirtyBitmapMigBitmapState *dbms)
>>> +{
>>> + uint32_t nr_sectors = MIN(dbms->total_sectors - dbms->cur_sector,
>>> + dbms->sectors_per_chunk);
>>> +
>>> + send_bitmap_bits(f, dbms, dbms->cur_sector, nr_sectors);
>>> +
>>> + dbms->cur_sector += nr_sectors;
>>> + if (dbms->cur_sector >= dbms->total_sectors) {
>>> + dbms->bulk_completed = true;
>>> + }
>>> +}
>>> +
>>> +/* Called with no lock taken. */
>>> +static void bulk_phase(QEMUFile *f, bool limit)
>>> +{
>>> + DirtyBitmapMigBitmapState *dbms;
>>> +
>>> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
>>> + while (!dbms->bulk_completed) {
>>> + bulk_phase_send_chunk(f, dbms);
>>> + if (limit && qemu_file_rate_limit(f)) {
>>> + return;
>>> + }
>>> + }
>>> + }
>>> +
>>> + dirty_bitmap_mig_state.bulk_completed = true;
>>> +}
>>> +
>>> +/* Called with iothread lock taken. */
>>> +static void dirty_bitmap_mig_cleanup(void)
>>> +{
>>> + DirtyBitmapMigBitmapState *dbms;
>>> +
>>> + while ((dbms = QSIMPLEQ_FIRST(&dirty_bitmap_mig_state.dbms_list)) != NULL) {
>>> + QSIMPLEQ_REMOVE_HEAD(&dirty_bitmap_mig_state.dbms_list, entry);
>>> + bdrv_dirty_bitmap_set_frozen(dbms->bitmap, false);
>>> + bdrv_unref(dbms->bs);
>>> + g_free(dbms);
>>> + }
>>> +}
>>> +
>>
>> ok
>>
>>> +/* for SaveVMHandlers */
>>> +static void dirty_bitmap_save_cleanup(void *opaque)
>>> +{
>>> + dirty_bitmap_mig_cleanup();
>>> +}
>>> +
>>
>> ok
>>
>>> +static int dirty_bitmap_save_iterate(QEMUFile *f, void *opaque)
>>> +{
>>> + trace_dirty_bitmap_save_iterate(migration_in_postcopy());
>>> +
>>> + if (migration_in_postcopy() && !dirty_bitmap_mig_state.bulk_completed) {
>>> + bulk_phase(f, true);
>>> + }
>>> +
>>> + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
>>> +
>>> + return dirty_bitmap_mig_state.bulk_completed;
>>> +}
>>> +
>>
>> What's the purpose behind doing bulk save both here and in
>> dirty_bitmap_save_complete? Is there a path that isn't guaranteed to
>> call one of the completion functions?
>>
>> (The way it's coded seems like it'll work fine, but I'm curious about
>> what looks like a redundancy at a glance.)
>
> I think I can see the reasoning; I think the idea is that in each
> iteration you send a chunk of data (note the 'true' means that it
> gets modulated by bandwidth limiting - although we currently don't
> have that in postcopy - I need to fix that) - so it might
> not actually send all of it.
> The complete guarantees it's all sent.
> So note this IS iterating potentially (OK but probably not
> at the moment)
>
OK, thanks for the insight on it! It's probably fine as-is, then, it
just looks odd at a glance.
>>> +/* Called with iothread lock taken. */
>>> +
>>> +static int dirty_bitmap_save_complete(QEMUFile *f, void *opaque)
>>> +{
>>> + DirtyBitmapMigBitmapState *dbms;
>>> + trace_dirty_bitmap_save_complete_enter();
>>> +
>>> + if (!dirty_bitmap_mig_state.bulk_completed) {
>>> + bulk_phase(f, false);
>>> + }
>>> +
>>
>> funny now that we don't actually really iterate over the data, and the
>> bulk phase is now really the _only_ phase :)
>>
>>> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
>>> + send_bitmap_complete(f, dbms);
>>> + }
>>> +
>>> + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
>>> +
>>> + trace_dirty_bitmap_save_complete_finish();
>>> +
>>> + dirty_bitmap_mig_cleanup();
>>> + return 0;
>>> +}
>>> +
>>
>> ok
>>
>>> +static void dirty_bitmap_save_pending(QEMUFile *f, void *opaque,
>>> + uint64_t max_size,
>>> + uint64_t *res_precopy_only,
>>> + uint64_t *res_compatible,
>>> + uint64_t *res_postcopy_only)
>>> +{
>>> + DirtyBitmapMigBitmapState *dbms;
>>> + uint64_t pending = 0;
>>> +
>>> + qemu_mutex_lock_iothread();
>>> +
>>> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
>>> + uint64_t gran = bdrv_dirty_bitmap_granularity(dbms->bitmap);
>>> + uint64_t sectors = dbms->bulk_completed ? 0 :
>>> + dbms->total_sectors - dbms->cur_sector;
>>> +
>>> + pending += (sectors * BDRV_SECTOR_SIZE + gran - 1) / gran;
>>> + }
>>> +
>>> + qemu_mutex_unlock_iothread();
>>> +
>>> + trace_dirty_bitmap_save_pending(pending, max_size);
>>> +
>>> + *res_postcopy_only += pending;
>>> +}
>>> +
>>
>> ok
>>
>>> +/* First occurrence of this bitmap. It should be created if doesn't exist */
>>> +static int dirty_bitmap_load_start(QEMUFile *f, DirtyBitmapLoadState *s)
>>> +{
>>> + Error *local_err = NULL;
>>> + uint32_t granularity = qemu_get_be32(f);
>>> + uint8_t flags = qemu_get_byte(f);
>>> +
>>> + if (!s->bitmap) {
>>> + s->bitmap = bdrv_create_dirty_bitmap(s->bs, granularity,
>>> + s->bitmap_name, &local_err);
>>> + if (!s->bitmap) {
>>> + error_report_err(local_err);
>>> + return -EINVAL;
>>> + }
>>> + } else {
>>> + uint32_t dest_granularity =
>>> + bdrv_dirty_bitmap_granularity(s->bitmap);
>>> + if (dest_granularity != granularity) {
>>> + error_report("Error: "
>>> + "Migrated bitmap granularity (%" PRIu32 ") "
>>> + "doesn't match the destination bitmap '%s' "
>>> + "granularity (%" PRIu32 ")",
>>> + granularity,
>>> + bdrv_dirty_bitmap_name(s->bitmap),
>>> + dest_granularity);
>>> + return -EINVAL;
>>> + }
>>> + }
>>> +
>>
>> I'm a fan of auto-creating the bitmaps. Do you have a use-case for why
>> creating them ahead of time is better, or are you just attempting to be
>> flexible?
>>
>>> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_RESERVED_MASK) {
>>> + error_report("Unknown flags in migrated dirty bitmap header: %x",
>>> + flags);
>>> + return -EINVAL;
>>> + }
>>> +
>>> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_PERSISTENT) {
>>> + bdrv_dirty_bitmap_set_persistance(s->bitmap, true);
>>> + }
>>> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_AUTOLOAD) {
>>> + bdrv_dirty_bitmap_set_autoload(s->bitmap, true);
>>> + }
>>> +
>>> + bdrv_disable_dirty_bitmap(s->bitmap);
>>
>> OK, so we start them off as disabled, and
>>
>>> + if (flags & DIRTY_BITMAP_MIG_START_FLAG_ENABLED) {
>>> + DirtyBitmapLoadBitmapState *b;
>>> +
>>> + bdrv_dirty_bitmap_create_successor(s->bs, s->bitmap, &local_err);
>>> + if (local_err) {
>>> + error_report_err(local_err);
>>> + return -EINVAL;
>>> + }
>>> +
>>
>> If they weren't disabled on the host, we create a successor to record
>> writes while we wait for the rest of the data to arrive.
>>
>>> + b = g_new(DirtyBitmapLoadBitmapState, 1);
>>> + b->bs = s->bs;
>>> + b->bitmap = s->bitmap;
>>> + b->migrated = false;
>>> + enabled_bitmaps = g_slist_prepend(enabled_bitmaps, b);
>>
>> And we make a note of which ones we were supposed to re-enable.
>>
>>> + }
>>> +
>>> + return 0;
>>> +}
>>
>> OK
>>
>>> +
>>> +void dirty_bitmap_mig_before_vm_start(void)
>>
>> Similarly, I guess I find it weird that this is a callable interface.
>>
>> David, no nice hook for just-prior-to-vm-start calls? a
>> .postcopy_pivot() hook or something might be nice..
>
> Hmm, the other way a lot of devices do it is to hook the runstate
> change.
>
I guess we're not a device as-such, and that usually occurs after the
change, doesn't it? It's pretty vitally important that we *guarantee*
not a single bit gets written until we can install our bitmaps properly
to make sure we track every last write properly.
If you're fine with the hardcoded hook for now, I am too, but I wanted
to point it out.
>>> +{
>>> + GSList *item;
>>> +
>>> + qemu_mutex_lock(&finish_lock);
>>> +
>>> + for (item = enabled_bitmaps; item; item = g_slist_next(item)) {
>>> + DirtyBitmapLoadBitmapState *b = item->data;
>>> +
>>
>> Anyway, if I am reading this right; we call this in the postcopy phase
>> prior to receiving the entirety of the bitmaps (so before receiving
>> COMPLETE) ... right?
>>
>>> + if (b->migrated) {
>>> + bdrv_enable_dirty_bitmap(b->bitmap);
>>
>> ...or, am I confused, and we might receive a COMPLETE event prior to the
>> postcopy pivot?
>>
>> Anyway, I suppose this code says "If we received the entire bitmap, go
>> ahead and enable it."
>>
>>> + } else {
>>> + bdrv_dirty_bitmap_enable_successor(b->bitmap);
>>
>> And this says "If we haven't received it yet, enable the successor to
>> record writes until we get the rest of the data."
>>
>>> + }
>>> +
>>> + g_free(b);
>>> + }
>>> +
>>> + g_slist_free(enabled_bitmaps);
>>> + enabled_bitmaps = NULL;
>>> +
>>> + qemu_mutex_unlock(&finish_lock);
>>> +}
>>> +
>>> +static void dirty_bitmap_load_complete(QEMUFile *f, DirtyBitmapLoadState *s)
>>> +{
>>> + GSList *item;
>>> + trace_dirty_bitmap_load_complete();
>>> + bdrv_dirty_bitmap_deserialize_finish(s->bitmap);
>>> +
>>> + qemu_mutex_lock(&finish_lock);
>>> +
>>> + for (item = enabled_bitmaps; item; item = g_slist_next(item)) {
>>> + DirtyBitmapLoadBitmapState *b = item->data;
>>> +
>>> + if (b->bitmap == s->bitmap) {
>>> + b->migrated = true;
>>
>> we can probably break; here now, right?
>>
>> (This whole stanza is a little strange, can't we cache the active
>> DirtyBitmapLoadBitmapState in DirtyBitmapLoadState? I guess not, because
>> we're looking up the BdrvDirtyBitmap itself and caching that instead, so
>> either way we have some kind of lookup on every context switch.)
>>
>>> + }
>>> + }
>>> +
>>> + if (bdrv_dirty_bitmap_frozen(s->bitmap)) {
>>> + if (enabled_bitmaps == NULL) {
>>> + /* in postcopy */
>>> + AioContext *aio_context = bdrv_get_aio_context(s->bs);
>>> + aio_context_acquire(aio_context);
>>> +
>>> + bdrv_reclaim_dirty_bitmap(s->bs, s->bitmap, &error_abort);
>>> + bdrv_enable_dirty_bitmap(s->bitmap);
>>> +
>>
>> OK, so if enabled_bitmaps is gone, that means we already pivoted and
>> we're live on the receiving end here. We merge the successor into the
>> fully deserialized bitmap and enable it.
>>
>>> + aio_context_release(aio_context);
>>> + } else {
>>> + /* target not started, successor is empty */
>>> + bdrv_dirty_bitmap_release_successor(s->bs, s->bitmap);
>>
>> Otherwise we just trash the successor. Did we really need a new call for
>> this? I suppose it's faster than merging a 0-bit bitmap, but the
>> additional API complexity for the speed win here seems like premature
>> optimization.
>>
>> ...well, you already wrote it, so I won't argue.
>>
>>> + }
>>> + }
>>> +
>>> + qemu_mutex_unlock(&finish_lock);
>>> +}
>>> +
>>> +static int dirty_bitmap_load_bits(QEMUFile *f, DirtyBitmapLoadState *s)
>>> +{
>>> + uint64_t first_byte = qemu_get_be64(f) << BDRV_SECTOR_BITS;
>>> + uint64_t nr_bytes = (uint64_t)qemu_get_be32(f) << BDRV_SECTOR_BITS;
>>> + trace_dirty_bitmap_load_bits_enter(first_byte >> BDRV_SECTOR_BITS,
>>> + nr_bytes >> BDRV_SECTOR_BITS);
>>> +
>>> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) {
>>> + trace_dirty_bitmap_load_bits_zeroes();
>>> + bdrv_dirty_bitmap_deserialize_zeroes(s->bitmap, first_byte, nr_bytes,
>>> + false);
>>> + } else {
>>> + uint8_t *buf;
>>> + uint64_t buf_size = qemu_get_be64(f);
>>> + uint64_t needed_size =
>>> + bdrv_dirty_bitmap_serialization_size(s->bitmap,
>>> + first_byte, nr_bytes);
>>> +
>>> + if (needed_size > buf_size) {
>>> + error_report("Error: Migrated bitmap granularity doesn't "
>>> + "match the destination bitmap '%s' granularity",
>>> + bdrv_dirty_bitmap_name(s->bitmap));
>>> + return -EINVAL;
>>> + }
>>> +
>>> + buf = g_malloc(buf_size);
>>> + qemu_get_buffer(f, buf, buf_size);
>>> + bdrv_dirty_bitmap_deserialize_part(s->bitmap, buf, first_byte, nr_bytes,
>>> + false);
>>> + g_free(buf);
>>> + }
>>> +
>>> + return 0;
>>> +}
>>> +
>>
>> ok
>>
>>> +static int dirty_bitmap_load_header(QEMUFile *f, DirtyBitmapLoadState *s)
>>> +{
>>> + Error *local_err = NULL;
>>> + s->flags = qemu_get_bitmap_flags(f);
>>> + trace_dirty_bitmap_load_header(s->flags);
>>> +
>>> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) {
>>> + if (!qemu_get_counted_string(f, s->node_name)) {
>>> + error_report("Unable to read node name string");
>>> + return -EINVAL;
>>> + }
>>> + s->bs = bdrv_lookup_bs(s->node_name, s->node_name, &local_err);
>>> + if (!s->bs) {
>>> + error_report_err(local_err);
>>> + return -EINVAL;
>>> + }
>>> + } else if (!s->bs) {
>>> + error_report("Error: block device name is not set");
>>> + return -EINVAL;
>>> + }
>>> +
>>> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) {
>>> + if (!qemu_get_counted_string(f, s->bitmap_name)) {
>>> + error_report("Unable to read node name string");
>>> + return -EINVAL;
>>> + }
>>> + s->bitmap = bdrv_find_dirty_bitmap(s->bs, s->bitmap_name);
>>> +
>>> + /* bitmap may be NULL here, it wouldn't be an error if it is the
>>> + * first occurrence of the bitmap */
>>> + if (!s->bitmap && !(s->flags & DIRTY_BITMAP_MIG_FLAG_START)) {
>>> + error_report("Error: unknown dirty bitmap "
>>> + "'%s' for block device '%s'",
>>> + s->bitmap_name, s->node_name);
>>> + return -EINVAL;
>>> + }
>>> + } else if (!s->bitmap) {
>>> + error_report("Error: block device name is not set");
>>> + return -EINVAL;
>>> + }
>>> +
>>> + return 0;
>>> +}
>>> +
>>
>> ok
>>
>>> +static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id)
>>> +{
>>> + static DirtyBitmapLoadState s;
>>> + int ret = 0;
>>> +
>>> + trace_dirty_bitmap_load_enter();
>>> +
>>> + if (version_id != 1) {
>>> + return -EINVAL;
>>> + }
>>> +
>>> + do {
>>> + dirty_bitmap_load_header(f, &s);
>>> +
>>> + if (s.flags & DIRTY_BITMAP_MIG_FLAG_START) {
>>> + ret = dirty_bitmap_load_start(f, &s);
>>> + } else if (s.flags & DIRTY_BITMAP_MIG_FLAG_COMPLETE) {
>>> + dirty_bitmap_load_complete(f, &s);
>>> + } else if (s.flags & DIRTY_BITMAP_MIG_FLAG_BITS) {
>>> + ret = dirty_bitmap_load_bits(f, &s);
>>> + }
>>> +
>>> + if (!ret) {
>>> + ret = qemu_file_get_error(f);
>>> + }
>>> +
>>> + if (ret) {
>>> + return ret;
>>> + }
>>> + } while (!(s.flags & DIRTY_BITMAP_MIG_FLAG_EOS));
>>> +
>>> + trace_dirty_bitmap_load_success();
>>> + return 0;
>>> +}
>>
>> OK
>>
>>> +
>>> +static int dirty_bitmap_save_setup(QEMUFile *f, void *opaque)
>>> +{
>>> + DirtyBitmapMigBitmapState *dbms = NULL;
>>> + if (init_dirty_bitmap_migration() < 0) {
>>> + return -1;
>>> + }
>>> +
>>> + QSIMPLEQ_FOREACH(dbms, &dirty_bitmap_mig_state.dbms_list, entry) {
>>> + send_bitmap_start(f, dbms);
>>> + }
>>> + qemu_put_bitmap_flags(f, DIRTY_BITMAP_MIG_FLAG_EOS);
>>> +
>>> + return 0;
>>> +}
>>> +
>>
>> ok
>>
>>> +static bool dirty_bitmap_is_active(void *opaque)
>>> +{
>>> + return migrate_dirty_bitmaps();
>>> +}
>>> +
>>
>> ok
>>
>>> +static bool dirty_bitmap_is_active_iterate(void *opaque)
>>> +{
>>> + return dirty_bitmap_is_active(opaque) && !runstate_is_running();
>>> +}
>>> +
>>
>> On second thought, in patch 9, can you add a little tiny bit of
>> documentation text explaining the exact nature of this callback?
>>
>> Is the second portion of the conditional here so that once we reach the
>> postcopy state that .is_active_iterate starts returning true?
>>
>> "ok" if I'm reading this right, but it might be helped along by a little
>> comment.
>>
>>> +static bool dirty_bitmap_has_postcopy(void *opaque)
>>> +{
>>> + return true;
>>> +}
>>> +
>>
>> ok! :)
>>
>>> +static SaveVMHandlers savevm_dirty_bitmap_handlers = {
>>> + .save_setup = dirty_bitmap_save_setup,
>>> + .save_live_complete_postcopy = dirty_bitmap_save_complete,
>>> + .save_live_complete_precopy = dirty_bitmap_save_complete,
>>> + .has_postcopy = dirty_bitmap_has_postcopy,
>>> + .save_live_pending = dirty_bitmap_save_pending,
>>> + .save_live_iterate = dirty_bitmap_save_iterate,
>>> + .is_active_iterate = dirty_bitmap_is_active_iterate,
>>> + .load_state = dirty_bitmap_load,
>>> + .save_cleanup = dirty_bitmap_save_cleanup,
>>> + .is_active = dirty_bitmap_is_active,
>>> +};
>>> +
>>> +void dirty_bitmap_mig_init(void)
>>> +{
>>> + QSIMPLEQ_INIT(&dirty_bitmap_mig_state.dbms_list);
>>> +
>>> + register_savevm_live(NULL, "dirty-bitmap", 0, 1,
>>> + &savevm_dirty_bitmap_handlers,
>>> + &dirty_bitmap_mig_state);
>>> +}
>>
>> ok
>>
>> dgilbert, would it be worth registering a block-driver-like registration
>> trick that automatically invokes these functions instead of having to
>> hook them up in vl.c? the more we add, the more hacky it looks to not
>> have some subsystem-wide registration hook.
>
> Maybe it's just simpler to put a mig_init in migration/migration.c and
> make one call in vl.c; I'd rather keep a simple function than a whole
> registration mechanism.
>
Yup. I just sometimes think about if vl.c could be ... prettied up to
any acceptable level. It's kind of a wilderness up there.
>>> diff --git a/migration/migration.c b/migration/migration.c
>>> index e973837bfd..66e9cf03cd 100644
>>> --- a/migration/migration.c
>>> +++ b/migration/migration.c
>>> @@ -150,6 +150,9 @@ MigrationIncomingState *migration_incoming_get_current(void)
>>> memset(&mis_current, 0, sizeof(MigrationIncomingState));
>>> qemu_mutex_init(&mis_current.rp_mutex);
>>> qemu_event_init(&mis_current.main_thread_load_event, false);
>>> +
>>> + init_dirty_bitmap_incoming_migration();
>>> +
>>> once = true;
>>> }
>>> return &mis_current;
>>> diff --git a/migration/savevm.c b/migration/savevm.c
>>> index 9bbfb3fa1b..b0c37ef9f1 100644
>>> --- a/migration/savevm.c
>>> +++ b/migration/savevm.c
>>> @@ -1673,6 +1673,8 @@ static void loadvm_postcopy_handle_run_bh(void *opaque)
>>>
>>> trace_loadvm_postcopy_handle_run_vmstart();
>>>
>>> + dirty_bitmap_mig_before_vm_start();
>>> +
>>> if (autostart) {
>>> /* Hold onto your hats, starting the CPU */
>>> vm_start();
>>> diff --git a/vl.c b/vl.c
>>> index ec299099ff..3d393aaf2c 100644
>>> --- a/vl.c
>>> +++ b/vl.c
>>> @@ -4642,6 +4642,7 @@ int main(int argc, char **argv, char **envp)
>>>
>>> blk_mig_init();
>>> ram_mig_init();
>>> + dirty_bitmap_mig_init();
>>>
>>> /* If the currently selected machine wishes to override the units-per-bus
>>> * property of its default HBA interface type, do so now. */
>>> diff --git a/migration/Makefile.objs b/migration/Makefile.objs
>>> index 99e038024d..c83ec47ba8 100644
>>> --- a/migration/Makefile.objs
>>> +++ b/migration/Makefile.objs
>>> @@ -6,6 +6,7 @@ common-obj-y += qemu-file.o global_state.o
>>> common-obj-y += qemu-file-channel.o
>>> common-obj-y += xbzrle.o postcopy-ram.o
>>> common-obj-y += qjson.o
>>> +common-obj-y += block-dirty-bitmap.o
>>>
>>> common-obj-$(CONFIG_RDMA) += rdma.o
>>>
>>> diff --git a/migration/trace-events b/migration/trace-events
>>> index a04fffb877..e9eb8078d4 100644
>>> --- a/migration/trace-events
>>> +++ b/migration/trace-events
>>> @@ -227,3 +227,17 @@ colo_vm_state_change(const char *old, const char *new) "Change '%s' => '%s'"
>>> colo_send_message(const char *msg) "Send '%s' message"
>>> colo_receive_message(const char *msg) "Receive '%s' message"
>>> colo_failover_set_state(const char *new_state) "new state %s"
>>> +
>>> +# migration/block-dirty-bitmap.c
>>> +send_bitmap_header_enter(void) ""
>>> +send_bitmap_bits(uint32_t flags, uint64_t start_sector, uint32_t nr_sectors, uint64_t data_size) "\n flags: 0x%x\n start_sector: %" PRIu64 "\n nr_sectors: %" PRIu32 "\n data_size: %" PRIu64 "\n"
>>> +dirty_bitmap_save_iterate(int in_postcopy) "in postcopy: %d"
>>> +dirty_bitmap_save_complete_enter(void) ""
>>> +dirty_bitmap_save_complete_finish(void) ""
>>> +dirty_bitmap_save_pending(uint64_t pending, uint64_t max_size) "pending %" PRIu64 " max: %" PRIu64
>>> +dirty_bitmap_load_complete(void) ""
>>> +dirty_bitmap_load_bits_enter(uint64_t first_sector, uint32_t nr_sectors) "chunk: %" PRIu64 " %" PRIu32
>>> +dirty_bitmap_load_bits_zeroes(void) ""
>>> +dirty_bitmap_load_header(uint32_t flags) "flags 0x%x"
>>> +dirty_bitmap_load_enter(void) ""
>>> +dirty_bitmap_load_success(void) ""
>>>
>>
>> OK, I think everything here is probably in order, and it's only my
>> understanding that is a barrier at this point. Help me understand the
>> rest of this patch and I'll re-pester migration to get this staged for
>> qemu-next.
>>
>> --js
>
> Dave
>
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
>
Thanks for taking a peek, David.
--js
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 02/14] block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap
2017-11-10 22:52 ` John Snow
2017-11-16 8:56 ` Vladimir Sementsov-Ogievskiy
@ 2017-11-17 8:07 ` Vladimir Sementsov-Ogievskiy
2017-11-17 18:25 ` John Snow
1 sibling, 1 reply; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-11-17 8:07 UTC (permalink / raw)
To: John Snow, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
11.11.2017 01:52, John Snow wrote:
>
> On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
>> It is needed to realize bdrv_dirty_bitmap_release_successor in
>> the following patch.
>>
> OK, but...
>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>> block/dirty-bitmap.c | 25 ++++++++++++++++++++-----
>> 1 file changed, 20 insertions(+), 5 deletions(-)
>>
>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>> index 81adbeb6d4..981f99d362 100644
>> --- a/block/dirty-bitmap.c
>> +++ b/block/dirty-bitmap.c
>> @@ -326,13 +326,13 @@ static bool bdrv_dirty_bitmap_has_name(BdrvDirtyBitmap *bitmap)
>> return !!bdrv_dirty_bitmap_name(bitmap);
>> }
>>
>> -/* Called with BQL taken. */
>> -static void bdrv_do_release_matching_dirty_bitmap(
>> +/* Called within bdrv_dirty_bitmap_lock..unlock */
> ...Add this so it will compile:
how do you compile to get an error? and what is unused?
>
> __attribute__((__unused__))
>> +static void bdrv_do_release_matching_dirty_bitmap_locked(
>> BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
>> bool (*cond)(BdrvDirtyBitmap *bitmap))
>> {
>> BdrvDirtyBitmap *bm, *next;
>> - bdrv_dirty_bitmaps_lock(bs);
>> +
>> QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
>> if ((!bitmap || bm == bitmap) && (!cond || cond(bm))) {
>> assert(!bm->active_iterators);
>> @@ -344,18 +344,33 @@ static void bdrv_do_release_matching_dirty_bitmap(
>> g_free(bm);
>>
>> if (bitmap) {
>> - goto out;
>> + return;
>> }
>> }
>> }
>> +
>> if (bitmap) {
>> abort();
>> }
> Do we have any style guide rules on using abort() instead of assert()?
> The rest of this function uses assert, and it'd be less lines to simply
> write:
>
> assert(!bitmap);
>
> which I think might also carry better semantic information for coverity
> beyond an actual runtime conditional branch.
>
> (I think. Please correct me if I am wrong, I'm a little hazy on this.)
>
>> +}
>>
>> -out:
>> +/* Called with BQL taken. */
>> +static void bdrv_do_release_matching_dirty_bitmap(
>> + BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
>> + bool (*cond)(BdrvDirtyBitmap *bitmap))
>> +{
>> + bdrv_dirty_bitmaps_lock(bs);
>> + bdrv_do_release_matching_dirty_bitmap_locked(bs, bitmap, cond);
>> bdrv_dirty_bitmaps_unlock(bs);
>> }
>>
>> +/* Called within bdrv_dirty_bitmap_lock..unlock */
>> +static void bdrv_release_dirty_bitmap_locked(BlockDriverState *bs,
>> + BdrvDirtyBitmap *bitmap)
>> +{
>> + bdrv_do_release_matching_dirty_bitmap_locked(bs, bitmap, NULL);
>> +}
>> +
>> /* Called with BQL taken. */
>> void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
>> {
>>
> If you agree with those two changes, you may add:
>
> Reviewed-by: John Snow <jsnow@redhat.com>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 04/14] block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen
2017-11-13 23:32 ` John Snow
@ 2017-11-17 14:46 ` Vladimir Sementsov-Ogievskiy
2017-11-17 17:20 ` John Snow
0 siblings, 1 reply; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-11-17 14:46 UTC (permalink / raw)
To: John Snow, qemu-block, qemu-devel, famz
Cc: kwolf, peter.maydell, lirans, quintela, armbru, mreitz, stefanha,
den, amit.shah, pbonzini, dgilbert
14.11.2017 02:32, John Snow wrote:
>
> On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
>> Make it possible to set bitmap 'frozen' without a successor.
>> This is needed to protect the bitmap during outgoing bitmap postcopy
>> migration.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>> include/block/dirty-bitmap.h | 1 +
>> block/dirty-bitmap.c | 22 ++++++++++++++++++++--
>> 2 files changed, 21 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
>> index a9e2a92e4f..ae6d697850 100644
>> --- a/include/block/dirty-bitmap.h
>> +++ b/include/block/dirty-bitmap.h
>> @@ -39,6 +39,7 @@ uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs);
>> uint32_t bdrv_dirty_bitmap_granularity(const BdrvDirtyBitmap *bitmap);
>> bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap);
>> bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap);
>> +void bdrv_dirty_bitmap_set_frozen(BdrvDirtyBitmap *bitmap, bool frozen);
>> const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap);
>> int64_t bdrv_dirty_bitmap_size(const BdrvDirtyBitmap *bitmap);
>> DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap);
>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>> index 7578863aa1..67fc6bd6e0 100644
>> --- a/block/dirty-bitmap.c
>> +++ b/block/dirty-bitmap.c
>> @@ -40,6 +40,8 @@ struct BdrvDirtyBitmap {
>> QemuMutex *mutex;
>> HBitmap *bitmap; /* Dirty bitmap implementation */
>> HBitmap *meta; /* Meta dirty bitmap */
>> + bool frozen; /* Bitmap is frozen, it can't be modified
>> + through QMP */
> I hesitate, because this now means that we have two independent bits of
> state we need to update and maintain consistency with.
it was your proposal)))
https://lists.gnu.org/archive/html/qemu-devel/2017-07/msg01172.html
"
Your new use case here sounds like Frozen to me, but it simply does not
have an anonymous successor to force it to be recognized as "frozen." We
can add a `bool protected` or `bool frozen` field to force recognition
of this status and adjust the json documentation accordingly.
I think then we'd have four recognized states:
FROZEN: Cannot be reset/deleted. Bitmap is in-use by a block job or
other internal process. Bitmap is otherwise ACTIVE.
DISABLED: Not recording any writes (by choice.)
READONLY: Not able to record any writes (by necessity.)
ACTIVE: Normal bitmap status.
Sound right?
"
>
> Before:
>
> Frozen: "Bitmap has a successor and is no longer itself recording
> writes, though we are guaranteed to have a successor doing so on our
> behalf."
>
> After:
>
> Frozen: "Bitmap may or may not have a successor, but it is disabled with
> an even more limited subset of tasks than a traditionally disabled bitmap."
>
> This changes the meaning of "frozen" a little, and I am not sure that is
> a problem as such, but it does make the interface seem a little
> "fuzzier" than it did prior.
>
>> BdrvDirtyBitmap *successor; /* Anonymous child; implies frozen status */
>> char *name; /* Optional non-empty unique ID */
>> int64_t size; /* Size of the bitmap, in bytes */
>> @@ -183,13 +185,22 @@ const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap)
>> /* Called with BQL taken. */
>> bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap)
>> {
>> - return bitmap->successor;
>> + return bitmap->frozen;
>> +}
> Are there any cases where we will be unfrozen, but actually have a
> successor now? If so, under what circumstances does that happen?
>
>> +
>> +/* Called with BQL taken. */
>> +void bdrv_dirty_bitmap_set_frozen(BdrvDirtyBitmap *bitmap, bool frozen)
>> +{
>> + qemu_mutex_lock(bitmap->mutex);
>> + assert(bitmap->successor == NULL);
>> + bitmap->frozen = frozen;
>> + qemu_mutex_unlock(bitmap->mutex);
>> }
>>
> OK, so we can only "set frozen" (or unset) if we don't have a successor.
>
>> /* Called with BQL taken. */
>> bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
>> {
>> - return !(bitmap->disabled || bitmap->successor);
>> + return !(bitmap->disabled || (bitmap->successor != NULL));
>> }
>>
> I guess this just makes 'successor' more obviously non-boolean, which is
> fine.
>
>> /* Called with BQL taken. */
>> @@ -234,6 +245,7 @@ int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
>>
>> /* Install the successor and freeze the parent */
>> bitmap->successor = child;
>> + bitmap->frozen = true;
>> return 0;
>> }
>>
>> @@ -266,6 +278,8 @@ BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
>> name = bitmap->name;
>> bitmap->name = NULL;
>> successor->name = name;
>> + assert(bitmap->frozen);
>> + bitmap->frozen = false;
>> bitmap->successor = NULL;
>> successor->persistent = bitmap->persistent;
>> bitmap->persistent = false;
>> @@ -298,6 +312,8 @@ BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
>> return NULL;
>> }
>> bdrv_release_dirty_bitmap(bs, successor);
>> + assert(parent->frozen);
>> + parent->frozen = false;
>> parent->successor = NULL;
>>
>> return parent;
>> @@ -439,6 +455,8 @@ void bdrv_dirty_bitmap_release_successor(BlockDriverState *bs,
>>
>> if (parent->successor) {
>> bdrv_release_dirty_bitmap_locked(bs, parent->successor);
>> + assert(parent->frozen);
>> + parent->frozen = false;
>> parent->successor = NULL;
>> }
>>
>>
> Tentatively:
>
> Reviewed-by: John Snow <jsnow@redhat.com>
>
> Fam, any thoughts?
>
> --John
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 04/14] block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen
2017-11-17 14:46 ` Vladimir Sementsov-Ogievskiy
@ 2017-11-17 17:20 ` John Snow
2017-11-17 17:30 ` Vladimir Sementsov-Ogievskiy
0 siblings, 1 reply; 44+ messages in thread
From: John Snow @ 2017-11-17 17:20 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel, famz
Cc: kwolf, peter.maydell, lirans, quintela, armbru, mreitz, stefanha,
den, amit.shah, pbonzini, dgilbert
On 11/17/2017 09:46 AM, Vladimir Sementsov-Ogievskiy wrote:
> 14.11.2017 02:32, John Snow wrote:
>>
>> On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
>>> Make it possible to set bitmap 'frozen' without a successor.
>>> This is needed to protect the bitmap during outgoing bitmap postcopy
>>> migration.
>>>
>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> ---
>>> include/block/dirty-bitmap.h | 1 +
>>> block/dirty-bitmap.c | 22 ++++++++++++++++++++--
>>> 2 files changed, 21 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
>>> index a9e2a92e4f..ae6d697850 100644
>>> --- a/include/block/dirty-bitmap.h
>>> +++ b/include/block/dirty-bitmap.h
>>> @@ -39,6 +39,7 @@ uint32_t
>>> bdrv_get_default_bitmap_granularity(BlockDriverState *bs);
>>> uint32_t bdrv_dirty_bitmap_granularity(const BdrvDirtyBitmap *bitmap);
>>> bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap);
>>> bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap);
>>> +void bdrv_dirty_bitmap_set_frozen(BdrvDirtyBitmap *bitmap, bool
>>> frozen);
>>> const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap);
>>> int64_t bdrv_dirty_bitmap_size(const BdrvDirtyBitmap *bitmap);
>>> DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap);
>>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>>> index 7578863aa1..67fc6bd6e0 100644
>>> --- a/block/dirty-bitmap.c
>>> +++ b/block/dirty-bitmap.c
>>> @@ -40,6 +40,8 @@ struct BdrvDirtyBitmap {
>>> QemuMutex *mutex;
>>> HBitmap *bitmap; /* Dirty bitmap implementation */
>>> HBitmap *meta; /* Meta dirty bitmap */
>>> + bool frozen; /* Bitmap is frozen, it can't be
>>> modified
>>> + through QMP */
>> I hesitate, because this now means that we have two independent bits of
>> state we need to update and maintain consistency with.
>
> it was your proposal)))
>
> https://lists.gnu.org/archive/html/qemu-devel/2017-07/msg01172.html
>
> "
> Your new use case here sounds like Frozen to me, but it simply does not
> have an anonymous successor to force it to be recognized as "frozen." We
> can add a `bool protected` or `bool frozen` field to force recognition
> of this status and adjust the json documentation accordingly.
>
> I think then we'd have four recognized states:
>
> FROZEN: Cannot be reset/deleted. Bitmap is in-use by a block job or
> other internal process. Bitmap is otherwise ACTIVE.
> DISABLED: Not recording any writes (by choice.)
> READONLY: Not able to record any writes (by necessity.)
> ACTIVE: Normal bitmap status.
>
> Sound right?
> "
>
>
I was afraid you'd say that :(
It's okay, anyway. I shouldn't let myself go so long between reviews
like this, because you catch me changing my mind. Anyway, please go
ahead with it. I don't want to delay you on something that works because
I can't make up *my* mind.
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 04/14] block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen
2017-11-17 17:20 ` John Snow
@ 2017-11-17 17:30 ` Vladimir Sementsov-Ogievskiy
2017-11-17 23:46 ` John Snow
0 siblings, 1 reply; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-11-17 17:30 UTC (permalink / raw)
To: John Snow, qemu-block, qemu-devel, famz
Cc: kwolf, peter.maydell, lirans, quintela, armbru, mreitz, stefanha,
den, amit.shah, pbonzini, dgilbert
17.11.2017 20:20, John Snow wrote:
>
> On 11/17/2017 09:46 AM, Vladimir Sementsov-Ogievskiy wrote:
>> 14.11.2017 02:32, John Snow wrote:
>>> On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
>>>> Make it possible to set bitmap 'frozen' without a successor.
>>>> This is needed to protect the bitmap during outgoing bitmap postcopy
>>>> migration.
>>>>
>>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>>> ---
>>>> include/block/dirty-bitmap.h | 1 +
>>>> block/dirty-bitmap.c | 22 ++++++++++++++++++++--
>>>> 2 files changed, 21 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
>>>> index a9e2a92e4f..ae6d697850 100644
>>>> --- a/include/block/dirty-bitmap.h
>>>> +++ b/include/block/dirty-bitmap.h
>>>> @@ -39,6 +39,7 @@ uint32_t
>>>> bdrv_get_default_bitmap_granularity(BlockDriverState *bs);
>>>> uint32_t bdrv_dirty_bitmap_granularity(const BdrvDirtyBitmap *bitmap);
>>>> bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap);
>>>> bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap);
>>>> +void bdrv_dirty_bitmap_set_frozen(BdrvDirtyBitmap *bitmap, bool
>>>> frozen);
>>>> const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap);
>>>> int64_t bdrv_dirty_bitmap_size(const BdrvDirtyBitmap *bitmap);
>>>> DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap);
>>>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>>>> index 7578863aa1..67fc6bd6e0 100644
>>>> --- a/block/dirty-bitmap.c
>>>> +++ b/block/dirty-bitmap.c
>>>> @@ -40,6 +40,8 @@ struct BdrvDirtyBitmap {
>>>> QemuMutex *mutex;
>>>> HBitmap *bitmap; /* Dirty bitmap implementation */
>>>> HBitmap *meta; /* Meta dirty bitmap */
>>>> + bool frozen; /* Bitmap is frozen, it can't be
>>>> modified
>>>> + through QMP */
>>> I hesitate, because this now means that we have two independent bits of
>>> state we need to update and maintain consistency with.
>> it was your proposal)))
>>
>> https://lists.gnu.org/archive/html/qemu-devel/2017-07/msg01172.html
>>
>> "
>> Your new use case here sounds like Frozen to me, but it simply does not
>> have an anonymous successor to force it to be recognized as "frozen." We
>> can add a `bool protected` or `bool frozen` field to force recognition
>> of this status and adjust the json documentation accordingly.
>>
>> I think then we'd have four recognized states:
>>
>> FROZEN: Cannot be reset/deleted. Bitmap is in-use by a block job or
>> other internal process. Bitmap is otherwise ACTIVE.
>> DISABLED: Not recording any writes (by choice.)
>> READONLY: Not able to record any writes (by necessity.)
>> ACTIVE: Normal bitmap status.
>>
>> Sound right?
>> "
>>
>>
> I was afraid you'd say that :(
>
> It's okay, anyway. I shouldn't let myself go so long between reviews
> like this, because you catch me changing my mind. Anyway, please go
> ahead with it. I don't want to delay you on something that works because
> I can't make up *my* mind.
Hm, if you remember, reusing "frozen" state was strange for me too. And
it's not
late to move to
1. make a new state: MIGRATION, which disallows qmp operations on bitmap
2. or just make them unnamed, so they can't be touched by qmp
anything is ok for me as well as leaving it as is. It's all little
things, the core is patch 10.
"frozen" sounds like unchanged, but user will see dirty-count changing
in query-block.
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 02/14] block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap
2017-11-17 8:07 ` Vladimir Sementsov-Ogievskiy
@ 2017-11-17 18:25 ` John Snow
2017-11-20 9:30 ` Vladimir Sementsov-Ogievskiy
0 siblings, 1 reply; 44+ messages in thread
From: John Snow @ 2017-11-17 18:25 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
On 11/17/2017 03:07 AM, Vladimir Sementsov-Ogievskiy wrote:
> 11.11.2017 01:52, John Snow wrote:
>>
>> On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
>>> It is needed to realize bdrv_dirty_bitmap_release_successor in
>>> the following patch.
>>>
>> OK, but...
>>
>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> ---
>>> block/dirty-bitmap.c | 25 ++++++++++++++++++++-----
>>> 1 file changed, 20 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>>> index 81adbeb6d4..981f99d362 100644
>>> --- a/block/dirty-bitmap.c
>>> +++ b/block/dirty-bitmap.c
>>> @@ -326,13 +326,13 @@ static bool
>>> bdrv_dirty_bitmap_has_name(BdrvDirtyBitmap *bitmap)
>>> return !!bdrv_dirty_bitmap_name(bitmap);
>>> }
>>> -/* Called with BQL taken. */
>>> -static void bdrv_do_release_matching_dirty_bitmap(
>>> +/* Called within bdrv_dirty_bitmap_lock..unlock */
>> ...Add this so it will compile:
>
> how do you compile to get an error? and what is unused?
>
.../src/qemu/block/dirty-bitmap.c:368:13: error:
‘bdrv_release_dirty_bitmap_locked’ defined but not used
[-Werror=unused-function]
static void bdrv_release_dirty_bitmap_locked(BlockDriverState *bs,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
I commented on the wrong prototype. The ((__unused__)) attribute just
quiets this warning so it can compile without you having to refactor.
--js
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 04/14] block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen
2017-11-17 17:30 ` Vladimir Sementsov-Ogievskiy
@ 2017-11-17 23:46 ` John Snow
2017-11-20 9:40 ` Vladimir Sementsov-Ogievskiy
0 siblings, 1 reply; 44+ messages in thread
From: John Snow @ 2017-11-17 23:46 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy, qemu-block, qemu-devel, famz
Cc: kwolf, peter.maydell, lirans, quintela, armbru, mreitz, stefanha,
den, amit.shah, pbonzini, dgilbert
On 11/17/2017 12:30 PM, Vladimir Sementsov-Ogievskiy wrote:
> 17.11.2017 20:20, John Snow wrote:
>>
>> On 11/17/2017 09:46 AM, Vladimir Sementsov-Ogievskiy wrote:
>>> 14.11.2017 02:32, John Snow wrote:
>>>> On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
>>>>> Make it possible to set bitmap 'frozen' without a successor.
>>>>> This is needed to protect the bitmap during outgoing bitmap postcopy
>>>>> migration.
>>>>>
>>>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>>>> ---
>>>>> include/block/dirty-bitmap.h | 1 +
>>>>> block/dirty-bitmap.c | 22 ++++++++++++++++++++--
>>>>> 2 files changed, 21 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/include/block/dirty-bitmap.h
>>>>> b/include/block/dirty-bitmap.h
>>>>> index a9e2a92e4f..ae6d697850 100644
>>>>> --- a/include/block/dirty-bitmap.h
>>>>> +++ b/include/block/dirty-bitmap.h
>>>>> @@ -39,6 +39,7 @@ uint32_t
>>>>> bdrv_get_default_bitmap_granularity(BlockDriverState *bs);
>>>>> uint32_t bdrv_dirty_bitmap_granularity(const BdrvDirtyBitmap
>>>>> *bitmap);
>>>>> bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap);
>>>>> bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap);
>>>>> +void bdrv_dirty_bitmap_set_frozen(BdrvDirtyBitmap *bitmap, bool
>>>>> frozen);
>>>>> const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap);
>>>>> int64_t bdrv_dirty_bitmap_size(const BdrvDirtyBitmap *bitmap);
>>>>> DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap
>>>>> *bitmap);
>>>>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>>>>> index 7578863aa1..67fc6bd6e0 100644
>>>>> --- a/block/dirty-bitmap.c
>>>>> +++ b/block/dirty-bitmap.c
>>>>> @@ -40,6 +40,8 @@ struct BdrvDirtyBitmap {
>>>>> QemuMutex *mutex;
>>>>> HBitmap *bitmap; /* Dirty bitmap implementation */
>>>>> HBitmap *meta; /* Meta dirty bitmap */
>>>>> + bool frozen; /* Bitmap is frozen, it can't be
>>>>> modified
>>>>> + through QMP */
>>>> I hesitate, because this now means that we have two independent bits of
>>>> state we need to update and maintain consistency with.
>>> it was your proposal)))
>>>
>>> https://lists.gnu.org/archive/html/qemu-devel/2017-07/msg01172.html
>>>
>>> "
>>> Your new use case here sounds like Frozen to me, but it simply does not
>>> have an anonymous successor to force it to be recognized as "frozen." We
>>> can add a `bool protected` or `bool frozen` field to force recognition
>>> of this status and adjust the json documentation accordingly.
>>>
>>> I think then we'd have four recognized states:
>>>
>>> FROZEN: Cannot be reset/deleted. Bitmap is in-use by a block job or
>>> other internal process. Bitmap is otherwise ACTIVE.
>>> DISABLED: Not recording any writes (by choice.)
>>> READONLY: Not able to record any writes (by necessity.)
>>> ACTIVE: Normal bitmap status.
>>>
>>> Sound right?
>>> "
>>>
>>>
>> I was afraid you'd say that :(
>>
>> It's okay, anyway. I shouldn't let myself go so long between reviews
>> like this, because you catch me changing my mind. Anyway, please go
>> ahead with it. I don't want to delay you on something that works because
>> I can't make up *my* mind.
>
> Hm, if you remember, reusing "frozen" state was strange for me too. And
> it's not
> late to move to
> 1. make a new state: MIGRATION, which disallows qmp operations on bitmap
> 2. or just make them unnamed, so they can't be touched by qmp
"Migrating" is fine as a state name. You could probably announce this by
having it be "frozen" in the usual way (it has a successor) and a new
bool that lets you do whatever special handling you need to do for it.
>
> anything is ok for me as well as leaving it as is. It's all little
> things, the core is patch 10.
>
> "frozen" sounds like unchanged, but user will see dirty-count changing
> in query-block.
I guess it's a strange misnomer now... or maybe just always was a bad
name, since it's not really "frozen" but rather "locked" in a way that
the QMP user cannot interfere with it -- but it's still a live,
functioning object.
>
I'm remembering what I was talking about, but I think my preference is
illustrably worse. I was trying to avoid boolean bloat by advocating
re-use, but the re-use is kind of confusing...
I think I was hoping that a bitmap on the receiving end could simply be
"frozen" in the usual way, in that it has a successor recording writes.
I think the way you want to handle it though is with different semantics
for cleanup and recovery which makes it not quite the same state, which
needs either a new bool or some such.
Go with what you think is cleanest at this point, including if you want
to leave it alone. I don't want to cause you to respin it over bikeshedding.
--js
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 02/14] block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap
2017-11-17 18:25 ` John Snow
@ 2017-11-20 9:30 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-11-20 9:30 UTC (permalink / raw)
To: John Snow, qemu-block, qemu-devel
Cc: kwolf, peter.maydell, famz, lirans, quintela, armbru, mreitz,
stefanha, den, amit.shah, pbonzini, dgilbert
17.11.2017 21:25, John Snow wrote:
>
> On 11/17/2017 03:07 AM, Vladimir Sementsov-Ogievskiy wrote:
>> 11.11.2017 01:52, John Snow wrote:
>>> On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
>>>> It is needed to realize bdrv_dirty_bitmap_release_successor in
>>>> the following patch.
>>>>
>>> OK, but...
>>>
>>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>>> ---
>>>> block/dirty-bitmap.c | 25 ++++++++++++++++++++-----
>>>> 1 file changed, 20 insertions(+), 5 deletions(-)
>>>>
>>>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>>>> index 81adbeb6d4..981f99d362 100644
>>>> --- a/block/dirty-bitmap.c
>>>> +++ b/block/dirty-bitmap.c
>>>> @@ -326,13 +326,13 @@ static bool
>>>> bdrv_dirty_bitmap_has_name(BdrvDirtyBitmap *bitmap)
>>>> return !!bdrv_dirty_bitmap_name(bitmap);
>>>> }
>>>> -/* Called with BQL taken. */
>>>> -static void bdrv_do_release_matching_dirty_bitmap(
>>>> +/* Called within bdrv_dirty_bitmap_lock..unlock */
>>> ...Add this so it will compile:
>> how do you compile to get an error? and what is unused?
>>
> .../src/qemu/block/dirty-bitmap.c:368:13: error:
> ‘bdrv_release_dirty_bitmap_locked’ defined but not used
> [-Werror=unused-function]
> static void bdrv_release_dirty_bitmap_locked(BlockDriverState *bs,
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
>
>
> I commented on the wrong prototype. The ((__unused__)) attribute just
> quiets this warning so it can compile without you having to refactor.
aha ok, you are right
>
> --js
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: [Qemu-devel] [PATCH v8 04/14] block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen
2017-11-17 23:46 ` John Snow
@ 2017-11-20 9:40 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 44+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2017-11-20 9:40 UTC (permalink / raw)
To: John Snow, qemu-block, qemu-devel, famz
Cc: kwolf, peter.maydell, lirans, quintela, armbru, mreitz, stefanha,
den, amit.shah, pbonzini, dgilbert
18.11.2017 02:46, John Snow wrote:
>
> On 11/17/2017 12:30 PM, Vladimir Sementsov-Ogievskiy wrote:
>> 17.11.2017 20:20, John Snow wrote:
>>> On 11/17/2017 09:46 AM, Vladimir Sementsov-Ogievskiy wrote:
>>>> 14.11.2017 02:32, John Snow wrote:
>>>>> On 10/30/2017 12:32 PM, Vladimir Sementsov-Ogievskiy wrote:
>>>>>> Make it possible to set bitmap 'frozen' without a successor.
>>>>>> This is needed to protect the bitmap during outgoing bitmap postcopy
>>>>>> migration.
>>>>>>
>>>>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>>>>> ---
>>>>>> include/block/dirty-bitmap.h | 1 +
>>>>>> block/dirty-bitmap.c | 22 ++++++++++++++++++++--
>>>>>> 2 files changed, 21 insertions(+), 2 deletions(-)
>>>>>>
>>>>>> diff --git a/include/block/dirty-bitmap.h
>>>>>> b/include/block/dirty-bitmap.h
>>>>>> index a9e2a92e4f..ae6d697850 100644
>>>>>> --- a/include/block/dirty-bitmap.h
>>>>>> +++ b/include/block/dirty-bitmap.h
>>>>>> @@ -39,6 +39,7 @@ uint32_t
>>>>>> bdrv_get_default_bitmap_granularity(BlockDriverState *bs);
>>>>>> uint32_t bdrv_dirty_bitmap_granularity(const BdrvDirtyBitmap
>>>>>> *bitmap);
>>>>>> bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap);
>>>>>> bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap);
>>>>>> +void bdrv_dirty_bitmap_set_frozen(BdrvDirtyBitmap *bitmap, bool
>>>>>> frozen);
>>>>>> const char *bdrv_dirty_bitmap_name(const BdrvDirtyBitmap *bitmap);
>>>>>> int64_t bdrv_dirty_bitmap_size(const BdrvDirtyBitmap *bitmap);
>>>>>> DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap
>>>>>> *bitmap);
>>>>>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>>>>>> index 7578863aa1..67fc6bd6e0 100644
>>>>>> --- a/block/dirty-bitmap.c
>>>>>> +++ b/block/dirty-bitmap.c
>>>>>> @@ -40,6 +40,8 @@ struct BdrvDirtyBitmap {
>>>>>> QemuMutex *mutex;
>>>>>> HBitmap *bitmap; /* Dirty bitmap implementation */
>>>>>> HBitmap *meta; /* Meta dirty bitmap */
>>>>>> + bool frozen; /* Bitmap is frozen, it can't be
>>>>>> modified
>>>>>> + through QMP */
>>>>> I hesitate, because this now means that we have two independent bits of
>>>>> state we need to update and maintain consistency with.
>>>> it was your proposal)))
>>>>
>>>> https://lists.gnu.org/archive/html/qemu-devel/2017-07/msg01172.html
>>>>
>>>> "
>>>> Your new use case here sounds like Frozen to me, but it simply does not
>>>> have an anonymous successor to force it to be recognized as "frozen." We
>>>> can add a `bool protected` or `bool frozen` field to force recognition
>>>> of this status and adjust the json documentation accordingly.
>>>>
>>>> I think then we'd have four recognized states:
>>>>
>>>> FROZEN: Cannot be reset/deleted. Bitmap is in-use by a block job or
>>>> other internal process. Bitmap is otherwise ACTIVE.
>>>> DISABLED: Not recording any writes (by choice.)
>>>> READONLY: Not able to record any writes (by necessity.)
>>>> ACTIVE: Normal bitmap status.
>>>>
>>>> Sound right?
>>>> "
>>>>
>>>>
>>> I was afraid you'd say that :(
>>>
>>> It's okay, anyway. I shouldn't let myself go so long between reviews
>>> like this, because you catch me changing my mind. Anyway, please go
>>> ahead with it. I don't want to delay you on something that works because
>>> I can't make up *my* mind.
>> Hm, if you remember, reusing "frozen" state was strange for me too. And
>> it's not
>> late to move to
>> 1. make a new state: MIGRATION, which disallows qmp operations on bitmap
>> 2. or just make them unnamed, so they can't be touched by qmp
> "Migrating" is fine as a state name. You could probably announce this by
> having it be "frozen" in the usual way (it has a successor) and a new
> bool that lets you do whatever special handling you need to do for it.
create a successor and merge it in before postcopy stage? it is possible
but I don't like it, looks like cheat..
>
>> anything is ok for me as well as leaving it as is. It's all little
>> things, the core is patch 10.
>>
>> "frozen" sounds like unchanged, but user will see dirty-count changing
>> in query-block.
> I guess it's a strange misnomer now... or maybe just always was a bad
> name, since it's not really "frozen" but rather "locked" in a way that
> the QMP user cannot interfere with it -- but it's still a live,
> functioning object.
so, may be the best way is to add LOCKED state? which mean:
bitmap is under some operation and is not operable by qmp. dirty-count may
not reflect current state of the bitmap until operation end. and than we
will be
able to move to 'locked' instead of 'frozen' for backups to, and
deprecate frozen
state.
>
> I'm remembering what I was talking about, but I think my preference is
> illustrably worse. I was trying to avoid boolean bloat by advocating
> re-use, but the re-use is kind of confusing...
>
> I think I was hoping that a bitmap on the receiving end could simply be
> "frozen" in the usual way, in that it has a successor recording writes.
>
> I think the way you want to handle it though is with different semantics
> for cleanup and recovery which makes it not quite the same state, which
> needs either a new bool or some such.
>
> Go with what you think is cleanest at this point, including if you want
> to leave it alone. I don't want to cause you to respin it over bikeshedding.
>
> --js
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 44+ messages in thread
end of thread, other threads:[~2017-11-20 9:41 UTC | newest]
Thread overview: 44+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-30 16:32 [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration Vladimir Sementsov-Ogievskiy
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 01/14] block/dirty-bitmap: add bdrv_dirty_bitmap_enable_successor() Vladimir Sementsov-Ogievskiy
2017-11-10 0:47 ` John Snow
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 02/14] block/dirty-bitmap: add locked version of bdrv_release_dirty_bitmap Vladimir Sementsov-Ogievskiy
2017-11-10 22:52 ` John Snow
2017-11-16 8:56 ` Vladimir Sementsov-Ogievskiy
2017-11-16 18:18 ` John Snow
2017-11-17 8:07 ` Vladimir Sementsov-Ogievskiy
2017-11-17 18:25 ` John Snow
2017-11-20 9:30 ` Vladimir Sementsov-Ogievskiy
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 03/14] block/dirty-bitmap: add bdrv_dirty_bitmap_release_successor Vladimir Sementsov-Ogievskiy
2017-11-13 22:17 ` John Snow
2017-10-30 16:32 ` [Qemu-devel] [PATCH v8 04/14] block/dirty-bitmap: add bdrv_dirty_bitmap_set_frozen Vladimir Sementsov-Ogievskiy
2017-11-13 23:32 ` John Snow
2017-11-17 14:46 ` Vladimir Sementsov-Ogievskiy
2017-11-17 17:20 ` John Snow
2017-11-17 17:30 ` Vladimir Sementsov-Ogievskiy
2017-11-17 23:46 ` John Snow
2017-11-20 9:40 ` Vladimir Sementsov-Ogievskiy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 05/14] migration: introduce postcopy-only pending Vladimir Sementsov-Ogievskiy
2017-10-30 17:31 ` Dr. David Alan Gilbert
2017-10-30 18:17 ` Vladimir Sementsov-Ogievskiy
2017-10-30 18:19 ` [Qemu-devel] [PATCH v8.1 " Vladimir Sementsov-Ogievskiy
2017-11-14 0:09 ` John Snow
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 06/14] qapi: add dirty-bitmaps migration capability Vladimir Sementsov-Ogievskiy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 07/14] migration: include migrate_dirty_bitmaps in migrate_postcopy Vladimir Sementsov-Ogievskiy
2017-11-14 0:19 ` John Snow
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 08/14] migration/qemu-file: add qemu_put_counted_string() Vladimir Sementsov-Ogievskiy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 09/14] migration: add is_active_iterate handler Vladimir Sementsov-Ogievskiy
2017-11-14 0:29 ` John Snow
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 10/14] migration: add postcopy migration of dirty bitmaps Vladimir Sementsov-Ogievskiy
2017-11-15 1:58 ` John Snow
2017-11-16 10:24 ` Vladimir Sementsov-Ogievskiy
2017-11-17 0:36 ` John Snow
2017-11-17 0:47 ` John Snow
2017-11-16 16:50 ` Dr. David Alan Gilbert
2017-11-17 1:27 ` John Snow
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 11/14] iotests: add default node-name Vladimir Sementsov-Ogievskiy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 12/14] iotests: add dirty bitmap migration test Vladimir Sementsov-Ogievskiy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 13/14] iotests: add dirty bitmap postcopy test Vladimir Sementsov-Ogievskiy
2017-10-30 16:33 ` [Qemu-devel] [PATCH v8 14/14] iotests: add persistent bitmap migration test Vladimir Sementsov-Ogievskiy
2017-10-30 16:54 ` [Qemu-devel] [PATCH v8 00/14] Dirty bitmaps postcopy migration no-reply
2017-10-30 16:55 ` no-reply
2017-10-30 18:22 ` Vladimir Sementsov-Ogievskiy
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.