]> git.ipfire.org Git - thirdparty/libvirt.git/log
thirdparty/libvirt.git
2 days agoconf: Don't leak virDomainDiskDef's 'statistics' member
Peter Krempa [Wed, 5 Nov 2025 15:03:13 +0000 (16:03 +0100)] 
conf: Don't leak virDomainDiskDef's 'statistics' member

In commit 19fc614d531f I've added an option to configure statistics but
forgot to free it once the disk definition struct is freed.

Fixes: 19fc614d531fb75877abb59baaf33bc1add4d483
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
2 days agoqemu: Add support for enabling timed block device statistics collection
Peter Krempa [Tue, 7 Oct 2025 15:43:41 +0000 (17:43 +0200)] 
qemu: Add support for enabling timed block device statistics collection

Add validation that qemu supports the collection of statistics and
enable it on the block device commandline.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 days agoconf: Add configuration option for timed disk statistics collection
Peter Krempa [Mon, 6 Oct 2025 15:32:28 +0000 (17:32 +0200)] 
conf: Add configuration option for timed disk statistics collection

QEMU supports collection of disk statistics in configurable time
windows. Add support for enabling this feature to the conf parser.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 days agoqemu: capabilities: Introduce QEMU_CAPS_DISK_TIMED_STATS
Peter Krempa [Tue, 7 Oct 2025 12:57:50 +0000 (14:57 +0200)] 
qemu: capabilities: Introduce QEMU_CAPS_DISK_TIMED_STATS

The capability tracks support for 'stats-intervals' property of disk
frontends which enables statistics collection on the devices.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 days agoExpose qemu timed block statistics via bulk stats API
Peter Krempa [Fri, 12 Sep 2025 11:32:36 +0000 (13:32 +0200)] 
Expose qemu timed block statistics via bulk stats API

The statistics show various disk access timing parameters collected in
configurable interval which can be useful for performance
investigations.

Note that the statistic collection needs to be enabled explicitly for
the statistics to be collected and displayed.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 days agoqemu_monitor: Extract 'timed_stats' of block devices
Peter Krempa [Thu, 11 Sep 2025 15:07:11 +0000 (17:07 +0200)] 
qemu_monitor: Extract 'timed_stats' of block devices

The 'timed_stats' block is a set of statistics gathered in configurable
time intervals. The stats include latency timings of reads/writes as
well as the depth of the request queues.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 days agoExpose qemu storage request limits via bulk stats API
Peter Krempa [Mon, 6 Oct 2025 13:30:43 +0000 (15:30 +0200)] 
Expose qemu storage request limits via bulk stats API

Management applications can use the detected limits to cross reference
with configuration within the VM to ensure optimal performance.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 days agoqemu: monitor: Extract block limit values
Peter Krempa [Wed, 1 Oct 2025 08:42:09 +0000 (10:42 +0200)] 
qemu: monitor: Extract block limit values

The 'limits' field reports various maximum request sizes and
alignments for a qemu blockdev protocol node.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 days agoqemucapabilitiestest: qemucapabilitiestest: Update 'caps_10.2.0_x86_64' to 'v10.1...
Peter Krempa [Mon, 3 Nov 2025 12:04:09 +0000 (13:04 +0100)] 
qemucapabilitiestest: qemucapabilitiestest: Update 'caps_10.2.0_x86_64' to 'v10.1.0-1969-g53b41bb789'

Notable changes:
 - deprecated 'reconnect' option removed from socket chardevs
 - 'query-accelerators' QMP command added
 - 'query-firmware-log' QMP command added
 - block image limits exposed via QMP
 - timed block statistics collection config is now available via -device
 - 'audio-backend' QOM object type added
 - 'mshv-accel' QOM object type added
 - 'tsa-l1-no', 'tsa-sq-no', 'verw-clear' cpu properties added
 - SCLP_CPI_INFO_AVAILABLE event addedt

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 days agoqemu: capabilities: Fix logic for formatting 'reconnect' parameter
Peter Krempa [Mon, 3 Nov 2025 12:23:48 +0000 (13:23 +0100)] 
qemu: capabilities: Fix logic for formatting 'reconnect' parameter

In commit e4d058866e9 I've converted the code to use the modern
'reconnect-ms' parameter instead of 'reconnect' but messed up the logic
for the time when 'reconnect' will be removed.

We need to check QEMU_CAPS_NETDEV_STREAM_RECONNECT_MILISECONDS
individually and not based on QEMU_CAPS_NETDEV_STREAM_RECONNECT.

Fix the logic as upstream qemu now removed 'reconnect'.

Fixes: e4d058866e9563756349de6b3f451a53e64ca872
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 days agoqemu: capabilities: Retire QEMU_CAPS_CHARDEV_RECONNECT
Peter Krempa [Mon, 3 Nov 2025 12:18:02 +0000 (13:18 +0100)] 
qemu: capabilities: Retire QEMU_CAPS_CHARDEV_RECONNECT

The flag was never queried since it's introduction in
5f7da98b3ff29dc274c9e500f6afa40a97f02b7b

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 days agoqemucapabilitiesdata: README: Add rules for dumps of unreleased qemu
Peter Krempa [Mon, 3 Nov 2025 16:03:54 +0000 (17:03 +0100)] 
qemucapabilitiesdata: README: Add rules for dumps of unreleased qemu

Add a note that the filename should match the final version number and
that it's expected to do an update after the given qemu version gets
released.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
2 days agoci: Refresh with 'lcitool manifest'
Michal Privoznik [Wed, 5 Nov 2025 11:31:41 +0000 (12:31 +0100)] 
ci: Refresh with 'lcitool manifest'

The only change here is that fuse3 is installed instead of fuse.
This is needed by v11.9.0-9-gb100dabd6d which made the change in
spec file.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
3 days agorpm: change from fuse-devel to fuse3-devel
Daniel P. Berrangé [Fri, 31 Oct 2025 14:02:09 +0000 (14:02 +0000)] 
rpm: change from fuse-devel to fuse3-devel

The meson.build already supports both fuse2 and fuse3, and fuse3
is in all Fedora versions we need, so switch to the newer version
unconditionally.

Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
3 days agoRemove arm from KVM arches
Daniel P. Berrangé [Mon, 3 Nov 2025 14:36:34 +0000 (14:36 +0000)] 
Remove arm from KVM arches

Not only was ARM 7 dropped from Fedora 37, KVM support has also been
dropped in upstream Linux.

Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
4 days agoqemu: Ignore "ht" CPU feature
Jiri Denemark [Fri, 24 Oct 2025 12:17:56 +0000 (14:17 +0200)] 
qemu: Ignore "ht" CPU feature

The feature does not do anything, QEMU will always set it according to
the CPU topology completely ignoring what we asked for. Unfortunately,
the way the state of "ht" is reported changed in QEMU 10.0.0 (commit
c6bd2dd634208).

QEMU older than 10.0.0 would just report whatever was specified on the
command line totally ignoring the actual state of the feature visible to
a guest. But after the change QEMU reports ht=on in case it enabled "ht"
based on the CPU topology. In all other cases QEMU still reports the
state requested on the command line.

As a result of this change a domain with multiple CPU threads started on
QEMU < 10.0.0 could not be migrated to QEMU >= 10.0.0 unless "ht" was
explicitly enabled in the domain XML because libvirt would see "ht"
enabled on the destination, but disabled on the source (the guest would
see "ht" enabled in both cases anyway). Outgoing migration of domains
started on QEMU >= 10.0.0 is not affected.

To fix this issue we can completely ignore "ht" both in the domain XML
and in the CPU properties reported by QEMU. With this fix incoming
migration to QEMU >= 10.0.0 works again.

Fixes: https://gitlab.com/libvirt/libvirt/-/issues/821
Fixes: https://issues.redhat.com/browse/RHEL-104216
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
4 days agoqemu_monitor: Filter CPU features reported by QEMU
Jiri Denemark [Fri, 24 Oct 2025 15:16:32 +0000 (17:16 +0200)] 
qemu_monitor: Filter CPU features reported by QEMU

Some features may be on our ignore list because they do nothing even
though QEMU still supports them and reports their state. But as the
features do nothing, the state reported by QEMU may not correspond to
what the guest sees. To avoid possible confusion we may just pretend
QEMU did not report any of the features on our ignore list.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
4 days agoqemu_process: Always fix CPUs on reconnect
Jiri Denemark [Fri, 24 Oct 2025 13:36:18 +0000 (15:36 +0200)] 
qemu_process: Always fix CPUs on reconnect

We fix CPUs (i.e., remove ignored CPU features) only when libvirt/QEMU
combo used to start the domain is very old and doesn't support
query-cpu-model-expansion, in which case the CPU definition may contain
features that are unknown to QEMU. But even if both libvirt and QEMU are
new enough, we still want to remove features that do nothing to minimize
confusion or to avoid false migration issues.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
4 days agoqemu_domain: Fix qemuDomainFixupCPUs
Jiri Denemark [Fri, 24 Oct 2025 13:27:03 +0000 (15:27 +0200)] 
qemu_domain: Fix qemuDomainFixupCPUs

The function was apparently created when the list of ignored CPU
features contained just cmt and related features. The list grew quite a
bit since then and this function stopped making sense as it would remove
all ignored features from CPU definitions but only if cmt was present.
The issue with cmt is long gone and this function was not really doing
anything. Surprisingly this didn't cause any real issues as we don't
update CPU definitions with features unknown to QEMU. But we may still
want to remove ignored features even though QEMU knows about them for
compatibility reasons.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
4 days agoqemu_domain: Simplify qemuDomainFixupCPUs
Jiri Denemark [Fri, 24 Oct 2025 13:13:49 +0000 (15:13 +0200)] 
qemu_domain: Simplify qemuDomainFixupCPUs

Since virCPUDefFilterFeatures never fails, we can use it for in-place
modifications instead of modifying a temporary virCPUDef copy.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
4 days agocpu_conf: Make virCPUDefFilterFeatures return void
Jiri Denemark [Fri, 24 Oct 2025 13:07:45 +0000 (15:07 +0200)] 
cpu_conf: Make virCPUDefFilterFeatures return void

The only thing that can fail inside virCPUDefFilterFeatures is
VIR_DELETE_ELEMENT_INPLACE macro. The macro just calls
virDeleteElementsN, which reports a warning when all elements to be
removed are not within the array bounds and returns -1. The function
succeeds otherwise. But since VIR_DELETE_ELEMENT_INPLACE sets the number
of elements to be removed to 1 and we call it with i < cpu->nfeatures,
the safety check in virDeleteElementsN will never fail. And even if we
theoretically called it with wrong arguments, it just wouldn't do
anything.

Thus we can safely assume VIR_DELETE_ELEMENT_INPLACE always succeeds in
virCPUDefFilterFeatures and avoid reporting any errors to simplify
callers.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
4 days agoPost-release version bump to 11.10.0
Jiri Denemark [Mon, 3 Nov 2025 11:29:58 +0000 (12:29 +0100)] 
Post-release version bump to 11.10.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
4 days agoRelease of libvirt-11.9.0 v11.9.0
Jiri Denemark [Mon, 3 Nov 2025 11:26:40 +0000 (12:26 +0100)] 
Release of libvirt-11.9.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
4 days agoNEWS: mention 'manual' snapshot mode improvement
Peter Krempa [Fri, 31 Oct 2025 13:17:11 +0000 (14:17 +0100)] 
NEWS: mention 'manual' snapshot mode improvement

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
4 days agoTranslated using Weblate (Portuguese)
Américo Monteiro [Mon, 3 Nov 2025 07:03:49 +0000 (07:03 +0000)] 
Translated using Weblate (Portuguese)

Currently translated at 99.5% (10922 of 10976 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
4 days agoTranslated using Weblate (Portuguese)
Anonymous [Mon, 3 Nov 2025 07:03:48 +0000 (07:03 +0000)] 
Translated using Weblate (Portuguese)

Currently translated at 99.5% (10922 of 10976 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Anonymous <noreply@weblate.org>
4 days agoTranslated using Weblate (Portuguese)
Américo Monteiro [Mon, 3 Nov 2025 07:03:47 +0000 (07:03 +0000)] 
Translated using Weblate (Portuguese)

Currently translated at 99.3% (10901 of 10976 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 98.9% (10856 of 10976 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
7 days agoNEWS: Document features/improvements/bug fixes I've participated in
Michal Privoznik [Fri, 31 Oct 2025 12:31:49 +0000 (13:31 +0100)] 
NEWS: Document features/improvements/bug fixes I've participated in

There are some features/improvements/bug fixes I've either
contributed or reviewed/merged. Document them for upcoming
release.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
7 days agoTranslated using Weblate (Ukrainian) v11.9.0-rc2
Yuri Chornoivan [Fri, 31 Oct 2025 09:59:00 +0000 (09:59 +0000)] 
Translated using Weblate (Ukrainian)

Currently translated at 100.0% (10976 of 10976 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/uk/

Signed-off-by: Yuri Chornoivan <yurchor@ukr.net>
7 days agoTranslated using Weblate (Portuguese)
Américo Monteiro [Fri, 31 Oct 2025 09:58:59 +0000 (09:58 +0000)] 
Translated using Weblate (Portuguese)

Currently translated at 98.2% (10788 of 10976 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 98.0% (10766 of 10976 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
7 days agodocs: drvbhyve: document NVMe device
Roman Bogorodskiy [Wed, 29 Oct 2025 17:58:47 +0000 (18:58 +0100)] 
docs: drvbhyve: document NVMe device

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
7 days agoNEWS: document bhyve changes for 11.9.0
Roman Bogorodskiy [Wed, 29 Oct 2025 17:58:46 +0000 (18:58 +0100)] 
NEWS: document bhyve changes for 11.9.0

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
7 days agodrvch: Document config file locations
Michal Privoznik [Fri, 31 Oct 2025 09:45:54 +0000 (10:45 +0100)] 
drvch: Document config file locations

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
7 days agoch: Load ch.conf from SYSCONFDIR
Michal Privoznik [Thu, 23 Oct 2025 13:33:04 +0000 (15:33 +0200)] 
ch: Load ch.conf from SYSCONFDIR

Config files for system instances of our drivers (e.g.
"ch:///system", "qemu:///system", etc.) live under /etc/libvirt.
But for some reason, the CH driver was trying to load the config
file from /var/lib/libvirt/ch/ even though the file is installed
under /etc/libvirt per the following line from src/meson.build:

  install_data(virt_conf_files, install_dir: confdir)

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
7 days agodrvch: Demote example section to a subsection
Michal Privoznik [Fri, 31 Oct 2025 09:43:27 +0000 (10:43 +0100)] 
drvch: Demote example section to a subsection

In our drvch.rst there's a section with example XML. Demote it to
a subsection ('-') since the whole document starts with section
('=') and this paragraph is really just a child of the root.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
7 days agodocs: Document supported URIs for CH driver
Michal Privoznik [Fri, 31 Oct 2025 09:39:05 +0000 (10:39 +0100)] 
docs: Document supported URIs for CH driver

Our docs suggest that only session mode is supported for CH
drvier. Well, that's clearly not case. Document the system URI
and refer to other (remote) supported transport modes (yeah, that
works too).

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
9 days agoUpdate translation files
Weblate [Wed, 29 Oct 2025 12:04:57 +0000 (12:04 +0000)] 
Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/

Signed-off-by: Fedora Weblate Translation <i18n@lists.fedoraproject.org>
9 days agopo: Refresh potfile for v11.9.0 v11.9.0-rc1
Jiri Denemark [Wed, 29 Oct 2025 11:59:52 +0000 (12:59 +0100)] 
po: Refresh potfile for v11.9.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
9 days agodomain_conf: Avoid memory leak in virDomainMemoryDefFree()
Michal Privoznik [Wed, 29 Oct 2025 11:43:39 +0000 (12:43 +0100)] 
domain_conf: Avoid memory leak in virDomainMemoryDefFree()

In my one of my recent commits I've introduced new member to
virDomainMemoryDef struct. While allocated in
virDomainMemoryDefParseXML() its counterpart for freeing is
missing in virDomainMemoryDefFree(). Add it.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
9 days agoNEWS: Document virtio options for memory models
Michal Privoznik [Mon, 27 Oct 2025 14:55:21 +0000 (15:55 +0100)] 
NEWS: Document virtio options for memory models

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
9 days agoqemu_command: Generate virtio options for memory device
Michal Privoznik [Mon, 27 Oct 2025 13:28:08 +0000 (14:28 +0100)] 
qemu_command: Generate virtio options for memory device

Thanks to previous refactors (namely v11.1.0-rc1~142) this is
trivial. There's all the infrastructure needed to generate virtio
options onto cmd line, all that's left to do is set a pointer to
appropriate struct member.

Resolves: https://issues.redhat.com/browse/RHEL-7493
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
9 days agoconf: Introduce virtio options for virtio memory models
Michal Privoznik [Mon, 27 Oct 2025 10:38:57 +0000 (11:38 +0100)] 
conf: Introduce virtio options for virtio memory models

Both virtio-mem and virtio-pmem memory models are virtio devices
and as such support setting various virtio knobs (iommu, ats,
packed, page_per_vq) common to other virtio devices.

Introduce <driver/> element as a child to <memory/> element, just
like we do for other virtio devices, where aforementioned knobs
live.

NB, this is without docs changes, since we do not document which
virtio devices support these knobs and each one is already
documented.

Also, the virtio-options.xml test needed some additional
adjustment (apart from adding virtio-mem device) to enable memory
hotplug.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
9 days agoqemu: Use virDomainMemoryIsVirtioModel()
Michal Privoznik [Mon, 27 Oct 2025 14:05:47 +0000 (15:05 +0100)] 
qemu: Use virDomainMemoryIsVirtioModel()

Instead of having these big switch()-es that enumerate all memory
models (but act only on virtio models), let's use
virDomainMemoryIsVirtioModel() helper instead.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
9 days agoconf: Introduce virDomainMemoryIsVirtioModel()
Michal Privoznik [Mon, 27 Oct 2025 13:54:15 +0000 (14:54 +0100)] 
conf: Introduce virDomainMemoryIsVirtioModel()

The aim is to return true for memory models that are virtio
devices (virtio-mem and virtio-pmem) and false for everything
else.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
9 days agodomain_conf: Switch to virXMLFormatElement() in virDomainMemoryDefFormat()
Michal Privoznik [Mon, 27 Oct 2025 10:42:30 +0000 (11:42 +0100)] 
domain_conf: Switch to virXMLFormatElement() in virDomainMemoryDefFormat()

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
9 days agodomain_conf: Make virDomainMemoryDefFormat() return void
Michal Privoznik [Mon, 27 Oct 2025 10:55:46 +0000 (11:55 +0100)] 
domain_conf: Make virDomainMemoryDefFormat() return void

The only thing that's possibly making virDomainMemoryDefFormat()
fail is call to virDomainMemorySourceDefFormat() but that always
returns zero. Make both functions return void so callers are not
confused.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
9 days agobhyve: support specifying disk rotation rate
Roman Bogorodskiy [Sat, 25 Oct 2025 11:47:15 +0000 (13:47 +0200)] 
bhyve: support specifying disk rotation rate

Bhyve supports specifying disk rotation rate using the nmrr attribute,
e.g.:

 -s 3:0,ahci,hd:/data/img/freebsd.img,nmrr=1

Where 1 means the SSD, 0 (default) means do not report, and other values
specify the actual RPM.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
9 days agobhyve: nvme: check if NVMe is supported by bhyve
Roman Bogorodskiy [Sat, 25 Oct 2025 08:15:58 +0000 (10:15 +0200)] 
bhyve: nvme: check if NVMe is supported by bhyve

For domains using NVMe disks make sure that the bhyve binary supports
that by checking capabilities.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
9 days agobhyve: do not allow more than one NVMe device per controller
Roman Bogorodskiy [Sat, 25 Oct 2025 08:15:57 +0000 (10:15 +0200)] 
bhyve: do not allow more than one NVMe device per controller

As bhyve does not have explicit notion of controllers, and for NVMe
devices it allows to specify one a single source for for a given PCI
address, it effectively means that there could be only one device per
controller.

Update validation code to check this case.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
9 days agobhyve: tests: cover 2 NVMe devices on 2 controllers case
Roman Bogorodskiy [Sat, 25 Oct 2025 08:15:56 +0000 (10:15 +0200)] 
bhyve: tests: cover 2 NVMe devices on 2 controllers case

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
9 days agobhyve: implement NVMe device support
Roman Bogorodskiy [Sat, 25 Oct 2025 08:15:55 +0000 (10:15 +0200)] 
bhyve: implement NVMe device support

NVMe devices in bhyve are modeled this way:

 -s $pciaddr,nvme,devpath[,opts]

devpath can be a path to the image or the block device. It also can be
"ram=size_in_MiB", but this is not covered by this series.

There could be only a single device per PCI address.

Optional configuration options (such as max number of queues, concurrent
I/O requests, etc) are also not covered by this series.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
9 days agoTranslated using Weblate (Italian)
Salvatore Cocuzza [Wed, 29 Oct 2025 09:07:00 +0000 (09:07 +0000)] 
Translated using Weblate (Italian)

Currently translated at 33.6% (3694 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/it/

Signed-off-by: Salvatore Cocuzza <info@salvatorecocuzza.it>
9 days agoTranslated using Weblate (Spanish)
Fco. Javier F. Serrador [Wed, 29 Oct 2025 09:06:59 +0000 (09:06 +0000)] 
Translated using Weblate (Spanish)

Currently translated at 79.1% (8677 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/es/

Signed-off-by: "Fco. Javier F. Serrador" <fserrador@gmail.com>
9 days agoTranslated using Weblate (Finnish)
Ricky Tigg [Wed, 29 Oct 2025 09:06:59 +0000 (09:06 +0000)] 
Translated using Weblate (Finnish)

Currently translated at 22.2% (2437 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/fi/

Signed-off-by: Ricky Tigg <ricky.tigg@gmail.com>
9 days agoTranslated using Weblate (Russian)
Sergey A [Wed, 29 Oct 2025 09:06:58 +0000 (09:06 +0000)] 
Translated using Weblate (Russian)

Currently translated at 82.3% (9029 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/ru/

Signed-off-by: "Sergey A." <Ser82-png@yandex.ru>
9 days agoTranslated using Weblate (Portuguese)
Américo Monteiro [Wed, 29 Oct 2025 09:06:58 +0000 (09:06 +0000)] 
Translated using Weblate (Portuguese)

Currently translated at 97.5% (10692 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 97.4% (10687 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 97.0% (10642 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 96.3% (10562 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 96.1% (10545 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 95.4% (10462 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 95.2% (10445 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 94.5% (10362 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 94.0% (10307 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 93.3% (10230 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 93.0% (10199 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 92.2% (10117 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 92.0% (10090 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 91.3% (10013 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 91.0% (9979 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 90.5% (9926 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 90.3% (9902 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
Translated using Weblate (Portuguese)

Currently translated at 89.3% (9797 of 10962 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/pt/

Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
9 days agoqemuDomainBlocksStatsGather: Fix blockstats gathering after refactor
Peter Krempa [Tue, 28 Oct 2025 16:13:17 +0000 (17:13 +0100)] 
qemuDomainBlocksStatsGather: Fix blockstats gathering after refactor

Commit 58aa005f3e95114 which refactored how block stats are stored
intended to change the code path where stats for all devices are totaled
together by allocating new stats object and using that but the commit
forgot to actually change the pointers inside the loop.

Unfortunately this was not caught by the compiler as there were
pre-existing pointers of the same type with the same name, which
resulted into a NULL dereference.

Fixes: 58aa005f3e95114b4f2dab76ee4ade06182a3f20
Closes: https://gitlab.com/libvirt/libvirt/-/issues/827
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
2 weeks agoconf: never reject <disk> <seclabel relabel='no'> overrides
Cole Robinson [Tue, 14 Oct 2025 17:41:45 +0000 (13:41 -0400)] 
conf: never reject <disk> <seclabel relabel='no'> overrides

Trying to disable <seclabel> for the whole <domain> and _also_
disable <seclabel> at the <disk> level will fail with:

  error: unsupported configuration: label overrides require relabeling to be enabled at the domain level

which seems wrong. Instead skip the validation when disk seclabel
has relabel='no', that config should always be valid.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
2 weeks agoNEWS: ch: announce network hotplug feature
Stefan Kober [Mon, 6 Oct 2025 15:18:11 +0000 (17:18 +0200)] 
NEWS: ch: announce network hotplug feature

On-behalf-of: SAP stefan.kober@sap.com
Signed-off-by: Stefan Kober <stefan.kober@cyberus-technology.de>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoch: implement network device hot detach
Stefan Kober [Mon, 6 Oct 2025 15:18:10 +0000 (17:18 +0200)] 
ch: implement network device hot detach

On-behalf-of: SAP stefan.kober@sap.com
Signed-off-by: Stefan Kober <stefan.kober@cyberus-technology.de>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoch: implement network device hot attach
Stefan Kober [Mon, 6 Oct 2025 15:18:09 +0000 (17:18 +0200)] 
ch: implement network device hot attach

On-behalf-of: SAP stefan.kober@sap.com
Signed-off-by: Stefan Kober <stefan.kober@cyberus-technology.de>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoch: add net device alias assignment
Stefan Kober [Mon, 6 Oct 2025 15:18:08 +0000 (17:18 +0200)] 
ch: add net device alias assignment

On-behalf-of: SAP stefan.kober@sap.com
Signed-off-by: Stefan Kober <stefan.kober@cyberus-technology.de>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoapparmor: Allow AMD-SEV device access for AMD-SEV VM
Hector Cao [Tue, 14 Oct 2025 15:28:34 +0000 (17:28 +0200)] 
apparmor: Allow AMD-SEV device access for AMD-SEV VM

AMD-SEV virtual machines interact with the underlying
AMD-SEV technology through the character device /dev/sev.
Currently, the AppArmor profile does not include the rule
required to allow this access.

There are two main approaches to address this limitation:

1) Add the required rule to the libvirt-qemu abstraction.
2) Dynamically add the rule only when the VM is an AMD-SEV
   guest.

Since AMD-SEV guests represent a niche use case, it is more
appropriate to apply the rule dynamically rather than granting
access to all VMs through a global abstraction change.

This commit implements option (2) by modifying the virt-aa-helper
binary to insert the necessary rule into the AppArmor dynamic
profile when the VM is identified as an AMD-SEV guest.

The added entry in the generated libvirt-<uuid>.files file
will look like:

  ...
  "/dev/sev" rw,
  ...

Signed-off-by: Hector Cao <hector.cao@canonical.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu: Drop /dev/kvm from default device ACL
Praveen K Paladugu [Wed, 22 Oct 2025 15:54:37 +0000 (10:54 -0500)] 
qemu: Drop /dev/kvm from default device ACL

A domain that runs with TCG emulation does not need kvm device, so drop
it from default device ACL.

Dynamically grant access to /dev/kvm based on domain type.

Signed-off-by: Praveen K Paladugu <prapal@linux.microsoft.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoNEWS: Document Hyper-v never notify feature for spinlocks
Friedrich Oslage [Wed, 22 Oct 2025 13:13:29 +0000 (15:13 +0200)] 
NEWS: Document Hyper-v never notify feature for spinlocks

Signed-off-by: Friedrich Oslage <friedrich@oslage.de>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu: Update hyperv spinlock retries count default
Friedrich Oslage [Wed, 22 Oct 2025 09:07:16 +0000 (11:07 +0200)] 
qemu: Update hyperv spinlock retries count default

Update default to 0xFFFFFFFF ("never notify" in qemu) and make retries
attribute optional.

Signed-off-by: Friedrich Oslage <friedrich@oslage.de>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu: Fix hyperv spinlock retries count type mismatch
Friedrich Oslage [Wed, 22 Oct 2025 09:07:15 +0000 (11:07 +0200)] 
qemu: Fix hyperv spinlock retries count type mismatch

Use unsigned int for sprintf and update tests to ensure it can hold INT_MAX+1.

Signed-off-by: Friedrich Oslage <friedrich@oslage.de>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu: forbid readonly attribute for externally launched virtiofsd
Ján Tomko [Mon, 19 May 2025 16:20:57 +0000 (18:20 +0200)] 
qemu: forbid readonly attribute for externally launched virtiofsd

In that case, libvirtd cannot set it on the command line because
virtiofsd is not launched by libvirt.

https://issues.redhat.com/browse/RHEL-87522

Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemumonitorjsontes: Properly free blockstats
Peter Krempa [Tue, 21 Oct 2025 16:22:15 +0000 (18:22 +0200)] 
qemumonitorjsontes: Properly free blockstats

In the patch converting block stats to objects in 58aa005f3e9 I forgot
to change the allocation of the hash table in qemumonitorjsontest which
doesn't use the wrapper. This problem didn't manifest itself with newer
glib versions.

Use 'g_object_unref' instead of 'g_free'.

Fixes: 58aa005f3e9
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
2 weeks agoRemove qemuMonitorBlockStatsUpdateCapacityBlockdev
Peter Krempa [Wed, 1 Oct 2025 14:28:52 +0000 (16:28 +0200)] 
Remove qemuMonitorBlockStatsUpdateCapacityBlockdev

Remove the function and address the ripple effect the removal has.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemuMonitorJSONGetAllBlockStatsInfo: Directly probe data from 'query-named-block...
Peter Krempa [Wed, 1 Oct 2025 14:26:01 +0000 (16:26 +0200)] 
qemuMonitorJSONGetAllBlockStatsInfo: Directly probe data from 'query-named-block-nodes'

Currently the data which was probed for statistics from
'query-named-block-nodes' was updated in a separate call in
qemuMonitorJSONBlockStatsUpdateCapacityBlockdev.

This patch moves and adapts the code so that everything is probed in
qemuMonitorJSONGetAllBlockStatsInfo.

qemuMonitorJSONBlockStatsUpdateCapacityBlockdev is now an empty function
and will be removed later.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemuMonitorJSONBlockStatsUpdateCapacityData: Merge into caller
Peter Krempa [Wed, 1 Oct 2025 14:16:58 +0000 (16:16 +0200)] 
qemuMonitorJSONBlockStatsUpdateCapacityData: Merge into caller

It's called just from
qemuMonitorJSONBlockStatsUpdateCapacityBlockdevWorker. Merging it in
makes the code much simpler especially when combined with a change to
APIs that can't fail.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemuMigrationCookieAddNBD: Use qemuBlockGetNamedNodeData to fetch the capacities
Peter Krempa [Wed, 1 Oct 2025 12:36:12 +0000 (14:36 +0200)] 
qemuMigrationCookieAddNBD: Use qemuBlockGetNamedNodeData to fetch the capacities

'qemuMonitorBlockStatsUpdateCapacityBlockdev' uses the same command
internally.

Upcoming patches will want to merge qemuMonitorBlockStatsUpdateCapacityBlockdev
into qemuMonitorGetAllBlockStatsInfo and qemuMigrationCookieAddNBD is
the only place that doesn't call qemuMonitorGetAllBlockStatsInfo.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu: monitor: Rework qemuBlockStats into a g_object
Peter Krempa [Thu, 11 Sep 2025 14:53:56 +0000 (16:53 +0200)] 
qemu: monitor: Rework qemuBlockStats into a g_object

Create the g_object boilerplate and store references in the hash table
instead of copies.

This will simplify upcoming code which will add allocated fields into
qemuBlockStats.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu_monitor_json.h: Use consistent function hader coding style
Peter Krempa [Wed, 1 Oct 2025 11:50:38 +0000 (13:50 +0200)] 
qemu_monitor_json.h: Use consistent function hader coding style

Convert the rest of the header file to the new prevailing coding style.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu_monitor_json.c: Use consistent function hader coding style
Peter Krempa [Wed, 1 Oct 2025 11:50:38 +0000 (13:50 +0200)] 
qemu_monitor_json.c: Use consistent function hader coding style

Convert the rest of the code to the new prevailing coding style. Commit
6e6a11bc0ac did the same for the header file.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu: monitor: Remove qemuMonitorQueryBlockstats
Peter Krempa [Thu, 11 Sep 2025 13:28:34 +0000 (15:28 +0200)] 
qemu: monitor: Remove qemuMonitorQueryBlockstats

Unused since v8.6.0-154-g75a0fbe420

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agovirNetDevVlanParse: Refactor cleanup
Peter Krempa [Mon, 20 Oct 2025 13:19:11 +0000 (15:19 +0200)] 
virNetDevVlanParse: Refactor cleanup

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agovirNetDevVlanParse: Use g_autofree for temporary variables
Peter Krempa [Mon, 20 Oct 2025 13:16:48 +0000 (15:16 +0200)] 
virNetDevVlanParse: Use g_autofree for temporary variables

Automatically free the variables to prevent leaks when returning from
middle of the function.

Fixes: 1de6fd5edb5
Closes: https://gitlab.com/libvirt/libvirt/-/issues/824
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agovirNetDevVlanParse: Don't clear data on failure
Peter Krempa [Mon, 20 Oct 2025 13:15:13 +0000 (15:15 +0200)] 
virNetDevVlanParse: Don't clear data on failure

Clearing the data on failure is pointless as it's still cleared when
other parts of the parser fail.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemuxmlconftest: Add example for "sgio='filtered'" disk option
Peter Krempa [Wed, 15 Oct 2025 13:24:15 +0000 (15:24 +0200)] 
qemuxmlconftest: Add example for "sgio='filtered'" disk option

The test suite validates only the error with the "sgio='unfiltered'"
setting which isn't supported by the qemu driver. Validate also the
'filtered' used explicitly (the default behaviour if unspecified is the
same as 'filtered').

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agodocs: snapshot: Add a note that blockjobs ought to be avoided with 'manual' snapshots
Peter Krempa [Mon, 13 Oct 2025 13:27:16 +0000 (15:27 +0200)] 
docs: snapshot: Add a note that blockjobs ought to be avoided with 'manual' snapshots

Using a blockjob will reactivate the block nodes in qemu and thus e.g.
qcow2 metadata such as bitmaps may become marked as dirty. Users of
'manual' snapshots ought to avoid those.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu: snapshot: Allow snapshot consisting only of 'manual'-y handled disks
Peter Krempa [Mon, 9 Jun 2025 13:50:42 +0000 (15:50 +0200)] 
qemu: snapshot: Allow snapshot consisting only of 'manual'-y handled disks

The 'manual' snapshot mode is meant for disks where the users wants to
take a snapshot via means outside of libvirt, e.g. on a SAN network.

Allow creating a snapshot which consists entirely of 'manual' disks. For
now this effectively means that the VM will be paused but in the future
more logic can be added to ensure consistency.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu: snapshot: Deactivate block nodes on manually snapshotted disks
Peter Krempa [Fri, 6 Jun 2025 10:33:04 +0000 (12:33 +0200)] 
qemu: snapshot: Deactivate block nodes on manually snapshotted disks

If the user wants to manually preserve state of the disk we need, apart
from pausing the machine to quiesce all writes, also deactivate the
block nodes of the device. This ensures that qemu writes out metadata
(e.g. block dirty bitmaps) which are normally stored only in memory,
thus allowing a consistent snapshot including the metadata.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu: migration: Don't reactivate block nodes after migration failure any more
Peter Krempa [Fri, 25 Jul 2025 14:13:39 +0000 (16:13 +0200)] 
qemu: migration: Don't reactivate block nodes after migration failure any more

The other code paths which do want to issue block jobs can reactivate
the nodes when necessary so we don't need to do that unconditionally
after failed/cancelled migration.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu: Re-activate block nodes before storage operations
Peter Krempa [Thu, 24 Jul 2025 13:55:13 +0000 (15:55 +0200)] 
qemu: Re-activate block nodes before storage operations

Upcoming patches will modify how we treat inactive block nodes so that
we can properly deactivate nodes for 'manual' disk snapshot mode.

Re-activate the nodes before operations requiring them. This includes
also query operations where we e.g. probe bitmaps.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu: block: Introduce helper function to ensure that block nodes are active
Peter Krempa [Wed, 23 Jul 2025 15:30:02 +0000 (17:30 +0200)] 
qemu: block: Introduce helper function to ensure that block nodes are active

Upcoming changes to snapshot code will break the assumption that block
nodes are always active (if the function is able to acquire a modify
job).

Introduce qemuBlockNodesEnsureActive that checks if the block graph in
qemu contains any inactive nodes and if yes reactivates everything.

The function will be used on code paths such as blockjobs which require
the nodes to be active.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemu: monitor: Track inactive state of block nodes in 'qemuBlockNamedNodeData'
Peter Krempa [Thu, 24 Jul 2025 12:49:55 +0000 (14:49 +0200)] 
qemu: monitor: Track inactive state of block nodes in 'qemuBlockNamedNodeData'

New qemus report if given block node is active. We'll be using this data
to decide if we need to reactivate them prior to blockjobs. Extract the
data as 'inactive' as it's simpler to track and we care only about
inactive nodes.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 weeks agoqemuDomainGetStatsCpuProc: Use string constants for CPU stats
Peter Krempa [Mon, 6 Oct 2025 13:59:39 +0000 (15:59 +0200)] 
qemuDomainGetStatsCpuProc: Use string constants for CPU stats

Commit 947306957e9 added the constants and fixed other uses but didn't
fix qemuDomainGetStatsCpuProc.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
3 weeks agoqemu: Drop reconnectBlockjobs from _qemuDomainObjPrivate struct
Michal Privoznik [Wed, 15 Oct 2025 08:49:20 +0000 (10:49 +0200)] 
qemu: Drop reconnectBlockjobs from _qemuDomainObjPrivate struct

The 'reconnectBlockjobs' member of the _qemuDomainObjPrivate
struct is basically unused after v8.7.0-rc1~110. It's not even
formatted into the status XML, just parsed. This makes needless
noise.  Just drop the member.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
3 weeks agoNEWS: Document new host-model hyperv mode
Michal Privoznik [Mon, 6 Oct 2025 12:42:51 +0000 (14:42 +0200)] 
NEWS: Document new host-model hyperv mode

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
3 weeks agoqemu_process: Populate hyperv features for host-model
Michal Privoznik [Mon, 29 Sep 2025 12:54:23 +0000 (14:54 +0200)] 
qemu_process: Populate hyperv features for host-model

Pretty straightforward. The only "weird" thing here is that
'hv-time' enlightenment is exposed as a <timer/> under <clock/>
element. Since it's required by 'hv-stimer' and
'hv-stimer-direct' it needs to be enabled too.

Resolves: https://issues.redhat.com/browse/RHEL-114003
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
3 weeks agoconf: Introduce hyperv host-model mode
Michal Privoznik [Mon, 29 Sep 2025 08:20:41 +0000 (10:20 +0200)] 
conf: Introduce hyperv host-model mode

So far we have two modes for hyperv features:

1) custom, where users have to enable features explicitly, and
2) passthrough, where hypervisor enables features automagically.

Problem with 'custom' mode is that some features are not plain
on/off switches but expect int/string value. Until very recently,
these were not reported in domcaps. And even if they were it's a
bit cumbersome.

Problem with 'passthrough' mode is that users don't get to see
the expanded list of enlightenments enabled.

Therefore, mimic what we're already doing with CPUs: have
'host-model' which gets expanded at domain startup and is fixed
throughout domain's run.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
3 weeks agoqemu_caps: Introduce virQEMUCapsGetHypervCapabilities()
Michal Privoznik [Mon, 29 Sep 2025 12:53:58 +0000 (14:53 +0200)] 
qemu_caps: Introduce virQEMUCapsGetHypervCapabilities()

We'll need to access hypervCapabilities memeber later on.
Introduce a getter function.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
3 weeks agoqemu_capabilities: Fetch new hyperv domcaps
Michal Privoznik [Tue, 30 Sep 2025 13:37:24 +0000 (15:37 +0200)] 
qemu_capabilities: Fetch new hyperv domcaps

Now that everything is prepared, we can start storing the default
values for some hyperv features that are reported in domain
capabilities XML later.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
3 weeks agoqemu_capabilities: Format and parse new hyperv domcaps members
Michal Privoznik [Wed, 1 Oct 2025 13:50:39 +0000 (15:50 +0200)] 
qemu_capabilities: Format and parse new hyperv domcaps members

After previous commit the virDomainCapsFeatureHyperv struct
gained new members. Since virQEMUCaps struct holds a pointer to
such struct we must format and parse it to/from capabilities XML.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
3 weeks agoconf: Report default hyperv values in domain capabilities
Michal Privoznik [Tue, 30 Sep 2025 13:05:10 +0000 (15:05 +0200)] 
conf: Report default hyperv values in domain capabilities

So far the set of available Hyper-V enlightenments are reported
in domain capabilities. Well, some enlightenments are more than
just simple on/off switch. For instance, the 'spinlocks'
enlightenment expects a number, or 'vendor_id' expects a string.

All of these have some default values (at least in QEMU) and are
used when the passthrough mode is set.

Allow querying these defaults in domain capabilities XML.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
3 weeks agodocs: Drop remark on now unsupported version of QEMU
Michal Privoznik [Fri, 3 Oct 2025 10:46:21 +0000 (12:46 +0200)] 
docs: Drop remark on now unsupported version of QEMU

In formatdomaincaps.rst under section documenting hyperv features
there's a paragraph describing behaviour with QEMU older than
6.1.0. Well, as of v11.2.0-rc1~216 the minimum required version
is 6.2.0 rendering the paragraph needless. Drop it.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
3 weeks agoconf: More hyperv related members into a single struct
Michal Privoznik [Tue, 30 Sep 2025 08:27:27 +0000 (10:27 +0200)] 
conf: More hyperv related members into a single struct

So far, we have an array of integers (hyperv_features), an uint
(hyperv_spinlocks), a string (hyperv_vendor_id) and some tristate
switches scattered across virDomainDef. Soon, new knobs will be
introduced and keeping the current state would only worsen
readability.

Introduce virDomainHypervFeatures struct to place hyperv related
features there.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
3 weeks agolibxl: Simplify setting HyperV features
Michal Privoznik [Tue, 30 Sep 2025 08:47:21 +0000 (10:47 +0200)] 
libxl: Simplify setting HyperV features

Inside of libxlMakeDomBuildInfo() there's a huge switch() for
each virDomainHyperv case. Instead of checking whether feature is
enabled in each 'case', let's just check it at the beginning of
each loop.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>