From 405ca57e690517150e85907e83d092478ff85de534ff5c9c3012c66eacb78457 Mon Sep 17 00:00:00 2001 From: Bruce Rogers Date: Thu, 12 Mar 2020 19:48:43 +0000 Subject: [PATCH] Accepting request 784401 from home:bfrogers:branches:Virtualization - Include upstream patches targeted for the next stable release (bug fixes only) audio-oss-fix-buffer-pos-calculation.patch blkdebug-Allow-taking-unsharing-permissi.patch block-Add-bdrv_qapi_perm_to_blk_perm.patch block-backup-top-fix-failure-path.patch block-block-copy-fix-progress-calculatio.patch block-fix-crash-on-zero-length-unaligned.patch block-fix-memleaks-in-bdrv_refresh_filen.patch block-Fix-VM-size-field-width-in-snapsho.patch block-nbd-extract-the-common-cleanup-cod.patch block-nbd-fix-memory-leak-in-nbd_open.patch block-qcow2-threads-fix-qcow2_decompress.patch hw-arm-cubieboard-use-ARM-Cortex-A8-as-t.patch hw-intc-arm_gicv3_kvm-Stop-wrongly-progr.patch iotests-add-test-for-backup-top-failure-.patch iotests-Fix-nonportable-use-of-od-endian.patch job-refactor-progress-to-separate-object.patch target-arm-Correct-definition-of-PMCRDP.patch target-arm-fix-TCG-leak-for-fcvt-half-do.patch tpm-ppi-page-align-PPI-RAM.patch vhost-user-blk-delete-virtioqueues-in-un.patch virtio-add-ability-to-delete-vq-through-.patch virtio-crypto-do-delete-ctrl_vq-in-virti.patch virtio-pmem-do-delete-rq_vq-in-virtio_pm.patch - Add Obsoletes directive for qemu-audio-sdl and qemu-ui-sdl since for a qemu package upgrade from SLE12-SP5, support for SDL is dropped OBS-URL: https://build.opensuse.org/request/show/784401 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=534 --- audio-oss-fix-buffer-pos-calculation.patch | 32 +++ ...ebug-Allow-taking-unsharing-permissi.patch | 201 ++++++++++++++++ block-Add-bdrv_qapi_perm_to_blk_perm.patch | 79 +++++++ ...k-Fix-VM-size-field-width-in-snapsho.patch | 50 ++++ block-backup-top-fix-failure-path.patch | 91 +++++++ ...k-block-copy-fix-progress-calculatio.patch | 195 +++++++++++++++ ...k-fix-crash-on-zero-length-unaligned.patch | 101 ++++++++ ...k-fix-memleaks-in-bdrv_refresh_filen.patch | 60 +++++ ...k-nbd-extract-the-common-cleanup-cod.patch | 72 ++++++ block-nbd-fix-memory-leak-in-nbd_open.patch | 70 ++++++ ...k-qcow2-threads-fix-qcow2_decompress.patch | 73 ++++++ bundles.tar.xz | 4 +- ...-acpi-Build-Memory-Proximity-Domain-.patch | 2 +- ...-acpi-Build-Memory-Side-Cache-Inform.patch | 2 +- ...-acpi-Build-System-Locality-Latency-.patch | 2 +- ...rm-cubieboard-use-ARM-Cortex-A8-as-t.patch | 51 ++++ ...ntc-arm_gicv3_kvm-Stop-wrongly-progr.patch | 58 +++++ i386-Add-MSR-feature-bit-for-MDS-NO.patch | 2 +- i386-Add-macro-for-stibp.patch | 2 +- i386-Add-new-CPU-model-Cooperlake.patch | 2 +- ...sts-Fix-nonportable-use-of-od-endian.patch | 61 +++++ ...sts-add-test-for-backup-top-failure-.patch | 140 +++++++++++ ...refactor-progress-to-separate-object.patch | 223 ++++++++++++++++++ ...-Extend-CLI-to-provide-initiator-inf.patch | 2 +- ...-Extend-CLI-to-provide-memory-latenc.patch | 2 +- ...-Extend-CLI-to-provide-memory-side-c.patch | 2 +- qemu-rpmlintrc | 1 + qemu.changes | 36 +++ qemu.spec | 193 +++++++++------ qemu.spec.in | 3 + target-arm-Correct-definition-of-PMCRDP.patch | 39 +++ ...et-arm-fix-TCG-leak-for-fcvt-half-do.patch | 46 ++++ tests-Disable-some-block-tests-for-now.patch | 2 +- tests-numa-Add-case-for-QMP-build-HMAT.patch | 2 +- tpm-ppi-page-align-PPI-RAM.patch | 41 ++++ ...t-user-blk-delete-virtioqueues-in-un.patch | 66 ++++++ ...io-add-ability-to-delete-vq-through-.patch | 62 +++++ ...io-crypto-do-delete-ctrl_vq-in-virti.patch | 52 ++++ ...io-don-t-enable-notifications-during.patch | 8 +- ...io-pmem-do-delete-rq_vq-in-virtio_pm.patch | 37 +++ 40 files changed, 2078 insertions(+), 89 deletions(-) create mode 100644 audio-oss-fix-buffer-pos-calculation.patch create mode 100644 blkdebug-Allow-taking-unsharing-permissi.patch create mode 100644 block-Add-bdrv_qapi_perm_to_blk_perm.patch create mode 100644 block-Fix-VM-size-field-width-in-snapsho.patch create mode 100644 block-backup-top-fix-failure-path.patch create mode 100644 block-block-copy-fix-progress-calculatio.patch create mode 100644 block-fix-crash-on-zero-length-unaligned.patch create mode 100644 block-fix-memleaks-in-bdrv_refresh_filen.patch create mode 100644 block-nbd-extract-the-common-cleanup-cod.patch create mode 100644 block-nbd-fix-memory-leak-in-nbd_open.patch create mode 100644 block-qcow2-threads-fix-qcow2_decompress.patch create mode 100644 hw-arm-cubieboard-use-ARM-Cortex-A8-as-t.patch create mode 100644 hw-intc-arm_gicv3_kvm-Stop-wrongly-progr.patch create mode 100644 iotests-Fix-nonportable-use-of-od-endian.patch create mode 100644 iotests-add-test-for-backup-top-failure-.patch create mode 100644 job-refactor-progress-to-separate-object.patch create mode 100644 target-arm-Correct-definition-of-PMCRDP.patch create mode 100644 target-arm-fix-TCG-leak-for-fcvt-half-do.patch create mode 100644 tpm-ppi-page-align-PPI-RAM.patch create mode 100644 vhost-user-blk-delete-virtioqueues-in-un.patch create mode 100644 virtio-add-ability-to-delete-vq-through-.patch create mode 100644 virtio-crypto-do-delete-ctrl_vq-in-virti.patch create mode 100644 virtio-pmem-do-delete-rq_vq-in-virtio_pm.patch diff --git a/audio-oss-fix-buffer-pos-calculation.patch b/audio-oss-fix-buffer-pos-calculation.patch new file mode 100644 index 0000000..466281d --- /dev/null +++ b/audio-oss-fix-buffer-pos-calculation.patch @@ -0,0 +1,32 @@ +From: Gerd Hoffmann +Date: Mon, 20 Jan 2020 11:18:04 +0100 +Subject: audio/oss: fix buffer pos calculation +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Git-commit: 7a4ede0047a8613b0e3b72c9d351038f013dd357 + +Fixes: 3ba4066d085f ("ossaudio: port to the new audio backend api") +Reported-by: ziming zhang +Signed-off-by: Gerd Hoffmann +Message-Id: <20200120101804.29578-1-kraxel@redhat.com> +Reviewed-by: Philippe Mathieu-Daudé +Signed-off-by: Bruce Rogers +--- + audio/ossaudio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/audio/ossaudio.c b/audio/ossaudio.c +index c43faeeea4aa208c9729cc760dcd..94564916fbf03c4783a5fdf5c403 100644 +--- a/audio/ossaudio.c ++++ b/audio/ossaudio.c +@@ -420,7 +420,7 @@ static size_t oss_write(HWVoiceOut *hw, void *buf, size_t len) + size_t to_copy = MIN(len, hw->size_emul - hw->pos_emul); + memcpy(hw->buf_emul + hw->pos_emul, buf, to_copy); + +- hw->pos_emul = (hw->pos_emul + to_copy) % hw->pos_emul; ++ hw->pos_emul = (hw->pos_emul + to_copy) % hw->size_emul; + buf += to_copy; + len -= to_copy; + } diff --git a/blkdebug-Allow-taking-unsharing-permissi.patch b/blkdebug-Allow-taking-unsharing-permissi.patch new file mode 100644 index 0000000..8e9fad8 --- /dev/null +++ b/blkdebug-Allow-taking-unsharing-permissi.patch @@ -0,0 +1,201 @@ +From: Max Reitz +Date: Fri, 8 Nov 2019 13:34:53 +0100 +Subject: blkdebug: Allow taking/unsharing permissions + +Git-commit: 69c6449ff10fe4e3219e960549307096d5366bd0 + +Sometimes it is useful to be able to add a node to the block graph that +takes or unshare a certain set of permissions for debugging purposes. +This patch adds this capability to blkdebug. + +(Note that you cannot make blkdebug release or share permissions that it +needs to take or cannot share, because this might result in assertion +failures in the block layer. But if the blkdebug node has no parents, +it will not take any permissions and share everything by default, so you +can then freely choose what permissions to take and share.) + +Signed-off-by: Max Reitz +Message-id: 20191108123455.39445-4-mreitz@redhat.com +Reviewed-by: Vladimir Sementsov-Ogievskiy +Signed-off-by: Max Reitz +Signed-off-by: Bruce Rogers +--- + block/blkdebug.c | 93 +++++++++++++++++++++++++++++++++++++++++++- + qapi/block-core.json | 14 ++++++- + 2 files changed, 105 insertions(+), 2 deletions(-) + +diff --git a/block/blkdebug.c b/block/blkdebug.c +index 5ae96c52b0733fc37bd5f485e124..af44aa973fd1855a48317ff7fd3f 100644 +--- a/block/blkdebug.c ++++ b/block/blkdebug.c +@@ -28,10 +28,14 @@ + #include "qemu/cutils.h" + #include "qemu/config-file.h" + #include "block/block_int.h" ++#include "block/qdict.h" + #include "qemu/module.h" + #include "qemu/option.h" ++#include "qapi/qapi-visit-block-core.h" + #include "qapi/qmp/qdict.h" ++#include "qapi/qmp/qlist.h" + #include "qapi/qmp/qstring.h" ++#include "qapi/qobject-input-visitor.h" + #include "sysemu/qtest.h" + + typedef struct BDRVBlkdebugState { +@@ -44,6 +48,9 @@ typedef struct BDRVBlkdebugState { + uint64_t opt_discard; + uint64_t max_discard; + ++ uint64_t take_child_perms; ++ uint64_t unshare_child_perms; ++ + /* For blkdebug_refresh_filename() */ + char *config_file; + +@@ -344,6 +351,69 @@ static void blkdebug_parse_filename(const char *filename, QDict *options, + qdict_put_str(options, "x-image", filename); + } + ++static int blkdebug_parse_perm_list(uint64_t *dest, QDict *options, ++ const char *prefix, Error **errp) ++{ ++ int ret = 0; ++ QDict *subqdict = NULL; ++ QObject *crumpled_subqdict = NULL; ++ Visitor *v = NULL; ++ BlockPermissionList *perm_list = NULL, *element; ++ Error *local_err = NULL; ++ ++ *dest = 0; ++ ++ qdict_extract_subqdict(options, &subqdict, prefix); ++ if (!qdict_size(subqdict)) { ++ goto out; ++ } ++ ++ crumpled_subqdict = qdict_crumple(subqdict, errp); ++ if (!crumpled_subqdict) { ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ v = qobject_input_visitor_new(crumpled_subqdict); ++ visit_type_BlockPermissionList(v, NULL, &perm_list, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ for (element = perm_list; element; element = element->next) { ++ *dest |= bdrv_qapi_perm_to_blk_perm(element->value); ++ } ++ ++out: ++ qapi_free_BlockPermissionList(perm_list); ++ visit_free(v); ++ qobject_unref(subqdict); ++ qobject_unref(crumpled_subqdict); ++ return ret; ++} ++ ++static int blkdebug_parse_perms(BDRVBlkdebugState *s, QDict *options, ++ Error **errp) ++{ ++ int ret; ++ ++ ret = blkdebug_parse_perm_list(&s->take_child_perms, options, ++ "take-child-perms.", errp); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ ret = blkdebug_parse_perm_list(&s->unshare_child_perms, options, ++ "unshare-child-perms.", errp); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ return 0; ++} ++ + static QemuOptsList runtime_opts = { + .name = "blkdebug", + .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head), +@@ -419,6 +489,12 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, + /* Set initial state */ + s->state = 1; + ++ /* Parse permissions modifiers before opening the image file */ ++ ret = blkdebug_parse_perms(s, options, errp); ++ if (ret < 0) { ++ goto out; ++ } ++ + /* Open the image file */ + bs->file = bdrv_open_child(qemu_opt_get(opts, "x-image"), options, "image", + bs, &child_file, false, &local_err); +@@ -916,6 +992,21 @@ static int blkdebug_reopen_prepare(BDRVReopenState *reopen_state, + return 0; + } + ++static void blkdebug_child_perm(BlockDriverState *bs, BdrvChild *c, ++ const BdrvChildRole *role, ++ BlockReopenQueue *reopen_queue, ++ uint64_t perm, uint64_t shared, ++ uint64_t *nperm, uint64_t *nshared) ++{ ++ BDRVBlkdebugState *s = bs->opaque; ++ ++ bdrv_filter_default_perms(bs, c, role, reopen_queue, perm, shared, ++ nperm, nshared); ++ ++ *nperm |= s->take_child_perms; ++ *nshared &= ~s->unshare_child_perms; ++} ++ + static const char *const blkdebug_strong_runtime_opts[] = { + "config", + "inject-error.", +@@ -940,7 +1031,7 @@ static BlockDriver bdrv_blkdebug = { + .bdrv_file_open = blkdebug_open, + .bdrv_close = blkdebug_close, + .bdrv_reopen_prepare = blkdebug_reopen_prepare, +- .bdrv_child_perm = bdrv_filter_default_perms, ++ .bdrv_child_perm = blkdebug_child_perm, + + .bdrv_getlength = blkdebug_getlength, + .bdrv_refresh_filename = blkdebug_refresh_filename, +diff --git a/qapi/block-core.json b/qapi/block-core.json +index 0cf68fea1450e6cb739863d2367c..bcf77d496289480b86b1c9d80374 100644 +--- a/qapi/block-core.json ++++ b/qapi/block-core.json +@@ -3450,6 +3450,16 @@ + # + # @set-state: array of state-change descriptions + # ++# @take-child-perms: Permissions to take on @image in addition to what ++# is necessary anyway (which depends on how the ++# blkdebug node is used). Defaults to none. ++# (since 5.0) ++# ++# @unshare-child-perms: Permissions not to share on @image in addition ++# to what cannot be shared anyway (which depends ++# on how the blkdebug node is used). Defaults ++# to none. (since 5.0) ++# + # Since: 2.9 + ## + { 'struct': 'BlockdevOptionsBlkdebug', +@@ -3459,7 +3469,9 @@ + '*opt-write-zero': 'int32', '*max-write-zero': 'int32', + '*opt-discard': 'int32', '*max-discard': 'int32', + '*inject-error': ['BlkdebugInjectErrorOptions'], +- '*set-state': ['BlkdebugSetStateOptions'] } } ++ '*set-state': ['BlkdebugSetStateOptions'], ++ '*take-child-perms': ['BlockPermission'], ++ '*unshare-child-perms': ['BlockPermission'] } } + + ## + # @BlockdevOptionsBlklogwrites: diff --git a/block-Add-bdrv_qapi_perm_to_blk_perm.patch b/block-Add-bdrv_qapi_perm_to_blk_perm.patch new file mode 100644 index 0000000..a86f8bd --- /dev/null +++ b/block-Add-bdrv_qapi_perm_to_blk_perm.patch @@ -0,0 +1,79 @@ +From: Max Reitz +Date: Fri, 8 Nov 2019 13:34:51 +0100 +Subject: block: Add bdrv_qapi_perm_to_blk_perm() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Git-commit: 7b1d9c4df0603fbc526226a9c5ef91118aa6c957 + +We need some way to correlate QAPI BlockPermission values with +BLK_PERM_* flags. We could: + +(1) have the same order in the QAPI definition as the the BLK_PERM_* + flags are in LSb-first order. However, then there is no guarantee + that they actually match (e.g. when someone modifies the QAPI schema + without thinking of the BLK_PERM_* definitions). + We could add static assertions, but these would break what’s good + about this solution, namely its simplicity. + +(2) define the BLK_PERM_* flags based on the BlockPermission values. + But this way whenever someone were to modify the QAPI order + (perfectly sensible in theory), the BLK_PERM_* values would change. + Because these values are used for file locking, this might break + file locking between different qemu versions. + +Therefore, go the slightly more cumbersome way: Add a function to +translate from the QAPI constants to the BLK_PERM_* flags. + +Signed-off-by: Max Reitz +Message-id: 20191108123455.39445-2-mreitz@redhat.com +Reviewed-by: Vladimir Sementsov-Ogievskiy +Signed-off-by: Max Reitz +Signed-off-by: Bruce Rogers +--- + block.c | 18 ++++++++++++++++++ + include/block/block.h | 1 + + 2 files changed, 19 insertions(+) + +diff --git a/block.c b/block.c +index 2e5e8b639a88d430e52ef40973c7..2cc16f99b352623272491c1cf254 100644 +--- a/block.c ++++ b/block.c +@@ -2227,6 +2227,24 @@ void bdrv_format_default_perms(BlockDriverState *bs, BdrvChild *c, + *nshared = shared; + } + ++uint64_t bdrv_qapi_perm_to_blk_perm(BlockPermission qapi_perm) ++{ ++ static const uint64_t permissions[] = { ++ [BLOCK_PERMISSION_CONSISTENT_READ] = BLK_PERM_CONSISTENT_READ, ++ [BLOCK_PERMISSION_WRITE] = BLK_PERM_WRITE, ++ [BLOCK_PERMISSION_WRITE_UNCHANGED] = BLK_PERM_WRITE_UNCHANGED, ++ [BLOCK_PERMISSION_RESIZE] = BLK_PERM_RESIZE, ++ [BLOCK_PERMISSION_GRAPH_MOD] = BLK_PERM_GRAPH_MOD, ++ }; ++ ++ QEMU_BUILD_BUG_ON(ARRAY_SIZE(permissions) != BLOCK_PERMISSION__MAX); ++ QEMU_BUILD_BUG_ON(1UL << ARRAY_SIZE(permissions) != BLK_PERM_ALL + 1); ++ ++ assert(qapi_perm < BLOCK_PERMISSION__MAX); ++ ++ return permissions[qapi_perm]; ++} ++ + static void bdrv_replace_child_noperm(BdrvChild *child, + BlockDriverState *new_bs) + { +diff --git a/include/block/block.h b/include/block/block.h +index 1df9848e7436eec47e6251118a2f..e9dcfef7fa463e7655b4ec4a0d7c 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -280,6 +280,7 @@ enum { + }; + + char *bdrv_perm_names(uint64_t perm); ++uint64_t bdrv_qapi_perm_to_blk_perm(BlockPermission qapi_perm); + + /* disk I/O throttling */ + void bdrv_init(void); diff --git a/block-Fix-VM-size-field-width-in-snapsho.patch b/block-Fix-VM-size-field-width-in-snapsho.patch new file mode 100644 index 0000000..14855c3 --- /dev/null +++ b/block-Fix-VM-size-field-width-in-snapsho.patch @@ -0,0 +1,50 @@ +From: Max Reitz +Date: Fri, 17 Jan 2020 11:58:58 +0100 +Subject: block: Fix VM size field width in snapshot dump + +Git-commit: 804359b8b90f76d9d8fbe8d85a6544b68f107f10 + +When printing the snapshot list (e.g. with qemu-img snapshot -l), the VM +size field is only seven characters wide. As of de38b5005e9, this is +not necessarily sufficient: We generally print three digits, and this +may require a decimal point. Also, the unit field grew from something +as plain as "M" to " MiB". This means that number and unit may take up +eight characters in total; but we also want spaces in front. + +Considering previously the maximum width was four characters and the +field width was chosen to be three characters wider, let us adjust the +field width to be eleven now. + +Fixes: de38b5005e946aa3714963ea4c501e279e7d3666 +Buglink: https://bugs.launchpad.net/qemu/+bug/1859989 +Signed-off-by: Max Reitz +Message-Id: <20200117105859.241818-2-mreitz@redhat.com> +Reviewed-by: Eric Blake +Signed-off-by: Max Reitz +Signed-off-by: Bruce Rogers +--- + block/qapi.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block/qapi.c b/block/qapi.c +index 9a5d0c9b27d85d77f3c6d49dcd0e..ffa539250dc8f0d01374517e8e5b 100644 +--- a/block/qapi.c ++++ b/block/qapi.c +@@ -657,7 +657,7 @@ void bdrv_snapshot_dump(QEMUSnapshotInfo *sn) + char *sizing = NULL; + + if (!sn) { +- qemu_printf("%-10s%-20s%7s%20s%15s", ++ qemu_printf("%-10s%-20s%11s%20s%15s", + "ID", "TAG", "VM SIZE", "DATE", "VM CLOCK"); + } else { + ti = sn->date_sec; +@@ -672,7 +672,7 @@ void bdrv_snapshot_dump(QEMUSnapshotInfo *sn) + (int)(secs % 60), + (int)((sn->vm_clock_nsec / 1000000) % 1000)); + sizing = size_to_str(sn->vm_state_size); +- qemu_printf("%-10s%-20s%7s%20s%15s", ++ qemu_printf("%-10s%-20s%11s%20s%15s", + sn->id_str, sn->name, + sizing, + date_buf, diff --git a/block-backup-top-fix-failure-path.patch b/block-backup-top-fix-failure-path.patch new file mode 100644 index 0000000..4d24d55 --- /dev/null +++ b/block-backup-top-fix-failure-path.patch @@ -0,0 +1,91 @@ +From: Vladimir Sementsov-Ogievskiy +Date: Tue, 21 Jan 2020 17:28:01 +0300 +Subject: block/backup-top: fix failure path + +Git-commit 0df62f45c1de6c020f1e6fba4eeafd248209b003 + +We can't access top after call bdrv_backup_top_drop, as it is already +freed at this time. + +Also, no needs to unref target child by hand, it will be unrefed on +bdrv_close() automatically. + +So, just do bdrv_backup_top_drop if append succeed and one bdrv_unref +otherwise. + +Note, that in !appended case bdrv_unref(top) moved into drained section +on source. It doesn't really matter, but just for code simplicity. + +Fixes: 7df7868b96404 +Cc: qemu-stable@nongnu.org # v4.2.0 +Signed-off-by: Vladimir Sementsov-Ogievskiy +Reviewed-by: Max Reitz +Message-id: 20200121142802.21467-2-vsementsov@virtuozzo.com +Signed-off-by: Max Reitz +Signed-off-by: Bruce Rogers +--- + block/backup-top.c | 21 ++++++++++++--------- + 1 file changed, 12 insertions(+), 9 deletions(-) + +diff --git a/block/backup-top.c b/block/backup-top.c +index 64e9e4f576ab27889fb4c0d8aa0a..d214139a4d2f2694df7610394003 100644 +--- a/block/backup-top.c ++++ b/block/backup-top.c +@@ -190,6 +190,7 @@ BlockDriverState *bdrv_backup_top_append(BlockDriverState *source, + BlockDriverState *top = bdrv_new_open_driver(&bdrv_backup_top_filter, + filter_node_name, + BDRV_O_RDWR, errp); ++ bool appended = false; + + if (!top) { + return NULL; +@@ -212,8 +213,9 @@ BlockDriverState *bdrv_backup_top_append(BlockDriverState *source, + bdrv_append(top, source, &local_err); + if (local_err) { + error_prepend(&local_err, "Cannot append backup-top filter: "); +- goto append_failed; ++ goto fail; + } ++ appended = true; + + /* + * bdrv_append() finished successfully, now we can require permissions +@@ -224,14 +226,14 @@ BlockDriverState *bdrv_backup_top_append(BlockDriverState *source, + if (local_err) { + error_prepend(&local_err, + "Cannot set permissions for backup-top filter: "); +- goto failed_after_append; ++ goto fail; + } + + state->bcs = block_copy_state_new(top->backing, state->target, + cluster_size, write_flags, &local_err); + if (local_err) { + error_prepend(&local_err, "Cannot create block-copy-state: "); +- goto failed_after_append; ++ goto fail; + } + *bcs = state->bcs; + +@@ -239,14 +241,15 @@ BlockDriverState *bdrv_backup_top_append(BlockDriverState *source, + + return top; + +-failed_after_append: +- state->active = false; +- bdrv_backup_top_drop(top); ++fail: ++ if (appended) { ++ state->active = false; ++ bdrv_backup_top_drop(top); ++ } else { ++ bdrv_unref(top); ++ } + +-append_failed: + bdrv_drained_end(source); +- bdrv_unref_child(top, state->target); +- bdrv_unref(top); + error_propagate(errp, local_err); + + return NULL; diff --git a/block-block-copy-fix-progress-calculatio.patch b/block-block-copy-fix-progress-calculatio.patch new file mode 100644 index 0000000..00957bf --- /dev/null +++ b/block-block-copy-fix-progress-calculatio.patch @@ -0,0 +1,195 @@ +From: Vladimir Sementsov-Ogievskiy +Date: Wed, 11 Mar 2020 13:29:57 +0300 +Subject: block/block-copy: fix progress calculation + +Git-commit: d0ebeca14a585f352938062ef8ddde47fe4d39f9 + +Assume we have two regions, A and B, and region B is in-flight now, +region A is not yet touched, but it is unallocated and should be +skipped. + +Correspondingly, as progress we have + + total = A + B + current = 0 + +If we reset unallocated region A and call progress_reset_callback, +it will calculate 0 bytes dirty in the bitmap and call +job_progress_set_remaining, which will set + + total = current + 0 = 0 + 0 = 0 + +So, B bytes are actually removed from total accounting. When job +finishes we'll have + + total = 0 + current = B + +, which doesn't sound good. + +This is because we didn't considered in-flight bytes, actually when +calculating remaining, we should have set (in_flight + dirty_bytes) +as remaining, not only dirty_bytes. + +To fix it, let's refactor progress calculation, moving it to block-copy +itself instead of fixing callback. And, of course, track in_flight +bytes count. + +We still have to keep one callback, to maintain backup job bytes_read +calculation, but it will go on soon, when we turn the whole backup +process into one block_copy call. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Vladimir Sementsov-Ogievskiy +Reviewed-by: Andrey Shinkevich +Message-Id: <20200311103004.7649-3-vsementsov@virtuozzo.com> +Signed-off-by: Max Reitz +Signed-off-by: Bruce Rogers +--- + block/backup.c | 13 ++----------- + block/block-copy.c | 16 ++++++++++++---- + include/block/block-copy.h | 15 +++++---------- + 3 files changed, 19 insertions(+), 25 deletions(-) + +diff --git a/block/backup.c b/block/backup.c +index cf62b1a38ceacaa6785f0ec0d197..5f3bd2415a125e845441deafe3b5 100644 +--- a/block/backup.c ++++ b/block/backup.c +@@ -57,15 +57,6 @@ static void backup_progress_bytes_callback(int64_t bytes, void *opaque) + BackupBlockJob *s = opaque; + + s->bytes_read += bytes; +- job_progress_update(&s->common.job, bytes); +-} +- +-static void backup_progress_reset_callback(void *opaque) +-{ +- BackupBlockJob *s = opaque; +- uint64_t estimate = bdrv_get_dirty_count(s->bcs->copy_bitmap); +- +- job_progress_set_remaining(&s->common.job, estimate); + } + + static int coroutine_fn backup_do_cow(BackupBlockJob *job, +@@ -461,8 +452,8 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, + job->cluster_size = cluster_size; + job->len = len; + +- block_copy_set_callbacks(bcs, backup_progress_bytes_callback, +- backup_progress_reset_callback, job); ++ block_copy_set_progress_callback(bcs, backup_progress_bytes_callback, job); ++ block_copy_set_progress_meter(bcs, &job->common.job.progress); + + /* Required permissions are already taken by backup-top target */ + block_job_add_bdrv(&job->common, "target", target, 0, BLK_PERM_ALL, +diff --git a/block/block-copy.c b/block/block-copy.c +index 79798a1567b10d8b59b6bb045ca4..e2d7b3b887198b40a12a42073ac9 100644 +--- a/block/block-copy.c ++++ b/block/block-copy.c +@@ -127,17 +127,20 @@ BlockCopyState *block_copy_state_new(BdrvChild *source, BdrvChild *target, + return s; + } + +-void block_copy_set_callbacks( ++void block_copy_set_progress_callback( + BlockCopyState *s, + ProgressBytesCallbackFunc progress_bytes_callback, +- ProgressResetCallbackFunc progress_reset_callback, + void *progress_opaque) + { + s->progress_bytes_callback = progress_bytes_callback; +- s->progress_reset_callback = progress_reset_callback; + s->progress_opaque = progress_opaque; + } + ++void block_copy_set_progress_meter(BlockCopyState *s, ProgressMeter *pm) ++{ ++ s->progress = pm; ++} ++ + /* + * block_copy_do_copy + * +@@ -269,7 +272,9 @@ int64_t block_copy_reset_unallocated(BlockCopyState *s, + + if (!ret) { + bdrv_reset_dirty_bitmap(s->copy_bitmap, offset, bytes); +- s->progress_reset_callback(s->progress_opaque); ++ progress_set_remaining(s->progress, ++ bdrv_get_dirty_count(s->copy_bitmap) + ++ s->in_flight_bytes); + } + + *count = bytes; +@@ -331,15 +336,18 @@ int coroutine_fn block_copy(BlockCopyState *s, + trace_block_copy_process(s, start); + + bdrv_reset_dirty_bitmap(s->copy_bitmap, start, chunk_end - start); ++ s->in_flight_bytes += chunk_end - start; + + co_get_from_shres(s->mem, chunk_end - start); + ret = block_copy_do_copy(s, start, chunk_end, error_is_read); + co_put_to_shres(s->mem, chunk_end - start); ++ s->in_flight_bytes -= chunk_end - start; + if (ret < 0) { + bdrv_set_dirty_bitmap(s->copy_bitmap, start, chunk_end - start); + break; + } + ++ progress_work_done(s->progress, chunk_end - start); + s->progress_bytes_callback(chunk_end - start, s->progress_opaque); + start = chunk_end; + ret = 0; +diff --git a/include/block/block-copy.h b/include/block/block-copy.h +index 0a161724d77bddbb2e8bcfd0e913..9def00068c5ad12044cae0331853 100644 +--- a/include/block/block-copy.h ++++ b/include/block/block-copy.h +@@ -26,7 +26,6 @@ typedef struct BlockCopyInFlightReq { + } BlockCopyInFlightReq; + + typedef void (*ProgressBytesCallbackFunc)(int64_t bytes, void *opaque); +-typedef void (*ProgressResetCallbackFunc)(void *opaque); + typedef struct BlockCopyState { + /* + * BdrvChild objects are not owned or managed by block-copy. They are +@@ -36,6 +35,7 @@ typedef struct BlockCopyState { + BdrvChild *source; + BdrvChild *target; + BdrvDirtyBitmap *copy_bitmap; ++ int64_t in_flight_bytes; + int64_t cluster_size; + bool use_copy_range; + int64_t copy_size; +@@ -60,15 +60,9 @@ typedef struct BlockCopyState { + */ + bool skip_unallocated; + ++ ProgressMeter *progress; + /* progress_bytes_callback: called when some copying progress is done. */ + ProgressBytesCallbackFunc progress_bytes_callback; +- +- /* +- * progress_reset_callback: called when some bytes reset from copy_bitmap +- * (see @skip_unallocated above). The callee is assumed to recalculate how +- * many bytes remain based on the dirty bit count of copy_bitmap. +- */ +- ProgressResetCallbackFunc progress_reset_callback; + void *progress_opaque; + + SharedResource *mem; +@@ -79,12 +73,13 @@ BlockCopyState *block_copy_state_new(BdrvChild *source, BdrvChild *target, + BdrvRequestFlags write_flags, + Error **errp); + +-void block_copy_set_callbacks( ++void block_copy_set_progress_callback( + BlockCopyState *s, + ProgressBytesCallbackFunc progress_bytes_callback, +- ProgressResetCallbackFunc progress_reset_callback, + void *progress_opaque); + ++void block_copy_set_progress_meter(BlockCopyState *s, ProgressMeter *pm); ++ + void block_copy_state_free(BlockCopyState *s); + + int64_t block_copy_reset_unallocated(BlockCopyState *s, diff --git a/block-fix-crash-on-zero-length-unaligned.patch b/block-fix-crash-on-zero-length-unaligned.patch new file mode 100644 index 0000000..4caef8a --- /dev/null +++ b/block-fix-crash-on-zero-length-unaligned.patch @@ -0,0 +1,101 @@ +From: Vladimir Sementsov-Ogievskiy +Date: Thu, 6 Feb 2020 19:42:45 +0300 +Subject: block: fix crash on zero-length unaligned write and read + +Git-commit: ac9d00bf7b47acae6b0e42910d9ed55fef3af5b8 + +Commit 7a3f542fbd "block/io: refactor padding" occasionally dropped +aligning for zero-length request: bdrv_init_padding() blindly return +false if bytes == 0, like there is nothing to align. + +This leads the following command to crash: + +./qemu-io --image-opts -c 'write 1 0' \ + driver=blkdebug,align=512,image.driver=null-co,image.size=512 + +>> qemu-io: block/io.c:1955: bdrv_aligned_pwritev: Assertion + `(offset & (align - 1)) == 0' failed. +>> Aborted (core dumped) + +Prior to 7a3f542fbd we does aligning of such zero requests. Instead of +recovering this behavior let's just do nothing on such requests as it +is useless. + +Note that driver may have special meaning of zero-length reqeusts, like +qcow2_co_pwritev_compressed_part, so we can't skip any zero-length +operation. But for unaligned ones, we can't pass it to driver anyway. + +This commit also fixes crash in iotest 80 running with -nocache: + +./check -nocache -qcow2 80 + +which crashes on same assertion due to trying to read empty extra data +in qcow2_do_read_snapshots(). + +Cc: qemu-stable@nongnu.org # v4.2 +Fixes: 7a3f542fbd +Signed-off-by: Vladimir Sementsov-Ogievskiy +Reviewed-by: Max Reitz +Message-id: 20200206164245.17781-1-vsementsov@virtuozzo.com +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Bruce Rogers +--- + block/io.c | 28 +++++++++++++++++++++++++++- + 1 file changed, 27 insertions(+), 1 deletion(-) + +diff --git a/block/io.c b/block/io.c +index f75777f5ea744aac5c9b5872f203..d1f1ee9138c7af82352e9277f22b 100644 +--- a/block/io.c ++++ b/block/io.c +@@ -1567,10 +1567,12 @@ static bool bdrv_init_padding(BlockDriverState *bs, + pad->tail = align - pad->tail; + } + +- if ((!pad->head && !pad->tail) || !bytes) { ++ if (!pad->head && !pad->tail) { + return false; + } + ++ assert(bytes); /* Nothing good in aligning zero-length requests */ ++ + sum = pad->head + bytes + pad->tail; + pad->buf_len = (sum > align && pad->head && pad->tail) ? 2 * align : align; + pad->buf = qemu_blockalign(bs, pad->buf_len); +@@ -1708,6 +1710,18 @@ int coroutine_fn bdrv_co_preadv_part(BdrvChild *child, + return ret; + } + ++ if (bytes == 0 && !QEMU_IS_ALIGNED(offset, bs->bl.request_alignment)) { ++ /* ++ * Aligning zero request is nonsense. Even if driver has special meaning ++ * of zero-length (like qcow2_co_pwritev_compressed_part), we can't pass ++ * it to driver due to request_alignment. ++ * ++ * Still, no reason to return an error if someone do unaligned ++ * zero-length read occasionally. ++ */ ++ return 0; ++ } ++ + bdrv_inc_in_flight(bs); + + /* Don't do copy-on-read if we read data before write operation */ +@@ -2115,6 +2129,18 @@ int coroutine_fn bdrv_co_pwritev_part(BdrvChild *child, + return -ENOTSUP; + } + ++ if (bytes == 0 && !QEMU_IS_ALIGNED(offset, bs->bl.request_alignment)) { ++ /* ++ * Aligning zero request is nonsense. Even if driver has special meaning ++ * of zero-length (like qcow2_co_pwritev_compressed_part), we can't pass ++ * it to driver due to request_alignment. ++ * ++ * Still, no reason to return an error if someone do unaligned ++ * zero-length write occasionally. ++ */ ++ return 0; ++ } ++ + bdrv_inc_in_flight(bs); + /* + * Align write if necessary by performing a read-modify-write cycle. diff --git a/block-fix-memleaks-in-bdrv_refresh_filen.patch b/block-fix-memleaks-in-bdrv_refresh_filen.patch new file mode 100644 index 0000000..37a79a9 --- /dev/null +++ b/block-fix-memleaks-in-bdrv_refresh_filen.patch @@ -0,0 +1,60 @@ +From: Pan Nengyuan +Date: Thu, 16 Jan 2020 16:56:00 +0800 +Subject: block: fix memleaks in bdrv_refresh_filename + +Git-commit: cb8956144ccaccf23d5cc4167677e2c84fa5a9f8 + +If we call the qmp 'query-block' while qemu is working on +'block-commit', it will cause memleaks, the memory leak stack is as +follow: + +Indirect leak of 12360 byte(s) in 3 object(s) allocated from: + #0 0x7f80f0b6d970 in __interceptor_calloc (/lib64/libasan.so.5+0xef970) + #1 0x7f80ee86049d in g_malloc0 (/lib64/libglib-2.0.so.0+0x5249d) + #2 0x55ea95b5bb67 in qdict_new /mnt/sdb/qemu-4.2.0-rc0/qobject/qdict.c:29 + #3 0x55ea956cd043 in bdrv_refresh_filename /mnt/sdb/qemu-4.2.0-rc0/block.c:6427 + #4 0x55ea956cc950 in bdrv_refresh_filename /mnt/sdb/qemu-4.2.0-rc0/block.c:6399 + #5 0x55ea956cc950 in bdrv_refresh_filename /mnt/sdb/qemu-4.2.0-rc0/block.c:6399 + #6 0x55ea956cc950 in bdrv_refresh_filename /mnt/sdb/qemu-4.2.0-rc0/block.c:6399 + #7 0x55ea958818ea in bdrv_block_device_info /mnt/sdb/qemu-4.2.0-rc0/block/qapi.c:56 + #8 0x55ea958879de in bdrv_query_info /mnt/sdb/qemu-4.2.0-rc0/block/qapi.c:392 + #9 0x55ea9588b58f in qmp_query_block /mnt/sdb/qemu-4.2.0-rc0/block/qapi.c:578 + #10 0x55ea95567392 in qmp_marshal_query_block qapi/qapi-commands-block-core.c:95 + +Indirect leak of 4120 byte(s) in 1 object(s) allocated from: + #0 0x7f80f0b6d970 in __interceptor_calloc (/lib64/libasan.so.5+0xef970) + #1 0x7f80ee86049d in g_malloc0 (/lib64/libglib-2.0.so.0+0x5249d) + #2 0x55ea95b5bb67 in qdict_new /mnt/sdb/qemu-4.2.0-rc0/qobject/qdict.c:29 + #3 0x55ea956cd043 in bdrv_refresh_filename /mnt/sdb/qemu-4.2.0-rc0/block.c:6427 + #4 0x55ea956cc950 in bdrv_refresh_filename /mnt/sdb/qemu-4.2.0-rc0/block.c:6399 + #5 0x55ea956cc950 in bdrv_refresh_filename /mnt/sdb/qemu-4.2.0-rc0/block.c:6399 + #6 0x55ea9569f301 in bdrv_backing_attach /mnt/sdb/qemu-4.2.0-rc0/block.c:1064 + #7 0x55ea956a99dd in bdrv_replace_child_noperm /mnt/sdb/qemu-4.2.0-rc0/block.c:2283 + #8 0x55ea956b9b53 in bdrv_replace_node /mnt/sdb/qemu-4.2.0-rc0/block.c:4196 + #9 0x55ea956b9e49 in bdrv_append /mnt/sdb/qemu-4.2.0-rc0/block.c:4236 + #10 0x55ea958c3472 in commit_start /mnt/sdb/qemu-4.2.0-rc0/block/commit.c:306 + #11 0x55ea94b68ab0 in qmp_block_commit /mnt/sdb/qemu-4.2.0-rc0/blockdev.c:3459 + #12 0x55ea9556a7a7 in qmp_marshal_block_commit qapi/qapi-commands-block-core.c:407 + +Fixes: bb808d5f5c0978828a974d547e6032402c339555 +Reported-by: Euler Robot +Signed-off-by: Pan Nengyuan +Message-id: 20200116085600.24056-1-pannengyuan@huawei.com +Signed-off-by: Max Reitz +Signed-off-by: Bruce Rogers +--- + block.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/block.c b/block.c +index 2cc16f99b352623272491c1cf254..8539f99ac47cdbf0e9b823751074 100644 +--- a/block.c ++++ b/block.c +@@ -6426,6 +6426,7 @@ void bdrv_refresh_filename(BlockDriverState *bs) + child->bs->exact_filename); + pstrcpy(bs->filename, sizeof(bs->filename), child->bs->filename); + ++ qobject_unref(bs->full_open_options); + bs->full_open_options = qobject_ref(child->bs->full_open_options); + + return; diff --git a/block-nbd-extract-the-common-cleanup-cod.patch b/block-nbd-extract-the-common-cleanup-cod.patch new file mode 100644 index 0000000..7d80149 --- /dev/null +++ b/block-nbd-extract-the-common-cleanup-cod.patch @@ -0,0 +1,72 @@ +From: Pan Nengyuan +Date: Thu, 5 Dec 2019 11:45:27 +0800 +Subject: block/nbd: extract the common cleanup code + +Git-commit: 7f493662be4045146a8f45119d8834c9088a0ad6 + +The BDRVNBDState cleanup code is common in two places, add +nbd_clear_bdrvstate() function to do these cleanups. + +Suggested-by: Stefano Garzarella +Signed-off-by: Pan Nengyuan +Reviewed-by: Vladimir Sementsov-Ogievskiy +Message-Id: <1575517528-44312-2-git-send-email-pannengyuan@huawei.com> +Reviewed-by: Eric Blake +[eblake: fix compilation error and commit message] +Signed-off-by: Eric Blake +Signed-off-by: Bruce Rogers +--- + block/nbd.c | 26 +++++++++++++++----------- + 1 file changed, 15 insertions(+), 11 deletions(-) + +diff --git a/block/nbd.c b/block/nbd.c +index 5f18f78a9471b25c859bf8d4a743..6bb67152864954bb0e7b6f0145de 100644 +--- a/block/nbd.c ++++ b/block/nbd.c +@@ -94,6 +94,19 @@ typedef struct BDRVNBDState { + + static int nbd_client_connect(BlockDriverState *bs, Error **errp); + ++static void nbd_clear_bdrvstate(BDRVNBDState *s) ++{ ++ object_unref(OBJECT(s->tlscreds)); ++ qapi_free_SocketAddress(s->saddr); ++ s->saddr = NULL; ++ g_free(s->export); ++ s->export = NULL; ++ g_free(s->tlscredsid); ++ s->tlscredsid = NULL; ++ g_free(s->x_dirty_bitmap); ++ s->x_dirty_bitmap = NULL; ++} ++ + static void nbd_channel_error(BDRVNBDState *s, int ret) + { + if (ret == -EIO) { +@@ -1864,11 +1877,7 @@ static int nbd_process_options(BlockDriverState *bs, QDict *options, + + error: + if (ret < 0) { +- object_unref(OBJECT(s->tlscreds)); +- qapi_free_SocketAddress(s->saddr); +- g_free(s->export); +- g_free(s->tlscredsid); +- g_free(s->x_dirty_bitmap); ++ nbd_clear_bdrvstate(s); + } + qemu_opts_del(opts); + return ret; +@@ -1947,12 +1956,7 @@ static void nbd_close(BlockDriverState *bs) + BDRVNBDState *s = bs->opaque; + + nbd_client_close(bs); +- +- object_unref(OBJECT(s->tlscreds)); +- qapi_free_SocketAddress(s->saddr); +- g_free(s->export); +- g_free(s->tlscredsid); +- g_free(s->x_dirty_bitmap); ++ nbd_clear_bdrvstate(s); + } + + static int64_t nbd_getlength(BlockDriverState *bs) diff --git a/block-nbd-fix-memory-leak-in-nbd_open.patch b/block-nbd-fix-memory-leak-in-nbd_open.patch new file mode 100644 index 0000000..bd62fd9 --- /dev/null +++ b/block-nbd-fix-memory-leak-in-nbd_open.patch @@ -0,0 +1,70 @@ +From: Pan Nengyuan +Date: Thu, 5 Dec 2019 11:45:28 +0800 +Subject: block/nbd: fix memory leak in nbd_open() + +Git-commit: 8198cf5ef0ef98118b4176970d1cd998d93ec849 + +In currently implementation there will be a memory leak when +nbd_client_connect() returns error status. Here is an easy way to +reproduce: + +1. run qemu-iotests as follow and check the result with asan: + ./check -raw 143 + +Following is the asan output backtrack: +Direct leak of 40 byte(s) in 1 object(s) allocated from: + #0 0x7f629688a560 in calloc (/usr/lib64/libasan.so.3+0xc7560) + #1 0x7f6295e7e015 in g_malloc0 (/usr/lib64/libglib-2.0.so.0+0x50015) + #2 0x56281dab4642 in qobject_input_start_struct /mnt/sdb/qemu-4.2.0-rc0/qapi/qobject-input-visitor.c:295 + #3 0x56281dab1a04 in visit_start_struct /mnt/sdb/qemu-4.2.0-rc0/qapi/qapi-visit-core.c:49 + #4 0x56281dad1827 in visit_type_SocketAddress qapi/qapi-visit-sockets.c:386 + #5 0x56281da8062f in nbd_config /mnt/sdb/qemu-4.2.0-rc0/block/nbd.c:1716 + #6 0x56281da8062f in nbd_process_options /mnt/sdb/qemu-4.2.0-rc0/block/nbd.c:1829 + #7 0x56281da8062f in nbd_open /mnt/sdb/qemu-4.2.0-rc0/block/nbd.c:1873 + +Direct leak of 15 byte(s) in 1 object(s) allocated from: + #0 0x7f629688a3a0 in malloc (/usr/lib64/libasan.so.3+0xc73a0) + #1 0x7f6295e7dfbd in g_malloc (/usr/lib64/libglib-2.0.so.0+0x4ffbd) + #2 0x7f6295e96ace in g_strdup (/usr/lib64/libglib-2.0.so.0+0x68ace) + #3 0x56281da804ac in nbd_process_options /mnt/sdb/qemu-4.2.0-rc0/block/nbd.c:1834 + #4 0x56281da804ac in nbd_open /mnt/sdb/qemu-4.2.0-rc0/block/nbd.c:1873 + +Indirect leak of 24 byte(s) in 1 object(s) allocated from: + #0 0x7f629688a3a0 in malloc (/usr/lib64/libasan.so.3+0xc73a0) + #1 0x7f6295e7dfbd in g_malloc (/usr/lib64/libglib-2.0.so.0+0x4ffbd) + #2 0x7f6295e96ace in g_strdup (/usr/lib64/libglib-2.0.so.0+0x68ace) + #3 0x56281dab41a3 in qobject_input_type_str_keyval /mnt/sdb/qemu-4.2.0-rc0/qapi/qobject-input-visitor.c:536 + #4 0x56281dab2ee9 in visit_type_str /mnt/sdb/qemu-4.2.0-rc0/qapi/qapi-visit-core.c:297 + #5 0x56281dad0fa1 in visit_type_UnixSocketAddress_members qapi/qapi-visit-sockets.c:141 + #6 0x56281dad17b6 in visit_type_SocketAddress_members qapi/qapi-visit-sockets.c:366 + #7 0x56281dad186a in visit_type_SocketAddress qapi/qapi-visit-sockets.c:393 + #8 0x56281da8062f in nbd_config /mnt/sdb/qemu-4.2.0-rc0/block/nbd.c:1716 + #9 0x56281da8062f in nbd_process_options /mnt/sdb/qemu-4.2.0-rc0/block/nbd.c:1829 + #10 0x56281da8062f in nbd_open /mnt/sdb/qemu-4.2.0-rc0/block/nbd.c:1873 + +Fixes: 8f071c9db506e03ab +Reported-by: Euler Robot +Signed-off-by: Pan Nengyuan +Reviewed-by: Vladimir Sementsov-Ogievskiy +Cc: qemu-stable +Cc: Vladimir Sementsov-Ogievskiy +Message-Id: <1575517528-44312-3-git-send-email-pannengyuan@huawei.com> +Reviewed-by: Stefano Garzarella +Signed-off-by: Eric Blake +Signed-off-by: Bruce Rogers +--- + block/nbd.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/block/nbd.c b/block/nbd.c +index 6bb67152864954bb0e7b6f0145de..3d369fc8eb79df642bfd22cd8e88 100644 +--- a/block/nbd.c ++++ b/block/nbd.c +@@ -1900,6 +1900,7 @@ static int nbd_open(BlockDriverState *bs, QDict *options, int flags, + + ret = nbd_client_connect(bs, errp); + if (ret < 0) { ++ nbd_clear_bdrvstate(s); + return ret; + } + /* successfully connected */ diff --git a/block-qcow2-threads-fix-qcow2_decompress.patch b/block-qcow2-threads-fix-qcow2_decompress.patch new file mode 100644 index 0000000..0170f33 --- /dev/null +++ b/block-qcow2-threads-fix-qcow2_decompress.patch @@ -0,0 +1,73 @@ +From: Vladimir Sementsov-Ogievskiy +Date: Mon, 2 Mar 2020 18:09:30 +0300 +Subject: block/qcow2-threads: fix qcow2_decompress +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Git-commit: e7266570f2cf7b3ca2a156c677ee0a59d563458b + +On success path we return what inflate() returns instead of 0. And it +most probably works for Z_STREAM_END as it is positive, but is +definitely broken for Z_BUF_ERROR. + +While being here, switch to errno return code, to be closer to +qcow2_compress API (and usual expectations). + +Revert condition in if to be more positive. Drop dead initialization of +ret. + +Cc: qemu-stable@nongnu.org # v4.0 +Fixes: 341926ab83e2b +Signed-off-by: Vladimir Sementsov-Ogievskiy +Message-Id: <20200302150930.16218-1-vsementsov@virtuozzo.com> +Reviewed-by: Alberto Garcia +Reviewed-by: Ján Tomko +Signed-off-by: Max Reitz +Signed-off-by: Bruce Rogers +--- + block/qcow2-threads.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/block/qcow2-threads.c b/block/qcow2-threads.c +index 8f5a0d1ebe7182151ba99d9aeeff..0d193d16147cf2fc6a8dac23d885 100644 +--- a/block/qcow2-threads.c ++++ b/block/qcow2-threads.c +@@ -128,12 +128,12 @@ static ssize_t qcow2_compress(void *dest, size_t dest_size, + * @src - source buffer, @src_size bytes + * + * Returns: 0 on success +- * -1 on fail ++ * -EIO on fail + */ + static ssize_t qcow2_decompress(void *dest, size_t dest_size, + const void *src, size_t src_size) + { +- int ret = 0; ++ int ret; + z_stream strm; + + memset(&strm, 0, sizeof(strm)); +@@ -144,17 +144,19 @@ static ssize_t qcow2_decompress(void *dest, size_t dest_size, + + ret = inflateInit2(&strm, -12); + if (ret != Z_OK) { +- return -1; ++ return -EIO; + } + + ret = inflate(&strm, Z_FINISH); +- if ((ret != Z_STREAM_END && ret != Z_BUF_ERROR) || strm.avail_out != 0) { ++ if ((ret == Z_STREAM_END || ret == Z_BUF_ERROR) && strm.avail_out == 0) { + /* + * We approve Z_BUF_ERROR because we need @dest buffer to be filled, but + * @src buffer may be processed partly (because in qcow2 we know size of + * compressed data with precision of one sector) + */ +- ret = -1; ++ ret = 0; ++ } else { ++ ret = -EIO; + } + + inflateEnd(&strm); diff --git a/bundles.tar.xz b/bundles.tar.xz index dc29a7c..d5c5db4 100644 --- a/bundles.tar.xz +++ b/bundles.tar.xz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:82d7a2dc700824ec862b71dbb82aba7bf7ec425384f8176dfd224ae9f777a521 -size 83524 +oid sha256:e4135bcee5cdc6889a49bd0f162dc9eb258528d48bc9dedd458430e174aa8530 +size 92732 diff --git a/hmat-acpi-Build-Memory-Proximity-Domain-.patch b/hmat-acpi-Build-Memory-Proximity-Domain-.patch index 3da5bf5..980d951 100644 --- a/hmat-acpi-Build-Memory-Proximity-Domain-.patch +++ b/hmat-acpi-Build-Memory-Proximity-Domain-.patch @@ -2,7 +2,7 @@ From: Liu Jingqi Date: Fri, 13 Dec 2019 09:19:25 +0800 Subject: hmat acpi: Build Memory Proximity Domain Attributes Structure(s) -Git commit: e6f123c3b81241be33f1b763d0ff8b36d1ae9c1e +Git-commit: e6f123c3b81241be33f1b763d0ff8b36d1ae9c1e References: jsc#SLE-8897 HMAT is defined in ACPI 6.3: 5.2.27 Heterogeneous Memory Attribute Table diff --git a/hmat-acpi-Build-Memory-Side-Cache-Inform.patch b/hmat-acpi-Build-Memory-Side-Cache-Inform.patch index 91173ec..c75c89d 100644 --- a/hmat-acpi-Build-Memory-Side-Cache-Inform.patch +++ b/hmat-acpi-Build-Memory-Side-Cache-Inform.patch @@ -2,7 +2,7 @@ From: Liu Jingqi Date: Fri, 13 Dec 2019 09:19:27 +0800 Subject: hmat acpi: Build Memory Side Cache Information Structure(s) -Git commit: a9c2b841af002db6e21e1297c9026b63fc22c875 +Git-commit: a9c2b841af002db6e21e1297c9026b63fc22c875 References: jsc#SLE-8897 This structure describes memory side cache information for memory diff --git a/hmat-acpi-Build-System-Locality-Latency-.patch b/hmat-acpi-Build-System-Locality-Latency-.patch index 0eabef4..5ae76f5 100644 --- a/hmat-acpi-Build-System-Locality-Latency-.patch +++ b/hmat-acpi-Build-System-Locality-Latency-.patch @@ -3,7 +3,7 @@ Date: Fri, 13 Dec 2019 09:19:26 +0800 Subject: hmat acpi: Build System Locality Latency and Bandwidth Information Structure(s) -Git commit: 4586a2cb833f80b19c80ebe364a005ac2fa0974a +Git-commit: 4586a2cb833f80b19c80ebe364a005ac2fa0974a References: jsc#SLE-8897 This structure describes the memory access latency and bandwidth diff --git a/hw-arm-cubieboard-use-ARM-Cortex-A8-as-t.patch b/hw-arm-cubieboard-use-ARM-Cortex-A8-as-t.patch new file mode 100644 index 0000000..df2acb2 --- /dev/null +++ b/hw-arm-cubieboard-use-ARM-Cortex-A8-as-t.patch @@ -0,0 +1,51 @@ +From: Niek Linnenbank +Date: Thu, 5 Mar 2020 16:09:19 +0000 +Subject: hw/arm/cubieboard: use ARM Cortex-A8 as the default CPU in machine + definition +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Git-commit: 2104df2a1fbf44b2564427aa72fd58d66ce290a7 + +The Cubieboard is a singleboard computer with an Allwinner A10 System-on-Chip [1]. +As documented in the Allwinner A10 User Manual V1.5 [2], the SoC has an ARM +Cortex-A8 processor. Currently the Cubieboard machine definition specifies the +ARM Cortex-A9 in its description and as the default CPU. + +This patch corrects the Cubieboard machine definition to use the ARM Cortex-A8. + +The only user-visible effect is that our textual description of the +machine was wrong, because hw/arm/allwinner-a10.c always creates a +Cortex-A8 CPU regardless of the default value in the MachineClass struct. + + [1] http://docs.cubieboard.org/products/start#cubieboard1 + [2] https://linux-sunxi.org/File:Allwinner_A10_User_manual_V1.5.pdf + +Fixes: 8a863c8120994981a099 +Signed-off-by: Niek Linnenbank +Message-id: 20200227220149.6845-2-nieklinnenbank@gmail.com +Reviewed-by: Philippe Mathieu-Daudé +Reviewed-by: Peter Maydell +[note in commit message that the bug didn't have much visible effect] +Signed-off-by: Peter Maydell +Signed-off-by: Bruce Rogers +--- + hw/arm/cubieboard.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/arm/cubieboard.c b/hw/arm/cubieboard.c +index 6dc2f1d6b6f6c87e5241c6bb7718..d8e8919e796d43c9a8a2ca6aa836 100644 +--- a/hw/arm/cubieboard.c ++++ b/hw/arm/cubieboard.c +@@ -78,8 +78,8 @@ static void cubieboard_init(MachineState *machine) + + static void cubieboard_machine_init(MachineClass *mc) + { +- mc->desc = "cubietech cubieboard (Cortex-A9)"; +- mc->default_cpu_type = ARM_CPU_TYPE_NAME("cortex-a9"); ++ mc->desc = "cubietech cubieboard (Cortex-A8)"; ++ mc->default_cpu_type = ARM_CPU_TYPE_NAME("cortex-a8"); + mc->init = cubieboard_init; + mc->block_default_type = IF_IDE; + mc->units_per_default_bus = 1; diff --git a/hw-intc-arm_gicv3_kvm-Stop-wrongly-progr.patch b/hw-intc-arm_gicv3_kvm-Stop-wrongly-progr.patch new file mode 100644 index 0000000..ca8a343 --- /dev/null +++ b/hw-intc-arm_gicv3_kvm-Stop-wrongly-progr.patch @@ -0,0 +1,58 @@ +From: Zenghui Yu +Date: Thu, 30 Jan 2020 16:02:05 +0000 +Subject: hw/intc/arm_gicv3_kvm: Stop wrongly programming GICR_PENDBASER.PTZ + bit + +Git-commit: 618bacabd3c8c3360be795cd8763bacdf5bec101 + +If LPIs are disabled, KVM will just ignore the GICR_PENDBASER.PTZ bit when +restoring GICR_CTLR. Setting PTZ here makes littlt sense in "reduce GIC +initialization time". + +And what's worse, PTZ is generally programmed by guest to indicate to the +Redistributor whether the LPI Pending table is zero when enabling LPIs. +If migration is triggered when the PTZ has just been cleared by guest (and +before enabling LPIs), we will see PTZ==1 on the destination side, which +is not as expected. Let's just drop this hackish userspace behavior. + +Also take this chance to refine the comment a bit. + +Fixes: 367b9f527bec ("hw/intc/arm_gicv3_kvm: Implement get/put functions") +Signed-off-by: Zenghui Yu +Message-id: 20200119133051.642-1-yuzenghui@huawei.com +Reviewed-by: Peter Maydell +Signed-off-by: Peter Maydell +Signed-off-by: Bruce Rogers +--- + hw/intc/arm_gicv3_kvm.c | 11 ++++------- + 1 file changed, 4 insertions(+), 7 deletions(-) + +diff --git a/hw/intc/arm_gicv3_kvm.c b/hw/intc/arm_gicv3_kvm.c +index 9c7f4ab8711cd7ba780727089a1c..49304ca589d1f016cdfb217bf719 100644 +--- a/hw/intc/arm_gicv3_kvm.c ++++ b/hw/intc/arm_gicv3_kvm.c +@@ -336,7 +336,10 @@ static void kvm_arm_gicv3_put(GICv3State *s) + kvm_gicd_access(s, GICD_CTLR, ®, true); + + if (redist_typer & GICR_TYPER_PLPIS) { +- /* Set base addresses before LPIs are enabled by GICR_CTLR write */ ++ /* ++ * Restore base addresses before LPIs are potentially enabled by ++ * GICR_CTLR write ++ */ + for (ncpu = 0; ncpu < s->num_cpu; ncpu++) { + GICv3CPUState *c = &s->cpu[ncpu]; + +@@ -347,12 +350,6 @@ static void kvm_arm_gicv3_put(GICv3State *s) + kvm_gicr_access(s, GICR_PROPBASER + 4, ncpu, ®h, true); + + reg64 = c->gicr_pendbaser; +- if (!(c->gicr_ctlr & GICR_CTLR_ENABLE_LPIS)) { +- /* Setting PTZ is advised if LPIs are disabled, to reduce +- * GIC initialization time. +- */ +- reg64 |= GICR_PENDBASER_PTZ; +- } + regl = (uint32_t)reg64; + kvm_gicr_access(s, GICR_PENDBASER, ncpu, ®l, true); + regh = (uint32_t)(reg64 >> 32); diff --git a/i386-Add-MSR-feature-bit-for-MDS-NO.patch b/i386-Add-MSR-feature-bit-for-MDS-NO.patch index 028fd7d..ec8800e 100644 --- a/i386-Add-MSR-feature-bit-for-MDS-NO.patch +++ b/i386-Add-MSR-feature-bit-for-MDS-NO.patch @@ -2,7 +2,7 @@ From: Cathy Zhang Date: Tue, 22 Oct 2019 15:35:26 +0800 Subject: i386: Add MSR feature bit for MDS-NO -Git commit: 77b168d221191156c47fcd8d1c47329dfdb9439e +Git-commit: 77b168d221191156c47fcd8d1c47329dfdb9439e References: jsc#SLE-7923 Define MSR_ARCH_CAP_MDS_NO in the IA32_ARCH_CAPABILITIES MSR to allow diff --git a/i386-Add-macro-for-stibp.patch b/i386-Add-macro-for-stibp.patch index 2a45dd3..bf85f83 100644 --- a/i386-Add-macro-for-stibp.patch +++ b/i386-Add-macro-for-stibp.patch @@ -2,7 +2,7 @@ From: Cathy Zhang Date: Tue, 22 Oct 2019 15:35:27 +0800 Subject: i386: Add macro for stibp -Git commit: 5af514d0cb314f43bc53f2aefb437f6451d64d0c +Git-commit: 5af514d0cb314f43bc53f2aefb437f6451d64d0c References: jsc#SLE-7923 stibp feature is already added through the following commit. diff --git a/i386-Add-new-CPU-model-Cooperlake.patch b/i386-Add-new-CPU-model-Cooperlake.patch index 23c03db..4e28774 100644 --- a/i386-Add-new-CPU-model-Cooperlake.patch +++ b/i386-Add-new-CPU-model-Cooperlake.patch @@ -2,7 +2,7 @@ From: Cathy Zhang Date: Tue, 22 Oct 2019 15:35:28 +0800 Subject: i386: Add new CPU model Cooperlake -Git commit: 22a866b6166db5caa4abaa6e656c2a431fa60726 +Git-commit: 22a866b6166db5caa4abaa6e656c2a431fa60726 References: jsc#SLE-7923 Cooper Lake is intel's successor to Cascade Lake, the new diff --git a/iotests-Fix-nonportable-use-of-od-endian.patch b/iotests-Fix-nonportable-use-of-od-endian.patch new file mode 100644 index 0000000..de47a61 --- /dev/null +++ b/iotests-Fix-nonportable-use-of-od-endian.patch @@ -0,0 +1,61 @@ +From: Eric Blake +Date: Wed, 26 Feb 2020 06:54:24 -0600 +Subject: iotests: Fix nonportable use of od --endian + +Git-commit: 69135eb30b9c3fca583737a96df015174dc8e6dd + +Tests 261 and 272 fail on RHEL 7 with coreutils 8.22, since od +--endian was not added until coreutils 8.23. Fix this by manually +constructing the final value one byte at a time. + +Fixes: fc8ba423 +Reported-by: Andrey Shinkevich +Signed-off-by: Eric Blake +Reviewed-by: Max Reitz +Message-Id: <20200226125424.481840-1-eblake@redhat.com> +Signed-off-by: Max Reitz +Signed-off-by: Bruce Rogers +--- + tests/qemu-iotests/common.rc | 22 +++++++++++++++++----- + 1 file changed, 17 insertions(+), 5 deletions(-) + +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index 555c45391157d58534f0702094bc..315a9a8a4690d68abc0eb5fa83fd 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -56,18 +56,30 @@ poke_file() + # peek_file_le 'test.img' 512 2 => 65534 + peek_file_le() + { +- # Wrap in echo $() to strip spaces +- echo $(od -j"$2" -N"$3" --endian=little -An -vtu"$3" "$1") ++ local val=0 shift=0 byte ++ ++ # coreutils' od --endian is not portable, so manually assemble bytes. ++ for byte in $(od -j"$2" -N"$3" -An -v -tu1 "$1"); do ++ val=$(( val | (byte << shift) )) ++ shift=$((shift + 8)) ++ done ++ printf %llu $val + } + + # peek_file_be 'test.img' 512 2 => 65279 + peek_file_be() + { +- # Wrap in echo $() to strip spaces +- echo $(od -j"$2" -N"$3" --endian=big -An -vtu"$3" "$1") ++ local val=0 byte ++ ++ # coreutils' od --endian is not portable, so manually assemble bytes. ++ for byte in $(od -j"$2" -N"$3" -An -v -tu1 "$1"); do ++ val=$(( (val << 8) | byte )) ++ done ++ printf %llu $val + } + +-# peek_file_raw 'test.img' 512 2 => '\xff\xfe' ++# peek_file_raw 'test.img' 512 2 => '\xff\xfe'. Do not use if the raw data ++# is likely to contain \0 or trailing \n. + peek_file_raw() + { + dd if="$1" bs=1 skip="$2" count="$3" status=none diff --git a/iotests-add-test-for-backup-top-failure-.patch b/iotests-add-test-for-backup-top-failure-.patch new file mode 100644 index 0000000..fff92b7 --- /dev/null +++ b/iotests-add-test-for-backup-top-failure-.patch @@ -0,0 +1,140 @@ +From: Vladimir Sementsov-Ogievskiy +Date: Tue, 21 Jan 2020 17:28:02 +0300 +Subject: iotests: add test for backup-top failure on permission activation + +Git-commit: a541fcc27c98b96da187c7d4573f3270f3ddd283 + +This test checks that bug is really fixed by previous commit. + +Cc: qemu-stable@nongnu.org # v4.2.0 +Signed-off-by: Vladimir Sementsov-Ogievskiy +Message-id: 20200121142802.21467-3-vsementsov@virtuozzo.com +Signed-off-by: Max Reitz +Signed-off-by: Bruce Rogers +--- + tests/qemu-iotests/283 | 92 ++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/283.out | 8 ++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 101 insertions(+) + +diff --git a/tests/qemu-iotests/283 b/tests/qemu-iotests/283 +new file mode 100644 +index 0000000000000000000000000000000000000000..293e557bd95f0553624fba89cd555614ff4a8c1b +--- /dev/null ++++ b/tests/qemu-iotests/283 +@@ -0,0 +1,92 @@ ++#!/usr/bin/env python ++# ++# Test for backup-top filter permission activation failure ++# ++# Copyright (c) 2019 Virtuozzo International GmbH. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++import iotests ++ ++# The test is unrelated to formats, restrict it to qcow2 to avoid extra runs ++iotests.verify_image_format(supported_fmts=['qcow2']) ++ ++size = 1024 * 1024 ++ ++""" Test description ++ ++When performing a backup, all writes on the source subtree must go through the ++backup-top filter so it can copy all data to the target before it is changed. ++backup-top filter is appended above source node, to achieve this thing, so all ++parents of source node are handled. A configuration with side parents of source ++sub-tree with write permission is unsupported (we'd have append several ++backup-top filter like nodes to handle such parents). The test create an ++example of such configuration and checks that a backup is then not allowed ++(blockdev-backup command should fail). ++ ++The configuration: ++ ++ ┌────────┐ target ┌─────────────┐ ++ │ target │ ◀─────── │ backup_top │ ++ └────────┘ └─────────────┘ ++ │ ++ │ backing ++ ▼ ++ ┌─────────────┐ ++ │ source │ ++ └─────────────┘ ++ │ ++ │ file ++ ▼ ++ ┌─────────────┐ write perm ┌───────┐ ++ │ base │ ◀──────────── │ other │ ++ └─────────────┘ └───────┘ ++ ++On activation (see .active field of backup-top state in block/backup-top.c), ++backup-top is going to unshare write permission on its source child. Write ++unsharing will be propagated to the "source->base" link and will conflict with ++other node write permission. So permission update will fail and backup job will ++not be started. ++ ++Note, that the only thing which prevents backup of running on such ++configuration is default permission propagation scheme. It may be altered by ++different block drivers, so backup will run in invalid configuration. But ++something is better than nothing. Also, before the previous commit (commit ++preceding this test creation), starting backup on such configuration led to ++crash, so current "something" is a lot better, and this test actual goal is ++to check that crash is fixed :) ++""" ++ ++vm = iotests.VM() ++vm.launch() ++ ++vm.qmp_log('blockdev-add', **{'node-name': 'target', 'driver': 'null-co'}) ++ ++vm.qmp_log('blockdev-add', **{ ++ 'node-name': 'source', ++ 'driver': 'blkdebug', ++ 'image': {'node-name': 'base', 'driver': 'null-co', 'size': size} ++}) ++ ++vm.qmp_log('blockdev-add', **{ ++ 'node-name': 'other', ++ 'driver': 'blkdebug', ++ 'image': 'base', ++ 'take-child-perms': ['write'] ++}) ++ ++vm.qmp_log('blockdev-backup', sync='full', device='source', target='target') ++ ++vm.shutdown() +diff --git a/tests/qemu-iotests/283.out b/tests/qemu-iotests/283.out +new file mode 100644 +index 0000000000000000000000000000000000000000..daaf5828c18ee463671ec916989846f94c9f4b31 +--- /dev/null ++++ b/tests/qemu-iotests/283.out +@@ -0,0 +1,8 @@ ++{"execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "target"}} ++{"return": {}} ++{"execute": "blockdev-add", "arguments": {"driver": "blkdebug", "image": {"driver": "null-co", "node-name": "base", "size": 1048576}, "node-name": "source"}} ++{"return": {}} ++{"execute": "blockdev-add", "arguments": {"driver": "blkdebug", "image": "base", "node-name": "other", "take-child-perms": ["write"]}} ++{"return": {}} ++{"execute": "blockdev-backup", "arguments": {"device": "source", "sync": "full", "target": "target"}} ++{"error": {"class": "GenericError", "desc": "Cannot set permissions for backup-top filter: Conflicts with use by other as 'image', which uses 'write' on base"}} +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 6b10a6a762143ec0d079b7fd6df2..1c1b69f0581c9a0043376b440600 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -286,3 +286,4 @@ + 272 rw + 273 backing quick + 277 rw quick ++283 auto quick diff --git a/job-refactor-progress-to-separate-object.patch b/job-refactor-progress-to-separate-object.patch new file mode 100644 index 0000000..f31d44c --- /dev/null +++ b/job-refactor-progress-to-separate-object.patch @@ -0,0 +1,223 @@ +From: Vladimir Sementsov-Ogievskiy +Date: Wed, 11 Mar 2020 13:29:56 +0300 +Subject: job: refactor progress to separate object + +Git-commit: 01fe1ca945345d3dc420d70c69488143dc0451b1 + +We need it in separate to pass to the block-copy object in the next +commit. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Vladimir Sementsov-Ogievskiy +Reviewed-by: Andrey Shinkevich +Reviewed-by: Max Reitz +Message-Id: <20200311103004.7649-2-vsementsov@virtuozzo.com> +Signed-off-by: Max Reitz +Signed-off-by: Bruce Rogers +--- + blockjob.c | 16 +++++----- + include/qemu/job.h | 11 ++----- + include/qemu/progress_meter.h | 58 +++++++++++++++++++++++++++++++++++ + job-qmp.c | 4 +-- + job.c | 6 ++-- + qemu-img.c | 6 ++-- + 6 files changed, 76 insertions(+), 25 deletions(-) + +diff --git a/blockjob.c b/blockjob.c +index c6e20e2fcde53c82146cb45efd87..701bd2588d5ca58826bad00e498d 100644 +--- a/blockjob.c ++++ b/blockjob.c +@@ -298,8 +298,8 @@ BlockJobInfo *block_job_query(BlockJob *job, Error **errp) + info->device = g_strdup(job->job.id); + info->busy = atomic_read(&job->job.busy); + info->paused = job->job.pause_count > 0; +- info->offset = job->job.progress_current; +- info->len = job->job.progress_total; ++ info->offset = job->job.progress.current; ++ info->len = job->job.progress.total; + info->speed = job->speed; + info->io_status = job->iostatus; + info->ready = job_is_ready(&job->job), +@@ -329,8 +329,8 @@ static void block_job_event_cancelled(Notifier *n, void *opaque) + + qapi_event_send_block_job_cancelled(job_type(&job->job), + job->job.id, +- job->job.progress_total, +- job->job.progress_current, ++ job->job.progress.total, ++ job->job.progress.current, + job->speed); + } + +@@ -349,8 +349,8 @@ static void block_job_event_completed(Notifier *n, void *opaque) + + qapi_event_send_block_job_completed(job_type(&job->job), + job->job.id, +- job->job.progress_total, +- job->job.progress_current, ++ job->job.progress.total, ++ job->job.progress.current, + job->speed, + !!msg, + msg); +@@ -378,8 +378,8 @@ static void block_job_event_ready(Notifier *n, void *opaque) + + qapi_event_send_block_job_ready(job_type(&job->job), + job->job.id, +- job->job.progress_total, +- job->job.progress_current, ++ job->job.progress.total, ++ job->job.progress.current, + job->speed); + } + +diff --git a/include/qemu/job.h b/include/qemu/job.h +index bd59cd8944de41304d8f78dce94c..32aabb1c60009825ca4a921b7864 100644 +--- a/include/qemu/job.h ++++ b/include/qemu/job.h +@@ -28,6 +28,7 @@ + + #include "qapi/qapi-types-job.h" + #include "qemu/queue.h" ++#include "qemu/progress_meter.h" + #include "qemu/coroutine.h" + #include "block/aio.h" + +@@ -117,15 +118,7 @@ typedef struct Job { + /** True if this job should automatically dismiss itself */ + bool auto_dismiss; + +- /** +- * Current progress. The unit is arbitrary as long as the ratio between +- * progress_current and progress_total represents the estimated percentage +- * of work already done. +- */ +- int64_t progress_current; +- +- /** Estimated progress_current value at the completion of the job */ +- int64_t progress_total; ++ ProgressMeter progress; + + /** + * Return code from @run and/or @prepare callback(s). +diff --git a/include/qemu/progress_meter.h b/include/qemu/progress_meter.h +new file mode 100644 +index 0000000000000000000000000000000000000000..9a23ff071c4c327c099eb5b4ec3e9d6505b298ef +--- /dev/null ++++ b/include/qemu/progress_meter.h +@@ -0,0 +1,58 @@ ++/* ++ * Helper functionality for some process progress tracking. ++ * ++ * Copyright (c) 2011 IBM Corp. ++ * Copyright (c) 2012, 2018 Red Hat, Inc. ++ * Copyright (c) 2020 Virtuozzo International GmbH ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#ifndef QEMU_PROGRESS_METER_H ++#define QEMU_PROGRESS_METER_H ++ ++typedef struct ProgressMeter { ++ /** ++ * Current progress. The unit is arbitrary as long as the ratio between ++ * current and total represents the estimated percentage ++ * of work already done. ++ */ ++ uint64_t current; ++ ++ /** Estimated current value at the completion of the process */ ++ uint64_t total; ++} ProgressMeter; ++ ++static inline void progress_work_done(ProgressMeter *pm, uint64_t done) ++{ ++ pm->current += done; ++} ++ ++static inline void progress_set_remaining(ProgressMeter *pm, uint64_t remaining) ++{ ++ pm->total = pm->current + remaining; ++} ++ ++static inline void progress_increase_remaining(ProgressMeter *pm, ++ uint64_t delta) ++{ ++ pm->total += delta; ++} ++ ++#endif /* QEMU_PROGRESS_METER_H */ +diff --git a/job-qmp.c b/job-qmp.c +index fbfed25a00067c5035bfde3d7b89..fecc939ebd951aa3bb863400b71c 100644 +--- a/job-qmp.c ++++ b/job-qmp.c +@@ -143,8 +143,8 @@ static JobInfo *job_query_single(Job *job, Error **errp) + .id = g_strdup(job->id), + .type = job_type(job), + .status = job->status, +- .current_progress = job->progress_current, +- .total_progress = job->progress_total, ++ .current_progress = job->progress.current, ++ .total_progress = job->progress.total, + .has_error = !!job->err, + .error = job->err ? \ + g_strdup(error_get_pretty(job->err)) : NULL, +diff --git a/job.c b/job.c +index 04409b40aab3545798414bda1a87..134a07b92e5ef05a52bee7e21a96 100644 +--- a/job.c ++++ b/job.c +@@ -369,17 +369,17 @@ void job_unref(Job *job) + + void job_progress_update(Job *job, uint64_t done) + { +- job->progress_current += done; ++ progress_work_done(&job->progress, done); + } + + void job_progress_set_remaining(Job *job, uint64_t remaining) + { +- job->progress_total = job->progress_current + remaining; ++ progress_set_remaining(&job->progress, remaining); + } + + void job_progress_increase_remaining(Job *job, uint64_t delta) + { +- job->progress_total += delta; ++ progress_increase_remaining(&job->progress, delta); + } + + void job_event_cancelled(Job *job) +diff --git a/qemu-img.c b/qemu-img.c +index 95a24b9762b0b00ef13f68cd4251..9ae07bbc80bd1fa0e6e20a04ec73 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -881,9 +881,9 @@ static void run_block_job(BlockJob *job, Error **errp) + do { + float progress = 0.0f; + aio_poll(aio_context, true); +- if (job->job.progress_total) { +- progress = (float)job->job.progress_current / +- job->job.progress_total * 100.f; ++ if (job->job.progress.total) { ++ progress = (float)job->job.progress.current / ++ job->job.progress.total * 100.f; + } + qemu_progress_print(progress, 0); + } while (!job_is_ready(&job->job) && !job_is_completed(&job->job)); diff --git a/numa-Extend-CLI-to-provide-initiator-inf.patch b/numa-Extend-CLI-to-provide-initiator-inf.patch index d78b8f6..bc54fc2 100644 --- a/numa-Extend-CLI-to-provide-initiator-inf.patch +++ b/numa-Extend-CLI-to-provide-initiator-inf.patch @@ -2,7 +2,7 @@ From: Tao Xu Date: Fri, 13 Dec 2019 09:19:22 +0800 Subject: numa: Extend CLI to provide initiator information for numa nodes -Git commit: 244b3f4485a07c7ce4b7123d6ce9d8c6012756e8 +Git-commit: 244b3f4485a07c7ce4b7123d6ce9d8c6012756e8 References: jsc#SLE-8897 In ACPI 6.3 chapter 5.2.27 Heterogeneous Memory Attribute Table (HMAT), diff --git a/numa-Extend-CLI-to-provide-memory-latenc.patch b/numa-Extend-CLI-to-provide-memory-latenc.patch index 72fd79a..35e0fde 100644 --- a/numa-Extend-CLI-to-provide-memory-latenc.patch +++ b/numa-Extend-CLI-to-provide-memory-latenc.patch @@ -2,7 +2,7 @@ From: Liu Jingqi Date: Fri, 13 Dec 2019 09:19:23 +0800 Subject: numa: Extend CLI to provide memory latency and bandwidth information -Git commit: 9b12dfa03a94d7f7a4b54eb67229a31e58193384 +Git-commit: 9b12dfa03a94d7f7a4b54eb67229a31e58193384 References: jsc#SLE-8897 Add -numa hmat-lb option to provide System Locality Latency and diff --git a/numa-Extend-CLI-to-provide-memory-side-c.patch b/numa-Extend-CLI-to-provide-memory-side-c.patch index ae168c4..0e23173 100644 --- a/numa-Extend-CLI-to-provide-memory-side-c.patch +++ b/numa-Extend-CLI-to-provide-memory-side-c.patch @@ -2,7 +2,7 @@ From: Liu Jingqi Date: Fri, 13 Dec 2019 09:19:24 +0800 Subject: numa: Extend CLI to provide memory side cache information -Git commit: c412a48d4d91e8f8b89aae02de0f44f1f0b729e5 +Git-commit: c412a48d4d91e8f8b89aae02de0f44f1f0b729e5 References: jsc#SLE-8897 Add -numa hmat-cache option to provide Memory Side Cache Information. diff --git a/qemu-rpmlintrc b/qemu-rpmlintrc index 64944a6..32002e8 100644 --- a/qemu-rpmlintrc +++ b/qemu-rpmlintrc @@ -2,4 +2,5 @@ from Config import * addFilter("arch-dependent-file-in-usr-share") +addFilter("obsolete-not-provided") addFilter("summary-not-capitalized") diff --git a/qemu.changes b/qemu.changes index 630681f..a013d82 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,39 @@ +------------------------------------------------------------------- +Thu Mar 12 16:27:03 UTC 2020 - Bruce Rogers + +- Include upstream patches targeted for the next stable release + (bug fixes only) + audio-oss-fix-buffer-pos-calculation.patch + blkdebug-Allow-taking-unsharing-permissi.patch + block-Add-bdrv_qapi_perm_to_blk_perm.patch + block-backup-top-fix-failure-path.patch + block-block-copy-fix-progress-calculatio.patch + block-fix-crash-on-zero-length-unaligned.patch + block-fix-memleaks-in-bdrv_refresh_filen.patch + block-Fix-VM-size-field-width-in-snapsho.patch + block-nbd-extract-the-common-cleanup-cod.patch + block-nbd-fix-memory-leak-in-nbd_open.patch + block-qcow2-threads-fix-qcow2_decompress.patch + hw-arm-cubieboard-use-ARM-Cortex-A8-as-t.patch + hw-intc-arm_gicv3_kvm-Stop-wrongly-progr.patch + iotests-add-test-for-backup-top-failure-.patch + iotests-Fix-nonportable-use-of-od-endian.patch + job-refactor-progress-to-separate-object.patch + target-arm-Correct-definition-of-PMCRDP.patch + target-arm-fix-TCG-leak-for-fcvt-half-do.patch + tpm-ppi-page-align-PPI-RAM.patch + vhost-user-blk-delete-virtioqueues-in-un.patch + virtio-add-ability-to-delete-vq-through-.patch + virtio-crypto-do-delete-ctrl_vq-in-virti.patch + virtio-pmem-do-delete-rq_vq-in-virtio_pm.patch + +------------------------------------------------------------------- +Thu Feb 20 18:55:15 UTC 2020 - Bruce Rogers + +- Add Obsoletes directive for qemu-audio-sdl and qemu-ui-sdl since + for a qemu package upgrade from SLE12-SP5, support for SDL is + dropped + ------------------------------------------------------------------- Wed Feb 19 18:48:47 UTC 2020 - Bruce Rogers diff --git a/qemu.spec b/qemu.spec index fd2c527..e850c65 100644 --- a/qemu.spec +++ b/qemu.spec @@ -149,78 +149,101 @@ Patch00018: hw-arm-smmuv3-Check-stream-IDs-against-a.patch Patch00019: hw-arm-smmuv3-Align-stream-table-base-ad.patch Patch00020: hw-arm-smmuv3-Use-correct-bit-positions-.patch Patch00021: hw-arm-smmuv3-Report-F_STE_FETCH-fault-a.patch -Patch00022: virtio-update-queue-size-on-guest-write.patch -Patch00023: virtio-don-t-enable-notifications-during.patch -Patch00024: numa-Extend-CLI-to-provide-initiator-inf.patch -Patch00025: numa-Extend-CLI-to-provide-memory-latenc.patch -Patch00026: numa-Extend-CLI-to-provide-memory-side-c.patch -Patch00027: hmat-acpi-Build-Memory-Proximity-Domain-.patch -Patch00028: hmat-acpi-Build-System-Locality-Latency-.patch -Patch00029: hmat-acpi-Build-Memory-Side-Cache-Inform.patch -Patch00030: tests-numa-Add-case-for-QMP-build-HMAT.patch -Patch00031: qcow2-bitmaps-fix-qcow2_can_store_new_di.patch -Patch00032: backup-top-Begin-drain-earlier.patch -Patch00033: virtio-mmio-update-queue-size-on-guest-w.patch -Patch00034: virtio-net-delete-also-control-queue-whe.patch -Patch00035: intel_iommu-a-fix-to-vtd_find_as_from_bu.patch -Patch00036: target-i386-Add-new-bit-definitions-of-M.patch -Patch00037: target-i386-Add-missed-features-to-Coope.patch -Patch00038: hw-i386-pc-fix-regression-in-parsing-vga.patch -Patch00039: migration-test-ppc64-fix-FORTH-test-prog.patch -Patch00040: target-arm-Return-correct-IL-bit-in-merg.patch -Patch00041: target-arm-Set-ISSIs16Bit-in-make_issinf.patch -Patch00042: runstate-ignore-finishmigrate-prelaunch-.patch -Patch00043: migration-Rate-limit-inside-host-pages.patch -Patch00044: m68k-Fix-regression-causing-Single-Step-.patch -Patch00045: Revert-vnc-allow-fall-back-to-RAW-encodi.patch -Patch00046: vnc-prioritize-ZRLE-compression-over-ZLI.patch -Patch00047: target-i386-kvm-initialize-feature-MSRs-.patch -Patch00048: s390x-adapter-routes-error-handling.patch -Patch00049: XXX-dont-dump-core-on-sigabort.patch -Patch00050: qemu-binfmt-conf-Modify-default-path.patch -Patch00051: qemu-cvs-gettimeofday.patch -Patch00052: qemu-cvs-ioctl_debug.patch -Patch00053: qemu-cvs-ioctl_nodirection.patch -Patch00054: linux-user-add-binfmt-wrapper-for-argv-0.patch -Patch00055: PPC-KVM-Disable-mmu-notifier-check.patch -Patch00056: linux-user-binfmt-support-host-binaries.patch -Patch00057: linux-user-Fake-proc-cpuinfo.patch -Patch00058: linux-user-use-target_ulong.patch -Patch00059: Make-char-muxer-more-robust-wrt-small-FI.patch -Patch00060: linux-user-lseek-explicitly-cast-non-set.patch -Patch00061: AIO-Reduce-number-of-threads-for-32bit-h.patch -Patch00062: xen_disk-Add-suse-specific-flush-disable.patch -Patch00063: qemu-bridge-helper-reduce-security-profi.patch -Patch00064: qemu-binfmt-conf-use-qemu-ARCH-binfmt.patch -Patch00065: linux-user-properly-test-for-infinite-ti.patch -Patch00066: roms-Makefile-pass-a-packaging-timestamp.patch -Patch00067: Raise-soft-address-space-limit-to-hard-l.patch -Patch00068: increase-x86_64-physical-bits-to-42.patch -Patch00069: vga-Raise-VRAM-to-16-MiB-for-pc-0.15-and.patch -Patch00070: i8254-Fix-migration-from-SLE11-SP2.patch -Patch00071: acpi_piix4-Fix-migration-from-SLE11-SP2.patch -Patch00072: Switch-order-of-libraries-for-mpath-supp.patch -Patch00073: Make-installed-scripts-explicitly-python.patch -Patch00074: hw-smbios-handle-both-file-formats-regar.patch -Patch00075: xen-add-block-resize-support-for-xen-dis.patch -Patch00076: tests-qemu-iotests-Triple-timeout-of-i-o.patch -Patch00077: tests-Fix-block-tests-to-be-compatible-w.patch -Patch00078: xen-ignore-live-parameter-from-xen-save-.patch -Patch00079: Conditionalize-ui-bitmap-installation-be.patch -Patch00080: tests-change-error-message-in-test-162.patch -Patch00081: hw-usb-hcd-xhci-Fix-GCC-9-build-warning.patch -Patch00082: hw-usb-dev-mtp-Fix-GCC-9-build-warning.patch -Patch00083: hw-intc-exynos4210_gic-provide-more-room.patch -Patch00084: configure-only-populate-roms-if-softmmu.patch -Patch00085: pc-bios-s390-ccw-net-avoid-warning-about.patch -Patch00086: roms-change-cross-compiler-naming-to-be-.patch -Patch00087: tests-Disable-some-block-tests-for-now.patch -Patch00088: test-add-mapping-from-arch-of-i686-to-qe.patch -Patch00089: roms-Makefile-enable-cross-compile-for-b.patch -Patch00090: iscsi-Cap-block-count-from-GET-LBA-STATU.patch -Patch00091: block-backup-fix-memory-leak-in-bdrv_bac.patch -Patch00092: target-arm-monitor-query-cpu-model-expan.patch -Patch00093: hw-i386-disable-smbus-migration-for-xenf.patch +Patch00022: block-Add-bdrv_qapi_perm_to_blk_perm.patch +Patch00023: blkdebug-Allow-taking-unsharing-permissi.patch +Patch00024: virtio-add-ability-to-delete-vq-through-.patch +Patch00025: virtio-update-queue-size-on-guest-write.patch +Patch00026: virtio-don-t-enable-notifications-during.patch +Patch00027: numa-Extend-CLI-to-provide-initiator-inf.patch +Patch00028: numa-Extend-CLI-to-provide-memory-latenc.patch +Patch00029: numa-Extend-CLI-to-provide-memory-side-c.patch +Patch00030: hmat-acpi-Build-Memory-Proximity-Domain-.patch +Patch00031: hmat-acpi-Build-System-Locality-Latency-.patch +Patch00032: hmat-acpi-Build-Memory-Side-Cache-Inform.patch +Patch00033: tests-numa-Add-case-for-QMP-build-HMAT.patch +Patch00034: qcow2-bitmaps-fix-qcow2_can_store_new_di.patch +Patch00035: backup-top-Begin-drain-earlier.patch +Patch00036: virtio-mmio-update-queue-size-on-guest-w.patch +Patch00037: virtio-net-delete-also-control-queue-whe.patch +Patch00038: intel_iommu-a-fix-to-vtd_find_as_from_bu.patch +Patch00039: target-i386-Add-new-bit-definitions-of-M.patch +Patch00040: target-i386-Add-missed-features-to-Coope.patch +Patch00041: hw-i386-pc-fix-regression-in-parsing-vga.patch +Patch00042: migration-test-ppc64-fix-FORTH-test-prog.patch +Patch00043: target-arm-Return-correct-IL-bit-in-merg.patch +Patch00044: target-arm-Set-ISSIs16Bit-in-make_issinf.patch +Patch00045: runstate-ignore-finishmigrate-prelaunch-.patch +Patch00046: migration-Rate-limit-inside-host-pages.patch +Patch00047: m68k-Fix-regression-causing-Single-Step-.patch +Patch00048: Revert-vnc-allow-fall-back-to-RAW-encodi.patch +Patch00049: vnc-prioritize-ZRLE-compression-over-ZLI.patch +Patch00050: target-i386-kvm-initialize-feature-MSRs-.patch +Patch00051: s390x-adapter-routes-error-handling.patch +Patch00052: iscsi-Cap-block-count-from-GET-LBA-STATU.patch +Patch00053: block-backup-fix-memory-leak-in-bdrv_bac.patch +Patch00054: tpm-ppi-page-align-PPI-RAM.patch +Patch00055: hw-intc-arm_gicv3_kvm-Stop-wrongly-progr.patch +Patch00056: target-arm-fix-TCG-leak-for-fcvt-half-do.patch +Patch00057: block-fix-memleaks-in-bdrv_refresh_filen.patch +Patch00058: block-backup-top-fix-failure-path.patch +Patch00059: iotests-add-test-for-backup-top-failure-.patch +Patch00060: audio-oss-fix-buffer-pos-calculation.patch +Patch00061: block-fix-crash-on-zero-length-unaligned.patch +Patch00062: block-Fix-VM-size-field-width-in-snapsho.patch +Patch00063: target-arm-Correct-definition-of-PMCRDP.patch +Patch00064: block-nbd-extract-the-common-cleanup-cod.patch +Patch00065: block-nbd-fix-memory-leak-in-nbd_open.patch +Patch00066: virtio-crypto-do-delete-ctrl_vq-in-virti.patch +Patch00067: virtio-pmem-do-delete-rq_vq-in-virtio_pm.patch +Patch00068: vhost-user-blk-delete-virtioqueues-in-un.patch +Patch00069: hw-arm-cubieboard-use-ARM-Cortex-A8-as-t.patch +Patch00070: iotests-Fix-nonportable-use-of-od-endian.patch +Patch00071: block-qcow2-threads-fix-qcow2_decompress.patch +Patch00072: job-refactor-progress-to-separate-object.patch +Patch00073: block-block-copy-fix-progress-calculatio.patch +Patch00074: XXX-dont-dump-core-on-sigabort.patch +Patch00075: qemu-binfmt-conf-Modify-default-path.patch +Patch00076: qemu-cvs-gettimeofday.patch +Patch00077: qemu-cvs-ioctl_debug.patch +Patch00078: qemu-cvs-ioctl_nodirection.patch +Patch00079: linux-user-add-binfmt-wrapper-for-argv-0.patch +Patch00080: PPC-KVM-Disable-mmu-notifier-check.patch +Patch00081: linux-user-binfmt-support-host-binaries.patch +Patch00082: linux-user-Fake-proc-cpuinfo.patch +Patch00083: linux-user-use-target_ulong.patch +Patch00084: Make-char-muxer-more-robust-wrt-small-FI.patch +Patch00085: linux-user-lseek-explicitly-cast-non-set.patch +Patch00086: AIO-Reduce-number-of-threads-for-32bit-h.patch +Patch00087: xen_disk-Add-suse-specific-flush-disable.patch +Patch00088: qemu-bridge-helper-reduce-security-profi.patch +Patch00089: qemu-binfmt-conf-use-qemu-ARCH-binfmt.patch +Patch00090: linux-user-properly-test-for-infinite-ti.patch +Patch00091: roms-Makefile-pass-a-packaging-timestamp.patch +Patch00092: Raise-soft-address-space-limit-to-hard-l.patch +Patch00093: increase-x86_64-physical-bits-to-42.patch +Patch00094: vga-Raise-VRAM-to-16-MiB-for-pc-0.15-and.patch +Patch00095: i8254-Fix-migration-from-SLE11-SP2.patch +Patch00096: acpi_piix4-Fix-migration-from-SLE11-SP2.patch +Patch00097: Switch-order-of-libraries-for-mpath-supp.patch +Patch00098: Make-installed-scripts-explicitly-python.patch +Patch00099: hw-smbios-handle-both-file-formats-regar.patch +Patch00100: xen-add-block-resize-support-for-xen-dis.patch +Patch00101: tests-qemu-iotests-Triple-timeout-of-i-o.patch +Patch00102: tests-Fix-block-tests-to-be-compatible-w.patch +Patch00103: xen-ignore-live-parameter-from-xen-save-.patch +Patch00104: Conditionalize-ui-bitmap-installation-be.patch +Patch00105: tests-change-error-message-in-test-162.patch +Patch00106: hw-usb-hcd-xhci-Fix-GCC-9-build-warning.patch +Patch00107: hw-usb-dev-mtp-Fix-GCC-9-build-warning.patch +Patch00108: hw-intc-exynos4210_gic-provide-more-room.patch +Patch00109: configure-only-populate-roms-if-softmmu.patch +Patch00110: pc-bios-s390-ccw-net-avoid-warning-about.patch +Patch00111: roms-change-cross-compiler-naming-to-be-.patch +Patch00112: tests-Disable-some-block-tests-for-now.patch +Patch00113: test-add-mapping-from-arch-of-i686-to-qe.patch +Patch00114: roms-Makefile-enable-cross-compile-for-b.patch +Patch00115: target-arm-monitor-query-cpu-model-expan.patch +Patch00116: hw-i386-disable-smbus-migration-for-xenf.patch # Patches applied in roms/seabios/: Patch01000: seabios-use-python2-explicitly-as-needed.patch Patch01001: seabios-switch-to-python3-as-needed.patch @@ -452,6 +475,9 @@ Recommends: qemu-ui-curses Recommends: qemu-ui-gtk %if 0%{?is_opensuse} Recommends: qemu-ui-sdl +%else +Obsoletes: qemu-audio-sdl <= %{qemuver} +Obsoletes: qemu-ui-sdl <= %{qemuver} %endif Recommends: qemu-ui-spice-app Recommends: qemu-x86 @@ -1021,6 +1047,29 @@ This package provides a service file for starting and stopping KSM. %patch00091 -p1 %patch00092 -p1 %patch00093 -p1 +%patch00094 -p1 +%patch00095 -p1 +%patch00096 -p1 +%patch00097 -p1 +%patch00098 -p1 +%patch00099 -p1 +%patch00100 -p1 +%patch00101 -p1 +%patch00102 -p1 +%patch00103 -p1 +%patch00104 -p1 +%patch00105 -p1 +%patch00106 -p1 +%patch00107 -p1 +%patch00108 -p1 +%patch00109 -p1 +%patch00110 -p1 +%patch00111 -p1 +%patch00112 -p1 +%patch00113 -p1 +%patch00114 -p1 +%patch00115 -p1 +%patch00116 -p1 %patch01000 -p1 %patch01001 -p1 %patch01002 -p1 diff --git a/qemu.spec.in b/qemu.spec.in index 35d62de..1a52d64 100644 --- a/qemu.spec.in +++ b/qemu.spec.in @@ -337,6 +337,9 @@ Recommends: qemu-ui-curses Recommends: qemu-ui-gtk %if 0%{?is_opensuse} Recommends: qemu-ui-sdl +%else +Obsoletes: qemu-audio-sdl <= %{qemuver} +Obsoletes: qemu-ui-sdl <= %{qemuver} %endif Recommends: qemu-ui-spice-app Recommends: qemu-x86 diff --git a/target-arm-Correct-definition-of-PMCRDP.patch b/target-arm-Correct-definition-of-PMCRDP.patch new file mode 100644 index 0000000..cbabf06 --- /dev/null +++ b/target-arm-Correct-definition-of-PMCRDP.patch @@ -0,0 +1,39 @@ +From: Peter Maydell +Date: Fri, 14 Feb 2020 17:51:11 +0000 +Subject: target/arm: Correct definition of PMCRDP +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Git-commit: a1ed04dd79aabb9dbeeb5fa7d49f1a3de0357553 + +The PMCR_EL0.DP bit is bit 5, which is 0x20, not 0x10. 0x10 is 'X'. +Correct our #define of PMCRDP and add the missing PMCRX. + +We do have the correct behaviour for handling the DP bit being +set, so this fixes a guest-visible bug. + +Fixes: 033614c47de +Reviewed-by: Philippe Mathieu-Daudé +Reviewed-by: Richard Henderson +Signed-off-by: Peter Maydell +Message-id: 20200214175116.9164-17-peter.maydell@linaro.org +Signed-off-by: Bruce Rogers +--- + target/arm/helper.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/target/arm/helper.c b/target/arm/helper.c +index 0bf8f53d4b8d80ba1edb69c2c759..886ffaba82d36da9acc36f1596f5 100644 +--- a/target/arm/helper.c ++++ b/target/arm/helper.c +@@ -1016,7 +1016,8 @@ static const ARMCPRegInfo v6_cp_reginfo[] = { + #define PMCRN_MASK 0xf800 + #define PMCRN_SHIFT 11 + #define PMCRLC 0x40 +-#define PMCRDP 0x10 ++#define PMCRDP 0x20 ++#define PMCRX 0x10 + #define PMCRD 0x8 + #define PMCRC 0x4 + #define PMCRP 0x2 diff --git a/target-arm-fix-TCG-leak-for-fcvt-half-do.patch b/target-arm-fix-TCG-leak-for-fcvt-half-do.patch new file mode 100644 index 0000000..a88edc0 --- /dev/null +++ b/target-arm-fix-TCG-leak-for-fcvt-half-do.patch @@ -0,0 +1,46 @@ +From: =?UTF-8?q?Alex=20Benn=C3=A9e?= +Date: Fri, 31 Jan 2020 15:34:39 +0000 +Subject: target/arm: fix TCG leak for fcvt half->double +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Git-commit: aeab8e5eb220cc5ff84b0b68b9afccc611bf0fcd + +When support for the AHP flag was added we inexplicably only freed the +new temps in one of the two legs. Move those tcg_temp_free to the same +level as the allocation to fix that leak. + +Fixes: 486624fcd3eac +Signed-off-by: Alex Bennée +Message-id: 20200131153439.26027-1-alex.bennee@linaro.org +Reviewed-by: Philippe Mathieu-Daudé +Reviewed-by: Peter Maydell +Signed-off-by: Peter Maydell +Signed-off-by: Bruce Rogers +--- + target/arm/translate-a64.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c +index d4bebbe62958ed2264e8db880bac..045da9266717203d85258110ed10 100644 +--- a/target/arm/translate-a64.c ++++ b/target/arm/translate-a64.c +@@ -5778,8 +5778,6 @@ static void handle_fp_fcvt(DisasContext *s, int opcode, + TCGv_i32 tcg_rd = tcg_temp_new_i32(); + gen_helper_vfp_fcvt_f16_to_f32(tcg_rd, tcg_rn, tcg_fpst, tcg_ahp); + write_fp_sreg(s, rd, tcg_rd); +- tcg_temp_free_ptr(tcg_fpst); +- tcg_temp_free_i32(tcg_ahp); + tcg_temp_free_i32(tcg_rd); + } else { + /* Half to double */ +@@ -5789,6 +5787,8 @@ static void handle_fp_fcvt(DisasContext *s, int opcode, + tcg_temp_free_i64(tcg_rd); + } + tcg_temp_free_i32(tcg_rn); ++ tcg_temp_free_ptr(tcg_fpst); ++ tcg_temp_free_i32(tcg_ahp); + break; + } + default: diff --git a/tests-Disable-some-block-tests-for-now.patch b/tests-Disable-some-block-tests-for-now.patch index ac954be..5d2eaa7 100644 --- a/tests-Disable-some-block-tests-for-now.patch +++ b/tests-Disable-some-block-tests-for-now.patch @@ -22,7 +22,7 @@ Signed-off-by: Bruce Rogers 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group -index 6b10a6a762143ec0d079b7fd6df2..150800ce1cbdde74b76e9f43e1c7 100644 +index 1c1b69f0581c9a0043376b440600..d293735679e23235092c614e2206 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -86,7 +86,7 @@ diff --git a/tests-numa-Add-case-for-QMP-build-HMAT.patch b/tests-numa-Add-case-for-QMP-build-HMAT.patch index 2ec1dc8..02209f2 100644 --- a/tests-numa-Add-case-for-QMP-build-HMAT.patch +++ b/tests-numa-Add-case-for-QMP-build-HMAT.patch @@ -2,7 +2,7 @@ From: Tao Xu Date: Fri, 13 Dec 2019 09:19:28 +0800 Subject: tests/numa: Add case for QMP build HMAT -Git commit: d00817c944ed15fbe4a61d44fe7f9fe166c7df88 +Git-commit: d00817c944ed15fbe4a61d44fe7f9fe166c7df88 References: jsc#SLE-8897 Check configuring HMAT usecase diff --git a/tpm-ppi-page-align-PPI-RAM.patch b/tpm-ppi-page-align-PPI-RAM.patch new file mode 100644 index 0000000..e4e1144 --- /dev/null +++ b/tpm-ppi-page-align-PPI-RAM.patch @@ -0,0 +1,41 @@ +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Fri, 3 Jan 2020 11:39:59 +0400 +Subject: tpm-ppi: page-align PPI RAM +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Git-commit: 71e415c8a75c130875f14d6b2136825789feb297 + +post-copy migration fails on destination with error such as: +2019-12-26T10:22:44.714644Z qemu-kvm: ram_block_discard_range: +Unaligned start address: 0x559d2afae9a0 + +Use qemu_memalign() to constrain the PPI RAM memory alignment. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Marc-André Lureau +Reviewed-by: Philippe Mathieu-Daudé +Reviewed-by: Dr. David Alan Gilbert +Reviewed-by: Stefan Berger +Signed-off-by: Stefan Berger +Message-id: 20200103074000.1006389-3-marcandre.lureau@redhat.com +Signed-off-by: Bruce Rogers +--- + hw/tpm/tpm_ppi.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hw/tpm/tpm_ppi.c b/hw/tpm/tpm_ppi.c +index ff314592b497b36853494c9600d7..6d9c1a3e40ee6f76d0b582d13f5b 100644 +--- a/hw/tpm/tpm_ppi.c ++++ b/hw/tpm/tpm_ppi.c +@@ -43,7 +43,8 @@ void tpm_ppi_reset(TPMPPI *tpmppi) + void tpm_ppi_init(TPMPPI *tpmppi, struct MemoryRegion *m, + hwaddr addr, Object *obj) + { +- tpmppi->buf = g_malloc0(HOST_PAGE_ALIGN(TPM_PPI_ADDR_SIZE)); ++ tpmppi->buf = qemu_memalign(qemu_real_host_page_size, ++ HOST_PAGE_ALIGN(TPM_PPI_ADDR_SIZE)); + memory_region_init_ram_device_ptr(&tpmppi->ram, obj, "tpm-ppi", + TPM_PPI_ADDR_SIZE, tpmppi->buf); + vmstate_register_ram(&tpmppi->ram, DEVICE(obj)); diff --git a/vhost-user-blk-delete-virtioqueues-in-un.patch b/vhost-user-blk-delete-virtioqueues-in-un.patch new file mode 100644 index 0000000..7971051 --- /dev/null +++ b/vhost-user-blk-delete-virtioqueues-in-un.patch @@ -0,0 +1,66 @@ +From: Pan Nengyuan +Date: Mon, 24 Feb 2020 12:13:35 +0800 +Subject: vhost-user-blk: delete virtioqueues in unrealize to fix memleaks + +Git-commit: 13e5468127111bf44c5dc314d1dd2ec5a65dfec4 + +virtio queues forgot to delete in unrealize, and aslo error path in +realize, this patch fix these memleaks, the leak stack is as follow: + +Direct leak of 114688 byte(s) in 16 object(s) allocated from: + #0 0x7f24024fdbf0 in calloc (/lib64/libasan.so.3+0xcabf0) + #1 0x7f2401642015 in g_malloc0 (/lib64/libglib-2.0.so.0+0x50015) + #2 0x55ad175a6447 in virtio_add_queue /mnt/sdb/qemu/hw/virtio/virtio.c:2327 + #3 0x55ad17570cf9 in vhost_user_blk_device_realize /mnt/sdb/qemu/hw/block/vhost-user-blk.c:419 + #4 0x55ad175a3707 in virtio_device_realize /mnt/sdb/qemu/hw/virtio/virtio.c:3509 + #5 0x55ad176ad0d1 in device_set_realized /mnt/sdb/qemu/hw/core/qdev.c:876 + #6 0x55ad1781ff9d in property_set_bool /mnt/sdb/qemu/qom/object.c:2080 + #7 0x55ad178245ae in object_property_set_qobject /mnt/sdb/qemu/qom/qom-qobject.c:26 + #8 0x55ad17821eb4 in object_property_set_bool /mnt/sdb/qemu/qom/object.c:1338 + #9 0x55ad177aeed7 in virtio_pci_realize /mnt/sdb/qemu/hw/virtio/virtio-pci.c:1801 + +Reported-by: Euler Robot +Signed-off-by: Pan Nengyuan +Reviewed-by: Stefan Hajnoczi +Message-Id: <20200224041336.30790-2-pannengyuan@huawei.com> +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Bruce Rogers +--- + hw/block/vhost-user-blk.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c +index 63da9bb619ccb30d63fa548d3078..2e59cbaa0da1e05842a62d6daf14 100644 +--- a/hw/block/vhost-user-blk.c ++++ b/hw/block/vhost-user-blk.c +@@ -455,6 +455,9 @@ reconnect: + virtio_err: + g_free(s->vqs); + g_free(s->inflight); ++ for (i = 0; i < s->num_queues; i++) { ++ virtio_del_queue(vdev, i); ++ } + virtio_cleanup(vdev); + vhost_user_cleanup(&s->vhost_user); + } +@@ -463,6 +466,7 @@ static void vhost_user_blk_device_unrealize(DeviceState *dev, Error **errp) + { + VirtIODevice *vdev = VIRTIO_DEVICE(dev); + VHostUserBlk *s = VHOST_USER_BLK(dev); ++ int i; + + virtio_set_status(vdev, 0); + qemu_chr_fe_set_handlers(&s->chardev, NULL, NULL, NULL, +@@ -471,6 +475,10 @@ static void vhost_user_blk_device_unrealize(DeviceState *dev, Error **errp) + vhost_dev_free_inflight(s->inflight); + g_free(s->vqs); + g_free(s->inflight); ++ ++ for (i = 0; i < s->num_queues; i++) { ++ virtio_del_queue(vdev, i); ++ } + virtio_cleanup(vdev); + vhost_user_cleanup(&s->vhost_user); + } diff --git a/virtio-add-ability-to-delete-vq-through-.patch b/virtio-add-ability-to-delete-vq-through-.patch new file mode 100644 index 0000000..827b32a --- /dev/null +++ b/virtio-add-ability-to-delete-vq-through-.patch @@ -0,0 +1,62 @@ +From: "Michael S. Tsirkin" +Date: Mon, 9 Dec 2019 11:46:13 -0500 +Subject: virtio: add ability to delete vq through a pointer + +Git-commit: 722f8c51d8af223751dfb1d02de40043e8ba067e + +Devices tend to maintain vq pointers, allow deleting them trough a vq pointer. + +Signed-off-by: Michael S. Tsirkin +Reviewed-by: David Hildenbrand +Reviewed-by: David Hildenbrand +Signed-off-by: Bruce Rogers +--- + hw/virtio/virtio.c | 15 ++++++++++----- + include/hw/virtio/virtio.h | 2 ++ + 2 files changed, 12 insertions(+), 5 deletions(-) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index 04716b5f6ce1ccfb3f21a5b81b77..31dd140990f784884b541b293105 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -2330,17 +2330,22 @@ VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size, + return &vdev->vq[i]; + } + ++void virtio_delete_queue(VirtQueue *vq) ++{ ++ vq->vring.num = 0; ++ vq->vring.num_default = 0; ++ vq->handle_output = NULL; ++ vq->handle_aio_output = NULL; ++ g_free(vq->used_elems); ++} ++ + void virtio_del_queue(VirtIODevice *vdev, int n) + { + if (n < 0 || n >= VIRTIO_QUEUE_MAX) { + abort(); + } + +- vdev->vq[n].vring.num = 0; +- vdev->vq[n].vring.num_default = 0; +- vdev->vq[n].handle_output = NULL; +- vdev->vq[n].handle_aio_output = NULL; +- g_free(vdev->vq[n].used_elems); ++ virtio_delete_queue(&vdev->vq[n]); + } + + static void virtio_set_isr(VirtIODevice *vdev, int value) +diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h +index c32a815303730700e60c2ddd06c4..e18756d50d21259dda81bf1d1b1d 100644 +--- a/include/hw/virtio/virtio.h ++++ b/include/hw/virtio/virtio.h +@@ -183,6 +183,8 @@ VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size, + + void virtio_del_queue(VirtIODevice *vdev, int n); + ++void virtio_delete_queue(VirtQueue *vq); ++ + void virtqueue_push(VirtQueue *vq, const VirtQueueElement *elem, + unsigned int len); + void virtqueue_flush(VirtQueue *vq, unsigned int count); diff --git a/virtio-crypto-do-delete-ctrl_vq-in-virti.patch b/virtio-crypto-do-delete-ctrl_vq-in-virti.patch new file mode 100644 index 0000000..587b5da --- /dev/null +++ b/virtio-crypto-do-delete-ctrl_vq-in-virti.patch @@ -0,0 +1,52 @@ +From: Pan Nengyuan +Date: Tue, 25 Feb 2020 15:55:54 +0800 +Subject: virtio-crypto: do delete ctrl_vq in virtio_crypto_device_unrealize + +Git-commit: d56e1c8256cb37e68f9b5d98c6cc4e6ca463f1fd + +Similar to other virtio-deivces, ctrl_vq forgot to delete in virtio_crypto_device_unrealize, this patch fix it. +This device has aleardy maintained vq pointers. Thus, we use the new virtio_delete_queue function directly to do the cleanup. + +The leak stack: +Direct leak of 10752 byte(s) in 3 object(s) allocated from: + #0 0x7f4c024b1970 in __interceptor_calloc (/lib64/libasan.so.5+0xef970) + #1 0x7f4c018be49d in g_malloc0 (/lib64/libglib-2.0.so.0+0x5249d) + #2 0x55a2f8017279 in virtio_add_queue /mnt/sdb/qemu-new/qemu_test/qemu/hw/virtio/virtio.c:2333 + #3 0x55a2f8057035 in virtio_crypto_device_realize /mnt/sdb/qemu-new/qemu_test/qemu/hw/virtio/virtio-crypto.c:814 + #4 0x55a2f8005d80 in virtio_device_realize /mnt/sdb/qemu-new/qemu_test/qemu/hw/virtio/virtio.c:3531 + #5 0x55a2f8497d1b in device_set_realized /mnt/sdb/qemu-new/qemu_test/qemu/hw/core/qdev.c:891 + #6 0x55a2f8b48595 in property_set_bool /mnt/sdb/qemu-new/qemu_test/qemu/qom/object.c:2238 + #7 0x55a2f8b54fad in object_property_set_qobject /mnt/sdb/qemu-new/qemu_test/qemu/qom/qom-qobject.c:26 + #8 0x55a2f8b4de2c in object_property_set_bool /mnt/sdb/qemu-new/qemu_test/qemu/qom/object.c:1390 + #9 0x55a2f80609c9 in virtio_crypto_pci_realize /mnt/sdb/qemu-new/qemu_test/qemu/hw/virtio/virtio-crypto-pci.c:58 + +Reported-by: Euler Robot +Signed-off-by: Pan Nengyuan +Cc: "Gonglei (Arei)" +Message-Id: <20200225075554.10835-5-pannengyuan@huawei.com> +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Bruce Rogers +--- + hw/virtio/virtio-crypto.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c +index 6d42f95a890b7a58f8ba0bc75eae..b2e01fc015133decbe2dc3ee9073 100644 +--- a/hw/virtio/virtio-crypto.c ++++ b/hw/virtio/virtio-crypto.c +@@ -831,12 +831,13 @@ static void virtio_crypto_device_unrealize(DeviceState *dev, Error **errp) + + max_queues = vcrypto->multiqueue ? vcrypto->max_queues : 1; + for (i = 0; i < max_queues; i++) { +- virtio_del_queue(vdev, i); ++ virtio_delete_queue(vcrypto->vqs[i].dataq); + q = &vcrypto->vqs[i]; + qemu_bh_delete(q->dataq_bh); + } + + g_free(vcrypto->vqs); ++ virtio_delete_queue(vcrypto->ctrl_vq); + + virtio_cleanup(vdev); + cryptodev_backend_set_used(vcrypto->cryptodev, false); diff --git a/virtio-don-t-enable-notifications-during.patch b/virtio-don-t-enable-notifications-during.patch index e314963..58c48b0 100644 --- a/virtio-don-t-enable-notifications-during.patch +++ b/virtio-don-t-enable-notifications-during.patch @@ -97,7 +97,7 @@ index e8b2b64d09fb185404fa83882ba9..f080545f48e6a3e411caf641b935 100644 QTAILQ_FOREACH_SAFE(req, &reqs, next, next) { diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c -index 04716b5f6ce1ccfb3f21a5b81b77..3211135bc8beb0856e100bcbda58 100644 +index 31dd140990f784884b541b293105..d63a3691bf00e9d7951b2c85ef5f 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -432,6 +432,11 @@ static void virtio_queue_packed_set_notification(VirtQueue *vq, int enable) @@ -112,7 +112,7 @@ index 04716b5f6ce1ccfb3f21a5b81b77..3211135bc8beb0856e100bcbda58 100644 void virtio_queue_set_notification(VirtQueue *vq, int enable) { vq->notification = enable; -@@ -3384,17 +3389,12 @@ static bool virtio_queue_host_notifier_aio_poll(void *opaque) +@@ -3389,17 +3394,12 @@ static bool virtio_queue_host_notifier_aio_poll(void *opaque) { EventNotifier *n = opaque; VirtQueue *vq = container_of(n, VirtQueue, host_notifier); @@ -132,10 +132,10 @@ index 04716b5f6ce1ccfb3f21a5b81b77..3211135bc8beb0856e100bcbda58 100644 static void virtio_queue_host_notifier_aio_poll_end(EventNotifier *n) diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h -index c32a815303730700e60c2ddd06c4..6a2044246d63ba8a3f932086f9e8 100644 +index e18756d50d21259dda81bf1d1b1d..91167f609aca8f50948b1b28fdf2 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h -@@ -224,6 +224,7 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id); +@@ -226,6 +226,7 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id); void virtio_notify_config(VirtIODevice *vdev); diff --git a/virtio-pmem-do-delete-rq_vq-in-virtio_pm.patch b/virtio-pmem-do-delete-rq_vq-in-virtio_pm.patch new file mode 100644 index 0000000..cc668fa --- /dev/null +++ b/virtio-pmem-do-delete-rq_vq-in-virtio_pm.patch @@ -0,0 +1,37 @@ +From: Pan Nengyuan +Date: Tue, 25 Feb 2020 15:55:53 +0800 +Subject: virtio-pmem: do delete rq_vq in virtio_pmem_unrealize +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Git-commit: 9861546e1dae05c5152de7d3bd14e341ecadc972 + +Similar to other virtio-devices, rq_vq forgot to delete in +virtio_pmem_unrealize, this patch fix it. This device has already +maintained a vq pointer, thus we use the new virtio_delete_queue +function directly to do the cleanup. + +Reported-by: Euler Robot +Signed-off-by: Pan Nengyuan +Message-Id: <20200225075554.10835-4-pannengyuan@huawei.com> +Reviewed-by: Philippe Mathieu-Daudé +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Bruce Rogers +--- + hw/virtio/virtio-pmem.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/virtio/virtio-pmem.c b/hw/virtio/virtio-pmem.c +index c0c9395e559cf8b01878549b9f45..cad44fe0fc6231316e86c2317965 100644 +--- a/hw/virtio/virtio-pmem.c ++++ b/hw/virtio/virtio-pmem.c +@@ -130,6 +130,7 @@ static void virtio_pmem_unrealize(DeviceState *dev, Error **errp) + VirtIOPMEM *pmem = VIRTIO_PMEM(dev); + + host_memory_backend_set_mapped(pmem->memdev, false); ++ virtio_delete_queue(pmem->rq_vq); + virtio_cleanup(vdev); + } +