]> git.proxmox.com Git - pve-qemu.git/log
pve-qemu.git
13 months agoadd patch fixing ACPI CPU hotplug issue with TCG
Fiona Ebner [Fri, 17 Mar 2023 10:39:52 +0000 (11:39 +0100)]
add patch fixing ACPI CPU hotplug issue with TCG

Required for the debian/edk2-vars-generator.py script in the
pve-edk2-firmware repository when building the edk2-stable202302
release. Without this patch, the QEMU process spawned by the script
would hang indefinietly.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
13 months agobump version to 7.2.0-7
Thomas Lamprecht [Mon, 13 Mar 2023 16:42:52 +0000 (17:42 +0100)]
bump version to 7.2.0-7

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
13 months agoadd patches to fix regression with LSI SCSI controller
Fiona Ebner [Mon, 13 Mar 2023 11:43:54 +0000 (12:43 +0100)]
add patches to fix regression with LSI SCSI controller

The patch 0008-memory-prevent-dma-reentracy-issues.patch introduced a
regression for the LSI SCSI controller leading to boot failures [0],
because, in its current form, it relies on reentrancy for a particular
ram_io region.

[0]: https://forum.proxmox.com/threads/123843

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
13 months agoadd more stable fixes
Fiona Ebner [Thu, 9 Mar 2023 13:37:35 +0000 (14:37 +0100)]
add more stable fixes

The patches were selected from the recent "Patch Round-up for stable
7.2.1" [0]. Those that should be relevant for our supported use-cases
(and the upcoming nvme use-case) were picked. Most of the patches
added now have not been submitted to qemu-stable before.

The follow-up for the virtio-rng-pci migration fix will break
migration between versions with the fix and without the fix when a
virtio-pci-rng(-non)-transitional device is used. Luckily Proxmox VE
only uses the virtio-pci-rng device, and this was fixed by
0006-virtio-rng-pci-fix-migration-compat-for-vectors.patch which was
applied before any public version of Proxmox VE's QEMU 7.2 package was
released.

[0]: https://lists.nongnu.org/archive/html/qemu-stable/2023-03/msg00010.html
[1]: https://bugzilla.redhat.com/show_bug.cgi?id=2162569

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
13 months agofixup patch "ide: avoid potential deadlock when draining during trim"
Fiona Ebner [Thu, 9 Mar 2023 13:37:34 +0000 (14:37 +0100)]
fixup patch "ide: avoid potential deadlock when draining during trim"

The patch was incomplete and (re-)introduced an issue with a potential
failing assertion upon cancelation of the DMA request.

There is a patch on qemu-devel now[0], and it's the same as this one
code-wise (except for comments). But the discussion is still ongoing.
While there shouldn't be a real issue with the patch, there might be
better approaches. The plan is to use this as a stop-gap for now and
pick up the proper solution once it's ready.

[0]: https://lists.nongnu.org/archive/html/qemu-devel/2023-03/msg03325.html

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
13 months agobump version to 7.2.0-6
Thomas Lamprecht [Wed, 8 Mar 2023 13:32:22 +0000 (14:32 +0100)]
bump version to 7.2.0-6

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
13 months agoadd patch to avoid potential deadlock with trim for IDE/SATA and draining
Fiona Ebner [Wed, 8 Mar 2023 11:51:05 +0000 (12:51 +0100)]
add patch to avoid potential deadlock with trim for IDE/SATA and draining

In particular, the deadlock can occur, together with unlucky timing
between the QEMU threads, when the guest is issuing trim requests
during the start of a backup operation.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
 [ T: resolve trivial merge conflict in series file ]
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
13 months agoadd patch fixing Linux boot failures with megasas SCSI
Fiona Ebner [Mon, 6 Mar 2023 07:41:37 +0000 (08:41 +0100)]
add patch fixing Linux boot failures with megasas SCSI

A regression in 7.2 and easily reproduced.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
14 months agobump version to 7.2.0-5
Thomas Lamprecht [Tue, 21 Feb 2023 12:50:08 +0000 (13:50 +0100)]
bump version to 7.2.0-5

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
14 months agoadd fix for iscsi double free issue leading to crashes
Fiona Ebner [Tue, 21 Feb 2023 12:21:02 +0000 (13:21 +0100)]
add fix for iscsi double free issue leading to crashes

Reported here[0] and here[1].

[0]: https://gitlab.com/qemu-project/qemu/-/issues/1378
[1]: https://forum.proxmox.com/threads/122776/

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
14 months agoadd patch fixing DMA reentrancy issues
Fiona Ebner [Tue, 21 Feb 2023 09:08:59 +0000 (10:08 +0100)]
add patch fixing DMA reentrancy issues

that could lead to use-after-frees and stack overflows with a
malicious (or buggy) guest. See [0] for a good summary:

[0]: https://lore.kernel.org/qemu-devel/CAFEAcA_23vc7hE3iaM-JVA6W38LK4hJoWae5KcknhPRD5fPBZA@mail.gmail.com

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
14 months agoQMP backup: use correct errno when getting blockdrive length fails
Fiona Ebner [Mon, 30 Jan 2023 10:20:42 +0000 (11:20 +0100)]
QMP backup: use correct errno when getting blockdrive length fails

di->size would only be set later. The errno is minus the return value
from the function.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
14 months agosavevm-async: keep more free space when entering final stage
Fiona Ebner [Thu, 26 Jan 2023 13:46:14 +0000 (14:46 +0100)]
savevm-async: keep more free space when entering final stage

In qemu-server, we already allocate 2 * $mem_size + 500 MiB for driver
state (which was 32 MiB long ago according to git history). It seems
likely that the 30 MiB cutoff in the savevm-async implementation was
chosen based on that.

In bug #4476 [0], another issue caused the iteration to not make any
progress and the state file filled up all the way to the 30 MiB +
pending_size cutoff. Since the guest is not stopped immediately after
the check, it can still dirty some RAM and the current cutoff is not
enough for a reproducer VM (was done while bug #4476 still was not
fixed), dirtying memory with
> stress-ng -B 2 --bigheap-growth 64.0M'
After entering the final stage, savevm actually filled up the state
file completely, leading to an I/O error. It's probably the same
scenario as reported in the bug report, the error message was fixed in
commit a020815 ("savevm-async: fix function name in error message")
after the bug report.

If not for the bug, the cutoff will only be reached by a VM that's
dirtying RAM faster than can be written to the storage, so increase
the cutoff to 100 MiB to have a bigger chance to finish successfully,
while still trying to not increase downtime too much for
non-hibernation snapshots.

[0]: https://bugzilla.proxmox.com/show_bug.cgi?id=4476

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
14 months agofix #4476: savevm-async: avoid looping without progress
Fiona Ebner [Thu, 26 Jan 2023 13:46:13 +0000 (14:46 +0100)]
fix #4476: savevm-async: avoid looping without progress

when pend_postcopy is large. By definition, pend_postcopy won't
decrease when iterating, so a value larger than the cutoff of 400000
would lead to essentially empty iterations, filling up the state file
until only 30 MiB + pending_size remain and the second half of the
check would trigger.

Avoid this, by not considering pend_postcopy for the cutoff to enter
the final phase.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
14 months agod/rules: add note explaining why using noopt doesn't currenlty work
Fiona Ebner [Fri, 10 Feb 2023 09:39:24 +0000 (10:39 +0100)]
d/rules: add note explaining why using noopt doesn't currenlty work

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
14 months agod/rules: add missing export for CFLAGS
Fiona Ebner [Fri, 10 Feb 2023 09:39:23 +0000 (10:39 +0100)]
d/rules: add missing export for CFLAGS

Otherwise, they don't affect the build of QEMU at all.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
14 months agobump version to 7.2.0-4
Thomas Lamprecht [Fri, 27 Jan 2023 08:37:53 +0000 (09:37 +0100)]
bump version to 7.2.0-4

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
14 months agoadd patch to fix issue with VirtIO disk using detect-zeroes=unmap
Fiona Ebner [Fri, 27 Jan 2023 08:13:35 +0000 (09:13 +0100)]
add patch to fix issue with VirtIO disk using detect-zeroes=unmap

Affects Proxmox VE, when the discard disk setting is used for a
VirtIO disk.

Upstream bug report:
https://gitlab.com/qemu-project/qemu/-/issues/1404

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
14 months agod/control: also conflict with "qemu-system-data"
Fabian Grünbichler [Fri, 20 Jan 2023 08:45:51 +0000 (09:45 +0100)]
d/control: also conflict with "qemu-system-data"

it ships files also shipped by our qemu package, switching from Debian qemu to
ours doesn't work without manual intervention otherwise..

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
15 months agosavevm-async: fix function name in error message
Fiona Ebner [Mon, 23 Jan 2023 11:43:23 +0000 (12:43 +0100)]
savevm-async: fix function name in error message

which also makes it distinguishable from the other
"qemu_savevm_state_iterate error" message.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
15 months agobump version to 7.2.0-3
Thomas Lamprecht [Thu, 12 Jan 2023 12:13:23 +0000 (13:13 +0100)]
bump version to 7.2.0-3

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
15 months agoadd regression fix for migration with virtio-rng device
Fiona Ebner [Thu, 12 Jan 2023 10:09:08 +0000 (11:09 +0100)]
add regression fix for migration with virtio-rng device

between QEMU less than 7.2 and QEMU 7.2 without the fix (both
directions are affected).

As mentioned in the patch message, this fix itself will break
migration between QEMU 7.2 and QEMU 7.2 with the fix (in both
directions, if a virtio-rng device is attached), but this is fine,
because no pve-qemu-kvm package with QEMU 7.2 has been publicly
released yet.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
15 months agobump version to 7.2.0-2
Thomas Lamprecht [Tue, 10 Jan 2023 14:47:52 +0000 (15:47 +0100)]
bump version to 7.2.0-2

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
15 months agocherry-pick stable fixes for 7.2
Fiona Ebner [Tue, 10 Jan 2023 09:34:25 +0000 (10:34 +0100)]
cherry-pick stable fixes for 7.2

Two for virtio-mem and one for vIOMMU. Both features are not yet
exposed in PVE's qemu-server, but planned to be added.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
15 months agoadd QAPI naming exceptions in patches introducing them
Fiona Ebner [Tue, 10 Jan 2023 08:40:57 +0000 (09:40 +0100)]
add QAPI naming exceptions in patches introducing them

Avoids a patch and is required to compile when not all patches are
applied. No functional change is intended.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
16 months agod/control: drop outdated jemalloc dependencies
Fiona Ebner [Tue, 20 Dec 2022 08:19:53 +0000 (09:19 +0100)]
d/control: drop outdated jemalloc dependencies

Commit 3d785ea ("disable jemalloc") disabled jemalloc support, so
these are not needed anymore.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
16 months agod/control: add libslirp-dev as a build dependency
Fiona Ebner [Tue, 20 Dec 2022 08:19:52 +0000 (09:19 +0100)]
d/control: add libslirp-dev as a build dependency

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
16 months agod/rules: enable slirp again
Fiona Ebner [Tue, 20 Dec 2022 08:19:51 +0000 (09:19 +0100)]
d/rules: enable slirp again

Commit d03e1b3 ("update submodule and patches to 7.2.0") argued that
slirp is not explicitly supported in PVE, but that is not true. In
qemu-server, user networking is supported (via CLI/API) when no bridge
is set on a virtual NIC. So slirp needs to stay to keep such NICs
working.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
16 months agobump version to 7.2.0-1
Wolfgang Bumiller [Fri, 16 Dec 2022 12:18:54 +0000 (13:18 +0100)]
bump version to 7.2.0-1

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
16 months agod/rules: explicitly disable building slirp
Fiona Ebner [Wed, 14 Dec 2022 14:16:33 +0000 (15:16 +0100)]
d/rules: explicitly disable building slirp

Otherwise, it depends on whether libslirp-devel is installed or not.
See the previous commit message for more context.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
16 months agoupdate submodule and patches to 7.2.0
Fiona Ebner [Wed, 14 Dec 2022 14:16:32 +0000 (15:16 +0100)]
update submodule and patches to 7.2.0

User-facing breaking change:

The slirp submodule for user networking got removed. It would be
necessary to add the --enable-slirp option to the build and/or install
the appropriate library to continue building it. Since PVE is not
explicitly supporting it, it would require additionally installing the
libslirp0 package on all installations and there is *very* little
mention on the community forum when searching for "slirp" or
"netdev user", the plan is to only enable it again if there is some
real demand for it.

Notable changes:

* The big change for this release is the rework of job locking, using
  a job mutex and introducing _locked() variants of job API functions
  moving away from call-side AioContext locking. See (in the qemu
  submodule) commit 6f592e5aca ("job.c: enable job lock/unlock and
  remove Aiocontext locks") and previous commits for context.

  Changes required for the backup patches:
  * Use WITH_JOB_LOCK_GUARD() and call the _locked() variant of job
    API functions where appropriate (many are only availalbe as
    a _locked() variant).
  * Remove acquiring/releasing AioContext around functions taking the
    job mutex lock internally.

  The patch introducing sequential transaction support for jobs needs
  to temporarily unlock the job mutex to call job_start() when
  starting the next job in the transaction.

* The zeroinit block driver now marks its child as primary.

  The documentation in include/block/block-common.h states:
  > Filter node has exactly one FILTERED|PRIMARY child, and may have
  > other children which must not have these bits

  Without this, an assert will trigger when copying to a zeroinit target
  with qemu-img convert, because bdrv_child_cb_attach() expects any
  non-PRIMARY child to be not FILTERED:
  > qemu-img convert -n -p -f raw -O raw input.raw zeroinit:output.raw
  > qemu-img: ../block.c:1476: bdrv_child_cb_attach: Assertion
  > `!(child->role & BDRV_CHILD_FILTERED)' failed.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agobump version to 7.1.0-4
Thomas Lamprecht [Tue, 22 Nov 2022 08:21:10 +0000 (09:21 +0100)]
bump version to 7.1.0-4

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agocherry-pick "block/block-backend: blk_set_enable_write_cache is IO_CODE"
Thomas Lamprecht [Tue, 22 Nov 2022 08:18:56 +0000 (09:18 +0100)]
cherry-pick "block/block-backend: blk_set_enable_write_cache is IO_CODE"

albeit I was short from disarming that GLOBAL_STATE_CODE assert
completely, as its just bogus to assert that on runtime for a lot of
call sites, rather it should be verified on compilation (function
coloring with attributes and maybe a compiler plugin).

But, as this is already solved upstream lets take in that patch.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agobump version to 7.1.0-3
Thomas Lamprecht [Fri, 28 Oct 2022 08:27:54 +0000 (10:27 +0200)]
bump version to 7.1.0-3

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agoinit: daemonize: defuse PID file resolve error to warning
Thomas Lamprecht [Fri, 28 Oct 2022 08:22:21 +0000 (10:22 +0200)]
init: daemonize: defuse PID file resolve error to warning

fixes file restore, where we actively unlink the PID file of the
transient VM ourself after opening it - while we use it only for
tracking when the QEMU process itself has finished start up, it's
easier and cleaner to fix this regression now, than to rework that to
something that doesn't depends on the PID file at all.

Applying Fiona's patch as patch-patch tracked under extra, as I
expect that something similar to this gets accepted upstreamed.

Link: https://lists.proxmox.com/pipermail/pve-devel/2022-October/054448.html
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
18 months agobump version to 7.1.0-2
Wolfgang Bumiller [Tue, 18 Oct 2022 13:35:09 +0000 (15:35 +0200)]
bump version to 7.1.0-2

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
18 months agosavevm async IO channel: channel writev: fix return value in error case
Fiona Ebner [Mon, 17 Oct 2022 07:18:33 +0000 (09:18 +0200)]
savevm async IO channel: channel writev: fix return value in error case

The documentation in include/io/channel.h states that -1 or
QIO_CHANNEL_ERR_BLOCK should be returned upon error. Simply passing
along the return value from the blk-functions has the potential to
confuse the call sides. Non-blocking mode is not implemented
currently, so -1 it is.

The "return ret" was mistakenly left over from the previous
QEMUFileOps based implementation. Also, use error_setg_errno(), since
the blk(_co)_p{readv,writev} functions return errno codes.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
18 months agobump version to 7.1.0-1
Wolfgang Bumiller [Fri, 14 Oct 2022 12:55:53 +0000 (14:55 +0200)]
bump version to 7.1.0-1

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
18 months ago{alloc track, pbs} block driver: bdrv_co_preadv: adapt return values
Fiona Ebner [Fri, 14 Oct 2022 12:07:16 +0000 (14:07 +0200)]
{alloc track, pbs} block driver: bdrv_co_preadv: adapt return values

to be in-line with what other implementations in QEMU do. Commit
1d39c7098bbfa6862cb96066c4f8f6735ea397c5 mentions the EIO bit and
the function is expected to return 0 upon success (see other
implementations).

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
18 months agosavevm async: cleaner initialization of target_close_wait member
Fiona Ebner [Fri, 14 Oct 2022 12:07:15 +0000 (14:07 +0200)]
savevm async: cleaner initialization of target_close_wait member

Suggested-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
18 months agocherry-pick upstream fixes for 7.1.0
Fiona Ebner [Fri, 14 Oct 2022 12:07:14 +0000 (14:07 +0200)]
cherry-pick upstream fixes for 7.1.0

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
18 months agoupdate submodule and patches to 7.1.0
Fiona Ebner [Fri, 14 Oct 2022 12:07:13 +0000 (14:07 +0200)]
update submodule and patches to 7.1.0

Notable changes:
* The only big change is the switch to using a custom QIOChannel for
  savevm-async, because the previously used QEMUFileOps was dropped.

  Changes to the current implementation:

  * Switch to vector based methods as required for an IO channel. For
    short reads the passed-in IO vector is stuffed with zeroes at the
    end, just to be sure.

  * For reading: The documentation in include/io/channel.h states that
    at least one byte should be read, so also error out when whe are
    at the very end instead of returning 0.

  * For reading: Fix off-by-one error when request goes beyond end.

    The wrong code piece was:
    if ((pos + size) > maxlen) {
        size = maxlen - pos - 1;
    }

    Previously, the last byte would not be read. It's actually
    possible to get a snapshot .raw file that has content all the way
    up the final 512 byte (= BDRV_SECTOR_SIZE) boundary without any
    trailing zero bytes (I wrote a script to do it).

    Luckily, it didn't cause a real issue, because qemu_loadvm_state()
    is not interested in the final (i.e. QEMU_VM_VMDESCRIPTION)
    section. The buffer for reading it is simply freed up afterwards
    and the function will assume that it read the whole section, even
    if that's not the case.

  * For writing: Make use of the generated blk_pwritev() wrapper
    instead of manually wrapping the coroutine to simplify and save a
    few lines.

* Adapt to changed interfaces for blk_{pread,pwrite}:
  * a9262f551e ("block: Change blk_{pread,pwrite}() param order")
  * 3b35d4542c ("block: Add a 'flags' param to blk_pread()")
  * bf5b16fa40 ("block: Make blk_{pread,pwrite}() return 0 on success")
  Those changes especially affected the qemu-img dd patches, because
  the context also changed, but also some of our block drivers used
  the functions.

* Drop qemu-common.h include: it got renamed after essentially
  everything was moved to other headers. The only remaining user I
  could find for things dropped from the header between 7.0 and 7.1
  was qemu_get_vm_name() in the iscsi-initiatorname patch, but it
  already includes the header to which the function was moved.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
18 months agobump version to 7.0.0-4
Wolfgang Bumiller [Mon, 10 Oct 2022 09:56:27 +0000 (11:56 +0200)]
bump version to 7.0.0-4

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
18 months agoadd patch: PVE Backup: allow passing max-workers performance setting
Wolfgang Bumiller [Mon, 10 Oct 2022 09:55:15 +0000 (11:55 +0200)]
add patch: PVE Backup: allow passing max-workers performance setting

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
18 months agod/rules: add revision to package version
Fiona Ebner [Fri, 30 Sep 2022 12:18:31 +0000 (14:18 +0200)]
d/rules: add revision to package version

This version string can be queried with $BINARY --version as well as
the query-version QMP command.

Useful for qemu-server to be able to report the running QEMU version
exactly. Could also be used to version guard against features as an
alternative to the query-proxmox-support QMP command.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
19 months agobump version to 7.0.0-3
Thomas Lamprecht [Tue, 30 Aug 2022 10:54:12 +0000 (12:54 +0200)]
bump version to 7.0.0-3

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
20 months agosavevm-async: set SAVE_STATE_DONE when closing state file was successful
Fiona Ebner [Thu, 18 Aug 2022 11:44:17 +0000 (13:44 +0200)]
savevm-async: set SAVE_STATE_DONE when closing state file was successful

Without this change, it's necessary to send a second savevm-end QMP
command after aborting a snaphsot, before a new savevm-start QMP
command can succeed.

In process_savevm_finalize(), no longer set an error in the abort
scenario. If there already is another error, there's no need to
override it. If canceling was done intentionally, qmp_savevm_end()
is responsible for setting the state now.

Reported-by: Mira Limbeck <m.limbeck@proxmox.com>
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
20 months agosavevm-async: avoid segfault when aborting snapshot
Fiona Ebner [Thu, 18 Aug 2022 11:44:16 +0000 (13:44 +0200)]
savevm-async: avoid segfault when aborting snapshot

Reported in the community forum[0].

For 6.1.0, there were a few changes to the coroutine-sleep API, but
the adaptations in f376b2b ("update and rebase to QEMU v6.1.0") made
a mistake.

Currently, target_close_wait is NULL when passed to
qemu_co_sleep_ns_wakeable(), which further passes it to
qemu_co_sleep(), but there, it is dereferenced when trying to access
the 'to_wake' member:

> Thread 1 "kvm" received signal SIGSEGV, Segmentation fault.
> qemu_co_sleep (w=0x0) at ../util/qemu-coroutine-sleep.c:57

To fix it, create a proper struct and pass its address instead. Also
call qemu_co_sleep_wake unconditionally, because the NULL check (for
the 'to_wake' member) is done inside the function itself.

This patch is based on what the QEMU commits introducing the changes
to the coroutine-sleep API did to the callers in QEMU:
eaee072085 ("coroutine-sleep: allow qemu_co_sleep_wake that wakes nothing")
29a6ea24eb ("coroutine-sleep: replace QemuCoSleepState pointer with struct in the API")

[0]: https://forum.proxmox.com/threads/112130/

Tested-by: Mira Limbeck <m.limbeck@proxmox.com>
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
21 months agobump version to 7.0.0-2
Thomas Lamprecht [Wed, 20 Jul 2022 07:17:13 +0000 (09:17 +0200)]
bump version to 7.0.0-2

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
21 months agoadd two more stable patches
Fabian Ebner [Tue, 19 Jul 2022 08:19:31 +0000 (10:19 +0200)]
add two more stable patches

For the io_uring patch, it's not very clear which configurations can
trigger it, but it should be rather uncommon. See qemu commit
be6a166fde652589761cf70471bcde623e9bd72a for a bit more information.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
21 months agobump version to 7.0.0-1
Wolfgang Bumiller [Thu, 30 Jun 2022 09:08:36 +0000 (11:08 +0200)]
bump version to 7.0.0-1

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
21 months agocherry-pick upstream fixes for 7.0.0
Fabian Ebner [Mon, 27 Jun 2022 11:05:43 +0000 (13:05 +0200)]
cherry-pick upstream fixes for 7.0.0

coming in via qemu-stable (except for the vdmk fix, which was tagged
for-7.0 on the qemu-devel list, but didn't make it into the release).

Also took the chance to switch the gluster fix to the version that
made it into upstream.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
21 months agod/rules: adapt to changed opensbi riscv filenames in 7.0.0
Fabian Ebner [Mon, 27 Jun 2022 11:05:42 +0000 (13:05 +0200)]
d/rules: adapt to changed opensbi riscv filenames in 7.0.0

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
21 months agod/rules: drop outdated configure flags
Fabian Ebner [Mon, 27 Jun 2022 11:05:41 +0000 (13:05 +0200)]
d/rules: drop outdated configure flags

See QEMU commits 9e8be4c546ce8469ca9702715bf8f198d604b685 and
a5730b8bd3675f484ed0eacea052452048eeb35d for more information.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
21 months agoupdate submodule and patches to 7.0.0
Fabian Ebner [Mon, 27 Jun 2022 11:05:40 +0000 (13:05 +0200)]
update submodule and patches to 7.0.0

Only very minor changes needed:
* Most patches in extra (or some version of them) are part of 7.0.0.
* aio_set_fd_handler got an extra parameter, but can just pass NULL
  like we did for the related 'poll' parameter. See QEMU commit
  826cc32423db2a99d184dbf4f507c737d7e7a4ae for more.
* Add include for qemu/memalign.h in vma.c and vma-writer.c.
* Add reverts for fixups of already reverted 0347a8fd4c ("block/rbd:
  implement bdrv_co_block_status") that came in with 7.0.0. Those
  fixups are not enough, see Proxmox bugzilla #4047.
* Two trivial context changes for bitmap-mirror patches.
* block_int.h got split up into multiple headers.
* Some context changes in configure and meson.build.
* Used the oppurtunity to squash fixup of bdrv_backuo_dump_create typo
  in a later patch into the patch introducing the function (had to
  move code to new header during rebase).

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
22 months agobump version to 6.2.0-11
Thomas Lamprecht [Wed, 22 Jun 2022 13:54:58 +0000 (15:54 +0200)]
bump version to 6.2.0-11

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
22 months agovma/alloc-track improvements
Thomas Lamprecht [Wed, 22 Jun 2022 13:52:16 +0000 (15:52 +0200)]
vma/alloc-track improvements

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
22 months agore-export patches in normalized form
Thomas Lamprecht [Wed, 22 Jun 2022 13:47:34 +0000 (15:47 +0200)]
re-export patches in normalized form

iow. using:

git format-patch --zero-commit --no-signature --no-numbered --diff-algorithm=myers ...

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
22 months agoadd 'namespace' to BlockdevOptionsPbs
Dominik Csapak [Wed, 22 Jun 2022 12:57:34 +0000 (14:57 +0200)]
add 'namespace' to BlockdevOptionsPbs

so that we can use it for the -blockdev options (used for live-restore)

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
22 months agobump version to 6.2.0-10
Fabian Grünbichler [Thu, 9 Jun 2022 14:35:57 +0000 (16:35 +0200)]
bump version to 6.2.0-10

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
22 months agoadd d/source/include-binaries
Fabian Grünbichler [Thu, 9 Jun 2022 14:35:01 +0000 (16:35 +0200)]
add d/source/include-binaries

to shutup dpkg-source when building a source package

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
22 months agofix #4101: acquire job's aio context before calling job_unref
Fabian Ebner [Thu, 9 Jun 2022 12:31:13 +0000 (14:31 +0200)]
fix #4101: acquire job's aio context before calling job_unref

Otherwise, we might run into an abort via bdrv_co_yield_to_drain()
(can at least happen when a disk with iothread is used):
> #0  0x00007fef4f5dece1 __GI_raise (libc.so.6 + 0x3bce1)
> #1  0x00007fef4f5c8537 __GI_abort (libc.so.6 + 0x25537)
> #2  0x00005641bce3c71f error_exit (qemu-system-x86_64 + 0x80371f)
> #3  0x00005641bce3d02b qemu_mutex_unlock_impl (qemu-system-x86_64 + 0x80402b)
> #4  0x00005641bcd51655 bdrv_co_yield_to_drain (qemu-system-x86_64 + 0x718655)
> #5  0x00005641bcd52de8 bdrv_do_drained_begin (qemu-system-x86_64 + 0x719de8)
> #6  0x00005641bcd47e07 blk_drain (qemu-system-x86_64 + 0x70ee07)
> #7  0x00005641bcd498cd blk_unref (qemu-system-x86_64 + 0x7108cd)
> #8  0x00005641bcd31e6f block_job_free (qemu-system-x86_64 + 0x6f8e6f)
> #9  0x00005641bcd32d65 job_unref (qemu-system-x86_64 + 0x6f9d65)
> #10 0x00005641bcd93b3d pvebackup_co_complete_stream (qemu-system-x86_64 + 0x75ab3d)
> #11 0x00005641bce4e353 coroutine_trampoline (qemu-system-x86_64 + 0x815353)

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Acked-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
22 months agobump version to 6.2.0-9
Wolfgang Bumiller [Wed, 8 Jun 2022 12:04:09 +0000 (14:04 +0200)]
bump version to 6.2.0-9

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
22 months agopbs cleanup fixes
Wolfgang Bumiller [Wed, 8 Jun 2022 11:10:51 +0000 (13:10 +0200)]
pbs cleanup fixes

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
22 months agodelete patches which were dropped from the series file
Wolfgang Bumiller [Wed, 8 Jun 2022 11:07:02 +0000 (13:07 +0200)]
delete patches which were dropped from the series file

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
23 months agobump version to 6.2.0-8
Thomas Lamprecht [Thu, 19 May 2022 07:25:11 +0000 (09:25 +0200)]
bump version to 6.2.0-8

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
23 months agoadd revert to work around performance regression when backing up large RBD disk
Fabian Ebner [Tue, 17 May 2022 08:29:49 +0000 (10:29 +0200)]
add revert to work around performance regression when backing up large RBD disk

resulting in QMP timeouts and very slow backups. The plan is to figure
out (ideally together with upstream) a way to make the implementation
of bdrv_co_block_status for RBD more efficient. But for now, revert
the problematic change as a stop-gap measure.

Upstream bug report:
https://gitlab.com/qemu-project/qemu/-/issues/1026

Forum threads:
https://forum.proxmox.com/threads/109272/
https://forum.proxmox.com/threads/109448/
https://forum.proxmox.com/threads/101334/ (partially)

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
23 months agobump version to 6.2.0-7
Thomas Lamprecht [Thu, 12 May 2022 14:06:00 +0000 (16:06 +0200)]
bump version to 6.2.0-7

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
23 months agod/control: bump build-depenceny of proxmox-backup-qemu to 1.3.0-1
Thomas Lamprecht [Thu, 12 May 2022 14:05:30 +0000 (16:05 +0200)]
d/control: bump build-depenceny of proxmox-backup-qemu to 1.3.0-1

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
23 months agonamespace support
Wolfgang Bumiller [Thu, 12 May 2022 11:04:24 +0000 (13:04 +0200)]
namespace support

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
23 months agobump version to 6.2.0-6
Thomas Lamprecht [Wed, 11 May 2022 08:42:57 +0000 (10:42 +0200)]
bump version to 6.2.0-6

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
23 months agobackport various fixes for gluster, qxl and vnc
Thomas Lamprecht [Wed, 11 May 2022 08:40:14 +0000 (10:40 +0200)]
backport various fixes for gluster, qxl and vnc

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobump version to 6.2.0-5
Thomas Lamprecht [Mon, 25 Apr 2022 08:13:50 +0000 (10:13 +0200)]
bump version to 6.2.0-5

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agovma: allow partial restore
Thomas Lamprecht [Mon, 25 Apr 2022 08:07:24 +0000 (10:07 +0200)]
vma: allow partial restore

Introduce a new map line for skipping a certain drive, of the form
skip=drive-scsi0

Since in PVE, most archives are compressed and piped to vma for
restore, it's not easily possible to skip reads.

For the reader, a new skip flag for VmaRestoreState is added and the
target is allowed to be NULL if skip is specified when registering.
If
the skip flag is set, no writes will be made as well as no check for
duplicate clusters. Therefore, the flag is not set for verify.

Originally-by: Fabian Ebner <f.ebner@proxmox.com>
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Acked-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agopatches: update context
Thomas Lamprecht [Mon, 25 Apr 2022 08:07:01 +0000 (10:07 +0200)]
patches: update context

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agovma: restore: call blk_unref for all opened block devices
Thomas Lamprecht [Mon, 25 Apr 2022 08:05:26 +0000 (10:05 +0200)]
vma: restore: call blk_unref for all opened block devices

Originally-by: Fabian Ebner <f.ebner@proxmox.com>
Link: https://lists.proxmox.com/pipermail/pve-devel/2022-April/052642.html
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobump version to 6.2.0-4
Thomas Lamprecht [Fri, 22 Apr 2022 09:52:34 +0000 (11:52 +0200)]
bump version to 6.2.0-4

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agovarious stable backports
Thomas Lamprecht [Fri, 22 Apr 2022 08:22:39 +0000 (10:22 +0200)]
various stable backports

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agod/copyright: drop trailing whitespace
Thomas Lamprecht [Fri, 22 Apr 2022 07:16:23 +0000 (09:16 +0200)]
d/copyright: drop trailing whitespace

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agod/control: add suggest dependency-hint for libgl1
Thomas Lamprecht [Fri, 22 Apr 2022 07:09:04 +0000 (09:09 +0200)]
d/control: add suggest dependency-hint for libgl1

It pulls in a lot of stuff via the libglx0 -> libglx-mesa0 dependency
chain, so only suggest it for now to avoid installing it in the
installer or via common "PVE on-top Debian" installations, VirGL
integration is experimental after all and we may drop/replace it with
the vulkan based venus one, once available (Debian 12?).

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agod/control: add libgbm to build dependencies
Thomas Lamprecht [Fri, 22 Apr 2022 06:50:32 +0000 (08:50 +0200)]
d/control: add libgbm to build dependencies

required for good virgl support

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobump version to 6.2.0-3
Thomas Lamprecht [Fri, 15 Apr 2022 07:09:43 +0000 (09:09 +0200)]
bump version to 6.2.0-3

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agocherry-pick fix for passing some acpi slic tables
Thomas Lamprecht [Fri, 15 Apr 2022 06:07:34 +0000 (08:07 +0200)]
cherry-pick fix for passing some acpi slic tables

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobump version to 6.2.0-2
Wolfgang Bumiller [Thu, 3 Mar 2022 11:05:37 +0000 (12:05 +0100)]
bump version to 6.2.0-2

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2 years agobackup: add patch to initialize bcs bitmap early enough for PBS
Fabian Ebner [Wed, 2 Mar 2022 09:05:16 +0000 (10:05 +0100)]
backup: add patch to initialize bcs bitmap early enough for PBS

This is necessary for multi-disk backups where not all jobs are
immediately started after they are created. QEMU commit
06e0a9c16405c0a4c1eca33cf286cc04c42066a2 did already part of the work,
ensuring that new writes after job creation don't pass through to the
backup, but not yet for the MIRROR_SYNC_MODE_BITMAP case which is used
for PBS.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2 years agod/control: mark numactl a recommended package
Thomas Lamprecht [Thu, 24 Feb 2022 06:49:01 +0000 (07:49 +0100)]
d/control: mark numactl a recommended package

we do not call in anywhere unconditionally

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agod/control: drop sdl dependency, we disable it on compile tinme
Thomas Lamprecht [Thu, 24 Feb 2022 06:48:21 +0000 (07:48 +0100)]
d/control: drop sdl dependency, we disable it on compile tinme

disabled via d/rules since a while...

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agod/control: libaio1 is added by dh shlibs
Thomas Lamprecht [Thu, 24 Feb 2022 06:48:03 +0000 (07:48 +0100)]
d/control: libaio1 is added by dh shlibs

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agoenable zstd support
Thomas Lamprecht [Thu, 24 Feb 2022 05:34:34 +0000 (06:34 +0100)]
enable zstd support

plan to use that for multifd migration, among other things

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agocompile in virgl support
Thomas Lamprecht [Wed, 23 Feb 2022 08:28:52 +0000 (09:28 +0100)]
compile in virgl support

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobump version to 6.2.0-1
Thomas Lamprecht [Fri, 18 Feb 2022 13:23:41 +0000 (14:23 +0100)]
bump version to 6.2.0-1

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agod/rules: disable libssh by default
Thomas Lamprecht [Fri, 18 Feb 2022 13:21:32 +0000 (14:21 +0100)]
d/rules: disable libssh by default

was always disabled in our clean builds, this now also avoids
auto-enabling it on "dirty" build hosts

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agoadd patch for loading a snapshot with qemu-img dd
Fabian Ebner [Fri, 11 Feb 2022 09:24:35 +0000 (10:24 +0100)]
add patch for loading a snapshot with qemu-img dd

Will be used when cloning from a qcow2 efidisk.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
2 years agofix getopt-string when introducing -n option for qemu-img dd
Fabian Ebner [Fri, 11 Feb 2022 09:24:34 +0000 (10:24 +0100)]
fix getopt-string when introducing -n option for qemu-img dd

The colon after U is wrong, because it doesn't take an argument.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
2 years agoupdate submodule and patches to 6.2.0
Fabian Ebner [Fri, 11 Feb 2022 09:24:33 +0000 (10:24 +0100)]
update submodule and patches to 6.2.0

Notable changes:
* bdrv_co_p{discard,readv,writev,write_zeroes} function signatures
  changed, to using int64_t for offsets/bytes and some still had int
  rather than BrdvRequestFlags for the flags.
* job_cancel_sync now has a force parameter. Commit messages in
  73895f3838cd7fdaf185cf1dbc47be58844a966f
  4cfb3f05627ad82af473e7f7ae113c3884cd04e3
  sound like using force=true makes more sense.
* Added 3 patches coming in via qemu-stable tag, most important one is
  to work around a librbd issue.
* Added another 3 patches from qemu-devel to fix issue leading to
  crash when live migrating with iothread.
* cluster_size calculation helper changed (see patch pve/0026).
* QAPI's if conditionals now use 'CONFIG_FOO' rather than
  'defined(CONFIG_FOO)'

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
2 years agobump version to 6.1.1-2
Thomas Lamprecht [Mon, 14 Feb 2022 14:53:18 +0000 (15:53 +0100)]
bump version to 6.1.1-2

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agovma: create: register all streams before entering coroutines
Fabian Ebner [Mon, 14 Feb 2022 11:02:52 +0000 (12:02 +0100)]
vma: create: register all streams before entering coroutines

Otherwise, the header might already get written by a coroutine and
registering further streams will fail after that.

Also adds a missing g_list_free call for the other GList that's used.

Reported in the community forum:
https://forum.proxmox.com/threads/104744/

Reproducer script (increase beyond 30 if the issue isn't triggered yet):
> #!/usr/bin/perl
>
> my $dir = "./vma-create-bug";
> mkdir $dir;
>
> my $archive_path = "$dir/vzdump-qemu-104-2202_02_02-00_00_00.vma";
> unlink $archive_path;
>
> my $cmd = "vma create $archive_path -v";
> for (my $i = 0; $i < 30; $i++) {
>   system("truncate -s 1M $dir/drive-virtio$i.img");
>   $cmd .= " drive-virtio$i=$dir/drive-virtio$i.img";
> }
> system($cmd);

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
2 years agobump version to 6.1.1-1
Thomas Lamprecht [Thu, 13 Jan 2022 09:57:48 +0000 (10:57 +0100)]
bump version to 6.1.1-1

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agoupdate submodule and patches to 6.1.1
Thomas Lamprecht [Thu, 13 Jan 2022 09:34:33 +0000 (10:34 +0100)]
update submodule and patches to 6.1.1

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobump version to 6.1.0-3
Thomas Lamprecht [Wed, 1 Dec 2021 14:35:49 +0000 (15:35 +0100)]
bump version to 6.1.0-3

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>