public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH qemu 0/5] QEMU 10.1.0
@ 2025-09-24 14:47 Fiona Ebner
  2025-09-24 14:47 ` [pve-devel] [PATCH qemu 1/5] buildsys: adapt removal of dtb files for 10.1.0 Fiona Ebner
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Fiona Ebner @ 2025-09-24 14:47 UTC (permalink / raw)
  To: pve-devel

Slight change to the buildsys since .dt{b,s} files were moved into a
separate directory.


The bump to baseline QEMU machine version 6.0 for Proxmox VE 9 was
missed, since the compile time check for that was only enabled with
QEMU 10.1. While upstream only enforces the new policy with 10.1, that
check should've been enabled for Proxmox VE 9/QEMU 10.0 already. Fix
this and bump.


Notable changes for QEMU 10.1:

* Finally can drop RBD reverts for block-status callbacks:
  https://gitlab.com/qemu-project/qemu/-/issues/1026
  https://tracker.ceph.com/issues/63341

* dropped HPET reverts, see
  https://lore.proxmox.com/pve-devel/20250924143611.166858-1-f.ebner@proxmox.com/T/

* PVE backup required adaptation, because of 3d3911f16b
  ("blockdev-backup: Add error handling option for copy-before-write
  jobs"). It was kept as the default ON_CBW_ERROR_BREAK_GUEST_WRITE.
  While this should be changed to ON_CBW_ERROR_BREAK_SNAPSHOT like is
  done for fleecing, that requires more changes to actually detect
  that error in the main backup loop. Otherwise, the backup would be
  completed and corrupt! What is also missing compared to fleecing
  and fixing those bugs for good is having a timeout.

* machine version checks required adaptation, because of f59ee04406
  ("include/hw/boards: cope with dev/rc versions in deprecation
  checks") to not diverge even more from upstream. Remove the, now
  superfluous, check for QEMU version >= 10.1 that should've been
  for >= 10.0 actually, see commit "bump baseline machine version to
  6.0 for Proxmox VE 9" for context.

* Context changes during rebase for bitmap mirror patches. Upstream
  now already switched to passing the full mirror sync-mode 9474d97bd7
  ("mirror: Pass full sync mode rather than bool to internals") and
  dropped a parameter 253b43a290 ("mirror: Drop redundant zero_target
  parameter") and there were other smaller context changes.


Notable stable fixes:

The migration fixes "target/i386: add compatibility property for
arch_capabilities" and "target/i386: add compatibility property for
pdcm feature". For more information see:
https://lore.kernel.org/all/CAATJJ0+Qq3ksRmNRDrGQLVHQ=XnsnFHxCNxUhjJfNfgwUKkDPQ@mail.gmail.com/


Fiona Ebner (5):
  buildsys: adapt removal of dtb files for 10.1.0
  bump baseline machine version to 6.0 for Proxmox VE 9
  alloc-track/zeroinit: squash patches enabling using with blockdev into
    patches adding block drivers
  update submodule and patches to QEMU 10.1.0
  stable fixes for QEMU 10.1.0

 Makefile                                      |   4 +-
 ...d-support-for-sync-bitmap-mode-never.patch | 155 ++++------
 ...-support-for-conditional-and-always-.patch |  10 +-
 ...check-for-bitmap-mode-without-bitmap.patch |   4 +-
 ...-to-bdrv_dirty_bitmap_merge_internal.patch |   8 +-
 .../0006-mirror-move-some-checks-to-qmp.patch |  12 +-
 ...race-with-clients-disconnecting-earl.patch |   4 +-
 ...Trap-PMCR-when-MDCR_EL2.TPMCR-is-set.patch |  96 ++++++
 ...ish-renaming-atomic128-cas.h-headers.patch |  25 ++
 ...l-fix-curl-internal-handles-handling.patch |  60 ++++
 ...g-svm-fix-incorrect-canonicalization.patch |  38 +++
 ...07-hw-vfio-user-add-x-pci-class-code.patch |  35 +++
 .../extra/0008-tcg-arm-Fix-tgen_deposit.patch |  37 +++
 ...rash-from-legacy-interrupt-firing-af.patch |  58 ++++
 ...quirks-when-IGD-is-not-the-primary-d.patch |  79 +++++
 ...able-SMM-cpu-address-space-under-KVM.patch | 106 +++++++
 ...compatibility-property-for-arch_capa.patch | 109 +++++++
 ...compatibility-property-for-pdcm-feat.patch |  96 ++++++
 ...k-file-change-locking-default-to-off.patch |   6 +-
 ...djust-network-script-path-to-etc-kvm.patch |   4 +-
 ...he-CPU-model-to-kvm64-32-instead-of-.patch |   6 +-
 ...ui-spice-default-to-pve-certificates.patch |   4 +-
 ...erfs-no-default-logfile-if-daemonize.patch |   2 +-
 ...lock-rbd-disable-rbd_cache_writethro.patch |   4 +-
 ...PVE-Up-glusterfs-allow-partial-reads.patch |  10 +-
 ...return-success-on-info-without-snaps.patch |   4 +-
 ...dd-add-osize-and-read-from-to-stdin-.patch |  19 +-
 ...E-Up-qemu-img-dd-add-isize-parameter.patch |  19 +-
 ...PVE-Up-qemu-img-dd-add-n-skip_create.patch |  25 +-
 ...-add-l-option-for-loading-a-snapshot.patch |  24 +-
 ...virtio-balloon-improve-query-balloon.patch |  12 +-
 .../0014-PVE-qapi-modify-query-machines.patch |  10 +-
 .../0015-PVE-qapi-modify-spice-query.patch    |  10 +-
 ...nnel-implementation-for-savevm-async.patch |   6 +-
 ...async-for-background-state-snapshots.patch |  37 +--
 ...add-optional-buffer-size-to-QEMUFile.patch |  10 +-
 ...add-the-zeroinit-block-driver-filter.patch |  46 ++-
 ...-Add-dummy-id-command-line-parameter.patch |  10 +-
 ...t-target-i386-disable-LINT0-after-re.patch |   2 +-
 ...le-posix-make-locking-optiono-on-cre.patch |  20 +-
 ...3-PVE-monitor-disable-oob-capability.patch |   4 +-
 ...sed-balloon-qemu-4-0-config-size-fal.patch |   4 +-
 ...E-Allow-version-code-in-machine-type.patch |  22 +-
 ...e-bcs-bitmap-initialization-to-job-c.patch |   4 +-
 ...VE-Backup-add-vma-backup-format-code.patch |   6 +-
 ...-Backup-add-backup-dump-block-driver.patch |   6 +-
 ...d-sequential-job-transaction-support.patch |   2 +-
 ...ckup-Proxmox-backup-patches-for-QEMU.patch |  47 +--
 ...estore-new-command-to-restore-from-p.patch |   4 +-
 ...k-driver-to-map-backup-archives-into.patch |  12 +-
 ...ct-stderr-to-journal-when-daemonized.patch |  10 +-
 ...igrate-dirty-bitmap-state-via-savevm.patch |  16 +-
 ...dirty-bitmap-migrate-other-bitmaps-e.patch |   2 +-
 ...all-back-to-open-iscsi-initiatorname.patch |   2 +-
 ...PVE-block-stream-increase-chunk-size.patch |   2 +-
 .../0038-block-add-alloc-track-driver.patch   |  61 +++-
 ...0039-PVE-backup-add-fleecing-option.patch} |  32 +-
 ...-rbd-workaround-for-ceph-issue-53784.patch |  81 -----
 ...-fix-handling-of-holes-in-.bdrv_co_b.patch |  36 ---
 ...-version-deprecation-for-Proxmox-VE.patch} |  77 +++--
 ...-out-helper-to-clear-backup-state-s.patch} |   2 +-
 ...k-rbd-implement-bdrv_co_block_status.patch | 162 ----------
 ...-out-helper-to-initialize-backup-st.patch} |   2 +-
 ...ackup-add-target-ID-in-backup-state.patch} |   2 +-
 ...vice-info-allow-caller-to-specify-f.patch} |   2 +-
 ...void-timer-storms-on-periodic-timers.patch |  50 ----
 ...ent-backup-access-setup-and-teardow.patch} |  16 +-
 ...e-full-64-bit-target-value-of-the-co.patch | 202 -------------
 ...e-for-the-switch-to-using-blockdev-.patch} |  11 +-
 ...-hpet-accept-64-bit-reads-and-writes.patch | 281 ------------------
 ...e-read-only-bits-directly-in-new_val.patch |  64 ----
 ...e-migration-blocker-check-for-snaps.patch} |  10 +-
 ...et-remove-unnecessary-variable-index.patch |  68 -----
 ...re-high-bits-of-comparator-in-32-bit.patch |  40 ---
 ...and-cleanup-persistence-of-interrupt.patch | 120 --------
 ...nit-support-using-as-blockdev-driver.patch |  71 -----
 ...ack-support-using-as-blockdev-driver.patch |  61 ----
 ...de-child-references-in-block-device-.patch | 137 ---------
 debian/patches/series                         |  42 ++-
 qemu                                          |   2 +-
 80 files changed, 1224 insertions(+), 1777 deletions(-)
 create mode 100644 debian/patches/extra/0003-target-arm-Trap-PMCR-when-MDCR_EL2.TPMCR-is-set.patch
 create mode 100644 debian/patches/extra/0004-qemu-atomic-Finish-renaming-atomic128-cas.h-headers.patch
 create mode 100644 debian/patches/extra/0005-block-curl-fix-curl-internal-handles-handling.patch
 create mode 100644 debian/patches/extra/0006-i386-tcg-svm-fix-incorrect-canonicalization.patch
 create mode 100644 debian/patches/extra/0007-hw-vfio-user-add-x-pci-class-code.patch
 create mode 100644 debian/patches/extra/0008-tcg-arm-Fix-tgen_deposit.patch
 create mode 100644 debian/patches/extra/0009-e1000e-Prevent-crash-from-legacy-interrupt-firing-af.patch
 create mode 100644 debian/patches/extra/0010-vfio-igd-Enable-quirks-when-IGD-is-not-the-primary-d.patch
 create mode 100644 debian/patches/extra/0011-i386-cpu-Enable-SMM-cpu-address-space-under-KVM.patch
 create mode 100644 debian/patches/extra/0012-target-i386-add-compatibility-property-for-arch_capa.patch
 create mode 100644 debian/patches/extra/0013-target-i386-add-compatibility-property-for-pdcm-feat.patch
 rename debian/patches/pve/{0042-PVE-backup-add-fleecing-option.patch => 0039-PVE-backup-add-fleecing-option.patch} (95%)
 delete mode 100644 debian/patches/pve/0039-Revert-block-rbd-workaround-for-ceph-issue-53784.patch
 delete mode 100644 debian/patches/pve/0040-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch
 rename debian/patches/pve/{0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch => 0040-adapt-machine-version-deprecation-for-Proxmox-VE.patch} (69%)
 rename debian/patches/pve/{0051-PVE-backup-factor-out-helper-to-clear-backup-state-s.patch => 0041-PVE-backup-factor-out-helper-to-clear-backup-state-s.patch} (98%)
 delete mode 100644 debian/patches/pve/0041-Revert-block-rbd-implement-bdrv_co_block_status.patch
 rename debian/patches/pve/{0052-PVE-backup-factor-out-helper-to-initialize-backup-st.patch => 0042-PVE-backup-factor-out-helper-to-initialize-backup-st.patch} (98%)
 rename debian/patches/pve/{0053-PVE-backup-add-target-ID-in-backup-state.patch => 0043-PVE-backup-add-target-ID-in-backup-state.patch} (98%)
 rename debian/patches/pve/{0054-PVE-backup-get-device-info-allow-caller-to-specify-f.patch => 0044-PVE-backup-get-device-info-allow-caller-to-specify-f.patch} (98%)
 delete mode 100644 debian/patches/pve/0044-Revert-hpet-avoid-timer-storms-on-periodic-timers.patch
 rename debian/patches/pve/{0055-PVE-backup-implement-backup-access-setup-and-teardow.patch => 0045-PVE-backup-implement-backup-access-setup-and-teardow.patch} (99%)
 delete mode 100644 debian/patches/pve/0045-Revert-hpet-store-full-64-bit-target-value-of-the-co.patch
 rename debian/patches/pve/{0056-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch => 0046-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch} (94%)
 delete mode 100644 debian/patches/pve/0046-Revert-hpet-accept-64-bit-reads-and-writes.patch
 delete mode 100644 debian/patches/pve/0047-Revert-hpet-place-read-only-bits-directly-in-new_val.patch
 rename debian/patches/pve/{0060-savevm-async-reuse-migration-blocker-check-for-snaps.patch => 0047-savevm-async-reuse-migration-blocker-check-for-snaps.patch} (96%)
 delete mode 100644 debian/patches/pve/0048-Revert-hpet-remove-unnecessary-variable-index.patch
 delete mode 100644 debian/patches/pve/0049-Revert-hpet-ignore-high-bits-of-comparator-in-32-bit.patch
 delete mode 100644 debian/patches/pve/0050-Revert-hpet-fix-and-cleanup-persistence-of-interrupt.patch
 delete mode 100644 debian/patches/pve/0057-block-zeroinit-support-using-as-blockdev-driver.patch
 delete mode 100644 debian/patches/pve/0058-block-alloc-track-support-using-as-blockdev-driver.patch
 delete mode 100644 debian/patches/pve/0059-block-qapi-include-child-references-in-block-device-.patch

-- 
2.47.3



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


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

* [pve-devel] [PATCH qemu 1/5] buildsys: adapt removal of dtb files for 10.1.0
  2025-09-24 14:47 [pve-devel] [PATCH qemu 0/5] QEMU 10.1.0 Fiona Ebner
@ 2025-09-24 14:47 ` Fiona Ebner
  2025-09-24 14:47 ` [pve-devel] [PATCH qemu 2/5] bump baseline machine version to 6.0 for Proxmox VE 9 Fiona Ebner
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Fiona Ebner @ 2025-09-24 14:47 UTC (permalink / raw)
  To: pve-devel

QEMU commit 12963e79ca ("pc-bios: Move device tree files in their own
subdir") moved all .dtb and .dts files into a separate 'dtb'
subdirectory. Adapt the Makefile to remove that directory.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index f31d3b8..eecdf17 100644
--- a/Makefile
+++ b/Makefile
@@ -32,8 +32,6 @@ PC_BIOS_FW_PURGE_LIST_IN = \
 	s390-ccw.img \
 	s390-netboot.img \
 	u-boot.e500 \
-	.*[a-zA-Z0-9]\.dtb \
-	.*[a-zA-Z0-9]\.dts \
 	qemu_vga.ndrv \
 	slof.bin \
 	opensbi-riscv.*-generic-fw_dynamic.bin \
@@ -49,8 +47,10 @@ $(BUILDDIR): submodule
 	cp -a $(SRCDIR) $@.tmp
 	cp -a debian $@.tmp/debian
 	rm -rf $@.tmp/roms/edk2 # packaged separately
+	rm -rf $@.tmp/pc-bios/dtb
 	find $@.tmp/pc-bios -type f | grep $(BLOB_PURGE_FILTER) | xargs rm -f
 	sed -i $(BLOB_PURGE_SED_CMDS) $@.tmp/pc-bios/meson.build
+	sed -i "/subdir('dtb')/d" $@.tmp/pc-bios/meson.build
 	echo "git clone git://git.proxmox.com/git/pve-qemu.git\\ngit checkout $(GITVERSION)" > $@.tmp/debian/SOURCE
 	mv $@.tmp $@
 
-- 
2.47.3



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


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

* [pve-devel] [PATCH qemu 2/5] bump baseline machine version to 6.0 for Proxmox VE 9
  2025-09-24 14:47 [pve-devel] [PATCH qemu 0/5] QEMU 10.1.0 Fiona Ebner
  2025-09-24 14:47 ` [pve-devel] [PATCH qemu 1/5] buildsys: adapt removal of dtb files for 10.1.0 Fiona Ebner
@ 2025-09-24 14:47 ` Fiona Ebner
  2025-09-24 14:47 ` [pve-devel] [PATCH qemu 3/5] alloc-track/zeroinit: squash patches enabling using with blockdev into patches adding block drivers Fiona Ebner
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Fiona Ebner @ 2025-09-24 14:47 UTC (permalink / raw)
  To: pve-devel

This was missed with QEMU 10.0 and should've been bumped already for
the release of Proxmox VE 9 to get more complete deprecation warnings.

The compile time check for detecting too old baseline is only active
starting with QEMU 10.1, since the new policy on the QEMU side is
enforced starting with that version and that's why it slipped through.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 ...043-adapt-machine-version-deprecation-for-Proxmox-VE.patch | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/debian/patches/pve/0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch b/debian/patches/pve/0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch
index 6e587fa..9d0d5d1 100644
--- a/debian/patches/pve/0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch
+++ b/debian/patches/pve/0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch
@@ -47,8 +47,8 @@ index 8ada4d5832..f9f3b75284 100644
 + *   9        11.2              5.2 and older        6.0
 + *  10        13.2              7.2 and older        8.0
 + */
-+#define MACHINE_VER_BASELINE_PVE_MAJOR 2
-+#define MACHINE_VER_BASELINE_PVE_MINOR 4
++#define MACHINE_VER_BASELINE_PVE_MAJOR 6
++#define MACHINE_VER_BASELINE_PVE_MINOR 0
 +#define MACHINE_VER_DELETION_MAJOR (QEMU_VERSION_MAJOR - 6)
 +#define MACHINE_VER_DELETION_MINOR QEMU_VERSION_MINOR
 +
-- 
2.47.3



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


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

* [pve-devel] [PATCH qemu 3/5] alloc-track/zeroinit: squash patches enabling using with blockdev into patches adding block drivers
  2025-09-24 14:47 [pve-devel] [PATCH qemu 0/5] QEMU 10.1.0 Fiona Ebner
  2025-09-24 14:47 ` [pve-devel] [PATCH qemu 1/5] buildsys: adapt removal of dtb files for 10.1.0 Fiona Ebner
  2025-09-24 14:47 ` [pve-devel] [PATCH qemu 2/5] bump baseline machine version to 6.0 for Proxmox VE 9 Fiona Ebner
@ 2025-09-24 14:47 ` Fiona Ebner
  2025-09-24 14:47 ` [pve-devel] [PATCH qemu 4/5] update submodule and patches to QEMU 10.1.0 Fiona Ebner
  2025-09-24 14:47 ` [pve-devel] [PATCH qemu 5/5] stable fixes for " Fiona Ebner
  4 siblings, 0 replies; 6+ messages in thread
From: Fiona Ebner @ 2025-09-24 14:47 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 ...add-the-zeroinit-block-driver-filter.patch | 46 +++++++++---
 ...le-posix-make-locking-optiono-on-cre.patch |  6 +-
 ...ckup-Proxmox-backup-patches-for-QEMU.patch |  2 +-
 ...k-driver-to-map-backup-archives-into.patch |  2 +-
 ...igrate-dirty-bitmap-state-via-savevm.patch |  2 +-
 .../0038-block-add-alloc-track-driver.patch   | 53 ++++++++++++--
 .../0042-PVE-backup-add-fleecing-option.patch |  2 +-
 ...e-version-deprecation-for-Proxmox-VE.patch |  2 +-
 ...ment-backup-access-setup-and-teardow.patch |  2 +-
 ...re-for-the-switch-to-using-blockdev-.patch |  9 +--
 ...e-child-references-in-block-device-.patch} |  8 +--
 ...nit-support-using-as-blockdev-driver.patch | 71 -------------------
 ...ack-support-using-as-blockdev-driver.patch | 61 ----------------
 ...e-migration-blocker-check-for-snaps.patch} |  0
 debian/patches/series                         |  6 +-
 15 files changed, 103 insertions(+), 169 deletions(-)
 rename debian/patches/pve/{0059-block-qapi-include-child-references-in-block-device-.patch => 0057-block-qapi-include-child-references-in-block-device-.patch} (96%)
 delete mode 100644 debian/patches/pve/0057-block-zeroinit-support-using-as-blockdev-driver.patch
 delete mode 100644 debian/patches/pve/0058-block-alloc-track-support-using-as-blockdev-driver.patch
 rename debian/patches/pve/{0060-savevm-async-reuse-migration-blocker-check-for-snaps.patch => 0058-savevm-async-reuse-migration-blocker-check-for-snaps.patch} (100%)

diff --git a/debian/patches/pve/0019-PVE-block-add-the-zeroinit-block-driver-filter.patch b/debian/patches/pve/0019-PVE-block-add-the-zeroinit-block-driver-filter.patch
index dc1145d..0534dc1 100644
--- a/debian/patches/pve/0019-PVE-block-add-the-zeroinit-block-driver-filter.patch
+++ b/debian/patches/pve/0019-PVE-block-add-the-zeroinit-block-driver-filter.patch
@@ -9,9 +9,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
      use dedicated function to open file child]
 Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 ---
- block/meson.build |   1 +
- block/zeroinit.c  | 207 ++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 208 insertions(+)
+ block/meson.build    |   1 +
+ block/zeroinit.c     | 213 +++++++++++++++++++++++++++++++++++++++++++
+ qapi/block-core.json |   5 +-
+ 3 files changed, 217 insertions(+), 2 deletions(-)
  create mode 100644 block/zeroinit.c
 
 diff --git a/block/meson.build b/block/meson.build
@@ -28,10 +29,10 @@ index 34b1b2a306..a21d9a5411 100644
  system_ss.add(when: 'CONFIG_TCG', if_true: files('blkreplay.c'))
 diff --git a/block/zeroinit.c b/block/zeroinit.c
 new file mode 100644
-index 0000000000..f9d513db15
+index 0000000000..036edb17f5
 --- /dev/null
 +++ b/block/zeroinit.c
-@@ -0,0 +1,207 @@
+@@ -0,0 +1,213 @@
 +/*
 + * Filter to fake a zero-initialized block device.
 + *
@@ -100,6 +101,7 @@ index 0000000000..f9d513db15
 +    QemuOpts *opts;
 +    Error *local_err = NULL;
 +    int ret;
++    const char *next = NULL;
 +
 +    s->extents = 0;
 +
@@ -111,9 +113,14 @@ index 0000000000..f9d513db15
 +        goto fail;
 +    }
 +
-+    /* Open the raw file */
-+    ret = bdrv_open_file_child(qemu_opt_get(opts, "x-next"), options, "next",
-+                               bs, &local_err);
++
++    next = qemu_opt_get(opts, "x-next");
++
++    if (next) {
++        ret = bdrv_open_file_child(next, options, "next", bs, &local_err);
++    } else { /* when opened as a blockdev, there is no 'next' option */
++        ret = bdrv_open_file_child(NULL, options, "file", bs, &local_err);
++    }
 +    if (ret < 0) {
 +        error_propagate(errp, local_err);
 +        goto fail;
@@ -239,3 +246,26 @@ index 0000000000..f9d513db15
 +}
 +
 +block_init(bdrv_zeroinit_init);
+diff --git a/qapi/block-core.json b/qapi/block-core.json
+index 0e5f148d30..0711253f06 100644
+--- a/qapi/block-core.json
++++ b/qapi/block-core.json
+@@ -3241,7 +3241,7 @@
+             { 'name': 'virtio-blk-vfio-pci', 'if': 'CONFIG_BLKIO' },
+             { 'name': 'virtio-blk-vhost-user', 'if': 'CONFIG_BLKIO' },
+             { 'name': 'virtio-blk-vhost-vdpa', 'if': 'CONFIG_BLKIO' },
+-            'vmdk', 'vpc', 'vvfat' ] }
++            'vmdk', 'vpc', 'vvfat', 'zeroinit' ] }
+ 
+ ##
+ # @BlockdevOptionsFile:
+@@ -4799,7 +4799,8 @@
+                       'if': 'CONFIG_BLKIO' },
+       'vmdk':       'BlockdevOptionsGenericCOWFormat',
+       'vpc':        'BlockdevOptionsGenericFormat',
+-      'vvfat':      'BlockdevOptionsVVFAT'
++      'vvfat':      'BlockdevOptionsVVFAT',
++      'zeroinit':   'BlockdevOptionsGenericFormat'
+   } }
+ 
+ ##
diff --git a/debian/patches/pve/0022-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
index bf230a5..e01dfc4 100644
--- a/debian/patches/pve/0022-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
@@ -119,10 +119,10 @@ index cfa0b832ba..d5c28cccc9 100644
      };
      return raw_co_create(&options, errp);
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 0e5f148d30..1c05413916 100644
+index 0711253f06..7f92c80179 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
-@@ -5016,6 +5016,10 @@
+@@ -5017,6 +5017,10 @@
  # @extent-size-hint: Extent size hint to add to the image file; 0 for
  #     not adding an extent size hint (default: 1 MB, since 5.1)
  #
@@ -133,7 +133,7 @@ index 0e5f148d30..1c05413916 100644
  # Since: 2.12
  ##
  { 'struct': 'BlockdevCreateOptionsFile',
-@@ -5023,7 +5027,8 @@
+@@ -5024,7 +5028,8 @@
              'size':                 'size',
              '*preallocation':       'PreallocMode',
              '*nocow':               'bool',
diff --git a/debian/patches/pve/0030-PVE-Backup-Proxmox-backup-patches-for-QEMU.patch b/debian/patches/pve/0030-PVE-Backup-Proxmox-backup-patches-for-QEMU.patch
index 3a4ca0f..abea096 100644
--- a/debian/patches/pve/0030-PVE-Backup-Proxmox-backup-patches-for-QEMU.patch
+++ b/debian/patches/pve/0030-PVE-Backup-Proxmox-backup-patches-for-QEMU.patch
@@ -1687,7 +1687,7 @@ index 0000000000..e931cb9203
 +    return ret;
 +}
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 1c05413916..dd98e03bf1 100644
+index 7f92c80179..5379fde30f 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
 @@ -855,6 +855,239 @@
diff --git a/debian/patches/pve/0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch b/debian/patches/pve/0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
index 80363f0..0c0f3f6 100644
--- a/debian/patches/pve/0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
+++ b/debian/patches/pve/0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
@@ -361,7 +361,7 @@ index 8508aab9c9..9c39f54f86 100644
  summary_info += {'libdaxctl support': libdaxctl}
  summary_info += {'libcbor support':   libcbor}
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index dd98e03bf1..0c3ebfa74e 100644
+index 5379fde30f..01fb2d899d 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
 @@ -3470,6 +3470,7 @@
diff --git a/debian/patches/pve/0034-PVE-Migrate-dirty-bitmap-state-via-savevm.patch b/debian/patches/pve/0034-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
index cf3897f..bf06ca7 100644
--- a/debian/patches/pve/0034-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
+++ b/debian/patches/pve/0034-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
@@ -192,7 +192,7 @@ index e931cb9203..366b015589 100644
      ret->pbs_masterkey = true;
      ret->backup_max_workers = true;
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 0c3ebfa74e..6838187607 100644
+index 01fb2d899d..7b32b59717 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
 @@ -1008,6 +1008,11 @@
diff --git a/debian/patches/pve/0038-block-add-alloc-track-driver.patch b/debian/patches/pve/0038-block-add-alloc-track-driver.patch
index 5def145..b582205 100644
--- a/debian/patches/pve/0038-block-add-alloc-track-driver.patch
+++ b/debian/patches/pve/0038-block-add-alloc-track-driver.patch
@@ -35,10 +35,11 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
      avoid superfluous child permission update]
 Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 ---
- block/alloc-track.c | 343 ++++++++++++++++++++++++++++++++++++++++++++
- block/meson.build   |   1 +
- block/stream.c      |  34 +++++
- 3 files changed, 378 insertions(+)
+ block/alloc-track.c  | 343 +++++++++++++++++++++++++++++++++++++++++++
+ block/meson.build    |   1 +
+ block/stream.c       |  34 +++++
+ qapi/block-core.json |  19 ++-
+ 4 files changed, 396 insertions(+), 1 deletion(-)
  create mode 100644 block/alloc-track.c
 
 diff --git a/block/alloc-track.c b/block/alloc-track.c
@@ -447,3 +448,47 @@ index e187cd1262..0b61029399 100644
      }
  
  out:
+diff --git a/qapi/block-core.json b/qapi/block-core.json
+index 7b32b59717..8d912dc96b 100644
+--- a/qapi/block-core.json
++++ b/qapi/block-core.json
+@@ -3462,7 +3462,8 @@
+ # Since: 2.9
+ ##
+ { 'enum': 'BlockdevDriver',
+-  'data': [ 'blkdebug', 'blklogwrites', 'blkreplay', 'blkverify', 'bochs',
++  'data': [ 'alloc-track',
++            'blkdebug', 'blklogwrites', 'blkreplay', 'blkverify', 'bochs',
+             'cloop', 'compress', 'copy-before-write', 'copy-on-read', 'dmg',
+             'file', 'snapshot-access', 'ftp', 'ftps',
+             {'name': 'gluster', 'features': [ 'deprecated' ] },
+@@ -3563,6 +3564,21 @@
+ { 'struct': 'BlockdevOptionsNull',
+   'data': { '*size': 'int', '*latency-ns': 'uint64', '*read-zeroes': 'bool' } }
+ 
++##
++# @BlockdevOptionsAllocTrack:
++#
++# Driver specific block device options for the alloc-track backend.
++#
++# @backing: backing file with the data.
++#
++# @auto-remove: whether the alloc-track driver should drop itself
++#     after completing the stream.
++#
++##
++{ 'struct': 'BlockdevOptionsAllocTrack',
++  'base': 'BlockdevOptionsGenericFormat',
++  'data': { 'auto-remove': 'bool', 'backing': 'BlockdevRefOrNull' } }
++
+ ##
+ # @BlockdevOptionsPbs:
+ #
+@@ -5009,6 +5025,7 @@
+             '*detect-zeroes': 'BlockdevDetectZeroesOptions' },
+   'discriminator': 'driver',
+   'data': {
++      'alloc-track':'BlockdevOptionsAllocTrack',
+       'blkdebug':   'BlockdevOptionsBlkdebug',
+       'blklogwrites':'BlockdevOptionsBlklogwrites',
+       'blkverify':  'BlockdevOptionsBlkverify',
diff --git a/debian/patches/pve/0042-PVE-backup-add-fleecing-option.patch b/debian/patches/pve/0042-PVE-backup-add-fleecing-option.patch
index 1fadfa5..12c60c7 100644
--- a/debian/patches/pve/0042-PVE-backup-add-fleecing-option.patch
+++ b/debian/patches/pve/0042-PVE-backup-add-fleecing-option.patch
@@ -429,7 +429,7 @@ index 366b015589..9b66788ab5 100644
      return ret;
  }
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 6838187607..9bdcfa31ea 100644
+index 8d912dc96b..ba2a13e668 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
 @@ -952,6 +952,10 @@
diff --git a/debian/patches/pve/0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch b/debian/patches/pve/0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch
index 9d0d5d1..272133f 100644
--- a/debian/patches/pve/0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch
+++ b/debian/patches/pve/0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch
@@ -22,7 +22,7 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
  1 file changed, 51 insertions(+), 27 deletions(-)
 
 diff --git a/include/hw/boards.h b/include/hw/boards.h
-index 8ada4d5832..f9f3b75284 100644
+index 8ada4d5832..6bfc2a7961 100644
 --- a/include/hw/boards.h
 +++ b/include/hw/boards.h
 @@ -636,42 +636,66 @@ struct MachineState {
diff --git a/debian/patches/pve/0055-PVE-backup-implement-backup-access-setup-and-teardow.patch b/debian/patches/pve/0055-PVE-backup-implement-backup-access-setup-and-teardow.patch
index c4273a1..901442c 100644
--- a/debian/patches/pve/0055-PVE-backup-implement-backup-access-setup-and-teardow.patch
+++ b/debian/patches/pve/0055-PVE-backup-implement-backup-access-setup-and-teardow.patch
@@ -740,7 +740,7 @@ index 0000000000..9ebeef7c8f
 +
 +#endif /* PVE_BACKUP_H */
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 9bdcfa31ea..2fb51215f2 100644
+index ba2a13e668..07c5773717 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
 @@ -1023,6 +1023,9 @@
diff --git a/debian/patches/pve/0056-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch b/debian/patches/pve/0056-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch
index eaa23d4..6d4bfe1 100644
--- a/debian/patches/pve/0056-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch
+++ b/debian/patches/pve/0056-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch
@@ -1,8 +1,8 @@
-From 5a8cf9e98ba1668a6a20c2fcda1704de4103ff58 Mon Sep 17 00:00:00 2001
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Fiona Ebner <f.ebner@proxmox.com>
 Date: Wed, 2 Jul 2025 18:27:34 +0200
-Subject: [PATCH 56/59] PVE backup: prepare for the switch to using blockdev
- rather than drive
+Subject: [PATCH] PVE backup: prepare for the switch to using blockdev rather
+ than drive
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
@@ -101,6 +101,3 @@ index 0450303017..457fcb7e5c 100644
              di_list = g_list_append(di_list, di);
          }
      }
--- 
-2.39.5
-
diff --git a/debian/patches/pve/0059-block-qapi-include-child-references-in-block-device-.patch b/debian/patches/pve/0057-block-qapi-include-child-references-in-block-device-.patch
similarity index 96%
rename from debian/patches/pve/0059-block-qapi-include-child-references-in-block-device-.patch
rename to debian/patches/pve/0057-block-qapi-include-child-references-in-block-device-.patch
index 54a7804..dc33d5f 100644
--- a/debian/patches/pve/0059-block-qapi-include-child-references-in-block-device-.patch
+++ b/debian/patches/pve/0057-block-qapi-include-child-references-in-block-device-.patch
@@ -1,8 +1,7 @@
-From 76442f3eafa8cbe647fe2d39e78e817ec681143c Mon Sep 17 00:00:00 2001
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Fiona Ebner <f.ebner@proxmox.com>
 Date: Wed, 2 Jul 2025 18:27:37 +0200
-Subject: [PATCH 59/59] block/qapi: include child references in block device
- info
+Subject: [PATCH] block/qapi: include child references in block device info
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
@@ -132,6 +131,3 @@ index 52692b6b3b..ef99bb2e9a 100644
              "node-name": "disk0",
              "backing_file_depth": 0,
              "drv": "null-co",
--- 
-2.39.5
-
diff --git a/debian/patches/pve/0057-block-zeroinit-support-using-as-blockdev-driver.patch b/debian/patches/pve/0057-block-zeroinit-support-using-as-blockdev-driver.patch
deleted file mode 100644
index 2390013..0000000
--- a/debian/patches/pve/0057-block-zeroinit-support-using-as-blockdev-driver.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 5beb1f48555d74f468b6c0ca657d3be44c8ea8e3 Mon Sep 17 00:00:00 2001
-From: Fiona Ebner <f.ebner@proxmox.com>
-Date: Wed, 2 Jul 2025 18:27:35 +0200
-Subject: [PATCH 57/59] block/zeroinit: support using as blockdev driver
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
-Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
----
- block/zeroinit.c     | 12 +++++++++---
- qapi/block-core.json |  5 +++--
- 2 files changed, 12 insertions(+), 5 deletions(-)
-
-diff --git a/block/zeroinit.c b/block/zeroinit.c
-index f9d513db15..036edb17f5 100644
---- a/block/zeroinit.c
-+++ b/block/zeroinit.c
-@@ -66,6 +66,7 @@ static int zeroinit_open(BlockDriverState *bs, QDict *options, int flags,
-     QemuOpts *opts;
-     Error *local_err = NULL;
-     int ret;
-+    const char *next = NULL;
- 
-     s->extents = 0;
- 
-@@ -77,9 +78,14 @@ static int zeroinit_open(BlockDriverState *bs, QDict *options, int flags,
-         goto fail;
-     }
- 
--    /* Open the raw file */
--    ret = bdrv_open_file_child(qemu_opt_get(opts, "x-next"), options, "next",
--                               bs, &local_err);
-+
-+    next = qemu_opt_get(opts, "x-next");
-+
-+    if (next) {
-+        ret = bdrv_open_file_child(next, options, "next", bs, &local_err);
-+    } else { /* when opened as a blockdev, there is no 'next' option */
-+        ret = bdrv_open_file_child(NULL, options, "file", bs, &local_err);
-+    }
-     if (ret < 0) {
-         error_propagate(errp, local_err);
-         goto fail;
-diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 2fb51215f2..f8ed564cf0 100644
---- a/qapi/block-core.json
-+++ b/qapi/block-core.json
-@@ -3586,7 +3586,7 @@
-             { 'name': 'virtio-blk-vfio-pci', 'if': 'CONFIG_BLKIO' },
-             { 'name': 'virtio-blk-vhost-user', 'if': 'CONFIG_BLKIO' },
-             { 'name': 'virtio-blk-vhost-vdpa', 'if': 'CONFIG_BLKIO' },
--            'vmdk', 'vpc', 'vvfat' ] }
-+            'vmdk', 'vpc', 'vvfat', 'zeroinit' ] }
- 
- ##
- # @BlockdevOptionsFile:
-@@ -5172,7 +5172,8 @@
-                       'if': 'CONFIG_BLKIO' },
-       'vmdk':       'BlockdevOptionsGenericCOWFormat',
-       'vpc':        'BlockdevOptionsGenericFormat',
--      'vvfat':      'BlockdevOptionsVVFAT'
-+      'vvfat':      'BlockdevOptionsVVFAT',
-+      'zeroinit':   'BlockdevOptionsGenericFormat'
-   } }
- 
- ##
--- 
-2.39.5
-
diff --git a/debian/patches/pve/0058-block-alloc-track-support-using-as-blockdev-driver.patch b/debian/patches/pve/0058-block-alloc-track-support-using-as-blockdev-driver.patch
deleted file mode 100644
index d7db80c..0000000
--- a/debian/patches/pve/0058-block-alloc-track-support-using-as-blockdev-driver.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From d180b059731818ae34e43e11495c8ac081ab89b9 Mon Sep 17 00:00:00 2001
-From: Fiona Ebner <f.ebner@proxmox.com>
-Date: Wed, 2 Jul 2025 18:27:36 +0200
-Subject: [PATCH 58/59] block/alloc-track: support using as blockdev driver
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
-Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
----
- qapi/block-core.json | 19 ++++++++++++++++++-
- 1 file changed, 18 insertions(+), 1 deletion(-)
-
-diff --git a/qapi/block-core.json b/qapi/block-core.json
-index f8ed564cf0..07c5773717 100644
---- a/qapi/block-core.json
-+++ b/qapi/block-core.json
-@@ -3567,7 +3567,8 @@
- # Since: 2.9
- ##
- { 'enum': 'BlockdevDriver',
--  'data': [ 'blkdebug', 'blklogwrites', 'blkreplay', 'blkverify', 'bochs',
-+  'data': [ 'alloc-track',
-+            'blkdebug', 'blklogwrites', 'blkreplay', 'blkverify', 'bochs',
-             'cloop', 'compress', 'copy-before-write', 'copy-on-read', 'dmg',
-             'file', 'snapshot-access', 'ftp', 'ftps',
-             {'name': 'gluster', 'features': [ 'deprecated' ] },
-@@ -3668,6 +3669,21 @@
- { 'struct': 'BlockdevOptionsNull',
-   'data': { '*size': 'int', '*latency-ns': 'uint64', '*read-zeroes': 'bool' } }
- 
-+##
-+# @BlockdevOptionsAllocTrack:
-+#
-+# Driver specific block device options for the alloc-track backend.
-+#
-+# @backing: backing file with the data.
-+#
-+# @auto-remove: whether the alloc-track driver should drop itself
-+#     after completing the stream.
-+#
-+##
-+{ 'struct': 'BlockdevOptionsAllocTrack',
-+  'base': 'BlockdevOptionsGenericFormat',
-+  'data': { 'auto-remove': 'bool', 'backing': 'BlockdevRefOrNull' } }
-+
- ##
- # @BlockdevOptionsPbs:
- #
-@@ -5114,6 +5130,7 @@
-             '*detect-zeroes': 'BlockdevDetectZeroesOptions' },
-   'discriminator': 'driver',
-   'data': {
-+      'alloc-track':'BlockdevOptionsAllocTrack',
-       'blkdebug':   'BlockdevOptionsBlkdebug',
-       'blklogwrites':'BlockdevOptionsBlklogwrites',
-       'blkverify':  'BlockdevOptionsBlkverify',
--- 
-2.39.5
-
diff --git a/debian/patches/pve/0060-savevm-async-reuse-migration-blocker-check-for-snaps.patch b/debian/patches/pve/0058-savevm-async-reuse-migration-blocker-check-for-snaps.patch
similarity index 100%
rename from debian/patches/pve/0060-savevm-async-reuse-migration-blocker-check-for-snaps.patch
rename to debian/patches/pve/0058-savevm-async-reuse-migration-blocker-check-for-snaps.patch
diff --git a/debian/patches/series b/debian/patches/series
index 6e5fd69..d7cbd42 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -62,7 +62,5 @@ pve/0053-PVE-backup-add-target-ID-in-backup-state.patch
 pve/0054-PVE-backup-get-device-info-allow-caller-to-specify-f.patch
 pve/0055-PVE-backup-implement-backup-access-setup-and-teardow.patch
 pve/0056-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch
-pve/0057-block-zeroinit-support-using-as-blockdev-driver.patch
-pve/0058-block-alloc-track-support-using-as-blockdev-driver.patch
-pve/0059-block-qapi-include-child-references-in-block-device-.patch
-pve/0060-savevm-async-reuse-migration-blocker-check-for-snaps.patch
+pve/0057-block-qapi-include-child-references-in-block-device-.patch
+pve/0058-savevm-async-reuse-migration-blocker-check-for-snaps.patch
-- 
2.47.3



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

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

* [pve-devel] [PATCH qemu 4/5] update submodule and patches to QEMU 10.1.0
  2025-09-24 14:47 [pve-devel] [PATCH qemu 0/5] QEMU 10.1.0 Fiona Ebner
                   ` (2 preceding siblings ...)
  2025-09-24 14:47 ` [pve-devel] [PATCH qemu 3/5] alloc-track/zeroinit: squash patches enabling using with blockdev into patches adding block drivers Fiona Ebner
@ 2025-09-24 14:47 ` Fiona Ebner
  2025-09-24 14:47 ` [pve-devel] [PATCH qemu 5/5] stable fixes for " Fiona Ebner
  4 siblings, 0 replies; 6+ messages in thread
From: Fiona Ebner @ 2025-09-24 14:47 UTC (permalink / raw)
  To: pve-devel

Notable changes:

* Finally can drop RBD reverts for block-status callbacks:
  https://gitlab.com/qemu-project/qemu/-/issues/1026
  https://tracker.ceph.com/issues/63341

* dropped HPET reverts, see
  https://lore.proxmox.com/pve-devel/20250924143611.166858-1-f.ebner@proxmox.com/T/

* PVE backup required adaptation, because of 3d3911f16b
  ("blockdev-backup: Add error handling option for copy-before-write
  jobs"). It was kept as the default ON_CBW_ERROR_BREAK_GUEST_WRITE.
  While this should be changed to ON_CBW_ERROR_BREAK_SNAPSHOT like is
  done for fleecing, that requires more changes to actually detect
  that error in the main backup loop. Otherwise, the backup would be
  completed and corrupt! What is also missing compared to fleecing
  and fixing those bugs for good is having a timeout.

* machine version checks required adaptation, because of f59ee04406
  ("include/hw/boards: cope with dev/rc versions in deprecation
  checks") to not diverge even more from upstream. Remove the, now
  superfluous, check for QEMU version >= 10.1 that should've been
  for >= 10.0 actually, see commit "bump baseline machine version to
  6.0 for Proxmox VE 9" for context.

* Context changes during rebase for bitmap mirror patches. Upstream
  now already switched to passing the full mirror sync-mode 9474d97bd7
  ("mirror: Pass full sync mode rather than bool to internals") and
  dropped a parameter 253b43a290 ("mirror: Drop redundant zero_target
  parameter") and there were other smaller context changes.

Minor changes:

* Squash "block/zeroinit: support using as blockdev driver" and
  "block/alloc-track: support using as blockdev driver" into the
  respective commits adding the drivers.

* alloc-track required a minor adaptation, because of c33159dec7
  ("block: Expand block status mode from bool to flags"). The flags
  are only hints and the change was motivated by detecting zeroes for
  mirror targets, so no need to change the implementation in
  alloc-track.

* The savevm-async IO channel class needed a signature update for the
  init function, because of 12d1a768bd ("qom: Have class_init() take a
  const data argument").

* The qemu-img patches adding isze and osize needed adaptation,
  because of d7bd47bf84 ("qemu-img: extend cvtnum() and use it in more
  places") Calls to cvtnum() need to indicate that the argument is to
  be treated as a size. While at it, fix the passed-in name (was
  "size" both times), which is used for error messages.

* Minor context changes during rebase for qemu-img dd patches and
  savevm-async header.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 ...d-support-for-sync-bitmap-mode-never.patch | 155 ++++------
 ...-support-for-conditional-and-always-.patch |  10 +-
 ...check-for-bitmap-mode-without-bitmap.patch |   4 +-
 ...-to-bdrv_dirty_bitmap_merge_internal.patch |   8 +-
 .../0006-mirror-move-some-checks-to-qmp.patch |  12 +-
 ...race-with-clients-disconnecting-earl.patch |   4 +-
 ...k-file-change-locking-default-to-off.patch |   6 +-
 ...djust-network-script-path-to-etc-kvm.patch |   4 +-
 ...he-CPU-model-to-kvm64-32-instead-of-.patch |   6 +-
 ...ui-spice-default-to-pve-certificates.patch |   4 +-
 ...erfs-no-default-logfile-if-daemonize.patch |   2 +-
 ...lock-rbd-disable-rbd_cache_writethro.patch |   4 +-
 ...PVE-Up-glusterfs-allow-partial-reads.patch |  10 +-
 ...return-success-on-info-without-snaps.patch |   4 +-
 ...dd-add-osize-and-read-from-to-stdin-.patch |  19 +-
 ...E-Up-qemu-img-dd-add-isize-parameter.patch |  19 +-
 ...PVE-Up-qemu-img-dd-add-n-skip_create.patch |  25 +-
 ...-add-l-option-for-loading-a-snapshot.patch |  24 +-
 ...virtio-balloon-improve-query-balloon.patch |  12 +-
 .../0014-PVE-qapi-modify-query-machines.patch |  10 +-
 .../0015-PVE-qapi-modify-spice-query.patch    |  10 +-
 ...nnel-implementation-for-savevm-async.patch |   6 +-
 ...async-for-background-state-snapshots.patch |  37 +--
 ...add-optional-buffer-size-to-QEMUFile.patch |  10 +-
 ...add-the-zeroinit-block-driver-filter.patch |   6 +-
 ...-Add-dummy-id-command-line-parameter.patch |  10 +-
 ...t-target-i386-disable-LINT0-after-re.patch |   2 +-
 ...le-posix-make-locking-optiono-on-cre.patch |  20 +-
 ...3-PVE-monitor-disable-oob-capability.patch |   4 +-
 ...sed-balloon-qemu-4-0-config-size-fal.patch |   4 +-
 ...E-Allow-version-code-in-machine-type.patch |  22 +-
 ...e-bcs-bitmap-initialization-to-job-c.patch |   4 +-
 ...VE-Backup-add-vma-backup-format-code.patch |   6 +-
 ...-Backup-add-backup-dump-block-driver.patch |   6 +-
 ...d-sequential-job-transaction-support.patch |   2 +-
 ...ckup-Proxmox-backup-patches-for-QEMU.patch |  47 +--
 ...estore-new-command-to-restore-from-p.patch |   4 +-
 ...k-driver-to-map-backup-archives-into.patch |  12 +-
 ...ct-stderr-to-journal-when-daemonized.patch |  10 +-
 ...igrate-dirty-bitmap-state-via-savevm.patch |  16 +-
 ...dirty-bitmap-migrate-other-bitmaps-e.patch |   2 +-
 ...all-back-to-open-iscsi-initiatorname.patch |   2 +-
 ...PVE-block-stream-increase-chunk-size.patch |   2 +-
 .../0038-block-add-alloc-track-driver.patch   |  16 +-
 ...0039-PVE-backup-add-fleecing-option.patch} |  32 +-
 ...-rbd-workaround-for-ceph-issue-53784.patch |  81 -----
 ...-fix-handling-of-holes-in-.bdrv_co_b.patch |  36 ---
 ...-version-deprecation-for-Proxmox-VE.patch} |  73 +++--
 ...-out-helper-to-clear-backup-state-s.patch} |   2 +-
 ...k-rbd-implement-bdrv_co_block_status.patch | 162 ----------
 ...-out-helper-to-initialize-backup-st.patch} |   2 +-
 ...ackup-add-target-ID-in-backup-state.patch} |   2 +-
 ...vice-info-allow-caller-to-specify-f.patch} |   2 +-
 ...void-timer-storms-on-periodic-timers.patch |  50 ----
 ...ent-backup-access-setup-and-teardow.patch} |  16 +-
 ...e-full-64-bit-target-value-of-the-co.patch | 202 -------------
 ...e-for-the-switch-to-using-blockdev-.patch} |   2 +-
 ...-hpet-accept-64-bit-reads-and-writes.patch | 281 ------------------
 ...e-read-only-bits-directly-in-new_val.patch |  64 ----
 ...e-migration-blocker-check-for-snaps.patch} |  10 +-
 ...et-remove-unnecessary-variable-index.patch |  68 -----
 ...re-high-bits-of-comparator-in-32-bit.patch |  40 ---
 ...and-cleanup-persistence-of-interrupt.patch | 120 --------
 ...de-child-references-in-block-device-.patch | 133 ---------
 debian/patches/series                         |  29 +-
 qemu                                          |   2 +-
 66 files changed, 387 insertions(+), 1624 deletions(-)
 rename debian/patches/pve/{0042-PVE-backup-add-fleecing-option.patch => 0039-PVE-backup-add-fleecing-option.patch} (95%)
 delete mode 100644 debian/patches/pve/0039-Revert-block-rbd-workaround-for-ceph-issue-53784.patch
 delete mode 100644 debian/patches/pve/0040-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch
 rename debian/patches/pve/{0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch => 0040-adapt-machine-version-deprecation-for-Proxmox-VE.patch} (70%)
 rename debian/patches/pve/{0051-PVE-backup-factor-out-helper-to-clear-backup-state-s.patch => 0041-PVE-backup-factor-out-helper-to-clear-backup-state-s.patch} (98%)
 delete mode 100644 debian/patches/pve/0041-Revert-block-rbd-implement-bdrv_co_block_status.patch
 rename debian/patches/pve/{0052-PVE-backup-factor-out-helper-to-initialize-backup-st.patch => 0042-PVE-backup-factor-out-helper-to-initialize-backup-st.patch} (98%)
 rename debian/patches/pve/{0053-PVE-backup-add-target-ID-in-backup-state.patch => 0043-PVE-backup-add-target-ID-in-backup-state.patch} (98%)
 rename debian/patches/pve/{0054-PVE-backup-get-device-info-allow-caller-to-specify-f.patch => 0044-PVE-backup-get-device-info-allow-caller-to-specify-f.patch} (98%)
 delete mode 100644 debian/patches/pve/0044-Revert-hpet-avoid-timer-storms-on-periodic-timers.patch
 rename debian/patches/pve/{0055-PVE-backup-implement-backup-access-setup-and-teardow.patch => 0045-PVE-backup-implement-backup-access-setup-and-teardow.patch} (99%)
 delete mode 100644 debian/patches/pve/0045-Revert-hpet-store-full-64-bit-target-value-of-the-co.patch
 rename debian/patches/pve/{0056-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch => 0046-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch} (99%)
 delete mode 100644 debian/patches/pve/0046-Revert-hpet-accept-64-bit-reads-and-writes.patch
 delete mode 100644 debian/patches/pve/0047-Revert-hpet-place-read-only-bits-directly-in-new_val.patch
 rename debian/patches/pve/{0058-savevm-async-reuse-migration-blocker-check-for-snaps.patch => 0047-savevm-async-reuse-migration-blocker-check-for-snaps.patch} (96%)
 delete mode 100644 debian/patches/pve/0048-Revert-hpet-remove-unnecessary-variable-index.patch
 delete mode 100644 debian/patches/pve/0049-Revert-hpet-ignore-high-bits-of-comparator-in-32-bit.patch
 delete mode 100644 debian/patches/pve/0050-Revert-hpet-fix-and-cleanup-persistence-of-interrupt.patch
 delete mode 100644 debian/patches/pve/0057-block-qapi-include-child-references-in-block-device-.patch

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 ba25f6f..1a20886 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
@@ -27,49 +27,30 @@ Signed-off-by: Ma Haocong <mahaocong@didichuxing.com>
 Signed-off-by: John Snow <jsnow@redhat.com>
 Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
 Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
-[FE: rebased for 9.1.2]
+[FE: rebased for 10.1.0]
 Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 ---
- block/mirror.c                         | 99 ++++++++++++++++++++------
- blockdev.c                             | 38 +++++++++-
+ block/mirror.c                         | 87 +++++++++++++++++++++-----
+ blockdev.c                             | 36 ++++++++++-
  include/block/block_int-global-state.h |  4 +-
- qapi/block-core.json                   | 25 ++++++-
+ qapi/block-core.json                   | 25 +++++++-
  tests/unit/test-block-iothread.c       |  4 +-
- 5 files changed, 142 insertions(+), 28 deletions(-)
+ 5 files changed, 135 insertions(+), 21 deletions(-)
 
 diff --git a/block/mirror.c b/block/mirror.c
-index a53582f17b..fafca1360e 100644
+index b344182c74..a184e91478 100644
 --- a/block/mirror.c
 +++ b/block/mirror.c
-@@ -51,7 +51,7 @@ typedef struct MirrorBlockJob {
-     BlockDriverState *to_replace;
-     /* Used to block operations on the drive-mirror-replace target */
-     Error *replace_blocker;
--    bool is_none_mode;
-+    MirrorSyncMode sync_mode;
-     BlockMirrorBackingMode backing_mode;
-     /* Whether the target image requires explicit zero-initialization */
-     bool zero_target;
-@@ -73,6 +73,8 @@ typedef struct MirrorBlockJob {
-     size_t buf_size;
+@@ -74,6 +74,8 @@ typedef struct MirrorBlockJob {
      int64_t bdev_length;
      unsigned long *cow_bitmap;
+     unsigned long *zero_bitmap;
 +    BdrvDirtyBitmap *sync_bitmap;
 +    BitmapSyncMode bitmap_mode;
      BdrvDirtyBitmap *dirty_bitmap;
      BdrvDirtyBitmapIter *dbi;
      uint8_t *buf;
-@@ -723,7 +725,8 @@ static int mirror_exit_common(Job *job)
-                              &error_abort);
- 
-     if (!abort && s->backing_mode == MIRROR_SOURCE_BACKING_CHAIN) {
--        BlockDriverState *backing = s->is_none_mode ? src : s->base;
-+        BlockDriverState *backing;
-+        backing = s->sync_mode == MIRROR_SYNC_MODE_NONE ? src : s->base;
-         BlockDriverState *unfiltered_target = bdrv_skip_filters(target_bs);
- 
-         if (bdrv_cow_bs(unfiltered_target) != backing) {
-@@ -824,6 +827,16 @@ static void mirror_abort(Job *job)
+@@ -871,6 +873,16 @@ static void mirror_abort(Job *job)
      assert(ret == 0);
  }
  
@@ -86,17 +67,17 @@ index a53582f17b..fafca1360e 100644
  static void coroutine_fn mirror_throttle(MirrorBlockJob *s)
  {
      int64_t now = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
-@@ -1020,7 +1033,8 @@ static int coroutine_fn mirror_run(Job *job, Error **errp)
+@@ -1110,7 +1122,8 @@ static int coroutine_fn mirror_run(Job *job, Error **errp)
      mirror_free_init(s);
  
      s->last_pause_ns = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
--    if (!s->is_none_mode) {
+-    if (s->sync_mode != MIRROR_SYNC_MODE_NONE) {
 +    if ((s->sync_mode == MIRROR_SYNC_MODE_TOP) ||
 +        (s->sync_mode == MIRROR_SYNC_MODE_FULL)) {
          ret = mirror_dirty_init(s);
          if (ret < 0 || job_is_cancelled(&s->common.job)) {
              goto immediate_exit;
-@@ -1309,6 +1323,7 @@ static const BlockJobDriver mirror_job_driver = {
+@@ -1400,6 +1413,7 @@ static const BlockJobDriver mirror_job_driver = {
          .run                    = mirror_run,
          .prepare                = mirror_prepare,
          .abort                  = mirror_abort,
@@ -104,7 +85,7 @@ index a53582f17b..fafca1360e 100644
          .pause                  = mirror_pause,
          .complete               = mirror_complete,
          .cancel                 = mirror_cancel,
-@@ -1327,6 +1342,7 @@ static const BlockJobDriver commit_active_job_driver = {
+@@ -1418,6 +1432,7 @@ static const BlockJobDriver commit_active_job_driver = {
          .run                    = mirror_run,
          .prepare                = mirror_prepare,
          .abort                  = mirror_abort,
@@ -112,19 +93,16 @@ index a53582f17b..fafca1360e 100644
          .pause                  = mirror_pause,
          .complete               = mirror_complete,
          .cancel                 = commit_active_cancel,
-@@ -1719,7 +1735,10 @@ static BlockJob *mirror_start_job(
+@@ -1835,6 +1850,8 @@ static BlockJob *mirror_start_job(
                               BlockCompletionFunc *cb,
                               void *opaque,
                               const BlockJobDriver *driver,
--                             bool is_none_mode, BlockDriverState *base,
-+                             MirrorSyncMode sync_mode,
 +                             BdrvDirtyBitmap *bitmap,
 +                             BitmapSyncMode bitmap_mode,
-+                             BlockDriverState *base,
+                              BlockDriverState *base,
                               bool auto_complete, const char *filter_node_name,
                               bool is_mirror, MirrorCopyMode copy_mode,
-                              bool base_ro,
-@@ -1734,10 +1753,39 @@ static BlockJob *mirror_start_job(
+@@ -1850,10 +1867,39 @@ static BlockJob *mirror_start_job(
  
      GLOBAL_STATE_CODE();
  
@@ -166,18 +144,16 @@ index a53582f17b..fafca1360e 100644
      assert(is_power_of_2(granularity));
  
      if (buf_size < 0) {
-@@ -1878,7 +1926,9 @@ static BlockJob *mirror_start_job(
-     s->replaces = g_strdup(replaces);
+@@ -1995,6 +2041,8 @@ static BlockJob *mirror_start_job(
      s->on_source_error = on_source_error;
      s->on_target_error = on_target_error;
--    s->is_none_mode = is_none_mode;
-+    s->sync_mode = sync_mode;
+     s->sync_mode = sync_mode;
 +    s->sync_bitmap = bitmap;
 +    s->bitmap_mode = bitmap_mode;
      s->backing_mode = backing_mode;
-     s->zero_target = zero_target;
+     s->target_is_zero = target_is_zero;
      qatomic_set(&s->copy_mode, copy_mode);
-@@ -1904,6 +1954,18 @@ static BlockJob *mirror_start_job(
+@@ -2020,6 +2068,18 @@ static BlockJob *mirror_start_job(
       */
      bdrv_disable_dirty_bitmap(s->dirty_bitmap);
  
@@ -193,10 +169,10 @@ index a53582f17b..fafca1360e 100644
 +        }
 +    }
 +
-     bdrv_graph_wrlock();
+     bdrv_graph_wrlock_drained();
      ret = block_job_add_bdrv(&s->common, "source", bs, 0,
                               BLK_PERM_WRITE_UNCHANGED | BLK_PERM_WRITE |
-@@ -1986,6 +2048,9 @@ fail:
+@@ -2102,6 +2162,9 @@ fail:
          if (s->dirty_bitmap) {
              bdrv_release_dirty_bitmap(s->dirty_bitmap);
          }
@@ -206,22 +182,19 @@ index a53582f17b..fafca1360e 100644
          job_early_fail(&s->common.job);
      }
  
-@@ -2008,35 +2073,28 @@ void mirror_start(const char *job_id, BlockDriverState *bs,
+@@ -2124,7 +2187,10 @@ 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,
 -                  MirrorSyncMode mode, BlockMirrorBackingMode backing_mode,
-+                  MirrorSyncMode mode, BdrvDirtyBitmap *bitmap,
++                  MirrorSyncMode mode,
++                  BdrvDirtyBitmap *bitmap,
 +                  BitmapSyncMode bitmap_mode,
 +                  BlockMirrorBackingMode backing_mode,
-                   bool zero_target,
+                   bool target_is_zero,
                    BlockdevOnError on_source_error,
                    BlockdevOnError on_target_error,
-                   bool unmap, const char *filter_node_name,
-                   MirrorCopyMode copy_mode, Error **errp)
- {
--    bool is_none_mode;
-     BlockDriverState *base;
+@@ -2135,13 +2201,6 @@ void mirror_start(const char *job_id, BlockDriverState *bs,
  
      GLOBAL_STATE_CODE();
  
@@ -233,35 +206,33 @@ index a53582f17b..fafca1360e 100644
 -    }
 -
      bdrv_graph_rdlock_main_loop();
--    is_none_mode = mode == MIRROR_SYNC_MODE_NONE;
      base = mode == MIRROR_SYNC_MODE_TOP ? bdrv_backing_chain_next(bs) : NULL;
      bdrv_graph_rdunlock_main_loop();
- 
+@@ -2149,8 +2208,8 @@ void mirror_start(const char *job_id, BlockDriverState *bs,
      mirror_start_job(job_id, bs, creation_flags, target, replaces,
-                      speed, granularity, buf_size, backing_mode, zero_target,
-                      on_source_error, on_target_error, unmap, NULL, NULL,
--                     &mirror_job_driver, is_none_mode, base, false,
+                      speed, granularity, buf_size, mode, backing_mode,
+                      target_is_zero, on_source_error, on_target_error, unmap,
+-                     NULL, NULL, &mirror_job_driver, base, false,
 -                     filter_node_name, true, copy_mode, false, errp);
-+                     &mirror_job_driver, mode, bitmap, bitmap_mode, base,
++                     NULL, NULL, &mirror_job_driver, bitmap, bitmap_mode, base,
 +                     false, filter_node_name, true, copy_mode, false, errp);
  }
  
  BlockJob *commit_active_start(const char *job_id, BlockDriverState *bs,
-@@ -2063,7 +2121,8 @@ BlockJob *commit_active_start(const char *job_id, BlockDriverState *bs,
+@@ -2177,7 +2236,7 @@ BlockJob *commit_active_start(const char *job_id, BlockDriverState *bs,
                       job_id, bs, creation_flags, base, NULL, speed, 0, 0,
-                      MIRROR_LEAVE_BACKING_CHAIN, false,
+                      MIRROR_SYNC_MODE_TOP, MIRROR_LEAVE_BACKING_CHAIN, false,
                       on_error, on_error, true, cb, opaque,
--                     &commit_active_job_driver, false, base, auto_complete,
-+                     &commit_active_job_driver, MIRROR_SYNC_MODE_FULL,
-+                     NULL, 0, base, auto_complete,
+-                     &commit_active_job_driver, base, auto_complete,
++                     &commit_active_job_driver, NULL, 0, base, auto_complete,
                       filter_node_name, false, MIRROR_COPY_MODE_BACKGROUND,
                       base_read_only, errp);
      if (!job) {
 diff --git a/blockdev.c b/blockdev.c
-index 1d1f27cfff..ec45bbaa52 100644
+index b451fee6e1..5855e9cac2 100644
 --- a/blockdev.c
 +++ b/blockdev.c
-@@ -2797,6 +2797,9 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
+@@ -2857,6 +2857,9 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
                                     BlockDriverState *target,
                                     const char *replaces,
                                     enum MirrorSyncMode sync,
@@ -269,9 +240,9 @@ index 1d1f27cfff..ec45bbaa52 100644
 +                                   bool has_bitmap_mode,
 +                                   BitmapSyncMode bitmap_mode,
                                     BlockMirrorBackingMode backing_mode,
-                                    bool zero_target,
+                                    bool target_is_zero,
                                     bool has_speed, int64_t speed,
-@@ -2815,6 +2818,7 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
+@@ -2875,6 +2878,7 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
  {
      BlockDriverState *unfiltered_bs;
      int job_flags = JOB_DEFAULT;
@@ -279,8 +250,8 @@ index 1d1f27cfff..ec45bbaa52 100644
  
      GLOBAL_STATE_CODE();
      GRAPH_RDLOCK_GUARD_MAINLOOP();
-@@ -2869,6 +2873,29 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
-         sync = MIRROR_SYNC_MODE_FULL;
+@@ -2925,6 +2929,29 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
+         return;
      }
  
 +    if (bitmap_name) {
@@ -309,27 +280,25 @@ index 1d1f27cfff..ec45bbaa52 100644
      if (!replaces) {
          /* We want to mirror from @bs, but keep implicit filters on top */
          unfiltered_bs = bdrv_skip_implicit_filters(bs);
-@@ -2910,8 +2937,8 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
+@@ -2966,7 +2993,7 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
       * and will allow to check whether the node still exist at mirror completion
       */
-     mirror_start(job_id, bs, target,
--                 replaces, job_flags,
--                 speed, granularity, buf_size, sync, backing_mode, zero_target,
-+                 replaces, job_flags, speed, granularity, buf_size, sync,
-+                 bitmap, bitmap_mode, backing_mode, zero_target,
-                  on_source_error, on_target_error, unmap, filter_node_name,
-                  copy_mode, errp);
+     mirror_start(job_id, bs, target, replaces, job_flags,
+-                 speed, granularity, buf_size, sync, backing_mode,
++                 speed, granularity, buf_size, sync, bitmap, bitmap_mode, backing_mode,
+                  target_is_zero, on_source_error, on_target_error, unmap,
+                  filter_node_name, copy_mode, errp);
  }
-@@ -3055,6 +3082,8 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)
+@@ -3109,6 +3136,8 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)
  
      blockdev_mirror_common(arg->job_id, bs, target_bs,
                             arg->replaces, arg->sync,
 +                           arg->bitmap,
 +                           arg->has_bitmap_mode, arg->bitmap_mode,
-                            backing_mode, zero_target,
+                            backing_mode, target_is_zero,
                             arg->has_speed, arg->speed,
                             arg->has_granularity, arg->granularity,
-@@ -3074,6 +3103,8 @@ void qmp_blockdev_mirror(const char *job_id,
+@@ -3128,6 +3157,8 @@ void qmp_blockdev_mirror(const char *job_id,
                           const char *device, const char *target,
                           const char *replaces,
                           MirrorSyncMode sync,
@@ -338,18 +307,18 @@ index 1d1f27cfff..ec45bbaa52 100644
                           bool has_speed, int64_t speed,
                           bool has_granularity, uint32_t granularity,
                           bool has_buf_size, int64_t buf_size,
-@@ -3114,7 +3145,8 @@ void qmp_blockdev_mirror(const char *job_id,
+@@ -3166,7 +3197,8 @@ void qmp_blockdev_mirror(const char *job_id,
      }
  
      blockdev_mirror_common(job_id, bs, target_bs,
 -                           replaces, sync, backing_mode,
 +                           replaces, sync,
 +                           bitmap, has_bitmap_mode, bitmap_mode, backing_mode,
-                            zero_target, has_speed, speed,
+                            has_target_is_zero && target_is_zero,
+                            has_speed, speed,
                             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 eb2d92a226..f0c642b194 100644
+index e7c8f1a856..d5aa68caeb 100644
 --- a/include/block/block_int-global-state.h
 +++ b/include/block/block_int-global-state.h
 @@ -158,7 +158,9 @@ void mirror_start(const char *job_id, BlockDriverState *bs,
@@ -360,14 +329,14 @@ index eb2d92a226..f0c642b194 100644
 +                  MirrorSyncMode mode, BdrvDirtyBitmap *bitmap,
 +                  BitmapSyncMode bitmap_mode,
 +                  BlockMirrorBackingMode backing_mode,
-                   bool zero_target,
+                   bool target_is_zero,
                    BlockdevOnError on_source_error,
                    BlockdevOnError on_target_error,
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index b1937780e1..0e5f148d30 100644
+index dc6eb4ae23..7d281ab7ae 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
-@@ -2182,6 +2182,15 @@
+@@ -2205,6 +2205,15 @@
  #     destination (all the disk, only the sectors allocated in the
  #     topmost image, or only new I/O).
  #
@@ -383,7 +352,7 @@ index b1937780e1..0e5f148d30 100644
  # @granularity: granularity of the dirty bitmap, default is 64K if the
  #     image format doesn't have clusters, 4K if the clusters are
  #     smaller than that, else the cluster size.  Must be a power of 2
-@@ -2224,7 +2233,9 @@
+@@ -2246,7 +2255,9 @@
  { 'struct': 'DriveMirror',
    'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
              '*format': 'str', '*node-name': 'str', '*replaces': 'str',
@@ -394,7 +363,7 @@ index b1937780e1..0e5f148d30 100644
              '*speed': 'int', '*granularity': 'uint32',
              '*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
              '*on-target-error': 'BlockdevOnError',
-@@ -2503,6 +2514,15 @@
+@@ -2522,6 +2533,15 @@
  #     destination (all the disk, only the sectors allocated in the
  #     topmost image, or only new I/O).
  #
@@ -410,7 +379,7 @@ index b1937780e1..0e5f148d30 100644
  # @granularity: granularity of the dirty bitmap, default is 64K if the
  #     image format doesn't have clusters, 4K if the clusters are
  #     smaller than that, else the cluster size.  Must be a power of 2
-@@ -2551,7 +2571,8 @@
+@@ -2574,7 +2594,8 @@
  { 'command': 'blockdev-mirror',
    'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
              '*replaces': 'str',
@@ -421,7 +390,7 @@ index b1937780e1..0e5f148d30 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 2b358eaaa8..2a149fe021 100644
+index e26b3be593..396a53a757 100644
 --- a/tests/unit/test-block-iothread.c
 +++ b/tests/unit/test-block-iothread.c
 @@ -755,8 +755,8 @@ static void test_propagate_mirror(void)
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 f22b013..7771887 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,10 +24,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 18 insertions(+), 6 deletions(-)
 
 diff --git a/block/mirror.c b/block/mirror.c
-index fafca1360e..05e738bcce 100644
+index a184e91478..79b6f16d27 100644
 --- a/block/mirror.c
 +++ b/block/mirror.c
-@@ -694,8 +694,6 @@ static int mirror_exit_common(Job *job)
+@@ -734,8 +734,6 @@ static int mirror_exit_common(Job *job)
          bdrv_unfreeze_backing_chain(mirror_top_bs, target_bs);
      }
  
@@ -36,7 +36,7 @@ index fafca1360e..05e738bcce 100644
      /* Make sure that the source BDS doesn't go away during bdrv_replace_node,
       * before we can call bdrv_drained_end */
      bdrv_ref(src);
-@@ -805,6 +803,18 @@ static int mirror_exit_common(Job *job)
+@@ -851,6 +849,18 @@ static int mirror_exit_common(Job *job)
      bdrv_drained_end(target_bs);
      bdrv_unref(target_bs);
  
@@ -55,7 +55,7 @@ index fafca1360e..05e738bcce 100644
      bs_opaque->job = NULL;
  
      bdrv_drained_end(src);
-@@ -1763,10 +1773,6 @@ static BlockJob *mirror_start_job(
+@@ -1877,10 +1887,6 @@ static BlockJob *mirror_start_job(
                         " sync mode",
                         MirrorSyncMode_str(sync_mode));
              return NULL;
@@ -66,7 +66,7 @@ index fafca1360e..05e738bcce 100644
          }
      } else if (bitmap) {
          error_setg(errp,
-@@ -1783,6 +1789,12 @@ static BlockJob *mirror_start_job(
+@@ -1897,6 +1903,12 @@ static BlockJob *mirror_start_job(
              return NULL;
          }
          granularity = bdrv_dirty_bitmap_granularity(bitmap);
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 81c750b..c2d4d9e 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,10 +16,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 3 insertions(+)
 
 diff --git a/blockdev.c b/blockdev.c
-index ec45bbaa52..9fab7ec554 100644
+index 5855e9cac2..f132b4985b 100644
 --- a/blockdev.c
 +++ b/blockdev.c
-@@ -2894,6 +2894,9 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
+@@ -2950,6 +2950,9 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
          if (bdrv_dirty_bitmap_check(bitmap, BDRV_BITMAP_ALLOW_RO, errp)) {
              return;
          }
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 abece60..9468058 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,10 +16,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 4 insertions(+), 7 deletions(-)
 
 diff --git a/block/mirror.c b/block/mirror.c
-index 05e738bcce..2a2a227f3b 100644
+index 79b6f16d27..4741930d9b 100644
 --- a/block/mirror.c
 +++ b/block/mirror.c
-@@ -809,8 +809,8 @@ static int mirror_exit_common(Job *job)
+@@ -855,8 +855,8 @@ static int mirror_exit_common(Job *job)
               job->ret == 0 && ret == 0)) {
              /* Success; synchronize copy back to sync. */
              bdrv_clear_dirty_bitmap(s->sync_bitmap, NULL);
@@ -30,7 +30,7 @@ index 05e738bcce..2a2a227f3b 100644
          }
      }
      bdrv_release_dirty_bitmap(s->dirty_bitmap);
-@@ -1971,11 +1971,8 @@ static BlockJob *mirror_start_job(
+@@ -2085,11 +2085,8 @@ static BlockJob *mirror_start_job(
      }
  
      if (s->sync_mode == MIRROR_SYNC_MODE_BITMAP) {
@@ -43,4 +43,4 @@ index 05e738bcce..2a2a227f3b 100644
 +                                         NULL, true);
      }
  
-     bdrv_graph_wrlock();
+     bdrv_graph_wrlock_drained();
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 50746b6..7014368 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
@@ -12,7 +12,7 @@ uniform w.r.t. backup block jobs.
 
 Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
 Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
-[FE: rebase for 8.2.2]
+[FE: rebase for 10.1.0]
 Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 ---
  block/mirror.c             | 28 +++------------
@@ -21,10 +21,10 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
  3 files changed, 70 insertions(+), 59 deletions(-)
 
 diff --git a/block/mirror.c b/block/mirror.c
-index 2a2a227f3b..87c0856979 100644
+index 4741930d9b..17f19ca015 100644
 --- a/block/mirror.c
 +++ b/block/mirror.c
-@@ -1763,31 +1763,13 @@ static BlockJob *mirror_start_job(
+@@ -1877,31 +1877,13 @@ static BlockJob *mirror_start_job(
  
      GLOBAL_STATE_CODE();
  
@@ -62,11 +62,11 @@ index 2a2a227f3b..87c0856979 100644
  
          if (bitmap_mode != BITMAP_SYNC_MODE_NEVER) {
 diff --git a/blockdev.c b/blockdev.c
-index 9fab7ec554..158ac9314b 100644
+index f132b4985b..782cc5dd75 100644
 --- a/blockdev.c
 +++ b/blockdev.c
-@@ -2873,7 +2873,36 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
-         sync = MIRROR_SYNC_MODE_FULL;
+@@ -2929,7 +2929,36 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
+         return;
      }
  
 +    if ((sync == MIRROR_SYNC_MODE_BITMAP) ||
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 de0a350..1029ef5 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
@@ -104,7 +104,7 @@ index c5a5d30877..07775784d4 100644
   * Is @mon is using readline?
   * Note: not all HMP monitors use readline, e.g., gdbserver has a
 diff --git a/monitor/qmp.c b/monitor/qmp.c
-index 2f46cf9e49..f093e256e9 100644
+index cb99a12d94..170fef4531 100644
 --- a/monitor/qmp.c
 +++ b/monitor/qmp.c
 @@ -165,6 +165,8 @@ static void monitor_qmp_dispatch(MonitorQMP *mon, QObject *req)
@@ -135,7 +135,7 @@ index 2f46cf9e49..f093e256e9 100644
      qobject_unref(rsp);
  }
  
-@@ -461,6 +473,7 @@ static void monitor_qmp_event(void *opaque, QEMUChrEvent event)
+@@ -462,6 +474,7 @@ static void monitor_qmp_event(void *opaque, QEMUChrEvent event)
  
      switch (event) {
      case CHR_EVENT_OPENED:
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 60e6981..2538947 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@proxmox.com>
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/block/file-posix.c b/block/file-posix.c
-index 56d1972d15..cfa0b832ba 100644
+index 8c738674ce..6a9433c836 100644
 --- a/block/file-posix.c
 +++ b/block/file-posix.c
-@@ -565,7 +565,7 @@ static QemuOptsList raw_runtime_opts = {
+@@ -588,7 +588,7 @@ static QemuOptsList raw_runtime_opts = {
          {
              .name = "locking",
              .type = QEMU_OPT_STRING,
@@ -26,7 +26,7 @@ index 56d1972d15..cfa0b832ba 100644
          },
          {
              .name = "pr-manager",
-@@ -665,7 +665,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
+@@ -688,7 +688,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/0002-PVE-Config-Adjust-network-script-path-to-etc-kvm.patch b/debian/patches/pve/0002-PVE-Config-Adjust-network-script-path-to-etc-kvm.patch
index 426c6e6..9582fc1 100644
--- a/debian/patches/pve/0002-PVE-Config-Adjust-network-script-path-to-etc-kvm.patch
+++ b/debian/patches/pve/0002-PVE-Config-Adjust-network-script-path-to-etc-kvm.patch
@@ -9,10 +9,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/include/net/net.h b/include/net/net.h
-index cdd5b109b0..653a37e9d1 100644
+index 84ee18e0f9..d42d935db5 100644
 --- a/include/net/net.h
 +++ b/include/net/net.h
-@@ -305,8 +305,8 @@ void netdev_add(QemuOpts *opts, Error **errp);
+@@ -311,8 +311,8 @@ void netdev_add(QemuOpts *opts, Error **errp);
  
  int net_hub_id_for_client(NetClientState *nc, int *id);
  
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 c960164..65d18b9 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@proxmox.com>
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/target/i386/cpu.h b/target/i386/cpu.h
-index 76f24446a5..2a47d79b49 100644
+index f977fc49a7..d96c57c182 100644
 --- a/target/i386/cpu.h
 +++ b/target/i386/cpu.h
-@@ -2556,9 +2556,9 @@ uint64_t cpu_get_tsc(CPUX86State *env);
+@@ -2613,9 +2613,9 @@ uint64_t cpu_get_tsc(CPUX86State *env);
  #define CPU_RESOLVING_TYPE TYPE_X86_CPU
  
  #ifdef TARGET_X86_64
@@ -24,4 +24,4 @@ index 76f24446a5..2a47d79b49 100644
 +#define TARGET_DEFAULT_CPU_TYPE X86_CPU_TYPE_NAME("kvm32")
  #endif
  
- #define cpu_list x86_cpu_list
+ /* MMU modes definitions */
diff --git a/debian/patches/pve/0004-PVE-Config-ui-spice-default-to-pve-certificates.patch b/debian/patches/pve/0004-PVE-Config-ui-spice-default-to-pve-certificates.patch
index 558f66e..61719e7 100644
--- a/debian/patches/pve/0004-PVE-Config-ui-spice-default-to-pve-certificates.patch
+++ b/debian/patches/pve/0004-PVE-Config-ui-spice-default-to-pve-certificates.patch
@@ -9,10 +9,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 9 insertions(+), 6 deletions(-)
 
 diff --git a/ui/spice-core.c b/ui/spice-core.c
-index 0326c63bec..d523d00200 100644
+index 5992f9daec..cd1ec9c082 100644
 --- a/ui/spice-core.c
 +++ b/ui/spice-core.c
-@@ -690,32 +690,35 @@ static void qemu_spice_init(void)
+@@ -698,32 +698,35 @@ static void qemu_spice_init(void)
  
      if (tls_port) {
          x509_dir = qemu_opt_get(opts, "x509-dir");
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 bbc9e36..aaf2050 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@proxmox.com>
  1 file changed, 11 insertions(+), 4 deletions(-)
 
 diff --git a/block/gluster.c b/block/gluster.c
-index c6d25ae733..ccca125c3a 100644
+index 89abd40f31..d3f2e56229 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 84e7a57..573d26a 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,10 +18,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 2 insertions(+)
 
 diff --git a/block/rbd.c b/block/rbd.c
-index af984fb7db..bf143fac00 100644
+index 3611dc81cf..d114119671 100644
 --- a/block/rbd.c
 +++ b/block/rbd.c
-@@ -963,6 +963,8 @@ static int qemu_rbd_connect(rados_t *cluster, rados_ioctx_t *io_ctx,
+@@ -1017,6 +1017,8 @@ static int qemu_rbd_connect(rados_t *cluster, rados_ioctx_t *io_ctx,
          rados_conf_set(*cluster, "rbd_cache", "false");
      }
  
diff --git a/debian/patches/pve/0007-PVE-Up-glusterfs-allow-partial-reads.patch b/debian/patches/pve/0007-PVE-Up-glusterfs-allow-partial-reads.patch
index 92c539d..dd3b92f 100644
--- a/debian/patches/pve/0007-PVE-Up-glusterfs-allow-partial-reads.patch
+++ b/debian/patches/pve/0007-PVE-Up-glusterfs-allow-partial-reads.patch
@@ -16,7 +16,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 9 insertions(+), 1 deletion(-)
 
 diff --git a/block/gluster.c b/block/gluster.c
-index ccca125c3a..301a653ea7 100644
+index d3f2e56229..de0fb4cf68 100644
 --- a/block/gluster.c
 +++ b/block/gluster.c
 @@ -57,6 +57,7 @@ typedef struct GlusterAIOCB {
@@ -39,7 +39,7 @@ index ccca125c3a..301a653ea7 100644
      }
  
      aio_co_schedule(acb->aio_context, acb->coroutine);
-@@ -1018,6 +1021,7 @@ static coroutine_fn int qemu_gluster_co_pwrite_zeroes(BlockDriverState *bs,
+@@ -1014,6 +1017,7 @@ static coroutine_fn int qemu_gluster_co_pwrite_zeroes(BlockDriverState *bs,
      acb.ret = 0;
      acb.coroutine = qemu_coroutine_self();
      acb.aio_context = bdrv_get_aio_context(bs);
@@ -47,7 +47,7 @@ index ccca125c3a..301a653ea7 100644
  
      ret = glfs_zerofill_async(s->fd, offset, bytes, gluster_finish_aiocb, &acb);
      if (ret < 0) {
-@@ -1198,9 +1202,11 @@ static coroutine_fn int qemu_gluster_co_rw(BlockDriverState *bs,
+@@ -1194,9 +1198,11 @@ static coroutine_fn int qemu_gluster_co_rw(BlockDriverState *bs,
      acb.aio_context = bdrv_get_aio_context(bs);
  
      if (write) {
@@ -59,7 +59,7 @@ index ccca125c3a..301a653ea7 100644
          ret = glfs_preadv_async(s->fd, qiov->iov, qiov->niov, offset, 0,
                                  gluster_finish_aiocb, &acb);
      }
-@@ -1263,6 +1269,7 @@ static coroutine_fn int qemu_gluster_co_flush_to_disk(BlockDriverState *bs)
+@@ -1259,6 +1265,7 @@ static coroutine_fn int qemu_gluster_co_flush_to_disk(BlockDriverState *bs)
      acb.ret = 0;
      acb.coroutine = qemu_coroutine_self();
      acb.aio_context = bdrv_get_aio_context(bs);
@@ -67,7 +67,7 @@ index ccca125c3a..301a653ea7 100644
  
      ret = glfs_fsync_async(s->fd, gluster_finish_aiocb, &acb);
      if (ret < 0) {
-@@ -1311,6 +1318,7 @@ static coroutine_fn int qemu_gluster_co_pdiscard(BlockDriverState *bs,
+@@ -1307,6 +1314,7 @@ static coroutine_fn int qemu_gluster_co_pdiscard(BlockDriverState *bs,
      acb.ret = 0;
      acb.coroutine = qemu_coroutine_self();
      acb.aio_context = bdrv_get_aio_context(bs);
diff --git a/debian/patches/pve/0008-PVE-Up-qemu-img-return-success-on-info-without-snaps.patch b/debian/patches/pve/0008-PVE-Up-qemu-img-return-success-on-info-without-snaps.patch
index f3ab731..7710b06 100644
--- a/debian/patches/pve/0008-PVE-Up-qemu-img-return-success-on-info-without-snaps.patch
+++ b/debian/patches/pve/0008-PVE-Up-qemu-img-return-success-on-info-without-snaps.patch
@@ -9,10 +9,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/qemu-img.c b/qemu-img.c
-index 2044c22a4c..4c8b5412c6 100644
+index 7a162fdc08..0bed551960 100644
 --- a/qemu-img.c
 +++ b/qemu-img.c
-@@ -3075,7 +3075,8 @@ static int img_info(int argc, char **argv)
+@@ -3158,7 +3158,8 @@ static int img_info(const img_cmd_t *ccmd, int argc, char **argv)
      list = collect_image_info_list(image_opts, filename, fmt, chain,
                                     force_share);
      if (!list) {
diff --git a/debian/patches/pve/0009-PVE-Up-qemu-img-dd-add-osize-and-read-from-to-stdin-.patch b/debian/patches/pve/0009-PVE-Up-qemu-img-dd-add-osize-and-read-from-to-stdin-.patch
index 0e8c047..c9e1f34 100644
--- a/debian/patches/pve/0009-PVE-Up-qemu-img-dd-add-osize-and-read-from-to-stdin-.patch
+++ b/debian/patches/pve/0009-PVE-Up-qemu-img-dd-add-osize-and-read-from-to-stdin-.patch
@@ -31,6 +31,7 @@ override the output file's size.
 
 Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
 Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
+[FE: rebase for 10.1.0]
 Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 ---
  qemu-img-cmds.hx |   4 +-
@@ -38,7 +39,7 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
  2 files changed, 133 insertions(+), 73 deletions(-)
 
 diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
-index c9dd70a892..048788b23d 100644
+index 2c5a8a28f9..a6de1434a3 100644
 --- a/qemu-img-cmds.hx
 +++ b/qemu-img-cmds.hx
 @@ -60,9 +60,9 @@ SRST
@@ -54,10 +55,10 @@ index c9dd70a892..048788b23d 100644
  
  DEF("info", img_info,
 diff --git a/qemu-img.c b/qemu-img.c
-index 4c8b5412c6..d5fa89a204 100644
+index 0bed551960..0a0ca0cec7 100644
 --- a/qemu-img.c
 +++ b/qemu-img.c
-@@ -4997,10 +4997,12 @@ static int img_bitmap(int argc, char **argv)
+@@ -5253,10 +5253,12 @@ static int img_bitmap(const img_cmd_t *ccmd, int argc, char **argv)
  #define C_IF      04
  #define C_OF      010
  #define C_SKIP    020
@@ -70,7 +71,7 @@ index 4c8b5412c6..d5fa89a204 100644
  };
  
  struct DdIo {
-@@ -5076,6 +5078,19 @@ static int img_dd_skip(const char *arg,
+@@ -5332,6 +5334,19 @@ static int img_dd_skip(const char *arg,
      return 0;
  }
  
@@ -78,7 +79,7 @@ index 4c8b5412c6..d5fa89a204 100644
 +                        struct DdIo *in, struct DdIo *out,
 +                        struct DdInfo *dd)
 +{
-+    dd->osize = cvtnum("size", arg);
++    dd->osize = cvtnum("osize", arg, true);
 +
 +    if (dd->osize < 0) {
 +        return 1;
@@ -87,10 +88,10 @@ index 4c8b5412c6..d5fa89a204 100644
 +    return 0;
 +}
 +
- static int img_dd(int argc, char **argv)
+ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
  {
      int ret = 0;
-@@ -5116,6 +5131,7 @@ static int img_dd(int argc, char **argv)
+@@ -5372,6 +5387,7 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
          { "if", img_dd_if, C_IF },
          { "of", img_dd_of, C_OF },
          { "skip", img_dd_skip, C_SKIP },
@@ -98,7 +99,7 @@ index 4c8b5412c6..d5fa89a204 100644
          { NULL, NULL, 0 }
      };
      const struct option long_options[] = {
-@@ -5191,91 +5207,112 @@ static int img_dd(int argc, char **argv)
+@@ -5469,91 +5485,112 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
          arg = NULL;
      }
  
@@ -275,7 +276,7 @@ index 4c8b5412c6..d5fa89a204 100644
      }
  
      if (dd.flags & C_SKIP && (in.offset > INT64_MAX / in.bsz ||
-@@ -5292,20 +5329,43 @@ static int img_dd(int argc, char **argv)
+@@ -5570,20 +5607,43 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
      in.buf = g_new(uint8_t, in.bsz);
  
      for (out_pos = 0; in_pos < size; ) {
diff --git a/debian/patches/pve/0010-PVE-Up-qemu-img-dd-add-isize-parameter.patch b/debian/patches/pve/0010-PVE-Up-qemu-img-dd-add-isize-parameter.patch
index af2c520..fbf92a1 100644
--- a/debian/patches/pve/0010-PVE-Up-qemu-img-dd-add-isize-parameter.patch
+++ b/debian/patches/pve/0010-PVE-Up-qemu-img-dd-add-isize-parameter.patch
@@ -10,16 +10,17 @@ an expected end of input.
 
 Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
 Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
+[FE: rebase for 10.1.0]
 Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 ---
  qemu-img.c | 28 +++++++++++++++++++++++++---
  1 file changed, 25 insertions(+), 3 deletions(-)
 
 diff --git a/qemu-img.c b/qemu-img.c
-index d5fa89a204..d458e85af2 100644
+index 0a0ca0cec7..89ef74ae07 100644
 --- a/qemu-img.c
 +++ b/qemu-img.c
-@@ -4998,11 +4998,13 @@ static int img_bitmap(int argc, char **argv)
+@@ -5254,11 +5254,13 @@ static int img_bitmap(const img_cmd_t *ccmd, int argc, char **argv)
  #define C_OF      010
  #define C_SKIP    020
  #define C_OSIZE   040
@@ -33,7 +34,7 @@ index d5fa89a204..d458e85af2 100644
  };
  
  struct DdIo {
-@@ -5091,6 +5093,19 @@ static int img_dd_osize(const char *arg,
+@@ -5347,6 +5349,19 @@ static int img_dd_osize(const char *arg,
      return 0;
  }
  
@@ -41,7 +42,7 @@ index d5fa89a204..d458e85af2 100644
 +                        struct DdIo *in, struct DdIo *out,
 +                        struct DdInfo *dd)
 +{
-+    dd->isize = cvtnum("size", arg);
++    dd->isize = cvtnum("isize", arg, true);
 +
 +    if (dd->isize < 0) {
 +        return 1;
@@ -50,10 +51,10 @@ index d5fa89a204..d458e85af2 100644
 +    return 0;
 +}
 +
- static int img_dd(int argc, char **argv)
+ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
  {
      int ret = 0;
-@@ -5105,12 +5120,14 @@ static int img_dd(int argc, char **argv)
+@@ -5361,12 +5376,14 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
      int c, i;
      const char *out_fmt = "raw";
      const char *fmt = NULL;
@@ -69,7 +70,7 @@ index d5fa89a204..d458e85af2 100644
      };
      struct DdIo in = {
          .bsz = 512, /* Block size is by default 512 bytes */
-@@ -5132,6 +5149,7 @@ static int img_dd(int argc, char **argv)
+@@ -5388,6 +5405,7 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
          { "of", img_dd_of, C_OF },
          { "skip", img_dd_skip, C_SKIP },
          { "osize", img_dd_osize, C_OSIZE },
@@ -77,7 +78,7 @@ index d5fa89a204..d458e85af2 100644
          { NULL, NULL, 0 }
      };
      const struct option long_options[] = {
-@@ -5328,9 +5346,10 @@ static int img_dd(int argc, char **argv)
+@@ -5606,9 +5624,10 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
  
      in.buf = g_new(uint8_t, in.bsz);
  
@@ -90,7 +91,7 @@ index d5fa89a204..d458e85af2 100644
          if (blk1) {
              in_ret = blk_pread(blk1, in_pos, bytes, in.buf, 0);
              if (in_ret == 0) {
-@@ -5339,6 +5358,9 @@ static int img_dd(int argc, char **argv)
+@@ -5617,6 +5636,9 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
          } else {
              in_ret = read(STDIN_FILENO, in.buf, bytes);
              if (in_ret == 0) {
diff --git a/debian/patches/pve/0011-PVE-Up-qemu-img-dd-add-n-skip_create.patch b/debian/patches/pve/0011-PVE-Up-qemu-img-dd-add-n-skip_create.patch
index cf94190..ee936c5 100644
--- a/debian/patches/pve/0011-PVE-Up-qemu-img-dd-add-n-skip_create.patch
+++ b/debian/patches/pve/0011-PVE-Up-qemu-img-dd-add-n-skip_create.patch
@@ -4,7 +4,8 @@ Date: Mon, 6 Apr 2020 12:16:42 +0200
 Subject: [PATCH] PVE: [Up] qemu-img dd: add -n skip_create
 
 Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
-[FE: fix getopt-string + add documentation]
+[FE: fix getopt-string + add documentation
+     rebase for 10.1.0]
 Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 ---
  docs/tools/qemu-img.rst | 11 ++++++++++-
@@ -13,7 +14,7 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
  3 files changed, 26 insertions(+), 12 deletions(-)
 
 diff --git a/docs/tools/qemu-img.rst b/docs/tools/qemu-img.rst
-index 3653adb963..d83e8fb3c0 100644
+index 5e7b85079d..6249e01da9 100644
 --- a/docs/tools/qemu-img.rst
 +++ b/docs/tools/qemu-img.rst
 @@ -212,6 +212,10 @@ Parameters to convert subcommand:
@@ -49,7 +50,7 @@ index 3653adb963..d83e8fb3c0 100644
  
    Give information about the disk image *FILENAME*. Use it in
 diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
-index 048788b23d..0b29a67a06 100644
+index a6de1434a3..d584624f8e 100644
 --- a/qemu-img-cmds.hx
 +++ b/qemu-img-cmds.hx
 @@ -60,9 +60,9 @@ SRST
@@ -65,10 +66,10 @@ index 048788b23d..0b29a67a06 100644
  
  DEF("info", img_info,
 diff --git a/qemu-img.c b/qemu-img.c
-index d458e85af2..dc13efba8b 100644
+index 89ef74ae07..6e92a70254 100644
 --- a/qemu-img.c
 +++ b/qemu-img.c
-@@ -5122,7 +5122,7 @@ static int img_dd(int argc, char **argv)
+@@ -5378,7 +5378,7 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
      const char *fmt = NULL;
      int64_t size = 0, readsize = 0;
      int64_t out_pos, in_pos;
@@ -77,18 +78,18 @@ index d458e85af2..dc13efba8b 100644
      struct DdInfo dd = {
          .flags = 0,
          .count = 0,
-@@ -5160,7 +5160,7 @@ static int img_dd(int argc, char **argv)
+@@ -5418,7 +5418,7 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
          { 0, 0, 0, 0 }
      };
  
--    while ((c = getopt_long(argc, argv, ":hf:O:U", long_options, NULL))) {
-+    while ((c = getopt_long(argc, argv, ":hf:O:Un", long_options, NULL))) {
+-    while ((c = getopt_long(argc, argv, "hf:O:U", long_options, NULL))) {
++    while ((c = getopt_long(argc, argv, "hf:O:Un", long_options, NULL))) {
          if (c == EOF) {
              break;
          }
-@@ -5180,6 +5180,9 @@ static int img_dd(int argc, char **argv)
-         case 'h':
-             help();
+@@ -5459,6 +5459,9 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
+         case 'O':
+             out_fmt = optarg;
              break;
 +        case 'n':
 +            skip_create = true;
@@ -96,7 +97,7 @@ index d458e85af2..dc13efba8b 100644
          case 'U':
              force_share = true;
              break;
-@@ -5310,13 +5313,15 @@ static int img_dd(int argc, char **argv)
+@@ -5588,13 +5591,15 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
                                  size - in.bsz * in.offset, &error_abort);
          }
  
diff --git a/debian/patches/pve/0012-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch b/debian/patches/pve/0012-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
index 493c61e..edea617 100644
--- a/debian/patches/pve/0012-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
+++ b/debian/patches/pve/0012-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
@@ -5,6 +5,8 @@ Subject: [PATCH] qemu-img dd: add -l option for loading a snapshot
 
 Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
+[FE: rebase for 10.1.0]
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 ---
  docs/tools/qemu-img.rst |  6 +++---
  qemu-img-cmds.hx        |  4 ++--
@@ -12,7 +14,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  3 files changed, 36 insertions(+), 7 deletions(-)
 
 diff --git a/docs/tools/qemu-img.rst b/docs/tools/qemu-img.rst
-index d83e8fb3c0..61c6b21859 100644
+index 6249e01da9..0ea21e061f 100644
 --- a/docs/tools/qemu-img.rst
 +++ b/docs/tools/qemu-img.rst
 @@ -496,10 +496,10 @@ Command description:
@@ -30,7 +32,7 @@ index d83e8fb3c0..61c6b21859 100644
    The data is by default read and written using blocks of 512 bytes but can be
    modified by specifying *BLOCK_SIZE*. If count=\ *BLOCKS* is specified
 diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
-index 0b29a67a06..758f397232 100644
+index d584624f8e..be30905374 100644
 --- a/qemu-img-cmds.hx
 +++ b/qemu-img-cmds.hx
 @@ -60,9 +60,9 @@ SRST
@@ -46,10 +48,10 @@ index 0b29a67a06..758f397232 100644
  
  DEF("info", img_info,
 diff --git a/qemu-img.c b/qemu-img.c
-index dc13efba8b..02f2e0aa45 100644
+index 6e92a70254..e38317a445 100644
 --- a/qemu-img.c
 +++ b/qemu-img.c
-@@ -5114,6 +5114,7 @@ static int img_dd(int argc, char **argv)
+@@ -5370,6 +5370,7 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
      BlockDriver *drv = NULL, *proto_drv = NULL;
      BlockBackend *blk1 = NULL, *blk2 = NULL;
      QemuOpts *opts = NULL;
@@ -57,7 +59,7 @@ index dc13efba8b..02f2e0aa45 100644
      QemuOptsList *create_opts = NULL;
      Error *local_err = NULL;
      bool image_opts = false;
-@@ -5123,6 +5124,7 @@ static int img_dd(int argc, char **argv)
+@@ -5379,6 +5380,7 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
      int64_t size = 0, readsize = 0;
      int64_t out_pos, in_pos;
      bool force_share = false, skip_create = false;
@@ -65,16 +67,16 @@ index dc13efba8b..02f2e0aa45 100644
      struct DdInfo dd = {
          .flags = 0,
          .count = 0,
-@@ -5160,7 +5162,7 @@ static int img_dd(int argc, char **argv)
+@@ -5418,7 +5420,7 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
          { 0, 0, 0, 0 }
      };
  
--    while ((c = getopt_long(argc, argv, ":hf:O:Un", long_options, NULL))) {
-+    while ((c = getopt_long(argc, argv, ":hf:O:l:Un", long_options, NULL))) {
+-    while ((c = getopt_long(argc, argv, "hf:O:Un", long_options, NULL))) {
++    while ((c = getopt_long(argc, argv, "hf:O:l:Un", long_options, NULL))) {
          if (c == EOF) {
              break;
          }
-@@ -5183,6 +5185,19 @@ static int img_dd(int argc, char **argv)
+@@ -5462,6 +5464,19 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
          case 'n':
              skip_create = true;
              break;
@@ -94,7 +96,7 @@ index dc13efba8b..02f2e0aa45 100644
          case 'U':
              force_share = true;
              break;
-@@ -5242,11 +5257,24 @@ static int img_dd(int argc, char **argv)
+@@ -5520,11 +5535,24 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
      if (dd.flags & C_IF) {
          blk1 = img_open(image_opts, in.filename, fmt, 0, false, false,
                          force_share);
@@ -120,7 +122,7 @@ index dc13efba8b..02f2e0aa45 100644
      }
  
      if (dd.flags & C_OSIZE) {
-@@ -5401,6 +5429,7 @@ static int img_dd(int argc, char **argv)
+@@ -5679,6 +5707,7 @@ static int img_dd(const img_cmd_t *ccmd, int argc, char **argv)
  out:
      g_free(arg);
      qemu_opts_del(opts);
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 ec4b348..d440dbb 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
@@ -18,10 +18,10 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
  4 files changed, 82 insertions(+), 4 deletions(-)
 
 diff --git a/hw/core/machine-hmp-cmds.c b/hw/core/machine-hmp-cmds.c
-index c6325cdcaa..7f817d622d 100644
+index 3a612e2232..036d87cc90 100644
 --- a/hw/core/machine-hmp-cmds.c
 +++ b/hw/core/machine-hmp-cmds.c
-@@ -179,7 +179,35 @@ void hmp_info_balloon(Monitor *mon, const QDict *qdict)
+@@ -182,7 +182,35 @@ void hmp_info_balloon(Monitor *mon, const QDict *qdict)
          return;
      }
  
@@ -59,7 +59,7 @@ index c6325cdcaa..7f817d622d 100644
      qapi_free_BalloonInfo(info);
  }
 diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
-index 2eb5a14fa2..aa2fd6c32f 100644
+index db787d00b3..26ebf3a5ce 100644
 --- a/hw/virtio/virtio-balloon.c
 +++ b/hw/virtio/virtio-balloon.c
 @@ -795,8 +795,37 @@ static uint64_t virtio_balloon_get_features(VirtIODevice *vdev, uint64_t f,
@@ -103,11 +103,11 @@ index 2eb5a14fa2..aa2fd6c32f 100644
  
  static void virtio_balloon_to_target(void *opaque, ram_addr_t target)
 diff --git a/qapi/machine.json b/qapi/machine.json
-index a6b8795b09..9f7ed0eaa0 100644
+index 038eab281c..5f172ece18 100644
 --- a/qapi/machine.json
 +++ b/qapi/machine.json
-@@ -1163,9 +1163,29 @@
- # @actual: the logical size of the VM in bytes Formula used:
+@@ -1125,9 +1125,29 @@
+ # @actual: the logical size of the VM in bytes.  Formula used:
  #     logical_vm_size = vm_ram_size - balloon_size
  #
 +# @last_update: time when stats got updated from guest
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 3fa6209..a131d2b 100644
--- a/debian/patches/pve/0014-PVE-qapi-modify-query-machines.patch
+++ b/debian/patches/pve/0014-PVE-qapi-modify-query-machines.patch
@@ -13,10 +13,10 @@ Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
  2 files changed, 9 insertions(+), 1 deletion(-)
 
 diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c
-index 1bc21b84a4..93fb4bc24a 100644
+index 6aca1a626e..934cdb886d 100644
 --- a/hw/core/machine-qmp-cmds.c
 +++ b/hw/core/machine-qmp-cmds.c
-@@ -91,6 +91,12 @@ MachineInfoList *qmp_query_machines(bool has_compat_props, bool compat_props,
+@@ -94,6 +94,12 @@ MachineInfoList *qmp_query_machines(bool has_compat_props, bool compat_props,
          info->numa_mem_supported = mc->numa_mem_supported;
          info->deprecated = !!mc->deprecation_reason;
          info->acpi = !!object_class_property_find(OBJECT_CLASS(mc), "acpi");
@@ -30,10 +30,10 @@ index 1bc21b84a4..93fb4bc24a 100644
              info->default_cpu_type = g_strdup(default_cpu_type);
          }
 diff --git a/qapi/machine.json b/qapi/machine.json
-index 9f7ed0eaa0..16366b774a 100644
+index 5f172ece18..47ac68a3b5 100644
 --- a/qapi/machine.json
 +++ b/qapi/machine.json
-@@ -167,6 +167,8 @@
+@@ -170,6 +170,8 @@
  #
  # @is-default: whether the machine is default
  #
@@ -42,7 +42,7 @@ index 9f7ed0eaa0..16366b774a 100644
  # @cpu-max: maximum number of CPUs supported by the machine type
  #     (since 1.5)
  #
-@@ -199,7 +201,7 @@
+@@ -202,7 +204,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 cf85582..9ebf74c 100644
--- a/debian/patches/pve/0015-PVE-qapi-modify-spice-query.patch
+++ b/debian/patches/pve/0015-PVE-qapi-modify-spice-query.patch
@@ -14,12 +14,12 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
  2 files changed, 7 insertions(+)
 
 diff --git a/qapi/ui.json b/qapi/ui.json
-index c536d4e524..c2df48959b 100644
+index 1b2f4a4769..c9982e1bcc 100644
 --- a/qapi/ui.json
 +++ b/qapi/ui.json
-@@ -312,11 +312,14 @@
+@@ -315,11 +315,14 @@
  #
- # @channels: a list of @SpiceChannel for each active spice channel
+ # @channels: a list of `SpiceChannel` for each active spice channel
  #
 +# @ticket: The last ticket set with set_password
 +#
@@ -33,10 +33,10 @@ index c536d4e524..c2df48959b 100644
    'if': 'CONFIG_SPICE' }
  
 diff --git a/ui/spice-core.c b/ui/spice-core.c
-index d523d00200..c76c224706 100644
+index cd1ec9c082..4064053778 100644
 --- a/ui/spice-core.c
 +++ b/ui/spice-core.c
-@@ -548,6 +548,10 @@ static SpiceInfo *qmp_query_spice_real(Error **errp)
+@@ -556,6 +556,10 @@ static SpiceInfo *qmp_query_spice_real(Error **errp)
      micro = SPICE_SERVER_VERSION & 0xff;
      info->compiled_version = g_strdup_printf("%d.%d.%d", major, minor, micro);
  
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
index 0e69c98..4e84027 100644
--- 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
@@ -25,7 +25,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
 
 diff --git a/migration/channel-savevm-async.c b/migration/channel-savevm-async.c
 new file mode 100644
-index 0000000000..e57ab2ae40
+index 0000000000..d851e74567
 --- /dev/null
 +++ b/migration/channel-savevm-async.c
 @@ -0,0 +1,184 @@
@@ -187,7 +187,7 @@ index 0000000000..e57ab2ae40
 +
 +static void
 +qio_channel_savevm_async_class_init(ObjectClass *klass,
-+                             void *class_data G_GNUC_UNUSED)
++                                    const void *class_data G_GNUC_UNUSED)
 +{
 +    QIOChannelClass *ioc_klass = QIO_CHANNEL_CLASS(klass);
 +
@@ -271,7 +271,7 @@ index 0000000000..17ae2cb261
 +
 +#endif /* QIO_CHANNEL_SAVEVM_ASYNC_H */
 diff --git a/migration/meson.build b/migration/meson.build
-index 9aa48b290e..cf66c78681 100644
+index 276da3be5a..1d32185fff 100644
 --- a/migration/meson.build
 +++ b/migration/meson.build
 @@ -14,6 +14,7 @@ system_ss.add(files(
diff --git a/debian/patches/pve/0017-PVE-add-savevm-async-for-background-state-snapshots.patch b/debian/patches/pve/0017-PVE-add-savevm-async-for-background-state-snapshots.patch
index 622191d..9401690 100644
--- a/debian/patches/pve/0017-PVE-add-savevm-async-for-background-state-snapshots.patch
+++ b/debian/patches/pve/0017-PVE-add-savevm-async-for-background-state-snapshots.patch
@@ -33,7 +33,8 @@ Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
      force raw format when loading state as suggested by Friedrich Weber
      improve setting state in savevm-end handler
      improve runstate preservation
-     use dedicated iothread for state file to avoid deadlock, bug #6262]
+     use dedicated iothread for state file to avoid deadlock, bug #6262
+     rebase for 10.1.0]
 Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 ---
  hmp-commands-info.hx         |  13 +
@@ -51,10 +52,10 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
  create mode 100644 migration/savevm-async.c
 
 diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
-index c59cd6637b..d1a7b99add 100644
+index 6142f60e7b..3e15458335 100644
 --- a/hmp-commands-info.hx
 +++ b/hmp-commands-info.hx
-@@ -512,6 +512,19 @@ SRST
+@@ -510,6 +510,19 @@ SRST
      Show current migration parameters.
  ERST
  
@@ -75,10 +76,10 @@ index c59cd6637b..d1a7b99add 100644
          .name       = "balloon",
          .args_type  = "",
 diff --git a/hmp-commands.hx b/hmp-commands.hx
-index 06746f0afc..0c7c6f2c16 100644
+index d0e4f35a30..0d9241db9e 100644
 --- a/hmp-commands.hx
 +++ b/hmp-commands.hx
-@@ -1859,3 +1859,20 @@ SRST
+@@ -1862,3 +1862,20 @@ SRST
    List event channels in the guest
  ERST
  #endif
@@ -132,7 +133,7 @@ index ae116d9804..2596cc2426 100644
  void coroutine_fn 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 cf66c78681..46e92249a1 100644
+index 1d32185fff..409b748980 100644
 --- a/migration/meson.build
 +++ b/migration/meson.build
 @@ -33,6 +33,7 @@ system_ss.add(files(
@@ -731,7 +732,7 @@ index 0000000000..56e0fa6c69
 +    return ret;
 +}
 diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
-index 7ded3378cf..bade2a4b92 100644
+index 74a0f56566..1e66bff724 100644
 --- a/monitor/hmp-cmds.c
 +++ b/monitor/hmp-cmds.c
 @@ -24,6 +24,7 @@
@@ -784,10 +785,10 @@ index 7ded3378cf..bade2a4b92 100644
 +    }
 +}
 diff --git a/qapi/migration.json b/qapi/migration.json
-index 8b9c53595c..ff3479da65 100644
+index 2387c21e9c..c1d962b4ed 100644
 --- a/qapi/migration.json
 +++ b/qapi/migration.json
-@@ -279,6 +279,40 @@
+@@ -319,6 +319,40 @@
             '*dirty-limit-throttle-time-per-round': 'uint64',
             '*dirty-limit-ring-full-time': 'uint64'} }
  
@@ -829,10 +830,10 @@ index 8b9c53595c..ff3479da65 100644
  # @query-migrate:
  #
 diff --git a/qapi/misc.json b/qapi/misc.json
-index 559b66f201..7959e89c1e 100644
+index 28c641fe2f..51d907b2b8 100644
 --- a/qapi/misc.json
 +++ b/qapi/misc.json
-@@ -454,6 +454,24 @@
+@@ -449,6 +449,24 @@
  ##
  { 'command': 'query-fdsets', 'returns': ['FdsetInfo'] }
  
@@ -858,10 +859,10 @@ index 559b66f201..7959e89c1e 100644
  # @CommandLineParameterType:
  #
 diff --git a/qemu-options.hx b/qemu-options.hx
-index dc694a99a3..defee0c06a 100644
+index ab23f14d21..3ec9e52d31 100644
 --- a/qemu-options.hx
 +++ b/qemu-options.hx
-@@ -4862,6 +4862,18 @@ SRST
+@@ -5048,6 +5048,18 @@ SRST
      Start right away with a saved state (``loadvm`` in monitor)
  ERST
  
@@ -877,14 +878,14 @@ index dc694a99a3..defee0c06a 100644
 +  for "Device URL Syntax" for more information.
 +ERST
 +
- #ifndef _WIN32
+ #if !defined(_WIN32) && !defined(EMSCRIPTEN)
  DEF("daemonize", 0, QEMU_OPTION_daemonize, \
      "-daemonize      daemonize QEMU after initializing\n", QEMU_ARCH_ALL)
 diff --git a/system/vl.c b/system/vl.c
-index ec93988a03..9b36ace6b4 100644
+index 3b7057e6c6..28a7d74f5b 100644
 --- a/system/vl.c
 +++ b/system/vl.c
-@@ -171,6 +171,7 @@ static const char *accelerators;
+@@ -173,6 +173,7 @@ static const char *accelerators;
  static bool have_custom_ram_size;
  static const char *ram_memdev_id;
  static QDict *machine_opts_dict;
@@ -892,7 +893,7 @@ index ec93988a03..9b36ace6b4 100644
  static QTAILQ_HEAD(, ObjectOption) object_opts = QTAILQ_HEAD_INITIALIZER(object_opts);
  static QTAILQ_HEAD(, DeviceOption) device_opts = QTAILQ_HEAD_INITIALIZER(device_opts);
  static int display_remote;
-@@ -2814,6 +2815,12 @@ void qmp_x_exit_preconfig(Error **errp)
+@@ -2811,6 +2812,12 @@ void qmp_x_exit_preconfig(Error **errp)
          RunState state = autostart ? RUN_STATE_RUNNING : runstate_get();
          load_snapshot(loadvm, NULL, false, NULL, &error_fatal);
          load_snapshot_resume(state);
@@ -905,7 +906,7 @@ index ec93988a03..9b36ace6b4 100644
      }
      if (replay_mode != REPLAY_MODE_NONE) {
          replay_vmstate_init();
-@@ -3360,6 +3367,9 @@ void qemu_init(int argc, char **argv)
+@@ -3357,6 +3364,9 @@ void qemu_init(int argc, char **argv)
              case QEMU_OPTION_loadvm:
                  loadvm = optarg;
                  break;
diff --git a/debian/patches/pve/0018-PVE-add-optional-buffer-size-to-QEMUFile.patch b/debian/patches/pve/0018-PVE-add-optional-buffer-size-to-QEMUFile.patch
index f5a0d96..9a60ee8 100644
--- a/debian/patches/pve/0018-PVE-add-optional-buffer-size-to-QEMUFile.patch
+++ b/debian/patches/pve/0018-PVE-add-optional-buffer-size-to-QEMUFile.patch
@@ -19,7 +19,7 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
  3 files changed, 38 insertions(+), 17 deletions(-)
 
 diff --git a/migration/qemu-file.c b/migration/qemu-file.c
-index 1303a5bf58..6e2d58d5c0 100644
+index b6ac190034..46d899edb0 100644
 --- a/migration/qemu-file.c
 +++ b/migration/qemu-file.c
 @@ -34,8 +34,8 @@
@@ -131,7 +131,7 @@ index 1303a5bf58..6e2d58d5c0 100644
          if (l > size) {
              l = size;
          }
-@@ -662,8 +680,8 @@ size_t coroutine_mixed_fn qemu_peek_buffer(QEMUFile *f, uint8_t **buf, size_t si
+@@ -660,8 +678,8 @@ size_t coroutine_mixed_fn qemu_peek_buffer(QEMUFile *f, uint8_t **buf, size_t si
      size_t index;
  
      assert(!qemu_file_is_writable(f));
@@ -142,7 +142,7 @@ index 1303a5bf58..6e2d58d5c0 100644
  
      /* The 1st byte to read from */
      index = f->buf_index + offset;
-@@ -713,7 +731,7 @@ size_t coroutine_mixed_fn qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size
+@@ -711,7 +729,7 @@ size_t coroutine_mixed_fn qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size
          size_t res;
          uint8_t *src;
  
@@ -151,7 +151,7 @@ index 1303a5bf58..6e2d58d5c0 100644
          if (res == 0) {
              return done;
          }
-@@ -747,7 +765,7 @@ size_t coroutine_mixed_fn qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size
+@@ -745,7 +763,7 @@ size_t coroutine_mixed_fn qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size
   */
  size_t coroutine_mixed_fn qemu_get_buffer_in_place(QEMUFile *f, uint8_t **buf, size_t size)
  {
@@ -160,7 +160,7 @@ index 1303a5bf58..6e2d58d5c0 100644
          size_t res;
          uint8_t *src = NULL;
  
-@@ -772,7 +790,7 @@ int coroutine_mixed_fn qemu_peek_byte(QEMUFile *f, int offset)
+@@ -770,7 +788,7 @@ int coroutine_mixed_fn qemu_peek_byte(QEMUFile *f, int offset)
      int index = f->buf_index + offset;
  
      assert(!qemu_file_is_writable(f));
diff --git a/debian/patches/pve/0019-PVE-block-add-the-zeroinit-block-driver-filter.patch b/debian/patches/pve/0019-PVE-block-add-the-zeroinit-block-driver-filter.patch
index 0534dc1..79bd6b1 100644
--- a/debian/patches/pve/0019-PVE-block-add-the-zeroinit-block-driver-filter.patch
+++ b/debian/patches/pve/0019-PVE-block-add-the-zeroinit-block-driver-filter.patch
@@ -247,10 +247,10 @@ index 0000000000..036edb17f5
 +
 +block_init(bdrv_zeroinit_init);
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 0e5f148d30..0711253f06 100644
+index 7d281ab7ae..aa1dba4284 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
-@@ -3241,7 +3241,7 @@
+@@ -3305,7 +3305,7 @@
              { 'name': 'virtio-blk-vfio-pci', 'if': 'CONFIG_BLKIO' },
              { 'name': 'virtio-blk-vhost-user', 'if': 'CONFIG_BLKIO' },
              { 'name': 'virtio-blk-vhost-vdpa', 'if': 'CONFIG_BLKIO' },
@@ -259,7 +259,7 @@ index 0e5f148d30..0711253f06 100644
  
  ##
  # @BlockdevOptionsFile:
-@@ -4799,7 +4799,8 @@
+@@ -4863,7 +4863,8 @@
                        'if': 'CONFIG_BLKIO' },
        'vmdk':       'BlockdevOptionsGenericCOWFormat',
        'vpc':        'BlockdevOptionsGenericFormat',
diff --git a/debian/patches/pve/0020-PVE-Add-dummy-id-command-line-parameter.patch b/debian/patches/pve/0020-PVE-Add-dummy-id-command-line-parameter.patch
index 1f7383c..a469996 100644
--- a/debian/patches/pve/0020-PVE-Add-dummy-id-command-line-parameter.patch
+++ b/debian/patches/pve/0020-PVE-Add-dummy-id-command-line-parameter.patch
@@ -14,10 +14,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  2 files changed, 11 insertions(+)
 
 diff --git a/qemu-options.hx b/qemu-options.hx
-index defee0c06a..fb980a05cf 100644
+index 3ec9e52d31..bb41239111 100644
 --- a/qemu-options.hx
 +++ b/qemu-options.hx
-@@ -1280,6 +1280,9 @@ legacy PC, they are not recommended for modern configurations.
+@@ -1285,6 +1285,9 @@ legacy PC, they are not recommended for modern configurations.
  
  ERST
  
@@ -28,10 +28,10 @@ index defee0c06a..fb980a05cf 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/system/vl.c b/system/vl.c
-index 9b36ace6b4..452742ab58 100644
+index 28a7d74f5b..56f8900451 100644
 --- a/system/vl.c
 +++ b/system/vl.c
-@@ -2854,6 +2854,7 @@ void qemu_init(int argc, char **argv)
+@@ -2851,6 +2851,7 @@ void qemu_init(int argc, char **argv)
      MachineClass *machine_class;
      bool userconfig = true;
      FILE *vmstate_dump_file = NULL;
@@ -39,7 +39,7 @@ index 9b36ace6b4..452742ab58 100644
  
      qemu_add_opts(&qemu_drive_opts);
      qemu_add_drive_opts(&qemu_legacy_drive_opts);
-@@ -3472,6 +3473,13 @@ void qemu_init(int argc, char **argv)
+@@ -3469,6 +3470,13 @@ void qemu_init(int argc, char **argv)
                  machine_parse_property_opt(qemu_find_opts("smp-opts"),
                                             "smp", optarg);
                  break;
diff --git a/debian/patches/pve/0021-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
index 67c542b..4316412 100644
--- a/debian/patches/pve/0021-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
@@ -11,7 +11,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 9 insertions(+)
 
 diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c
-index 2a3e878c4d..efbed1aea3 100644
+index 37a7a7019d..444136c665 100644
 --- a/hw/intc/apic_common.c
 +++ b/hw/intc/apic_common.c
 @@ -263,6 +263,15 @@ static void apic_reset_common(DeviceState *dev)
diff --git a/debian/patches/pve/0022-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
index e01dfc4..270829f 100644
--- a/debian/patches/pve/0022-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@proxmox.com>
  2 files changed, 46 insertions(+), 20 deletions(-)
 
 diff --git a/block/file-posix.c b/block/file-posix.c
-index cfa0b832ba..d5c28cccc9 100644
+index 6a9433c836..37b6d495db 100644
 --- a/block/file-posix.c
 +++ b/block/file-posix.c
-@@ -2897,6 +2897,7 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
+@@ -2977,6 +2977,7 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
      int fd;
      uint64_t perm, shared;
      int result = 0;
@@ -24,7 +24,7 @@ index cfa0b832ba..d5c28cccc9 100644
  
      /* Validate options and set default values */
      assert(options->driver == BLOCKDEV_DRIVER_FILE);
-@@ -2937,19 +2938,22 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
+@@ -3017,19 +3018,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 cfa0b832ba..d5c28cccc9 100644
      }
  
      /* Clear the file by truncating it to 0 */
-@@ -3003,13 +3007,15 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
+@@ -3083,13 +3087,15 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
      }
  
  out_unlock:
@@ -82,7 +82,7 @@ index cfa0b832ba..d5c28cccc9 100644
      }
  
  out_close:
-@@ -3033,6 +3039,7 @@ raw_co_create_opts(BlockDriver *drv, const char *filename,
+@@ -3113,6 +3119,7 @@ raw_co_create_opts(BlockDriver *drv, const char *filename,
      PreallocMode prealloc;
      char *buf = NULL;
      Error *local_err = NULL;
@@ -90,7 +90,7 @@ index cfa0b832ba..d5c28cccc9 100644
  
      /* Skip file: protocol prefix */
      strstart(filename, "file:", &filename);
-@@ -3055,6 +3062,18 @@ raw_co_create_opts(BlockDriver *drv, const char *filename,
+@@ -3135,6 +3142,18 @@ raw_co_create_opts(BlockDriver *drv, const char *filename,
          return -EINVAL;
      }
  
@@ -109,7 +109,7 @@ index cfa0b832ba..d5c28cccc9 100644
      options = (BlockdevCreateOptions) {
          .driver     = BLOCKDEV_DRIVER_FILE,
          .u.file     = {
-@@ -3066,6 +3085,8 @@ raw_co_create_opts(BlockDriver *drv, const char *filename,
+@@ -3146,6 +3165,8 @@ raw_co_create_opts(BlockDriver *drv, const char *filename,
              .nocow              = nocow,
              .has_extent_size_hint = has_extent_size_hint,
              .extent_size_hint   = extent_size_hint,
@@ -119,10 +119,10 @@ index cfa0b832ba..d5c28cccc9 100644
      };
      return raw_co_create(&options, errp);
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 0711253f06..7f92c80179 100644
+index aa1dba4284..e17ef6abdf 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
-@@ -5017,6 +5017,10 @@
+@@ -5081,6 +5081,10 @@
  # @extent-size-hint: Extent size hint to add to the image file; 0 for
  #     not adding an extent size hint (default: 1 MB, since 5.1)
  #
@@ -133,7 +133,7 @@ index 0711253f06..7f92c80179 100644
  # Since: 2.12
  ##
  { 'struct': 'BlockdevCreateOptionsFile',
-@@ -5024,7 +5028,8 @@
+@@ -5088,7 +5092,8 @@
              'size':                 'size',
              '*preallocation':       'PreallocMode',
              '*nocow':               'bool',
diff --git a/debian/patches/pve/0023-PVE-monitor-disable-oob-capability.patch b/debian/patches/pve/0023-PVE-monitor-disable-oob-capability.patch
index 569fe89..4830740 100644
--- a/debian/patches/pve/0023-PVE-monitor-disable-oob-capability.patch
+++ b/debian/patches/pve/0023-PVE-monitor-disable-oob-capability.patch
@@ -18,10 +18,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 1 insertion(+), 2 deletions(-)
 
 diff --git a/monitor/qmp.c b/monitor/qmp.c
-index f093e256e9..78f1c8e3c8 100644
+index 170fef4531..448403b45b 100644
 --- a/monitor/qmp.c
 +++ b/monitor/qmp.c
-@@ -534,8 +534,7 @@ void monitor_init_qmp(Chardev *chr, bool pretty, Error **errp)
+@@ -535,8 +535,7 @@ void monitor_init_qmp(Chardev *chr, bool pretty, Error **errp)
      qemu_chr_fe_set_echo(&mon->common.chr, true);
  
      /* Note: we run QMP monitor in I/O thread when @chr supports that */
diff --git a/debian/patches/pve/0024-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
index d180117..d59e085 100644
--- a/debian/patches/pve/0024-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@proxmox.com>
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/hw/core/machine.c b/hw/core/machine.c
-index 63c6ef93d2..9a34017e5a 100644
+index bd47527479..e59b12d9f0 100644
 --- a/hw/core/machine.c
 +++ b/hw/core/machine.c
-@@ -193,7 +193,8 @@ GlobalProperty hw_compat_4_0[] = {
+@@ -201,7 +201,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/0025-PVE-Allow-version-code-in-machine-type.patch b/debian/patches/pve/0025-PVE-Allow-version-code-in-machine-type.patch
index 14de9e8..74421a1 100644
--- a/debian/patches/pve/0025-PVE-Allow-version-code-in-machine-type.patch
+++ b/debian/patches/pve/0025-PVE-Allow-version-code-in-machine-type.patch
@@ -21,10 +21,10 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
  4 files changed, 34 insertions(+)
 
 diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c
-index 93fb4bc24a..b9999423b4 100644
+index 934cdb886d..124000b771 100644
 --- a/hw/core/machine-qmp-cmds.c
 +++ b/hw/core/machine-qmp-cmds.c
-@@ -95,6 +95,11 @@ MachineInfoList *qmp_query_machines(bool has_compat_props, bool compat_props,
+@@ -98,6 +98,11 @@ MachineInfoList *qmp_query_machines(bool has_compat_props, bool compat_props,
          if (strcmp(mc->name, MACHINE_GET_CLASS(current_machine)->name) == 0) {
              info->has_is_current = true;
              info->is_current = true;
@@ -37,7 +37,7 @@ index 93fb4bc24a..b9999423b4 100644
  
          if (default_cpu_type) {
 diff --git a/include/hw/boards.h b/include/hw/boards.h
-index f22b2e7fc7..8ada4d5832 100644
+index f94713e6e2..7a389f6998 100644
 --- a/include/hw/boards.h
 +++ b/include/hw/boards.h
 @@ -271,6 +271,8 @@ struct MachineClass {
@@ -50,19 +50,19 @@ index f22b2e7fc7..8ada4d5832 100644
      void (*reset)(MachineState *state, ResetType type);
      void (*wakeup)(MachineState *state);
 diff --git a/qapi/machine.json b/qapi/machine.json
-index 16366b774a..12cfd3f260 100644
+index 47ac68a3b5..957ff0f4dd 100644
 --- a/qapi/machine.json
 +++ b/qapi/machine.json
-@@ -189,6 +189,8 @@
+@@ -192,6 +192,8 @@
  #
  # @acpi: machine type supports ACPI (since 8.0)
  #
 +# @pve-version: custom PVE version suffix specified as 'machine+pveN'
 +#
  # @compat-props: The machine type's compatibility properties.  Only
- #     present when query-machines argument @compat-props is true.
+ #     present when `query-machines` argument @compat-props is true.
  #     (since 9.1)
-@@ -205,6 +207,7 @@
+@@ -208,6 +210,7 @@
              'hotpluggable-cpus': 'bool',  'numa-mem-supported': 'bool',
              'deprecated': 'bool', '*default-cpu-type': 'str',
              '*default-ram-id': 'str', 'acpi': 'bool',
@@ -71,10 +71,10 @@ index 16366b774a..12cfd3f260 100644
                                 'features': ['unstable'] } } }
  
 diff --git a/system/vl.c b/system/vl.c
-index 452742ab58..c3707b2412 100644
+index 56f8900451..4d583d60b1 100644
 --- a/system/vl.c
 +++ b/system/vl.c
-@@ -1674,6 +1674,7 @@ static MachineClass *select_machine(QDict *qdict, Error **errp)
+@@ -1673,6 +1673,7 @@ static MachineClass *select_machine(QDict *qdict, Error **errp)
  {
      ERRP_GUARD();
      const char *machine_type = qdict_get_try_str(qdict, "type");
@@ -82,7 +82,7 @@ index 452742ab58..c3707b2412 100644
      g_autoptr(GSList) machines = object_class_get_list(TYPE_MACHINE, false);
      MachineClass *machine_class = NULL;
  
-@@ -1693,7 +1694,11 @@ static MachineClass *select_machine(QDict *qdict, Error **errp)
+@@ -1692,7 +1693,11 @@ static MachineClass *select_machine(QDict *qdict, Error **errp)
      if (!machine_class) {
          error_append_hint(errp,
                            "Use -machine help to list supported machines\n");
@@ -94,7 +94,7 @@ index 452742ab58..c3707b2412 100644
      return machine_class;
  }
  
-@@ -3414,12 +3419,31 @@ void qemu_init(int argc, char **argv)
+@@ -3411,12 +3416,31 @@ void qemu_init(int argc, char **argv)
              case QEMU_OPTION_machine:
                  {
                      bool help;
diff --git a/debian/patches/pve/0026-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
index 23adf3b..1757902 100644
--- a/debian/patches/pve/0026-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,7 +25,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/block/backup.c b/block/backup.c
-index 79652bf57b..cc747e9163 100644
+index d4713fa1cd..9189f64ebc 100644
 --- a/block/backup.c
 +++ b/block/backup.c
 @@ -237,8 +237,8 @@ static void backup_init_bcs_bitmap(BackupBlockJob *job)
@@ -48,7 +48,7 @@ index 79652bf57b..cc747e9163 100644
      if (s->sync_mode == MIRROR_SYNC_MODE_TOP) {
          int64_t offset = 0;
          int64_t count;
-@@ -502,6 +500,8 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
+@@ -503,6 +501,8 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
                         &error_abort);
      bdrv_graph_wrunlock();
  
diff --git a/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch b/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch
index 8b88b69..44f1b38 100644
--- a/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch
+++ b/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch
@@ -40,10 +40,10 @@ index a21d9a5411..1373612c10 100644
  system_ss.add(files('block-ram-registrar.c'))
  
 diff --git a/meson.build b/meson.build
-index 8ec796d835..680ab48b9b 100644
+index 50c774a195..25eee758fc 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -2161,6 +2161,8 @@ endif
+@@ -2198,6 +2198,8 @@ endif
  
  has_gettid = cc.has_function('gettid')
  
@@ -52,7 +52,7 @@ index 8ec796d835..680ab48b9b 100644
  # libselinux
  selinux = dependency('libselinux',
                       required: get_option('selinux'),
-@@ -4367,6 +4369,9 @@ if have_tools
+@@ -4531,6 +4533,9 @@ if have_tools
                 dependencies: [blockdev, qemuutil, selinux],
                 install: true)
  
diff --git a/debian/patches/pve/0028-PVE-Backup-add-backup-dump-block-driver.patch b/debian/patches/pve/0028-PVE-Backup-add-backup-dump-block-driver.patch
index 0142439..740e076 100644
--- a/debian/patches/pve/0028-PVE-Backup-add-backup-dump-block-driver.patch
+++ b/debian/patches/pve/0028-PVE-Backup-add-backup-dump-block-driver.patch
@@ -199,7 +199,7 @@ index 0000000000..354593bc10
 +    return bs;
 +}
 diff --git a/block/backup.c b/block/backup.c
-index cc747e9163..6f7c45f922 100644
+index 9189f64ebc..f6a2d19793 100644
 --- a/block/backup.c
 +++ b/block/backup.c
 @@ -29,28 +29,6 @@
@@ -231,7 +231,7 @@ index cc747e9163..6f7c45f922 100644
  static const BlockJobDriver backup_job_driver;
  
  static void backup_cleanup_sync_bitmap(BackupBlockJob *job, int ret)
-@@ -462,6 +440,14 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
+@@ -463,6 +441,14 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
      }
  
      cluster_size = block_copy_cluster_size(bcs);
@@ -259,7 +259,7 @@ index 1373612c10..6278c4af0f 100644
    'blklogwrites.c',
    'blkverify.c',
 diff --git a/include/block/block_int-common.h b/include/block/block_int-common.h
-index ebb4e56a50..e717a74e5f 100644
+index 034c0634c8..5688ced531 100644
 --- a/include/block/block_int-common.h
 +++ b/include/block/block_int-common.h
 @@ -26,6 +26,7 @@
diff --git a/debian/patches/pve/0029-PVE-Add-sequential-job-transaction-support.patch b/debian/patches/pve/0029-PVE-Add-sequential-job-transaction-support.patch
index 93ce858..0599393 100644
--- a/debian/patches/pve/0029-PVE-Add-sequential-job-transaction-support.patch
+++ b/debian/patches/pve/0029-PVE-Add-sequential-job-transaction-support.patch
@@ -11,7 +11,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  2 files changed, 46 insertions(+)
 
 diff --git a/include/qemu/job.h b/include/qemu/job.h
-index a5a04155ea..562cc7eaec 100644
+index ead31578d3..2ed533de6f 100644
 --- a/include/qemu/job.h
 +++ b/include/qemu/job.h
 @@ -362,6 +362,18 @@ void job_unlock(void);
diff --git a/debian/patches/pve/0030-PVE-Backup-Proxmox-backup-patches-for-QEMU.patch b/debian/patches/pve/0030-PVE-Backup-Proxmox-backup-patches-for-QEMU.patch
index abea096..7d375ef 100644
--- a/debian/patches/pve/0030-PVE-Backup-Proxmox-backup-patches-for-QEMU.patch
+++ b/debian/patches/pve/0030-PVE-Backup-Proxmox-backup-patches-for-QEMU.patch
@@ -81,7 +81,8 @@ Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
      improve canceling
      allow passing max-workers setting
      use malloc_trim after backup
-     create jobs in a drained section]
+     create jobs in a drained section
+     adapt to new arguments for backup_job_create]
 Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 ---
  block/meson.build              |    5 +
@@ -120,10 +121,10 @@ index 6278c4af0f..d1b16e40e9 100644
  system_ss.add(when: 'CONFIG_TCG', if_true: files('blkreplay.c'))
  system_ss.add(files('block-ram-registrar.c'))
 diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c
-index 6919a49bf5..4f30f99644 100644
+index 282d1c386e..bbb08ecabd 100644
 --- a/block/monitor/block-hmp-cmds.c
 +++ b/block/monitor/block-hmp-cmds.c
-@@ -1010,3 +1010,42 @@ void hmp_change_medium(Monitor *mon, const char *device, const char *target,
+@@ -1015,3 +1015,42 @@ void hmp_change_medium(Monitor *mon, const char *device, const char *target,
      qmp_blockdev_change_medium(device, NULL, target, arg, true, force,
                                 !!read_only, read_only_mode, errp);
  }
@@ -167,7 +168,7 @@ index 6919a49bf5..4f30f99644 100644
 +    hmp_handle_error(mon, error);
 +}
 diff --git a/blockdev.c b/blockdev.c
-index 158ac9314b..17de5d2ae4 100644
+index 782cc5dd75..2505f9040a 100644
 --- a/blockdev.c
 +++ b/blockdev.c
 @@ -37,6 +37,7 @@
@@ -179,10 +180,10 @@ index 158ac9314b..17de5d2ae4 100644
  #include "monitor/monitor.h"
  #include "qemu/error-report.h"
 diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
-index d1a7b99add..af588145ff 100644
+index 3e15458335..7dffd5f68c 100644
 --- a/hmp-commands-info.hx
 +++ b/hmp-commands-info.hx
-@@ -458,6 +458,20 @@ SRST
+@@ -456,6 +456,20 @@ SRST
      Show the current VM UUID.
  ERST
  
@@ -204,7 +205,7 @@ index d1a7b99add..af588145ff 100644
      {
          .name       = "usernet",
 diff --git a/hmp-commands.hx b/hmp-commands.hx
-index 0c7c6f2c16..bf8315f226 100644
+index 0d9241db9e..5f88b8dfaa 100644
 --- a/hmp-commands.hx
 +++ b/hmp-commands.hx
 @@ -101,6 +101,35 @@ ERST
@@ -265,10 +266,10 @@ index 2596cc2426..9dda91d65a 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 680ab48b9b..1f74de1d93 100644
+index 25eee758fc..347197d2d7 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -2162,6 +2162,7 @@ endif
+@@ -2199,6 +2199,7 @@ endif
  has_gettid = cc.has_function('gettid')
  
  libuuid = cc.find_library('uuid', required: true)
@@ -277,7 +278,7 @@ index 680ab48b9b..1f74de1d93 100644
  # libselinux
  selinux = dependency('libselinux',
 diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
-index bade2a4b92..77a2fa409a 100644
+index 1e66bff724..d2fc956c18 100644
 --- a/monitor/hmp-cmds.c
 +++ b/monitor/hmp-cmds.c
 @@ -22,6 +22,7 @@
@@ -586,7 +587,7 @@ index 0000000000..8cbf645b2c
 +#endif /* PROXMOX_BACKUP_CLIENT_H */
 diff --git a/pve-backup.c b/pve-backup.c
 new file mode 100644
-index 0000000000..e931cb9203
+index 0000000000..177fb851b4
 --- /dev/null
 +++ b/pve-backup.c
 @@ -0,0 +1,1096 @@
@@ -1117,9 +1118,9 @@ index 0000000000..e931cb9203
 +
 +        BlockJob *job = backup_job_create(
 +            NULL, di->bs, di->target, backup_state.speed, sync_mode, di->bitmap,
-+            bitmap_mode, false, NULL, &backup_state.perf, BLOCKDEV_ON_ERROR_REPORT,
-+            BLOCKDEV_ON_ERROR_REPORT, JOB_DEFAULT, pvebackup_complete_cb, di, backup_state.txn,
-+            &local_err);
++            bitmap_mode, false, false, NULL, &backup_state.perf, BLOCKDEV_ON_ERROR_REPORT,
++            BLOCKDEV_ON_ERROR_REPORT, ON_CBW_ERROR_BREAK_GUEST_WRITE, JOB_DEFAULT,
++            pvebackup_complete_cb, di, backup_state.txn, &local_err);
 +
 +        bdrv_drained_end(di->bs);
 +
@@ -1687,10 +1688,10 @@ index 0000000000..e931cb9203
 +    return ret;
 +}
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 7f92c80179..5379fde30f 100644
+index e17ef6abdf..a54390d9ad 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
-@@ -855,6 +855,239 @@
+@@ -879,6 +879,239 @@
  { 'command': 'query-block', 'returns': ['BlockInfo'],
    'allow-preconfig': true }
  
@@ -1931,10 +1932,10 @@ index 7f92c80179..5379fde30f 100644
  # @BlockDeviceTimedStats:
  #
 diff --git a/qapi/common.json b/qapi/common.json
-index 0e3a0bbbfb..554680c716 100644
+index af7e3d618a..dc9ab77310 100644
 --- a/qapi/common.json
 +++ b/qapi/common.json
-@@ -226,3 +226,17 @@
+@@ -228,3 +228,17 @@
  ##
  { 'enum': 'EndianMode',
    'data': [ 'unspecified', 'little', 'big' ] }
@@ -1953,7 +1954,7 @@ index 0e3a0bbbfb..554680c716 100644
 +##
 +{ 'struct': 'UuidInfo', 'data': {'UUID': 'str'} }
 diff --git a/qapi/machine.json b/qapi/machine.json
-index 12cfd3f260..a8abdb42a3 100644
+index 957ff0f4dd..5628cf4be4 100644
 --- a/qapi/machine.json
 +++ b/qapi/machine.json
 @@ -4,6 +4,8 @@
@@ -1963,11 +1964,11 @@ index 12cfd3f260..a8abdb42a3 100644
 +{ 'include': 'common.json' }
 +
  ##
- # = Machines
+ # ********
+ # Machines
+@@ -299,20 +301,6 @@
  ##
-@@ -302,20 +304,6 @@
- ##
- { 'command': 'query-target', 'returns': 'TargetInfo' }
+ { 'command': 'query-target', 'returns': 'QemuTargetInfo' }
  
 -##
 -# @UuidInfo:
diff --git a/debian/patches/pve/0031-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch b/debian/patches/pve/0031-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch
index 618dedd..ef8a531 100644
--- a/debian/patches/pve/0031-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch
+++ b/debian/patches/pve/0031-PVE-Backup-pbs-restore-new-command-to-restore-from-p.patch
@@ -14,10 +14,10 @@ Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
  create mode 100644 pbs-restore.c
 
 diff --git a/meson.build b/meson.build
-index 1f74de1d93..8508aab9c9 100644
+index 347197d2d7..c1d9e46dd8 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -4373,6 +4373,10 @@ if have_tools
+@@ -4537,6 +4537,10 @@ if have_tools
    vma = executable('vma', files('vma.c', 'vma-reader.c') + genh,
                     dependencies: [authz, block, crypto, io, qemuutil, qom], install: true)
  
diff --git a/debian/patches/pve/0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch b/debian/patches/pve/0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
index 0c0f3f6..e218b53 100644
--- a/debian/patches/pve/0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
+++ b/debian/patches/pve/0032-PVE-Add-PBS-block-driver-to-map-backup-archives-into.patch
@@ -348,10 +348,10 @@ index 0000000000..3e41421716
 +
 +block_init(bdrv_pbs_init);
 diff --git a/meson.build b/meson.build
-index 8508aab9c9..9c39f54f86 100644
+index c1d9e46dd8..bb1bff44b8 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -4838,7 +4838,7 @@ summary_info += {'Query Processing Library support': qpl}
+@@ -5010,7 +5010,7 @@ summary_info += {'Query Processing Library support': qpl}
  summary_info += {'UADK Library support': uadk}
  summary_info += {'qatzip support':    qatzip}
  summary_info += {'NUMA host support': numa}
@@ -361,10 +361,10 @@ index 8508aab9c9..9c39f54f86 100644
  summary_info += {'libdaxctl support': libdaxctl}
  summary_info += {'libcbor support':   libcbor}
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 5379fde30f..01fb2d899d 100644
+index a54390d9ad..e6b8ba49b2 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
-@@ -3470,6 +3470,7 @@
+@@ -3534,6 +3534,7 @@
              'parallels', 'preallocate', 'qcow', 'qcow2', 'qed', 'quorum',
              'raw', 'rbd',
              { 'name': 'replication', 'if': 'CONFIG_REPLICATION' },
@@ -372,7 +372,7 @@ index 5379fde30f..01fb2d899d 100644
              'ssh', 'throttle', 'vdi', 'vhdx',
              { 'name': 'virtio-blk-vfio-pci', 'if': 'CONFIG_BLKIO' },
              { 'name': 'virtio-blk-vhost-user', 'if': 'CONFIG_BLKIO' },
-@@ -3556,6 +3557,33 @@
+@@ -3620,6 +3621,33 @@
  { 'struct': 'BlockdevOptionsNull',
    'data': { '*size': 'int', '*latency-ns': 'uint64', '*read-zeroes': 'bool' } }
  
@@ -406,7 +406,7 @@ index 5379fde30f..01fb2d899d 100644
  ##
  # @BlockdevOptionsNVMe:
  #
-@@ -5003,6 +5031,7 @@
+@@ -5067,6 +5095,7 @@
        'nfs':        'BlockdevOptionsNfs',
        'null-aio':   'BlockdevOptionsNull',
        'null-co':    'BlockdevOptionsNull',
diff --git a/debian/patches/pve/0033-PVE-redirect-stderr-to-journal-when-daemonized.patch b/debian/patches/pve/0033-PVE-redirect-stderr-to-journal-when-daemonized.patch
index 760ce46..927215e 100644
--- a/debian/patches/pve/0033-PVE-redirect-stderr-to-journal-when-daemonized.patch
+++ b/debian/patches/pve/0033-PVE-redirect-stderr-to-journal-when-daemonized.patch
@@ -14,10 +14,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  2 files changed, 7 insertions(+), 3 deletions(-)
 
 diff --git a/meson.build b/meson.build
-index 9c39f54f86..60af7fa723 100644
+index bb1bff44b8..6b85f32abe 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -2162,6 +2162,7 @@ endif
+@@ -2199,6 +2199,7 @@ endif
  has_gettid = cc.has_function('gettid')
  
  libuuid = cc.find_library('uuid', required: true)
@@ -25,9 +25,9 @@ index 9c39f54f86..60af7fa723 100644
  libproxmox_backup_qemu = cc.find_library('proxmox_backup_qemu', required: true)
  
  # libselinux
-@@ -3766,7 +3767,7 @@ if have_block
-   if host_os == 'windows'
-     system_ss.add(files('os-win32.c'))
+@@ -3874,7 +3875,7 @@ if have_block
+   elif host_os == 'emscripten'
+     blockdev_ss.add(files('os-wasm.c'))
    else
 -    blockdev_ss.add(files('os-posix.c'))
 +    blockdev_ss.add(files('os-posix.c'), libsystemd)
diff --git a/debian/patches/pve/0034-PVE-Migrate-dirty-bitmap-state-via-savevm.patch b/debian/patches/pve/0034-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
index bf06ca7..6a08ce2 100644
--- a/debian/patches/pve/0034-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
+++ b/debian/patches/pve/0034-PVE-Migrate-dirty-bitmap-state-via-savevm.patch
@@ -26,7 +26,7 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
  create mode 100644 migration/pbs-state.c
 
 diff --git a/include/migration/misc.h b/include/migration/misc.h
-index 8fd36eba1d..e963e93e71 100644
+index a261f99d89..e8c6a87305 100644
 --- a/include/migration/misc.h
 +++ b/include/migration/misc.h
 @@ -140,4 +140,7 @@ bool multifd_device_state_save_thread_should_exit(void);
@@ -38,7 +38,7 @@ index 8fd36eba1d..e963e93e71 100644
 +
  #endif
 diff --git a/migration/meson.build b/migration/meson.build
-index 46e92249a1..fb3fd7d7d0 100644
+index 409b748980..ca94e7e17b 100644
 --- a/migration/meson.build
 +++ b/migration/meson.build
 @@ -8,6 +8,7 @@ migration_files = files(
@@ -58,10 +58,10 @@ index 46e92249a1..fb3fd7d7d0 100644
    'savevm.c',
    'savevm-async.c',
 diff --git a/migration/migration.c b/migration/migration.c
-index d46e776e24..2f3430f440 100644
+index 10c216d25d..b58cbdc2c0 100644
 --- a/migration/migration.c
 +++ b/migration/migration.c
-@@ -319,6 +319,7 @@ void migration_object_init(void)
+@@ -340,6 +340,7 @@ void migration_object_init(void)
  
      /* Initialize cpu throttle timers */
      cpu_throttle_init();
@@ -180,7 +180,7 @@ index 0000000000..a97187e4d7
 +                         NULL);
 +}
 diff --git a/pve-backup.c b/pve-backup.c
-index e931cb9203..366b015589 100644
+index 177fb851b4..7575abab7c 100644
 --- a/pve-backup.c
 +++ b/pve-backup.c
 @@ -1089,6 +1089,7 @@ ProxmoxSupportStatus *qmp_query_proxmox_support(Error **errp)
@@ -192,10 +192,10 @@ index e931cb9203..366b015589 100644
      ret->pbs_masterkey = true;
      ret->backup_max_workers = true;
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 01fb2d899d..7b32b59717 100644
+index e6b8ba49b2..be6bf25219 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
-@@ -1008,6 +1008,11 @@
+@@ -1032,6 +1032,11 @@
  # @pbs-dirty-bitmap-savevm: True if 'dirty-bitmaps' migration capability can
  #                           safely be set for savevm-async.
  #
@@ -207,7 +207,7 @@ index 01fb2d899d..7b32b59717 100644
  # @pbs-masterkey: True if the QMP backup call supports the 'master_keyfile'
  #                 parameter.
  #
-@@ -1021,6 +1026,7 @@
+@@ -1045,6 +1050,7 @@
    'data': { 'pbs-dirty-bitmap': 'bool',
              'query-bitmap-info': 'bool',
              'pbs-dirty-bitmap-savevm': 'bool',
diff --git a/debian/patches/pve/0035-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch b/debian/patches/pve/0035-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch
index a8f20ad..34f34c3 100644
--- a/debian/patches/pve/0035-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch
+++ b/debian/patches/pve/0035-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch
@@ -19,7 +19,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 5 insertions(+), 1 deletion(-)
 
 diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
-index f2c352d4a7..931a8481e9 100644
+index a061aad817..d5fca0b96a 100644
 --- a/migration/block-dirty-bitmap.c
 +++ b/migration/block-dirty-bitmap.c
 @@ -539,7 +539,11 @@ static int add_bitmaps_to_list(DBMSaveState *s, BlockDriverState *bs,
diff --git a/debian/patches/pve/0036-PVE-fall-back-to-open-iscsi-initiatorname.patch b/debian/patches/pve/0036-PVE-fall-back-to-open-iscsi-initiatorname.patch
index 773ee14..a187b0d 100644
--- a/debian/patches/pve/0036-PVE-fall-back-to-open-iscsi-initiatorname.patch
+++ b/debian/patches/pve/0036-PVE-fall-back-to-open-iscsi-initiatorname.patch
@@ -21,7 +21,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 30 insertions(+)
 
 diff --git a/block/iscsi.c b/block/iscsi.c
-index 2f0f4dac09..b523137cff 100644
+index 15b96ee880..5aa4b602b1 100644
 --- a/block/iscsi.c
 +++ b/block/iscsi.c
 @@ -1392,12 +1392,42 @@ static char *get_initiator_name(QemuOpts *opts)
diff --git a/debian/patches/pve/0037-PVE-block-stream-increase-chunk-size.patch b/debian/patches/pve/0037-PVE-block-stream-increase-chunk-size.patch
index 9edb3ec..db4a6c2 100644
--- a/debian/patches/pve/0037-PVE-block-stream-increase-chunk-size.patch
+++ b/debian/patches/pve/0037-PVE-block-stream-increase-chunk-size.patch
@@ -11,7 +11,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/block/stream.c b/block/stream.c
-index 999d9e56d4..e187cd1262 100644
+index c0616b69e2..d023753091 100644
 --- a/block/stream.c
 +++ b/block/stream.c
 @@ -27,7 +27,7 @@ enum {
diff --git a/debian/patches/pve/0038-block-add-alloc-track-driver.patch b/debian/patches/pve/0038-block-add-alloc-track-driver.patch
index b582205..3ff3f6c 100644
--- a/debian/patches/pve/0038-block-add-alloc-track-driver.patch
+++ b/debian/patches/pve/0038-block-add-alloc-track-driver.patch
@@ -44,7 +44,7 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 
 diff --git a/block/alloc-track.c b/block/alloc-track.c
 new file mode 100644
-index 0000000000..718aaabf2a
+index 0000000000..02ff45b624
 --- /dev/null
 +++ b/block/alloc-track.c
 @@ -0,0 +1,343 @@
@@ -295,7 +295,7 @@ index 0000000000..718aaabf2a
 +}
 +
 +static int coroutine_fn GRAPH_RDLOCK
-+track_co_block_status(BlockDriverState *bs, bool want_zero,
++track_co_block_status(BlockDriverState *bs, unsigned int mode,
 +                                            int64_t offset,
 +                                            int64_t bytes,
 +                                            int64_t *pnum,
@@ -404,10 +404,10 @@ index d243372c41..9b45b5256d 100644
    'backup.c',
    'backup-dump.c',
 diff --git a/block/stream.c b/block/stream.c
-index e187cd1262..0b61029399 100644
+index d023753091..a777c8079c 100644
 --- a/block/stream.c
 +++ b/block/stream.c
-@@ -120,6 +120,40 @@ static int stream_prepare(Job *job)
+@@ -118,6 +118,40 @@ static int GRAPH_UNLOCKED stream_prepare(Job *job)
              ret = -EPERM;
              goto out;
          }
@@ -449,10 +449,10 @@ index e187cd1262..0b61029399 100644
  
  out:
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 7b32b59717..8d912dc96b 100644
+index be6bf25219..cbefc6d0d3 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
-@@ -3462,7 +3462,8 @@
+@@ -3526,7 +3526,8 @@
  # Since: 2.9
  ##
  { 'enum': 'BlockdevDriver',
@@ -462,7 +462,7 @@ index 7b32b59717..8d912dc96b 100644
              'cloop', 'compress', 'copy-before-write', 'copy-on-read', 'dmg',
              'file', 'snapshot-access', 'ftp', 'ftps',
              {'name': 'gluster', 'features': [ 'deprecated' ] },
-@@ -3563,6 +3564,21 @@
+@@ -3627,6 +3628,21 @@
  { 'struct': 'BlockdevOptionsNull',
    'data': { '*size': 'int', '*latency-ns': 'uint64', '*read-zeroes': 'bool' } }
  
@@ -484,7 +484,7 @@ index 7b32b59717..8d912dc96b 100644
  ##
  # @BlockdevOptionsPbs:
  #
-@@ -5009,6 +5025,7 @@
+@@ -5073,6 +5089,7 @@
              '*detect-zeroes': 'BlockdevDetectZeroesOptions' },
    'discriminator': 'driver',
    'data': {
diff --git a/debian/patches/pve/0042-PVE-backup-add-fleecing-option.patch b/debian/patches/pve/0039-PVE-backup-add-fleecing-option.patch
similarity index 95%
rename from debian/patches/pve/0042-PVE-backup-add-fleecing-option.patch
rename to debian/patches/pve/0039-PVE-backup-add-fleecing-option.patch
index 12c60c7..3edb41d 100644
--- a/debian/patches/pve/0042-PVE-backup-add-fleecing-option.patch
+++ b/debian/patches/pve/0039-PVE-backup-add-fleecing-option.patch
@@ -72,7 +72,7 @@ Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
  5 files changed, 195 insertions(+), 10 deletions(-)
 
 diff --git a/block/copy-before-write.c b/block/copy-before-write.c
-index fd470f5f92..5c23b578ef 100644
+index 36d5d3ed9b..6813d1a929 100644
 --- a/block/copy-before-write.c
 +++ b/block/copy-before-write.c
 @@ -27,6 +27,7 @@
@@ -122,7 +122,7 @@ index fd470f5f92..5c23b578ef 100644
          g_free(req);
          return NULL;
      }
-@@ -595,6 +595,12 @@ void bdrv_cbw_drop(BlockDriverState *bs)
+@@ -597,6 +597,12 @@ void bdrv_cbw_drop(BlockDriverState *bs)
      bdrv_unref(bs);
  }
  
@@ -136,21 +136,21 @@ index fd470f5f92..5c23b578ef 100644
  {
      bdrv_register(&bdrv_cbw_filter);
 diff --git a/block/copy-before-write.h b/block/copy-before-write.h
-index 2a5d4ba693..969da3620f 100644
+index eb93364e85..6a6dbf90f5 100644
 --- a/block/copy-before-write.h
 +++ b/block/copy-before-write.h
-@@ -44,5 +44,6 @@ BlockDriverState *bdrv_cbw_append(BlockDriverState *source,
-                                   BlockCopyState **bcs,
+@@ -45,5 +45,6 @@ BlockDriverState *bdrv_cbw_append(BlockDriverState *source,
+                                   OnCbwError on_cbw_error,
                                    Error **errp);
  void bdrv_cbw_drop(BlockDriverState *bs);
 +int bdrv_cbw_snapshot_error(BlockDriverState *bs);
  
  #endif /* COPY_BEFORE_WRITE_H */
 diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c
-index 4f30f99644..66d16d342f 100644
+index bbb08ecabd..d8771ce8fc 100644
 --- a/block/monitor/block-hmp-cmds.c
 +++ b/block/monitor/block-hmp-cmds.c
-@@ -1045,6 +1045,7 @@ void coroutine_fn hmp_backup(Monitor *mon, const QDict *qdict)
+@@ -1050,6 +1050,7 @@ void coroutine_fn hmp_backup(Monitor *mon, const QDict *qdict)
          NULL, NULL,
          devlist, qdict_haskey(qdict, "speed"), speed,
          false, 0, // BackupPerf max-workers
@@ -159,7 +159,7 @@ index 4f30f99644..66d16d342f 100644
  
      hmp_handle_error(mon, error);
 diff --git a/pve-backup.c b/pve-backup.c
-index 366b015589..9b66788ab5 100644
+index 7575abab7c..8b83465ebd 100644
 --- a/pve-backup.c
 +++ b/pve-backup.c
 @@ -7,6 +7,7 @@
@@ -336,11 +336,11 @@ index 366b015589..9b66788ab5 100644
 +
          BlockJob *job = backup_job_create(
 -            NULL, di->bs, di->target, backup_state.speed, sync_mode, di->bitmap,
--            bitmap_mode, false, NULL, &backup_state.perf, BLOCKDEV_ON_ERROR_REPORT,
+-            bitmap_mode, false, false, NULL, &backup_state.perf, BLOCKDEV_ON_ERROR_REPORT,
 +            di->device_name, source_bs, di->target, backup_state.speed, sync_mode, di->bitmap,
 +            bitmap_mode, false, discard_source, NULL, &perf, BLOCKDEV_ON_ERROR_REPORT,
-             BLOCKDEV_ON_ERROR_REPORT, JOB_DEFAULT, pvebackup_complete_cb, di, backup_state.txn,
-             &local_err);
+             BLOCKDEV_ON_ERROR_REPORT, ON_CBW_ERROR_BREAK_GUEST_WRITE, JOB_DEFAULT,
+             pvebackup_complete_cb, di, backup_state.txn, &local_err);
  
 @@ -539,6 +672,7 @@ static void create_backup_jobs_bh(void *opaque) {
          }
@@ -429,10 +429,10 @@ index 366b015589..9b66788ab5 100644
      return ret;
  }
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 8d912dc96b..ba2a13e668 100644
+index cbefc6d0d3..7cafc96616 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
-@@ -952,6 +952,10 @@
+@@ -976,6 +976,10 @@
  #
  # @max-workers: see @BackupPerf for details. Default 16.
  #
@@ -443,7 +443,7 @@ index 8d912dc96b..ba2a13e668 100644
  # Returns: the uuid of the backup job
  #
  ##
-@@ -972,7 +976,8 @@
+@@ -996,7 +1000,8 @@
                                      '*firewall-file': 'str',
                                      '*devlist': 'str',
                                      '*speed': 'int',
@@ -453,7 +453,7 @@ index 8d912dc96b..ba2a13e668 100644
    'returns': 'UuidInfo', 'coroutine': true }
  
  ##
-@@ -1018,6 +1023,8 @@
+@@ -1042,6 +1047,8 @@
  #
  # @pbs-library-version: Running version of libproxmox-backup-qemu0 library.
  #
@@ -462,7 +462,7 @@ index 8d912dc96b..ba2a13e668 100644
  # @backup-max-workers: Whether the 'max-workers' @BackupPerf setting is
  #     supported or not.
  #
-@@ -1029,6 +1036,7 @@
+@@ -1053,6 +1060,7 @@
              'pbs-dirty-bitmap-migration': 'bool',
              'pbs-masterkey': 'bool',
              'pbs-library-version': 'str',
diff --git a/debian/patches/pve/0039-Revert-block-rbd-workaround-for-ceph-issue-53784.patch b/debian/patches/pve/0039-Revert-block-rbd-workaround-for-ceph-issue-53784.patch
deleted file mode 100644
index a47e99d..0000000
--- a/debian/patches/pve/0039-Revert-block-rbd-workaround-for-ceph-issue-53784.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Fabian Ebner <f.ebner@proxmox.com>
-Date: Thu, 23 Jun 2022 14:00:05 +0200
-Subject: [PATCH] Revert "block/rbd: workaround for ceph issue #53784"
-
-This reverts commit fc176116cdea816ceb8dd969080b2b95f58edbc0 in
-preparation to revert 0347a8fd4c3faaedf119be04c197804be40a384b.
-
-Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
-Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
----
- block/rbd.c | 42 ++----------------------------------------
- 1 file changed, 2 insertions(+), 40 deletions(-)
-
-diff --git a/block/rbd.c b/block/rbd.c
-index bf143fac00..70d92966f7 100644
---- a/block/rbd.c
-+++ b/block/rbd.c
-@@ -1515,7 +1515,6 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs,
-     int status, r;
-     RBDDiffIterateReq req = { .offs = offset };
-     uint64_t features, flags;
--    uint64_t head = 0;
- 
-     assert(offset + bytes <= s->image_size);
- 
-@@ -1543,43 +1542,7 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs,
-         return status;
-     }
- 
--#if LIBRBD_VERSION_CODE < LIBRBD_VERSION(1, 17, 0)
--    /*
--     * librbd had a bug until early 2022 that affected all versions of ceph that
--     * supported fast-diff. This bug results in reporting of incorrect offsets
--     * if the offset parameter to rbd_diff_iterate2 is not object aligned.
--     * Work around this bug by rounding down the offset to object boundaries.
--     * This is OK because we call rbd_diff_iterate2 with whole_object = true.
--     * However, this workaround only works for non cloned images with default
--     * striping.
--     *
--     * See: https://tracker.ceph.com/issues/53784
--     */
--
--    /* check if RBD image has non-default striping enabled */
--    if (features & RBD_FEATURE_STRIPINGV2) {
--        return status;
--    }
--
--#pragma GCC diagnostic push
--#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
--    /*
--     * check if RBD image is a clone (= has a parent).
--     *
--     * rbd_get_parent_info is deprecated from Nautilus onwards, but the
--     * replacement rbd_get_parent is not present in Luminous and Mimic.
--     */
--    if (rbd_get_parent_info(s->image, NULL, 0, NULL, 0, NULL, 0) != -ENOENT) {
--        return status;
--    }
--#pragma GCC diagnostic pop
--
--    head = req.offs & (s->object_size - 1);
--    req.offs -= head;
--    bytes += head;
--#endif
--
--    r = rbd_diff_iterate2(s->image, NULL, req.offs, bytes, true, true,
-+    r = rbd_diff_iterate2(s->image, NULL, offset, bytes, true, true,
-                           qemu_rbd_diff_iterate_cb, &req);
-     if (r < 0 && r != QEMU_RBD_EXIT_DIFF_ITERATE2) {
-         return status;
-@@ -1598,8 +1561,7 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs,
-         status = BDRV_BLOCK_ZERO | BDRV_BLOCK_OFFSET_VALID;
-     }
- 
--    assert(req.bytes > head);
--    *pnum = req.bytes - head;
-+    *pnum = req.bytes;
-     return status;
- }
- 
diff --git a/debian/patches/pve/0040-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch b/debian/patches/pve/0040-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch
deleted file mode 100644
index 6659112..0000000
--- a/debian/patches/pve/0040-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Fabian Ebner <f.ebner@proxmox.com>
-Date: Thu, 23 Jun 2022 14:00:07 +0200
-Subject: [PATCH] Revert "block/rbd: fix handling of holes in
- .bdrv_co_block_status"
-
-This reverts commit 9e302f64bb407a9bb097b626da97228c2654cfee in
-preparation to revert 0347a8fd4c3faaedf119be04c197804be40a384b.
-
-Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
-Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
----
- block/rbd.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/block/rbd.c b/block/rbd.c
-index 70d92966f7..931b513828 100644
---- a/block/rbd.c
-+++ b/block/rbd.c
-@@ -1474,11 +1474,11 @@ static int qemu_rbd_diff_iterate_cb(uint64_t offs, size_t len,
-     RBDDiffIterateReq *req = opaque;
- 
-     assert(req->offs + req->bytes <= offs);
--
--    /* treat a hole like an unallocated area and bail out */
--    if (!exists) {
--        return 0;
--    }
-+    /*
-+     * we do not diff against a snapshot so we should never receive a callback
-+     * for a hole.
-+     */
-+    assert(exists);
- 
-     if (!req->exists && offs > req->offs) {
-         /*
diff --git a/debian/patches/pve/0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch b/debian/patches/pve/0040-adapt-machine-version-deprecation-for-Proxmox-VE.patch
similarity index 70%
rename from debian/patches/pve/0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch
rename to debian/patches/pve/0040-adapt-machine-version-deprecation-for-Proxmox-VE.patch
index 272133f..5701668 100644
--- a/debian/patches/pve/0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch
+++ b/debian/patches/pve/0040-adapt-machine-version-deprecation-for-Proxmox-VE.patch
@@ -18,24 +18,27 @@ single major PVE release.
 
 Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 ---
- include/hw/boards.h | 78 +++++++++++++++++++++++++++++----------------
- 1 file changed, 51 insertions(+), 27 deletions(-)
+ include/hw/boards.h | 99 ++++++++++++++++++++++++++-------------------
+ 1 file changed, 58 insertions(+), 41 deletions(-)
 
 diff --git a/include/hw/boards.h b/include/hw/boards.h
-index 8ada4d5832..6bfc2a7961 100644
+index 7a389f6998..0595a569d2 100644
 --- a/include/hw/boards.h
 +++ b/include/hw/boards.h
-@@ -636,42 +636,66 @@ struct MachineState {
+@@ -636,40 +636,57 @@ struct MachineState {
  
  
  /*
 - * How many years/major releases for each phase
 - * of the life cycle. Assumes use of versioning
-- * scheme where major is bumped each year
+- * scheme where major is bumped each year.
 + * Baseline of machine versions that are still considered supported throughout
 + * current major Proxmox VE release. Machine versions older than this are
 + * considered to be deprecated in Proxmox VE.
-+ *
+  *
+- * These values must match the ver_machine_deprecation_version
+- * and ver_machine_deletion_version logic in docs/conf.py and
+- * the text in docs/about/deprecated.rst
 + * Machine versions older than 6 years are removed just like in upstream QEMU.
 + * (policy takes effect with QEMU 10.1). Assumes yearly major QEMU release.
 + *
@@ -55,16 +58,13 @@ index 8ada4d5832..6bfc2a7961 100644
 +/*
 + * Proxmox VE needs to support the baseline throughout a major PVE release. So
 + * a QEMU release where the baseline is already deleted cannot be used.
-+ * Removal policy after 6 years takes effect with QEMU 10.1.
   */
 -#define MACHINE_VER_DELETION_MAJOR 6
 -#define MACHINE_VER_DEPRECATION_MAJOR 3
-+#if ((QEMU_VERSION_MAJOR > 10) || ((QEMU_VERSION_MAJOR == 10) && (QEMU_VERSION_MINOR >= 1)))
 +#if ((MACHINE_VER_BASELINE_PVE_MAJOR < MACHINE_VER_DELETION_MAJOR) || \
 +     ((MACHINE_VER_BASELINE_PVE_MAJOR == MACHINE_VER_DELETION_MAJOR) && \
 +      (MACHINE_VER_BASELINE_PVE_MINOR < MACHINE_VER_DELETION_MINOR)))
 +#error "Baseline machine version needed by Proxmox VE not supported anymore by this QEMU release"
-+#endif
 +#endif
  
  /*
@@ -75,11 +75,51 @@ index 8ada4d5832..6bfc2a7961 100644
 -    "machines more than " stringify(MACHINE_VER_DEPRECATION_MAJOR) \
 -    " years old are subject to deletion after " \
 -    stringify(MACHINE_VER_DELETION_MAJOR) " years"
--
--#define _MACHINE_VER_IS_EXPIRED_IMPL(cutoff, major, minor) \
++    "old machine version is subject to deletion during current major Proxmox VE release"
+ 
+-#define _MACHINE_VER_IS_CURRENT_EXPIRED(cutoff, major, minor) \
 -    (((QEMU_VERSION_MAJOR - major) > cutoff) || \
 -     (((QEMU_VERSION_MAJOR - major) == cutoff) && \
 -      (QEMU_VERSION_MINOR - minor) >= 0))
++#define _MACHINE_VER_IS_CURRENT_EXPIRED(baseline_major, baseline_minor, major, minor) \
++    ((major < baseline_major) || \
++     ((major == baseline_major) && \
++      (minor < baseline_minor)))
+ 
+-#define _MACHINE_VER_IS_NEXT_MINOR_EXPIRED(cutoff, major, minor) \
+-    (((QEMU_VERSION_MAJOR - major) > cutoff) || \
+-     (((QEMU_VERSION_MAJOR - major) == cutoff) && \
+-      ((QEMU_VERSION_MINOR + 1) - minor) >= 0))
++#define _MACHINE_VER_IS_NEXT_MINOR_EXPIRED(baseline_major, baseline_minor, major, minor) \
++    ((major < baseline_major) || \
++     ((major == baseline_major) && \
++      ((minor + 1) < baseline_minor)))
+ 
+-#define _MACHINE_VER_IS_NEXT_MAJOR_EXPIRED(cutoff, major, minor) \
+-    ((((QEMU_VERSION_MAJOR + 1) - major) > cutoff) ||            \
+-     ((((QEMU_VERSION_MAJOR + 1) - major) == cutoff) &&          \
+-      (0 - minor) >= 0))
++#define _MACHINE_VER_IS_NEXT_MAJOR_EXPIRED(baseline_major, baseline_minor, major, minor) \
++    (((major + 1) < baseline_major) || \
++     (((major + 1) == baseline_major) && \
++      (minor < baseline_minor)))
+ 
+ /*
+  * - The first check applies to formal releases
+@@ -684,29 +701,29 @@ struct MachineState {
+  * and dev snapshots / release candidates are numbered with micro >= 50
+  * If this ever changes the logic below will need modifying....
+  */
+-#define _MACHINE_VER_IS_EXPIRED_IMPL(cutoff, major, minor) \
++#define _MACHINE_VER_IS_EXPIRED_IMPL(baseline_major, baseline_minor, major, minor) \
+     ((QEMU_VERSION_MICRO < 50 && \
+-      _MACHINE_VER_IS_CURRENT_EXPIRED(cutoff, major, minor)) || \
++      _MACHINE_VER_IS_CURRENT_EXPIRED(baseline_major, baseline_minor, major, minor)) || \
+      (QEMU_VERSION_MICRO >= 50 && QEMU_VERSION_MINOR < 2 && \
+-      _MACHINE_VER_IS_NEXT_MINOR_EXPIRED(cutoff, major, minor)) || \
++      _MACHINE_VER_IS_NEXT_MINOR_EXPIRED(baseline_major, baseline_minor, major, minor)) || \
+      (QEMU_VERSION_MICRO >= 50 && QEMU_VERSION_MINOR == 2 && \
+-      _MACHINE_VER_IS_NEXT_MAJOR_EXPIRED(cutoff, major, minor)))
 -
 -#define _MACHINE_VER_IS_EXPIRED2(cutoff, major, minor) \
 -    _MACHINE_VER_IS_EXPIRED_IMPL(cutoff, major, minor)
@@ -91,12 +131,7 @@ index 8ada4d5832..6bfc2a7961 100644
 -    _MACHINE_VER_IS_EXPIRED_IMPL(cutoff, major, minor)
 -
 -#define _MACHINE_IS_EXPIRED(cutoff, ...) \
-+    "old machine version is subject to deletion during current major Proxmox VE release"
-+
-+#define _MACHINE_VER_IS_EXPIRED_IMPL(baseline_major, baseline_minor, major, minor) \
-+    ((major < baseline_major) || \
-+     ((major == baseline_major) && \
-+      (minor < baseline_minor)))
++      _MACHINE_VER_IS_NEXT_MAJOR_EXPIRED(baseline_major, baseline_minor, major, minor)))
 +
 +#define _MACHINE_VER_IS_EXPIRED2(baseline_major, baseline_minor, major, minor) \
 +    _MACHINE_VER_IS_EXPIRED_IMPL(baseline_major, baseline_minor, major, minor)
@@ -117,7 +152,7 @@ index 8ada4d5832..6bfc2a7961 100644
  
  /*
   * Evaluates true when a machine type with (major, minor)
-@@ -680,7 +704,7 @@ struct MachineState {
+@@ -715,7 +732,7 @@ struct MachineState {
   * lifecycle rules
   */
  #define MACHINE_VER_IS_DEPRECATED(...) \
@@ -126,7 +161,7 @@ index 8ada4d5832..6bfc2a7961 100644
  
  /*
   * Evaluates true when a machine type with (major, minor)
-@@ -689,7 +713,7 @@ struct MachineState {
+@@ -724,7 +741,7 @@ struct MachineState {
   * lifecycle rules
   */
  #define MACHINE_VER_SHOULD_DELETE(...) \
diff --git a/debian/patches/pve/0051-PVE-backup-factor-out-helper-to-clear-backup-state-s.patch b/debian/patches/pve/0041-PVE-backup-factor-out-helper-to-clear-backup-state-s.patch
similarity index 98%
rename from debian/patches/pve/0051-PVE-backup-factor-out-helper-to-clear-backup-state-s.patch
rename to debian/patches/pve/0041-PVE-backup-factor-out-helper-to-clear-backup-state-s.patch
index 83aa736..6460abf 100644
--- a/debian/patches/pve/0051-PVE-backup-factor-out-helper-to-clear-backup-state-s.patch
+++ b/debian/patches/pve/0041-PVE-backup-factor-out-helper-to-clear-backup-state-s.patch
@@ -12,7 +12,7 @@ Reviewed-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
  1 file changed, 18 insertions(+), 10 deletions(-)
 
 diff --git a/pve-backup.c b/pve-backup.c
-index 9b66788ab5..588ee98ffc 100644
+index 8b83465ebd..3e0d1ffc5c 100644
 --- a/pve-backup.c
 +++ b/pve-backup.c
 @@ -811,6 +811,23 @@ err:
diff --git a/debian/patches/pve/0041-Revert-block-rbd-implement-bdrv_co_block_status.patch b/debian/patches/pve/0041-Revert-block-rbd-implement-bdrv_co_block_status.patch
deleted file mode 100644
index 9ed49f1..0000000
--- a/debian/patches/pve/0041-Revert-block-rbd-implement-bdrv_co_block_status.patch
+++ /dev/null
@@ -1,162 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Fabian Ebner <f.ebner@proxmox.com>
-Date: Tue, 17 May 2022 09:46:02 +0200
-Subject: [PATCH] Revert "block/rbd: implement bdrv_co_block_status"
-
-During backup, bdrv_co_block_status is called for each block copy
-chunk. When RBD is used, the current implementation with
-rbd_diff_iterate2() using whole_object=true takes about linearly more
-time, depending on the image size. Since there are linearly more
-chunks, the slowdown is quadratic, becoming unacceptable for large
-images (starting somewhere between 500-1000 GiB in my testing).
-
-This reverts commit 0347a8fd4c3faaedf119be04c197804be40a384b as a
-stop-gap measure, until it's clear how to make the implemenation
-more efficient.
-
-Upstream bug report:
-https://gitlab.com/qemu-project/qemu/-/issues/1026
-
-Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
-Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
----
- block/rbd.c | 112 ----------------------------------------------------
- 1 file changed, 112 deletions(-)
-
-diff --git a/block/rbd.c b/block/rbd.c
-index 931b513828..4ab9bb5e02 100644
---- a/block/rbd.c
-+++ b/block/rbd.c
-@@ -108,12 +108,6 @@ typedef struct RBDTask {
-     int64_t ret;
- } RBDTask;
- 
--typedef struct RBDDiffIterateReq {
--    uint64_t offs;
--    uint64_t bytes;
--    bool exists;
--} RBDDiffIterateReq;
--
- static int qemu_rbd_connect(rados_t *cluster, rados_ioctx_t *io_ctx,
-                             BlockdevOptionsRbd *opts, bool cache,
-                             const char *keypairs, const char *secretid,
-@@ -1460,111 +1454,6 @@ static ImageInfoSpecific *qemu_rbd_get_specific_info(BlockDriverState *bs,
-     return spec_info;
- }
- 
--/*
-- * rbd_diff_iterate2 allows to interrupt the exection by returning a negative
-- * value in the callback routine. Choose a value that does not conflict with
-- * an existing exitcode and return it if we want to prematurely stop the
-- * execution because we detected a change in the allocation status.
-- */
--#define QEMU_RBD_EXIT_DIFF_ITERATE2 -9000
--
--static int qemu_rbd_diff_iterate_cb(uint64_t offs, size_t len,
--                                    int exists, void *opaque)
--{
--    RBDDiffIterateReq *req = opaque;
--
--    assert(req->offs + req->bytes <= offs);
--    /*
--     * we do not diff against a snapshot so we should never receive a callback
--     * for a hole.
--     */
--    assert(exists);
--
--    if (!req->exists && offs > req->offs) {
--        /*
--         * we started in an unallocated area and hit the first allocated
--         * block. req->bytes must be set to the length of the unallocated area
--         * before the allocated area. stop further processing.
--         */
--        req->bytes = offs - req->offs;
--        return QEMU_RBD_EXIT_DIFF_ITERATE2;
--    }
--
--    if (req->exists && offs > req->offs + req->bytes) {
--        /*
--         * we started in an allocated area and jumped over an unallocated area,
--         * req->bytes contains the length of the allocated area before the
--         * unallocated area. stop further processing.
--         */
--        return QEMU_RBD_EXIT_DIFF_ITERATE2;
--    }
--
--    req->bytes += len;
--    req->exists = true;
--
--    return 0;
--}
--
--static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs,
--                                                 bool want_zero, int64_t offset,
--                                                 int64_t bytes, int64_t *pnum,
--                                                 int64_t *map,
--                                                 BlockDriverState **file)
--{
--    BDRVRBDState *s = bs->opaque;
--    int status, r;
--    RBDDiffIterateReq req = { .offs = offset };
--    uint64_t features, flags;
--
--    assert(offset + bytes <= s->image_size);
--
--    /* default to all sectors allocated */
--    status = BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID;
--    *map = offset;
--    *file = bs;
--    *pnum = bytes;
--
--    /* check if RBD image supports fast-diff */
--    r = rbd_get_features(s->image, &features);
--    if (r < 0) {
--        return status;
--    }
--    if (!(features & RBD_FEATURE_FAST_DIFF)) {
--        return status;
--    }
--
--    /* check if RBD fast-diff result is valid */
--    r = rbd_get_flags(s->image, &flags);
--    if (r < 0) {
--        return status;
--    }
--    if (flags & RBD_FLAG_FAST_DIFF_INVALID) {
--        return status;
--    }
--
--    r = rbd_diff_iterate2(s->image, NULL, offset, bytes, true, true,
--                          qemu_rbd_diff_iterate_cb, &req);
--    if (r < 0 && r != QEMU_RBD_EXIT_DIFF_ITERATE2) {
--        return status;
--    }
--    assert(req.bytes <= bytes);
--    if (!req.exists) {
--        if (r == 0) {
--            /*
--             * rbd_diff_iterate2 does not invoke callbacks for unallocated
--             * areas. This here catches the case where no callback was
--             * invoked at all (req.bytes == 0).
--             */
--            assert(req.bytes == 0);
--            req.bytes = bytes;
--        }
--        status = BDRV_BLOCK_ZERO | BDRV_BLOCK_OFFSET_VALID;
--    }
--
--    *pnum = req.bytes;
--    return status;
--}
--
- static int64_t coroutine_fn qemu_rbd_co_getlength(BlockDriverState *bs)
- {
-     BDRVRBDState *s = bs->opaque;
-@@ -1801,7 +1690,6 @@ static BlockDriver bdrv_rbd = {
- #ifdef LIBRBD_SUPPORTS_WRITE_ZEROES
-     .bdrv_co_pwrite_zeroes  = qemu_rbd_co_pwrite_zeroes,
- #endif
--    .bdrv_co_block_status   = qemu_rbd_co_block_status,
- 
-     .bdrv_snapshot_create   = qemu_rbd_snap_create,
-     .bdrv_snapshot_delete   = qemu_rbd_snap_remove,
diff --git a/debian/patches/pve/0052-PVE-backup-factor-out-helper-to-initialize-backup-st.patch b/debian/patches/pve/0042-PVE-backup-factor-out-helper-to-initialize-backup-st.patch
similarity index 98%
rename from debian/patches/pve/0052-PVE-backup-factor-out-helper-to-initialize-backup-st.patch
rename to debian/patches/pve/0042-PVE-backup-factor-out-helper-to-initialize-backup-st.patch
index 8cebc9f..7963782 100644
--- a/debian/patches/pve/0052-PVE-backup-factor-out-helper-to-initialize-backup-st.patch
+++ b/debian/patches/pve/0042-PVE-backup-factor-out-helper-to-initialize-backup-st.patch
@@ -12,7 +12,7 @@ Reviewed-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
  1 file changed, 38 insertions(+), 24 deletions(-)
 
 diff --git a/pve-backup.c b/pve-backup.c
-index 588ee98ffc..3be9930ad3 100644
+index 3e0d1ffc5c..cc71279518 100644
 --- a/pve-backup.c
 +++ b/pve-backup.c
 @@ -828,6 +828,43 @@ static void clear_backup_state_bitmap_list(void) {
diff --git a/debian/patches/pve/0053-PVE-backup-add-target-ID-in-backup-state.patch b/debian/patches/pve/0043-PVE-backup-add-target-ID-in-backup-state.patch
similarity index 98%
rename from debian/patches/pve/0053-PVE-backup-add-target-ID-in-backup-state.patch
rename to debian/patches/pve/0043-PVE-backup-add-target-ID-in-backup-state.patch
index b7d3a2c..1eef4b2 100644
--- a/debian/patches/pve/0053-PVE-backup-add-target-ID-in-backup-state.patch
+++ b/debian/patches/pve/0043-PVE-backup-add-target-ID-in-backup-state.patch
@@ -15,7 +15,7 @@ Reviewed-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
  1 file changed, 14 insertions(+), 1 deletion(-)
 
 diff --git a/pve-backup.c b/pve-backup.c
-index 3be9930ad3..87778f7e76 100644
+index cc71279518..5f0ad5042f 100644
 --- a/pve-backup.c
 +++ b/pve-backup.c
 @@ -70,6 +70,7 @@ static struct PVEBackupState {
diff --git a/debian/patches/pve/0054-PVE-backup-get-device-info-allow-caller-to-specify-f.patch b/debian/patches/pve/0044-PVE-backup-get-device-info-allow-caller-to-specify-f.patch
similarity index 98%
rename from debian/patches/pve/0054-PVE-backup-get-device-info-allow-caller-to-specify-f.patch
rename to debian/patches/pve/0044-PVE-backup-get-device-info-allow-caller-to-specify-f.patch
index 6011524..6179f3e 100644
--- a/debian/patches/pve/0054-PVE-backup-get-device-info-allow-caller-to-specify-f.patch
+++ b/debian/patches/pve/0044-PVE-backup-get-device-info-allow-caller-to-specify-f.patch
@@ -15,7 +15,7 @@ Reviewed-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
  1 file changed, 5 insertions(+), 4 deletions(-)
 
 diff --git a/pve-backup.c b/pve-backup.c
-index 87778f7e76..bd81621d51 100644
+index 5f0ad5042f..7718065c63 100644
 --- a/pve-backup.c
 +++ b/pve-backup.c
 @@ -719,7 +719,7 @@ static void create_backup_jobs_bh(void *opaque) {
diff --git a/debian/patches/pve/0044-Revert-hpet-avoid-timer-storms-on-periodic-timers.patch b/debian/patches/pve/0044-Revert-hpet-avoid-timer-storms-on-periodic-timers.patch
deleted file mode 100644
index e4bbb4b..0000000
--- a/debian/patches/pve/0044-Revert-hpet-avoid-timer-storms-on-periodic-timers.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Fiona Ebner <f.ebner@proxmox.com>
-Date: Wed, 19 Mar 2025 17:31:05 +0100
-Subject: [PATCH] Revert "hpet: avoid timer storms on periodic timers"
-
-This reverts commit 7c912ffb59e8137091894d767433e65c3df8b0bf.
-
-Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
----
- hw/timer/hpet.c | 13 ++-----------
- 1 file changed, 2 insertions(+), 11 deletions(-)
-
-diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c
-index ccb97b6806..0f45af8bbe 100644
---- a/hw/timer/hpet.c
-+++ b/hw/timer/hpet.c
-@@ -61,7 +61,6 @@ typedef struct HPETTimer {  /* timers */
-     uint8_t wrap_flag;      /* timer pop will indicate wrap for one-shot 32-bit
-                              * mode. Next pop will be actual timer expiration.
-                              */
--    uint64_t last;          /* last value armed, to avoid timer storms */
- } HPETTimer;
- 
- struct HPETState {
-@@ -262,7 +261,6 @@ static int hpet_post_load(void *opaque, int version_id)
-     for (i = 0; i < s->num_timers; i++) {
-         HPETTimer *t = &s->timer[i];
-         t->cmp64 = hpet_calculate_cmp64(t, s->hpet_counter, t->cmp);
--        t->last = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - NANOSECONDS_PER_SECOND;
-     }
-     /* Recalculate the offset between the main counter and guest time */
-     if (!s->hpet_offset_saved) {
-@@ -350,15 +348,8 @@ static const VMStateDescription vmstate_hpet = {
- 
- static void hpet_arm(HPETTimer *t, uint64_t tick)
- {
--    uint64_t ns = hpet_get_ns(t->state, tick);
--
--    /* Clamp period to reasonable min value (1 us) */
--    if (timer_is_periodic(t) && ns - t->last < 1000) {
--        ns = t->last + 1000;
--    }
--
--    t->last = ns;
--    timer_mod(t->qemu_timer, ns);
-+    /* FIXME: Clamp period to reasonable min value? */
-+    timer_mod(t->qemu_timer, hpet_get_ns(t->state, tick));
- }
- 
- /*
diff --git a/debian/patches/pve/0055-PVE-backup-implement-backup-access-setup-and-teardow.patch b/debian/patches/pve/0045-PVE-backup-implement-backup-access-setup-and-teardow.patch
similarity index 99%
rename from debian/patches/pve/0055-PVE-backup-implement-backup-access-setup-and-teardow.patch
rename to debian/patches/pve/0045-PVE-backup-implement-backup-access-setup-and-teardow.patch
index 901442c..b8f3632 100644
--- a/debian/patches/pve/0055-PVE-backup-implement-backup-access-setup-and-teardow.patch
+++ b/debian/patches/pve/0045-PVE-backup-implement-backup-access-setup-and-teardow.patch
@@ -90,7 +90,7 @@ Reviewed-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
  create mode 100644 pve-backup.h
 
 diff --git a/pve-backup.c b/pve-backup.c
-index bd81621d51..0450303017 100644
+index 7718065c63..da4995d368 100644
 --- a/pve-backup.c
 +++ b/pve-backup.c
 @@ -1,4 +1,5 @@
@@ -740,10 +740,10 @@ index 0000000000..9ebeef7c8f
 +
 +#endif /* PVE_BACKUP_H */
 diff --git a/qapi/block-core.json b/qapi/block-core.json
-index ba2a13e668..07c5773717 100644
+index 7cafc96616..adb94bebb4 100644
 --- a/qapi/block-core.json
 +++ b/qapi/block-core.json
-@@ -1023,6 +1023,9 @@
+@@ -1047,6 +1047,9 @@
  #
  # @pbs-library-version: Running version of libproxmox-backup-qemu0 library.
  #
@@ -753,7 +753,7 @@ index ba2a13e668..07c5773717 100644
  # @backup-fleecing: Whether backup fleecing is supported or not.
  #
  # @backup-max-workers: Whether the 'max-workers' @BackupPerf setting is
-@@ -1036,6 +1039,7 @@
+@@ -1060,6 +1063,7 @@
              'pbs-dirty-bitmap-migration': 'bool',
              'pbs-masterkey': 'bool',
              'pbs-library-version': 'str',
@@ -761,7 +761,7 @@ index ba2a13e668..07c5773717 100644
              'backup-fleecing': 'bool',
              'backup-max-workers': 'bool' } }
  
-@@ -1067,9 +1071,16 @@
+@@ -1091,9 +1095,16 @@
  #           base snapshot did not match the base given for the current job or
  #           the crypt mode has changed.
  #
@@ -779,7 +779,7 @@ index ba2a13e668..07c5773717 100644
  
  ##
  # @PBSBitmapInfo:
-@@ -1102,6 +1113,92 @@
+@@ -1126,6 +1137,92 @@
  ##
  { 'command': 'query-pbs-bitmap-info', 'returns': ['PBSBitmapInfo'] }
  
@@ -873,7 +873,7 @@ index ba2a13e668..07c5773717 100644
  # @BlockDeviceTimedStats:
  #
 diff --git a/system/runstate.c b/system/runstate.c
-index 272801d307..cf775213bd 100644
+index 6178b0091a..5f370ddb60 100644
 --- a/system/runstate.c
 +++ b/system/runstate.c
 @@ -60,6 +60,7 @@
@@ -884,7 +884,7 @@ index 272801d307..cf775213bd 100644
  
  static NotifierList exit_notifiers =
      NOTIFIER_LIST_INITIALIZER(exit_notifiers);
-@@ -921,6 +922,11 @@ void qemu_cleanup(int status)
+@@ -991,6 +992,11 @@ void qemu_cleanup(int status)
       * requests happening from here on anyway.
       */
      bdrv_drain_all_begin();
diff --git a/debian/patches/pve/0045-Revert-hpet-store-full-64-bit-target-value-of-the-co.patch b/debian/patches/pve/0045-Revert-hpet-store-full-64-bit-target-value-of-the-co.patch
deleted file mode 100644
index c366356..0000000
--- a/debian/patches/pve/0045-Revert-hpet-store-full-64-bit-target-value-of-the-co.patch
+++ /dev/null
@@ -1,202 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Fiona Ebner <f.ebner@proxmox.com>
-Date: Wed, 19 Mar 2025 17:31:08 +0100
-Subject: [PATCH] Revert "hpet: store full 64-bit target value of the counter"
-
-This reverts commit 242d665396407f83a6acbffc804882eeb21cfdad.
-
-Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
----
- hw/timer/hpet.c | 109 +++++++++++++++++++++++++++---------------------
- 1 file changed, 61 insertions(+), 48 deletions(-)
-
-diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c
-index 0f45af8bbe..635a060d38 100644
---- a/hw/timer/hpet.c
-+++ b/hw/timer/hpet.c
-@@ -56,7 +56,6 @@ typedef struct HPETTimer {  /* timers */
-     uint64_t cmp;           /* comparator */
-     uint64_t fsb;           /* FSB route */
-     /* Hidden register state */
--    uint64_t cmp64;         /* comparator (extended to counter width) */
-     uint64_t period;        /* Last value written to comparator */
-     uint8_t wrap_flag;      /* timer pop will indicate wrap for one-shot 32-bit
-                              * mode. Next pop will be actual timer expiration.
-@@ -119,6 +118,11 @@ static uint32_t timer_enabled(HPETTimer *t)
- }
- 
- static uint32_t hpet_time_after(uint64_t a, uint64_t b)
-+{
-+    return ((int32_t)(b - a) < 0);
-+}
-+
-+static uint32_t hpet_time_after64(uint64_t a, uint64_t b)
- {
-     return ((int64_t)(b - a) < 0);
- }
-@@ -155,32 +159,27 @@ static uint64_t hpet_get_ticks(HPETState *s)
-     return ns_to_ticks(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + s->hpet_offset);
- }
- 
--static uint64_t hpet_get_ns(HPETState *s, uint64_t tick)
--{
--    return ticks_to_ns(tick) - s->hpet_offset;
--}
--
- /*
-- * calculate next value of the general counter that matches the
-- * target (either entirely, or the low 32-bit only depending on
-- * the timer mode).
-+ * calculate diff between comparator value and current ticks
-  */
--static uint64_t hpet_calculate_cmp64(HPETTimer *t, uint64_t cur_tick, uint64_t target)
-+static inline uint64_t hpet_calculate_diff(HPETTimer *t, uint64_t current)
- {
-+
-     if (t->config & HPET_TN_32BIT) {
--        uint64_t result = deposit64(cur_tick, 0, 32, target);
--        if (result < cur_tick) {
--            result += 0x100000000ULL;
--        }
--        return result;
-+        uint32_t diff, cmp;
-+
-+        cmp = (uint32_t)t->cmp;
-+        diff = cmp - (uint32_t)current;
-+        diff = (int32_t)diff > 0 ? diff : (uint32_t)1;
-+        return (uint64_t)diff;
-     } else {
--        return target;
--    }
--}
-+        uint64_t diff, cmp;
- 
--static uint64_t hpet_next_wrap(uint64_t cur_tick)
--{
--    return (cur_tick | 0xffffffffU) + 1;
-+        cmp = t->cmp;
-+        diff = cmp - current;
-+        diff = (int64_t)diff > 0 ? diff : (uint64_t)1;
-+        return diff;
-+    }
- }
- 
- static void update_irq(struct HPETTimer *timer, int set)
-@@ -256,12 +255,7 @@ static bool hpet_validate_num_timers(void *opaque, int version_id)
- static int hpet_post_load(void *opaque, int version_id)
- {
-     HPETState *s = opaque;
--    int i;
- 
--    for (i = 0; i < s->num_timers; i++) {
--        HPETTimer *t = &s->timer[i];
--        t->cmp64 = hpet_calculate_cmp64(t, s->hpet_counter, t->cmp);
--    }
-     /* Recalculate the offset between the main counter and guest time */
-     if (!s->hpet_offset_saved) {
-         s->hpet_offset = ticks_to_ns(s->hpet_counter)
-@@ -346,10 +340,14 @@ static const VMStateDescription vmstate_hpet = {
-     }
- };
- 
--static void hpet_arm(HPETTimer *t, uint64_t tick)
-+static void hpet_arm(HPETTimer *t, uint64_t ticks)
- {
--    /* FIXME: Clamp period to reasonable min value? */
--    timer_mod(t->qemu_timer, hpet_get_ns(t->state, tick));
-+    if (ticks < ns_to_ticks(INT64_MAX / 2)) {
-+        timer_mod(t->qemu_timer,
-+                  qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + ticks_to_ns(ticks));
-+    } else {
-+        timer_del(t->qemu_timer);
-+    }
- }
- 
- /*
-@@ -358,44 +356,54 @@ static void hpet_arm(HPETTimer *t, uint64_t tick)
- static void hpet_timer(void *opaque)
- {
-     HPETTimer *t = opaque;
-+    uint64_t diff;
-+
-     uint64_t period = t->period;
-     uint64_t cur_tick = hpet_get_ticks(t->state);
- 
-     if (timer_is_periodic(t) && period != 0) {
--        while (hpet_time_after(cur_tick, t->cmp64)) {
--            t->cmp64 += period;
--        }
-         if (t->config & HPET_TN_32BIT) {
--            t->cmp = (uint32_t)t->cmp64;
-+            while (hpet_time_after(cur_tick, t->cmp)) {
-+                t->cmp = (uint32_t)(t->cmp + t->period);
-+            }
-         } else {
--            t->cmp = t->cmp64;
-+            while (hpet_time_after64(cur_tick, t->cmp)) {
-+                t->cmp += period;
-+            }
-+        }
-+        diff = hpet_calculate_diff(t, cur_tick);
-+        hpet_arm(t, diff);
-+    } else if (t->config & HPET_TN_32BIT && !timer_is_periodic(t)) {
-+        if (t->wrap_flag) {
-+            diff = hpet_calculate_diff(t, cur_tick);
-+            hpet_arm(t, diff);
-+            t->wrap_flag = 0;
-         }
--        hpet_arm(t, t->cmp64);
--    } else if (t->wrap_flag) {
--        t->wrap_flag = 0;
--        hpet_arm(t, t->cmp64);
-     }
-     update_irq(t, 1);
- }
- 
- static void hpet_set_timer(HPETTimer *t)
- {
-+    uint64_t diff;
-+    uint32_t wrap_diff;  /* how many ticks until we wrap? */
-     uint64_t cur_tick = hpet_get_ticks(t->state);
- 
-+    /* whenever new timer is being set up, make sure wrap_flag is 0 */
-     t->wrap_flag = 0;
--    t->cmp64 = hpet_calculate_cmp64(t, cur_tick, t->cmp);
--    if (t->config & HPET_TN_32BIT) {
-+    diff = hpet_calculate_diff(t, cur_tick);
- 
--        /* hpet spec says in one-shot 32-bit mode, generate an interrupt when
--         * counter wraps in addition to an interrupt with comparator match.
--         */
--        if (!timer_is_periodic(t) && t->cmp64 > hpet_next_wrap(cur_tick)) {
-+    /* hpet spec says in one-shot 32-bit mode, generate an interrupt when
-+     * counter wraps in addition to an interrupt with comparator match.
-+     */
-+    if (t->config & HPET_TN_32BIT && !timer_is_periodic(t)) {
-+        wrap_diff = 0xffffffff - (uint32_t)cur_tick;
-+        if (wrap_diff < (uint32_t)diff) {
-+            diff = wrap_diff;
-             t->wrap_flag = 1;
--            hpet_arm(t, hpet_next_wrap(cur_tick));
--            return;
-         }
-     }
--    hpet_arm(t, t->cmp64);
-+    hpet_arm(t, diff);
- }
- 
- static void hpet_del_timer(HPETTimer *t)
-@@ -526,7 +534,12 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-                 timer->cmp = deposit64(timer->cmp, shift, len, value);
-             }
-             if (timer_is_periodic(timer)) {
--                timer->period = deposit64(timer->period, shift, len, value);
-+                /*
-+                 * FIXME: Clamp period to reasonable min value?
-+                 * Clamp period to reasonable max value
-+                 */
-+                new_val = deposit64(timer->period, shift, len, value);
-+                timer->period = MIN(new_val, (timer->config & HPET_TN_32BIT ? ~0u : ~0ull) >> 1);
-             }
-             timer->config &= ~HPET_TN_SETVAL;
-             if (hpet_enabled(s)) {
diff --git a/debian/patches/pve/0056-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch b/debian/patches/pve/0046-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch
similarity index 99%
rename from debian/patches/pve/0056-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch
rename to debian/patches/pve/0046-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch
index 6d4bfe1..f5315b7 100644
--- a/debian/patches/pve/0056-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch
+++ b/debian/patches/pve/0046-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch
@@ -21,7 +21,7 @@ Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
  1 file changed, 39 insertions(+), 12 deletions(-)
 
 diff --git a/pve-backup.c b/pve-backup.c
-index 0450303017..457fcb7e5c 100644
+index da4995d368..ad0f8668fd 100644
 --- a/pve-backup.c
 +++ b/pve-backup.c
 @@ -847,29 +847,56 @@ static PVEBackupDevInfo coroutine_fn GRAPH_RDLOCK *get_single_device_info(
diff --git a/debian/patches/pve/0046-Revert-hpet-accept-64-bit-reads-and-writes.patch b/debian/patches/pve/0046-Revert-hpet-accept-64-bit-reads-and-writes.patch
deleted file mode 100644
index 37d8d3a..0000000
--- a/debian/patches/pve/0046-Revert-hpet-accept-64-bit-reads-and-writes.patch
+++ /dev/null
@@ -1,281 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Fiona Ebner <f.ebner@proxmox.com>
-Date: Wed, 19 Mar 2025 17:31:09 +0100
-Subject: [PATCH] Revert "hpet: accept 64-bit reads and writes"
-
-This reverts commit c2366567378dd8fb89329816003801f54e30e6f3.
-
-Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
----
- hw/timer/hpet.c       | 137 +++++++++++++++++++++++++++++-------------
- hw/timer/trace-events |   3 +-
- 2 files changed, 96 insertions(+), 44 deletions(-)
-
-diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c
-index 635a060d38..5f4bb5667d 100644
---- a/hw/timer/hpet.c
-+++ b/hw/timer/hpet.c
-@@ -421,7 +421,6 @@ static uint64_t hpet_ram_read(void *opaque, hwaddr addr,
-                               unsigned size)
- {
-     HPETState *s = opaque;
--    int shift = (addr & 4) * 8;
-     uint64_t cur_tick;
- 
-     trace_hpet_ram_read(addr);
-@@ -436,33 +435,52 @@ static uint64_t hpet_ram_read(void *opaque, hwaddr addr,
-             return 0;
-         }
- 
--        switch (addr & 0x18) {
--        case HPET_TN_CFG: // including interrupt capabilities
--            return timer->config >> shift;
-+        switch ((addr - 0x100) % 0x20) {
-+        case HPET_TN_CFG:
-+            return timer->config;
-+        case HPET_TN_CFG + 4: // Interrupt capabilities
-+            return timer->config >> 32;
-         case HPET_TN_CMP: // comparator register
--            return timer->cmp >> shift;
-+            return timer->cmp;
-+        case HPET_TN_CMP + 4:
-+            return timer->cmp >> 32;
-         case HPET_TN_ROUTE:
--            return timer->fsb >> shift;
-+            return timer->fsb;
-+        case HPET_TN_ROUTE + 4:
-+            return timer->fsb >> 32;
-         default:
-             trace_hpet_ram_read_invalid();
-             break;
-         }
-     } else {
--        switch (addr & ~4) {
--        case HPET_ID: // including HPET_PERIOD
--            return s->capability >> shift;
-+        switch (addr) {
-+        case HPET_ID:
-+            return s->capability;
-+        case HPET_PERIOD:
-+            return s->capability >> 32;
-         case HPET_CFG:
--            return s->config >> shift;
-+            return s->config;
-+        case HPET_CFG + 4:
-+            trace_hpet_invalid_hpet_cfg(4);
-+            return 0;
-         case HPET_COUNTER:
-             if (hpet_enabled(s)) {
-                 cur_tick = hpet_get_ticks(s);
-             } else {
-                 cur_tick = s->hpet_counter;
-             }
--            trace_hpet_ram_read_reading_counter(addr & 4, cur_tick);
--            return cur_tick >> shift;
-+            trace_hpet_ram_read_reading_counter(0, cur_tick);
-+            return cur_tick;
-+        case HPET_COUNTER + 4:
-+            if (hpet_enabled(s)) {
-+                cur_tick = hpet_get_ticks(s);
-+            } else {
-+                cur_tick = s->hpet_counter;
-+            }
-+            trace_hpet_ram_read_reading_counter(4, cur_tick);
-+            return cur_tick >> 32;
-         case HPET_STATUS:
--            return s->isr >> shift;
-+            return s->isr;
-         default:
-             trace_hpet_ram_read_invalid();
-             break;
-@@ -476,11 +494,11 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
- {
-     int i;
-     HPETState *s = opaque;
--    int shift = (addr & 4) * 8;
--    int len = MIN(size * 8, 64 - shift);
-     uint64_t old_val, new_val, cleared;
- 
-     trace_hpet_ram_write(addr, value);
-+    old_val = hpet_ram_read(opaque, addr, 4);
-+    new_val = value;
- 
-     /*address range of all TN regs*/
-     if (addr >= 0x100 && addr <= 0x3ff) {
-@@ -492,12 +510,9 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-             trace_hpet_timer_id_out_of_range(timer_id);
-             return;
-         }
--        switch (addr & 0x18) {
-+        switch ((addr - 0x100) % 0x20) {
-         case HPET_TN_CFG:
--            trace_hpet_ram_write_tn_cfg(addr & 4);
--            old_val = timer->config;
--            new_val = deposit64(old_val, shift, len, value);
--            new_val = hpet_fixup_reg(new_val, old_val, HPET_TN_CFG_WRITE_MASK);
-+            trace_hpet_ram_write_tn_cfg();
-             if (deactivating_bit(old_val, new_val, HPET_TN_TYPE_LEVEL)) {
-                 /*
-                  * Do this before changing timer->config; otherwise, if
-@@ -505,7 +520,8 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-                  */
-                 update_irq(timer, 0);
-             }
--            timer->config = new_val;
-+            new_val = hpet_fixup_reg(new_val, old_val, HPET_TN_CFG_WRITE_MASK);
-+            timer->config = (timer->config & 0xffffffff00000000ULL) | new_val;
-             if (activating_bit(old_val, new_val, HPET_TN_ENABLE)
-                 && (s->isr & (1 << timer_id))) {
-                 update_irq(timer, 1);
-@@ -518,28 +534,56 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-                 hpet_set_timer(timer);
-             }
-             break;
-+        case HPET_TN_CFG + 4: // Interrupt capabilities
-+            trace_hpet_ram_write_invalid_tn_cfg(4);
-+            break;
-         case HPET_TN_CMP: // comparator register
-+            trace_hpet_ram_write_tn_cmp(0);
-             if (timer->config & HPET_TN_32BIT) {
--                /* High 32-bits are zero, leave them untouched.  */
--                if (shift) {
--                    trace_hpet_ram_write_invalid_tn_cmp();
--                    break;
-+                new_val = (uint32_t)new_val;
-+            }
-+            if (!timer_is_periodic(timer)
-+                || (timer->config & HPET_TN_SETVAL)) {
-+                timer->cmp = (timer->cmp & 0xffffffff00000000ULL) | new_val;
-+            }
-+            if (timer_is_periodic(timer)) {
-+                /*
-+                 * FIXME: Clamp period to reasonable min value?
-+                 * Clamp period to reasonable max value
-+                 */
-+                if (timer->config & HPET_TN_32BIT) {
-+                    new_val = MIN(new_val, ~0u >> 1);
-                 }
--                len = 64;
--                value = (uint32_t) value;
-+                timer->period =
-+                    (timer->period & 0xffffffff00000000ULL) | new_val;
-+            }
-+            /*
-+             * FIXME: on a 64-bit write, HPET_TN_SETVAL should apply to the
-+             * high bits part as well.
-+             */
-+            timer->config &= ~HPET_TN_SETVAL;
-+            if (hpet_enabled(s)) {
-+                hpet_set_timer(timer);
-             }
--            trace_hpet_ram_write_tn_cmp(addr & 4);
-+            break;
-+        case HPET_TN_CMP + 4: // comparator register high order
-+            if (timer->config & HPET_TN_32BIT) {
-+                trace_hpet_ram_write_invalid_tn_cmp();
-+                break;
-+            }
-+            trace_hpet_ram_write_tn_cmp(4);
-             if (!timer_is_periodic(timer)
-                 || (timer->config & HPET_TN_SETVAL)) {
--                timer->cmp = deposit64(timer->cmp, shift, len, value);
-+                timer->cmp = (timer->cmp & 0xffffffffULL) | new_val << 32;
-             }
-             if (timer_is_periodic(timer)) {
-                 /*
-                  * FIXME: Clamp period to reasonable min value?
-                  * Clamp period to reasonable max value
-                  */
--                new_val = deposit64(timer->period, shift, len, value);
--                timer->period = MIN(new_val, (timer->config & HPET_TN_32BIT ? ~0u : ~0ull) >> 1);
-+                new_val = MIN(new_val, ~0u >> 1);
-+                timer->period =
-+                    (timer->period & 0xffffffffULL) | new_val << 32;
-             }
-             timer->config &= ~HPET_TN_SETVAL;
-             if (hpet_enabled(s)) {
-@@ -547,7 +591,10 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-             }
-             break;
-         case HPET_TN_ROUTE:
--            timer->fsb = deposit64(timer->fsb, shift, len, value);
-+            timer->fsb = (timer->fsb & 0xffffffff00000000ULL) | new_val;
-+            break;
-+        case HPET_TN_ROUTE + 4:
-+            timer->fsb = (new_val << 32) | (timer->fsb & 0xffffffff);
-             break;
-         default:
-             trace_hpet_ram_write_invalid();
-@@ -555,14 +602,12 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-         }
-         return;
-     } else {
--        switch (addr & ~4) {
-+        switch (addr) {
-         case HPET_ID:
-             return;
-         case HPET_CFG:
--            old_val = s->config;
--            new_val = deposit64(old_val, shift, len, value);
-             new_val = hpet_fixup_reg(new_val, old_val, HPET_CFG_WRITE_MASK);
--            s->config = new_val;
-+            s->config = (s->config & 0xffffffff00000000ULL) | new_val;
-             if (activating_bit(old_val, new_val, HPET_CFG_ENABLE)) {
-                 /* Enable main counter and interrupt generation. */
-                 s->hpet_offset =
-@@ -592,8 +637,10 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-                 qemu_set_irq(s->irqs[RTC_ISA_IRQ], s->rtc_irq_level);
-             }
-             break;
-+        case HPET_CFG + 4:
-+            trace_hpet_invalid_hpet_cfg(4);
-+            break;
-         case HPET_STATUS:
--            new_val = value << shift;
-             cleared = new_val & s->isr;
-             for (i = 0; i < s->num_timers; i++) {
-                 if (cleared & (1 << i)) {
-@@ -605,7 +652,15 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-             if (hpet_enabled(s)) {
-                 trace_hpet_ram_write_counter_write_while_enabled();
-             }
--            s->hpet_counter = deposit64(s->hpet_counter, shift, len, value);
-+            s->hpet_counter =
-+                (s->hpet_counter & 0xffffffff00000000ULL) | value;
-+            trace_hpet_ram_write_counter_written(0, value, s->hpet_counter);
-+            break;
-+        case HPET_COUNTER + 4:
-+            trace_hpet_ram_write_counter_write_while_enabled();
-+            s->hpet_counter =
-+                (s->hpet_counter & 0xffffffffULL) | (((uint64_t)value) << 32);
-+            trace_hpet_ram_write_counter_written(4, value, s->hpet_counter);
-             break;
-         default:
-             trace_hpet_ram_write_invalid();
-@@ -619,11 +674,7 @@ static const MemoryRegionOps hpet_ram_ops = {
-     .write = hpet_ram_write,
-     .valid = {
-         .min_access_size = 4,
--        .max_access_size = 8,
--    },
--    .impl = {
--        .min_access_size = 4,
--        .max_access_size = 8,
-+        .max_access_size = 4,
-     },
-     .endianness = DEVICE_NATIVE_ENDIAN,
- };
-diff --git a/hw/timer/trace-events b/hw/timer/trace-events
-index c5b6db49f5..dd8a53c690 100644
---- a/hw/timer/trace-events
-+++ b/hw/timer/trace-events
-@@ -114,7 +114,8 @@ hpet_ram_read_reading_counter(uint8_t reg_off, uint64_t cur_tick) "reading count
- hpet_ram_read_invalid(void) "invalid hpet_ram_readl"
- hpet_ram_write(uint64_t addr, uint64_t value) "enter hpet_ram_writel at 0x%" PRIx64 " = 0x%" PRIx64
- hpet_ram_write_timer_id(uint64_t timer_id) "hpet_ram_writel timer_id = 0x%" PRIx64
--hpet_ram_write_tn_cfg(uint8_t reg_off) "hpet_ram_writel HPET_TN_CFG + %" PRIu8
-+hpet_ram_write_tn_cfg(void) "hpet_ram_writel HPET_TN_CFG"
-+hpet_ram_write_invalid_tn_cfg(uint8_t reg_off) "invalid HPET_TN_CFG + %" PRIu8 " write"
- hpet_ram_write_tn_cmp(uint8_t reg_off) "hpet_ram_writel HPET_TN_CMP + %" PRIu8
- hpet_ram_write_invalid_tn_cmp(void) "invalid HPET_TN_CMP + 4 write"
- hpet_ram_write_invalid(void) "invalid hpet_ram_writel"
diff --git a/debian/patches/pve/0047-Revert-hpet-place-read-only-bits-directly-in-new_val.patch b/debian/patches/pve/0047-Revert-hpet-place-read-only-bits-directly-in-new_val.patch
deleted file mode 100644
index 8742f85..0000000
--- a/debian/patches/pve/0047-Revert-hpet-place-read-only-bits-directly-in-new_val.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Fiona Ebner <f.ebner@proxmox.com>
-Date: Wed, 19 Mar 2025 17:31:10 +0100
-Subject: [PATCH] Revert "hpet: place read-only bits directly in "new_val""
-
-This reverts commit ba88935b0fac2588b0a739f810b58dfabf7f92c8.
-
-Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
----
- hw/timer/hpet.c | 15 ++++++++-------
- 1 file changed, 8 insertions(+), 7 deletions(-)
-
-diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c
-index 5f4bb5667d..5e3bf1f153 100644
---- a/hw/timer/hpet.c
-+++ b/hw/timer/hpet.c
-@@ -494,7 +494,7 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
- {
-     int i;
-     HPETState *s = opaque;
--    uint64_t old_val, new_val, cleared;
-+    uint64_t old_val, new_val, val;
- 
-     trace_hpet_ram_write(addr, value);
-     old_val = hpet_ram_read(opaque, addr, 4);
-@@ -520,12 +520,13 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-                  */
-                 update_irq(timer, 0);
-             }
--            new_val = hpet_fixup_reg(new_val, old_val, HPET_TN_CFG_WRITE_MASK);
--            timer->config = (timer->config & 0xffffffff00000000ULL) | new_val;
-+            val = hpet_fixup_reg(new_val, old_val, HPET_TN_CFG_WRITE_MASK);
-+            timer->config = (timer->config & 0xffffffff00000000ULL) | val;
-             if (activating_bit(old_val, new_val, HPET_TN_ENABLE)
-                 && (s->isr & (1 << timer_id))) {
-                 update_irq(timer, 1);
-             }
-+
-             if (new_val & HPET_TN_32BIT) {
-                 timer->cmp = (uint32_t)timer->cmp;
-                 timer->period = (uint32_t)timer->period;
-@@ -606,8 +607,8 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-         case HPET_ID:
-             return;
-         case HPET_CFG:
--            new_val = hpet_fixup_reg(new_val, old_val, HPET_CFG_WRITE_MASK);
--            s->config = (s->config & 0xffffffff00000000ULL) | new_val;
-+            val = hpet_fixup_reg(new_val, old_val, HPET_CFG_WRITE_MASK);
-+            s->config = (s->config & 0xffffffff00000000ULL) | val;
-             if (activating_bit(old_val, new_val, HPET_CFG_ENABLE)) {
-                 /* Enable main counter and interrupt generation. */
-                 s->hpet_offset =
-@@ -641,9 +642,9 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-             trace_hpet_invalid_hpet_cfg(4);
-             break;
-         case HPET_STATUS:
--            cleared = new_val & s->isr;
-+            val = new_val & s->isr;
-             for (i = 0; i < s->num_timers; i++) {
--                if (cleared & (1 << i)) {
-+                if (val & (1 << i)) {
-                     update_irq(&s->timer[i], 0);
-                 }
-             }
diff --git a/debian/patches/pve/0058-savevm-async-reuse-migration-blocker-check-for-snaps.patch b/debian/patches/pve/0047-savevm-async-reuse-migration-blocker-check-for-snaps.patch
similarity index 96%
rename from debian/patches/pve/0058-savevm-async-reuse-migration-blocker-check-for-snaps.patch
rename to debian/patches/pve/0047-savevm-async-reuse-migration-blocker-check-for-snaps.patch
index efb6b8a..eb21d75 100644
--- a/debian/patches/pve/0058-savevm-async-reuse-migration-blocker-check-for-snaps.patch
+++ b/debian/patches/pve/0047-savevm-async-reuse-migration-blocker-check-for-snaps.patch
@@ -61,10 +61,10 @@ Message-ID: <20250618102531.57444-1-f.ebner@proxmox.com>
  5 files changed, 29 insertions(+), 4 deletions(-)
 
 diff --git a/block/vmdk.c b/block/vmdk.c
-index 2adec49912..80696a8d27 100644
+index 7b98debc2b..2af32f3d5d 100644
 --- a/block/vmdk.c
 +++ b/block/vmdk.c
-@@ -1402,9 +1402,7 @@ static int vmdk_open(BlockDriverState *bs, QDict *options, int flags,
+@@ -1404,9 +1404,7 @@ static int vmdk_open(BlockDriverState *bs, QDict *options, int flags,
      qemu_co_mutex_init(&s->lock);
  
      /* Disable migration when VMDK images are used */
@@ -89,10 +89,10 @@ index a687ac0efe..f36bfb2df1 100644
   * @migrate_add_blocker - prevent all modes of migration from proceeding
   *
 diff --git a/migration/migration.c b/migration/migration.c
-index 2f3430f440..ecad1aca32 100644
+index b58cbdc2c0..594e253a8a 100644
 --- a/migration/migration.c
 +++ b/migration/migration.c
-@@ -2030,6 +2030,30 @@ bool migration_is_blocked(Error **errp)
+@@ -2055,6 +2055,30 @@ bool migration_is_blocked(Error **errp)
      return false;
  }
  
@@ -124,7 +124,7 @@ index 2f3430f440..ecad1aca32 100644
  static bool migrate_prepare(MigrationState *s, bool resume, Error **errp)
  {
 diff --git a/migration/migration.h b/migration/migration.h
-index d53f7cad84..b772073572 100644
+index 01329bf824..a805e98a30 100644
 --- a/migration/migration.h
 +++ b/migration/migration.h
 @@ -531,6 +531,7 @@ int migration_call_notifiers(MigrationState *s, MigrationEventType type,
diff --git a/debian/patches/pve/0048-Revert-hpet-remove-unnecessary-variable-index.patch b/debian/patches/pve/0048-Revert-hpet-remove-unnecessary-variable-index.patch
deleted file mode 100644
index d962aeb..0000000
--- a/debian/patches/pve/0048-Revert-hpet-remove-unnecessary-variable-index.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Fiona Ebner <f.ebner@proxmox.com>
-Date: Wed, 19 Mar 2025 17:31:11 +0100
-Subject: [PATCH] Revert "hpet: remove unnecessary variable "index""
-
-This reverts commit 5895879aca252f4ebb2d1078eaf836c61ec54e9b.
-
-Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
----
- hw/timer/hpet.c | 15 ++++++++-------
- 1 file changed, 8 insertions(+), 7 deletions(-)
-
-diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c
-index 5e3bf1f153..daef12c8cf 100644
---- a/hw/timer/hpet.c
-+++ b/hw/timer/hpet.c
-@@ -421,12 +421,12 @@ static uint64_t hpet_ram_read(void *opaque, hwaddr addr,
-                               unsigned size)
- {
-     HPETState *s = opaque;
--    uint64_t cur_tick;
-+    uint64_t cur_tick, index;
- 
-     trace_hpet_ram_read(addr);
--
-+    index = addr;
-     /*address range of all TN regs*/
--    if (addr >= 0x100 && addr <= 0x3ff) {
-+    if (index >= 0x100 && index <= 0x3ff) {
-         uint8_t timer_id = (addr - 0x100) / 0x20;
-         HPETTimer *timer = &s->timer[timer_id];
- 
-@@ -453,7 +453,7 @@ static uint64_t hpet_ram_read(void *opaque, hwaddr addr,
-             break;
-         }
-     } else {
--        switch (addr) {
-+        switch (index) {
-         case HPET_ID:
-             return s->capability;
-         case HPET_PERIOD:
-@@ -494,14 +494,15 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
- {
-     int i;
-     HPETState *s = opaque;
--    uint64_t old_val, new_val, val;
-+    uint64_t old_val, new_val, val, index;
- 
-     trace_hpet_ram_write(addr, value);
-+    index = addr;
-     old_val = hpet_ram_read(opaque, addr, 4);
-     new_val = value;
- 
-     /*address range of all TN regs*/
--    if (addr >= 0x100 && addr <= 0x3ff) {
-+    if (index >= 0x100 && index <= 0x3ff) {
-         uint8_t timer_id = (addr - 0x100) / 0x20;
-         HPETTimer *timer = &s->timer[timer_id];
- 
-@@ -603,7 +604,7 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-         }
-         return;
-     } else {
--        switch (addr) {
-+        switch (index) {
-         case HPET_ID:
-             return;
-         case HPET_CFG:
diff --git a/debian/patches/pve/0049-Revert-hpet-ignore-high-bits-of-comparator-in-32-bit.patch b/debian/patches/pve/0049-Revert-hpet-ignore-high-bits-of-comparator-in-32-bit.patch
deleted file mode 100644
index e09c8ba..0000000
--- a/debian/patches/pve/0049-Revert-hpet-ignore-high-bits-of-comparator-in-32-bit.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Fiona Ebner <f.ebner@proxmox.com>
-Date: Wed, 19 Mar 2025 17:31:12 +0100
-Subject: [PATCH] Revert "hpet: ignore high bits of comparator in 32-bit mode"
-
-This reverts commit 9eb7fad3546a89ee7cf0e90f5b1daccf89725cea.
-
-Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
----
- hw/timer/hpet.c       | 4 ----
- hw/timer/trace-events | 1 -
- 2 files changed, 5 deletions(-)
-
-diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c
-index daef12c8cf..927263e2ff 100644
---- a/hw/timer/hpet.c
-+++ b/hw/timer/hpet.c
-@@ -569,10 +569,6 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-             }
-             break;
-         case HPET_TN_CMP + 4: // comparator register high order
--            if (timer->config & HPET_TN_32BIT) {
--                trace_hpet_ram_write_invalid_tn_cmp();
--                break;
--            }
-             trace_hpet_ram_write_tn_cmp(4);
-             if (!timer_is_periodic(timer)
-                 || (timer->config & HPET_TN_SETVAL)) {
-diff --git a/hw/timer/trace-events b/hw/timer/trace-events
-index dd8a53c690..2b81ee0812 100644
---- a/hw/timer/trace-events
-+++ b/hw/timer/trace-events
-@@ -117,7 +117,6 @@ hpet_ram_write_timer_id(uint64_t timer_id) "hpet_ram_writel timer_id = 0x%" PRIx
- hpet_ram_write_tn_cfg(void) "hpet_ram_writel HPET_TN_CFG"
- hpet_ram_write_invalid_tn_cfg(uint8_t reg_off) "invalid HPET_TN_CFG + %" PRIu8 " write"
- hpet_ram_write_tn_cmp(uint8_t reg_off) "hpet_ram_writel HPET_TN_CMP + %" PRIu8
--hpet_ram_write_invalid_tn_cmp(void) "invalid HPET_TN_CMP + 4 write"
- hpet_ram_write_invalid(void) "invalid hpet_ram_writel"
- hpet_ram_write_counter_write_while_enabled(void) "Writing counter while HPET enabled!"
- hpet_ram_write_counter_written(uint8_t reg_off, uint64_t value, uint64_t counter) "HPET counter + %" PRIu8 "written. crt = 0x%" PRIx64 " -> 0x%" PRIx64
diff --git a/debian/patches/pve/0050-Revert-hpet-fix-and-cleanup-persistence-of-interrupt.patch b/debian/patches/pve/0050-Revert-hpet-fix-and-cleanup-persistence-of-interrupt.patch
deleted file mode 100644
index 312df20..0000000
--- a/debian/patches/pve/0050-Revert-hpet-fix-and-cleanup-persistence-of-interrupt.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Fiona Ebner <f.ebner@proxmox.com>
-Date: Wed, 19 Mar 2025 17:31:13 +0100
-Subject: [PATCH] Revert "hpet: fix and cleanup persistence of interrupt
- status"
-
-This reverts commit f0ccf770789e48b7a73497b465fdc892d28c1339.
-
-Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
----
- hw/timer/hpet.c | 60 ++++++++++++++++---------------------------------
- 1 file changed, 19 insertions(+), 41 deletions(-)
-
-diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c
-index 927263e2ff..5aae09f166 100644
---- a/hw/timer/hpet.c
-+++ b/hw/timer/hpet.c
-@@ -199,31 +199,21 @@ static void update_irq(struct HPETTimer *timer, int set)
-     }
-     s = timer->state;
-     mask = 1 << timer->tn;
--
--    if (set && (timer->config & HPET_TN_TYPE_LEVEL)) {
--        /*
--         * If HPET_TN_ENABLE bit is 0, "the timer will still operate and
--         * generate appropriate status bits, but will not cause an interrupt"
--         */
--        s->isr |= mask;
--    } else {
-+    if (!set || !timer_enabled(timer) || !hpet_enabled(timer->state)) {
-         s->isr &= ~mask;
--    }
--
--    if (set && timer_enabled(timer) && hpet_enabled(s)) {
--        if (timer_fsb_route(timer)) {
--            address_space_stl_le(&address_space_memory, timer->fsb >> 32,
--                                 timer->fsb & 0xffffffff, MEMTXATTRS_UNSPECIFIED,
--                                 NULL);
--        } else if (timer->config & HPET_TN_TYPE_LEVEL) {
--            qemu_irq_raise(s->irqs[route]);
--        } else {
--            qemu_irq_pulse(s->irqs[route]);
--        }
--    } else {
-         if (!timer_fsb_route(timer)) {
-             qemu_irq_lower(s->irqs[route]);
-         }
-+    } else if (timer_fsb_route(timer)) {
-+        address_space_stl_le(&address_space_memory, timer->fsb >> 32,
-+                             timer->fsb & 0xffffffff, MEMTXATTRS_UNSPECIFIED,
-+                             NULL);
-+    } else if (timer->config & HPET_TN_TYPE_LEVEL) {
-+        s->isr |= mask;
-+        qemu_irq_raise(s->irqs[route]);
-+    } else {
-+        s->isr &= ~mask;
-+        qemu_irq_pulse(s->irqs[route]);
-     }
- }
- 
-@@ -408,13 +398,8 @@ static void hpet_set_timer(HPETTimer *t)
- 
- static void hpet_del_timer(HPETTimer *t)
- {
--    HPETState *s = t->state;
-     timer_del(t->qemu_timer);
--
--    if (s->isr & (1 << t->tn)) {
--        /* For level-triggered interrupt, this leaves ISR set but lowers irq.  */
--        update_irq(t, 1);
--    }
-+    update_irq(t, 0);
- }
- 
- static uint64_t hpet_ram_read(void *opaque, hwaddr addr,
-@@ -514,26 +499,20 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-         switch ((addr - 0x100) % 0x20) {
-         case HPET_TN_CFG:
-             trace_hpet_ram_write_tn_cfg();
--            if (deactivating_bit(old_val, new_val, HPET_TN_TYPE_LEVEL)) {
--                /*
--                 * Do this before changing timer->config; otherwise, if
--                 * HPET_TN_FSB is set, update_irq will not lower the qemu_irq.
--                 */
-+            if (activating_bit(old_val, new_val, HPET_TN_FSB_ENABLE)) {
-                 update_irq(timer, 0);
-             }
-             val = hpet_fixup_reg(new_val, old_val, HPET_TN_CFG_WRITE_MASK);
-             timer->config = (timer->config & 0xffffffff00000000ULL) | val;
--            if (activating_bit(old_val, new_val, HPET_TN_ENABLE)
--                && (s->isr & (1 << timer_id))) {
--                update_irq(timer, 1);
--            }
--
-             if (new_val & HPET_TN_32BIT) {
-                 timer->cmp = (uint32_t)timer->cmp;
-                 timer->period = (uint32_t)timer->period;
-             }
--            if (hpet_enabled(s)) {
-+            if (activating_bit(old_val, new_val, HPET_TN_ENABLE) &&
-+                hpet_enabled(s)) {
-                 hpet_set_timer(timer);
-+            } else if (deactivating_bit(old_val, new_val, HPET_TN_ENABLE)) {
-+                hpet_del_timer(timer);
-             }
-             break;
-         case HPET_TN_CFG + 4: // Interrupt capabilities
-@@ -611,10 +590,9 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
-                 s->hpet_offset =
-                     ticks_to_ns(s->hpet_counter) - qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
-                 for (i = 0; i < s->num_timers; i++) {
--                    if (timer_enabled(&s->timer[i]) && (s->isr & (1 << i))) {
--                        update_irq(&s->timer[i], 1);
-+                    if ((&s->timer[i])->cmp != ~0ULL) {
-+                        hpet_set_timer(&s->timer[i]);
-                     }
--                    hpet_set_timer(&s->timer[i]);
-                 }
-             } else if (deactivating_bit(old_val, new_val, HPET_CFG_ENABLE)) {
-                 /* Halt main counter and disable interrupt generation. */
diff --git a/debian/patches/pve/0057-block-qapi-include-child-references-in-block-device-.patch b/debian/patches/pve/0057-block-qapi-include-child-references-in-block-device-.patch
deleted file mode 100644
index dc33d5f..0000000
--- a/debian/patches/pve/0057-block-qapi-include-child-references-in-block-device-.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Fiona Ebner <f.ebner@proxmox.com>
-Date: Wed, 2 Jul 2025 18:27:37 +0200
-Subject: [PATCH] block/qapi: include child references in block device info
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-In combination with using a throttle filter to enforce IO limits for
-a guest device, knowing the 'file' child of a block device can be
-useful. If the throttle filter is only intended for guest IO, block
-jobs should not also be limited by the throttle filter, so the
-block operations need to be done with the 'file' child of the top
-throttle node as the target. In combination with mirroring, the name
-of that child is not fixed.
-
-Another scenario is when unplugging a guest device after mirroring
-below a top throttle node, where the mirror target is added explicitly
-via blockdev-add. After mirroring, the target becomes the new 'file'
-child of the throttle node. For unplugging, both the top throttle node
-and the mirror target need to be deleted, because only implicitly
-added child nodes are deleted automatically, and the current 'file'
-child of the throttle node was explicitly added (as the mirror
-target).
-
-In other scenarios, it could be useful to follow the backing chain.
-
-Note that iotests 191 and 273 use _filter_img_info, so the 'children'
-information is filtered out there.
-
-Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
-Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
----
- block/qapi.c               | 10 ++++++++++
- qapi/block-core.json       | 16 ++++++++++++++++
- tests/qemu-iotests/184.out |  8 ++++++++
- 3 files changed, 34 insertions(+)
-
-diff --git a/block/qapi.c b/block/qapi.c
-index 2c50a6bf3b..e08a1e970f 100644
---- a/block/qapi.c
-+++ b/block/qapi.c
-@@ -51,6 +51,8 @@ BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk,
-     ImageInfo *backing_info;
-     BlockDriverState *backing;
-     BlockDeviceInfo *info;
-+    BlockdevChildList **children_list_tail;
-+    BdrvChild *child;
- 
-     if (!bs->drv) {
-         error_setg(errp, "Block device %s is ejected", bs->node_name);
-@@ -77,6 +79,14 @@ BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk,
-         info->node_name = g_strdup(bs->node_name);
-     }
- 
-+    children_list_tail = &info->children;
-+    QLIST_FOREACH(child, &bs->children, next) {
-+        BlockdevChild *child_ref = g_new0(BlockdevChild, 1);
-+        child_ref->child = g_strdup(child->name);
-+        child_ref->node_name = g_strdup(child->bs->node_name);
-+        QAPI_LIST_APPEND(children_list_tail, child_ref);
-+    }
-+
-     backing = bdrv_cow_bs(bs);
-     if (backing) {
-         info->backing_file = g_strdup(backing->filename);
-diff --git a/qapi/block-core.json b/qapi/block-core.json
-index 07c5773717..4db27f5819 100644
---- a/qapi/block-core.json
-+++ b/qapi/block-core.json
-@@ -461,6 +461,19 @@
-             'direct': 'bool',
-             'no-flush': 'bool' } }
- 
-+##
-+# @BlockdevChild:
-+#
-+# @child: The name of the child, for example 'file' or 'backing'.
-+#
-+# @node-name: The name of the child's block driver node.
-+#
-+# Since: 10.1
-+##
-+{ 'struct': 'BlockdevChild',
-+  'data': { 'child': 'str',
-+            'node-name': 'str' } }
-+
- ##
- # @BlockDeviceInfo:
- #
-@@ -486,6 +499,8 @@
- # @backing_file_depth: number of files in the backing file chain
- #     (since: 1.2)
- #
-+# @children: Information about child block nodes. (since: 10.1)
-+#
- # @active: true if the backend is active; typical cases for inactive backends
- #     are on the migration source instance after migration completes and on the
- #     destination before it completes. (since: 10.0)
-@@ -560,6 +575,7 @@
- { 'struct': 'BlockDeviceInfo',
-   'data': { 'file': 'str', '*node-name': 'str', 'ro': 'bool', 'drv': 'str',
-             '*backing_file': 'str', 'backing_file_depth': 'int',
-+            'children': ['BlockdevChild'],
-             'active': 'bool', 'encrypted': 'bool',
-             'detect_zeroes': 'BlockdevDetectZeroesOptions',
-             'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
-diff --git a/tests/qemu-iotests/184.out b/tests/qemu-iotests/184.out
-index 52692b6b3b..ef99bb2e9a 100644
---- a/tests/qemu-iotests/184.out
-+++ b/tests/qemu-iotests/184.out
-@@ -41,6 +41,12 @@ Testing:
-             },
-             "iops_wr": 0,
-             "ro": false,
-+            "children": [
-+                {
-+                    "node-name": "disk0",
-+                    "child": "file"
-+                }
-+            ],
-             "node-name": "throttle0",
-             "backing_file_depth": 1,
-             "drv": "throttle",
-@@ -69,6 +75,8 @@ Testing:
-             },
-             "iops_wr": 0,
-             "ro": false,
-+            "children": [
-+            ],
-             "node-name": "disk0",
-             "backing_file_depth": 0,
-             "drv": "null-co",
diff --git a/debian/patches/series b/debian/patches/series
index d7cbd42..f2bf359 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -44,23 +44,12 @@ pve/0035-migration-block-dirty-bitmap-migrate-other-bitmaps-e.patch
 pve/0036-PVE-fall-back-to-open-iscsi-initiatorname.patch
 pve/0037-PVE-block-stream-increase-chunk-size.patch
 pve/0038-block-add-alloc-track-driver.patch
-pve/0039-Revert-block-rbd-workaround-for-ceph-issue-53784.patch
-pve/0040-Revert-block-rbd-fix-handling-of-holes-in-.bdrv_co_b.patch
-pve/0041-Revert-block-rbd-implement-bdrv_co_block_status.patch
-pve/0042-PVE-backup-add-fleecing-option.patch
-pve/0043-adapt-machine-version-deprecation-for-Proxmox-VE.patch
-pve/0044-Revert-hpet-avoid-timer-storms-on-periodic-timers.patch
-pve/0045-Revert-hpet-store-full-64-bit-target-value-of-the-co.patch
-pve/0046-Revert-hpet-accept-64-bit-reads-and-writes.patch
-pve/0047-Revert-hpet-place-read-only-bits-directly-in-new_val.patch
-pve/0048-Revert-hpet-remove-unnecessary-variable-index.patch
-pve/0049-Revert-hpet-ignore-high-bits-of-comparator-in-32-bit.patch
-pve/0050-Revert-hpet-fix-and-cleanup-persistence-of-interrupt.patch
-pve/0051-PVE-backup-factor-out-helper-to-clear-backup-state-s.patch
-pve/0052-PVE-backup-factor-out-helper-to-initialize-backup-st.patch
-pve/0053-PVE-backup-add-target-ID-in-backup-state.patch
-pve/0054-PVE-backup-get-device-info-allow-caller-to-specify-f.patch
-pve/0055-PVE-backup-implement-backup-access-setup-and-teardow.patch
-pve/0056-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch
-pve/0057-block-qapi-include-child-references-in-block-device-.patch
-pve/0058-savevm-async-reuse-migration-blocker-check-for-snaps.patch
+pve/0039-PVE-backup-add-fleecing-option.patch
+pve/0040-adapt-machine-version-deprecation-for-Proxmox-VE.patch
+pve/0041-PVE-backup-factor-out-helper-to-clear-backup-state-s.patch
+pve/0042-PVE-backup-factor-out-helper-to-initialize-backup-st.patch
+pve/0043-PVE-backup-add-target-ID-in-backup-state.patch
+pve/0044-PVE-backup-get-device-info-allow-caller-to-specify-f.patch
+pve/0045-PVE-backup-implement-backup-access-setup-and-teardow.patch
+pve/0046-PVE-backup-prepare-for-the-switch-to-using-blockdev-.patch
+pve/0047-savevm-async-reuse-migration-blocker-check-for-snaps.patch
diff --git a/qemu b/qemu
index ff3419c..f8b2f64 160000
--- a/qemu
+++ b/qemu
@@ -1 +1 @@
-Subproject commit ff3419cbacdc9ad0715c716afeed65bb21a2bbbc
+Subproject commit f8b2f64e2336a28bf0d50b6ef8a7d8c013e9bcf3
-- 
2.47.3



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

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

* [pve-devel] [PATCH qemu 5/5] stable fixes for QEMU 10.1.0
  2025-09-24 14:47 [pve-devel] [PATCH qemu 0/5] QEMU 10.1.0 Fiona Ebner
                   ` (3 preceding siblings ...)
  2025-09-24 14:47 ` [pve-devel] [PATCH qemu 4/5] update submodule and patches to QEMU 10.1.0 Fiona Ebner
@ 2025-09-24 14:47 ` Fiona Ebner
  4 siblings, 0 replies; 6+ messages in thread
From: Fiona Ebner @ 2025-09-24 14:47 UTC (permalink / raw)
  To: pve-devel

Most importantly, the migration fixes "target/i386: add compatibility
property for arch_capabilities" and "target/i386: add compatibility
property for pdcm feature". For more information see:
https://lore.kernel.org/all/CAATJJ0+Qq3ksRmNRDrGQLVHQ=XnsnFHxCNxUhjJfNfgwUKkDPQ@mail.gmail.com/

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 ...Trap-PMCR-when-MDCR_EL2.TPMCR-is-set.patch |  96 +++++++++++++++
 ...ish-renaming-atomic128-cas.h-headers.patch |  25 ++++
 ...l-fix-curl-internal-handles-handling.patch |  60 ++++++++++
 ...g-svm-fix-incorrect-canonicalization.patch |  38 ++++++
 ...07-hw-vfio-user-add-x-pci-class-code.patch |  35 ++++++
 .../extra/0008-tcg-arm-Fix-tgen_deposit.patch |  37 ++++++
 ...rash-from-legacy-interrupt-firing-af.patch |  58 ++++++++++
 ...quirks-when-IGD-is-not-the-primary-d.patch |  79 +++++++++++++
 ...able-SMM-cpu-address-space-under-KVM.patch | 106 +++++++++++++++++
 ...compatibility-property-for-arch_capa.patch | 109 ++++++++++++++++++
 ...compatibility-property-for-pdcm-feat.patch |  96 +++++++++++++++
 ...he-CPU-model-to-kvm64-32-instead-of-.patch |   4 +-
 debian/patches/series                         |  11 ++
 13 files changed, 752 insertions(+), 2 deletions(-)
 create mode 100644 debian/patches/extra/0003-target-arm-Trap-PMCR-when-MDCR_EL2.TPMCR-is-set.patch
 create mode 100644 debian/patches/extra/0004-qemu-atomic-Finish-renaming-atomic128-cas.h-headers.patch
 create mode 100644 debian/patches/extra/0005-block-curl-fix-curl-internal-handles-handling.patch
 create mode 100644 debian/patches/extra/0006-i386-tcg-svm-fix-incorrect-canonicalization.patch
 create mode 100644 debian/patches/extra/0007-hw-vfio-user-add-x-pci-class-code.patch
 create mode 100644 debian/patches/extra/0008-tcg-arm-Fix-tgen_deposit.patch
 create mode 100644 debian/patches/extra/0009-e1000e-Prevent-crash-from-legacy-interrupt-firing-af.patch
 create mode 100644 debian/patches/extra/0010-vfio-igd-Enable-quirks-when-IGD-is-not-the-primary-d.patch
 create mode 100644 debian/patches/extra/0011-i386-cpu-Enable-SMM-cpu-address-space-under-KVM.patch
 create mode 100644 debian/patches/extra/0012-target-i386-add-compatibility-property-for-arch_capa.patch
 create mode 100644 debian/patches/extra/0013-target-i386-add-compatibility-property-for-pdcm-feat.patch

diff --git a/debian/patches/extra/0003-target-arm-Trap-PMCR-when-MDCR_EL2.TPMCR-is-set.patch b/debian/patches/extra/0003-target-arm-Trap-PMCR-when-MDCR_EL2.TPMCR-is-set.patch
new file mode 100644
index 0000000..6c966fe
--- /dev/null
+++ b/debian/patches/extra/0003-target-arm-Trap-PMCR-when-MDCR_EL2.TPMCR-is-set.patch
@@ -0,0 +1,96 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Smail AIDER <smail.aider@huawei.com>
+Date: Tue, 26 Aug 2025 11:21:28 +0100
+Subject: [PATCH] target/arm: Trap PMCR when MDCR_EL2.TPMCR is set
+
+Trap PMCR_EL0 or PMCR accesses to EL2 when MDCR_EL2.TPMCR is set.
+Similar to MDCR_EL2.TPM, MDCR_EL2.TPMCR allows trapping EL0 and EL1
+accesses to the PMCR register to EL2.
+
+Cc: qemu-stable@nongnu.org
+Signed-off-by: Smail AIDER <smail.aider@huawei.com>
+Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
+Message-id: 20250811112143.1577055-2-smail.aider@huawei.com
+Message-Id: <20250722131925.2119169-1-smail.aider@huawei.com>
+Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
+(cherry picked from commit 186db6a73bc5c01026bb9f4f4a59e442c0156841)
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+---
+ target/arm/cpregs-pmu.c | 34 ++++++++++++++++++++++++++--------
+ 1 file changed, 26 insertions(+), 8 deletions(-)
+
+diff --git a/target/arm/cpregs-pmu.c b/target/arm/cpregs-pmu.c
+index 9c4431c18b..31c01eddc8 100644
+--- a/target/arm/cpregs-pmu.c
++++ b/target/arm/cpregs-pmu.c
+@@ -228,22 +228,27 @@ static bool event_supported(uint16_t number)
+     return supported_event_map[number] != UNSUPPORTED_EVENT;
+ }
+ 
+-static CPAccessResult pmreg_access(CPUARMState *env, const ARMCPRegInfo *ri,
+-                                   bool isread)
++static CPAccessResult do_pmreg_access(CPUARMState *env, bool is_pmcr)
+ {
+     /*
+      * Performance monitor registers user accessibility is controlled
+-     * by PMUSERENR. MDCR_EL2.TPM and MDCR_EL3.TPM allow configurable
++     * by PMUSERENR. MDCR_EL2.TPM/TPMCR and MDCR_EL3.TPM allow configurable
+      * trapping to EL2 or EL3 for other accesses.
+      */
+     int el = arm_current_el(env);
+-    uint64_t mdcr_el2 = arm_mdcr_el2_eff(env);
+ 
+     if (el == 0 && !(env->cp15.c9_pmuserenr & 1)) {
+         return CP_ACCESS_TRAP_EL1;
+     }
+-    if (el < 2 && (mdcr_el2 & MDCR_TPM)) {
+-        return CP_ACCESS_TRAP_EL2;
++    if (el < 2) {
++        uint64_t mdcr_el2 = arm_mdcr_el2_eff(env);
++
++        if (mdcr_el2 & MDCR_TPM) {
++            return CP_ACCESS_TRAP_EL2;
++        }
++        if (is_pmcr && (mdcr_el2 & MDCR_TPMCR)) {
++            return CP_ACCESS_TRAP_EL2;
++        }
+     }
+     if (el < 3 && (env->cp15.mdcr_el3 & MDCR_TPM)) {
+         return CP_ACCESS_TRAP_EL3;
+@@ -252,6 +257,19 @@ static CPAccessResult pmreg_access(CPUARMState *env, const ARMCPRegInfo *ri,
+     return CP_ACCESS_OK;
+ }
+ 
++static CPAccessResult pmreg_access(CPUARMState *env, const ARMCPRegInfo *ri,
++                                   bool isread)
++{
++    return do_pmreg_access(env, false);
++}
++
++static CPAccessResult pmreg_access_pmcr(CPUARMState *env,
++                                        const ARMCPRegInfo *ri,
++                                        bool isread)
++{
++    return do_pmreg_access(env, true);
++}
++
+ static CPAccessResult pmreg_access_xevcntr(CPUARMState *env,
+                                            const ARMCPRegInfo *ri,
+                                            bool isread)
+@@ -1187,14 +1205,14 @@ void define_pm_cpregs(ARMCPU *cpu)
+             .fgt = FGT_PMCR_EL0,
+             .type = ARM_CP_IO | ARM_CP_ALIAS,
+             .fieldoffset = offsetoflow32(CPUARMState, cp15.c9_pmcr),
+-            .accessfn = pmreg_access,
++            .accessfn = pmreg_access_pmcr,
+             .readfn = pmcr_read, .raw_readfn = raw_read,
+             .writefn = pmcr_write, .raw_writefn = raw_write,
+         };
+         const ARMCPRegInfo pmcr64 = {
+             .name = "PMCR_EL0", .state = ARM_CP_STATE_AA64,
+             .opc0 = 3, .opc1 = 3, .crn = 9, .crm = 12, .opc2 = 0,
+-            .access = PL0_RW, .accessfn = pmreg_access,
++            .access = PL0_RW, .accessfn = pmreg_access_pmcr,
+             .fgt = FGT_PMCR_EL0,
+             .type = ARM_CP_IO,
+             .fieldoffset = offsetof(CPUARMState, cp15.c9_pmcr),
diff --git a/debian/patches/extra/0004-qemu-atomic-Finish-renaming-atomic128-cas.h-headers.patch b/debian/patches/extra/0004-qemu-atomic-Finish-renaming-atomic128-cas.h-headers.patch
new file mode 100644
index 0000000..4ff333b
--- /dev/null
+++ b/debian/patches/extra/0004-qemu-atomic-Finish-renaming-atomic128-cas.h-headers.patch
@@ -0,0 +1,25 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Richard Henderson <richard.henderson@linaro.org>
+Date: Fri, 15 Aug 2025 22:26:47 +1000
+Subject: [PATCH] qemu/atomic: Finish renaming atomic128-cas.h headers
+
+The aarch64 header was not renamed with the others, meaning it
+was skipped in favor of the generic version.
+
+Cc: qemu-stable@nongnu.org
+Fixes: 15606965400b ("qemu/atomic: Rename atomic128-cas.h headers using .h.inc suffix")
+Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
+Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
+Message-id: 20250815122653.701782-2-richard.henderson@linaro.org
+Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
+(cherry picked from commit 1748c0d59228c7790940d8be381df1c3108022b1)
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+---
+ .../include/aarch64/host/{atomic128-cas.h => atomic128-cas.h.inc} | 0
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+ rename host/include/aarch64/host/{atomic128-cas.h => atomic128-cas.h.inc} (100%)
+
+diff --git a/host/include/aarch64/host/atomic128-cas.h b/host/include/aarch64/host/atomic128-cas.h.inc
+similarity index 100%
+rename from host/include/aarch64/host/atomic128-cas.h
+rename to host/include/aarch64/host/atomic128-cas.h.inc
diff --git a/debian/patches/extra/0005-block-curl-fix-curl-internal-handles-handling.patch b/debian/patches/extra/0005-block-curl-fix-curl-internal-handles-handling.patch
new file mode 100644
index 0000000..4939ce5
--- /dev/null
+++ b/debian/patches/extra/0005-block-curl-fix-curl-internal-handles-handling.patch
@@ -0,0 +1,60 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Michael Tokarev <mjt@tls.msk.ru>
+Date: Sun, 24 Aug 2025 03:05:32 +0300
+Subject: [PATCH] block/curl: fix curl internal handles handling
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+block/curl.c uses CURLMOPT_SOCKETFUNCTION to register a socket callback.
+According to the documentation, this callback is called not just with
+application-created sockets but also with internal curl sockets, - and
+for such sockets, user data pointer is not set by the application, so
+the result qemu crashing.
+
+Pass BDRVCURLState directly to the callback function as user pointer,
+instead of relying on CURLINFO_PRIVATE.
+
+This problem started happening with update of libcurl from 8.9 to 8.10 --
+apparently with this change curl started using private handles more.
+
+(CURLINFO_PRIVATE is used in one more place, in curl_multi_check_completion() -
+it might need a similar fix too)
+
+Resolves: https://gitlab.com/qemu-project/qemu/-/issues/3081
+Cc: qemu-stable@qemu.org
+Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
+Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
+(cherry picked from commit 606978500c3d18fb89a49844f253097b17f757de)
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+---
+ block/curl.c | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/block/curl.c b/block/curl.c
+index 5467678024..00b949ea45 100644
+--- a/block/curl.c
++++ b/block/curl.c
+@@ -162,13 +162,9 @@ static int curl_timer_cb(CURLM *multi, long timeout_ms, void *opaque)
+ static int curl_sock_cb(CURL *curl, curl_socket_t fd, int action,
+                         void *userp, void *sp)
+ {
+-    BDRVCURLState *s;
+-    CURLState *state = NULL;
++    BDRVCURLState *s = userp;
+     CURLSocket *socket;
+ 
+-    curl_easy_getinfo(curl, CURLINFO_PRIVATE, (char **)&state);
+-    s = state->s;
+-
+     socket = g_hash_table_lookup(s->sockets, GINT_TO_POINTER(fd));
+     if (!socket) {
+         socket = g_new0(CURLSocket, 1);
+@@ -605,6 +601,7 @@ static void curl_attach_aio_context(BlockDriverState *bs,
+     assert(!s->multi);
+     s->multi = curl_multi_init();
+     s->aio_context = new_context;
++    curl_multi_setopt(s->multi, CURLMOPT_SOCKETDATA, s);
+     curl_multi_setopt(s->multi, CURLMOPT_SOCKETFUNCTION, curl_sock_cb);
+     curl_multi_setopt(s->multi, CURLMOPT_TIMERDATA, s);
+     curl_multi_setopt(s->multi, CURLMOPT_TIMERFUNCTION, curl_timer_cb);
diff --git a/debian/patches/extra/0006-i386-tcg-svm-fix-incorrect-canonicalization.patch b/debian/patches/extra/0006-i386-tcg-svm-fix-incorrect-canonicalization.patch
new file mode 100644
index 0000000..c964a14
--- /dev/null
+++ b/debian/patches/extra/0006-i386-tcg-svm-fix-incorrect-canonicalization.patch
@@ -0,0 +1,38 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Zero Tang <zero.tangptr@gmail.com>
+Date: Mon, 18 Aug 2025 12:16:47 +0200
+Subject: [PATCH] i386/tcg/svm: fix incorrect canonicalization
+
+For all 32-bit systems and 64-bit Windows systems, "long" is 4 bytes long.
+Due to using "long" for a linear address, svm_canonicalization would
+set all high bits to 1 when (assuming 48-bit linear address) the segment
+base is bigger than 0x7FFF.
+
+This fixes booting guests under TCG when the guest IDT and GDT bases are
+above 0x7FFF, thereby resulting in incorrect bases. When an interrupt
+arrives, it would trigger a #PF exception; the #PF would trigger again,
+resulting in a #DF exception; the #PF would trigger for the third time,
+resulting in triple-fault, and eventually causes a shutdown VM-Exit to
+the hypervisor right after guest boot.
+
+Cc: qemu-stable@nongnu.org
+Signed-off-by: Zero Tang <zero.tangptr@gmail.com>
+(cherry picked from commit c12cbaa007c9da97a11e74119ea3aed9fcc3ac4c)
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+---
+ target/i386/tcg/system/svm_helper.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/target/i386/tcg/system/svm_helper.c b/target/i386/tcg/system/svm_helper.c
+index b27049b9ed..dea039b87a 100644
+--- a/target/i386/tcg/system/svm_helper.c
++++ b/target/i386/tcg/system/svm_helper.c
+@@ -49,7 +49,7 @@ static void svm_save_seg(CPUX86State *env, int mmu_idx, hwaddr addr,
+ static inline void svm_canonicalization(CPUX86State *env, target_ulong *seg_base)
+ {
+     uint16_t shift_amt = 64 - cpu_x86_virtual_addr_width(env);
+-    *seg_base = ((((long) *seg_base) << shift_amt) >> shift_amt);
++    *seg_base = (((int64_t) *seg_base) << shift_amt) >> shift_amt;
+ }
+ 
+ static void svm_load_seg(CPUX86State *env, int mmu_idx, hwaddr addr,
diff --git a/debian/patches/extra/0007-hw-vfio-user-add-x-pci-class-code.patch b/debian/patches/extra/0007-hw-vfio-user-add-x-pci-class-code.patch
new file mode 100644
index 0000000..dfa93a5
--- /dev/null
+++ b/debian/patches/extra/0007-hw-vfio-user-add-x-pci-class-code.patch
@@ -0,0 +1,35 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: John Levon <john.levon@nutanix.com>
+Date: Wed, 27 Aug 2025 20:08:10 +0100
+Subject: [PATCH] hw/vfio-user: add x-pci-class-code
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This new option was not added to vfio_user_pci_dev_properties, which
+caused an incorrect class code for vfio-user devices.
+
+Fixes: a59d06305fff ("vfio/pci: Introduce x-pci-class-code option")
+Signed-off-by: John Levon <john.levon@nutanix.com>
+Reviewed-by: Cédric Le Goater <clg@redhat.com>
+Link: https://lore.kernel.org/qemu-devel/20250827190810.1645340-1-john.levon@nutanix.com
+Signed-off-by: Cédric Le Goater <clg@redhat.com>
+(cherry picked from commit 1b50621881241ac5bc75ae7f8aa4c278ada8a668)
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+---
+ hw/vfio-user/pci.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/hw/vfio-user/pci.c b/hw/vfio-user/pci.c
+index be71c77729..dfaa89498d 100644
+--- a/hw/vfio-user/pci.c
++++ b/hw/vfio-user/pci.c
+@@ -406,6 +406,8 @@ static const Property vfio_user_pci_dev_properties[] = {
+                        sub_vendor_id, PCI_ANY_ID),
+     DEFINE_PROP_UINT32("x-pci-sub-device-id", VFIOPCIDevice,
+                        sub_device_id, PCI_ANY_ID),
++    DEFINE_PROP_UINT32("x-pci-class-code", VFIOPCIDevice,
++                       class_code, PCI_ANY_ID),
+     DEFINE_PROP_BOOL("x-send-queued", VFIOUserPCIDevice, send_queued, false),
+     DEFINE_PROP_UINT32("x-msg-timeout", VFIOUserPCIDevice, wait_time, 5000),
+     DEFINE_PROP_BOOL("x-no-posted-writes", VFIOUserPCIDevice, no_post, false),
diff --git a/debian/patches/extra/0008-tcg-arm-Fix-tgen_deposit.patch b/debian/patches/extra/0008-tcg-arm-Fix-tgen_deposit.patch
new file mode 100644
index 0000000..ca01088
--- /dev/null
+++ b/debian/patches/extra/0008-tcg-arm-Fix-tgen_deposit.patch
@@ -0,0 +1,37 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Richard Henderson <richard.henderson@linaro.org>
+Date: Fri, 29 Aug 2025 13:49:06 +0000
+Subject: [PATCH] tcg/arm: Fix tgen_deposit
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When converting from tcg_out_deposit, the arguments were not
+shuffled properly.
+
+Cc: qemu-stable@nongnu.org
+Fixes: cf4905c03135f1181e8 ("tcg: Convert deposit to TCGOutOpDeposit")
+Reported-by: Michael Tokarev <mjt@tls.msk.ru>
+Tested-by: Michael Tokarev <mjt@tls.msk.ru>
+Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
+Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
+(cherry picked from commit 27ea28a0b369b4b14a485a5d6f045e0dc1db4e38)
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+---
+ tcg/arm/tcg-target.c.inc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc
+index 836894b16a..338c57b061 100644
+--- a/tcg/arm/tcg-target.c.inc
++++ b/tcg/arm/tcg-target.c.inc
+@@ -975,7 +975,8 @@ static void tgen_deposit(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1,
+                          TCGReg a2, unsigned ofs, unsigned len)
+ {
+     /* bfi/bfc */
+-    tcg_out32(s, 0x07c00010 | (COND_AL << 28) | (a0 << 12) | a1
++    tcg_debug_assert(a0 == a1);
++    tcg_out32(s, 0x07c00010 | (COND_AL << 28) | (a0 << 12) | a2
+               | (ofs << 7) | ((ofs + len - 1) << 16));
+ }
+ 
diff --git a/debian/patches/extra/0009-e1000e-Prevent-crash-from-legacy-interrupt-firing-af.patch b/debian/patches/extra/0009-e1000e-Prevent-crash-from-legacy-interrupt-firing-af.patch
new file mode 100644
index 0000000..3fac459
--- /dev/null
+++ b/debian/patches/extra/0009-e1000e-Prevent-crash-from-legacy-interrupt-firing-af.patch
@@ -0,0 +1,58 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Laurent Vivier <lvivier@redhat.com>
+Date: Thu, 7 Aug 2025 13:08:06 +0200
+Subject: [PATCH] e1000e: Prevent crash from legacy interrupt firing after
+ MSI-X enable
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+A race condition between guest driver actions and QEMU timers can lead
+to an assertion failure when the guest switches the e1000e from legacy
+interrupt mode to MSI-X. If a legacy interrupt delay timer (TIDV or
+RDTR) is active, but the guest enables MSI-X before the timer fires,
+the pending interrupt cause can trigger an assert in
+e1000e_intmgr_collect_delayed_causes().
+
+This patch removes the assertion and executes the code that clears the
+pending legacy causes. This change is safe and introduces no unintended
+behavioral side effects, as it only alters a state that previously led
+to termination.
+
+- when core->delayed_causes == 0 the function was already a no-op and
+  remains so.
+
+- when core->delayed_causes != 0 the function would previously
+  crash due to the assertion failure. The patch now defines a safe
+  outcome by clearing the cause and returning. Since behavior after
+  the assertion never existed, this simply corrects the crash.
+
+Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1863
+Suggested-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
+Signed-off-by: Laurent Vivier <lvivier@redhat.com>
+Acked-by: Jason Wang <jasowang@redhat.com>
+Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
+Message-ID: <20250807110806.409065-1-lvivier@redhat.com>
+Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
+(cherry picked from commit 8e4649cac9bcddc050d2df07908075e9e69bccc7)
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+---
+ hw/net/e1000e_core.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/hw/net/e1000e_core.c b/hw/net/e1000e_core.c
+index 2413858790..06657bb3ac 100644
+--- a/hw/net/e1000e_core.c
++++ b/hw/net/e1000e_core.c
+@@ -341,11 +341,6 @@ e1000e_intmgr_collect_delayed_causes(E1000ECore *core)
+ {
+     uint32_t res;
+ 
+-    if (msix_enabled(core->owner)) {
+-        assert(core->delayed_causes == 0);
+-        return 0;
+-    }
+-
+     res = core->delayed_causes;
+     core->delayed_causes = 0;
+ 
diff --git a/debian/patches/extra/0010-vfio-igd-Enable-quirks-when-IGD-is-not-the-primary-d.patch b/debian/patches/extra/0010-vfio-igd-Enable-quirks-when-IGD-is-not-the-primary-d.patch
new file mode 100644
index 0000000..98f5e9b
--- /dev/null
+++ b/debian/patches/extra/0010-vfio-igd-Enable-quirks-when-IGD-is-not-the-primary-d.patch
@@ -0,0 +1,79 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Tomita Moeko <tomitamoeko@gmail.com>
+Date: Thu, 14 Aug 2025 00:05:10 +0800
+Subject: [PATCH] vfio/igd: Enable quirks when IGD is not the primary display
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since linux 6.15, commit 41112160ca87 ("vfio/pci: match IGD devices in
+display controller class"), IGD related regions are also exposed when
+IGD is not primary display (device class is Display controller).
+
+Allow IGD quirks to be enabled in this configuration so that guests can
+have display output on IGD when it is not the primary display.
+
+Signed-off-by: Tomita Moeko <tomitamoeko@gmail.com>
+Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
+Link: https://lore.kernel.org/qemu-devel/20250813160510.23553-1-tomitamoeko@gmail.com
+Signed-off-by: Cédric Le Goater <clg@redhat.com>
+(cherry picked from commit 432ca3dfa3d57a7bf1e427576fcfca4ab0079a50)
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+---
+ hw/vfio/igd.c | 7 ++++---
+ hw/vfio/pci.h | 5 +++++
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/hw/vfio/igd.c b/hw/vfio/igd.c
+index ee0767b0b8..f116c40ccd 100644
+--- a/hw/vfio/igd.c
++++ b/hw/vfio/igd.c
+@@ -460,7 +460,7 @@ void vfio_probe_igd_bar0_quirk(VFIOPCIDevice *vdev, int nr)
+     int gen;
+ 
+     if (!vfio_pci_is(vdev, PCI_VENDOR_ID_INTEL, PCI_ANY_ID) ||
+-        !vfio_is_vga(vdev) || nr != 0) {
++        !vfio_is_base_display(vdev) || nr != 0) {
+         return;
+     }
+ 
+@@ -518,7 +518,7 @@ static bool vfio_pci_igd_config_quirk(VFIOPCIDevice *vdev, Error **errp)
+     Error *err = NULL;
+ 
+     if (!vfio_pci_is(vdev, PCI_VENDOR_ID_INTEL, PCI_ANY_ID) ||
+-        !vfio_is_vga(vdev)) {
++        !vfio_is_base_display(vdev)) {
+         return true;
+     }
+ 
+@@ -534,12 +534,13 @@ static bool vfio_pci_igd_config_quirk(VFIOPCIDevice *vdev, Error **errp)
+     /*
+      * For backward compatibility, enable legacy mode when
+      * - Device geneation is 6 to 9 (including both)
+-     * - IGD claims VGA cycles on host
++     * - IGD exposes itself as VGA controller and claims VGA cycles on host
+      * - Machine type is i440fx (pc_piix)
+      * - IGD device is at guest BDF 00:02.0
+      * - Not manually disabled by x-igd-legacy-mode=off
+      */
+     if ((vdev->igd_legacy_mode != ON_OFF_AUTO_OFF) &&
++        vfio_is_vga(vdev) &&
+         (gen >= 6 && gen <= 9) &&
+         !(gmch & IGD_GMCH_VGA_DISABLE) &&
+         !strcmp(MACHINE_GET_CLASS(qdev_get_machine())->family, "pc_piix") &&
+diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
+index 810a842f4a..923cf9c2f7 100644
+--- a/hw/vfio/pci.h
++++ b/hw/vfio/pci.h
+@@ -203,6 +203,11 @@ static inline bool vfio_is_vga(VFIOPCIDevice *vdev)
+     return (vdev->class_code >> 8) == PCI_CLASS_DISPLAY_VGA;
+ }
+ 
++static inline bool vfio_is_base_display(VFIOPCIDevice *vdev)
++{
++    return (vdev->class_code >> 16) == PCI_BASE_CLASS_DISPLAY;
++}
++
+ /* MSI/MSI-X/INTx */
+ void vfio_pci_vector_init(VFIOPCIDevice *vdev, int nr);
+ void vfio_pci_add_kvm_msi_virq(VFIOPCIDevice *vdev, VFIOMSIVector *vector,
diff --git a/debian/patches/extra/0011-i386-cpu-Enable-SMM-cpu-address-space-under-KVM.patch b/debian/patches/extra/0011-i386-cpu-Enable-SMM-cpu-address-space-under-KVM.patch
new file mode 100644
index 0000000..cb9b095
--- /dev/null
+++ b/debian/patches/extra/0011-i386-cpu-Enable-SMM-cpu-address-space-under-KVM.patch
@@ -0,0 +1,106 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Xiaoyao Li <xiaoyao.li@intel.com>
+Date: Wed, 30 Jul 2025 17:52:52 +0800
+Subject: [PATCH] i386/cpu: Enable SMM cpu address space under KVM
+
+Kirill Martynov reported assertation in cpu_asidx_from_attrs() being hit
+when x86_cpu_dump_state() is called to dump the CPU state[*]. It happens
+when the CPU is in SMM and KVM emulation failure due to misbehaving
+guest.
+
+The root cause is that QEMU i386 never enables the SMM address space for
+cpu since KVM SMM support has been added.
+
+Enable the SMM cpu address space under KVM when the SMM is enabled for
+the x86machine.
+
+[*] https://lore.kernel.org/qemu-devel/20250523154431.506993-1-stdcalllevi@yandex-team.ru/
+
+Reported-by: Kirill Martynov <stdcalllevi@yandex-team.ru>
+Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
+Tested-by: Kirill Martynov <stdcalllevi@yandex-team.ru>
+Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
+Link: https://lore.kernel.org/r/20250730095253.1833411-2-xiaoyao.li@intel.com
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+(cherry picked from commit 0516f4b70264b9710a25718d21bd35ef463c875e)
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+---
+ system/physmem.c          |  5 -----
+ target/i386/kvm/kvm-cpu.c | 10 ++++++++++
+ target/i386/kvm/kvm.c     |  5 +++++
+ 3 files changed, 15 insertions(+), 5 deletions(-)
+
+diff --git a/system/physmem.c b/system/physmem.c
+index e5dd760e0b..8705fadc01 100644
+--- a/system/physmem.c
++++ b/system/physmem.c
+@@ -793,9 +793,6 @@ void cpu_address_space_init(CPUState *cpu, int asidx,
+         cpu->as = as;
+     }
+ 
+-    /* KVM cannot currently support multiple address spaces. */
+-    assert(asidx == 0 || !kvm_enabled());
+-
+     if (!cpu->cpu_ases) {
+         cpu->cpu_ases = g_new0(CPUAddressSpace, cpu->num_ases);
+         cpu->cpu_ases_count = cpu->num_ases;
+@@ -818,8 +815,6 @@ void cpu_address_space_destroy(CPUState *cpu, int asidx)
+ 
+     assert(cpu->cpu_ases);
+     assert(asidx >= 0 && asidx < cpu->num_ases);
+-    /* KVM cannot currently support multiple address spaces. */
+-    assert(asidx == 0 || !kvm_enabled());
+ 
+     cpuas = &cpu->cpu_ases[asidx];
+     if (tcg_enabled()) {
+diff --git a/target/i386/kvm/kvm-cpu.c b/target/i386/kvm/kvm-cpu.c
+index 89a7953659..1dc1ba9b48 100644
+--- a/target/i386/kvm/kvm-cpu.c
++++ b/target/i386/kvm/kvm-cpu.c
+@@ -13,6 +13,7 @@
+ #include "qapi/error.h"
+ #include "system/system.h"
+ #include "hw/boards.h"
++#include "hw/i386/x86.h"
+ 
+ #include "kvm_i386.h"
+ #include "accel/accel-cpu-target.h"
+@@ -91,6 +92,15 @@ static bool kvm_cpu_realizefn(CPUState *cs, Error **errp)
+         kvm_set_guest_phys_bits(cs);
+     }
+ 
++    /*
++     * When SMM is enabled, there is 2 address spaces. Otherwise only 1.
++     *
++     * Only initialize address space 0 here, the second one for SMM is
++     * initialized at register_smram_listener() after machine init done.
++     */
++    cs->num_ases = x86_machine_is_smm_enabled(X86_MACHINE(current_machine)) ? 2 : 1;
++    cpu_address_space_init(cs, 0, "cpu-memory", cs->memory);
++
+     return true;
+ }
+ 
+diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
+index 369626f8c8..47fb5c673c 100644
+--- a/target/i386/kvm/kvm.c
++++ b/target/i386/kvm/kvm.c
+@@ -2704,6 +2704,7 @@ static MemoryRegion smram_as_mem;
+ 
+ static void register_smram_listener(Notifier *n, void *unused)
+ {
++    CPUState *cpu;
+     MemoryRegion *smram =
+         (MemoryRegion *) object_resolve_path("/machine/smram", NULL);
+ 
+@@ -2728,6 +2729,10 @@ static void register_smram_listener(Notifier *n, void *unused)
+     address_space_init(&smram_address_space, &smram_as_root, "KVM-SMRAM");
+     kvm_memory_listener_register(kvm_state, &smram_listener,
+                                  &smram_address_space, 1, "kvm-smram");
++
++    CPU_FOREACH(cpu) {
++        cpu_address_space_init(cpu, 1, "cpu-smm", &smram_as_root);
++    }
+ }
+ 
+ static void *kvm_msr_energy_thread(void *data)
diff --git a/debian/patches/extra/0012-target-i386-add-compatibility-property-for-arch_capa.patch b/debian/patches/extra/0012-target-i386-add-compatibility-property-for-arch_capa.patch
new file mode 100644
index 0000000..5238871
--- /dev/null
+++ b/debian/patches/extra/0012-target-i386-add-compatibility-property-for-arch_capa.patch
@@ -0,0 +1,109 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Paolo Bonzini <pbonzini@redhat.com>
+Date: Tue, 23 Sep 2025 12:41:35 +0200
+Subject: [PATCH] target/i386: add compatibility property for arch_capabilities
+
+Prior to v10.1, if requested by user, arch-capabilities is always on
+despite the fact that CPUID advertises it to be off/unvailable.
+This causes a migration issue for VMs that are run on a machine
+without arch-capabilities and expect this feature to be present
+on the destination host with QEMU 10.1.
+
+Add a compatibility property to restore the legacy behavior for all
+machines with version prior to 10.1.
+
+Co-authored-by: Hector Cao <hector.cao@canonical.com>
+Signed-off-by: Hector Cao <hector.cao@canonical.com>
+Fixes: d3a24134e37 ("target/i386: do not expose ARCH_CAPABILITIES on AMD CPU", 2025-07-17)
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Link: https://lore.proxmox.com/20250923104136.133875-2-pbonzini@redhat.com
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+---
+ hw/i386/pc.c          |  1 +
+ target/i386/cpu.c     | 17 +++++++++++++++++
+ target/i386/cpu.h     |  6 ++++++
+ target/i386/kvm/kvm.c |  6 +-----
+ 4 files changed, 25 insertions(+), 5 deletions(-)
+
+diff --git a/hw/i386/pc.c b/hw/i386/pc.c
+index 2f58e73d33..2504365bc2 100644
+--- a/hw/i386/pc.c
++++ b/hw/i386/pc.c
+@@ -84,6 +84,7 @@
+ GlobalProperty pc_compat_10_0[] = {
+     { TYPE_X86_CPU, "x-consistent-cache", "false" },
+     { TYPE_X86_CPU, "x-vendor-cpuid-only-v2", "false" },
++    { TYPE_X86_CPU, "x-arch-cap-always-on", "true" },
+ };
+ const size_t pc_compat_10_0_len = G_N_ELEMENTS(pc_compat_10_0);
+ 
+diff --git a/target/i386/cpu.c b/target/i386/cpu.c
+index 6d85149e6e..fe369bb128 100644
+--- a/target/i386/cpu.c
++++ b/target/i386/cpu.c
+@@ -7539,6 +7539,20 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w)
+ #endif
+         break;
+ 
++    case FEAT_7_0_EDX:
++        /*
++         * Windows does not like ARCH_CAPABILITIES on AMD machines at all.
++         * Do not show the fake ARCH_CAPABILITIES MSR that KVM sets up,
++         * except if needed for migration.
++         *
++         * When arch_cap_always_on is removed, this tweak can move to
++         * kvm_arch_get_supported_cpuid.
++         */
++        if (cpu && IS_AMD_CPU(&cpu->env) && !cpu->arch_cap_always_on) {
++            unavail = CPUID_7_0_EDX_ARCH_CAPABILITIES;
++        }
++        break;
++
+     default:
+         break;
+     }
+@@ -10004,6 +10018,9 @@ static const Property x86_cpu_properties[] = {
+                      true),
+     DEFINE_PROP_BOOL("x-l1-cache-per-thread", X86CPU, l1_cache_per_core, true),
+     DEFINE_PROP_BOOL("x-force-cpuid-0x1f", X86CPU, force_cpuid_0x1f, false),
++
++    DEFINE_PROP_BOOL("x-arch-cap-always-on", X86CPU,
++                     arch_cap_always_on, false),
+ };
+ 
+ #ifndef CONFIG_USER_ONLY
+diff --git a/target/i386/cpu.h b/target/i386/cpu.h
+index f977fc49a7..b966bc997c 100644
+--- a/target/i386/cpu.h
++++ b/target/i386/cpu.h
+@@ -2314,6 +2314,12 @@ struct ArchCPU {
+     /* Forcefully disable KVM PV features not exposed in guest CPUIDs */
+     bool kvm_pv_enforce_cpuid;
+ 
++    /*
++     * Expose arch-capabilities unconditionally even on AMD models, for backwards
++     * compatibility with QEMU <10.1.
++     */
++    bool arch_cap_always_on;
++
+     /* Number of physical address bits supported */
+     uint32_t phys_bits;
+ 
+diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
+index 47fb5c673c..a4e437bb5a 100644
+--- a/target/i386/kvm/kvm.c
++++ b/target/i386/kvm/kvm.c
+@@ -503,12 +503,8 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s, uint32_t function,
+          * Linux v4.17-v4.20 incorrectly return ARCH_CAPABILITIES on SVM hosts.
+          * We can detect the bug by checking if MSR_IA32_ARCH_CAPABILITIES is
+          * returned by KVM_GET_MSR_INDEX_LIST.
+-         *
+-         * But also, because Windows does not like ARCH_CAPABILITIES on AMD
+-         * mcahines at all, do not show the fake ARCH_CAPABILITIES MSR that
+-         * KVM sets up.
+          */
+-        if (!has_msr_arch_capabs || !(edx & CPUID_7_0_EDX_ARCH_CAPABILITIES)) {
++        if (!has_msr_arch_capabs) {
+             ret &= ~CPUID_7_0_EDX_ARCH_CAPABILITIES;
+         }
+     } else if (function == 7 && index == 1 && reg == R_EAX) {
diff --git a/debian/patches/extra/0013-target-i386-add-compatibility-property-for-pdcm-feat.patch b/debian/patches/extra/0013-target-i386-add-compatibility-property-for-pdcm-feat.patch
new file mode 100644
index 0000000..5aea067
--- /dev/null
+++ b/debian/patches/extra/0013-target-i386-add-compatibility-property-for-pdcm-feat.patch
@@ -0,0 +1,96 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Hector Cao <hector.cao@canonical.com>
+Date: Tue, 23 Sep 2025 12:41:36 +0200
+Subject: [PATCH] target/i386: add compatibility property for pdcm feature
+
+The pdcm feature is supposed to be disabled when PMU is not
+available. Up until v10.1, pdcm feature is enabled even when PMU
+is off. This behavior has been fixed but this change breaks the
+migration of VMs that are run with QEMU < 10.0 and expect the pdcm
+feature to be enabled on the destination host.
+
+This commit restores the legacy behavior for machines with version
+prior to 10.1 to allow the migration from older QEMU to QEMU 10.1.
+
+Signed-off-by: Hector Cao <hector.cao@canonical.com>
+Link: https://lore.kernel.org/r/20250910115733.21149-3-hector.cao@canonical.com
+Fixes: e68ec298090 ("i386/cpu: Move adjustment of CPUID_EXT_PDCM before feature_dependencies[] check", 2025-06-20)
+[Move property from migration object to CPU. - Paolo]
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Link: https://lore.proxmox.com/20250923104136.133875-3-pbonzini@redhat.com
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+---
+ hw/i386/pc.c      |  1 +
+ target/i386/cpu.c | 15 ++++++++++++---
+ target/i386/cpu.h |  6 ++++++
+ 3 files changed, 19 insertions(+), 3 deletions(-)
+
+diff --git a/hw/i386/pc.c b/hw/i386/pc.c
+index 2504365bc2..0861e329b5 100644
+--- a/hw/i386/pc.c
++++ b/hw/i386/pc.c
+@@ -85,6 +85,7 @@ GlobalProperty pc_compat_10_0[] = {
+     { TYPE_X86_CPU, "x-consistent-cache", "false" },
+     { TYPE_X86_CPU, "x-vendor-cpuid-only-v2", "false" },
+     { TYPE_X86_CPU, "x-arch-cap-always-on", "true" },
++    { TYPE_X86_CPU, "x-pdcm-on-even-without-pmu", "true" },
+ };
+ const size_t pc_compat_10_0_len = G_N_ELEMENTS(pc_compat_10_0);
+ 
+diff --git a/target/i386/cpu.c b/target/i386/cpu.c
+index fe369bb128..ab18de894e 100644
+--- a/target/i386/cpu.c
++++ b/target/i386/cpu.c
+@@ -7908,6 +7908,11 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
+             /* Fixup overflow: max value for bits 23-16 is 255. */
+             *ebx |= MIN(num, 255) << 16;
+         }
++        if (cpu->pdcm_on_even_without_pmu) {
++            if (!cpu->enable_pmu) {
++                *ecx &= ~CPUID_EXT_PDCM;
++            }
++        }
+         break;
+     case 2: { /* cache info: needed for Pentium Pro compatibility */
+         const CPUCaches *caches;
+@@ -8958,9 +8963,11 @@ void x86_cpu_expand_features(X86CPU *cpu, Error **errp)
+         }
+     }
+ 
+-    /* PDCM is fixed1 bit for TDX */
+-    if (!cpu->enable_pmu && !is_tdx_vm()) {
+-        env->features[FEAT_1_ECX] &= ~CPUID_EXT_PDCM;
++    if (!cpu->pdcm_on_even_without_pmu) {
++        /* PDCM is fixed1 bit for TDX */
++        if (!cpu->enable_pmu && !is_tdx_vm()) {
++            env->features[FEAT_1_ECX] &= ~CPUID_EXT_PDCM;
++        }
+     }
+ 
+     for (i = 0; i < ARRAY_SIZE(feature_dependencies); i++) {
+@@ -10021,6 +10028,8 @@ static const Property x86_cpu_properties[] = {
+ 
+     DEFINE_PROP_BOOL("x-arch-cap-always-on", X86CPU,
+                      arch_cap_always_on, false),
++    DEFINE_PROP_BOOL("x-pdcm-on-even-without-pmu", X86CPU,
++                     pdcm_on_even_without_pmu, false),
+ };
+ 
+ #ifndef CONFIG_USER_ONLY
+diff --git a/target/i386/cpu.h b/target/i386/cpu.h
+index b966bc997c..2187e61654 100644
+--- a/target/i386/cpu.h
++++ b/target/i386/cpu.h
+@@ -2320,6 +2320,12 @@ struct ArchCPU {
+      */
+     bool arch_cap_always_on;
+ 
++    /*
++     * Backwards compatibility with QEMU <10.1. The PDCM feature is now disabled when
++     * PMU is not available, but prior to 10.1 it was enabled even if PMU is off.
++     */
++    bool pdcm_on_even_without_pmu;
++
+     /* Number of physical address bits supported */
+     uint32_t phys_bits;
+ 
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 65d18b9..c9010c6 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@proxmox.com>
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/target/i386/cpu.h b/target/i386/cpu.h
-index f977fc49a7..d96c57c182 100644
+index 2187e61654..da8497931f 100644
 --- a/target/i386/cpu.h
 +++ b/target/i386/cpu.h
-@@ -2613,9 +2613,9 @@ uint64_t cpu_get_tsc(CPUX86State *env);
+@@ -2625,9 +2625,9 @@ uint64_t cpu_get_tsc(CPUX86State *env);
  #define CPU_RESOLVING_TYPE TYPE_X86_CPU
  
  #ifdef TARGET_X86_64
diff --git a/debian/patches/series b/debian/patches/series
index f2bf359..10ebb56 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,5 +1,16 @@
 extra/0001-monitor-qmp-fix-race-with-clients-disconnecting-earl.patch
 extra/0002-ide-avoid-potential-deadlock-when-draining-during-tr.patch
+extra/0003-target-arm-Trap-PMCR-when-MDCR_EL2.TPMCR-is-set.patch
+extra/0004-qemu-atomic-Finish-renaming-atomic128-cas.h-headers.patch
+extra/0005-block-curl-fix-curl-internal-handles-handling.patch
+extra/0006-i386-tcg-svm-fix-incorrect-canonicalization.patch
+extra/0007-hw-vfio-user-add-x-pci-class-code.patch
+extra/0008-tcg-arm-Fix-tgen_deposit.patch
+extra/0009-e1000e-Prevent-crash-from-legacy-interrupt-firing-af.patch
+extra/0010-vfio-igd-Enable-quirks-when-IGD-is-not-the-primary-d.patch
+extra/0011-i386-cpu-Enable-SMM-cpu-address-space-under-KVM.patch
+extra/0012-target-i386-add-compatibility-property-for-arch_capa.patch
+extra/0013-target-i386-add-compatibility-property-for-pdcm-feat.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
-- 
2.47.3



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

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

end of thread, other threads:[~2025-09-24 14:58 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-09-24 14:47 [pve-devel] [PATCH qemu 0/5] QEMU 10.1.0 Fiona Ebner
2025-09-24 14:47 ` [pve-devel] [PATCH qemu 1/5] buildsys: adapt removal of dtb files for 10.1.0 Fiona Ebner
2025-09-24 14:47 ` [pve-devel] [PATCH qemu 2/5] bump baseline machine version to 6.0 for Proxmox VE 9 Fiona Ebner
2025-09-24 14:47 ` [pve-devel] [PATCH qemu 3/5] alloc-track/zeroinit: squash patches enabling using with blockdev into patches adding block drivers Fiona Ebner
2025-09-24 14:47 ` [pve-devel] [PATCH qemu 4/5] update submodule and patches to QEMU 10.1.0 Fiona Ebner
2025-09-24 14:47 ` [pve-devel] [PATCH qemu 5/5] stable fixes for " Fiona Ebner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal