[pve-devel] [PATCH v2 qemu 1/4] update submodule and patches to 7.1.0
Fiona Ebner
f.ebner at proxmox.com
Fri Oct 14 14:07:13 CEST 2022
Notable changes:
* The only big change is the switch to using a custom QIOChannel for
savevm-async, because the previously used QEMUFileOps was dropped.
Changes to the current implementation:
* Switch to vector based methods as required for an IO channel. For
short reads the passed-in IO vector is stuffed with zeroes at the
end, just to be sure.
* For reading: The documentation in include/io/channel.h states that
at least one byte should be read, so also error out when whe are
at the very end instead of returning 0.
* For reading: Fix off-by-one error when request goes beyond end.
The wrong code piece was:
if ((pos + size) > maxlen) {
size = maxlen - pos - 1;
}
Previously, the last byte would not be read. It's actually
possible to get a snapshot .raw file that has content all the way
up the final 512 byte (= BDRV_SECTOR_SIZE) boundary without any
trailing zero bytes (I wrote a script to do it).
Luckily, it didn't cause a real issue, because qemu_loadvm_state()
is not interested in the final (i.e. QEMU_VM_VMDESCRIPTION)
section. The buffer for reading it is simply freed up afterwards
and the function will assume that it read the whole section, even
if that's not the case.
* For writing: Make use of the generated blk_pwritev() wrapper
instead of manually wrapping the coroutine to simplify and save a
few lines.
* Adapt to changed interfaces for blk_{pread,pwrite}:
* a9262f551e ("block: Change blk_{pread,pwrite}() param order")
* 3b35d4542c ("block: Add a 'flags' param to blk_pread()")
* bf5b16fa40 ("block: Make blk_{pread,pwrite}() return 0 on success")
Those changes especially affected the qemu-img dd patches, because
the context also changed, but also some of our block drivers used
the functions.
* Drop qemu-common.h include: it got renamed after essentially
everything was moved to other headers. The only remaining user I
could find for things dropped from the header between 7.0 and 7.1
was qemu_get_vm_name() in the iscsi-initiatorname patch, but it
already includes the header to which the function was moved.
Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
Changes from v1 (thanks to Wolfgang for the suggestions!):
* Drop the memset for short reads. The caller is responsible for not
using more bytes then we reported.
* Use the generated blk_pwritev() wrapper instead of manually doing
so. Makes the code easier to read and avoids quite a bit of
boilerplate.
...d-support-for-sync-bitmap-mode-never.patch | 22 +-
...-support-for-conditional-and-always-.patch | 2 +-
...check-for-bitmap-mode-without-bitmap.patch | 2 +-
...-to-bdrv_dirty_bitmap_merge_internal.patch | 2 +-
.../0006-mirror-move-some-checks-to-qmp.patch | 4 +-
...race-with-clients-disconnecting-earl.patch | 8 +-
...k-gluster-correctly-set-max_pdiscard.patch | 47 ---
...003-block-vmdk-Fix-reopening-bs-file.patch | 129 --------
...balanced-plugged-counter-in-laio_io_.patch | 44 ---
...erflow-in-snprintf-string-formatting.patch | 100 -------
...Fix-disabling-MPX-on-cpu-host-with-M.patch | 48 ---
...ontext-use-QEMU_DEFINE_STATIC_CO_TLS.patch | 121 --------
...outine-use-QEMU_DEFINE_STATIC_CO_TLS.patch | 123 --------
...ame-qemu_coroutine_inc-dec_pool_size.patch | 90 ------
...outine-Revert-to-constant-batch-size.patch | 121 --------
...-not-consult-nonexistent-host-leaves.patch | 117 --------
...ctrl-and-event-handler-functions-in-.patch | 108 -------
...t-waste-CPU-polling-the-event-virtqu.patch | 91 ------
...k-descriptor-chain-in-private-at-SVQ.patch | 102 -------
...Fix-device-s-used-descriptor-dequeue.patch | 62 ----
...ex-calculus-at-vhost_vdpa_get_vring_.patch | 39 ---
...ex-calculus-at-vhost_vdpa_svqs_start.patch | 35 ---
...virtio-Replace-g_memdup-by-g_memdup2.patch | 74 -----
...Fix-element-in-vhost_svq_add-failure.patch | 47 ---
...20-io_uring-fix-short-read-slow-path.patch | 49 ---
...criptor-status-in-a-separate-operati.patch | 82 -----
...k-file-change-locking-default-to-off.patch | 6 +-
...he-CPU-model-to-kvm64-32-instead-of-.patch | 4 +-
...erfs-no-default-logfile-if-daemonize.patch | 2 +-
...lock-rbd-disable-rbd_cache_writethro.patch | 2 +-
.../0007-PVE-Up-qmp-add-get_link_status.patch | 12 +-
...PVE-Up-glusterfs-allow-partial-reads.patch | 2 +-
...return-success-on-info-without-snaps.patch | 4 +-
...dd-add-osize-and-read-from-to-stdin-.patch | 70 +++--
...E-Up-qemu-img-dd-add-isize-parameter.patch | 23 +-
...PVE-Up-qemu-img-dd-add-n-skip_create.patch | 12 +-
...virtio-balloon-improve-query-balloon.patch | 13 +-
.../0014-PVE-qapi-modify-query-machines.patch | 6 +-
.../0015-PVE-qapi-modify-spice-query.patch | 4 +-
...nnel-implementation-for-savevm-async.patch | 280 ++++++++++++++++++
...sync-for-background-state-snapshots.patch} | 148 +++------
...dd-optional-buffer-size-to-QEMUFile.patch} | 132 +++++----
...dd-the-zeroinit-block-driver-filter.patch} | 2 +-
...Add-dummy-id-command-line-parameter.patch} | 12 +-
...-target-i386-disable-LINT0-after-re.patch} | 0
...e-posix-make-locking-optiono-on-cre.patch} | 18 +-
...-PVE-monitor-disable-oob-capability.patch} | 0
...ed-balloon-qemu-4-0-config-size-fal.patch} | 4 +-
...-Allow-version-code-in-machine-type.patch} | 16 +-
...-bcs-bitmap-initialization-to-job-c.patch} | 10 +-
...E-Backup-add-vma-backup-format-code.patch} | 26 +-
...Backup-add-backup-dump-block-driver.patch} | 15 +-
...kup-proxmox-backup-patches-for-qemu.patch} | 36 +--
...store-new-command-to-restore-from-p.patch} | 15 +-
...rty-bitmap-tracking-for-incremental.patch} | 14 +-
...patch => 0032-PVE-various-PBS-fixes.patch} | 6 +-
...-driver-to-map-backup-archives-into.patch} | 63 ++--
...d-query_proxmox_support-QMP-command.patch} | 4 +-
...-add-query-pbs-bitmap-info-QMP-call.patch} | 14 +-
...t-stderr-to-journal-when-daemonized.patch} | 14 +-
...-sequential-job-transaction-support.patch} | 0
...transaction-to-synchronize-job-stat.patch} | 0
...block-on-finishing-and-cleanup-crea.patch} | 4 +-
...grate-dirty-bitmap-state-via-savevm.patch} | 16 +-
...irty-bitmap-migrate-other-bitmaps-e.patch} | 0
...ll-back-to-open-iscsi-initiatorname.patch} | 2 +-
...outine-QMP-for-backup-cancel_backup.patch} | 12 +-
... => 0044-PBS-add-master-key-support.patch} | 10 +-
...t-path-reads-without-allocation-if-.patch} | 0
...VE-block-stream-increase-chunk-size.patch} | 0
...ccept-NULL-qiov-in-bdrv_pad_request.patch} | 4 +-
...> 0048-block-add-alloc-track-driver.patch} | 2 +-
...alid-QAPI-names-for-backwards-compa.patch} | 4 +-
...register-yank-before-migration_inco.patch} | 6 +-
...add-l-option-for-loading-a-snapshot.patch} | 16 +-
...h => 0052-vma-allow-partial-restore.patch} | 32 +-
...patch => 0053-pbs-namespace-support.patch} | 20 +-
...rbd-workaround-for-ceph-issue-53784.patch} | 8 +-
...fix-handling-of-holes-in-.bdrv_co_b.patch} | 4 +-
...-rbd-implement-bdrv_co_block_status.patch} | 6 +-
...-jobs-correctly-cancel-in-error-sce.patch} | 0
...sure-jobs-in-di_list-are-referenced.patch} | 0
...-segfault-issues-upon-backup-cancel.patch} | 0
...upport-64KiB-unaligned-input-images.patch} | 6 +-
...-triggering-assertion-in-error-case.patch} | 0
...k-alloc-track-avoid-premature-break.patch} | 0
...passing-max-workers-performance-set.patch} | 8 +-
debian/patches/series | 115 +++----
qemu | 2 +-
89 files changed, 768 insertions(+), 2167 deletions(-)
delete mode 100644 debian/patches/extra/0002-block-gluster-correctly-set-max_pdiscard.patch
delete mode 100644 debian/patches/extra/0003-block-vmdk-Fix-reopening-bs-file.patch
delete mode 100644 debian/patches/extra/0004-linux-aio-fix-unbalanced-plugged-counter-in-laio_io_.patch
delete mode 100644 debian/patches/extra/0005-pci-fix-overflow-in-snprintf-string-formatting.patch
delete mode 100644 debian/patches/extra/0006-target-i386-kvm-Fix-disabling-MPX-on-cpu-host-with-M.patch
delete mode 100644 debian/patches/extra/0007-coroutine-ucontext-use-QEMU_DEFINE_STATIC_CO_TLS.patch
delete mode 100644 debian/patches/extra/0008-coroutine-use-QEMU_DEFINE_STATIC_CO_TLS.patch
delete mode 100644 debian/patches/extra/0009-coroutine-Rename-qemu_coroutine_inc-dec_pool_size.patch
delete mode 100644 debian/patches/extra/0010-coroutine-Revert-to-constant-batch-size.patch
delete mode 100644 debian/patches/extra/0011-target-i386-do-not-consult-nonexistent-host-leaves.patch
delete mode 100644 debian/patches/extra/0012-virtio-scsi-fix-ctrl-and-event-handler-functions-in-.patch
delete mode 100644 debian/patches/extra/0013-virtio-scsi-don-t-waste-CPU-polling-the-event-virtqu.patch
delete mode 100644 debian/patches/extra/0014-vhost-Track-descriptor-chain-in-private-at-SVQ.patch
delete mode 100644 debian/patches/extra/0015-vhost-Fix-device-s-used-descriptor-dequeue.patch
delete mode 100644 debian/patches/extra/0016-vdpa-Fix-bad-index-calculus-at-vhost_vdpa_get_vring_.patch
delete mode 100644 debian/patches/extra/0017-vdpa-Fix-index-calculus-at-vhost_vdpa_svqs_start.patch
delete mode 100644 debian/patches/extra/0018-hw-virtio-Replace-g_memdup-by-g_memdup2.patch
delete mode 100644 debian/patches/extra/0019-vhost-Fix-element-in-vhost_svq_add-failure.patch
delete mode 100644 debian/patches/extra/0020-io_uring-fix-short-read-slow-path.patch
delete mode 100644 debian/patches/extra/0021-e1000-set-RX-descriptor-status-in-a-separate-operati.patch
create mode 100644 debian/patches/pve/0016-PVE-add-IOChannel-implementation-for-savevm-async.patch
rename debian/patches/pve/{0016-PVE-add-savevm-async-for-background-state-snapshots.patch => 0017-PVE-add-savevm-async-for-background-state-snapshots.patch} (88%)
rename debian/patches/pve/{0017-PVE-add-optional-buffer-size-to-QEMUFile.patch => 0018-PVE-add-optional-buffer-size-to-QEMUFile.patch} (52%)
rename debian/patches/pve/{0018-PVE-block-add-the-zeroinit-block-driver-filter.patch => 0019-PVE-block-add-the-zeroinit-block-driver-filter.patch} (99%)
rename debian/patches/pve/{0019-PVE-Add-dummy-id-command-line-parameter.patch => 0020-PVE-Add-dummy-id-command-line-parameter.patch} (86%)
rename debian/patches/pve/{0020-PVE-Config-Revert-target-i386-disable-LINT0-after-re.patch => 0021-PVE-Config-Revert-target-i386-disable-LINT0-after-re.patch} (100%)
rename debian/patches/pve/{0021-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch => 0022-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch} (90%)
rename debian/patches/pve/{0022-PVE-monitor-disable-oob-capability.patch => 0023-PVE-monitor-disable-oob-capability.patch} (100%)
rename debian/patches/pve/{0023-PVE-Compat-4.0-used-balloon-qemu-4-0-config-size-fal.patch => 0024-PVE-Compat-4.0-used-balloon-qemu-4-0-config-size-fal.patch} (95%)
rename debian/patches/pve/{0024-PVE-Allow-version-code-in-machine-type.patch => 0025-PVE-Allow-version-code-in-machine-type.patch} (93%)
rename debian/patches/pve/{0025-block-backup-move-bcs-bitmap-initialization-to-job-c.patch => 0026-block-backup-move-bcs-bitmap-initialization-to-job-c.patch} (88%)
rename debian/patches/pve/{0026-PVE-Backup-add-vma-backup-format-code.patch => 0027-PVE-Backup-add-vma-backup-format-code.patch} (99%)
rename debian/patches/pve/{0027-PVE-Backup-add-backup-dump-block-driver.patch => 0028-PVE-Backup-add-backup-dump-block-driver.patch} (96%)
rename debian/patches/pve/{0028-PVE-Backup-proxmox-backup-patches-for-qemu.patch => 0029-PVE-Backup-proxmox-backup-patches-for-qemu.patch} (98%)
rename debian/patches/pve/{0029-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch => 0030-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch} (95%)
rename debian/patches/pve/{0030-PVE-Backup-Add-dirty-bitmap-tracking-for-incremental.patch => 0031-PVE-Backup-Add-dirty-bitmap-tracking-for-incremental.patch} (98%)
rename debian/patches/pve/{0031-PVE-various-PBS-fixes.patch => 0032-PVE-various-PBS-fixes.patch} (99%)
rename debian/patches/pve/{0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch => 0033-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch} (91%)
rename debian/patches/pve/{0033-PVE-add-query_proxmox_support-QMP-command.patch => 0034-PVE-add-query_proxmox_support-QMP-command.patch} (97%)
rename debian/patches/pve/{0034-PVE-add-query-pbs-bitmap-info-QMP-call.patch => 0035-PVE-add-query-pbs-bitmap-info-QMP-call.patch} (98%)
rename debian/patches/pve/{0035-PVE-redirect-stderr-to-journal-when-daemonized.patch => 0036-PVE-redirect-stderr-to-journal-when-daemonized.patch} (86%)
rename debian/patches/pve/{0036-PVE-Add-sequential-job-transaction-support.patch => 0037-PVE-Add-sequential-job-transaction-support.patch} (100%)
rename debian/patches/pve/{0037-PVE-Backup-Use-a-transaction-to-synchronize-job-stat.patch => 0038-PVE-Backup-Use-a-transaction-to-synchronize-job-stat.patch} (100%)
rename debian/patches/pve/{0038-PVE-Backup-Don-t-block-on-finishing-and-cleanup-crea.patch => 0039-PVE-Backup-Don-t-block-on-finishing-and-cleanup-crea.patch} (99%)
rename debian/patches/pve/{0039-PVE-Migrate-dirty-bitmap-state-via-savevm.patch => 0040-PVE-Migrate-dirty-bitmap-state-via-savevm.patch} (96%)
rename debian/patches/pve/{0040-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch => 0041-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch} (100%)
rename debian/patches/pve/{0041-PVE-fall-back-to-open-iscsi-initiatorname.patch => 0042-PVE-fall-back-to-open-iscsi-initiatorname.patch} (98%)
rename debian/patches/pve/{0042-PVE-Use-coroutine-QMP-for-backup-cancel_backup.patch => 0043-PVE-Use-coroutine-QMP-for-backup-cancel_backup.patch} (99%)
rename debian/patches/pve/{0043-PBS-add-master-key-support.patch => 0044-PBS-add-master-key-support.patch} (97%)
rename debian/patches/pve/{0044-PVE-block-pbs-fast-path-reads-without-allocation-if-.patch => 0045-PVE-block-pbs-fast-path-reads-without-allocation-if-.patch} (100%)
rename debian/patches/pve/{0045-PVE-block-stream-increase-chunk-size.patch => 0046-PVE-block-stream-increase-chunk-size.patch} (100%)
rename debian/patches/pve/{0046-block-io-accept-NULL-qiov-in-bdrv_pad_request.patch => 0047-block-io-accept-NULL-qiov-in-bdrv_pad_request.patch} (90%)
rename debian/patches/pve/{0047-block-add-alloc-track-driver.patch => 0048-block-add-alloc-track-driver.patch} (99%)
rename debian/patches/pve/{0048-PVE-whitelist-invalid-QAPI-names-for-backwards-compa.patch => 0049-PVE-whitelist-invalid-QAPI-names-for-backwards-compa.patch} (95%)
rename debian/patches/pve/{0049-PVE-savevm-async-register-yank-before-migration_inco.patch => 0050-PVE-savevm-async-register-yank-before-migration_inco.patch} (90%)
rename debian/patches/pve/{0050-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch => 0051-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch} (91%)
rename debian/patches/pve/{0051-vma-allow-partial-restore.patch => 0052-vma-allow-partial-restore.patch} (94%)
rename debian/patches/pve/{0052-pbs-namespace-support.patch => 0053-pbs-namespace-support.patch} (96%)
rename debian/patches/pve/{0053-Revert-block-rbd-workaround-for-ceph-issue-53784.patch => 0054-Revert-block-rbd-workaround-for-ceph-issue-53784.patch} (92%)
rename debian/patches/pve/{0054-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch => 0055-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch} (90%)
rename debian/patches/pve/{0055-Revert-block-rbd-implement-bdrv_co_block_status.patch => 0056-Revert-block-rbd-implement-bdrv_co_block_status.patch} (97%)
rename debian/patches/pve/{0056-PVE-Backup-create-jobs-correctly-cancel-in-error-sce.patch => 0057-PVE-Backup-create-jobs-correctly-cancel-in-error-sce.patch} (100%)
rename debian/patches/pve/{0057-PVE-Backup-ensure-jobs-in-di_list-are-referenced.patch => 0058-PVE-Backup-ensure-jobs-in-di_list-are-referenced.patch} (100%)
rename debian/patches/pve/{0058-PVE-Backup-avoid-segfault-issues-upon-backup-cancel.patch => 0059-PVE-Backup-avoid-segfault-issues-upon-backup-cancel.patch} (100%)
rename debian/patches/pve/{0059-vma-create-support-64KiB-unaligned-input-images.patch => 0060-vma-create-support-64KiB-unaligned-input-images.patch} (92%)
rename debian/patches/pve/{0060-vma-create-avoid-triggering-assertion-in-error-case.patch => 0061-vma-create-avoid-triggering-assertion-in-error-case.patch} (100%)
rename debian/patches/pve/{0061-block-alloc-track-avoid-premature-break.patch => 0062-block-alloc-track-avoid-premature-break.patch} (100%)
rename debian/patches/pve/{0062-PVE-Backup-allow-passing-max-workers-performance-set.patch => 0063-PVE-Backup-allow-passing-max-workers-performance-set.patch} (98%)
diff --git a/debian/patches/bitmap-mirror/0001-drive-mirror-add-support-for-sync-bitmap-mode-never.patch b/debian/patches/bitmap-mirror/0001-drive-mirror-add-support-for-sync-bitmap-mode-never.patch
index 5301cf0..8cdca68 100644
--- a/debian/patches/bitmap-mirror/0001-drive-mirror-add-support-for-sync-bitmap-mode-never.patch
+++ b/debian/patches/bitmap-mirror/0001-drive-mirror-add-support-for-sync-bitmap-mode-never.patch
@@ -36,7 +36,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
5 files changed, 145 insertions(+), 29 deletions(-)
diff --git a/block/mirror.c b/block/mirror.c
-index d8ecb9efa2..d95a7d7940 100644
+index 3c4ab1159d..f2eca983f1 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -51,7 +51,7 @@ typedef struct MirrorBlockJob {
@@ -252,7 +252,7 @@ index d8ecb9efa2..d95a7d7940 100644
errp);
if (!job) {
diff --git a/blockdev.c b/blockdev.c
-index e46e831212..fa601838a3 100644
+index 9230888e34..9a1a3118ed 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2951,6 +2951,10 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
@@ -344,10 +344,10 @@ index e46e831212..fa601838a3 100644
has_granularity, granularity,
has_buf_size, buf_size,
diff --git a/include/block/block_int-global-state.h b/include/block/block_int-global-state.h
-index 0f21b0570b..e7f901d048 100644
+index b49f4eb35b..9d744db618 100644
--- a/include/block/block_int-global-state.h
+++ b/include/block/block_int-global-state.h
-@@ -148,7 +148,9 @@ void mirror_start(const char *job_id, BlockDriverState *bs,
+@@ -149,7 +149,9 @@ void mirror_start(const char *job_id, BlockDriverState *bs,
BlockDriverState *target, const char *replaces,
int creation_flags, int64_t speed,
uint32_t granularity, int64_t buf_size,
@@ -359,10 +359,10 @@ index 0f21b0570b..e7f901d048 100644
BlockdevOnError on_source_error,
BlockdevOnError on_target_error,
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index beeb91952a..fb25c2b245 100644
+index 2173e7734a..e1857e7094 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -1993,10 +1993,19 @@
+@@ -2000,10 +2000,19 @@
# (all the disk, only the sectors allocated in the topmost image, or
# only new I/O).
#
@@ -383,7 +383,7 @@ index beeb91952a..fb25c2b245 100644
#
# @buf-size: maximum amount of data in flight from source to
# target (since 1.4).
-@@ -2034,7 +2043,9 @@
+@@ -2043,7 +2052,9 @@
{ 'struct': 'DriveMirror',
'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
'*format': 'str', '*node-name': 'str', '*replaces': 'str',
@@ -394,7 +394,7 @@ index beeb91952a..fb25c2b245 100644
'*speed': 'int', '*granularity': 'uint32',
'*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
'*on-target-error': 'BlockdevOnError',
-@@ -2306,10 +2317,19 @@
+@@ -2322,10 +2333,19 @@
# (all the disk, only the sectors allocated in the topmost image, or
# only new I/O).
#
@@ -415,7 +415,7 @@ index beeb91952a..fb25c2b245 100644
#
# @buf-size: maximum amount of data in flight from source to
# target
-@@ -2358,7 +2378,8 @@
+@@ -2375,7 +2395,8 @@
{ 'command': 'blockdev-mirror',
'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
'*replaces': 'str',
@@ -426,10 +426,10 @@ index beeb91952a..fb25c2b245 100644
'*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
'*on-target-error': 'BlockdevOnError',
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
-index 94718c9319..7977ac14f4 100644
+index 8b55eccc89..f4650be8e5 100644
--- a/tests/unit/test-block-iothread.c
+++ b/tests/unit/test-block-iothread.c
-@@ -626,8 +626,8 @@ static void test_propagate_mirror(void)
+@@ -753,8 +753,8 @@ static void test_propagate_mirror(void)
/* Start a mirror job */
mirror_start("job0", src, target, NULL, JOB_DEFAULT, 0, 0, 0,
diff --git a/debian/patches/bitmap-mirror/0002-drive-mirror-add-support-for-conditional-and-always-.patch b/debian/patches/bitmap-mirror/0002-drive-mirror-add-support-for-conditional-and-always-.patch
index d30b46d..8c01d80 100644
--- a/debian/patches/bitmap-mirror/0002-drive-mirror-add-support-for-conditional-and-always-.patch
+++ b/debian/patches/bitmap-mirror/0002-drive-mirror-add-support-for-conditional-and-always-.patch
@@ -24,7 +24,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/block/mirror.c b/block/mirror.c
-index d95a7d7940..2c79ee41af 100644
+index f2eca983f1..b6475d50ad 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -673,8 +673,6 @@ static int mirror_exit_common(Job *job)
diff --git a/debian/patches/bitmap-mirror/0003-mirror-add-check-for-bitmap-mode-without-bitmap.patch b/debian/patches/bitmap-mirror/0003-mirror-add-check-for-bitmap-mode-without-bitmap.patch
index ffd3efe..2fac2ca 100644
--- a/debian/patches/bitmap-mirror/0003-mirror-add-check-for-bitmap-mode-without-bitmap.patch
+++ b/debian/patches/bitmap-mirror/0003-mirror-add-check-for-bitmap-mode-without-bitmap.patch
@@ -16,7 +16,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 3 insertions(+)
diff --git a/blockdev.c b/blockdev.c
-index fa601838a3..93fd0a61a4 100644
+index 9a1a3118ed..a57b0af2e7 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -3050,6 +3050,9 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
diff --git a/debian/patches/bitmap-mirror/0004-mirror-switch-to-bdrv_dirty_bitmap_merge_internal.patch b/debian/patches/bitmap-mirror/0004-mirror-switch-to-bdrv_dirty_bitmap_merge_internal.patch
index c86ceca..4d5f62a 100644
--- a/debian/patches/bitmap-mirror/0004-mirror-switch-to-bdrv_dirty_bitmap_merge_internal.patch
+++ b/debian/patches/bitmap-mirror/0004-mirror-switch-to-bdrv_dirty_bitmap_merge_internal.patch
@@ -16,7 +16,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/block/mirror.c b/block/mirror.c
-index 2c79ee41af..e04a3ea6f4 100644
+index b6475d50ad..8b3342f9ec 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -779,8 +779,8 @@ static int mirror_exit_common(Job *job)
diff --git a/debian/patches/bitmap-mirror/0006-mirror-move-some-checks-to-qmp.patch b/debian/patches/bitmap-mirror/0006-mirror-move-some-checks-to-qmp.patch
index 4d4747b..336efbe 100644
--- a/debian/patches/bitmap-mirror/0006-mirror-move-some-checks-to-qmp.patch
+++ b/debian/patches/bitmap-mirror/0006-mirror-move-some-checks-to-qmp.patch
@@ -19,7 +19,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
3 files changed, 70 insertions(+), 59 deletions(-)
diff --git a/block/mirror.c b/block/mirror.c
-index e04a3ea6f4..4feec2a002 100644
+index 8b3342f9ec..1d4ff0efad 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -1634,31 +1634,13 @@ static BlockJob *mirror_start_job(
@@ -60,7 +60,7 @@ index e04a3ea6f4..4feec2a002 100644
if (bitmap_mode != BITMAP_SYNC_MODE_NEVER) {
diff --git a/blockdev.c b/blockdev.c
-index 93fd0a61a4..1af5a1fcb2 100644
+index a57b0af2e7..ce62a9b439 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -3029,7 +3029,36 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
diff --git a/debian/patches/extra/0001-monitor-qmp-fix-race-with-clients-disconnecting-earl.patch b/debian/patches/extra/0001-monitor-qmp-fix-race-with-clients-disconnecting-earl.patch
index 9d8322c..cd72a8e 100644
--- a/debian/patches/extra/0001-monitor-qmp-fix-race-with-clients-disconnecting-earl.patch
+++ b/debian/patches/extra/0001-monitor-qmp-fix-race-with-clients-disconnecting-earl.patch
@@ -48,7 +48,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
6 files changed, 59 insertions(+), 5 deletions(-)
diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h
-index cc4cc6c6ad..82f649d9ab 100644
+index a4b40e8391..d64ae8f34e 100644
--- a/include/monitor/monitor.h
+++ b/include/monitor/monitor.h
@@ -16,6 +16,7 @@ extern QemuOptsList qemu_mon_opts;
@@ -78,7 +78,7 @@ index caa2e90ef2..e1596f79ab 100644
/**
diff --git a/monitor/monitor.c b/monitor/monitor.c
-index 21c7a68758..ad9813567a 100644
+index 86949024f6..c306cadcf4 100644
--- a/monitor/monitor.c
+++ b/monitor/monitor.c
@@ -135,6 +135,21 @@ bool monitor_cur_is_qmp(void)
@@ -189,10 +189,10 @@ index 0990873ec8..e605003771 100644
aio_bh_schedule_oneshot(qemu_get_aio_context(), do_qmp_dispatch_bh,
&data);
diff --git a/stubs/monitor-core.c b/stubs/monitor-core.c
-index d058a2a00d..3290b58120 100644
+index afa477aae6..d3ff124bf3 100644
--- a/stubs/monitor-core.c
+++ b/stubs/monitor-core.c
-@@ -13,6 +13,11 @@ Monitor *monitor_set_cur(Coroutine *co, Monitor *mon)
+@@ -12,6 +12,11 @@ Monitor *monitor_set_cur(Coroutine *co, Monitor *mon)
return NULL;
}
diff --git a/debian/patches/extra/0002-block-gluster-correctly-set-max_pdiscard.patch b/debian/patches/extra/0002-block-gluster-correctly-set-max_pdiscard.patch
deleted file mode 100644
index c0b8ee0..0000000
--- a/debian/patches/extra/0002-block-gluster-correctly-set-max_pdiscard.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Fabian Ebner <f.ebner at proxmox.com>
-Date: Fri, 20 May 2022 09:59:22 +0200
-Subject: [PATCH] block/gluster: correctly set max_pdiscard
-
-On 64-bit platforms, assigning SIZE_MAX to the int64_t max_pdiscard
-results in a negative value, and the following assertion would trigger
-down the line (it's not the same max_pdiscard, but computed from the
-other one):
-qemu-system-x86_64: ../block/io.c:3166: bdrv_co_pdiscard: Assertion
-`max_pdiscard >= bs->bl.request_alignment' failed.
-
-On 32-bit platforms, it's fine to keep using SIZE_MAX.
-
-The assertion in qemu_gluster_co_pdiscard() is checking that the value
-of 'bytes' can safely be passed to glfs_discard_async(), which takes a
-size_t for the argument in question, so it is kept as is. And since
-max_pdiscard is still <= SIZE_MAX, relying on max_pdiscard is still
-fine.
-
-Fixes: 0c8022876f ("block: use int64_t instead of int in driver discard handlers")
-Cc: qemu-stable at nongnu.org
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
-Message-Id: <20220520075922.43972-1-f.ebner at proxmox.com>
-Reviewed-by: Eric Blake <eblake at redhat.com>
-Reviewed-by: Stefano Garzarella <sgarzare at redhat.com>
-Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov at yandex-team.ru>
-Signed-off-by: Kevin Wolf <kwolf at redhat.com>
-(cherry-picked from commit 9b38fc56c054c7de65fa3bf7cdd82b32654f6b7d)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- block/gluster.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/block/gluster.c b/block/gluster.c
-index 80b75cb96c..1079b6186b 100644
---- a/block/gluster.c
-+++ b/block/gluster.c
-@@ -901,7 +901,7 @@ out:
- static void qemu_gluster_refresh_limits(BlockDriverState *bs, Error **errp)
- {
- bs->bl.max_transfer = GLUSTER_MAX_TRANSFER;
-- bs->bl.max_pdiscard = SIZE_MAX;
-+ bs->bl.max_pdiscard = MIN(SIZE_MAX, INT64_MAX);
- }
-
- static int qemu_gluster_reopen_prepare(BDRVReopenState *state,
diff --git a/debian/patches/extra/0003-block-vmdk-Fix-reopening-bs-file.patch b/debian/patches/extra/0003-block-vmdk-Fix-reopening-bs-file.patch
deleted file mode 100644
index 65c43de..0000000
--- a/debian/patches/extra/0003-block-vmdk-Fix-reopening-bs-file.patch
+++ /dev/null
@@ -1,129 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Hanna Reitz <hreitz at redhat.com>
-Date: Mon, 14 Mar 2022 17:27:18 +0100
-Subject: [PATCH] block/vmdk: Fix reopening bs->file
-
-VMDK disk data is stored in extents, which may or may not be separate
-from bs->file. VmdkExtent.file points to where they are stored. Each
-that is stored in bs->file will simply reuse the exact pointer value of
-bs->file.
-
-(That is why vmdk_free_extents() will unref VmdkExtent.file (e->file)
-only if e->file != bs->file.)
-
-Reopen operations can change bs->file (they will replace the whole
-BdrvChild object, not just the BDS stored in that BdrvChild), and then
-we will need to change all .file pointers of all such VmdkExtents to
-point to the new BdrvChild.
-
-In vmdk_reopen_prepare(), we have to check which VmdkExtents are
-affected, and in vmdk_reopen_commit(), we can modify them. We have to
-split this because:
-- The new BdrvChild is created only after prepare, so we can change
- VmdkExtent.file only in commit
-- In commit, there no longer is any (valid) reference to the old
- BdrvChild object, so there would be nothing to compare VmdkExtent.file
- against to see whether it was equal to bs->file before reopening
- (There is BDRVReopenState.old_file_bs, but the old bs->file
- BdrvChild's .bs pointer will be NULL-ed when the new BdrvChild is
- created, and so we cannot compare VmdkExtent.file->bs against
- BDRVReopenState.old_file_bs)
-
-Signed-off-by: Hanna Reitz <hreitz at redhat.com>
-Message-Id: <20220314162719.65384-2-hreitz at redhat.com>
-Signed-off-by: Kevin Wolf <kwolf at redhat.com>
-(cherry-picked from commit 6d17e2879854d7d0e623c06a9286085e97bf3545)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- block/vmdk.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 55 insertions(+), 1 deletion(-)
-
-diff --git a/block/vmdk.c b/block/vmdk.c
-index 37c0946066..38e5ab3806 100644
---- a/block/vmdk.c
-+++ b/block/vmdk.c
-@@ -178,6 +178,10 @@ typedef struct BDRVVmdkState {
- char *create_type;
- } BDRVVmdkState;
-
-+typedef struct BDRVVmdkReopenState {
-+ bool *extents_using_bs_file;
-+} BDRVVmdkReopenState;
-+
- typedef struct VmdkMetaData {
- unsigned int l1_index;
- unsigned int l2_index;
-@@ -400,15 +404,63 @@ static int vmdk_is_cid_valid(BlockDriverState *bs)
- return 1;
- }
-
--/* We have nothing to do for VMDK reopen, stubs just return success */
- static int vmdk_reopen_prepare(BDRVReopenState *state,
- BlockReopenQueue *queue, Error **errp)
- {
-+ BDRVVmdkState *s;
-+ BDRVVmdkReopenState *rs;
-+ int i;
-+
- assert(state != NULL);
- assert(state->bs != NULL);
-+ assert(state->opaque == NULL);
-+
-+ s = state->bs->opaque;
-+
-+ rs = g_new0(BDRVVmdkReopenState, 1);
-+ state->opaque = rs;
-+
-+ /*
-+ * Check whether there are any extents stored in bs->file; if bs->file
-+ * changes, we will need to update their .file pointers to follow suit
-+ */
-+ rs->extents_using_bs_file = g_new(bool, s->num_extents);
-+ for (i = 0; i < s->num_extents; i++) {
-+ rs->extents_using_bs_file[i] = s->extents[i].file == state->bs->file;
-+ }
-+
- return 0;
- }
-
-+static void vmdk_reopen_clean(BDRVReopenState *state)
-+{
-+ BDRVVmdkReopenState *rs = state->opaque;
-+
-+ g_free(rs->extents_using_bs_file);
-+ g_free(rs);
-+ state->opaque = NULL;
-+}
-+
-+static void vmdk_reopen_commit(BDRVReopenState *state)
-+{
-+ BDRVVmdkState *s = state->bs->opaque;
-+ BDRVVmdkReopenState *rs = state->opaque;
-+ int i;
-+
-+ for (i = 0; i < s->num_extents; i++) {
-+ if (rs->extents_using_bs_file[i]) {
-+ s->extents[i].file = state->bs->file;
-+ }
-+ }
-+
-+ vmdk_reopen_clean(state);
-+}
-+
-+static void vmdk_reopen_abort(BDRVReopenState *state)
-+{
-+ vmdk_reopen_clean(state);
-+}
-+
- static int vmdk_parent_open(BlockDriverState *bs)
- {
- char *p_name;
-@@ -3072,6 +3124,8 @@ static BlockDriver bdrv_vmdk = {
- .bdrv_open = vmdk_open,
- .bdrv_co_check = vmdk_co_check,
- .bdrv_reopen_prepare = vmdk_reopen_prepare,
-+ .bdrv_reopen_commit = vmdk_reopen_commit,
-+ .bdrv_reopen_abort = vmdk_reopen_abort,
- .bdrv_child_perm = bdrv_default_perms,
- .bdrv_co_preadv = vmdk_co_preadv,
- .bdrv_co_pwritev = vmdk_co_pwritev,
diff --git a/debian/patches/extra/0004-linux-aio-fix-unbalanced-plugged-counter-in-laio_io_.patch b/debian/patches/extra/0004-linux-aio-fix-unbalanced-plugged-counter-in-laio_io_.patch
deleted file mode 100644
index cf130ac..0000000
--- a/debian/patches/extra/0004-linux-aio-fix-unbalanced-plugged-counter-in-laio_io_.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Stefan Hajnoczi <stefanha at redhat.com>
-Date: Thu, 9 Jun 2022 17:47:11 +0100
-Subject: [PATCH] linux-aio: fix unbalanced plugged counter in laio_io_unplug()
-
-Every laio_io_plug() call has a matching laio_io_unplug() call. There is
-a plugged counter that tracks the number of levels of plugging and
-allows for nesting.
-
-The plugged counter must reflect the balance between laio_io_plug() and
-laio_io_unplug() calls accurately. Otherwise I/O stalls occur since
-io_submit(2) calls are skipped while plugged.
-
-Reported-by: Nikolay Tenev <nt at storpool.com>
-Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
-Reviewed-by: Stefano Garzarella <sgarzare at redhat.com>
-Message-id: 20220609164712.1539045-2-stefanha at redhat.com
-Cc: Stefano Garzarella <sgarzare at redhat.com>
-Fixes: 68d7946648 ("linux-aio: add `dev_max_batch` parameter to laio_io_unplug()")
-[Stefano Garzarella suggested adding a Fixes tag.
---Stefan]
-Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
-(cherry-picked from commit f387cac5af030a58ac5a0dacf64cab5e5a4fe5c7)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- block/linux-aio.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/block/linux-aio.c b/block/linux-aio.c
-index 4c423fcccf..6078da7e42 100644
---- a/block/linux-aio.c
-+++ b/block/linux-aio.c
-@@ -363,8 +363,10 @@ void laio_io_unplug(BlockDriverState *bs, LinuxAioState *s,
- uint64_t dev_max_batch)
- {
- assert(s->io_q.plugged);
-+ s->io_q.plugged--;
-+
- if (s->io_q.in_queue >= laio_max_batch(s, dev_max_batch) ||
-- (--s->io_q.plugged == 0 &&
-+ (!s->io_q.plugged &&
- !s->io_q.blocked && !QSIMPLEQ_EMPTY(&s->io_q.pending))) {
- ioq_submit(s);
- }
diff --git a/debian/patches/extra/0005-pci-fix-overflow-in-snprintf-string-formatting.patch b/debian/patches/extra/0005-pci-fix-overflow-in-snprintf-string-formatting.patch
deleted file mode 100644
index 3f2dfa9..0000000
--- a/debian/patches/extra/0005-pci-fix-overflow-in-snprintf-string-formatting.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Claudio Fontana <cfontana at suse.de>
-Date: Tue, 31 May 2022 13:47:07 +0200
-Subject: [PATCH] pci: fix overflow in snprintf string formatting
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-the code in pcibus_get_fw_dev_path contained the potential for a
-stack buffer overflow of 1 byte, potentially writing to the stack an
-extra NUL byte.
-
-This overflow could happen if the PCI slot is >= 0x10000000,
-and the PCI function is >= 0x10000000, due to the size parameter
-of snprintf being incorrectly calculated in the call:
-
- if (PCI_FUNC(d->devfn))
- snprintf(path + off, sizeof(path) + off, ",%x", PCI_FUNC(d->devfn));
-
-since the off obtained from a previous call to snprintf is added
-instead of subtracted from the total available size of the buffer.
-
-Without the accurate size guard from snprintf, we end up writing in the
-worst case:
-
-name (32) + "@" (1) + SLOT (8) + "," (1) + FUNC (8) + term NUL (1) = 51 bytes
-
-In order to provide something more robust, replace all of the code in
-pcibus_get_fw_dev_path with a single call to g_strdup_printf,
-so there is no need to rely on manual calculations.
-
-Found by compiling QEMU with FORTIFY_SOURCE=3 as the error:
-
-*** buffer overflow detected ***: terminated
-
-Thread 1 "qemu-system-x86" received signal SIGABRT, Aborted.
-[Switching to Thread 0x7ffff642c380 (LWP 121307)]
-0x00007ffff71ff55c in __pthread_kill_implementation () from /lib64/libc.so.6
-(gdb) bt
- #0 0x00007ffff71ff55c in __pthread_kill_implementation () at /lib64/libc.so.6
- #1 0x00007ffff71ac6f6 in raise () at /lib64/libc.so.6
- #2 0x00007ffff7195814 in abort () at /lib64/libc.so.6
- #3 0x00007ffff71f279e in __libc_message () at /lib64/libc.so.6
- #4 0x00007ffff729767a in __fortify_fail () at /lib64/libc.so.6
- #5 0x00007ffff7295c36 in () at /lib64/libc.so.6
- #6 0x00007ffff72957f5 in __snprintf_chk () at /lib64/libc.so.6
- #7 0x0000555555b1c1fd in pcibus_get_fw_dev_path ()
- #8 0x0000555555f2bde4 in qdev_get_fw_dev_path_helper.constprop ()
- #9 0x0000555555f2bd86 in qdev_get_fw_dev_path_helper.constprop ()
- #10 0x00005555559a6e5d in get_boot_device_path ()
- #11 0x00005555559a712c in get_boot_devices_list ()
- #12 0x0000555555b1a3d0 in fw_cfg_machine_reset ()
- #13 0x0000555555bf4c2d in pc_machine_reset ()
- #14 0x0000555555c66988 in qemu_system_reset ()
- #15 0x0000555555a6dff6 in qdev_machine_creation_done ()
- #16 0x0000555555c79186 in qmp_x_exit_preconfig.part ()
- #17 0x0000555555c7b459 in qemu_init ()
- #18 0x0000555555960a29 in main ()
-
-Found-by: Dario Faggioli <Dario Faggioli <dfaggioli at suse.com>
-Found-by: Martin Liška <martin.liska at suse.com>
-Cc: qemu-stable at nongnu.org
-Signed-off-by: Claudio Fontana <cfontana at suse.de>
-Message-Id: <20220531114707.18830-1-cfontana at suse.de>
-Reviewed-by: Ani Sinha <ani at anisinha.ca>
-(cherry-picked from commit 36f18c6989a3d1ff1d7a0e50b0868ef3958299b4)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- hw/pci/pci.c | 18 +++++++++---------
- 1 file changed, 9 insertions(+), 9 deletions(-)
-
-diff --git a/hw/pci/pci.c b/hw/pci/pci.c
-index dae9119bfe..c69b412434 100644
---- a/hw/pci/pci.c
-+++ b/hw/pci/pci.c
-@@ -2625,15 +2625,15 @@ static char *pci_dev_fw_name(DeviceState *dev, char *buf, int len)
- static char *pcibus_get_fw_dev_path(DeviceState *dev)
- {
- PCIDevice *d = (PCIDevice *)dev;
-- char path[50], name[33];
-- int off;
--
-- off = snprintf(path, sizeof(path), "%s@%x",
-- pci_dev_fw_name(dev, name, sizeof name),
-- PCI_SLOT(d->devfn));
-- if (PCI_FUNC(d->devfn))
-- snprintf(path + off, sizeof(path) + off, ",%x", PCI_FUNC(d->devfn));
-- return g_strdup(path);
-+ char name[33];
-+ int has_func = !!PCI_FUNC(d->devfn);
-+
-+ return g_strdup_printf("%s@%x%s%.*x",
-+ pci_dev_fw_name(dev, name, sizeof(name)),
-+ PCI_SLOT(d->devfn),
-+ has_func ? "," : "",
-+ has_func,
-+ PCI_FUNC(d->devfn));
- }
-
- static char *pcibus_get_dev_path(DeviceState *dev)
diff --git a/debian/patches/extra/0006-target-i386-kvm-Fix-disabling-MPX-on-cpu-host-with-M.patch b/debian/patches/extra/0006-target-i386-kvm-Fix-disabling-MPX-on-cpu-host-with-M.patch
deleted file mode 100644
index d393ed1..0000000
--- a/debian/patches/extra/0006-target-i386-kvm-Fix-disabling-MPX-on-cpu-host-with-M.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: "Maciej S. Szmigiero" <maciej.szmigiero at oracle.com>
-Date: Mon, 23 May 2022 18:26:58 +0200
-Subject: [PATCH] target/i386/kvm: Fix disabling MPX on "-cpu host" with
- MPX-capable host
-
-Since KVM commit 5f76f6f5ff96 ("KVM: nVMX: Do not expose MPX VMX controls when guest MPX disabled")
-it is not possible to disable MPX on a "-cpu host" just by adding "-mpx"
-there if the host CPU does indeed support MPX.
-QEMU will fail to set MSR_IA32_VMX_TRUE_{EXIT,ENTRY}_CTLS MSRs in this case
-and so trigger an assertion failure.
-
-Instead, besides "-mpx" one has to explicitly add also
-"-vmx-exit-clear-bndcfgs" and "-vmx-entry-load-bndcfgs" to QEMU command
-line to make it work, which is a bit convoluted.
-
-Make the MPX-related bits in FEAT_VMX_{EXIT,ENTRY}_CTLS dependent on MPX
-being actually enabled so such workarounds are no longer necessary.
-
-Signed-off-by: Maciej S. Szmigiero <maciej.szmigiero at oracle.com>
-Message-Id: <51aa2125c76363204cc23c27165e778097c33f0b.1653323077.git.maciej.szmigiero at oracle.com>
-Cc: qemu-stable at nongnu.org
-Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
-(cherry-picked from commit 267b5e7e378afd260004cb37a66a6fcd641e3b53)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- target/i386/cpu.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/target/i386/cpu.c b/target/i386/cpu.c
-index cb6b5467d0..6e6945139b 100644
---- a/target/i386/cpu.c
-+++ b/target/i386/cpu.c
-@@ -1327,6 +1327,14 @@ static FeatureDep feature_dependencies[] = {
- .from = { FEAT_7_0_EBX, CPUID_7_0_EBX_INVPCID },
- .to = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_ENABLE_INVPCID },
- },
-+ {
-+ .from = { FEAT_7_0_EBX, CPUID_7_0_EBX_MPX },
-+ .to = { FEAT_VMX_EXIT_CTLS, VMX_VM_EXIT_CLEAR_BNDCFGS },
-+ },
-+ {
-+ .from = { FEAT_7_0_EBX, CPUID_7_0_EBX_MPX },
-+ .to = { FEAT_VMX_ENTRY_CTLS, VMX_VM_ENTRY_LOAD_BNDCFGS },
-+ },
- {
- .from = { FEAT_7_0_EBX, CPUID_7_0_EBX_RDSEED },
- .to = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_RDSEED_EXITING },
diff --git a/debian/patches/extra/0007-coroutine-ucontext-use-QEMU_DEFINE_STATIC_CO_TLS.patch b/debian/patches/extra/0007-coroutine-ucontext-use-QEMU_DEFINE_STATIC_CO_TLS.patch
deleted file mode 100644
index 6c4d523..0000000
--- a/debian/patches/extra/0007-coroutine-ucontext-use-QEMU_DEFINE_STATIC_CO_TLS.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Stefan Hajnoczi <stefanha at redhat.com>
-Date: Mon, 7 Mar 2022 15:38:51 +0000
-Subject: [PATCH] coroutine-ucontext: use QEMU_DEFINE_STATIC_CO_TLS()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Thread-Local Storage variables cannot be used directly from coroutine
-code because the compiler may optimize TLS variable accesses across
-qemu_coroutine_yield() calls. When the coroutine is re-entered from
-another thread the TLS variables from the old thread must no longer be
-used.
-
-Use QEMU_DEFINE_STATIC_CO_TLS() for the current and leader variables.
-
-Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
-Message-Id: <20220307153853.602859-2-stefanha at redhat.com>
-Reviewed-by: Philippe Mathieu-Daudé <f4bug at amsat.org>
-Signed-off-by: Kevin Wolf <kwolf at redhat.com>
-(cherry-picked from commit 34145a307d849d0b6734d0222a7aa0bb9eef7407)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- util/coroutine-ucontext.c | 38 ++++++++++++++++++++++++--------------
- 1 file changed, 24 insertions(+), 14 deletions(-)
-
-diff --git a/util/coroutine-ucontext.c b/util/coroutine-ucontext.c
-index 904b375192..127d5a13c8 100644
---- a/util/coroutine-ucontext.c
-+++ b/util/coroutine-ucontext.c
-@@ -25,6 +25,7 @@
- #include "qemu/osdep.h"
- #include <ucontext.h>
- #include "qemu/coroutine_int.h"
-+#include "qemu/coroutine-tls.h"
-
- #ifdef CONFIG_VALGRIND_H
- #include <valgrind/valgrind.h>
-@@ -66,8 +67,8 @@ typedef struct {
- /**
- * Per-thread coroutine bookkeeping
- */
--static __thread CoroutineUContext leader;
--static __thread Coroutine *current;
-+QEMU_DEFINE_STATIC_CO_TLS(Coroutine *, current);
-+QEMU_DEFINE_STATIC_CO_TLS(CoroutineUContext, leader);
-
- /*
- * va_args to makecontext() must be type 'int', so passing
-@@ -97,14 +98,15 @@ static inline __attribute__((always_inline))
- void finish_switch_fiber(void *fake_stack_save)
- {
- #ifdef CONFIG_ASAN
-+ CoroutineUContext *leaderp = get_ptr_leader();
- const void *bottom_old;
- size_t size_old;
-
- __sanitizer_finish_switch_fiber(fake_stack_save, &bottom_old, &size_old);
-
-- if (!leader.stack) {
-- leader.stack = (void *)bottom_old;
-- leader.stack_size = size_old;
-+ if (!leaderp->stack) {
-+ leaderp->stack = (void *)bottom_old;
-+ leaderp->stack_size = size_old;
- }
- #endif
- #ifdef CONFIG_TSAN
-@@ -161,8 +163,10 @@ static void coroutine_trampoline(int i0, int i1)
-
- /* Initialize longjmp environment and switch back the caller */
- if (!sigsetjmp(self->env, 0)) {
-- start_switch_fiber_asan(COROUTINE_YIELD, &fake_stack_save, leader.stack,
-- leader.stack_size);
-+ CoroutineUContext *leaderp = get_ptr_leader();
-+
-+ start_switch_fiber_asan(COROUTINE_YIELD, &fake_stack_save,
-+ leaderp->stack, leaderp->stack_size);
- start_switch_fiber_tsan(&fake_stack_save, self, true); /* true=caller */
- siglongjmp(*(sigjmp_buf *)co->entry_arg, 1);
- }
-@@ -297,7 +301,7 @@ qemu_coroutine_switch(Coroutine *from_, Coroutine *to_,
- int ret;
- void *fake_stack_save = NULL;
-
-- current = to_;
-+ set_current(to_);
-
- ret = sigsetjmp(from->env, 0);
- if (ret == 0) {
-@@ -315,18 +319,24 @@ qemu_coroutine_switch(Coroutine *from_, Coroutine *to_,
-
- Coroutine *qemu_coroutine_self(void)
- {
-- if (!current) {
-- current = &leader.base;
-+ Coroutine *self = get_current();
-+ CoroutineUContext *leaderp = get_ptr_leader();
-+
-+ if (!self) {
-+ self = &leaderp->base;
-+ set_current(self);
- }
- #ifdef CONFIG_TSAN
-- if (!leader.tsan_co_fiber) {
-- leader.tsan_co_fiber = __tsan_get_current_fiber();
-+ if (!leaderp->tsan_co_fiber) {
-+ leaderp->tsan_co_fiber = __tsan_get_current_fiber();
- }
- #endif
-- return current;
-+ return self;
- }
-
- bool qemu_in_coroutine(void)
- {
-- return current && current->caller;
-+ Coroutine *self = get_current();
-+
-+ return self && self->caller;
- }
diff --git a/debian/patches/extra/0008-coroutine-use-QEMU_DEFINE_STATIC_CO_TLS.patch b/debian/patches/extra/0008-coroutine-use-QEMU_DEFINE_STATIC_CO_TLS.patch
deleted file mode 100644
index b5c4d3b..0000000
--- a/debian/patches/extra/0008-coroutine-use-QEMU_DEFINE_STATIC_CO_TLS.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Stefan Hajnoczi <stefanha at redhat.com>
-Date: Mon, 7 Mar 2022 15:38:52 +0000
-Subject: [PATCH] coroutine: use QEMU_DEFINE_STATIC_CO_TLS()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Thread-Local Storage variables cannot be used directly from coroutine
-code because the compiler may optimize TLS variable accesses across
-qemu_coroutine_yield() calls. When the coroutine is re-entered from
-another thread the TLS variables from the old thread must no longer be
-used.
-
-Use QEMU_DEFINE_STATIC_CO_TLS() for the current and leader variables.
-The alloc_pool QSLIST needs a typedef so the return value of
-get_ptr_alloc_pool() can be stored in a local variable.
-
-One example of why this code is necessary: a coroutine that yields
-before calling qemu_coroutine_create() to create another coroutine is
-affected by the TLS issue.
-
-Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
-Message-Id: <20220307153853.602859-3-stefanha at redhat.com>
-Reviewed-by: Philippe Mathieu-Daudé <f4bug at amsat.org>
-Signed-off-by: Kevin Wolf <kwolf at redhat.com>
-(cherry-picked from commit ac387a08a9c9f6b36757da912f0339c25f421f90)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- util/qemu-coroutine.c | 41 ++++++++++++++++++++++++-----------------
- 1 file changed, 24 insertions(+), 17 deletions(-)
-
-diff --git a/util/qemu-coroutine.c b/util/qemu-coroutine.c
-index c03b2422ff..f3e8300c8d 100644
---- a/util/qemu-coroutine.c
-+++ b/util/qemu-coroutine.c
-@@ -18,6 +18,7 @@
- #include "qemu/atomic.h"
- #include "qemu/coroutine.h"
- #include "qemu/coroutine_int.h"
-+#include "qemu/coroutine-tls.h"
- #include "block/aio.h"
-
- /** Initial batch size is 64, and is increased on demand */
-@@ -29,17 +30,20 @@ enum {
- static QSLIST_HEAD(, Coroutine) release_pool = QSLIST_HEAD_INITIALIZER(pool);
- static unsigned int pool_batch_size = POOL_INITIAL_BATCH_SIZE;
- static unsigned int release_pool_size;
--static __thread QSLIST_HEAD(, Coroutine) alloc_pool = QSLIST_HEAD_INITIALIZER(pool);
--static __thread unsigned int alloc_pool_size;
--static __thread Notifier coroutine_pool_cleanup_notifier;
-+
-+typedef QSLIST_HEAD(, Coroutine) CoroutineQSList;
-+QEMU_DEFINE_STATIC_CO_TLS(CoroutineQSList, alloc_pool);
-+QEMU_DEFINE_STATIC_CO_TLS(unsigned int, alloc_pool_size);
-+QEMU_DEFINE_STATIC_CO_TLS(Notifier, coroutine_pool_cleanup_notifier);
-
- static void coroutine_pool_cleanup(Notifier *n, void *value)
- {
- Coroutine *co;
- Coroutine *tmp;
-+ CoroutineQSList *alloc_pool = get_ptr_alloc_pool();
-
-- QSLIST_FOREACH_SAFE(co, &alloc_pool, pool_next, tmp) {
-- QSLIST_REMOVE_HEAD(&alloc_pool, pool_next);
-+ QSLIST_FOREACH_SAFE(co, alloc_pool, pool_next, tmp) {
-+ QSLIST_REMOVE_HEAD(alloc_pool, pool_next);
- qemu_coroutine_delete(co);
- }
- }
-@@ -49,27 +53,30 @@ Coroutine *qemu_coroutine_create(CoroutineEntry *entry, void *opaque)
- Coroutine *co = NULL;
-
- if (CONFIG_COROUTINE_POOL) {
-- co = QSLIST_FIRST(&alloc_pool);
-+ CoroutineQSList *alloc_pool = get_ptr_alloc_pool();
-+
-+ co = QSLIST_FIRST(alloc_pool);
- if (!co) {
- if (release_pool_size > qatomic_read(&pool_batch_size)) {
- /* Slow path; a good place to register the destructor, too. */
-- if (!coroutine_pool_cleanup_notifier.notify) {
-- coroutine_pool_cleanup_notifier.notify = coroutine_pool_cleanup;
-- qemu_thread_atexit_add(&coroutine_pool_cleanup_notifier);
-+ Notifier *notifier = get_ptr_coroutine_pool_cleanup_notifier();
-+ if (!notifier->notify) {
-+ notifier->notify = coroutine_pool_cleanup;
-+ qemu_thread_atexit_add(notifier);
- }
-
- /* This is not exact; there could be a little skew between
- * release_pool_size and the actual size of release_pool. But
- * it is just a heuristic, it does not need to be perfect.
- */
-- alloc_pool_size = qatomic_xchg(&release_pool_size, 0);
-- QSLIST_MOVE_ATOMIC(&alloc_pool, &release_pool);
-- co = QSLIST_FIRST(&alloc_pool);
-+ set_alloc_pool_size(qatomic_xchg(&release_pool_size, 0));
-+ QSLIST_MOVE_ATOMIC(alloc_pool, &release_pool);
-+ co = QSLIST_FIRST(alloc_pool);
- }
- }
- if (co) {
-- QSLIST_REMOVE_HEAD(&alloc_pool, pool_next);
-- alloc_pool_size--;
-+ QSLIST_REMOVE_HEAD(alloc_pool, pool_next);
-+ set_alloc_pool_size(get_alloc_pool_size() - 1);
- }
- }
-
-@@ -93,9 +100,9 @@ static void coroutine_delete(Coroutine *co)
- qatomic_inc(&release_pool_size);
- return;
- }
-- if (alloc_pool_size < qatomic_read(&pool_batch_size)) {
-- QSLIST_INSERT_HEAD(&alloc_pool, co, pool_next);
-- alloc_pool_size++;
-+ if (get_alloc_pool_size() < qatomic_read(&pool_batch_size)) {
-+ QSLIST_INSERT_HEAD(get_ptr_alloc_pool(), co, pool_next);
-+ set_alloc_pool_size(get_alloc_pool_size() + 1);
- return;
- }
- }
diff --git a/debian/patches/extra/0009-coroutine-Rename-qemu_coroutine_inc-dec_pool_size.patch b/debian/patches/extra/0009-coroutine-Rename-qemu_coroutine_inc-dec_pool_size.patch
deleted file mode 100644
index 9459471..0000000
--- a/debian/patches/extra/0009-coroutine-Rename-qemu_coroutine_inc-dec_pool_size.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Kevin Wolf <kwolf at redhat.com>
-Date: Tue, 10 May 2022 17:10:19 +0200
-Subject: [PATCH] coroutine: Rename qemu_coroutine_inc/dec_pool_size()
-
-It's true that these functions currently affect the batch size in which
-coroutines are reused (i.e. moved from the global release pool to the
-allocation pool of a specific thread), but this is a bug and will be
-fixed in a separate patch.
-
-In fact, the comment in the header file already just promises that it
-influences the pool size, so reflect this in the name of the functions.
-As a nice side effect, the shorter function name makes some line
-wrapping unnecessary.
-
-Cc: qemu-stable at nongnu.org
-Signed-off-by: Kevin Wolf <kwolf at redhat.com>
-Message-Id: <20220510151020.105528-2-kwolf at redhat.com>
-Signed-off-by: Kevin Wolf <kwolf at redhat.com>
-(cherry-picked from commit 98e3ab35054b946f7c2aba5408822532b0920b53)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- hw/block/virtio-blk.c | 6 ++----
- include/qemu/coroutine.h | 6 +++---
- util/qemu-coroutine.c | 4 ++--
- 3 files changed, 7 insertions(+), 9 deletions(-)
-
-diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
-index 540c38f829..6a1cc41877 100644
---- a/hw/block/virtio-blk.c
-+++ b/hw/block/virtio-blk.c
-@@ -1215,8 +1215,7 @@ static void virtio_blk_device_realize(DeviceState *dev, Error **errp)
- for (i = 0; i < conf->num_queues; i++) {
- virtio_add_queue(vdev, conf->queue_size, virtio_blk_handle_output);
- }
-- qemu_coroutine_increase_pool_batch_size(conf->num_queues * conf->queue_size
-- / 2);
-+ qemu_coroutine_inc_pool_size(conf->num_queues * conf->queue_size / 2);
- virtio_blk_data_plane_create(vdev, conf, &s->dataplane, &err);
- if (err != NULL) {
- error_propagate(errp, err);
-@@ -1253,8 +1252,7 @@ static void virtio_blk_device_unrealize(DeviceState *dev)
- for (i = 0; i < conf->num_queues; i++) {
- virtio_del_queue(vdev, i);
- }
-- qemu_coroutine_decrease_pool_batch_size(conf->num_queues * conf->queue_size
-- / 2);
-+ qemu_coroutine_dec_pool_size(conf->num_queues * conf->queue_size / 2);
- qemu_del_vm_change_state_handler(s->change);
- blockdev_mark_auto_del(s->blk);
- virtio_cleanup(vdev);
-diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h
-index c828a95ee0..5b621d1295 100644
---- a/include/qemu/coroutine.h
-+++ b/include/qemu/coroutine.h
-@@ -334,12 +334,12 @@ void coroutine_fn yield_until_fd_readable(int fd);
- /**
- * Increase coroutine pool size
- */
--void qemu_coroutine_increase_pool_batch_size(unsigned int additional_pool_size);
-+void qemu_coroutine_inc_pool_size(unsigned int additional_pool_size);
-
- /**
-- * Devcrease coroutine pool size
-+ * Decrease coroutine pool size
- */
--void qemu_coroutine_decrease_pool_batch_size(unsigned int additional_pool_size);
-+void qemu_coroutine_dec_pool_size(unsigned int additional_pool_size);
-
- #include "qemu/lockable.h"
-
-diff --git a/util/qemu-coroutine.c b/util/qemu-coroutine.c
-index f3e8300c8d..ea23929a74 100644
---- a/util/qemu-coroutine.c
-+++ b/util/qemu-coroutine.c
-@@ -212,12 +212,12 @@ AioContext *coroutine_fn qemu_coroutine_get_aio_context(Coroutine *co)
- return co->ctx;
- }
-
--void qemu_coroutine_increase_pool_batch_size(unsigned int additional_pool_size)
-+void qemu_coroutine_inc_pool_size(unsigned int additional_pool_size)
- {
- qatomic_add(&pool_batch_size, additional_pool_size);
- }
-
--void qemu_coroutine_decrease_pool_batch_size(unsigned int removing_pool_size)
-+void qemu_coroutine_dec_pool_size(unsigned int removing_pool_size)
- {
- qatomic_sub(&pool_batch_size, removing_pool_size);
- }
diff --git a/debian/patches/extra/0010-coroutine-Revert-to-constant-batch-size.patch b/debian/patches/extra/0010-coroutine-Revert-to-constant-batch-size.patch
deleted file mode 100644
index 711ffe0..0000000
--- a/debian/patches/extra/0010-coroutine-Revert-to-constant-batch-size.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Kevin Wolf <kwolf at redhat.com>
-Date: Tue, 10 May 2022 17:10:20 +0200
-Subject: [PATCH] coroutine: Revert to constant batch size
-
-Commit 4c41c69e changed the way the coroutine pool is sized because for
-virtio-blk devices with a large queue size and heavy I/O, it was just
-too small and caused coroutines to be deleted and reallocated soon
-afterwards. The change made the size dynamic based on the number of
-queues and the queue size of virtio-blk devices.
-
-There are two important numbers here: Slightly simplified, when a
-coroutine terminates, it is generally stored in the global release pool
-up to a certain pool size, and if the pool is full, it is freed.
-Conversely, when allocating a new coroutine, the coroutines in the
-release pool are reused if the pool already has reached a certain
-minimum size (the batch size), otherwise we allocate new coroutines.
-
-The problem after commit 4c41c69e is that it not only increases the
-maximum pool size (which is the intended effect), but also the batch
-size for reusing coroutines (which is a bug). It means that in cases
-with many devices and/or a large queue size (which defaults to the
-number of vcpus for virtio-blk-pci), many thousand coroutines could be
-sitting in the release pool without being reused.
-
-This is not only a waste of memory and allocations, but it actually
-makes the QEMU process likely to hit the vm.max_map_count limit on Linux
-because each coroutine requires two mappings (its stack and the guard
-page for the stack), causing it to abort() in qemu_alloc_stack() because
-when the limit is hit, mprotect() starts to fail with ENOMEM.
-
-In order to fix the problem, change the batch size back to 64 to avoid
-uselessly accumulating coroutines in the release pool, but keep the
-dynamic maximum pool size so that coroutines aren't freed too early
-in heavy I/O scenarios.
-
-Note that this fix doesn't strictly make it impossible to hit the limit,
-but this would only happen if most of the coroutines are actually in use
-at the same time, not just sitting in a pool. This is the same behaviour
-as we already had before commit 4c41c69e. Fully preventing this would
-require allowing qemu_coroutine_create() to return an error, but it
-doesn't seem to be a scenario that people hit in practice.
-
-Cc: qemu-stable at nongnu.org
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2079938
-Fixes: 4c41c69e05fe28c0f95f8abd2ebf407e95a4f04b
-Signed-off-by: Kevin Wolf <kwolf at redhat.com>
-Message-Id: <20220510151020.105528-3-kwolf at redhat.com>
-Tested-by: Hiroki Narukawa <hnarukaw at yahoo-corp.jp>
-Signed-off-by: Kevin Wolf <kwolf at redhat.com>
-(cherry-picked from commit 9ec7a59b5aad4b736871c378d30f5ef5ec51cb52)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- util/qemu-coroutine.c | 22 ++++++++++++++--------
- 1 file changed, 14 insertions(+), 8 deletions(-)
-
-diff --git a/util/qemu-coroutine.c b/util/qemu-coroutine.c
-index ea23929a74..4a8bd63ef0 100644
---- a/util/qemu-coroutine.c
-+++ b/util/qemu-coroutine.c
-@@ -21,14 +21,20 @@
- #include "qemu/coroutine-tls.h"
- #include "block/aio.h"
-
--/** Initial batch size is 64, and is increased on demand */
-+/**
-+ * The minimal batch size is always 64, coroutines from the release_pool are
-+ * reused as soon as there are 64 coroutines in it. The maximum pool size starts
-+ * with 64 and is increased on demand so that coroutines are not deleted even if
-+ * they are not immediately reused.
-+ */
- enum {
-- POOL_INITIAL_BATCH_SIZE = 64,
-+ POOL_MIN_BATCH_SIZE = 64,
-+ POOL_INITIAL_MAX_SIZE = 64,
- };
-
- /** Free list to speed up creation */
- static QSLIST_HEAD(, Coroutine) release_pool = QSLIST_HEAD_INITIALIZER(pool);
--static unsigned int pool_batch_size = POOL_INITIAL_BATCH_SIZE;
-+static unsigned int pool_max_size = POOL_INITIAL_MAX_SIZE;
- static unsigned int release_pool_size;
-
- typedef QSLIST_HEAD(, Coroutine) CoroutineQSList;
-@@ -57,7 +63,7 @@ Coroutine *qemu_coroutine_create(CoroutineEntry *entry, void *opaque)
-
- co = QSLIST_FIRST(alloc_pool);
- if (!co) {
-- if (release_pool_size > qatomic_read(&pool_batch_size)) {
-+ if (release_pool_size > POOL_MIN_BATCH_SIZE) {
- /* Slow path; a good place to register the destructor, too. */
- Notifier *notifier = get_ptr_coroutine_pool_cleanup_notifier();
- if (!notifier->notify) {
-@@ -95,12 +101,12 @@ static void coroutine_delete(Coroutine *co)
- co->caller = NULL;
-
- if (CONFIG_COROUTINE_POOL) {
-- if (release_pool_size < qatomic_read(&pool_batch_size) * 2) {
-+ if (release_pool_size < qatomic_read(&pool_max_size) * 2) {
- QSLIST_INSERT_HEAD_ATOMIC(&release_pool, co, pool_next);
- qatomic_inc(&release_pool_size);
- return;
- }
-- if (get_alloc_pool_size() < qatomic_read(&pool_batch_size)) {
-+ if (get_alloc_pool_size() < qatomic_read(&pool_max_size)) {
- QSLIST_INSERT_HEAD(get_ptr_alloc_pool(), co, pool_next);
- set_alloc_pool_size(get_alloc_pool_size() + 1);
- return;
-@@ -214,10 +220,10 @@ AioContext *coroutine_fn qemu_coroutine_get_aio_context(Coroutine *co)
-
- void qemu_coroutine_inc_pool_size(unsigned int additional_pool_size)
- {
-- qatomic_add(&pool_batch_size, additional_pool_size);
-+ qatomic_add(&pool_max_size, additional_pool_size);
- }
-
- void qemu_coroutine_dec_pool_size(unsigned int removing_pool_size)
- {
-- qatomic_sub(&pool_batch_size, removing_pool_size);
-+ qatomic_sub(&pool_max_size, removing_pool_size);
- }
diff --git a/debian/patches/extra/0011-target-i386-do-not-consult-nonexistent-host-leaves.patch b/debian/patches/extra/0011-target-i386-do-not-consult-nonexistent-host-leaves.patch
deleted file mode 100644
index cf535bb..0000000
--- a/debian/patches/extra/0011-target-i386-do-not-consult-nonexistent-host-leaves.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Paolo Bonzini <pbonzini at redhat.com>
-Date: Fri, 29 Apr 2022 21:16:28 +0200
-Subject: [PATCH] target/i386: do not consult nonexistent host leaves
-
-When cache_info_passthrough is requested, QEMU passes the host values
-of the cache information CPUID leaves down to the guest. However,
-it blindly assumes that the CPUID leaf exists on the host, and this
-cannot be guaranteed: for example, KVM has recently started to
-synthesize AMD leaves up to 0x80000021 in order to provide accurate
-CPU bug information to guests.
-
-Querying a nonexistent host leaf fills the output arguments of
-host_cpuid with data that (albeit deterministic) is nonsensical
-as cache information, namely the data in the highest Intel CPUID
-leaf. If said highest leaf is not ECX-dependent, this can even
-cause an infinite loop when kvm_arch_init_vcpu prepares the input
-to KVM_SET_CPUID2. The infinite loop is only terminated by an
-abort() when the array gets full.
-
-Reported-by: Maxim Levitsky <mlevitsk at redhat.com>
-Reviewed-by: Maxim Levitsky <mlevitsk at redhat.com>
-Cc: qemu-stable at nongnu.org
-Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
-(cherry-picked from commit 798d8ec0dacd4cc0034298d94f430c14f23e2919)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- target/i386/cpu.c | 41 ++++++++++++++++++++++++++++++++++++-----
- 1 file changed, 36 insertions(+), 5 deletions(-)
-
-diff --git a/target/i386/cpu.c b/target/i386/cpu.c
-index 6e6945139b..c79e151887 100644
---- a/target/i386/cpu.c
-+++ b/target/i386/cpu.c
-@@ -5030,6 +5030,37 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
- return r;
- }
-
-+static void x86_cpu_get_cache_cpuid(uint32_t func, uint32_t index,
-+ uint32_t *eax, uint32_t *ebx,
-+ uint32_t *ecx, uint32_t *edx)
-+{
-+ uint32_t level, unused;
-+
-+ /* Only return valid host leaves. */
-+ switch (func) {
-+ case 2:
-+ case 4:
-+ host_cpuid(0, 0, &level, &unused, &unused, &unused);
-+ break;
-+ case 0x80000005:
-+ case 0x80000006:
-+ case 0x8000001d:
-+ host_cpuid(0x80000000, 0, &level, &unused, &unused, &unused);
-+ break;
-+ default:
-+ return;
-+ }
-+
-+ if (func > level) {
-+ *eax = 0;
-+ *ebx = 0;
-+ *ecx = 0;
-+ *edx = 0;
-+ } else {
-+ host_cpuid(func, index, eax, ebx, ecx, edx);
-+ }
-+}
-+
- /*
- * Only for builtin_x86_defs models initialized with x86_register_cpudef_types.
- */
-@@ -5288,7 +5319,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
- case 2:
- /* cache info: needed for Pentium Pro compatibility */
- if (cpu->cache_info_passthrough) {
-- host_cpuid(index, 0, eax, ebx, ecx, edx);
-+ x86_cpu_get_cache_cpuid(index, 0, eax, ebx, ecx, edx);
- break;
- } else if (cpu->vendor_cpuid_only && IS_AMD_CPU(env)) {
- *eax = *ebx = *ecx = *edx = 0;
-@@ -5308,7 +5339,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
- case 4:
- /* cache info: needed for Core compatibility */
- if (cpu->cache_info_passthrough) {
-- host_cpuid(index, count, eax, ebx, ecx, edx);
-+ x86_cpu_get_cache_cpuid(index, count, eax, ebx, ecx, edx);
- /* QEMU gives out its own APIC IDs, never pass down bits 31..26. */
- *eax &= ~0xFC000000;
- if ((*eax & 31) && cs->nr_cores > 1) {
-@@ -5710,7 +5741,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
- case 0x80000005:
- /* cache info (L1 cache) */
- if (cpu->cache_info_passthrough) {
-- host_cpuid(index, 0, eax, ebx, ecx, edx);
-+ x86_cpu_get_cache_cpuid(index, 0, eax, ebx, ecx, edx);
- break;
- }
- *eax = (L1_DTLB_2M_ASSOC << 24) | (L1_DTLB_2M_ENTRIES << 16) |
-@@ -5723,7 +5754,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
- case 0x80000006:
- /* cache info (L2 cache) */
- if (cpu->cache_info_passthrough) {
-- host_cpuid(index, 0, eax, ebx, ecx, edx);
-+ x86_cpu_get_cache_cpuid(index, 0, eax, ebx, ecx, edx);
- break;
- }
- *eax = (AMD_ENC_ASSOC(L2_DTLB_2M_ASSOC) << 28) |
-@@ -5783,7 +5814,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
- case 0x8000001D:
- *eax = 0;
- if (cpu->cache_info_passthrough) {
-- host_cpuid(index, count, eax, ebx, ecx, edx);
-+ x86_cpu_get_cache_cpuid(index, count, eax, ebx, ecx, edx);
- break;
- }
- switch (count) {
diff --git a/debian/patches/extra/0012-virtio-scsi-fix-ctrl-and-event-handler-functions-in-.patch b/debian/patches/extra/0012-virtio-scsi-fix-ctrl-and-event-handler-functions-in-.patch
deleted file mode 100644
index 92a57cf..0000000
--- a/debian/patches/extra/0012-virtio-scsi-fix-ctrl-and-event-handler-functions-in-.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Stefan Hajnoczi <stefanha at redhat.com>
-Date: Wed, 27 Apr 2022 15:35:36 +0100
-Subject: [PATCH] virtio-scsi: fix ctrl and event handler functions in
- dataplane mode
-
-Commit f34e8d8b8d48d73f36a67b6d5e492ef9784b5012 ("virtio-scsi: prepare
-virtio_scsi_handle_cmd for dataplane") prepared the virtio-scsi cmd
-virtqueue handler function to be used in both the dataplane and
-non-datpalane code paths.
-
-It failed to convert the ctrl and event virtqueue handler functions,
-which are not designed to be called from the dataplane code path but
-will be since the ioeventfd is set up for those virtqueues when
-dataplane starts.
-
-Convert the ctrl and event virtqueue handler functions now so they
-operate correctly when called from the dataplane code path. Avoid code
-duplication by extracting this code into a helper function.
-
-Fixes: f34e8d8b8d48d73f36a67b6d5e492ef9784b5012 ("virtio-scsi: prepare virtio_scsi_handle_cmd for dataplane")
-Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
-Reviewed-by: Paolo Bonzini <pbonzini at redhat.com>
-Message-id: 20220427143541.119567-2-stefanha at redhat.com
-[Fixed s/by used/be used/ typo pointed out by Michael Tokarev
-<mjt at tls.msk.ru>.
---Stefan]
-Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
-(cherry-picked from commit 2f743ef6366c2df4ef51ef3ae318138cdc0125ab)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- hw/scsi/virtio-scsi.c | 42 +++++++++++++++++++++++++++---------------
- 1 file changed, 27 insertions(+), 15 deletions(-)
-
-diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
-index 34a968ecfb..417fbc71d6 100644
---- a/hw/scsi/virtio-scsi.c
-+++ b/hw/scsi/virtio-scsi.c
-@@ -472,16 +472,32 @@ bool virtio_scsi_handle_ctrl_vq(VirtIOSCSI *s, VirtQueue *vq)
- return progress;
- }
-
-+/*
-+ * If dataplane is configured but not yet started, do so now and return true on
-+ * success.
-+ *
-+ * Dataplane is started by the core virtio code but virtqueue handler functions
-+ * can also be invoked when a guest kicks before DRIVER_OK, so this helper
-+ * function helps us deal with manually starting ioeventfd in that case.
-+ */
-+static bool virtio_scsi_defer_to_dataplane(VirtIOSCSI *s)
-+{
-+ if (!s->ctx || s->dataplane_started) {
-+ return false;
-+ }
-+
-+ virtio_device_start_ioeventfd(&s->parent_obj.parent_obj);
-+ return !s->dataplane_fenced;
-+}
-+
- static void virtio_scsi_handle_ctrl(VirtIODevice *vdev, VirtQueue *vq)
- {
- VirtIOSCSI *s = (VirtIOSCSI *)vdev;
-
-- if (s->ctx) {
-- virtio_device_start_ioeventfd(vdev);
-- if (!s->dataplane_fenced) {
-- return;
-- }
-+ if (virtio_scsi_defer_to_dataplane(s)) {
-+ return;
- }
-+
- virtio_scsi_acquire(s);
- virtio_scsi_handle_ctrl_vq(s, vq);
- virtio_scsi_release(s);
-@@ -720,12 +736,10 @@ static void virtio_scsi_handle_cmd(VirtIODevice *vdev, VirtQueue *vq)
- /* use non-QOM casts in the data path */
- VirtIOSCSI *s = (VirtIOSCSI *)vdev;
-
-- if (s->ctx && !s->dataplane_started) {
-- virtio_device_start_ioeventfd(vdev);
-- if (!s->dataplane_fenced) {
-- return;
-- }
-+ if (virtio_scsi_defer_to_dataplane(s)) {
-+ return;
- }
-+
- virtio_scsi_acquire(s);
- virtio_scsi_handle_cmd_vq(s, vq);
- virtio_scsi_release(s);
-@@ -855,12 +869,10 @@ static void virtio_scsi_handle_event(VirtIODevice *vdev, VirtQueue *vq)
- {
- VirtIOSCSI *s = VIRTIO_SCSI(vdev);
-
-- if (s->ctx) {
-- virtio_device_start_ioeventfd(vdev);
-- if (!s->dataplane_fenced) {
-- return;
-- }
-+ if (virtio_scsi_defer_to_dataplane(s)) {
-+ return;
- }
-+
- virtio_scsi_acquire(s);
- virtio_scsi_handle_event_vq(s, vq);
- virtio_scsi_release(s);
diff --git a/debian/patches/extra/0013-virtio-scsi-don-t-waste-CPU-polling-the-event-virtqu.patch b/debian/patches/extra/0013-virtio-scsi-don-t-waste-CPU-polling-the-event-virtqu.patch
deleted file mode 100644
index 238d456..0000000
--- a/debian/patches/extra/0013-virtio-scsi-don-t-waste-CPU-polling-the-event-virtqu.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Stefan Hajnoczi <stefanha at redhat.com>
-Date: Wed, 27 Apr 2022 15:35:37 +0100
-Subject: [PATCH] virtio-scsi: don't waste CPU polling the event virtqueue
-
-The virtio-scsi event virtqueue is not emptied by its handler function.
-This is typical for rx virtqueues where the device uses buffers when
-some event occurs (e.g. a packet is received, an error condition
-happens, etc).
-
-Polling non-empty virtqueues wastes CPU cycles. We are not waiting for
-new buffers to become available, we are waiting for an event to occur,
-so it's a misuse of CPU resources to poll for buffers.
-
-Introduce the new virtio_queue_aio_attach_host_notifier_no_poll() API,
-which is identical to virtio_queue_aio_attach_host_notifier() except
-that it does not poll the virtqueue.
-
-Before this patch the following command-line consumed 100% CPU in the
-IOThread polling and calling virtio_scsi_handle_event():
-
- $ qemu-system-x86_64 -M accel=kvm -m 1G -cpu host \
- --object iothread,id=iothread0 \
- --device virtio-scsi-pci,iothread=iothread0 \
- --blockdev file,filename=test.img,aio=native,cache.direct=on,node-name=drive0 \
- --device scsi-hd,drive=drive0
-
-After this patch CPU is no longer wasted.
-
-Reported-by: Nir Soffer <nsoffer at redhat.com>
-Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
-Tested-by: Nir Soffer <nsoffer at redhat.com>
-Message-id: 20220427143541.119567-3-stefanha at redhat.com
-Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
-(cherry-picked from commit 38738f7dbbda90fbc161757b7f4be35b52205552)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- hw/scsi/virtio-scsi-dataplane.c | 2 +-
- hw/virtio/virtio.c | 13 +++++++++++++
- include/hw/virtio/virtio.h | 1 +
- 3 files changed, 15 insertions(+), 1 deletion(-)
-
-diff --git a/hw/scsi/virtio-scsi-dataplane.c b/hw/scsi/virtio-scsi-dataplane.c
-index 29575cbaf6..8bb6e6acfc 100644
---- a/hw/scsi/virtio-scsi-dataplane.c
-+++ b/hw/scsi/virtio-scsi-dataplane.c
-@@ -138,7 +138,7 @@ int virtio_scsi_dataplane_start(VirtIODevice *vdev)
-
- aio_context_acquire(s->ctx);
- virtio_queue_aio_attach_host_notifier(vs->ctrl_vq, s->ctx);
-- virtio_queue_aio_attach_host_notifier(vs->event_vq, s->ctx);
-+ virtio_queue_aio_attach_host_notifier_no_poll(vs->event_vq, s->ctx);
-
- for (i = 0; i < vs->conf.num_queues; i++) {
- virtio_queue_aio_attach_host_notifier(vs->cmd_vqs[i], s->ctx);
-diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
-index 9d637e043e..67a873f54a 100644
---- a/hw/virtio/virtio.c
-+++ b/hw/virtio/virtio.c
-@@ -3534,6 +3534,19 @@ void virtio_queue_aio_attach_host_notifier(VirtQueue *vq, AioContext *ctx)
- virtio_queue_host_notifier_aio_poll_end);
- }
-
-+/*
-+ * Same as virtio_queue_aio_attach_host_notifier() but without polling. Use
-+ * this for rx virtqueues and similar cases where the virtqueue handler
-+ * function does not pop all elements. When the virtqueue is left non-empty
-+ * polling consumes CPU cycles and should not be used.
-+ */
-+void virtio_queue_aio_attach_host_notifier_no_poll(VirtQueue *vq, AioContext *ctx)
-+{
-+ aio_set_event_notifier(ctx, &vq->host_notifier, true,
-+ virtio_queue_host_notifier_read,
-+ NULL, NULL);
-+}
-+
- void virtio_queue_aio_detach_host_notifier(VirtQueue *vq, AioContext *ctx)
- {
- aio_set_event_notifier(ctx, &vq->host_notifier, true, NULL, NULL, NULL);
-diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
-index b31c4507f5..b62a35fdca 100644
---- a/include/hw/virtio/virtio.h
-+++ b/include/hw/virtio/virtio.h
-@@ -317,6 +317,7 @@ EventNotifier *virtio_queue_get_host_notifier(VirtQueue *vq);
- void virtio_queue_set_host_notifier_enabled(VirtQueue *vq, bool enabled);
- void virtio_queue_host_notifier_read(EventNotifier *n);
- void virtio_queue_aio_attach_host_notifier(VirtQueue *vq, AioContext *ctx);
-+void virtio_queue_aio_attach_host_notifier_no_poll(VirtQueue *vq, AioContext *ctx);
- void virtio_queue_aio_detach_host_notifier(VirtQueue *vq, AioContext *ctx);
- VirtQueue *virtio_vector_first_queue(VirtIODevice *vdev, uint16_t vector);
- VirtQueue *virtio_vector_next_queue(VirtQueue *vq);
diff --git a/debian/patches/extra/0014-vhost-Track-descriptor-chain-in-private-at-SVQ.patch b/debian/patches/extra/0014-vhost-Track-descriptor-chain-in-private-at-SVQ.patch
deleted file mode 100644
index 2f52fd3..0000000
--- a/debian/patches/extra/0014-vhost-Track-descriptor-chain-in-private-at-SVQ.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma at redhat.com>
-Date: Thu, 12 May 2022 19:57:42 +0200
-Subject: [PATCH] vhost: Track descriptor chain in private at SVQ
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The device could have access to modify them, and it definitely have
-access when we implement packed vq. Harden SVQ maintaining a private
-copy of the descriptor chain. Other fields like buffer addresses are
-already maintained sepparatedly.
-
-Signed-off-by: Eugenio Pérez <eperezma at redhat.com>
-Message-Id: <20220512175747.142058-2-eperezma at redhat.com>
-Reviewed-by: Michael S. Tsirkin <mst at redhat.com>
-Signed-off-by: Michael S. Tsirkin <mst at redhat.com>
-(cherry-picked from commit 495fe3a78749c39c0e772c4e1a55d6cb8a7e5292)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- hw/virtio/vhost-shadow-virtqueue.c | 12 +++++++-----
- hw/virtio/vhost-shadow-virtqueue.h | 6 ++++++
- 2 files changed, 13 insertions(+), 5 deletions(-)
-
-diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-virtqueue.c
-index b232803d1b..3155801f50 100644
---- a/hw/virtio/vhost-shadow-virtqueue.c
-+++ b/hw/virtio/vhost-shadow-virtqueue.c
-@@ -138,6 +138,7 @@ static void vhost_vring_write_descs(VhostShadowVirtqueue *svq, hwaddr *sg,
- for (n = 0; n < num; n++) {
- if (more_descs || (n + 1 < num)) {
- descs[i].flags = flags | cpu_to_le16(VRING_DESC_F_NEXT);
-+ descs[i].next = cpu_to_le16(svq->desc_next[i]);
- } else {
- descs[i].flags = flags;
- }
-@@ -145,10 +146,10 @@ static void vhost_vring_write_descs(VhostShadowVirtqueue *svq, hwaddr *sg,
- descs[i].len = cpu_to_le32(iovec[n].iov_len);
-
- last = i;
-- i = cpu_to_le16(descs[i].next);
-+ i = cpu_to_le16(svq->desc_next[i]);
- }
-
-- svq->free_head = le16_to_cpu(descs[last].next);
-+ svq->free_head = le16_to_cpu(svq->desc_next[last]);
- }
-
- static bool vhost_svq_add_split(VhostShadowVirtqueue *svq,
-@@ -336,7 +337,6 @@ static void vhost_svq_disable_notification(VhostShadowVirtqueue *svq)
- static VirtQueueElement *vhost_svq_get_buf(VhostShadowVirtqueue *svq,
- uint32_t *len)
- {
-- vring_desc_t *descs = svq->vring.desc;
- const vring_used_t *used = svq->vring.used;
- vring_used_elem_t used_elem;
- uint16_t last_used;
-@@ -365,7 +365,7 @@ static VirtQueueElement *vhost_svq_get_buf(VhostShadowVirtqueue *svq,
- return NULL;
- }
-
-- descs[used_elem.id].next = svq->free_head;
-+ svq->desc_next[used_elem.id] = svq->free_head;
- svq->free_head = used_elem.id;
-
- *len = used_elem.len;
-@@ -540,8 +540,9 @@ void vhost_svq_start(VhostShadowVirtqueue *svq, VirtIODevice *vdev,
- svq->vring.used = qemu_memalign(qemu_real_host_page_size, device_size);
- memset(svq->vring.used, 0, device_size);
- svq->ring_id_maps = g_new0(VirtQueueElement *, svq->vring.num);
-+ svq->desc_next = g_new0(uint16_t, svq->vring.num);
- for (unsigned i = 0; i < svq->vring.num - 1; i++) {
-- svq->vring.desc[i].next = cpu_to_le16(i + 1);
-+ svq->desc_next[i] = cpu_to_le16(i + 1);
- }
- }
-
-@@ -574,6 +575,7 @@ void vhost_svq_stop(VhostShadowVirtqueue *svq)
- virtqueue_detach_element(svq->vq, next_avail_elem, 0);
- }
- svq->vq = NULL;
-+ g_free(svq->desc_next);
- g_free(svq->ring_id_maps);
- qemu_vfree(svq->vring.desc);
- qemu_vfree(svq->vring.used);
-diff --git a/hw/virtio/vhost-shadow-virtqueue.h b/hw/virtio/vhost-shadow-virtqueue.h
-index e5e24c536d..c132c994e9 100644
---- a/hw/virtio/vhost-shadow-virtqueue.h
-+++ b/hw/virtio/vhost-shadow-virtqueue.h
-@@ -53,6 +53,12 @@ typedef struct VhostShadowVirtqueue {
- /* Next VirtQueue element that guest made available */
- VirtQueueElement *next_guest_avail_elem;
-
-+ /*
-+ * Backup next field for each descriptor so we can recover securely, not
-+ * needing to trust the device access.
-+ */
-+ uint16_t *desc_next;
-+
- /* Next head to expose to the device */
- uint16_t shadow_avail_idx;
-
diff --git a/debian/patches/extra/0015-vhost-Fix-device-s-used-descriptor-dequeue.patch b/debian/patches/extra/0015-vhost-Fix-device-s-used-descriptor-dequeue.patch
deleted file mode 100644
index 497bcec..0000000
--- a/debian/patches/extra/0015-vhost-Fix-device-s-used-descriptor-dequeue.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma at redhat.com>
-Date: Thu, 12 May 2022 19:57:43 +0200
-Subject: [PATCH] vhost: Fix device's used descriptor dequeue
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Only the first one of them were properly enqueued back.
-
-Fixes: 100890f7ca ("vhost: Shadow virtqueue buffers forwarding")
-
-Signed-off-by: Eugenio Pérez <eperezma at redhat.com>
-Message-Id: <20220512175747.142058-3-eperezma at redhat.com>
-Reviewed-by: Michael S. Tsirkin <mst at redhat.com>
-Signed-off-by: Michael S. Tsirkin <mst at redhat.com>
-(cherry-picked from commit 81abfa5724c9a6502d7a1d3a67c55f2a303a1170)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- hw/virtio/vhost-shadow-virtqueue.c | 17 +++++++++++++++--
- 1 file changed, 15 insertions(+), 2 deletions(-)
-
-diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-virtqueue.c
-index 3155801f50..31fc50907d 100644
---- a/hw/virtio/vhost-shadow-virtqueue.c
-+++ b/hw/virtio/vhost-shadow-virtqueue.c
-@@ -334,12 +334,22 @@ static void vhost_svq_disable_notification(VhostShadowVirtqueue *svq)
- svq->vring.avail->flags |= cpu_to_le16(VRING_AVAIL_F_NO_INTERRUPT);
- }
-
-+static uint16_t vhost_svq_last_desc_of_chain(const VhostShadowVirtqueue *svq,
-+ uint16_t num, uint16_t i)
-+{
-+ for (uint16_t j = 0; j < (num - 1); ++j) {
-+ i = le16_to_cpu(svq->desc_next[i]);
-+ }
-+
-+ return i;
-+}
-+
- static VirtQueueElement *vhost_svq_get_buf(VhostShadowVirtqueue *svq,
- uint32_t *len)
- {
- const vring_used_t *used = svq->vring.used;
- vring_used_elem_t used_elem;
-- uint16_t last_used;
-+ uint16_t last_used, last_used_chain, num;
-
- if (!vhost_svq_more_used(svq)) {
- return NULL;
-@@ -365,7 +375,10 @@ static VirtQueueElement *vhost_svq_get_buf(VhostShadowVirtqueue *svq,
- return NULL;
- }
-
-- svq->desc_next[used_elem.id] = svq->free_head;
-+ num = svq->ring_id_maps[used_elem.id]->in_num +
-+ svq->ring_id_maps[used_elem.id]->out_num;
-+ last_used_chain = vhost_svq_last_desc_of_chain(svq, num, used_elem.id);
-+ svq->desc_next[last_used_chain] = svq->free_head;
- svq->free_head = used_elem.id;
-
- *len = used_elem.len;
diff --git a/debian/patches/extra/0016-vdpa-Fix-bad-index-calculus-at-vhost_vdpa_get_vring_.patch b/debian/patches/extra/0016-vdpa-Fix-bad-index-calculus-at-vhost_vdpa_get_vring_.patch
deleted file mode 100644
index 6f33164..0000000
--- a/debian/patches/extra/0016-vdpa-Fix-bad-index-calculus-at-vhost_vdpa_get_vring_.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma at redhat.com>
-Date: Thu, 12 May 2022 19:57:44 +0200
-Subject: [PATCH] vdpa: Fix bad index calculus at vhost_vdpa_get_vring_base
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Fixes: 6d0b222666 ("vdpa: Adapt vhost_vdpa_get_vring_base to SVQ")
-
-Acked-by: Jason Wang <jasowang at redhat.com>
-Signed-off-by: Eugenio Pérez <eperezma at redhat.com>
-Message-Id: <20220512175747.142058-4-eperezma at redhat.com>
-Reviewed-by: Michael S. Tsirkin <mst at redhat.com>
-Signed-off-by: Michael S. Tsirkin <mst at redhat.com>
-(cherry-picked from commit 639036477ef890958415967e753ca2cbb348c16c)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- hw/virtio/vhost-vdpa.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
-index 8adf7c0b92..8555a84f87 100644
---- a/hw/virtio/vhost-vdpa.c
-+++ b/hw/virtio/vhost-vdpa.c
-@@ -1170,11 +1170,11 @@ static int vhost_vdpa_get_vring_base(struct vhost_dev *dev,
- struct vhost_vring_state *ring)
- {
- struct vhost_vdpa *v = dev->opaque;
-+ int vdpa_idx = ring->index - dev->vq_index;
- int ret;
-
- if (v->shadow_vqs_enabled) {
-- VhostShadowVirtqueue *svq = g_ptr_array_index(v->shadow_vqs,
-- ring->index);
-+ VhostShadowVirtqueue *svq = g_ptr_array_index(v->shadow_vqs, vdpa_idx);
-
- /*
- * Setting base as last used idx, so destination will see as available
diff --git a/debian/patches/extra/0017-vdpa-Fix-index-calculus-at-vhost_vdpa_svqs_start.patch b/debian/patches/extra/0017-vdpa-Fix-index-calculus-at-vhost_vdpa_svqs_start.patch
deleted file mode 100644
index 8c74f0c..0000000
--- a/debian/patches/extra/0017-vdpa-Fix-index-calculus-at-vhost_vdpa_svqs_start.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma at redhat.com>
-Date: Thu, 12 May 2022 19:57:45 +0200
-Subject: [PATCH] vdpa: Fix index calculus at vhost_vdpa_svqs_start
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-With the introduction of MQ the index of the vq needs to be calculated
-with the device model vq_index.
-
-Signed-off-by: Eugenio Pérez <eperezma at redhat.com>
-Acked-by: Jason Wang <jasowang at redhat.com>
-Message-Id: <20220512175747.142058-5-eperezma at redhat.com>
-Reviewed-by: Michael S. Tsirkin <mst at redhat.com>
-Signed-off-by: Michael S. Tsirkin <mst at redhat.com>
-(cherry-picked from commit 1c82fdfef8a227518ffecae9d419bcada995c202)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- hw/virtio/vhost-vdpa.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
-index 8555a84f87..aa43cfa7d9 100644
---- a/hw/virtio/vhost-vdpa.c
-+++ b/hw/virtio/vhost-vdpa.c
-@@ -1016,7 +1016,7 @@ static bool vhost_vdpa_svqs_start(struct vhost_dev *dev)
- VirtQueue *vq = virtio_get_queue(dev->vdev, dev->vq_index + i);
- VhostShadowVirtqueue *svq = g_ptr_array_index(v->shadow_vqs, i);
- struct vhost_vring_addr addr = {
-- .index = i,
-+ .index = dev->vq_index + i,
- };
- int r;
- bool ok = vhost_vdpa_svq_setup(dev, svq, i, &err);
diff --git a/debian/patches/extra/0018-hw-virtio-Replace-g_memdup-by-g_memdup2.patch b/debian/patches/extra/0018-hw-virtio-Replace-g_memdup-by-g_memdup2.patch
deleted file mode 100644
index 12ea0ad..0000000
--- a/debian/patches/extra/0018-hw-virtio-Replace-g_memdup-by-g_memdup2.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <philmd at redhat.com>
-Date: Thu, 12 May 2022 19:57:46 +0200
-Subject: [PATCH] hw/virtio: Replace g_memdup() by g_memdup2()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Per https://discourse.gnome.org/t/port-your-module-from-g-memdup-to-g-memdup2-now/5538
-
- The old API took the size of the memory to duplicate as a guint,
- whereas most memory functions take memory sizes as a gsize. This
- made it easy to accidentally pass a gsize to g_memdup(). For large
- values, that would lead to a silent truncation of the size from 64
- to 32 bits, and result in a heap area being returned which is
- significantly smaller than what the caller expects. This can likely
- be exploited in various modules to cause a heap buffer overflow.
-
-Replace g_memdup() by the safer g_memdup2() wrapper.
-
-Acked-by: Jason Wang <jasowang at redhat.com>
-Acked-by: Eugenio Pérez <eperezma at redhat.com>
-Signed-off-by: Philippe Mathieu-Daudé <philmd at redhat.com>
-Message-Id: <20220512175747.142058-6-eperezma at redhat.com>
-Reviewed-by: Michael S. Tsirkin <mst at redhat.com>
-Signed-off-by: Michael S. Tsirkin <mst at redhat.com>
-(cherry-picked from commit d792199de55ca5cb5334016884039c740290b5c7)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- hw/net/virtio-net.c | 3 ++-
- hw/virtio/virtio-crypto.c | 6 +++---
- 2 files changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
-index 1067e72b39..e4748a7e6c 100644
---- a/hw/net/virtio-net.c
-+++ b/hw/net/virtio-net.c
-@@ -1443,7 +1443,8 @@ static void virtio_net_handle_ctrl(VirtIODevice *vdev, VirtQueue *vq)
- }
-
- iov_cnt = elem->out_num;
-- iov2 = iov = g_memdup(elem->out_sg, sizeof(struct iovec) * elem->out_num);
-+ iov2 = iov = g_memdup2(elem->out_sg,
-+ sizeof(struct iovec) * elem->out_num);
- s = iov_to_buf(iov, iov_cnt, 0, &ctrl, sizeof(ctrl));
- iov_discard_front(&iov, &iov_cnt, sizeof(ctrl));
- if (s != sizeof(ctrl)) {
-diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c
-index dcd80b904d..0e31e3cc04 100644
---- a/hw/virtio/virtio-crypto.c
-+++ b/hw/virtio/virtio-crypto.c
-@@ -242,7 +242,7 @@ static void virtio_crypto_handle_ctrl(VirtIODevice *vdev, VirtQueue *vq)
- }
-
- out_num = elem->out_num;
-- out_iov_copy = g_memdup(elem->out_sg, sizeof(out_iov[0]) * out_num);
-+ out_iov_copy = g_memdup2(elem->out_sg, sizeof(out_iov[0]) * out_num);
- out_iov = out_iov_copy;
-
- in_num = elem->in_num;
-@@ -605,11 +605,11 @@ virtio_crypto_handle_request(VirtIOCryptoReq *request)
- }
-
- out_num = elem->out_num;
-- out_iov_copy = g_memdup(elem->out_sg, sizeof(out_iov[0]) * out_num);
-+ out_iov_copy = g_memdup2(elem->out_sg, sizeof(out_iov[0]) * out_num);
- out_iov = out_iov_copy;
-
- in_num = elem->in_num;
-- in_iov_copy = g_memdup(elem->in_sg, sizeof(in_iov[0]) * in_num);
-+ in_iov_copy = g_memdup2(elem->in_sg, sizeof(in_iov[0]) * in_num);
- in_iov = in_iov_copy;
-
- if (unlikely(iov_to_buf(out_iov, out_num, 0, &req, sizeof(req))
diff --git a/debian/patches/extra/0019-vhost-Fix-element-in-vhost_svq_add-failure.patch b/debian/patches/extra/0019-vhost-Fix-element-in-vhost_svq_add-failure.patch
deleted file mode 100644
index daa5bca..0000000
--- a/debian/patches/extra/0019-vhost-Fix-element-in-vhost_svq_add-failure.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma at redhat.com>
-Date: Thu, 12 May 2022 19:57:47 +0200
-Subject: [PATCH] vhost: Fix element in vhost_svq_add failure
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Coverity rightly reports that is not free in that case.
-
-Fixes: Coverity CID 1487559
-Fixes: 100890f7ca ("vhost: Shadow virtqueue buffers forwarding")
-
-Signed-off-by: Eugenio Pérez <eperezma at redhat.com>
-Message-Id: <20220512175747.142058-7-eperezma at redhat.com>
-Reviewed-by: Michael S. Tsirkin <mst at redhat.com>
-Signed-off-by: Michael S. Tsirkin <mst at redhat.com>
-(cherry-picked from commit 5181db132b587754dda3a520eec923b87a65bbb7)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- hw/virtio/vhost-shadow-virtqueue.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-virtqueue.c
-index 31fc50907d..06d0bb39d9 100644
---- a/hw/virtio/vhost-shadow-virtqueue.c
-+++ b/hw/virtio/vhost-shadow-virtqueue.c
-@@ -199,11 +199,19 @@ static bool vhost_svq_add_split(VhostShadowVirtqueue *svq,
- return true;
- }
-
-+/**
-+ * Add an element to a SVQ.
-+ *
-+ * The caller must check that there is enough slots for the new element. It
-+ * takes ownership of the element: In case of failure, it is free and the SVQ
-+ * is considered broken.
-+ */
- static bool vhost_svq_add(VhostShadowVirtqueue *svq, VirtQueueElement *elem)
- {
- unsigned qemu_head;
- bool ok = vhost_svq_add_split(svq, elem, &qemu_head);
- if (unlikely(!ok)) {
-+ g_free(elem);
- return false;
- }
-
diff --git a/debian/patches/extra/0020-io_uring-fix-short-read-slow-path.patch b/debian/patches/extra/0020-io_uring-fix-short-read-slow-path.patch
deleted file mode 100644
index 88cf137..0000000
--- a/debian/patches/extra/0020-io_uring-fix-short-read-slow-path.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Dominique Martinet <dominique.martinet at atmark-techno.com>
-Date: Thu, 30 Jun 2022 10:01:37 +0900
-Subject: [PATCH] io_uring: fix short read slow path
-
-sqeq.off here is the offset to read within the disk image, so obviously
-not 'nread' (the amount we just read), but as the author meant to write
-its current value incremented by the amount we just read.
-
-Normally recent versions of linux will not issue short reads,
-but it can happen so we should fix this.
-
-This lead to weird image corruptions when short read happened
-
-Fixes: 6663a0a33764 ("block/io_uring: implements interfaces for io_uring")
-Link: https://lkml.kernel.org/r/YrrFGO4A1jS0GI0G@atmark-techno.com
-Signed-off-by: Dominique Martinet <dominique.martinet at atmark-techno.com>
-Message-Id: <20220630010137.2518851-1-dominique.martinet at atmark-techno.com>
-Reviewed-by: Hanna Reitz <hreitz at redhat.com>
-Reviewed-by: Stefano Garzarella <sgarzare at redhat.com>
-Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
-(cherry-picked from commit c06fc7ce147e57ab493bad9263f1601b8298484b)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- block/io_uring.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/block/io_uring.c b/block/io_uring.c
-index 782afdb433..e451e55de0 100644
---- a/block/io_uring.c
-+++ b/block/io_uring.c
-@@ -89,7 +89,7 @@ static void luring_resubmit_short_read(LuringState *s, LuringAIOCB *luringcb,
- trace_luring_resubmit_short_read(s, luringcb, nread);
-
- /* Update read position */
-- luringcb->total_read = nread;
-+ luringcb->total_read += nread;
- remaining = luringcb->qiov->size - luringcb->total_read;
-
- /* Shorten qiov */
-@@ -103,7 +103,7 @@ static void luring_resubmit_short_read(LuringState *s, LuringAIOCB *luringcb,
- remaining);
-
- /* Update sqe */
-- luringcb->sqeq.off = nread;
-+ luringcb->sqeq.off += nread;
- luringcb->sqeq.addr = (__u64)(uintptr_t)luringcb->resubmit_qiov.iov;
- luringcb->sqeq.len = luringcb->resubmit_qiov.niov;
-
diff --git a/debian/patches/extra/0021-e1000-set-RX-descriptor-status-in-a-separate-operati.patch b/debian/patches/extra/0021-e1000-set-RX-descriptor-status-in-a-separate-operati.patch
deleted file mode 100644
index ee66fba..0000000
--- a/debian/patches/extra/0021-e1000-set-RX-descriptor-status-in-a-separate-operati.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Ding Hui <dinghui at sangfor.com.cn>
-Date: Wed, 29 Jun 2022 17:40:26 +0800
-Subject: [PATCH] e1000: set RX descriptor status in a separate operation
-
-The code of setting RX descriptor status field maybe work fine in
-previously, however with the update of glibc version, it shows two
-issues when guest using dpdk receive packets:
-
- 1. The dpdk has a certain probability getting wrong buffer_addr
-
- this impact may be not obvious, such as lost a packet once in
- a while
-
- 2. The dpdk may consume a packet twice when scan the RX desc queue
- over again
-
- this impact will lead a infinite wait in Qemu, since the RDT
- (tail pointer) be inscreased to equal to RDH by unexpected,
- which regard as the RX desc queue is full
-
-Write a whole of RX desc with DD flag on is not quite correct, because
-when the underlying implementation of memcpy using XMM registers to
-copy e1000_rx_desc (when AVX or something else CPU feature is usable),
-the bytes order of desc writing to memory is indeterminacy
-
-We can use full-scale test case to reproduce the issue-2 by
-https://github.com/BASM/qemu_dpdk_e1000_test (thanks to Leonid Myravjev)
-
-I also write a POC test case at https://github.com/cdkey/e1000_poc
-which can reproduce both of them, and easy to verify the patch effect.
-
-The hw watchpoint also shows that, when Qemu using XMM related instructions
-writing 16 bytes e1000_rx_desc, concurrent with DPDK using movb
-writing 1 byte status, the final result of writing to memory will be one
-of them, if it made by Qemu which DD flag is on, DPDK will consume it
-again.
-
-Setting DD status in a separate operation, can prevent the impact of
-disorder memory writing by memcpy, also avoid unexpected data when
-concurrent writing status by qemu and guest dpdk.
-
-Links: https://lore.kernel.org/qemu-devel/20200102110504.GG121208@stefanha-x1.localdomain/T/
-
-Reported-by: Leonid Myravjev <asm at asm.pp.ru>
-Cc: Stefan Hajnoczi <stefanha at gmail.com>
-Cc: Paolo Bonzini <pbonzini at redhat.com>
-Cc: Michael S. Tsirkin <mst at redhat.com>
-Cc: qemu-stable at nongnu.org
-Tested-by: Jing Zhang <zhangjing at sangfor.com.cn>
-Reviewed-by: Frank Lee <lifan38153 at sangfor.com.cn>
-Signed-off-by: Ding Hui <dinghui at sangfor.com.cn>
-Signed-off-by: Jason Wang <jasowang at redhat.com>
-(cherry-picked from commit 034d00d4858161e1d4cff82d8d230bce874a04d3)
-Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
----
- hw/net/e1000.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/hw/net/e1000.c b/hw/net/e1000.c
-index f5bc81296d..e26e0a64c1 100644
---- a/hw/net/e1000.c
-+++ b/hw/net/e1000.c
-@@ -979,7 +979,7 @@ e1000_receive_iov(NetClientState *nc, const struct iovec *iov, int iovcnt)
- base = rx_desc_base(s) + sizeof(desc) * s->mac_reg[RDH];
- pci_dma_read(d, base, &desc, sizeof(desc));
- desc.special = vlan_special;
-- desc.status |= (vlan_status | E1000_RXD_STAT_DD);
-+ desc.status &= ~E1000_RXD_STAT_DD;
- if (desc.buffer_addr) {
- if (desc_offset < size) {
- size_t iov_copy;
-@@ -1013,6 +1013,9 @@ e1000_receive_iov(NetClientState *nc, const struct iovec *iov, int iovcnt)
- DBGOUT(RX, "Null RX descriptor!!\n");
- }
- pci_dma_write(d, base, &desc, sizeof(desc));
-+ desc.status |= (vlan_status | E1000_RXD_STAT_DD);
-+ pci_dma_write(d, base + offsetof(struct e1000_rx_desc, status),
-+ &desc.status, sizeof(desc.status));
-
- if (++s->mac_reg[RDH] * sizeof(desc) >= s->mac_reg[RDLEN])
- s->mac_reg[RDH] = 0;
diff --git a/debian/patches/pve/0001-PVE-Config-block-file-change-locking-default-to-off.patch b/debian/patches/pve/0001-PVE-Config-block-file-change-locking-default-to-off.patch
index 700afed..b21d8a7 100644
--- a/debian/patches/pve/0001-PVE-Config-block-file-change-locking-default-to-off.patch
+++ b/debian/patches/pve/0001-PVE-Config-block-file-change-locking-default-to-off.patch
@@ -14,10 +14,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/block/file-posix.c b/block/file-posix.c
-index 39a3d6dbe6..e5bf5d59bf 100644
+index 48cd096624..3d60b80286 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
-@@ -554,7 +554,7 @@ static QemuOptsList raw_runtime_opts = {
+@@ -553,7 +553,7 @@ static QemuOptsList raw_runtime_opts = {
{
.name = "locking",
.type = QEMU_OPT_STRING,
@@ -26,7 +26,7 @@ index 39a3d6dbe6..e5bf5d59bf 100644
},
{
.name = "pr-manager",
-@@ -654,7 +654,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
+@@ -653,7 +653,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
s->use_lock = false;
break;
case ON_OFF_AUTO_AUTO:
diff --git a/debian/patches/pve/0003-PVE-Config-set-the-CPU-model-to-kvm64-32-instead-of-.patch b/debian/patches/pve/0003-PVE-Config-set-the-CPU-model-to-kvm64-32-instead-of-.patch
index 6a19ef0..0184097 100644
--- a/debian/patches/pve/0003-PVE-Config-set-the-CPU-model-to-kvm64-32-instead-of-.patch
+++ b/debian/patches/pve/0003-PVE-Config-set-the-CPU-model-to-kvm64-32-instead-of-.patch
@@ -10,10 +10,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
-index 982c532353..5395e7e471 100644
+index 82004b65b9..4868db8f94 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
-@@ -2087,9 +2087,9 @@ uint64_t cpu_get_tsc(CPUX86State *env);
+@@ -2133,9 +2133,9 @@ uint64_t cpu_get_tsc(CPUX86State *env);
#define CPU_RESOLVING_TYPE TYPE_X86_CPU
#ifdef TARGET_X86_64
diff --git a/debian/patches/pve/0005-PVE-Config-glusterfs-no-default-logfile-if-daemonize.patch b/debian/patches/pve/0005-PVE-Config-glusterfs-no-default-logfile-if-daemonize.patch
index f8775dc..0890369 100644
--- a/debian/patches/pve/0005-PVE-Config-glusterfs-no-default-logfile-if-daemonize.patch
+++ b/debian/patches/pve/0005-PVE-Config-glusterfs-no-default-logfile-if-daemonize.patch
@@ -9,7 +9,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/block/gluster.c b/block/gluster.c
-index 592e71b22a..aebfece6eb 100644
+index b60213ab80..93da76bc31 100644
--- a/block/gluster.c
+++ b/block/gluster.c
@@ -42,7 +42,7 @@
diff --git a/debian/patches/pve/0006-PVE-Config-rbd-block-rbd-disable-rbd_cache_writethro.patch b/debian/patches/pve/0006-PVE-Config-rbd-block-rbd-disable-rbd_cache_writethro.patch
index ce4366d..a87a46a 100644
--- a/debian/patches/pve/0006-PVE-Config-rbd-block-rbd-disable-rbd_cache_writethro.patch
+++ b/debian/patches/pve/0006-PVE-Config-rbd-block-rbd-disable-rbd_cache_writethro.patch
@@ -18,7 +18,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 2 insertions(+)
diff --git a/block/rbd.c b/block/rbd.c
-index 6caf35cbba..0cec24c86d 100644
+index f826410f40..64a8d7d48b 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -820,6 +820,8 @@ static int qemu_rbd_connect(rados_t *cluster, rados_ioctx_t *io_ctx,
diff --git a/debian/patches/pve/0007-PVE-Up-qmp-add-get_link_status.patch b/debian/patches/pve/0007-PVE-Up-qmp-add-get_link_status.patch
index d6b5440..cd90b46 100644
--- a/debian/patches/pve/0007-PVE-Up-qmp-add-get_link_status.patch
+++ b/debian/patches/pve/0007-PVE-Up-qmp-add-get_link_status.patch
@@ -11,10 +11,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
3 files changed, 43 insertions(+)
diff --git a/net/net.c b/net/net.c
-index f0d14dbfc1..6d476c47ef 100644
+index 2db160e063..8329347891 100644
--- a/net/net.c
+++ b/net/net.c
-@@ -1334,6 +1334,33 @@ void hmp_info_network(Monitor *mon, const QDict *qdict)
+@@ -1343,6 +1343,33 @@ void hmp_info_network(Monitor *mon, const QDict *qdict)
}
}
@@ -49,7 +49,7 @@ index f0d14dbfc1..6d476c47ef 100644
{
NetClientState *nc;
diff --git a/qapi/net.json b/qapi/net.json
-index b92f3f5fb4..52c7e1f82b 100644
+index 75ba2cb989..a3c93ab88f 100644
--- a/qapi/net.json
+++ b/qapi/net.json
@@ -35,6 +35,21 @@
@@ -75,12 +75,12 @@ index b92f3f5fb4..52c7e1f82b 100644
# @netdev_add:
#
diff --git a/qapi/pragma.json b/qapi/pragma.json
-index e6a021c19c..41139d8645 100644
+index 7f810b0e97..a2358e303a 100644
--- a/qapi/pragma.json
+++ b/qapi/pragma.json
-@@ -25,6 +25,7 @@
- 'system_reset',
+@@ -26,6 +26,7 @@
'system_wakeup' ],
+ # Commands allowed to return a non-dictionary
'command-returns-exceptions': [
+ 'get_link_status',
'human-monitor-command',
diff --git a/debian/patches/pve/0008-PVE-Up-glusterfs-allow-partial-reads.patch b/debian/patches/pve/0008-PVE-Up-glusterfs-allow-partial-reads.patch
index 1c16ff7..88becc5 100644
--- a/debian/patches/pve/0008-PVE-Up-glusterfs-allow-partial-reads.patch
+++ b/debian/patches/pve/0008-PVE-Up-glusterfs-allow-partial-reads.patch
@@ -16,7 +16,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/block/gluster.c b/block/gluster.c
-index aebfece6eb..3b7ee2f649 100644
+index 93da76bc31..1079b6186b 100644
--- a/block/gluster.c
+++ b/block/gluster.c
@@ -57,6 +57,7 @@ typedef struct GlusterAIOCB {
diff --git a/debian/patches/pve/0009-PVE-Up-qemu-img-return-success-on-info-without-snaps.patch b/debian/patches/pve/0009-PVE-Up-qemu-img-return-success-on-info-without-snaps.patch
index 0d67cd2..b2a27d8 100644
--- a/debian/patches/pve/0009-PVE-Up-qemu-img-return-success-on-info-without-snaps.patch
+++ b/debian/patches/pve/0009-PVE-Up-qemu-img-return-success-on-info-without-snaps.patch
@@ -9,10 +9,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/qemu-img.c b/qemu-img.c
-index 1caddfb23a..2782e181c0 100644
+index 7d4b33b3da..bb36f42dd2 100644
--- a/qemu-img.c
+++ b/qemu-img.c
-@@ -3005,7 +3005,8 @@ static int img_info(int argc, char **argv)
+@@ -3010,7 +3010,8 @@ static int img_info(int argc, char **argv)
list = collect_image_info_list(image_opts, filename, fmt, chain,
force_share);
if (!list) {
diff --git a/debian/patches/pve/0010-PVE-Up-qemu-img-dd-add-osize-and-read-from-to-stdin-.patch b/debian/patches/pve/0010-PVE-Up-qemu-img-dd-add-osize-and-read-from-to-stdin-.patch
index 7163f0f..bed5c25 100644
--- a/debian/patches/pve/0010-PVE-Up-qemu-img-dd-add-osize-and-read-from-to-stdin-.patch
+++ b/debian/patches/pve/0010-PVE-Up-qemu-img-dd-add-osize-and-read-from-to-stdin-.patch
@@ -31,10 +31,11 @@ override the output file's size.
Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
+Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
qemu-img-cmds.hx | 4 +-
- qemu-img.c | 187 +++++++++++++++++++++++++++++------------------
- 2 files changed, 119 insertions(+), 72 deletions(-)
+ qemu-img.c | 202 ++++++++++++++++++++++++++++++-----------------
+ 2 files changed, 133 insertions(+), 73 deletions(-)
diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
index 1b1dab5b17..d1616c045a 100644
@@ -53,10 +54,10 @@ index 1b1dab5b17..d1616c045a 100644
DEF("info", img_info,
diff --git a/qemu-img.c b/qemu-img.c
-index 2782e181c0..8cd43b3601 100644
+index bb36f42dd2..74afcb79ef 100644
--- a/qemu-img.c
+++ b/qemu-img.c
-@@ -4821,10 +4821,12 @@ static int img_bitmap(int argc, char **argv)
+@@ -4826,10 +4826,12 @@ static int img_bitmap(int argc, char **argv)
#define C_IF 04
#define C_OF 010
#define C_SKIP 020
@@ -69,7 +70,7 @@ index 2782e181c0..8cd43b3601 100644
};
struct DdIo {
-@@ -4900,6 +4902,19 @@ static int img_dd_skip(const char *arg,
+@@ -4905,6 +4907,19 @@ static int img_dd_skip(const char *arg,
return 0;
}
@@ -89,7 +90,7 @@ index 2782e181c0..8cd43b3601 100644
static int img_dd(int argc, char **argv)
{
int ret = 0;
-@@ -4940,6 +4955,7 @@ static int img_dd(int argc, char **argv)
+@@ -4945,6 +4960,7 @@ static int img_dd(int argc, char **argv)
{ "if", img_dd_if, C_IF },
{ "of", img_dd_of, C_OF },
{ "skip", img_dd_skip, C_SKIP },
@@ -97,7 +98,7 @@ index 2782e181c0..8cd43b3601 100644
{ NULL, NULL, 0 }
};
const struct option long_options[] = {
-@@ -5015,91 +5031,112 @@ static int img_dd(int argc, char **argv)
+@@ -5020,91 +5036,112 @@ static int img_dd(int argc, char **argv)
arg = NULL;
}
@@ -153,9 +154,9 @@ index 2782e181c0..8cd43b3601 100644
}
- create_opts = qemu_opts_append(create_opts, drv->create_opts);
- create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
-
-- opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
-
+- opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
+
- size = blk_getlength(blk1);
- if (size < 0) {
- error_report("Failed to get size for '%s'", in.filename);
@@ -274,41 +275,54 @@ index 2782e181c0..8cd43b3601 100644
}
if (dd.flags & C_SKIP && (in.offset > INT64_MAX / in.bsz ||
-@@ -5117,11 +5154,17 @@ static int img_dd(int argc, char **argv)
+@@ -5121,20 +5158,43 @@ static int img_dd(int argc, char **argv)
+ in.buf = g_new(uint8_t, in.bsz);
for (out_pos = 0; in_pos < size; block_count++) {
- int in_ret, out_ret;
++ int in_ret, out_ret;
+ int bytes = (in_pos + in.bsz > size) ? size - in_pos : in.bsz;
-
-- if (in_pos + in.bsz > size) {
-- in_ret = blk_pread(blk1, in_pos, in.buf, size - in_pos);
-+ size_t in_bsz = in_pos + in.bsz > size ? size - in_pos : in.bsz;
+- ret = blk_pread(blk1, in_pos, bytes, in.buf, 0);
+- if (ret < 0) {
+ if (blk1) {
-+ in_ret = blk_pread(blk1, in_pos, in.buf, in_bsz);
- } else {
-- in_ret = blk_pread(blk1, in_pos, in.buf, in.bsz);
-+ in_ret = read(STDIN_FILENO, in.buf, in_bsz);
++ in_ret = blk_pread(blk1, in_pos, bytes, in.buf, 0);
++ if (in_ret == 0) {
++ in_ret = bytes;
++ }
++ } else {
++ in_ret = read(STDIN_FILENO, in.buf, bytes);
+ if (in_ret == 0) {
+ /* early EOF is considered an error */
+ error_report("Input ended unexpectedly");
+ ret = -1;
+ goto out;
+ }
- }
- if (in_ret < 0) {
++ }
++ if (in_ret < 0) {
error_report("error while reading from input image file: %s",
-@@ -5131,9 +5174,13 @@ static int img_dd(int argc, char **argv)
+- strerror(-ret));
++ strerror(-in_ret));
++ ret = -1;
+ goto out;
}
- in_pos += in_ret;
+ in_pos += bytes;
-- out_ret = blk_pwrite(blk2, out_pos, in.buf, in_ret, 0);
+- ret = blk_pwrite(blk2, out_pos, bytes, in.buf, 0);
+- if (ret < 0) {
+ if (blk2) {
-+ out_ret = blk_pwrite(blk2, out_pos, in.buf, in_ret, 0);
++ out_ret = blk_pwrite(blk2, out_pos, in_ret, in.buf, 0);
++ if (out_ret == 0) {
++ out_ret = in_ret;
++ }
+ } else {
+ out_ret = write(STDOUT_FILENO, in.buf, in_ret);
+ }
-
-- if (out_ret < 0) {
++
+ if (out_ret != in_ret) {
error_report("error while writing to output image file: %s",
- strerror(-out_ret));
- ret = -1;
+- strerror(-ret));
++ strerror(-out_ret));
++ ret = -1;
+ goto out;
+ }
+ out_pos += bytes;
diff --git a/debian/patches/pve/0011-PVE-Up-qemu-img-dd-add-isize-parameter.patch b/debian/patches/pve/0011-PVE-Up-qemu-img-dd-add-isize-parameter.patch
index 29df3de..f367a53 100644
--- a/debian/patches/pve/0011-PVE-Up-qemu-img-dd-add-isize-parameter.patch
+++ b/debian/patches/pve/0011-PVE-Up-qemu-img-dd-add-isize-parameter.patch
@@ -10,15 +10,16 @@ an expected end of input.
Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
+Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
qemu-img.c | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/qemu-img.c b/qemu-img.c
-index 8cd43b3601..67033b2d2c 100644
+index 74afcb79ef..14594d44b6 100644
--- a/qemu-img.c
+++ b/qemu-img.c
-@@ -4822,11 +4822,13 @@ static int img_bitmap(int argc, char **argv)
+@@ -4827,11 +4827,13 @@ static int img_bitmap(int argc, char **argv)
#define C_OF 010
#define C_SKIP 020
#define C_OSIZE 040
@@ -32,7 +33,7 @@ index 8cd43b3601..67033b2d2c 100644
};
struct DdIo {
-@@ -4915,6 +4917,19 @@ static int img_dd_osize(const char *arg,
+@@ -4920,6 +4922,19 @@ static int img_dd_osize(const char *arg,
return 0;
}
@@ -52,7 +53,7 @@ index 8cd43b3601..67033b2d2c 100644
static int img_dd(int argc, char **argv)
{
int ret = 0;
-@@ -4929,12 +4944,14 @@ static int img_dd(int argc, char **argv)
+@@ -4934,12 +4949,14 @@ static int img_dd(int argc, char **argv)
int c, i;
const char *out_fmt = "raw";
const char *fmt = NULL;
@@ -68,7 +69,7 @@ index 8cd43b3601..67033b2d2c 100644
};
struct DdIo in = {
.bsz = 512, /* Block size is by default 512 bytes */
-@@ -4956,6 +4973,7 @@ static int img_dd(int argc, char **argv)
+@@ -4961,6 +4978,7 @@ static int img_dd(int argc, char **argv)
{ "of", img_dd_of, C_OF },
{ "skip", img_dd_skip, C_SKIP },
{ "osize", img_dd_osize, C_OSIZE },
@@ -76,7 +77,7 @@ index 8cd43b3601..67033b2d2c 100644
{ NULL, NULL, 0 }
};
const struct option long_options[] = {
-@@ -5152,14 +5170,18 @@ static int img_dd(int argc, char **argv)
+@@ -5157,9 +5175,10 @@ static int img_dd(int argc, char **argv)
in.buf = g_new(uint8_t, in.bsz);
@@ -84,12 +85,14 @@ index 8cd43b3601..67033b2d2c 100644
+ readsize = (dd.isize > 0) ? dd.isize : size;
+ for (out_pos = 0; in_pos < readsize; block_count++) {
int in_ret, out_ret;
-- size_t in_bsz = in_pos + in.bsz > size ? size - in_pos : in.bsz;
-+ size_t in_bsz = in_pos + in.bsz > readsize ? readsize - in_pos : in.bsz;
+- int bytes = (in_pos + in.bsz > size) ? size - in_pos : in.bsz;
++ int bytes = (in_pos + in.bsz > readsize) ? readsize - in_pos : in.bsz;
if (blk1) {
- in_ret = blk_pread(blk1, in_pos, in.buf, in_bsz);
+ in_ret = blk_pread(blk1, in_pos, bytes, in.buf, 0);
+ if (in_ret == 0) {
+@@ -5168,6 +5187,9 @@ static int img_dd(int argc, char **argv)
} else {
- in_ret = read(STDIN_FILENO, in.buf, in_bsz);
+ in_ret = read(STDIN_FILENO, in.buf, bytes);
if (in_ret == 0) {
+ if (dd.isize == 0) {
+ goto out;
diff --git a/debian/patches/pve/0012-PVE-Up-qemu-img-dd-add-n-skip_create.patch b/debian/patches/pve/0012-PVE-Up-qemu-img-dd-add-n-skip_create.patch
index 39991dd..f24932d 100644
--- a/debian/patches/pve/0012-PVE-Up-qemu-img-dd-add-n-skip_create.patch
+++ b/debian/patches/pve/0012-PVE-Up-qemu-img-dd-add-n-skip_create.patch
@@ -13,7 +13,7 @@ Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
3 files changed, 26 insertions(+), 12 deletions(-)
diff --git a/docs/tools/qemu-img.rst b/docs/tools/qemu-img.rst
-index 8885ea11cf..33979b7430 100644
+index 85a6e05b35..699229eef6 100644
--- a/docs/tools/qemu-img.rst
+++ b/docs/tools/qemu-img.rst
@@ -208,6 +208,10 @@ Parameters to convert subcommand:
@@ -65,10 +65,10 @@ index d1616c045a..b5b0bb4467 100644
DEF("info", img_info,
diff --git a/qemu-img.c b/qemu-img.c
-index 67033b2d2c..35c2bdc95c 100644
+index 14594d44b6..c6b4a5567d 100644
--- a/qemu-img.c
+++ b/qemu-img.c
-@@ -4946,7 +4946,7 @@ static int img_dd(int argc, char **argv)
+@@ -4951,7 +4951,7 @@ static int img_dd(int argc, char **argv)
const char *fmt = NULL;
int64_t size = 0, readsize = 0;
int64_t block_count = 0, out_pos, in_pos;
@@ -77,7 +77,7 @@ index 67033b2d2c..35c2bdc95c 100644
struct DdInfo dd = {
.flags = 0,
.count = 0,
-@@ -4984,7 +4984,7 @@ static int img_dd(int argc, char **argv)
+@@ -4989,7 +4989,7 @@ static int img_dd(int argc, char **argv)
{ 0, 0, 0, 0 }
};
@@ -86,7 +86,7 @@ index 67033b2d2c..35c2bdc95c 100644
if (c == EOF) {
break;
}
-@@ -5004,6 +5004,9 @@ static int img_dd(int argc, char **argv)
+@@ -5009,6 +5009,9 @@ static int img_dd(int argc, char **argv)
case 'h':
help();
break;
@@ -96,7 +96,7 @@ index 67033b2d2c..35c2bdc95c 100644
case 'U':
force_share = true;
break;
-@@ -5134,13 +5137,15 @@ static int img_dd(int argc, char **argv)
+@@ -5139,13 +5142,15 @@ static int img_dd(int argc, char **argv)
size - in.bsz * in.offset, &error_abort);
}
diff --git a/debian/patches/pve/0013-PVE-virtio-balloon-improve-query-balloon.patch b/debian/patches/pve/0013-PVE-virtio-balloon-improve-query-balloon.patch
index a52235f..12beef5 100644
--- a/debian/patches/pve/0013-PVE-virtio-balloon-improve-query-balloon.patch
+++ b/debian/patches/pve/0013-PVE-virtio-balloon-improve-query-balloon.patch
@@ -14,10 +14,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
3 files changed, 81 insertions(+), 4 deletions(-)
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
-index 163d244eb4..389907f1f8 100644
+index 73ac5eb675..bbfe7eca62 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
-@@ -813,8 +813,37 @@ static uint64_t virtio_balloon_get_features(VirtIODevice *vdev, uint64_t f,
+@@ -806,8 +806,37 @@ static uint64_t virtio_balloon_get_features(VirtIODevice *vdev, uint64_t f,
static void virtio_balloon_stat(void *opaque, BalloonInfo *info)
{
VirtIOBalloon *dev = opaque;
@@ -58,10 +58,10 @@ index 163d244eb4..389907f1f8 100644
static void virtio_balloon_to_target(void *opaque, ram_addr_t target)
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
-index 634968498b..5482dd0569 100644
+index c6cd6f91dd..15572befb1 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
-@@ -708,7 +708,35 @@ void hmp_info_balloon(Monitor *mon, const QDict *qdict)
+@@ -715,7 +715,35 @@ void hmp_info_balloon(Monitor *mon, const QDict *qdict)
return;
}
@@ -99,10 +99,10 @@ index 634968498b..5482dd0569 100644
qapi_free_BalloonInfo(info);
}
diff --git a/qapi/machine.json b/qapi/machine.json
-index d25a481ce4..3627172aed 100644
+index 6afd1936b0..8b4be9b718 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
-@@ -1018,10 +1018,30 @@
+@@ -1054,9 +1054,29 @@
# @actual: the logical size of the VM in bytes
# Formula used: logical_vm_size = vm_ram_size - balloon_size
#
@@ -123,7 +123,6 @@ index d25a481ce4..3627172aed 100644
+# @max_mem: amount of memory (in bytes) assigned to the guest
+#
# Since: 0.14
- #
##
-{ 'struct': 'BalloonInfo', 'data': {'actual': 'int' } }
+{ 'struct': 'BalloonInfo',
diff --git a/debian/patches/pve/0014-PVE-qapi-modify-query-machines.patch b/debian/patches/pve/0014-PVE-qapi-modify-query-machines.patch
index 8c7d776..cc3c92e 100644
--- a/debian/patches/pve/0014-PVE-qapi-modify-query-machines.patch
+++ b/debian/patches/pve/0014-PVE-qapi-modify-query-machines.patch
@@ -30,10 +30,10 @@ index 4f4ab30f8c..76fff60a6b 100644
info->default_cpu_type = g_strdup(mc->default_cpu_type);
info->has_default_cpu_type = true;
diff --git a/qapi/machine.json b/qapi/machine.json
-index 3627172aed..ca133e68ce 100644
+index 8b4be9b718..555458f785 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
-@@ -139,6 +139,8 @@
+@@ -138,6 +138,8 @@
#
# @is-default: whether the machine is default
#
@@ -42,7 +42,7 @@ index 3627172aed..ca133e68ce 100644
# @cpu-max: maximum number of CPUs supported by the machine type
# (since 1.5)
#
-@@ -160,7 +162,7 @@
+@@ -159,7 +161,7 @@
##
{ 'struct': 'MachineInfo',
'data': { 'name': 'str', '*alias': 'str',
diff --git a/debian/patches/pve/0015-PVE-qapi-modify-spice-query.patch b/debian/patches/pve/0015-PVE-qapi-modify-spice-query.patch
index 3f7fd62..c3f3fc3 100644
--- a/debian/patches/pve/0015-PVE-qapi-modify-spice-query.patch
+++ b/debian/patches/pve/0015-PVE-qapi-modify-spice-query.patch
@@ -12,10 +12,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
2 files changed, 8 insertions(+)
diff --git a/qapi/ui.json b/qapi/ui.json
-index 13a8bb82aa..4c34436ba7 100644
+index cf58ab4283..0be2388941 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
-@@ -300,11 +300,14 @@
+@@ -310,11 +310,14 @@
#
# @channels: a list of @SpiceChannel for each active spice channel
#
diff --git a/debian/patches/pve/0016-PVE-add-IOChannel-implementation-for-savevm-async.patch b/debian/patches/pve/0016-PVE-add-IOChannel-implementation-for-savevm-async.patch
new file mode 100644
index 0000000..e48eb9d
--- /dev/null
+++ b/debian/patches/pve/0016-PVE-add-IOChannel-implementation-for-savevm-async.patch
@@ -0,0 +1,280 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Fiona Ebner <f.ebner at proxmox.com>
+Date: Thu, 13 Oct 2022 11:33:50 +0200
+Subject: [PATCH] PVE: add IOChannel implementation for savevm-async
+
+based on migration/channel-block.c and the implementation that was
+present in migration/savevm-async.c before QEMU 7.1.
+
+Passes along read/write requests to the given BlockBackend, while
+ensuring that a read request going beyond the end results in a
+graceful short read.
+
+Additionally, allows tracking the current position from the outside
+(intended to be used for progress tracking).
+
+Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
+---
+ migration/channel-savevm-async.c | 181 +++++++++++++++++++++++++++++++
+ migration/channel-savevm-async.h | 51 +++++++++
+ migration/meson.build | 1 +
+ 3 files changed, 233 insertions(+)
+ create mode 100644 migration/channel-savevm-async.c
+ create mode 100644 migration/channel-savevm-async.h
+
+diff --git a/migration/channel-savevm-async.c b/migration/channel-savevm-async.c
+new file mode 100644
+index 0000000000..efea3842cf
+--- /dev/null
++++ b/migration/channel-savevm-async.c
+@@ -0,0 +1,181 @@
++/*
++ * QIO Channel implementation to be used by savevm-async QMP calls
++ */
++#include "qemu/osdep.h"
++#include "migration/channel-savevm-async.h"
++#include "qapi/error.h"
++#include "sysemu/block-backend.h"
++#include "trace.h"
++
++QIOChannelSavevmAsync *
++qio_channel_savevm_async_new(BlockBackend *be, size_t *bs_pos)
++{
++ QIOChannelSavevmAsync *ioc;
++
++ ioc = QIO_CHANNEL_SAVEVM_ASYNC(object_new(TYPE_QIO_CHANNEL_SAVEVM_ASYNC));
++
++ bdrv_ref(blk_bs(be));
++ ioc->be = be;
++ ioc->bs_pos = bs_pos;
++
++ return ioc;
++}
++
++
++static void
++qio_channel_savevm_async_finalize(Object *obj)
++{
++ QIOChannelSavevmAsync *ioc = QIO_CHANNEL_SAVEVM_ASYNC(obj);
++
++ if (ioc->be) {
++ bdrv_unref(blk_bs(ioc->be));
++ ioc->be = NULL;
++ }
++ ioc->bs_pos = NULL;
++}
++
++
++static ssize_t
++qio_channel_savevm_async_readv(QIOChannel *ioc,
++ const struct iovec *iov,
++ size_t niov,
++ int **fds,
++ size_t *nfds,
++ Error **errp)
++{
++ QIOChannelSavevmAsync *saioc = QIO_CHANNEL_SAVEVM_ASYNC(ioc);
++ BlockBackend *be = saioc->be;
++ int64_t maxlen = blk_getlength(be);
++ QEMUIOVector qiov;
++ size_t size;
++ int ret;
++
++ qemu_iovec_init_external(&qiov, (struct iovec *)iov, niov);
++
++ if (*saioc->bs_pos >= maxlen) {
++ error_setg(errp, "cannot read beyond maxlen");
++ return -1;
++ }
++
++ if (maxlen - *saioc->bs_pos < qiov.size) {
++ size = maxlen - *saioc->bs_pos;
++ } else {
++ size = qiov.size;
++ }
++
++ // returns 0 on success
++ ret = blk_preadv(be, *saioc->bs_pos, size, &qiov, 0);
++ if (ret < 0) {
++ error_setg(errp, "blk_preadv returned %d", ret);
++ return -1;
++ }
++
++ *saioc->bs_pos += size;
++ return size;
++}
++
++
++static ssize_t
++qio_channel_savevm_async_writev(QIOChannel *ioc,
++ const struct iovec *iov,
++ size_t niov,
++ int *fds,
++ size_t nfds,
++ int flags,
++ Error **errp)
++{
++ QIOChannelSavevmAsync *saioc = QIO_CHANNEL_SAVEVM_ASYNC(ioc);
++ BlockBackend *be = saioc->be;
++ QEMUIOVector qiov;
++ int ret;
++
++ qemu_iovec_init_external(&qiov, (struct iovec *)iov, niov);
++
++ if (qemu_in_coroutine()) {
++ ret = blk_co_pwritev(be, *saioc->bs_pos, qiov.size, &qiov, 0);
++ aio_wait_kick();
++ } else {
++ ret = blk_pwritev(be, *saioc->bs_pos, qiov.size, &qiov, 0);
++ }
++
++ if (ret < 0) {
++ return ret;
++ }
++
++ *saioc->bs_pos += qiov.size;
++ return qiov.size;
++}
++
++
++static int
++qio_channel_savevm_async_set_blocking(QIOChannel *ioc,
++ bool enabled,
++ Error **errp)
++{
++ if (!enabled) {
++ error_setg(errp, "Non-blocking mode not supported for savevm-async");
++ return -1;
++ }
++ return 0;
++}
++
++
++static int
++qio_channel_savevm_async_close(QIOChannel *ioc,
++ Error **errp)
++{
++ QIOChannelSavevmAsync *saioc = QIO_CHANNEL_SAVEVM_ASYNC(ioc);
++ int rv = bdrv_flush(blk_bs(saioc->be));
++
++ if (rv < 0) {
++ error_setg_errno(errp, -rv, "Unable to flush VMState");
++ return -1;
++ }
++
++ bdrv_unref(blk_bs(saioc->be));
++ saioc->be = NULL;
++ saioc->bs_pos = NULL;
++
++ return 0;
++}
++
++
++static void
++qio_channel_savevm_async_set_aio_fd_handler(QIOChannel *ioc,
++ AioContext *ctx,
++ IOHandler *io_read,
++ IOHandler *io_write,
++ void *opaque)
++{
++ // if channel-block starts doing something, check if this needs adaptation
++}
++
++
++static void
++qio_channel_savevm_async_class_init(ObjectClass *klass,
++ void *class_data G_GNUC_UNUSED)
++{
++ QIOChannelClass *ioc_klass = QIO_CHANNEL_CLASS(klass);
++
++ ioc_klass->io_writev = qio_channel_savevm_async_writev;
++ ioc_klass->io_readv = qio_channel_savevm_async_readv;
++ ioc_klass->io_set_blocking = qio_channel_savevm_async_set_blocking;
++ ioc_klass->io_close = qio_channel_savevm_async_close;
++ ioc_klass->io_set_aio_fd_handler = qio_channel_savevm_async_set_aio_fd_handler;
++}
++
++static const TypeInfo qio_channel_savevm_async_info = {
++ .parent = TYPE_QIO_CHANNEL,
++ .name = TYPE_QIO_CHANNEL_SAVEVM_ASYNC,
++ .instance_size = sizeof(QIOChannelSavevmAsync),
++ .instance_finalize = qio_channel_savevm_async_finalize,
++ .class_init = qio_channel_savevm_async_class_init,
++};
++
++static void
++qio_channel_savevm_async_register_types(void)
++{
++ type_register_static(&qio_channel_savevm_async_info);
++}
++
++type_init(qio_channel_savevm_async_register_types);
+diff --git a/migration/channel-savevm-async.h b/migration/channel-savevm-async.h
+new file mode 100644
+index 0000000000..17ae2cb261
+--- /dev/null
++++ b/migration/channel-savevm-async.h
+@@ -0,0 +1,51 @@
++/*
++ * QEMU I/O channels driver for savevm-async.c
++ *
++ * Copyright (c) 2022 Proxmox Server Solutions
++ *
++ * Authors:
++ * Fiona Ebner (f.ebner at proxmox.com)
++ *
++ * This work is licensed under the terms of the GNU GPL, version 2 or later.
++ * See the COPYING file in the top-level directory.
++ */
++
++#ifndef QIO_CHANNEL_SAVEVM_ASYNC_H
++#define QIO_CHANNEL_SAVEVM_ASYNC_H
++
++#include "io/channel.h"
++#include "qom/object.h"
++
++#define TYPE_QIO_CHANNEL_SAVEVM_ASYNC "qio-channel-savevm-async"
++OBJECT_DECLARE_SIMPLE_TYPE(QIOChannelSavevmAsync, QIO_CHANNEL_SAVEVM_ASYNC)
++
++
++/**
++ * QIOChannelSavevmAsync:
++ *
++ * The QIOChannelBlock object provides a channel implementation that is able to
++ * perform I/O on any BlockBackend whose BlockDriverState directly contains a
++ * VMState (as opposed to indirectly, like qcow2). It allows tracking the
++ * current position from the outside.
++ */
++struct QIOChannelSavevmAsync {
++ QIOChannel parent;
++ BlockBackend *be;
++ size_t *bs_pos;
++};
++
++
++/**
++ * qio_channel_savevm_async_new:
++ * @be: the block backend
++ * @bs_pos: used to keep track of the IOChannels current position
++ *
++ * Create a new IO channel object that can perform I/O on a BlockBackend object
++ * whose BlockDriverState directly contains a VMState.
++ *
++ * Returns: the new channel object
++ */
++QIOChannelSavevmAsync *
++qio_channel_savevm_async_new(BlockBackend *be, size_t *bs_pos);
++
++#endif /* QIO_CHANNEL_SAVEVM_ASYNC_H */
+diff --git a/migration/meson.build b/migration/meson.build
+index 690487cf1a..8cac83c06c 100644
+--- a/migration/meson.build
++++ b/migration/meson.build
+@@ -13,6 +13,7 @@ softmmu_ss.add(files(
+ 'block-dirty-bitmap.c',
+ 'channel.c',
+ 'channel-block.c',
++ 'channel-savevm-async.c',
+ 'colo-failover.c',
+ 'colo.c',
+ 'exec.c',
diff --git a/debian/patches/pve/0016-PVE-add-savevm-async-for-background-state-snapshots.patch b/debian/patches/pve/0017-PVE-add-savevm-async-for-background-state-snapshots.patch
similarity index 88%
rename from debian/patches/pve/0016-PVE-add-savevm-async-for-background-state-snapshots.patch
rename to debian/patches/pve/0017-PVE-add-savevm-async-for-background-state-snapshots.patch
index 6bb06ec..7058cb2 100644
--- a/debian/patches/pve/0016-PVE-add-savevm-async-for-background-state-snapshots.patch
+++ b/debian/patches/pve/0017-PVE-add-savevm-async-for-background-state-snapshots.patch
@@ -23,25 +23,26 @@ Signed-off-by: Dietmar Maurer <dietmar at proxmox.com>
Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
[improve aborting]
Signed-off-by: Stefan Reiter <s.reiter at proxmox.com>
-[FE: further improve aborting]
+[FE: further improve aborting
+ adapt to removal of QEMUFileOps]
Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
hmp-commands-info.hx | 13 +
- hmp-commands.hx | 33 ++
+ hmp-commands.hx | 33 +++
include/migration/snapshot.h | 2 +
include/monitor/hmp.h | 5 +
migration/meson.build | 1 +
- migration/savevm-async.c | 604 +++++++++++++++++++++++++++++++++++
+ migration/savevm-async.c | 531 +++++++++++++++++++++++++++++++++++
monitor/hmp-cmds.c | 57 ++++
- qapi/migration.json | 34 ++
- qapi/misc.json | 32 ++
+ qapi/migration.json | 34 +++
+ qapi/misc.json | 32 +++
qemu-options.hx | 12 +
softmmu/vl.c | 10 +
- 11 files changed, 803 insertions(+)
+ 11 files changed, 730 insertions(+)
create mode 100644 migration/savevm-async.c
diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
-index adfa085a9b..925e680e5a 100644
+index 188d9ece3b..97b88eaaad 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -538,6 +538,19 @@ SRST
@@ -65,12 +66,12 @@ index adfa085a9b..925e680e5a 100644
.name = "balloon",
.args_type = "",
diff --git a/hmp-commands.hx b/hmp-commands.hx
-index 8476277aa9..7f0ac498c4 100644
+index 182e639d14..bbcc73e942 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
-@@ -1746,3 +1746,36 @@ ERST
- "\n\t\t\t -b to specify dirty bitmap as method of calculation)",
- .cmd = hmp_calc_dirty_rate,
+@@ -1800,3 +1800,36 @@ ERST
+ "\n\t\t\t\t\t limit on a specified virtual cpu",
+ .cmd = hmp_cancel_vcpu_dirty_limit,
},
+
+ {
@@ -117,7 +118,7 @@ index e72083b117..c846d37806 100644
+
#endif
diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
-index 96d014826a..3a39ba41b5 100644
+index a618eb1e4e..55067beff1 100644
--- a/include/monitor/hmp.h
+++ b/include/monitor/hmp.h
@@ -26,6 +26,7 @@ void hmp_info_status(Monitor *mon, const QDict *qdict);
@@ -140,10 +141,10 @@ index 96d014826a..3a39ba41b5 100644
void hmp_screendump(Monitor *mon, const QDict *qdict);
void hmp_chardev_add(Monitor *mon, const QDict *qdict);
diff --git a/migration/meson.build b/migration/meson.build
-index 8b5ca5c047..1e2aec8486 100644
+index 8cac83c06c..0842d00cd2 100644
--- a/migration/meson.build
+++ b/migration/meson.build
-@@ -23,6 +23,7 @@ softmmu_ss.add(files(
+@@ -24,6 +24,7 @@ softmmu_ss.add(files(
'multifd-zlib.c',
'postcopy-ram.c',
'savevm.c',
@@ -153,11 +154,12 @@ index 8b5ca5c047..1e2aec8486 100644
), gnutls)
diff --git a/migration/savevm-async.c b/migration/savevm-async.c
new file mode 100644
-index 0000000000..b9a43c56bc
+index 0000000000..b3692739a0
--- /dev/null
+++ b/migration/savevm-async.c
-@@ -0,0 +1,604 @@
+@@ -0,0 +1,531 @@
+#include "qemu/osdep.h"
++#include "migration/channel-savevm-async.h"
+#include "migration/migration.h"
+#include "migration/savevm.h"
+#include "migration/snapshot.h"
@@ -181,9 +183,6 @@ index 0000000000..b9a43c56bc
+
+/* #define DEBUG_SAVEVM_STATE */
+
-+/* used while emulated sync operation in progress */
-+#define NOT_DONE -EINPROGRESS
-+
+#ifdef DEBUG_SAVEVM_STATE
+#define DPRINTF(fmt, ...) \
+ do { printf("savevm-async: " fmt, ## __VA_ARGS__); } while (0)
@@ -270,6 +269,7 @@ index 0000000000..b9a43c56bc
+
+ if (snap_state.file) {
+ ret = qemu_fclose(snap_state.file);
++ snap_state.file = NULL;
+ }
+
+ if (snap_state.target) {
@@ -313,60 +313,6 @@ index 0000000000..b9a43c56bc
+ snap_state.state = SAVE_STATE_ERROR;
+}
+
-+static int block_state_close(void *opaque, Error **errp)
-+{
-+ snap_state.file = NULL;
-+ return blk_flush(snap_state.target);
-+}
-+
-+typedef struct BlkRwCo {
-+ int64_t offset;
-+ QEMUIOVector *qiov;
-+ ssize_t ret;
-+} BlkRwCo;
-+
-+static void coroutine_fn block_state_write_entry(void *opaque) {
-+ BlkRwCo *rwco = opaque;
-+ rwco->ret = blk_co_pwritev(snap_state.target, rwco->offset, rwco->qiov->size,
-+ rwco->qiov, 0);
-+ aio_wait_kick();
-+}
-+
-+static ssize_t block_state_writev_buffer(void *opaque, struct iovec *iov,
-+ int iovcnt, int64_t pos, Error **errp)
-+{
-+ QEMUIOVector qiov;
-+ BlkRwCo rwco;
-+
-+ assert(pos == snap_state.bs_pos);
-+ rwco = (BlkRwCo) {
-+ .offset = pos,
-+ .qiov = &qiov,
-+ .ret = NOT_DONE,
-+ };
-+
-+ qemu_iovec_init_external(&qiov, iov, iovcnt);
-+
-+ if (qemu_in_coroutine()) {
-+ block_state_write_entry(&rwco);
-+ } else {
-+ Coroutine *co = qemu_coroutine_create(&block_state_write_entry, &rwco);
-+ bdrv_coroutine_enter(blk_bs(snap_state.target), co);
-+ BDRV_POLL_WHILE(blk_bs(snap_state.target), rwco.ret == NOT_DONE);
-+ }
-+ if (rwco.ret < 0) {
-+ return rwco.ret;
-+ }
-+
-+ snap_state.bs_pos += qiov.size;
-+ return qiov.size;
-+}
-+
-+static const QEMUFileOps block_file_ops = {
-+ .writev_buffer = block_state_writev_buffer,
-+ .close = block_state_close,
-+};
-+
+static void process_savevm_finalize(void *opaque)
+{
+ int ret;
@@ -579,7 +525,9 @@ index 0000000000..b9a43c56bc
+ goto restart;
+ }
+
-+ snap_state.file = qemu_fopen_ops(&snap_state, &block_file_ops);
++ QIOChannel *ioc = QIO_CHANNEL(qio_channel_savevm_async_new(snap_state.target,
++ &snap_state.bs_pos));
++ snap_state.file = qemu_file_new_output(ioc);
+
+ if (!snap_state.file) {
+ error_set(errp, ERROR_CLASS_GENERIC_ERROR, "failed to open '%s'", statefile);
@@ -691,27 +639,6 @@ index 0000000000..b9a43c56bc
+ true, name, errp);
+}
+
-+static ssize_t loadstate_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
-+ size_t size, Error **errp)
-+{
-+ BlockBackend *be = opaque;
-+ int64_t maxlen = blk_getlength(be);
-+ if (pos > maxlen) {
-+ return -EIO;
-+ }
-+ if ((pos + size) > maxlen) {
-+ size = maxlen - pos - 1;
-+ }
-+ if (size == 0) {
-+ return 0;
-+ }
-+ return blk_pread(be, pos, buf, size);
-+}
-+
-+static const QEMUFileOps loadstate_file_ops = {
-+ .get_buffer = loadstate_get_buffer,
-+};
-+
+int load_snapshot_from_blockdev(const char *filename, Error **errp)
+{
+ BlockBackend *be;
@@ -719,6 +646,7 @@ index 0000000000..b9a43c56bc
+ Error *blocker = NULL;
+
+ QEMUFile *f;
++ size_t bs_pos = 0;
+ int ret = -EINVAL;
+
+ be = blk_new_open(filename, NULL, NULL, 0, &local_err);
@@ -732,7 +660,7 @@ index 0000000000..b9a43c56bc
+ blk_op_block_all(be, blocker);
+
+ /* restore the VM state */
-+ f = qemu_fopen_ops(be, &loadstate_file_ops);
++ f = qemu_file_new_input(QIO_CHANNEL(qio_channel_savevm_async_new(be, &bs_pos)));
+ if (!f) {
+ error_setg(errp, "Could not open VM state file");
+ goto the_end;
@@ -762,10 +690,10 @@ index 0000000000..b9a43c56bc
+ return ret;
+}
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
-index 5482dd0569..c64b959738 100644
+index 15572befb1..1507180990 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
-@@ -1906,6 +1906,63 @@ void hmp_info_memory_devices(Monitor *mon, const QDict *qdict)
+@@ -1925,6 +1925,63 @@ void hmp_info_memory_devices(Monitor *mon, const QDict *qdict)
hmp_handle_error(mon, err);
}
@@ -830,10 +758,10 @@ index 5482dd0569..c64b959738 100644
{
IOThreadInfoList *info_list = qmp_query_iothreads(NULL);
diff --git a/qapi/migration.json b/qapi/migration.json
-index 27d7b28158..31d6cc902e 100644
+index 81185d4311..3129f71fa8 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
-@@ -258,6 +258,40 @@
+@@ -261,6 +261,40 @@
'*compression': 'CompressionStats',
'*socket-address': ['SocketAddress'] } }
@@ -875,7 +803,7 @@ index 27d7b28158..31d6cc902e 100644
# @query-migrate:
#
diff --git a/qapi/misc.json b/qapi/misc.json
-index b83cc39029..1e5dd7db29 100644
+index 27ef5a2b20..b3ce75dcae 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -435,6 +435,38 @@
@@ -918,10 +846,10 @@ index b83cc39029..1e5dd7db29 100644
# @CommandLineParameterType:
#
diff --git a/qemu-options.hx b/qemu-options.hx
-index 34e9b32a5c..aeade4ef80 100644
+index 31c04f7eea..c2ca6e91b5 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
-@@ -4254,6 +4254,18 @@ SRST
+@@ -4341,6 +4341,18 @@ SRST
Start right away with a saved state (``loadvm`` in monitor)
ERST
@@ -941,18 +869,18 @@ index 34e9b32a5c..aeade4ef80 100644
DEF("daemonize", 0, QEMU_OPTION_daemonize, \
"-daemonize daemonize QEMU after initializing\n", QEMU_ARCH_ALL)
diff --git a/softmmu/vl.c b/softmmu/vl.c
-index 6f646531a0..a3f2a3818c 100644
+index 706bd7cff7..b8637c4262 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
-@@ -157,6 +157,7 @@ static const char *incoming;
- static const char *loadvm;
- static const char *accelerators;
+@@ -165,6 +165,7 @@ static const char *accelerators;
+ static bool have_custom_ram_size;
+ static const char *ram_memdev_id;
static QDict *machine_opts_dict;
+static const char *loadstate;
static QTAILQ_HEAD(, ObjectOption) object_opts = QTAILQ_HEAD_INITIALIZER(object_opts);
static QTAILQ_HEAD(, DeviceOption) device_opts = QTAILQ_HEAD_INITIALIZER(device_opts);
- static ram_addr_t maxram_size;
-@@ -2749,6 +2750,12 @@ void qmp_x_exit_preconfig(Error **errp)
+ static int display_remote;
+@@ -2584,6 +2585,12 @@ void qmp_x_exit_preconfig(Error **errp)
if (loadvm) {
load_snapshot(loadvm, NULL, false, NULL, &error_fatal);
@@ -965,7 +893,7 @@ index 6f646531a0..a3f2a3818c 100644
}
if (replay_mode != REPLAY_MODE_NONE) {
replay_vmstate_init();
-@@ -3289,6 +3296,9 @@ void qemu_init(int argc, char **argv, char **envp)
+@@ -3133,6 +3140,9 @@ void qemu_init(int argc, char **argv, char **envp)
case QEMU_OPTION_loadvm:
loadvm = optarg;
break;
diff --git a/debian/patches/pve/0017-PVE-add-optional-buffer-size-to-QEMUFile.patch b/debian/patches/pve/0018-PVE-add-optional-buffer-size-to-QEMUFile.patch
similarity index 52%
rename from debian/patches/pve/0017-PVE-add-optional-buffer-size-to-QEMUFile.patch
rename to debian/patches/pve/0018-PVE-add-optional-buffer-size-to-QEMUFile.patch
index c5cca9d..71ee72d 100644
--- a/debian/patches/pve/0017-PVE-add-optional-buffer-size-to-QEMUFile.patch
+++ b/debian/patches/pve/0018-PVE-add-optional-buffer-size-to-QEMUFile.patch
@@ -10,14 +10,16 @@ Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
[increase max IOV count in QEMUFile to actually write more data]
Signed-off-by: Stefan Reiter <s.reiter at proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
+[FE: adapt to removal of QEMUFileOps]
+Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
- migration/qemu-file.c | 38 +++++++++++++++++++++++++-------------
- migration/qemu-file.h | 1 +
- migration/savevm-async.c | 4 ++--
- 3 files changed, 28 insertions(+), 15 deletions(-)
+ migration/qemu-file.c | 49 +++++++++++++++++++++++++++-------------
+ migration/qemu-file.h | 2 ++
+ migration/savevm-async.c | 5 ++--
+ 3 files changed, 38 insertions(+), 18 deletions(-)
diff --git a/migration/qemu-file.c b/migration/qemu-file.c
-index 1479cddad9..21a3355ae2 100644
+index 4f400c2e52..21e8998867 100644
--- a/migration/qemu-file.c
+++ b/migration/qemu-file.c
@@ -31,8 +31,8 @@
@@ -30,9 +32,9 @@ index 1479cddad9..21a3355ae2 100644
+#define MAX_IOV_SIZE MIN_CONST(IOV_MAX, 256)
struct QEMUFile {
- const QEMUFileOps *ops;
-@@ -46,7 +46,8 @@ struct QEMUFile {
- when reading */
+ const QEMUFileHooks *hooks;
+@@ -55,7 +55,8 @@ struct QEMUFile {
+
int buf_index;
int buf_size; /* 0 when writing */
- uint8_t buf[IO_BUF_SIZE];
@@ -41,53 +43,76 @@ index 1479cddad9..21a3355ae2 100644
DECLARE_BITMAP(may_free, MAX_IOV_SIZE);
struct iovec iov[MAX_IOV_SIZE];
-@@ -104,7 +105,7 @@ bool qemu_file_mode_is_not_valid(const char *mode)
+@@ -106,7 +107,9 @@ bool qemu_file_mode_is_not_valid(const char *mode)
return false;
}
--QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops, bool has_ioc)
-+QEMUFile *qemu_fopen_ops_sized(void *opaque, const QEMUFileOps *ops, bool has_ioc, size_t buffer_size)
+-static QEMUFile *qemu_file_new_impl(QIOChannel *ioc, bool is_writable)
++static QEMUFile *qemu_file_new_impl(QIOChannel *ioc,
++ bool is_writable,
++ size_t buffer_size)
{
QEMUFile *f;
-@@ -113,9 +114,17 @@ QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops, bool has_ioc)
- f->opaque = opaque;
- f->ops = ops;
- f->has_ioc = has_ioc;
+@@ -115,6 +118,8 @@ static QEMUFile *qemu_file_new_impl(QIOChannel *ioc, bool is_writable)
+ object_ref(ioc);
+ f->ioc = ioc;
+ f->is_writable = is_writable;
+ f->buf_allocated_size = buffer_size;
+ f->buf = malloc(buffer_size);
-+
+
return f;
}
+@@ -125,17 +130,27 @@ static QEMUFile *qemu_file_new_impl(QIOChannel *ioc, bool is_writable)
+ */
+ QEMUFile *qemu_file_get_return_path(QEMUFile *f)
+ {
+- return qemu_file_new_impl(f->ioc, !f->is_writable);
++ return qemu_file_new_impl(f->ioc, !f->is_writable, DEFAULT_IO_BUF_SIZE);
+ }
-+QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops, bool has_ioc)
+ QEMUFile *qemu_file_new_output(QIOChannel *ioc)
+ {
+- return qemu_file_new_impl(ioc, true);
++ return qemu_file_new_impl(ioc, true, DEFAULT_IO_BUF_SIZE);
++}
++
++QEMUFile *qemu_file_new_output_sized(QIOChannel *ioc, size_t buffer_size)
+{
-+ return qemu_fopen_ops_sized(opaque, ops, has_ioc, DEFAULT_IO_BUF_SIZE);
++ return qemu_file_new_impl(ioc, true, buffer_size);
+ }
+
+ QEMUFile *qemu_file_new_input(QIOChannel *ioc)
+ {
+- return qemu_file_new_impl(ioc, false);
++ return qemu_file_new_impl(ioc, false, DEFAULT_IO_BUF_SIZE);
+}
+
++QEMUFile *qemu_file_new_input_sized(QIOChannel *ioc, size_t buffer_size)
++{
++ return qemu_file_new_impl(ioc, false, buffer_size);
+ }
void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks)
- {
-@@ -350,7 +359,7 @@ static ssize_t qemu_fill_buffer(QEMUFile *f)
+@@ -393,7 +408,7 @@ static ssize_t qemu_fill_buffer(QEMUFile *f)
+ do {
+ len = qio_channel_read(f->ioc,
+ (char *)f->buf + pending,
+- IO_BUF_SIZE - pending,
++ f->buf_allocated_size - pending,
+ &local_error);
+ if (len == QIO_CHANNEL_ERR_BLOCK) {
+ if (qemu_in_coroutine()) {
+@@ -443,6 +458,8 @@ int qemu_fclose(QEMUFile *f)
}
+ g_clear_pointer(&f->ioc, object_unref);
- len = f->ops->get_buffer(f->opaque, f->buf + pending, f->pos,
-- IO_BUF_SIZE - pending, &local_error);
-+ f->buf_allocated_size - pending, &local_error);
- if (len > 0) {
- f->buf_size += len;
- f->pos += len;
-@@ -390,6 +399,9 @@ int qemu_fclose(QEMUFile *f)
- ret = ret2;
- }
- }
-+
+ free(f->buf);
+
/* If any error was spotted before closing, we should report it
* instead of the close() return value.
*/
-@@ -444,7 +456,7 @@ static void add_buf_to_iovec(QEMUFile *f, size_t len)
+@@ -497,7 +514,7 @@ static void add_buf_to_iovec(QEMUFile *f, size_t len)
{
if (!add_to_iovec(f, f->buf + f->buf_index, len, false)) {
f->buf_index += len;
@@ -96,7 +121,7 @@ index 1479cddad9..21a3355ae2 100644
qemu_fflush(f);
}
}
-@@ -470,7 +482,7 @@ void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, size_t size)
+@@ -523,7 +540,7 @@ void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, size_t size)
}
while (size > 0) {
@@ -105,7 +130,7 @@ index 1479cddad9..21a3355ae2 100644
if (l > size) {
l = size;
}
-@@ -517,8 +529,8 @@ size_t qemu_peek_buffer(QEMUFile *f, uint8_t **buf, size_t size, size_t offset)
+@@ -570,8 +587,8 @@ size_t qemu_peek_buffer(QEMUFile *f, uint8_t **buf, size_t size, size_t offset)
size_t index;
assert(!qemu_file_is_writable(f));
@@ -116,7 +141,7 @@ index 1479cddad9..21a3355ae2 100644
/* The 1st byte to read from */
index = f->buf_index + offset;
-@@ -568,7 +580,7 @@ size_t qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size)
+@@ -621,7 +638,7 @@ size_t qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size)
size_t res;
uint8_t *src;
@@ -125,7 +150,7 @@ index 1479cddad9..21a3355ae2 100644
if (res == 0) {
return done;
}
-@@ -602,7 +614,7 @@ size_t qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size)
+@@ -655,7 +672,7 @@ size_t qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size)
*/
size_t qemu_get_buffer_in_place(QEMUFile *f, uint8_t **buf, size_t size)
{
@@ -134,7 +159,7 @@ index 1479cddad9..21a3355ae2 100644
size_t res;
uint8_t *src = NULL;
-@@ -627,7 +639,7 @@ int qemu_peek_byte(QEMUFile *f, int offset)
+@@ -680,7 +697,7 @@ int qemu_peek_byte(QEMUFile *f, int offset)
int index = f->buf_index + offset;
assert(!qemu_file_is_writable(f));
@@ -143,7 +168,7 @@ index 1479cddad9..21a3355ae2 100644
if (index >= f->buf_size) {
qemu_fill_buffer(f);
-@@ -779,7 +791,7 @@ static int qemu_compress_data(z_stream *stream, uint8_t *dest, size_t dest_len,
+@@ -832,7 +849,7 @@ static int qemu_compress_data(z_stream *stream, uint8_t *dest, size_t dest_len,
ssize_t qemu_put_compression_data(QEMUFile *f, z_stream *stream,
const uint8_t *p, size_t size)
{
@@ -153,36 +178,39 @@ index 1479cddad9..21a3355ae2 100644
if (blen < compressBound(size)) {
return -1;
diff --git a/migration/qemu-file.h b/migration/qemu-file.h
-index 3f36d4dc8c..67501fd9cf 100644
+index fa13d04d78..914f1a63a8 100644
--- a/migration/qemu-file.h
+++ b/migration/qemu-file.h
-@@ -121,6 +121,7 @@ typedef struct QEMUFileHooks {
+@@ -63,7 +63,9 @@ typedef struct QEMUFileHooks {
} QEMUFileHooks;
- QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops, bool has_ioc);
-+QEMUFile *qemu_fopen_ops_sized(void *opaque, const QEMUFileOps *ops, bool has_ioc, size_t buffer_size);
+ QEMUFile *qemu_file_new_input(QIOChannel *ioc);
++QEMUFile *qemu_file_new_input_sized(QIOChannel *ioc, size_t buffer_size);
+ QEMUFile *qemu_file_new_output(QIOChannel *ioc);
++QEMUFile *qemu_file_new_output_sized(QIOChannel *ioc, size_t buffer_size);
void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks);
- int qemu_get_fd(QEMUFile *f);
int qemu_fclose(QEMUFile *f);
+
diff --git a/migration/savevm-async.c b/migration/savevm-async.c
-index b9a43c56bc..0bc5799cf8 100644
+index b3692739a0..e65a5e3482 100644
--- a/migration/savevm-async.c
+++ b/migration/savevm-async.c
-@@ -420,7 +420,7 @@ void qmp_savevm_start(bool has_statefile, const char *statefile, Error **errp)
- goto restart;
- }
+@@ -367,7 +367,7 @@ void qmp_savevm_start(bool has_statefile, const char *statefile, Error **errp)
-- snap_state.file = qemu_fopen_ops(&snap_state, &block_file_ops);
-+ snap_state.file = qemu_fopen_ops_sized(&snap_state, &block_file_ops, false, 4 * 1024 * 1024);
+ QIOChannel *ioc = QIO_CHANNEL(qio_channel_savevm_async_new(snap_state.target,
+ &snap_state.bs_pos));
+- snap_state.file = qemu_file_new_output(ioc);
++ snap_state.file = qemu_file_new_output_sized(ioc, 4 * 1024 * 1024);
if (!snap_state.file) {
error_set(errp, ERROR_CLASS_GENERIC_ERROR, "failed to open '%s'", statefile);
-@@ -573,7 +573,7 @@ int load_snapshot_from_blockdev(const char *filename, Error **errp)
+@@ -500,7 +500,8 @@ int load_snapshot_from_blockdev(const char *filename, Error **errp)
blk_op_block_all(be, blocker);
/* restore the VM state */
-- f = qemu_fopen_ops(be, &loadstate_file_ops);
-+ f = qemu_fopen_ops_sized(be, &loadstate_file_ops, false, 4 * 1024 * 1024);
+- f = qemu_file_new_input(QIO_CHANNEL(qio_channel_savevm_async_new(be, &bs_pos)));
++ f = qemu_file_new_input_sized(QIO_CHANNEL(qio_channel_savevm_async_new(be, &bs_pos)),
++ 4 * 1024 * 1024);
if (!f) {
error_setg(errp, "Could not open VM state file");
goto the_end;
diff --git a/debian/patches/pve/0018-PVE-block-add-the-zeroinit-block-driver-filter.patch b/debian/patches/pve/0019-PVE-block-add-the-zeroinit-block-driver-filter.patch
similarity index 99%
rename from debian/patches/pve/0018-PVE-block-add-the-zeroinit-block-driver-filter.patch
rename to debian/patches/pve/0019-PVE-block-add-the-zeroinit-block-driver-filter.patch
index a0cc957..8f53db4 100644
--- a/debian/patches/pve/0018-PVE-block-add-the-zeroinit-block-driver-filter.patch
+++ b/debian/patches/pve/0019-PVE-block-add-the-zeroinit-block-driver-filter.patch
@@ -13,7 +13,7 @@ Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
create mode 100644 block/zeroinit.c
diff --git a/block/meson.build b/block/meson.build
-index 0b2a60c99b..9451fc3ccd 100644
+index 60bc305597..ad40c10b6a 100644
--- a/block/meson.build
+++ b/block/meson.build
@@ -43,6 +43,7 @@ block_ss.add(files(
diff --git a/debian/patches/pve/0019-PVE-Add-dummy-id-command-line-parameter.patch b/debian/patches/pve/0020-PVE-Add-dummy-id-command-line-parameter.patch
similarity index 86%
rename from debian/patches/pve/0019-PVE-Add-dummy-id-command-line-parameter.patch
rename to debian/patches/pve/0020-PVE-Add-dummy-id-command-line-parameter.patch
index 488a70c..f0b18f5 100644
--- a/debian/patches/pve/0019-PVE-Add-dummy-id-command-line-parameter.patch
+++ b/debian/patches/pve/0020-PVE-Add-dummy-id-command-line-parameter.patch
@@ -14,12 +14,12 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
2 files changed, 11 insertions(+)
diff --git a/qemu-options.hx b/qemu-options.hx
-index aeade4ef80..a26f0b0400 100644
+index c2ca6e91b5..ab4734ef32 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
-@@ -1075,6 +1075,9 @@ DEFHEADING()
+@@ -1118,6 +1118,9 @@ backend describes how QEMU handles the data.
- DEFHEADING(Block device options:)
+ ERST
+DEF("id", HAS_ARG, QEMU_OPTION_id,
+ "-id n set the VMID", QEMU_ARCH_ALL)
@@ -28,10 +28,10 @@ index aeade4ef80..a26f0b0400 100644
"-fda/-fdb file use 'file' as floppy disk 0/1 image\n", QEMU_ARCH_ALL)
DEF("fdb", HAS_ARG, QEMU_OPTION_fdb, "", QEMU_ARCH_ALL)
diff --git a/softmmu/vl.c b/softmmu/vl.c
-index a3f2a3818c..4208142685 100644
+index b8637c4262..39f149924e 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
-@@ -2785,6 +2785,7 @@ void qemu_init(int argc, char **argv, char **envp)
+@@ -2620,6 +2620,7 @@ void qemu_init(int argc, char **argv, char **envp)
MachineClass *machine_class;
bool userconfig = true;
FILE *vmstate_dump_file = NULL;
@@ -39,7 +39,7 @@ index a3f2a3818c..4208142685 100644
qemu_add_opts(&qemu_drive_opts);
qemu_add_drive_opts(&qemu_legacy_drive_opts);
-@@ -3420,6 +3421,13 @@ void qemu_init(int argc, char **argv, char **envp)
+@@ -3245,6 +3246,13 @@ void qemu_init(int argc, char **argv, char **envp)
machine_parse_property_opt(qemu_find_opts("smp-opts"),
"smp", optarg);
break;
diff --git a/debian/patches/pve/0020-PVE-Config-Revert-target-i386-disable-LINT0-after-re.patch b/debian/patches/pve/0021-PVE-Config-Revert-target-i386-disable-LINT0-after-re.patch
similarity index 100%
rename from debian/patches/pve/0020-PVE-Config-Revert-target-i386-disable-LINT0-after-re.patch
rename to debian/patches/pve/0021-PVE-Config-Revert-target-i386-disable-LINT0-after-re.patch
diff --git a/debian/patches/pve/0021-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch b/debian/patches/pve/0022-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch
similarity index 90%
rename from debian/patches/pve/0021-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch
rename to debian/patches/pve/0022-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch
index 99299d3..96b0193 100644
--- a/debian/patches/pve/0021-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch
+++ b/debian/patches/pve/0022-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch
@@ -13,10 +13,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
2 files changed, 42 insertions(+), 20 deletions(-)
diff --git a/block/file-posix.c b/block/file-posix.c
-index e5bf5d59bf..b013668dce 100644
+index 3d60b80286..49ee1db5f9 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
-@@ -2461,6 +2461,7 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
+@@ -2475,6 +2475,7 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
int fd;
uint64_t perm, shared;
int result = 0;
@@ -24,7 +24,7 @@ index e5bf5d59bf..b013668dce 100644
/* Validate options and set default values */
assert(options->driver == BLOCKDEV_DRIVER_FILE);
-@@ -2501,19 +2502,22 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
+@@ -2515,19 +2516,22 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
perm = BLK_PERM_WRITE | BLK_PERM_RESIZE;
shared = BLK_PERM_ALL & ~BLK_PERM_RESIZE;
@@ -59,7 +59,7 @@ index e5bf5d59bf..b013668dce 100644
}
/* Clear the file by truncating it to 0 */
-@@ -2567,13 +2571,15 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
+@@ -2581,13 +2585,15 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
}
out_unlock:
@@ -82,7 +82,7 @@ index e5bf5d59bf..b013668dce 100644
}
out_close:
-@@ -2598,6 +2604,7 @@ static int coroutine_fn raw_co_create_opts(BlockDriver *drv,
+@@ -2612,6 +2618,7 @@ static int coroutine_fn raw_co_create_opts(BlockDriver *drv,
PreallocMode prealloc;
char *buf = NULL;
Error *local_err = NULL;
@@ -90,7 +90,7 @@ index e5bf5d59bf..b013668dce 100644
/* Skip file: protocol prefix */
strstart(filename, "file:", &filename);
-@@ -2620,6 +2627,18 @@ static int coroutine_fn raw_co_create_opts(BlockDriver *drv,
+@@ -2634,6 +2641,18 @@ static int coroutine_fn raw_co_create_opts(BlockDriver *drv,
return -EINVAL;
}
@@ -109,7 +109,7 @@ index e5bf5d59bf..b013668dce 100644
options = (BlockdevCreateOptions) {
.driver = BLOCKDEV_DRIVER_FILE,
.u.file = {
-@@ -2631,6 +2650,8 @@ static int coroutine_fn raw_co_create_opts(BlockDriver *drv,
+@@ -2645,6 +2664,8 @@ static int coroutine_fn raw_co_create_opts(BlockDriver *drv,
.nocow = nocow,
.has_extent_size_hint = has_extent_size_hint,
.extent_size_hint = extent_size_hint,
@@ -119,10 +119,10 @@ index e5bf5d59bf..b013668dce 100644
};
return raw_co_create(&options, errp);
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index fb25c2b245..564b6b43f7 100644
+index e1857e7094..ddac91e8f6 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -4484,7 +4484,8 @@
+@@ -4537,7 +4537,8 @@
'size': 'size',
'*preallocation': 'PreallocMode',
'*nocow': 'bool',
diff --git a/debian/patches/pve/0022-PVE-monitor-disable-oob-capability.patch b/debian/patches/pve/0023-PVE-monitor-disable-oob-capability.patch
similarity index 100%
rename from debian/patches/pve/0022-PVE-monitor-disable-oob-capability.patch
rename to debian/patches/pve/0023-PVE-monitor-disable-oob-capability.patch
diff --git a/debian/patches/pve/0023-PVE-Compat-4.0-used-balloon-qemu-4-0-config-size-fal.patch b/debian/patches/pve/0024-PVE-Compat-4.0-used-balloon-qemu-4-0-config-size-fal.patch
similarity index 95%
rename from debian/patches/pve/0023-PVE-Compat-4.0-used-balloon-qemu-4-0-config-size-fal.patch
rename to debian/patches/pve/0024-PVE-Compat-4.0-used-balloon-qemu-4-0-config-size-fal.patch
index 61528fd..72f29ff 100644
--- a/debian/patches/pve/0023-PVE-Compat-4.0-used-balloon-qemu-4-0-config-size-fal.patch
+++ b/debian/patches/pve/0024-PVE-Compat-4.0-used-balloon-qemu-4-0-config-size-fal.patch
@@ -26,10 +26,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/hw/core/machine.c b/hw/core/machine.c
-index 1e23fdc14b..8a50445ee8 100644
+index a673302cce..fa424440bd 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
-@@ -118,7 +118,8 @@ GlobalProperty hw_compat_4_0[] = {
+@@ -127,7 +127,8 @@ GlobalProperty hw_compat_4_0[] = {
{ "virtio-vga", "edid", "false" },
{ "virtio-gpu-device", "edid", "false" },
{ "virtio-device", "use-started", "false" },
diff --git a/debian/patches/pve/0024-PVE-Allow-version-code-in-machine-type.patch b/debian/patches/pve/0025-PVE-Allow-version-code-in-machine-type.patch
similarity index 93%
rename from debian/patches/pve/0024-PVE-Allow-version-code-in-machine-type.patch
rename to debian/patches/pve/0025-PVE-Allow-version-code-in-machine-type.patch
index a0ca907..67fd0f6 100644
--- a/debian/patches/pve/0024-PVE-Allow-version-code-in-machine-type.patch
+++ b/debian/patches/pve/0025-PVE-Allow-version-code-in-machine-type.patch
@@ -36,7 +36,7 @@ index 76fff60a6b..ec9201fb9a 100644
if (mc->default_cpu_type) {
diff --git a/include/hw/boards.h b/include/hw/boards.h
-index c92ac8815c..572d911ed4 100644
+index 7b416c9787..8ae15c51aa 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -230,6 +230,8 @@ struct MachineClass {
@@ -49,10 +49,10 @@ index c92ac8815c..572d911ed4 100644
void (*reset)(MachineState *state);
void (*wakeup)(MachineState *state);
diff --git a/qapi/machine.json b/qapi/machine.json
-index ca133e68ce..39ba204b52 100644
+index 555458f785..d868e4d31d 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
-@@ -158,6 +158,8 @@
+@@ -157,6 +157,8 @@
#
# @default-ram-id: the default ID of initial RAM memory backend (since 5.2)
#
@@ -61,7 +61,7 @@ index ca133e68ce..39ba204b52 100644
# Since: 1.2
##
{ 'struct': 'MachineInfo',
-@@ -165,7 +167,7 @@
+@@ -164,7 +166,7 @@
'*is-default': 'bool', '*is-current': 'bool', 'cpu-max': 'int',
'hotpluggable-cpus': 'bool', 'numa-mem-supported': 'bool',
'deprecated': 'bool', '*default-cpu-type': 'str',
@@ -71,10 +71,10 @@ index ca133e68ce..39ba204b52 100644
##
# @query-machines:
diff --git a/softmmu/vl.c b/softmmu/vl.c
-index 4208142685..37d85f1b96 100644
+index 39f149924e..0d233d55f3 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
-@@ -1659,6 +1659,7 @@ static const QEMUOption *lookup_opt(int argc, char **argv,
+@@ -1580,6 +1580,7 @@ static const QEMUOption *lookup_opt(int argc, char **argv,
static MachineClass *select_machine(QDict *qdict, Error **errp)
{
const char *optarg = qdict_get_try_str(qdict, "type");
@@ -82,7 +82,7 @@ index 4208142685..37d85f1b96 100644
GSList *machines = object_class_get_list(TYPE_MACHINE, false);
MachineClass *machine_class;
Error *local_err = NULL;
-@@ -1676,6 +1677,11 @@ static MachineClass *select_machine(QDict *qdict, Error **errp)
+@@ -1597,6 +1598,11 @@ static MachineClass *select_machine(QDict *qdict, Error **errp)
}
}
@@ -94,7 +94,7 @@ index 4208142685..37d85f1b96 100644
g_slist_free(machines);
if (local_err) {
error_append_hint(&local_err, "Use -machine help to list supported machines\n");
-@@ -3362,12 +3368,31 @@ void qemu_init(int argc, char **argv, char **envp)
+@@ -3187,12 +3193,31 @@ void qemu_init(int argc, char **argv, char **envp)
case QEMU_OPTION_machine:
{
bool help;
diff --git a/debian/patches/pve/0025-block-backup-move-bcs-bitmap-initialization-to-job-c.patch b/debian/patches/pve/0026-block-backup-move-bcs-bitmap-initialization-to-job-c.patch
similarity index 88%
rename from debian/patches/pve/0025-block-backup-move-bcs-bitmap-initialization-to-job-c.patch
rename to debian/patches/pve/0026-block-backup-move-bcs-bitmap-initialization-to-job-c.patch
index 8621cdf..a1ce276 100644
--- a/debian/patches/pve/0025-block-backup-move-bcs-bitmap-initialization-to-job-c.patch
+++ b/debian/patches/pve/0026-block-backup-move-bcs-bitmap-initialization-to-job-c.patch
@@ -25,11 +25,11 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/block/backup.c b/block/backup.c
-index 5cfd0b999c..07b899035c 100644
+index b2b649e305..b6fa9e8a69 100644
--- a/block/backup.c
+++ b/block/backup.c
-@@ -239,8 +239,8 @@ static void backup_init_bcs_bitmap(BackupBlockJob *job)
- assert(ret);
+@@ -237,8 +237,8 @@ static void backup_init_bcs_bitmap(BackupBlockJob *job)
+ true);
} else if (job->sync_mode == MIRROR_SYNC_MODE_TOP) {
/*
- * We can't hog the coroutine to initialize this thoroughly.
@@ -39,7 +39,7 @@ index 5cfd0b999c..07b899035c 100644
*/
block_copy_set_skip_unallocated(job->bcs, true);
}
-@@ -254,8 +254,6 @@ static int coroutine_fn backup_run(Job *job, Error **errp)
+@@ -252,8 +252,6 @@ static int coroutine_fn backup_run(Job *job, Error **errp)
BackupBlockJob *s = container_of(job, BackupBlockJob, common.job);
int ret;
@@ -48,7 +48,7 @@ index 5cfd0b999c..07b899035c 100644
if (s->sync_mode == MIRROR_SYNC_MODE_TOP) {
int64_t offset = 0;
int64_t count;
-@@ -494,6 +492,8 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
+@@ -492,6 +490,8 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
block_job_add_bdrv(&job->common, "target", target, 0, BLK_PERM_ALL,
&error_abort);
diff --git a/debian/patches/pve/0026-PVE-Backup-add-vma-backup-format-code.patch b/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch
similarity index 99%
rename from debian/patches/pve/0026-PVE-Backup-add-vma-backup-format-code.patch
rename to debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch
index ced8e74..cf67937 100644
--- a/debian/patches/pve/0026-PVE-Backup-add-vma-backup-format-code.patch
+++ b/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch
@@ -9,18 +9,18 @@ Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
---
block/meson.build | 2 +
meson.build | 5 +
- vma-reader.c | 860 ++++++++++++++++++++++++++++++++++++++++++++++
+ vma-reader.c | 859 ++++++++++++++++++++++++++++++++++++++++++++++
vma-writer.c | 791 ++++++++++++++++++++++++++++++++++++++++++
- vma.c | 850 +++++++++++++++++++++++++++++++++++++++++++++
+ vma.c | 849 +++++++++++++++++++++++++++++++++++++++++++++
vma.h | 150 ++++++++
- 6 files changed, 2658 insertions(+)
+ 6 files changed, 2656 insertions(+)
create mode 100644 vma-reader.c
create mode 100644 vma-writer.c
create mode 100644 vma.c
create mode 100644 vma.h
diff --git a/block/meson.build b/block/meson.build
-index 9451fc3ccd..819eb80951 100644
+index ad40c10b6a..3a0b84bc11 100644
--- a/block/meson.build
+++ b/block/meson.build
@@ -46,6 +46,8 @@ block_ss.add(files(
@@ -33,10 +33,10 @@ index 9451fc3ccd..819eb80951 100644
if get_option('qcow1').allowed()
diff --git a/meson.build b/meson.build
-index 861de93c4f..96a91b95e4 100644
+index d5230eadd6..ffff66c0cc 100644
--- a/meson.build
+++ b/meson.build
-@@ -1267,6 +1267,8 @@ keyutils = dependency('libkeyutils', required: false,
+@@ -1462,6 +1462,8 @@ keyutils = dependency('libkeyutils', required: false,
has_gettid = cc.has_function('gettid')
@@ -45,7 +45,7 @@ index 861de93c4f..96a91b95e4 100644
# libselinux
selinux = dependency('libselinux',
required: get_option('selinux'),
-@@ -3359,6 +3361,9 @@ if have_tools
+@@ -3607,6 +3609,9 @@ if have_tools
dependencies: [blockdev, qemuutil, gnutls, selinux],
install: true)
@@ -57,10 +57,10 @@ index 861de93c4f..96a91b95e4 100644
subdir('contrib/elf2dmp')
diff --git a/vma-reader.c b/vma-reader.c
new file mode 100644
-index 0000000000..4f4ee2b47b
+index 0000000000..e65f1e8415
--- /dev/null
+++ b/vma-reader.c
-@@ -0,0 +1,860 @@
+@@ -0,0 +1,859 @@
+/*
+ * VMA: Virtual Machine Archive
+ *
@@ -78,7 +78,6 @@ index 0000000000..4f4ee2b47b
+#include <glib.h>
+#include <uuid/uuid.h>
+
-+#include "qemu-common.h"
+#include "qemu/timer.h"
+#include "qemu/ratelimit.h"
+#include "vma.h"
@@ -589,7 +588,7 @@ index 0000000000..4f4ee2b47b
+ }
+ }
+ } else {
-+ int res = blk_pwrite(target, sector_num * BDRV_SECTOR_SIZE, buf, nb_sectors * BDRV_SECTOR_SIZE, 0);
++ int res = blk_pwrite(target, sector_num * BDRV_SECTOR_SIZE, nb_sectors * BDRV_SECTOR_SIZE, buf, 0);
+ if (res < 0) {
+ error_setg(errp, "blk_pwrite to %s failed (%d)",
+ bdrv_get_device_name(blk_bs(target)), res);
@@ -1720,10 +1719,10 @@ index 0000000000..df4b20793d
+}
diff --git a/vma.c b/vma.c
new file mode 100644
-index 0000000000..91612d50a2
+index 0000000000..e8dffb43e0
--- /dev/null
+++ b/vma.c
-@@ -0,0 +1,850 @@
+@@ -0,0 +1,849 @@
+/*
+ * VMA: Virtual Machine Archive
+ *
@@ -1741,7 +1740,6 @@ index 0000000000..91612d50a2
+#include <glib.h>
+
+#include "vma.h"
-+#include "qemu-common.h"
+#include "qemu/module.h"
+#include "qemu/error-report.h"
+#include "qemu/main-loop.h"
diff --git a/debian/patches/pve/0027-PVE-Backup-add-backup-dump-block-driver.patch b/debian/patches/pve/0028-PVE-Backup-add-backup-dump-block-driver.patch
similarity index 96%
rename from debian/patches/pve/0027-PVE-Backup-add-backup-dump-block-driver.patch
rename to debian/patches/pve/0028-PVE-Backup-add-backup-dump-block-driver.patch
index ea3bb84..548ce20 100644
--- a/debian/patches/pve/0027-PVE-Backup-add-backup-dump-block-driver.patch
+++ b/debian/patches/pve/0028-PVE-Backup-add-backup-dump-block-driver.patch
@@ -10,20 +10,20 @@ Subject: [PATCH] PVE-Backup: add backup-dump block driver
Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
- block/backup-dump.c | 168 +++++++++++++++++++++++++++++++
+ block/backup-dump.c | 167 +++++++++++++++++++++++++++++++
block/backup.c | 30 ++----
block/meson.build | 1 +
include/block/block_int-common.h | 35 +++++++
job.c | 3 +-
- 5 files changed, 214 insertions(+), 23 deletions(-)
+ 5 files changed, 213 insertions(+), 23 deletions(-)
create mode 100644 block/backup-dump.c
diff --git a/block/backup-dump.c b/block/backup-dump.c
new file mode 100644
-index 0000000000..93d7f46950
+index 0000000000..04718a94e2
--- /dev/null
+++ b/block/backup-dump.c
-@@ -0,0 +1,168 @@
+@@ -0,0 +1,167 @@
+/*
+ * BlockDriver to send backup data stream to a callback function
+ *
@@ -35,7 +35,6 @@ index 0000000000..93d7f46950
+ */
+
+#include "qemu/osdep.h"
-+#include "qemu-common.h"
+#include "qom/object_interfaces.h"
+#include "block/block_int.h"
+
@@ -193,7 +192,7 @@ index 0000000000..93d7f46950
+ return bs;
+}
diff --git a/block/backup.c b/block/backup.c
-index 07b899035c..7b5d02f580 100644
+index b6fa9e8a69..789f8b7799 100644
--- a/block/backup.c
+++ b/block/backup.c
@@ -29,28 +29,6 @@
@@ -225,7 +224,7 @@ index 07b899035c..7b5d02f580 100644
static const BlockJobDriver backup_job_driver;
static void backup_cleanup_sync_bitmap(BackupBlockJob *job, int ret)
-@@ -456,6 +434,14 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
+@@ -454,6 +432,14 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
}
cluster_size = block_copy_cluster_size(bcs);
@@ -241,7 +240,7 @@ index 07b899035c..7b5d02f580 100644
if (perf->max_chunk && perf->max_chunk < cluster_size) {
error_setg(errp, "Required max-chunk (%" PRIi64 ") is less than backup "
diff --git a/block/meson.build b/block/meson.build
-index 819eb80951..067708b7c0 100644
+index 3a0b84bc11..7f22e7f177 100644
--- a/block/meson.build
+++ b/block/meson.build
@@ -4,6 +4,7 @@ block_ss.add(files(
diff --git a/debian/patches/pve/0028-PVE-Backup-proxmox-backup-patches-for-qemu.patch b/debian/patches/pve/0029-PVE-Backup-proxmox-backup-patches-for-qemu.patch
similarity index 98%
rename from debian/patches/pve/0028-PVE-Backup-proxmox-backup-patches-for-qemu.patch
rename to debian/patches/pve/0029-PVE-Backup-proxmox-backup-patches-for-qemu.patch
index faa9483..58bc045 100644
--- a/debian/patches/pve/0028-PVE-Backup-proxmox-backup-patches-for-qemu.patch
+++ b/debian/patches/pve/0029-PVE-Backup-proxmox-backup-patches-for-qemu.patch
@@ -30,7 +30,7 @@ Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
create mode 100644 pve-backup.c
diff --git a/block/meson.build b/block/meson.build
-index 067708b7c0..42aac96dbb 100644
+index 7f22e7f177..2783b77e9c 100644
--- a/block/meson.build
+++ b/block/meson.build
@@ -48,6 +48,11 @@ block_ss.add(files(
@@ -87,7 +87,7 @@ index bfb3c043a0..89ca64444d 100644
+ hmp_handle_error(mon, error);
+}
diff --git a/blockdev.c b/blockdev.c
-index 1af5a1fcb2..9916a72334 100644
+index ce62a9b439..1600b24eab 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -36,6 +36,7 @@
@@ -99,7 +99,7 @@ index 1af5a1fcb2..9916a72334 100644
#include "monitor/monitor.h"
#include "qemu/error-report.h"
diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
-index 925e680e5a..d9b787d2c6 100644
+index 97b88eaaad..92a8867afb 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -484,6 +484,20 @@ SRST
@@ -124,10 +124,10 @@ index 925e680e5a..d9b787d2c6 100644
{
.name = "usernet",
diff --git a/hmp-commands.hx b/hmp-commands.hx
-index 7f0ac498c4..994445f301 100644
+index bbcc73e942..97f24942b3 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
-@@ -99,6 +99,35 @@ ERST
+@@ -101,6 +101,35 @@ ERST
SRST
``block_stream``
Copy data from a backing file into a block device.
@@ -164,7 +164,7 @@ index 7f0ac498c4..994445f301 100644
{
diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
-index 3a39ba41b5..d269b4c99c 100644
+index 55067beff1..5a98d2d927 100644
--- a/include/monitor/hmp.h
+++ b/include/monitor/hmp.h
@@ -30,6 +30,7 @@ void hmp_info_savevm(Monitor *mon, const QDict *qdict);
@@ -185,10 +185,10 @@ index 3a39ba41b5..d269b4c99c 100644
void hmp_device_add(Monitor *mon, const QDict *qdict);
void hmp_device_del(Monitor *mon, const QDict *qdict);
diff --git a/meson.build b/meson.build
-index 96a91b95e4..76fcb23299 100644
+index ffff66c0cc..0bc2fb5b10 100644
--- a/meson.build
+++ b/meson.build
-@@ -1268,6 +1268,7 @@ keyutils = dependency('libkeyutils', required: false,
+@@ -1463,6 +1463,7 @@ keyutils = dependency('libkeyutils', required: false,
has_gettid = cc.has_function('gettid')
libuuid = cc.find_library('uuid', required: true)
@@ -197,10 +197,10 @@ index 96a91b95e4..76fcb23299 100644
# libselinux
selinux = dependency('libselinux',
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
-index c64b959738..ef654221c4 100644
+index 1507180990..1168773da7 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
-@@ -195,6 +195,50 @@ void hmp_info_mice(Monitor *mon, const QDict *qdict)
+@@ -197,6 +197,50 @@ void hmp_info_mice(Monitor *mon, const QDict *qdict)
qapi_free_MouseInfoList(mice_list);
}
@@ -1464,12 +1464,12 @@ index 0000000000..88f5ee133f
+ return info;
+}
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 564b6b43f7..ffcc25367b 100644
+index ddac91e8f6..90ad07b7ee 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -744,6 +744,115 @@
- { 'command': 'query-block', 'returns': ['BlockInfo'] }
-
+@@ -740,6 +740,115 @@
+ { 'command': 'query-block', 'returns': ['BlockInfo'],
+ 'allow-preconfig': true }
+##
+# @BackupStatus:
@@ -1584,10 +1584,10 @@ index 564b6b43f7..ffcc25367b 100644
# @BlockDeviceTimedStats:
#
diff --git a/qapi/common.json b/qapi/common.json
-index 412cc4f5ae..3e7a77ea66 100644
+index 356db3f670..aae8a3b682 100644
--- a/qapi/common.json
+++ b/qapi/common.json
-@@ -208,3 +208,16 @@
+@@ -206,3 +206,16 @@
##
{ 'struct': 'HumanReadableText',
'data': { 'human-readable-text': 'str' } }
@@ -1605,7 +1605,7 @@ index 412cc4f5ae..3e7a77ea66 100644
+##
+{ 'struct': 'UuidInfo', 'data': {'UUID': 'str'} }
diff --git a/qapi/machine.json b/qapi/machine.json
-index 39ba204b52..091aafeff7 100644
+index d868e4d31d..a63d9a078d 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -4,6 +4,8 @@
@@ -1617,7 +1617,7 @@ index 39ba204b52..091aafeff7 100644
##
# = Machines
##
-@@ -227,19 +229,6 @@
+@@ -226,19 +228,6 @@
##
{ 'command': 'query-target', 'returns': 'TargetInfo' }
diff --git a/debian/patches/pve/0029-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch b/debian/patches/pve/0030-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch
similarity index 95%
rename from debian/patches/pve/0029-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch
rename to debian/patches/pve/0030-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch
index f1c77cb..6c61992 100644
--- a/debian/patches/pve/0029-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch
+++ b/debian/patches/pve/0030-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch
@@ -7,15 +7,15 @@ Subject: [PATCH] PVE-Backup: pbs-restore - new command to restore from proxmox
Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
meson.build | 4 +
- pbs-restore.c | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 228 insertions(+)
+ pbs-restore.c | 223 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 227 insertions(+)
create mode 100644 pbs-restore.c
diff --git a/meson.build b/meson.build
-index 76fcb23299..9476ccbe07 100644
+index 0bc2fb5b10..f48d2e0457 100644
--- a/meson.build
+++ b/meson.build
-@@ -3365,6 +3365,10 @@ if have_tools
+@@ -3613,6 +3613,10 @@ if have_tools
vma = executable('vma', files('vma.c', 'vma-reader.c') + genh,
dependencies: [authz, block, crypto, io, qom], install: true)
@@ -28,10 +28,10 @@ index 76fcb23299..9476ccbe07 100644
subdir('contrib/elf2dmp')
diff --git a/pbs-restore.c b/pbs-restore.c
new file mode 100644
-index 0000000000..4d3f925a1b
+index 0000000000..2f834cf42e
--- /dev/null
+++ b/pbs-restore.c
-@@ -0,0 +1,224 @@
+@@ -0,0 +1,223 @@
+/*
+ * Qemu image restore helper for Proxmox Backup
+ *
@@ -50,7 +50,6 @@ index 0000000000..4d3f925a1b
+#include <getopt.h>
+#include <string.h>
+
-+#include "qemu-common.h"
+#include "qemu/module.h"
+#include "qemu/error-report.h"
+#include "qemu/main-loop.h"
@@ -96,7 +95,7 @@ index 0000000000..4d3f925a1b
+ }
+ res = blk_pwrite_zeroes(callback_data->target, offset, data_len, 0);
+ } else {
-+ res = blk_pwrite(callback_data->target, offset, data, data_len, 0);
++ res = blk_pwrite(callback_data->target, offset, data_len, data, 0);
+ }
+
+ if (res < 0) {
diff --git a/debian/patches/pve/0030-PVE-Backup-Add-dirty-bitmap-tracking-for-incremental.patch b/debian/patches/pve/0031-PVE-Backup-Add-dirty-bitmap-tracking-for-incremental.patch
similarity index 98%
rename from debian/patches/pve/0030-PVE-Backup-Add-dirty-bitmap-tracking-for-incremental.patch
rename to debian/patches/pve/0031-PVE-Backup-Add-dirty-bitmap-tracking-for-incremental.patch
index 012c0b3..8d37565 100644
--- a/debian/patches/pve/0030-PVE-Backup-Add-dirty-bitmap-tracking-for-incremental.patch
+++ b/debian/patches/pve/0031-PVE-Backup-Add-dirty-bitmap-tracking-for-incremental.patch
@@ -41,10 +41,10 @@ index 89ca64444d..45da74d7a0 100644
false, NULL, false, NULL, !!devlist,
devlist, qdict_haskey(qdict, "speed"), speed, &error);
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
-index ef654221c4..c5c74ac1dc 100644
+index 1168773da7..4c1671e289 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
-@@ -221,19 +221,42 @@ void hmp_info_backup(Monitor *mon, const QDict *qdict)
+@@ -223,19 +223,42 @@ void hmp_info_backup(Monitor *mon, const QDict *qdict)
monitor_printf(mon, "End time: %s", ctime(&info->end_time));
}
@@ -405,10 +405,10 @@ index 88f5ee133f..1c49cd178d 100644
qemu_mutex_unlock(&backup_state.stat.lock);
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index ffcc25367b..b332d8a8da 100644
+index 90ad07b7ee..3ad9eb5d1a 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -757,8 +757,13 @@
+@@ -753,8 +753,13 @@
#
# @total: total amount of bytes involved in the backup process
#
@@ -422,7 +422,7 @@ index ffcc25367b..b332d8a8da 100644
# @zero-bytes: amount of 'zero' bytes detected.
#
# @start-time: time (epoch) when backup job started.
-@@ -771,8 +776,8 @@
+@@ -767,8 +772,8 @@
#
##
{ 'struct': 'BackupStatus',
@@ -433,7 +433,7 @@ index ffcc25367b..b332d8a8da 100644
'*start-time': 'int', '*end-time': 'int',
'*backup-file': 'str', '*uuid': 'str' } }
-@@ -815,6 +820,8 @@
+@@ -811,6 +816,8 @@
#
# @backup-time: backup timestamp (Unix epoch, required for format 'pbs')
#
@@ -442,7 +442,7 @@ index ffcc25367b..b332d8a8da 100644
# Returns: the uuid of the backup job
#
##
-@@ -825,6 +832,7 @@
+@@ -821,6 +828,7 @@
'*fingerprint': 'str',
'*backup-id': 'str',
'*backup-time': 'int',
diff --git a/debian/patches/pve/0031-PVE-various-PBS-fixes.patch b/debian/patches/pve/0032-PVE-various-PBS-fixes.patch
similarity index 99%
rename from debian/patches/pve/0031-PVE-various-PBS-fixes.patch
rename to debian/patches/pve/0032-PVE-various-PBS-fixes.patch
index e5ebc18..3bd8426 100644
--- a/debian/patches/pve/0031-PVE-various-PBS-fixes.patch
+++ b/debian/patches/pve/0032-PVE-various-PBS-fixes.patch
@@ -194,10 +194,10 @@ index 1c49cd178d..c15abefdda 100644
.format = format,
.has_config_file = has_config_file,
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index b332d8a8da..abef91062a 100644
+index 3ad9eb5d1a..4120052690 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -822,6 +822,10 @@
+@@ -818,6 +818,10 @@
#
# @use-dirty-bitmap: use dirty bitmap to detect incremental changes since last job (optional for format 'pbs')
#
@@ -208,7 +208,7 @@ index b332d8a8da..abef91062a 100644
# Returns: the uuid of the backup job
#
##
-@@ -833,6 +837,8 @@
+@@ -829,6 +833,8 @@
'*backup-id': 'str',
'*backup-time': 'int',
'*use-dirty-bitmap': 'bool',
diff --git a/debian/patches/pve/0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch b/debian/patches/pve/0033-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
similarity index 91%
rename from debian/patches/pve/0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
rename to debian/patches/pve/0033-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
index 3b08ed1..9a850c0 100644
--- a/debian/patches/pve/0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
+++ b/debian/patches/pve/0033-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
@@ -13,13 +13,13 @@ Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
block/meson.build | 3 +
block/pbs.c | 276 +++++++++++++++++++++++++++++++++++++++++++
configure | 9 ++
- meson.build | 1 +
+ meson.build | 2 +-
qapi/block-core.json | 13 ++
- 5 files changed, 302 insertions(+)
+ 5 files changed, 302 insertions(+), 1 deletion(-)
create mode 100644 block/pbs.c
diff --git a/block/meson.build b/block/meson.build
-index 42aac96dbb..f94cc0cd25 100644
+index 2783b77e9c..a26a69434e 100644
--- a/block/meson.build
+++ b/block/meson.build
@@ -53,6 +53,9 @@ block_ss.add(files(
@@ -315,63 +315,64 @@ index 0000000000..0b05ea9080
+
+block_init(bdrv_pbs_init);
diff --git a/configure b/configure
-index 7c08c18358..08d164b4f5 100755
+index 72ab03f11a..7203c270ec 100755
--- a/configure
+++ b/configure
-@@ -325,6 +325,7 @@ trace_file="trace"
- opengl="$default_feature"
+@@ -309,6 +309,7 @@ linux_user=""
+ bsd_user=""
+ pie=""
coroutine=""
- tls_priority="NORMAL"
+pbs_bdrv="yes"
plugins="$default_feature"
- secret_keyring="$default_feature"
meson=""
-@@ -991,6 +992,10 @@ for opt do
- ;;
- --disable-pvrdma) pvrdma="no"
+ meson_args=""
+@@ -902,6 +903,10 @@ for opt do
+ --enable-uuid|--disable-uuid)
+ echo "$0: $opt is obsolete, UUID support is always built" >&2
;;
+ --disable-pbs-bdrv) pbs_bdrv="no"
+ ;;
+ --enable-pbs-bdrv) pbs_bdrv="yes"
+ ;;
- --disable-vhost-user) vhost_user="no"
+ --with-git=*) git="$optarg"
;;
- --enable-vhost-user) vhost_user="yes"
-@@ -1265,6 +1270,7 @@ cat << EOF
- vhost-user vhost-user backend support
- vhost-vdpa vhost-vdpa kernel backend support
- opengl opengl support
+ --with-git-submodules=*)
+@@ -1087,6 +1092,7 @@ cat << EOF
+ debug-info debugging information
+ safe-stack SafeStack Stack Smash Protection. Depends on
+ clang/llvm >= 3.7 and requires coroutine backend ucontext.
+ pbs-bdrv Proxmox backup server read-only block driver support
- gio libgio support
NOTE: The object files are built at the place where configure is launched
-@@ -2848,6 +2854,9 @@ if test "$xen" = "enabled" ; then
- echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
- echo "XEN_LIBS=$xen_libs" >> $config_host_mak
+ EOF
+@@ -2463,6 +2469,9 @@ echo "TARGET_DIRS=$target_list" >> $config_host_mak
+ if test "$modules" = "yes"; then
+ echo "CONFIG_MODULES=y" >> $config_host_mak
fi
+if test "$pbs_bdrv" = "yes" ; then
+ echo "CONFIG_PBS_BDRV=y" >> $config_host_mak
+fi
- if test "$vhost_scsi" = "yes" ; then
- echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
- fi
+
+ # XXX: suppress that
+ if [ "$bsd" = "yes" ] ; then
diff --git a/meson.build b/meson.build
-index 9476ccbe07..d3783a83e4 100644
+index f48d2e0457..be4785e2f6 100644
--- a/meson.build
+++ b/meson.build
-@@ -3743,6 +3743,7 @@ summary_info += {'bzip2 support': libbzip2}
+@@ -3986,7 +3986,7 @@ summary_info += {'bzip2 support': libbzip2}
summary_info += {'lzfse support': liblzfse}
summary_info += {'zstd support': zstd}
summary_info += {'NUMA host support': numa}
+-summary_info += {'capstone': capstone}
+summary_info += {'PBS bdrv support': config_host.has_key('CONFIG_PBS_BDRV')}
- summary_info += {'capstone': capstone_opt == 'internal' ? capstone_opt : capstone}
summary_info += {'libpmem support': libpmem}
summary_info += {'libdaxctl support': libdaxctl}
+ summary_info += {'libudev': libudev}
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index abef91062a..68591cb343 100644
+index 4120052690..96bc696aaa 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -3073,6 +3073,7 @@
+@@ -3099,6 +3099,7 @@
'luks', 'nbd', 'nfs', 'null-aio', 'null-co', 'nvme', 'parallels',
'preallocate', 'qcow', 'qcow2', 'qed', 'quorum', 'raw', 'rbd',
{ 'name': 'replication', 'if': 'CONFIG_REPLICATION' },
@@ -379,7 +380,7 @@ index abef91062a..68591cb343 100644
'ssh', 'throttle', 'vdi', 'vhdx', 'vmdk', 'vpc', 'vvfat' ] }
##
-@@ -3145,6 +3146,17 @@
+@@ -3171,6 +3172,17 @@
{ 'struct': 'BlockdevOptionsNull',
'data': { '*size': 'int', '*latency-ns': 'uint64', '*read-zeroes': 'bool' } }
@@ -397,7 +398,7 @@ index abef91062a..68591cb343 100644
##
# @BlockdevOptionsNVMe:
#
-@@ -4405,6 +4417,7 @@
+@@ -4455,6 +4467,7 @@
'nfs': 'BlockdevOptionsNfs',
'null-aio': 'BlockdevOptionsNull',
'null-co': 'BlockdevOptionsNull',
diff --git a/debian/patches/pve/0033-PVE-add-query_proxmox_support-QMP-command.patch b/debian/patches/pve/0034-PVE-add-query_proxmox_support-QMP-command.patch
similarity index 97%
rename from debian/patches/pve/0033-PVE-add-query_proxmox_support-QMP-command.patch
rename to debian/patches/pve/0034-PVE-add-query_proxmox_support-QMP-command.patch
index 0f1f0c6..dbcef29 100644
--- a/debian/patches/pve/0033-PVE-add-query_proxmox_support-QMP-command.patch
+++ b/debian/patches/pve/0034-PVE-add-query_proxmox_support-QMP-command.patch
@@ -33,10 +33,10 @@ index c15abefdda..4684789813 100644
+ return ret;
+}
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 68591cb343..7d25aa4fa1 100644
+index 96bc696aaa..0b453c61d4 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -867,6 +867,35 @@
+@@ -863,6 +863,35 @@
##
{ 'command': 'backup-cancel' }
diff --git a/debian/patches/pve/0034-PVE-add-query-pbs-bitmap-info-QMP-call.patch b/debian/patches/pve/0035-PVE-add-query-pbs-bitmap-info-QMP-call.patch
similarity index 98%
rename from debian/patches/pve/0034-PVE-add-query-pbs-bitmap-info-QMP-call.patch
rename to debian/patches/pve/0035-PVE-add-query-pbs-bitmap-info-QMP-call.patch
index d3ba75c..29a96d1 100644
--- a/debian/patches/pve/0034-PVE-add-query-pbs-bitmap-info-QMP-call.patch
+++ b/debian/patches/pve/0035-PVE-add-query-pbs-bitmap-info-QMP-call.patch
@@ -15,10 +15,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
3 files changed, 159 insertions(+), 42 deletions(-)
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
-index c5c74ac1dc..df273f41fb 100644
+index 4c1671e289..c1152f55a7 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
-@@ -198,6 +198,7 @@ void hmp_info_mice(Monitor *mon, const QDict *qdict)
+@@ -200,6 +200,7 @@ void hmp_info_mice(Monitor *mon, const QDict *qdict)
void hmp_info_backup(Monitor *mon, const QDict *qdict)
{
BackupStatus *info;
@@ -26,7 +26,7 @@ index c5c74ac1dc..df273f41fb 100644
info = qmp_query_backup(NULL);
-@@ -228,26 +229,29 @@ void hmp_info_backup(Monitor *mon, const QDict *qdict)
+@@ -230,26 +231,29 @@ void hmp_info_backup(Monitor *mon, const QDict *qdict)
// this should not happen normally
monitor_printf(mon, "Total size: %d\n", 0);
} else {
@@ -359,10 +359,10 @@ index 4684789813..f90abaa50a 100644
return ret;
}
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 7d25aa4fa1..69571d86eb 100644
+index 0b453c61d4..16e184dd28 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -875,6 +875,8 @@
+@@ -871,6 +871,8 @@
# @pbs-dirty-bitmap: True if dirty-bitmap-incremental backups to PBS are
# supported.
#
@@ -371,7 +371,7 @@ index 7d25aa4fa1..69571d86eb 100644
# @pbs-dirty-bitmap-savevm: True if 'dirty-bitmaps' migration capability can
# safely be set for savevm-async.
#
-@@ -883,6 +885,7 @@
+@@ -879,6 +881,7 @@
##
{ 'struct': 'ProxmoxSupportStatus',
'data': { 'pbs-dirty-bitmap': 'bool',
@@ -379,7 +379,7 @@ index 7d25aa4fa1..69571d86eb 100644
'pbs-dirty-bitmap-savevm': 'bool',
'pbs-library-version': 'str' } }
-@@ -896,6 +899,59 @@
+@@ -892,6 +895,59 @@
##
{ 'command': 'query-proxmox-support', 'returns': 'ProxmoxSupportStatus' }
diff --git a/debian/patches/pve/0035-PVE-redirect-stderr-to-journal-when-daemonized.patch b/debian/patches/pve/0036-PVE-redirect-stderr-to-journal-when-daemonized.patch
similarity index 86%
rename from debian/patches/pve/0035-PVE-redirect-stderr-to-journal-when-daemonized.patch
rename to debian/patches/pve/0036-PVE-redirect-stderr-to-journal-when-daemonized.patch
index 89727a4..c5be26b 100644
--- a/debian/patches/pve/0035-PVE-redirect-stderr-to-journal-when-daemonized.patch
+++ b/debian/patches/pve/0036-PVE-redirect-stderr-to-journal-when-daemonized.patch
@@ -14,10 +14,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/meson.build b/meson.build
-index d3783a83e4..715245ba20 100644
+index be4785e2f6..3fc7c8d435 100644
--- a/meson.build
+++ b/meson.build
-@@ -1268,6 +1268,7 @@ keyutils = dependency('libkeyutils', required: false,
+@@ -1463,6 +1463,7 @@ keyutils = dependency('libkeyutils', required: false,
has_gettid = cc.has_function('gettid')
libuuid = cc.find_library('uuid', required: true)
@@ -25,7 +25,7 @@ index d3783a83e4..715245ba20 100644
libproxmox_backup_qemu = cc.find_library('proxmox_backup_qemu', required: true)
# libselinux
-@@ -2861,6 +2862,7 @@ if have_block
+@@ -3105,6 +3106,7 @@ if have_block
# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon,
# os-win32.c does not
blockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c'))
@@ -34,7 +34,7 @@ index d3783a83e4..715245ba20 100644
endif
diff --git a/os-posix.c b/os-posix.c
-index 24692c8593..d1bc5ac12d 100644
+index 321fc4bd13..b1870d2690 100644
--- a/os-posix.c
+++ b/os-posix.c
@@ -28,6 +28,8 @@
@@ -44,15 +44,15 @@ index 24692c8593..d1bc5ac12d 100644
+#include <systemd/sd-journal.h>
+#include <syslog.h>
- #include "qemu-common.h"
/* Needed early for CONFIG_BSD etc. */
-@@ -291,9 +293,10 @@ void os_setup_post(void)
+ #include "net/slirp.h"
+@@ -281,9 +283,10 @@ void os_setup_post(void)
dup2(fd, 0);
dup2(fd, 1);
- /* In case -D is given do not redirect stderr to /dev/null */
+ /* In case -D is given do not redirect stderr to journal */
- if (!qemu_logfile) {
+ if (!qemu_log_enabled()) {
- dup2(fd, 2);
+ int journal_fd = sd_journal_stream_fd("QEMU", LOG_ERR, 0);
+ dup2(journal_fd, 2);
diff --git a/debian/patches/pve/0036-PVE-Add-sequential-job-transaction-support.patch b/debian/patches/pve/0037-PVE-Add-sequential-job-transaction-support.patch
similarity index 100%
rename from debian/patches/pve/0036-PVE-Add-sequential-job-transaction-support.patch
rename to debian/patches/pve/0037-PVE-Add-sequential-job-transaction-support.patch
diff --git a/debian/patches/pve/0037-PVE-Backup-Use-a-transaction-to-synchronize-job-stat.patch b/debian/patches/pve/0038-PVE-Backup-Use-a-transaction-to-synchronize-job-stat.patch
similarity index 100%
rename from debian/patches/pve/0037-PVE-Backup-Use-a-transaction-to-synchronize-job-stat.patch
rename to debian/patches/pve/0038-PVE-Backup-Use-a-transaction-to-synchronize-job-stat.patch
diff --git a/debian/patches/pve/0038-PVE-Backup-Don-t-block-on-finishing-and-cleanup-crea.patch b/debian/patches/pve/0039-PVE-Backup-Don-t-block-on-finishing-and-cleanup-crea.patch
similarity index 99%
rename from debian/patches/pve/0038-PVE-Backup-Don-t-block-on-finishing-and-cleanup-crea.patch
rename to debian/patches/pve/0039-PVE-Backup-Don-t-block-on-finishing-and-cleanup-crea.patch
index 51a2b53..44c167b 100644
--- a/debian/patches/pve/0038-PVE-Backup-Don-t-block-on-finishing-and-cleanup-crea.patch
+++ b/debian/patches/pve/0039-PVE-Backup-Don-t-block-on-finishing-and-cleanup-crea.patch
@@ -481,10 +481,10 @@ index 63c686463f..6f05796fad 100644
qemu_mutex_unlock(&backup_state.stat.lock);
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 69571d86eb..e6c3687bea 100644
+index 16e184dd28..cb17d00fe0 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -774,12 +774,15 @@
+@@ -770,12 +770,15 @@
#
# @uuid: uuid for this backup job
#
diff --git a/debian/patches/pve/0039-PVE-Migrate-dirty-bitmap-state-via-savevm.patch b/debian/patches/pve/0040-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
similarity index 96%
rename from debian/patches/pve/0039-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
rename to debian/patches/pve/0040-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
index 36c6d96..e80a716 100644
--- a/debian/patches/pve/0039-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
+++ b/debian/patches/pve/0040-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
@@ -36,11 +36,11 @@ index 465906710d..4f0aeceb6f 100644
+
#endif
diff --git a/migration/meson.build b/migration/meson.build
-index 1e2aec8486..259e863a43 100644
+index 0842d00cd2..d012f4d8d3 100644
--- a/migration/meson.build
+++ b/migration/meson.build
-@@ -7,8 +7,10 @@ migration_files = files(
- 'qemu-file-channel.c',
+@@ -6,8 +6,10 @@ migration_files = files(
+ 'vmstate.c',
'qemu-file.c',
'yank_functions.c',
+ 'pbs-state.c',
@@ -51,10 +51,10 @@ index 1e2aec8486..259e863a43 100644
softmmu_ss.add(files(
'block-dirty-bitmap.c',
diff --git a/migration/migration.c b/migration/migration.c
-index 695f0f2900..6e17f8e91c 100644
+index bb8bbddfe4..8109e468eb 100644
--- a/migration/migration.c
+++ b/migration/migration.c
-@@ -214,6 +214,7 @@ void migration_object_init(void)
+@@ -229,6 +229,7 @@ void migration_object_init(void)
blk_mig_init();
ram_mig_init();
dirty_bitmap_mig_init();
@@ -187,10 +187,10 @@ index 6f05796fad..5fa3cc1352 100644
return ret;
}
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index e6c3687bea..05382a1069 100644
+index cb17d00fe0..bd978ea562 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -883,6 +883,11 @@
+@@ -879,6 +879,11 @@
# @pbs-dirty-bitmap-savevm: True if 'dirty-bitmaps' migration capability can
# safely be set for savevm-async.
#
@@ -202,7 +202,7 @@ index e6c3687bea..05382a1069 100644
# @pbs-library-version: Running version of libproxmox-backup-qemu0 library.
#
##
-@@ -890,6 +895,7 @@
+@@ -886,6 +891,7 @@
'data': { 'pbs-dirty-bitmap': 'bool',
'query-bitmap-info': 'bool',
'pbs-dirty-bitmap-savevm': 'bool',
diff --git a/debian/patches/pve/0040-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch b/debian/patches/pve/0041-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch
similarity index 100%
rename from debian/patches/pve/0040-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch
rename to debian/patches/pve/0041-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch
diff --git a/debian/patches/pve/0041-PVE-fall-back-to-open-iscsi-initiatorname.patch b/debian/patches/pve/0042-PVE-fall-back-to-open-iscsi-initiatorname.patch
similarity index 98%
rename from debian/patches/pve/0041-PVE-fall-back-to-open-iscsi-initiatorname.patch
rename to debian/patches/pve/0042-PVE-fall-back-to-open-iscsi-initiatorname.patch
index c30bb2b..bed3e62 100644
--- a/debian/patches/pve/0041-PVE-fall-back-to-open-iscsi-initiatorname.patch
+++ b/debian/patches/pve/0042-PVE-fall-back-to-open-iscsi-initiatorname.patch
@@ -21,7 +21,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 30 insertions(+)
diff --git a/block/iscsi.c b/block/iscsi.c
-index 51f2a5eeaa..f11591ac94 100644
+index d707d0b354..da6ed52323 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -1386,12 +1386,42 @@ static char *get_initiator_name(QemuOpts *opts)
diff --git a/debian/patches/pve/0042-PVE-Use-coroutine-QMP-for-backup-cancel_backup.patch b/debian/patches/pve/0043-PVE-Use-coroutine-QMP-for-backup-cancel_backup.patch
similarity index 99%
rename from debian/patches/pve/0042-PVE-Use-coroutine-QMP-for-backup-cancel_backup.patch
rename to debian/patches/pve/0043-PVE-Use-coroutine-QMP-for-backup-cancel_backup.patch
index 3de10a6..c07cdce 100644
--- a/debian/patches/pve/0042-PVE-Use-coroutine-QMP-for-backup-cancel_backup.patch
+++ b/debian/patches/pve/0043-PVE-Use-coroutine-QMP-for-backup-cancel_backup.patch
@@ -54,10 +54,10 @@ index ea7b665aa2..ef45552e3b 100644
Error *error = NULL;
diff --git a/hmp-commands.hx b/hmp-commands.hx
-index 994445f301..aaea875970 100644
+index 97f24942b3..7a2be816da 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
-@@ -109,6 +109,7 @@ ERST
+@@ -111,6 +111,7 @@ ERST
"\n\t\t\t Use -d to dump data into a directory instead"
"\n\t\t\t of using VMA format.",
.cmd = hmp_backup,
@@ -65,7 +65,7 @@ index 994445f301..aaea875970 100644
},
SRST
-@@ -122,6 +123,7 @@ ERST
+@@ -124,6 +125,7 @@ ERST
.params = "",
.help = "cancel the current VM backup",
.cmd = hmp_backup_cancel,
@@ -575,10 +575,10 @@ index 5fa3cc1352..323014744c 100644
BackupStatus *qmp_query_backup(Error **errp)
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 05382a1069..f0399bf249 100644
+index bd978ea562..ca1966f54b 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -846,7 +846,7 @@
+@@ -842,7 +842,7 @@
'*config-file': 'str',
'*firewall-file': 'str',
'*devlist': 'str', '*speed': 'int' },
@@ -587,7 +587,7 @@ index 05382a1069..f0399bf249 100644
##
# @query-backup:
-@@ -868,7 +868,7 @@
+@@ -864,7 +864,7 @@
# Notes: This command succeeds even if there is no backup process running.
#
##
diff --git a/debian/patches/pve/0043-PBS-add-master-key-support.patch b/debian/patches/pve/0044-PBS-add-master-key-support.patch
similarity index 97%
rename from debian/patches/pve/0043-PBS-add-master-key-support.patch
rename to debian/patches/pve/0044-PBS-add-master-key-support.patch
index 356cfd9..1716c05 100644
--- a/debian/patches/pve/0043-PBS-add-master-key-support.patch
+++ b/debian/patches/pve/0044-PBS-add-master-key-support.patch
@@ -58,10 +58,10 @@ index 323014744c..9f6c04a512 100644
return ret;
}
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index f0399bf249..13e03ca154 100644
+index ca1966f54b..fc8a125451 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -817,6 +817,8 @@
+@@ -813,6 +813,8 @@
#
# @key-password: password for keyfile (optional for format 'pbs')
#
@@ -70,7 +70,7 @@ index f0399bf249..13e03ca154 100644
# @fingerprint: server cert fingerprint (optional for format 'pbs')
#
# @backup-id: backup ID (required for format 'pbs')
-@@ -836,6 +838,7 @@
+@@ -832,6 +834,7 @@
'*password': 'str',
'*keyfile': 'str',
'*key-password': 'str',
@@ -78,7 +78,7 @@ index f0399bf249..13e03ca154 100644
'*fingerprint': 'str',
'*backup-id': 'str',
'*backup-time': 'int',
-@@ -888,6 +891,9 @@
+@@ -884,6 +887,9 @@
# migration cap if this is false/unset may lead
# to crashes on migration!
#
@@ -88,7 +88,7 @@ index f0399bf249..13e03ca154 100644
# @pbs-library-version: Running version of libproxmox-backup-qemu0 library.
#
##
-@@ -896,6 +902,7 @@
+@@ -892,6 +898,7 @@
'query-bitmap-info': 'bool',
'pbs-dirty-bitmap-savevm': 'bool',
'pbs-dirty-bitmap-migration': 'bool',
diff --git a/debian/patches/pve/0044-PVE-block-pbs-fast-path-reads-without-allocation-if-.patch b/debian/patches/pve/0045-PVE-block-pbs-fast-path-reads-without-allocation-if-.patch
similarity index 100%
rename from debian/patches/pve/0044-PVE-block-pbs-fast-path-reads-without-allocation-if-.patch
rename to debian/patches/pve/0045-PVE-block-pbs-fast-path-reads-without-allocation-if-.patch
diff --git a/debian/patches/pve/0045-PVE-block-stream-increase-chunk-size.patch b/debian/patches/pve/0046-PVE-block-stream-increase-chunk-size.patch
similarity index 100%
rename from debian/patches/pve/0045-PVE-block-stream-increase-chunk-size.patch
rename to debian/patches/pve/0046-PVE-block-stream-increase-chunk-size.patch
diff --git a/debian/patches/pve/0046-block-io-accept-NULL-qiov-in-bdrv_pad_request.patch b/debian/patches/pve/0047-block-io-accept-NULL-qiov-in-bdrv_pad_request.patch
similarity index 90%
rename from debian/patches/pve/0046-block-io-accept-NULL-qiov-in-bdrv_pad_request.patch
rename to debian/patches/pve/0047-block-io-accept-NULL-qiov-in-bdrv_pad_request.patch
index d1d30b1..b294d43 100644
--- a/debian/patches/pve/0046-block-io-accept-NULL-qiov-in-bdrv_pad_request.patch
+++ b/debian/patches/pve/0047-block-io-accept-NULL-qiov-in-bdrv_pad_request.patch
@@ -17,10 +17,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 4 insertions(+)
diff --git a/block/io.c b/block/io.c
-index 3280144a17..cd7ba08768 100644
+index 0a8cbefe86..531b3b7a2d 100644
--- a/block/io.c
+++ b/block/io.c
-@@ -1794,6 +1794,10 @@ static int bdrv_pad_request(BlockDriverState *bs,
+@@ -1734,6 +1734,10 @@ static int bdrv_pad_request(BlockDriverState *bs,
{
int ret;
diff --git a/debian/patches/pve/0047-block-add-alloc-track-driver.patch b/debian/patches/pve/0048-block-add-alloc-track-driver.patch
similarity index 99%
rename from debian/patches/pve/0047-block-add-alloc-track-driver.patch
rename to debian/patches/pve/0048-block-add-alloc-track-driver.patch
index 1cf88ab..45c1c4d 100644
--- a/debian/patches/pve/0047-block-add-alloc-track-driver.patch
+++ b/debian/patches/pve/0048-block-add-alloc-track-driver.patch
@@ -389,7 +389,7 @@ index 0000000000..6b50fbe537
+
+block_init(bdrv_alloc_track_init);
diff --git a/block/meson.build b/block/meson.build
-index f94cc0cd25..1716febb1d 100644
+index a26a69434e..74e5f49758 100644
--- a/block/meson.build
+++ b/block/meson.build
@@ -2,6 +2,7 @@ block_ss.add(genh)
diff --git a/debian/patches/pve/0048-PVE-whitelist-invalid-QAPI-names-for-backwards-compa.patch b/debian/patches/pve/0049-PVE-whitelist-invalid-QAPI-names-for-backwards-compa.patch
similarity index 95%
rename from debian/patches/pve/0048-PVE-whitelist-invalid-QAPI-names-for-backwards-compa.patch
rename to debian/patches/pve/0049-PVE-whitelist-invalid-QAPI-names-for-backwards-compa.patch
index 0496b93..95f191f 100644
--- a/debian/patches/pve/0048-PVE-whitelist-invalid-QAPI-names-for-backwards-compa.patch
+++ b/debian/patches/pve/0049-PVE-whitelist-invalid-QAPI-names-for-backwards-compa.patch
@@ -10,7 +10,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/qapi/pragma.json b/qapi/pragma.json
-index 41139d8645..a581acf7d4 100644
+index a2358e303a..9ff5c84ffd 100644
--- a/qapi/pragma.json
+++ b/qapi/pragma.json
@@ -15,6 +15,7 @@
@@ -21,7 +21,7 @@ index 41139d8645..a581acf7d4 100644
'migrate_cancel',
'netdev_add',
'netdev_del',
-@@ -63,6 +64,8 @@
+@@ -64,6 +65,8 @@
'SysEmuTarget', # query-cpu-fast, query-target
'UuidInfo', # query-uuid
'VncClientInfo', # query-vnc, query-vnc-servers, ...
diff --git a/debian/patches/pve/0049-PVE-savevm-async-register-yank-before-migration_inco.patch b/debian/patches/pve/0050-PVE-savevm-async-register-yank-before-migration_inco.patch
similarity index 90%
rename from debian/patches/pve/0049-PVE-savevm-async-register-yank-before-migration_inco.patch
rename to debian/patches/pve/0050-PVE-savevm-async-register-yank-before-migration_inco.patch
index a9413ab..68622c2 100644
--- a/debian/patches/pve/0049-PVE-savevm-async-register-yank-before-migration_inco.patch
+++ b/debian/patches/pve/0050-PVE-savevm-async-register-yank-before-migration_inco.patch
@@ -11,10 +11,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 5 insertions(+)
diff --git a/migration/savevm-async.c b/migration/savevm-async.c
-index 0bc5799cf8..10ebefef06 100644
+index e65a5e3482..2ed2536816 100644
--- a/migration/savevm-async.c
+++ b/migration/savevm-async.c
-@@ -19,6 +19,7 @@
+@@ -20,6 +20,7 @@
#include "qemu/timer.h"
#include "qemu/main-loop.h"
#include "qemu/rcu.h"
@@ -22,7 +22,7 @@ index 0bc5799cf8..10ebefef06 100644
/* #define DEBUG_SAVEVM_STATE */
-@@ -586,6 +587,10 @@ int load_snapshot_from_blockdev(const char *filename, Error **errp)
+@@ -514,6 +515,10 @@ int load_snapshot_from_blockdev(const char *filename, Error **errp)
dirty_bitmap_mig_before_vm_start();
qemu_fclose(f);
diff --git a/debian/patches/pve/0050-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch b/debian/patches/pve/0051-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
similarity index 91%
rename from debian/patches/pve/0050-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
rename to debian/patches/pve/0051-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
index 9b7c51e..e5c467d 100644
--- a/debian/patches/pve/0050-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
+++ b/debian/patches/pve/0051-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
@@ -12,7 +12,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
3 files changed, 36 insertions(+), 7 deletions(-)
diff --git a/docs/tools/qemu-img.rst b/docs/tools/qemu-img.rst
-index 33979b7430..68e9c80788 100644
+index 699229eef6..4189ced8bc 100644
--- a/docs/tools/qemu-img.rst
+++ b/docs/tools/qemu-img.rst
@@ -492,10 +492,10 @@ Command description:
@@ -46,10 +46,10 @@ index b5b0bb4467..36f97e1f19 100644
DEF("info", img_info,
diff --git a/qemu-img.c b/qemu-img.c
-index 35c2bdc95c..6e93bbd425 100644
+index c6b4a5567d..041c203fc3 100644
--- a/qemu-img.c
+++ b/qemu-img.c
-@@ -4938,6 +4938,7 @@ static int img_dd(int argc, char **argv)
+@@ -4943,6 +4943,7 @@ static int img_dd(int argc, char **argv)
BlockDriver *drv = NULL, *proto_drv = NULL;
BlockBackend *blk1 = NULL, *blk2 = NULL;
QemuOpts *opts = NULL;
@@ -57,7 +57,7 @@ index 35c2bdc95c..6e93bbd425 100644
QemuOptsList *create_opts = NULL;
Error *local_err = NULL;
bool image_opts = false;
-@@ -4947,6 +4948,7 @@ static int img_dd(int argc, char **argv)
+@@ -4952,6 +4953,7 @@ static int img_dd(int argc, char **argv)
int64_t size = 0, readsize = 0;
int64_t block_count = 0, out_pos, in_pos;
bool force_share = false, skip_create = false;
@@ -65,7 +65,7 @@ index 35c2bdc95c..6e93bbd425 100644
struct DdInfo dd = {
.flags = 0,
.count = 0,
-@@ -4984,7 +4986,7 @@ static int img_dd(int argc, char **argv)
+@@ -4989,7 +4991,7 @@ static int img_dd(int argc, char **argv)
{ 0, 0, 0, 0 }
};
@@ -74,7 +74,7 @@ index 35c2bdc95c..6e93bbd425 100644
if (c == EOF) {
break;
}
-@@ -5007,6 +5009,19 @@ static int img_dd(int argc, char **argv)
+@@ -5012,6 +5014,19 @@ static int img_dd(int argc, char **argv)
case 'n':
skip_create = true;
break;
@@ -94,7 +94,7 @@ index 35c2bdc95c..6e93bbd425 100644
case 'U':
force_share = true;
break;
-@@ -5066,11 +5081,24 @@ static int img_dd(int argc, char **argv)
+@@ -5071,11 +5086,24 @@ static int img_dd(int argc, char **argv)
if (dd.flags & C_IF) {
blk1 = img_open(image_opts, in.filename, fmt, 0, false, false,
force_share);
@@ -120,7 +120,7 @@ index 35c2bdc95c..6e93bbd425 100644
}
if (dd.flags & C_OSIZE) {
-@@ -5219,6 +5247,7 @@ static int img_dd(int argc, char **argv)
+@@ -5230,6 +5258,7 @@ static int img_dd(int argc, char **argv)
out:
g_free(arg);
qemu_opts_del(opts);
diff --git a/debian/patches/pve/0051-vma-allow-partial-restore.patch b/debian/patches/pve/0052-vma-allow-partial-restore.patch
similarity index 94%
rename from debian/patches/pve/0051-vma-allow-partial-restore.patch
rename to debian/patches/pve/0052-vma-allow-partial-restore.patch
index ede4d67..f1fd7cb 100644
--- a/debian/patches/pve/0051-vma-allow-partial-restore.patch
+++ b/debian/patches/pve/0052-vma-allow-partial-restore.patch
@@ -24,10 +24,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
3 files changed, 126 insertions(+), 97 deletions(-)
diff --git a/vma-reader.c b/vma-reader.c
-index 4f4ee2b47b..844d95a5ba 100644
+index e65f1e8415..81a891c6b1 100644
--- a/vma-reader.c
+++ b/vma-reader.c
-@@ -29,6 +29,7 @@ typedef struct VmaRestoreState {
+@@ -28,6 +28,7 @@ typedef struct VmaRestoreState {
bool write_zeroes;
unsigned long *bitmap;
int bitmap_size;
@@ -35,7 +35,7 @@ index 4f4ee2b47b..844d95a5ba 100644
} VmaRestoreState;
struct VmaReader {
-@@ -426,13 +427,14 @@ VmaDeviceInfo *vma_reader_get_device_info(VmaReader *vmar, guint8 dev_id)
+@@ -425,13 +426,14 @@ VmaDeviceInfo *vma_reader_get_device_info(VmaReader *vmar, guint8 dev_id)
}
static void allocate_rstate(VmaReader *vmar, guint8 dev_id,
@@ -51,7 +51,7 @@ index 4f4ee2b47b..844d95a5ba 100644
int64_t size = vmar->devinfo[dev_id].size;
-@@ -447,28 +449,30 @@ static void allocate_rstate(VmaReader *vmar, guint8 dev_id,
+@@ -446,28 +448,30 @@ static void allocate_rstate(VmaReader *vmar, guint8 dev_id,
}
int vma_reader_register_bs(VmaReader *vmar, guint8 dev_id, BlockBackend *target,
@@ -99,7 +99,7 @@ index 4f4ee2b47b..844d95a5ba 100644
return 0;
}
-@@ -561,19 +565,23 @@ static int restore_extent(VmaReader *vmar, unsigned char *buf,
+@@ -560,19 +564,23 @@ static int restore_extent(VmaReader *vmar, unsigned char *buf,
VmaRestoreState *rstate = &vmar->rstate[dev_id];
BlockBackend *target = NULL;
@@ -129,7 +129,7 @@ index 4f4ee2b47b..844d95a5ba 100644
max_sector = vmar->devinfo[dev_id].size/BDRV_SECTOR_SIZE;
} else {
-@@ -619,7 +627,7 @@ static int restore_extent(VmaReader *vmar, unsigned char *buf,
+@@ -618,7 +626,7 @@ static int restore_extent(VmaReader *vmar, unsigned char *buf,
return -1;
}
@@ -138,7 +138,7 @@ index 4f4ee2b47b..844d95a5ba 100644
int nb_sectors = end_sector - sector_num;
if (restore_write_data(vmar, dev_id, target, vmstate_fd,
buf + start, sector_num, nb_sectors,
-@@ -655,7 +663,7 @@ static int restore_extent(VmaReader *vmar, unsigned char *buf,
+@@ -654,7 +662,7 @@ static int restore_extent(VmaReader *vmar, unsigned char *buf,
return -1;
}
@@ -147,7 +147,7 @@ index 4f4ee2b47b..844d95a5ba 100644
int nb_sectors = end_sector - sector_num;
if (restore_write_data(vmar, dev_id, target, vmstate_fd,
buf + start, sector_num,
-@@ -680,7 +688,7 @@ static int restore_extent(VmaReader *vmar, unsigned char *buf,
+@@ -679,7 +687,7 @@ static int restore_extent(VmaReader *vmar, unsigned char *buf,
vmar->partial_zero_cluster_data += zero_size;
}
@@ -156,7 +156,7 @@ index 4f4ee2b47b..844d95a5ba 100644
if (restore_write_data(vmar, dev_id, target, vmstate_fd,
zero_vma_block, sector_num,
nb_sectors, errp) < 0) {
-@@ -851,7 +859,7 @@ int vma_reader_verify(VmaReader *vmar, bool verbose, Error **errp)
+@@ -850,7 +858,7 @@ int vma_reader_verify(VmaReader *vmar, bool verbose, Error **errp)
for (dev_id = 1; dev_id < 255; dev_id++) {
if (vma_reader_get_device_info(vmar, dev_id)) {
@@ -166,10 +166,10 @@ index 4f4ee2b47b..844d95a5ba 100644
}
diff --git a/vma.c b/vma.c
-index 91612d50a2..e1a750ff50 100644
+index e8dffb43e0..e6e9ffc7fe 100644
--- a/vma.c
+++ b/vma.c
-@@ -139,6 +139,7 @@ typedef struct RestoreMap {
+@@ -138,6 +138,7 @@ typedef struct RestoreMap {
char *throttling_group;
char *cache;
bool write_zero;
@@ -177,7 +177,7 @@ index 91612d50a2..e1a750ff50 100644
} RestoreMap;
static bool try_parse_option(char **line, const char *optname, char **out, const char *inbuf) {
-@@ -246,47 +247,61 @@ static int extract_content(int argc, char **argv)
+@@ -245,47 +246,61 @@ static int extract_content(int argc, char **argv)
char *bps = NULL;
char *group = NULL;
char *cache = NULL;
@@ -265,7 +265,7 @@ index 91612d50a2..e1a750ff50 100644
if (!devname) {
g_error("read map failed - no dev name specified ('%s')",
inbuf);
-@@ -300,6 +315,7 @@ static int extract_content(int argc, char **argv)
+@@ -299,6 +314,7 @@ static int extract_content(int argc, char **argv)
map->throttling_group = group;
map->cache = cache;
map->write_zero = write_zero;
@@ -273,7 +273,7 @@ index 91612d50a2..e1a750ff50 100644
g_hash_table_insert(devmap, map->devname, map);
-@@ -329,6 +345,7 @@ static int extract_content(int argc, char **argv)
+@@ -328,6 +344,7 @@ static int extract_content(int argc, char **argv)
const char *cache = NULL;
int flags = BDRV_O_RDWR;
bool write_zero = true;
@@ -281,7 +281,7 @@ index 91612d50a2..e1a750ff50 100644
BlockBackend *blk = NULL;
-@@ -344,6 +361,7 @@ static int extract_content(int argc, char **argv)
+@@ -343,6 +360,7 @@ static int extract_content(int argc, char **argv)
throttling_group = map->throttling_group;
cache = map->cache;
write_zero = map->write_zero;
@@ -289,7 +289,7 @@ index 91612d50a2..e1a750ff50 100644
} else {
devfn = g_strdup_printf("%s/tmp-disk-%s.raw",
dirname, di->devname);
-@@ -362,57 +380,60 @@ static int extract_content(int argc, char **argv)
+@@ -361,57 +379,60 @@ static int extract_content(int argc, char **argv)
write_zero = false;
}
diff --git a/debian/patches/pve/0052-pbs-namespace-support.patch b/debian/patches/pve/0053-pbs-namespace-support.patch
similarity index 96%
rename from debian/patches/pve/0052-pbs-namespace-support.patch
rename to debian/patches/pve/0053-pbs-namespace-support.patch
index 67bda69..dce468d 100644
--- a/debian/patches/pve/0052-pbs-namespace-support.patch
+++ b/debian/patches/pve/0053-pbs-namespace-support.patch
@@ -112,10 +112,10 @@ index c5eb4d5bad..7471e2ef9d 100644
static const char *const pbs_strong_runtime_opts[] = {
diff --git a/pbs-restore.c b/pbs-restore.c
-index 4d3f925a1b..62042bdd93 100644
+index 2f834cf42e..f03d9bab8d 100644
--- a/pbs-restore.c
+++ b/pbs-restore.c
-@@ -30,7 +30,7 @@
+@@ -29,7 +29,7 @@
static void help(void)
{
const char *help_msg =
@@ -124,7 +124,7 @@ index 4d3f925a1b..62042bdd93 100644
;
printf("%s", help_msg);
-@@ -78,6 +78,7 @@ int main(int argc, char **argv)
+@@ -77,6 +77,7 @@ int main(int argc, char **argv)
Error *main_loop_err = NULL;
const char *format = "raw";
const char *repository = NULL;
@@ -132,7 +132,7 @@ index 4d3f925a1b..62042bdd93 100644
const char *keyfile = NULL;
int verbose = false;
bool skip_zero = false;
-@@ -91,6 +92,7 @@ int main(int argc, char **argv)
+@@ -90,6 +91,7 @@ int main(int argc, char **argv)
{"verbose", no_argument, 0, 'v'},
{"format", required_argument, 0, 'f'},
{"repository", required_argument, 0, 'r'},
@@ -140,7 +140,7 @@ index 4d3f925a1b..62042bdd93 100644
{"keyfile", required_argument, 0, 'k'},
{0, 0, 0, 0}
};
-@@ -111,6 +113,9 @@ int main(int argc, char **argv)
+@@ -110,6 +112,9 @@ int main(int argc, char **argv)
case 'r':
repository = g_strdup(argv[optind - 1]);
break;
@@ -150,7 +150,7 @@ index 4d3f925a1b..62042bdd93 100644
case 'k':
keyfile = g_strdup(argv[optind - 1]);
break;
-@@ -161,8 +166,16 @@ int main(int argc, char **argv)
+@@ -160,8 +165,16 @@ int main(int argc, char **argv)
fprintf(stderr, "connecting to repository '%s'\n", repository);
}
char *pbs_error = NULL;
@@ -202,10 +202,10 @@ index 9f6c04a512..f6a5f8c785 100644
backup_time,
dump_cb_block_size,
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 13e03ca154..89875f309c 100644
+index fc8a125451..cc2ead0b75 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -821,6 +821,8 @@
+@@ -817,6 +817,8 @@
#
# @fingerprint: server cert fingerprint (optional for format 'pbs')
#
@@ -214,7 +214,7 @@ index 13e03ca154..89875f309c 100644
# @backup-id: backup ID (required for format 'pbs')
#
# @backup-time: backup timestamp (Unix epoch, required for format 'pbs')
-@@ -840,6 +842,7 @@
+@@ -836,6 +838,7 @@
'*key-password': 'str',
'*master-keyfile': 'str',
'*fingerprint': 'str',
@@ -222,7 +222,7 @@ index 13e03ca154..89875f309c 100644
'*backup-id': 'str',
'*backup-time': 'int',
'*use-dirty-bitmap': 'bool',
-@@ -3256,7 +3259,7 @@
+@@ -3282,7 +3285,7 @@
{ 'struct': 'BlockdevOptionsPbs',
'data': { 'repository': 'str', 'snapshot': 'str', 'archive': 'str',
'*keyfile': 'str', '*password': 'str', '*fingerprint': 'str',
diff --git a/debian/patches/pve/0053-Revert-block-rbd-workaround-for-ceph-issue-53784.patch b/debian/patches/pve/0054-Revert-block-rbd-workaround-for-ceph-issue-53784.patch
similarity index 92%
rename from debian/patches/pve/0053-Revert-block-rbd-workaround-for-ceph-issue-53784.patch
rename to debian/patches/pve/0054-Revert-block-rbd-workaround-for-ceph-issue-53784.patch
index 4fd82ac..9827983 100644
--- a/debian/patches/pve/0053-Revert-block-rbd-workaround-for-ceph-issue-53784.patch
+++ b/debian/patches/pve/0054-Revert-block-rbd-workaround-for-ceph-issue-53784.patch
@@ -12,10 +12,10 @@ Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
1 file changed, 2 insertions(+), 40 deletions(-)
diff --git a/block/rbd.c b/block/rbd.c
-index 0cec24c86d..0a9b97aa5e 100644
+index 64a8d7d48b..9fc6dcb957 100644
--- a/block/rbd.c
+++ b/block/rbd.c
-@@ -1324,7 +1324,6 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs,
+@@ -1348,7 +1348,6 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs,
int status, r;
RBDDiffIterateReq req = { .offs = offset };
uint64_t features, flags;
@@ -23,7 +23,7 @@ index 0cec24c86d..0a9b97aa5e 100644
assert(offset + bytes <= s->image_size);
-@@ -1352,43 +1351,7 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs,
+@@ -1376,43 +1375,7 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs,
return status;
}
@@ -68,7 +68,7 @@ index 0cec24c86d..0a9b97aa5e 100644
qemu_rbd_diff_iterate_cb, &req);
if (r < 0 && r != QEMU_RBD_EXIT_DIFF_ITERATE2) {
return status;
-@@ -1407,8 +1370,7 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs,
+@@ -1431,8 +1394,7 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs,
status = BDRV_BLOCK_ZERO | BDRV_BLOCK_OFFSET_VALID;
}
diff --git a/debian/patches/pve/0054-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch b/debian/patches/pve/0055-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch
similarity index 90%
rename from debian/patches/pve/0054-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch
rename to debian/patches/pve/0055-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch
index 6624c1d..6972373 100644
--- a/debian/patches/pve/0054-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch
+++ b/debian/patches/pve/0055-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch
@@ -13,10 +13,10 @@ Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/block/rbd.c b/block/rbd.c
-index 0a9b97aa5e..1c585d23e9 100644
+index 9fc6dcb957..98f4ba2620 100644
--- a/block/rbd.c
+++ b/block/rbd.c
-@@ -1283,11 +1283,11 @@ static int qemu_rbd_diff_iterate_cb(uint64_t offs, size_t len,
+@@ -1307,11 +1307,11 @@ static int qemu_rbd_diff_iterate_cb(uint64_t offs, size_t len,
RBDDiffIterateReq *req = opaque;
assert(req->offs + req->bytes <= offs);
diff --git a/debian/patches/pve/0055-Revert-block-rbd-implement-bdrv_co_block_status.patch b/debian/patches/pve/0056-Revert-block-rbd-implement-bdrv_co_block_status.patch
similarity index 97%
rename from debian/patches/pve/0055-Revert-block-rbd-implement-bdrv_co_block_status.patch
rename to debian/patches/pve/0056-Revert-block-rbd-implement-bdrv_co_block_status.patch
index 13e71b7..f7025a3 100644
--- a/debian/patches/pve/0055-Revert-block-rbd-implement-bdrv_co_block_status.patch
+++ b/debian/patches/pve/0056-Revert-block-rbd-implement-bdrv_co_block_status.patch
@@ -23,7 +23,7 @@ Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
1 file changed, 112 deletions(-)
diff --git a/block/rbd.c b/block/rbd.c
-index 1c585d23e9..1704767041 100644
+index 98f4ba2620..efcbbe5949 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -97,12 +97,6 @@ typedef struct RBDTask {
@@ -39,7 +39,7 @@ index 1c585d23e9..1704767041 100644
static int qemu_rbd_connect(rados_t *cluster, rados_ioctx_t *io_ctx,
BlockdevOptionsRbd *opts, bool cache,
const char *keypairs, const char *secretid,
-@@ -1269,111 +1263,6 @@ static ImageInfoSpecific *qemu_rbd_get_specific_info(BlockDriverState *bs,
+@@ -1293,111 +1287,6 @@ static ImageInfoSpecific *qemu_rbd_get_specific_info(BlockDriverState *bs,
return spec_info;
}
@@ -151,7 +151,7 @@ index 1c585d23e9..1704767041 100644
static int64_t qemu_rbd_getlength(BlockDriverState *bs)
{
BDRVRBDState *s = bs->opaque;
-@@ -1609,7 +1498,6 @@ static BlockDriver bdrv_rbd = {
+@@ -1633,7 +1522,6 @@ static BlockDriver bdrv_rbd = {
#ifdef LIBRBD_SUPPORTS_WRITE_ZEROES
.bdrv_co_pwrite_zeroes = qemu_rbd_co_pwrite_zeroes,
#endif
diff --git a/debian/patches/pve/0056-PVE-Backup-create-jobs-correctly-cancel-in-error-sce.patch b/debian/patches/pve/0057-PVE-Backup-create-jobs-correctly-cancel-in-error-sce.patch
similarity index 100%
rename from debian/patches/pve/0056-PVE-Backup-create-jobs-correctly-cancel-in-error-sce.patch
rename to debian/patches/pve/0057-PVE-Backup-create-jobs-correctly-cancel-in-error-sce.patch
diff --git a/debian/patches/pve/0057-PVE-Backup-ensure-jobs-in-di_list-are-referenced.patch b/debian/patches/pve/0058-PVE-Backup-ensure-jobs-in-di_list-are-referenced.patch
similarity index 100%
rename from debian/patches/pve/0057-PVE-Backup-ensure-jobs-in-di_list-are-referenced.patch
rename to debian/patches/pve/0058-PVE-Backup-ensure-jobs-in-di_list-are-referenced.patch
diff --git a/debian/patches/pve/0058-PVE-Backup-avoid-segfault-issues-upon-backup-cancel.patch b/debian/patches/pve/0059-PVE-Backup-avoid-segfault-issues-upon-backup-cancel.patch
similarity index 100%
rename from debian/patches/pve/0058-PVE-Backup-avoid-segfault-issues-upon-backup-cancel.patch
rename to debian/patches/pve/0059-PVE-Backup-avoid-segfault-issues-upon-backup-cancel.patch
diff --git a/debian/patches/pve/0059-vma-create-support-64KiB-unaligned-input-images.patch b/debian/patches/pve/0060-vma-create-support-64KiB-unaligned-input-images.patch
similarity index 92%
rename from debian/patches/pve/0059-vma-create-support-64KiB-unaligned-input-images.patch
rename to debian/patches/pve/0060-vma-create-support-64KiB-unaligned-input-images.patch
index 3097cf6..ffa8d0e 100644
--- a/debian/patches/pve/0059-vma-create-support-64KiB-unaligned-input-images.patch
+++ b/debian/patches/pve/0060-vma-create-support-64KiB-unaligned-input-images.patch
@@ -25,10 +25,10 @@ Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/vma.c b/vma.c
-index e1a750ff50..b1137e27a7 100644
+index e6e9ffc7fe..304f02bc84 100644
--- a/vma.c
+++ b/vma.c
-@@ -549,7 +549,7 @@ static void coroutine_fn backup_run(void *opaque)
+@@ -548,7 +548,7 @@ static void coroutine_fn backup_run(void *opaque)
struct iovec iov;
QEMUIOVector qiov;
@@ -37,7 +37,7 @@ index e1a750ff50..b1137e27a7 100644
int ret = 0;
unsigned char *buf = blk_blockalign(job->target, VMA_CLUSTER_SIZE);
-@@ -563,8 +563,16 @@ static void coroutine_fn backup_run(void *opaque)
+@@ -562,8 +562,16 @@ static void coroutine_fn backup_run(void *opaque)
iov.iov_len = VMA_CLUSTER_SIZE;
qemu_iovec_init_external(&qiov, &iov, 1);
diff --git a/debian/patches/pve/0060-vma-create-avoid-triggering-assertion-in-error-case.patch b/debian/patches/pve/0061-vma-create-avoid-triggering-assertion-in-error-case.patch
similarity index 100%
rename from debian/patches/pve/0060-vma-create-avoid-triggering-assertion-in-error-case.patch
rename to debian/patches/pve/0061-vma-create-avoid-triggering-assertion-in-error-case.patch
diff --git a/debian/patches/pve/0061-block-alloc-track-avoid-premature-break.patch b/debian/patches/pve/0062-block-alloc-track-avoid-premature-break.patch
similarity index 100%
rename from debian/patches/pve/0061-block-alloc-track-avoid-premature-break.patch
rename to debian/patches/pve/0062-block-alloc-track-avoid-premature-break.patch
diff --git a/debian/patches/pve/0062-PVE-Backup-allow-passing-max-workers-performance-set.patch b/debian/patches/pve/0063-PVE-Backup-allow-passing-max-workers-performance-set.patch
similarity index 98%
rename from debian/patches/pve/0062-PVE-Backup-allow-passing-max-workers-performance-set.patch
rename to debian/patches/pve/0063-PVE-Backup-allow-passing-max-workers-performance-set.patch
index 08df987..a20a383 100644
--- a/debian/patches/pve/0062-PVE-Backup-allow-passing-max-workers-performance-set.patch
+++ b/debian/patches/pve/0063-PVE-Backup-allow-passing-max-workers-performance-set.patch
@@ -109,10 +109,10 @@ index 2e22030eec..e9aa7e0f49 100644
return ret;
}
diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 89875f309c..43281aca79 100644
+index cc2ead0b75..e3f62faa81 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
-@@ -833,6 +833,8 @@
+@@ -829,6 +829,8 @@
#
# @encrypt: use encryption ((optional for format 'pbs', defaults to true if there is a keyfile)
#
@@ -121,7 +121,7 @@ index 89875f309c..43281aca79 100644
# Returns: the uuid of the backup job
#
##
-@@ -851,7 +853,9 @@
+@@ -847,7 +849,9 @@
'*format': 'BackupFormat',
'*config-file': 'str',
'*firewall-file': 'str',
@@ -132,7 +132,7 @@ index 89875f309c..43281aca79 100644
'returns': 'UuidInfo', 'coroutine': true }
##
-@@ -906,7 +910,8 @@
+@@ -902,7 +906,8 @@
'pbs-dirty-bitmap-savevm': 'bool',
'pbs-dirty-bitmap-migration': 'bool',
'pbs-masterkey': 'bool',
diff --git a/debian/patches/series b/debian/patches/series
index 8745fcc..b45710f 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,24 +1,4 @@
extra/0001-monitor-qmp-fix-race-with-clients-disconnecting-earl.patch
-extra/0002-block-gluster-correctly-set-max_pdiscard.patch
-extra/0003-block-vmdk-Fix-reopening-bs-file.patch
-extra/0004-linux-aio-fix-unbalanced-plugged-counter-in-laio_io_.patch
-extra/0005-pci-fix-overflow-in-snprintf-string-formatting.patch
-extra/0006-target-i386-kvm-Fix-disabling-MPX-on-cpu-host-with-M.patch
-extra/0007-coroutine-ucontext-use-QEMU_DEFINE_STATIC_CO_TLS.patch
-extra/0008-coroutine-use-QEMU_DEFINE_STATIC_CO_TLS.patch
-extra/0009-coroutine-Rename-qemu_coroutine_inc-dec_pool_size.patch
-extra/0010-coroutine-Revert-to-constant-batch-size.patch
-extra/0011-target-i386-do-not-consult-nonexistent-host-leaves.patch
-extra/0012-virtio-scsi-fix-ctrl-and-event-handler-functions-in-.patch
-extra/0013-virtio-scsi-don-t-waste-CPU-polling-the-event-virtqu.patch
-extra/0014-vhost-Track-descriptor-chain-in-private-at-SVQ.patch
-extra/0015-vhost-Fix-device-s-used-descriptor-dequeue.patch
-extra/0016-vdpa-Fix-bad-index-calculus-at-vhost_vdpa_get_vring_.patch
-extra/0017-vdpa-Fix-index-calculus-at-vhost_vdpa_svqs_start.patch
-extra/0018-hw-virtio-Replace-g_memdup-by-g_memdup2.patch
-extra/0019-vhost-Fix-element-in-vhost_svq_add-failure.patch
-extra/0020-io_uring-fix-short-read-slow-path.patch
-extra/0021-e1000-set-RX-descriptor-status-in-a-separate-operati.patch
bitmap-mirror/0001-drive-mirror-add-support-for-sync-bitmap-mode-never.patch
bitmap-mirror/0002-drive-mirror-add-support-for-conditional-and-always-.patch
bitmap-mirror/0003-mirror-add-check-for-bitmap-mode-without-bitmap.patch
@@ -40,50 +20,51 @@ pve/0012-PVE-Up-qemu-img-dd-add-n-skip_create.patch
pve/0013-PVE-virtio-balloon-improve-query-balloon.patch
pve/0014-PVE-qapi-modify-query-machines.patch
pve/0015-PVE-qapi-modify-spice-query.patch
-pve/0016-PVE-add-savevm-async-for-background-state-snapshots.patch
-pve/0017-PVE-add-optional-buffer-size-to-QEMUFile.patch
-pve/0018-PVE-block-add-the-zeroinit-block-driver-filter.patch
-pve/0019-PVE-Add-dummy-id-command-line-parameter.patch
-pve/0020-PVE-Config-Revert-target-i386-disable-LINT0-after-re.patch
-pve/0021-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch
-pve/0022-PVE-monitor-disable-oob-capability.patch
-pve/0023-PVE-Compat-4.0-used-balloon-qemu-4-0-config-size-fal.patch
-pve/0024-PVE-Allow-version-code-in-machine-type.patch
-pve/0025-block-backup-move-bcs-bitmap-initialization-to-job-c.patch
-pve/0026-PVE-Backup-add-vma-backup-format-code.patch
-pve/0027-PVE-Backup-add-backup-dump-block-driver.patch
-pve/0028-PVE-Backup-proxmox-backup-patches-for-qemu.patch
-pve/0029-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch
-pve/0030-PVE-Backup-Add-dirty-bitmap-tracking-for-incremental.patch
-pve/0031-PVE-various-PBS-fixes.patch
-pve/0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
-pve/0033-PVE-add-query_proxmox_support-QMP-command.patch
-pve/0034-PVE-add-query-pbs-bitmap-info-QMP-call.patch
-pve/0035-PVE-redirect-stderr-to-journal-when-daemonized.patch
-pve/0036-PVE-Add-sequential-job-transaction-support.patch
-pve/0037-PVE-Backup-Use-a-transaction-to-synchronize-job-stat.patch
-pve/0038-PVE-Backup-Don-t-block-on-finishing-and-cleanup-crea.patch
-pve/0039-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
-pve/0040-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch
-pve/0041-PVE-fall-back-to-open-iscsi-initiatorname.patch
-pve/0042-PVE-Use-coroutine-QMP-for-backup-cancel_backup.patch
-pve/0043-PBS-add-master-key-support.patch
-pve/0044-PVE-block-pbs-fast-path-reads-without-allocation-if-.patch
-pve/0045-PVE-block-stream-increase-chunk-size.patch
-pve/0046-block-io-accept-NULL-qiov-in-bdrv_pad_request.patch
-pve/0047-block-add-alloc-track-driver.patch
-pve/0048-PVE-whitelist-invalid-QAPI-names-for-backwards-compa.patch
-pve/0049-PVE-savevm-async-register-yank-before-migration_inco.patch
-pve/0050-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
-pve/0051-vma-allow-partial-restore.patch
-pve/0052-pbs-namespace-support.patch
-pve/0053-Revert-block-rbd-workaround-for-ceph-issue-53784.patch
-pve/0054-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch
-pve/0055-Revert-block-rbd-implement-bdrv_co_block_status.patch
-pve/0056-PVE-Backup-create-jobs-correctly-cancel-in-error-sce.patch
-pve/0057-PVE-Backup-ensure-jobs-in-di_list-are-referenced.patch
-pve/0058-PVE-Backup-avoid-segfault-issues-upon-backup-cancel.patch
-pve/0059-vma-create-support-64KiB-unaligned-input-images.patch
-pve/0060-vma-create-avoid-triggering-assertion-in-error-case.patch
-pve/0061-block-alloc-track-avoid-premature-break.patch
-pve/0062-PVE-Backup-allow-passing-max-workers-performance-set.patch
+pve/0016-PVE-add-IOChannel-implementation-for-savevm-async.patch
+pve/0017-PVE-add-savevm-async-for-background-state-snapshots.patch
+pve/0018-PVE-add-optional-buffer-size-to-QEMUFile.patch
+pve/0019-PVE-block-add-the-zeroinit-block-driver-filter.patch
+pve/0020-PVE-Add-dummy-id-command-line-parameter.patch
+pve/0021-PVE-Config-Revert-target-i386-disable-LINT0-after-re.patch
+pve/0022-PVE-Up-Config-file-posix-make-locking-optiono-on-cre.patch
+pve/0023-PVE-monitor-disable-oob-capability.patch
+pve/0024-PVE-Compat-4.0-used-balloon-qemu-4-0-config-size-fal.patch
+pve/0025-PVE-Allow-version-code-in-machine-type.patch
+pve/0026-block-backup-move-bcs-bitmap-initialization-to-job-c.patch
+pve/0027-PVE-Backup-add-vma-backup-format-code.patch
+pve/0028-PVE-Backup-add-backup-dump-block-driver.patch
+pve/0029-PVE-Backup-proxmox-backup-patches-for-qemu.patch
+pve/0030-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch
+pve/0031-PVE-Backup-Add-dirty-bitmap-tracking-for-incremental.patch
+pve/0032-PVE-various-PBS-fixes.patch
+pve/0033-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
+pve/0034-PVE-add-query_proxmox_support-QMP-command.patch
+pve/0035-PVE-add-query-pbs-bitmap-info-QMP-call.patch
+pve/0036-PVE-redirect-stderr-to-journal-when-daemonized.patch
+pve/0037-PVE-Add-sequential-job-transaction-support.patch
+pve/0038-PVE-Backup-Use-a-transaction-to-synchronize-job-stat.patch
+pve/0039-PVE-Backup-Don-t-block-on-finishing-and-cleanup-crea.patch
+pve/0040-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
+pve/0041-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch
+pve/0042-PVE-fall-back-to-open-iscsi-initiatorname.patch
+pve/0043-PVE-Use-coroutine-QMP-for-backup-cancel_backup.patch
+pve/0044-PBS-add-master-key-support.patch
+pve/0045-PVE-block-pbs-fast-path-reads-without-allocation-if-.patch
+pve/0046-PVE-block-stream-increase-chunk-size.patch
+pve/0047-block-io-accept-NULL-qiov-in-bdrv_pad_request.patch
+pve/0048-block-add-alloc-track-driver.patch
+pve/0049-PVE-whitelist-invalid-QAPI-names-for-backwards-compa.patch
+pve/0050-PVE-savevm-async-register-yank-before-migration_inco.patch
+pve/0051-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
+pve/0052-vma-allow-partial-restore.patch
+pve/0053-pbs-namespace-support.patch
+pve/0054-Revert-block-rbd-workaround-for-ceph-issue-53784.patch
+pve/0055-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch
+pve/0056-Revert-block-rbd-implement-bdrv_co_block_status.patch
+pve/0057-PVE-Backup-create-jobs-correctly-cancel-in-error-sce.patch
+pve/0058-PVE-Backup-ensure-jobs-in-di_list-are-referenced.patch
+pve/0059-PVE-Backup-avoid-segfault-issues-upon-backup-cancel.patch
+pve/0060-vma-create-support-64KiB-unaligned-input-images.patch
+pve/0061-vma-create-avoid-triggering-assertion-in-error-case.patch
+pve/0062-block-alloc-track-avoid-premature-break.patch
+pve/0063-PVE-Backup-allow-passing-max-workers-performance-set.patch
diff --git a/qemu b/qemu
index 823a3f1..621da77 160000
--- a/qemu
+++ b/qemu
@@ -1 +1 @@
-Subproject commit 823a3f11fb8f04c3c3cc0f95f968fef1bfc6534f
+Subproject commit 621da7789083b80d6f1ff1c0fb499334007b4f51
--
2.30.2
More information about the pve-devel
mailing list