]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
11 months agosrc: ensure augeas test file is generated before running test
Daniel P. Berrangé [Tue, 7 May 2024 12:10:59 +0000 (13:10 +0100)]
src: ensure augeas test file is generated before running test

We fail to express an ordering between the custom target that
generates the combined augeas test input file, and the meson
test command.

Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
11 months agomeson: record which other options are a pre-requisite
Daniel P. Berrangé [Tue, 7 May 2024 10:38:07 +0000 (11:38 +0100)]
meson: record which other options are a pre-requisite

Several meson options cannot be enabled, without first enabling another
option. This adds a small comment prior to an option to record its
mandatory dependencies.

Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
11 months agotests: fix tests when test driver is disabled
Daniel P. Berrangé [Tue, 7 May 2024 09:40:15 +0000 (10:40 +0100)]
tests: fix tests when test driver is disabled

Various tests try to open a connection to 'test:///default' and
must be skipped when the test driver is disabled.

Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
11 months agoscripts/rpcgen: skip tests if tirpc is not present
Daniel P. Berrangé [Tue, 7 May 2024 09:38:59 +0000 (10:38 +0100)]
scripts/rpcgen: skip tests if tirpc is not present

This skips building tests which rely on tirpc when it is not
present.

Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
11 months agotests: fix two off-by-1 errors in read-big-pipe test
Daniel P. Berrangé [Wed, 8 May 2024 12:03:20 +0000 (13:03 +0100)]
tests: fix two off-by-1 errors in read-big-pipe test

When testPipeFeeder copies the XML document into the padded buffer, it
tells virStrcpy that 'xmlsize' bytes are available. This is under
reporting size by 1 byte, and as a result it fails to copy the trailing
'\n' replacing it with '\0'. The return value of virStrcpy wasn't
checked, but was reporting this truncation.

When testPipeFeeder then sends the padded buffer down the pipe, it asks
to send 'emptyspace + xmlsize + 1' bytes, which means it sends the data,
as well as the trailing '\0' terminator.

Both bugs combined mean it is sending '\0\0' as the last bytes, instead
of '\n' which was intended. When virFileReadAll reads data from the
pipe, it ends up adding another '\0' resulting in a very NUL terminated
string ('\0\0\0'). This is all harmless, but should be fixed regardless.

Reviewed-by: Andrea Bolognani <abologna@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
11 months agotests: fix hang in virshtest 'read-big-pipe' case
Daniel P. Berrangé [Wed, 8 May 2024 10:50:09 +0000 (11:50 +0100)]
tests: fix hang in virshtest 'read-big-pipe' case

The virshtest program testPipeFeeder method is doing this:

  mkfifo("test.fifo", 0600) ;

  int fd = open("test.fifo", O_RDWR);

  char buf[...];
  memset(buf, 'a', sizeof(buf));
  write(fd, buf, sizeof(buf)) == sizeof(buf));
  close(fd);

while the the 'virsh' child process then ends up doing:

  fd = open("test.fifo", O_RDONLY);
  read(fd, buf, sizeof(buf)) == sizeof(buf));
  close(fd);

The 'virsh' code hangs on open() on at least ppc64 and some other
arches. It can be provoked to hang even on x86 by reducing the size of
the buffer. It can be prevented from hanging on ppc64 by increasing the
size of the buffer.

What is happening is a result of differing page sizes, altering the
overall pipe capacity size, since pipes on linux default to 16 pages
in size and thus have architecture specific capacity when measured
in bytes.

 * On x86, testPipeFeeder opens R+W, tries to write 140kb and
   write() blocks because the pipe is full. This gives time for
   virsh to start up, and it can open the pipe for O_RDONLY
   since testPipeFeeder still has it open for write. Everything
   works as intended.

 * On ppc64,  testPipeFeeder opens R+W, tries to write 140kb
   and write() succeeds because the larger 64kb page size
   resulted in greater buffer capacity for the pipe. It thus
   quickly closes the pipe, removing the writer, and triggering
   discard of all the unread data. Now virsh starts up, tries
   to open the pipe for O_RDONLY and blocks waiting for a new
   writer to open it, which will never happen. Meson kills
   the test after 30 seconds.

   NB, every now & then, it will not block because virsh starts
   up quickly enough that testPipeFeeder has not yet closed the
   write end of the pipe, giving the illusion of correctness.

The key flaw here is that it should not have been using O_RDWR
in testPipeFeeder. Synchronization is required such that both
virsh and testPipeFeeder have their respective ends of the pipe
open before any data is sent. This is trivially arranged by
using O_WRONLY in testPipeFeeder.

Reviewed-by: Andrea Bolognani <abologna@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
11 months agoudevListInterfacesByStatus: Don't try to return NULL names
Peter Krempa [Mon, 6 May 2024 15:44:42 +0000 (17:44 +0200)]
udevListInterfacesByStatus: Don't try to return NULL names

In case when the interface is being detached/reattached it may happen
that udev will return NULL from 'udev_device_get_sysname()'.

As the RPC code requires nonnull strings in the return array it fails to
serialize such reply:

 libvirt: XML-RPC error : Unable to encode message payload

Fix this by simply ignoring such interfaces as there's nothing we can
report in such case.

A similar fix was done to 'udevConnectListAllInterfaces' in commit
2ca94317ac6.

Resolves: https://issues.redhat.com/browse/RHEL-34615
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
11 months agointerface_udev: Replace udevNumOfInterfacesByStatus by udevListInterfacesByStatus
Peter Krempa [Mon, 6 May 2024 15:41:02 +0000 (17:41 +0200)]
interface_udev: Replace udevNumOfInterfacesByStatus by udevListInterfacesByStatus

Make the array-filling operation of udevListInterfacesByStatus optional
and replace the completely redundant udevNumOfInterfacesByStatus by it.

Further patches fixing the listing will not need to be duplicated.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
11 months agodatatypes: Declare g_autoptr cleanup functions for more public objects
Michal Privoznik [Thu, 18 Apr 2024 07:19:52 +0000 (09:19 +0200)]
datatypes: Declare g_autoptr cleanup functions for more public objects

Some public objects (like virDomain, virInterface, and so on) are
missing g_autoptr() cleanup functions. Provide missing
declarations. Note, this is only for our internal use - hence
datatypes.h.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
12 months agoqemu: Substract isolcpus from all online affinity
Michal Privoznik [Mon, 22 Apr 2024 09:55:46 +0000 (11:55 +0200)]
qemu: Substract isolcpus from all online affinity

When starting a domain and there's no vCPU/emulator pinning set,
we query the list of all online physical CPUs and set affinity of
the child process (which eventually becomes QEMU) to that list.
We can't assume libvirtd itself had affinity to all online CPUs
and since affinity of the child process is inherited, we should
fix it afterwards. But that's not necessarily correct. Users
might isolate some physical CPUs and we should avoid touching
them unless explicitly told so (i.e. vCPU/emulator pinning told
us so).

Therefore, when attempting to set affinity to all online CPUs
subtract the isolated ones.

Before this commit:

  root@localhost:~# cat /sys/devices/system/cpu/isolated
  19,21,23
  root@virtlab414:~# taskset -cp $(pgrep qemu)
  pid 14835's current affinity list: 0-23

After:

  root@virtlab414:~# taskset -cp $(pgrep qemu)
  pid 17153's current affinity list: 0-18,20,22

Resolves: https://issues.redhat.com/browse/RHEL-33082
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
12 months agovirhostcpu: Introduce virHostCPUGetIsolated()
Michal Privoznik [Mon, 22 Apr 2024 09:07:13 +0000 (11:07 +0200)]
virhostcpu: Introduce virHostCPUGetIsolated()

This is a helper that parses /sys/devices/system/cpu/isolated
into a virBitmap. It's going to be needed soon.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
12 months agovirfile: Introduce virFileReadValueBitmapAllowEmpty()
Michal Privoznik [Tue, 23 Apr 2024 08:41:50 +0000 (10:41 +0200)]
virfile: Introduce virFileReadValueBitmapAllowEmpty()

Some sysfs files contain either string representation of a bitmap
or just a newline character. An example of such file is:
/sys/devices/system/cpu/isolated. Our current implementation of
virFileReadValueBitmap() fails in the latter case, unfortunately.
Introduce a slightly modified version that accepts empty files.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
12 months agovirbitmap: Introduce virBitmapParseUnlimitedAllowEmpty()
Michal Privoznik [Tue, 23 Apr 2024 07:17:51 +0000 (09:17 +0200)]
virbitmap: Introduce virBitmapParseUnlimitedAllowEmpty()

Some sysfs files contain either string representation of a bitmap
or just a newline character. An example of such file is:
/sys/devices/system/cpu/isolated. Our current implementation of
virBitmapParseUnlimited() fails in the latter case,
unfortunately. Introduce a slightly modified version that accepts
empty files.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
12 months agoqemu_saveimage: add zstd to supported compression formats
Adam Julis [Fri, 26 Apr 2024 18:28:47 +0000 (20:28 +0200)]
qemu_saveimage: add zstd to supported compression formats

Extend the list of supported formats, update and clarify comment
in qemu.conf.in (removed misleading sentence about the order of
compression format types).

Resolves: https://gitlab.com/libvirt/libvirt/-/issues/589
Signed-off-by: Adam Julis <ajulis@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agoNEWS: document qemu: ras as a new feature
Kristina Hanicova [Fri, 3 May 2024 11:49:30 +0000 (13:49 +0200)]
NEWS: document qemu: ras as a new feature

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
12 months agovsh: Don't init history in cmdComplete()
Michal Privoznik [Sat, 4 May 2024 03:12:54 +0000 (05:12 +0200)]
vsh: Don't init history in cmdComplete()

Recent rework of virshtest uncovered a subtle bug that was
dormant in now vsh but before that even in monolithic virsh.

In vsh.c there's this vshReadlineInit() function that's supposed
to initialize readline library, i.e. set those global rl_*
pointers.  But it also initializes history library. Then, when
virsh/virt-admin quits, vshReadlineDeinit() is called which
writes history into a file (ensuring the parent directory
exists). So far no problem.

Problem arises when cmdComplete() is called (from a bash
completer, for instance). It does not guard call to
vshReadlineInit() with check for interactive shell (and it should
not), but it sets ctl->historyfile which signals to
vshReadlineDeinit() the history should be written.

Now, no real history is written, because nothing was entered on
the stdin, but the parent directory is created nevertheless. With
recent movement in virshtest.c this means some test cases might
create virsh history file which breaks our promise of not
touching user's data in test suite.

Resolves: https://bugs.gentoo.org/931109
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agohyperv: prevent potential NULL dereference
Oleg Sviridov [Fri, 3 May 2024 09:26:51 +0000 (12:26 +0300)]
hyperv: prevent potential NULL dereference

Return value of a function 'virDomainChrDefNew' is dereferenced
at hyperv_driver.c without checking for NULL, which can lead to
NULL dereference immediately after.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Signed-off-by: Oleg Sviridov <oleg.sviridov@red-soft.ru>
Reviewed-by: Kristína Hanicová <khanicov@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
12 months agolibxl: Fix domxml-to-native conversion
Jim Fehlig [Mon, 29 Apr 2024 20:50:07 +0000 (14:50 -0600)]
libxl: Fix domxml-to-native conversion

Similar to commit 57d084febe, another case of the libxl driver not
adapting to modular daemons. When converting configuration that
contains a type='network' interface, the converter calls
virNetworkLookupByName, passing the hypervisor connection object
instead of a connection to virtnetworkd. E.g.

> cat dom.xml
...
    <interface type='network'>
      <source network='default'/>
    </interface>
...
> virsh net-info default
Name:           default
UUID:           25a5b089-1e71-4956-99aa-df2213bbb407
Active:         yes
Persistent:     no
Autostart:      no
Bridge:         virbr0
> virsh domxml-to-native xen-xl dom.xml
error: Network not found: default

Acquire a connection to virtnetworkd and use it when calling
virNetwork* APIs.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agocpu_map: Drop 'mpx' from x86 cpu models
Tim Wiederhake [Fri, 9 Feb 2024 10:52:56 +0000 (11:52 +0100)]
cpu_map: Drop 'mpx' from x86 cpu models

The mpx feature was removed from the corresponding qemu cpu models.
With mpx in the libvirt cpu models, libvirt believes the feature
to be implicitly enabled when creating qemu VMs, while in fact it is
disabled.

This became an issue when commit 94eacd5a5f introduced new vmx-*
features, of which some are dependent on mpx (see "feature_dependencies"
table in qemu target/i386/cpu.c), e.g. vmx-exit-clear-bndcfgs and
vmx-entry-load-bndcfgs. These features cannot be enabled by qemu
without also mpx being enabled, leading to the error message

    error: Failed to create domain from testdomain.xml
    error: operation failed: guest CPU doesn't match
    specification: missing features: mpx,vmx-exit-clear-bndcfgs,
    vmx-entry-load-bndcfgs

when trying to create a VM with a "host-model" cpu on a host that
does support mpx and the mentioned vmx-* features:

    <domain>
      ...
      <cpu mode='host-model' check='full' />
      ...
    </domain>

Resolve the issue by removing mpx from libvirt's cpu models as well.

Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agoqemu: Enable removing features from CPU models
Jiri Denemark [Fri, 26 Apr 2024 14:32:16 +0000 (16:32 +0200)]
qemu: Enable removing features from CPU models

Features removed from a CPU model are marked with "removed='yes'"
attribute in the CPU map. Such features will always be present in a CPU
definition produced by libvirt regardless on their state. In other words
a running domain (even saved in a file) will always explicitly contain
states of all features removed from the specified CPU model. This
enables migration to older libvirt which would otherwise think the
affected features should be enabled as they are still included in the
CPU model in the older version of CPU map. Migration from an old libvirt
to a new one would be broken as the new libvirt would think the removed
features should be disabled (because they are not included in the CPU
model anymore), which might not be the case on the source host. Thus we
were refusing to remove CPU features unless they were never working and
no domain could even be running with those features enabled.

This patch removes the limitation. When handling CPU definitions with
missing features marked as removed in the specified CPU model, we know
whether it comes from a running domain, in which case it must have been
created by older libvirt where the missing CPU features were not removed
yet. This means the features must have been enabled on the source and we
can automatically fix the definition by adding the missing features with
correct states.

We can safely remove any CPU feature from our CPU models now, but it
should only be used for features removed from all versions of a given
CPU model in QEMU because unversioned models correspond to v1.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agocpu: Add removedPolicy parameter to virCPUUpdate
Jiri Denemark [Fri, 26 Apr 2024 07:57:31 +0000 (09:57 +0200)]
cpu: Add removedPolicy parameter to virCPUUpdate

virCPUUpdate check the CPU definition for features that were marked as
removed in the specified CPU model and explicitly adds those that were
not mentioned in the definition. So far such features were added with
VIR_CPU_FEATURE_DISABLE policy, but the caller may want to use a
different policy in some situations, which is now possible via the
removedPolicy parameter.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agoconf: Change return value of some CPU feature APIs
Jiri Denemark [Thu, 25 Apr 2024 13:35:06 +0000 (15:35 +0200)]
conf: Change return value of some CPU feature APIs

The virCPUDefAddFeatureInternal helper function only fails if it is
called with VIR_CPU_ADD_FEATURE_MODE_EXCLUSIVE, which is only used in
virCPUDefAddFeature. The other callers (virCPUDefUpdateFeature and
virCPUDefAddFeatureIfMissing) will never get anything but 0 from
virCPUDefAddFeatureInternal and their return type can be changed to
void.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agovmx: Check serialX.vspc before serialX.fileName
Martin Kletzander [Thu, 25 Apr 2024 10:34:21 +0000 (12:34 +0200)]
vmx: Check serialX.vspc before serialX.fileName

When using vSPC (Virtual Serial Port Concentrator) in vSphere the actual
address for it is saved in serialX.vspc in which case the
serialX.fileName is most probably something we can't get any useful
information from and we also fail during the parsing rendering any
dumpxml and similar tries unsuccessful.

Instead of parsing the vspc URL with something along the lines of
`virURIParse(vspc ? vspc : fileName)`, which could lead to us reporting
information that is very prune to misuse (the vSPC seemingly has a
protocol on top of the telnet connection; redefining the domain would
change the behaviour; the URL might have a fragment we are not saving;
etc.) or adding more XML knobs to indicate vSPC usage (which we would
not be able to configure; we'd have to properly error out everywhere;
etc.) let's just report dummy serial port that leads to nowhere (i.e.
type="null").

Resolves: https://issues.redhat.com/browse/RHEL-32182
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agorpc: ensure temporary GSource is removed from client event loop
Daniel P. Berrangé [Tue, 30 Apr 2024 10:51:15 +0000 (11:51 +0100)]
rpc: ensure temporary GSource is removed from client event loop

Users are seeing periodic segfaults from libvirt client apps,
especially thread heavy ones like virt-manager. A typical
stack trace would end up in the virNetClientIOEventFD method,
with illegal access to stale stack data. eg

==238721==ERROR: AddressSanitizer: stack-use-after-return on address 0x75cd18709788 at pc 0x75cd3111f907 bp 0x75cd181ff550 sp 0x75cd181ff548
WRITE of size 4 at 0x75cd18709788 thread T11
    #0 0x75cd3111f906 in virNetClientIOEventFD /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:1634:15
    #1 0x75cd3210d198  (/usr/lib/libglib-2.0.so.0+0x5a198) (BuildId: 0a2311dfbbc6c215dc36f4b6bdd2b4b6fbae55a2)
    #2 0x75cd3216c3be  (/usr/lib/libglib-2.0.so.0+0xb93be) (BuildId: 0a2311dfbbc6c215dc36f4b6bdd2b4b6fbae55a2)
    #3 0x75cd3210ddc6 in g_main_loop_run (/usr/lib/libglib-2.0.so.0+0x5adc6) (BuildId: 0a2311dfbbc6c215dc36f4b6bdd2b4b6fbae55a2)
    #4 0x75cd3111a47c in virNetClientIOEventLoop /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:1722:9
    #5 0x75cd3111a47c in virNetClientIO /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:2002:10
    #6 0x75cd3111a47c in virNetClientSendInternal /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:2170:11
    #7 0x75cd311198a8 in virNetClientSendWithReply /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:2198:11
    #8 0x75cd31111653 in virNetClientProgramCall /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclientprogram.c:318:9
    #9 0x75cd31241c8f in callFull /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/remote/remote_driver.c:6054:10
    #10 0x75cd31241c8f in call /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/remote/remote_driver.c:6076:12
    #11 0x75cd31241c8f in remoteNetworkGetXMLDesc /usr/src/debug/libvirt/libvirt-10.2.0/build/src/remote/remote_client_bodies.h:5959:9
    #12 0x75cd31410ff7 in virNetworkGetXMLDesc /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/libvirt-network.c:952:15

The root cause is a bad assumption in the virNetClientIOEventLoop
method. This method is run by whichever thread currently owns the
buck, and is responsible for handling I/O. Inside a for(;;) loop,
this method creates a temporary GSource, adds it to the event loop
and runs g_main_loop_run(). When I/O is ready, the GSource callback
(virNetClientIOEventFD) will fire and call g_main_loop_quit(), and
return G_SOURCE_REMOVE which results in the temporary GSource being
destroyed. A g_autoptr() will then remove the last reference.

What was overlooked, is that a second thread can come along and
while it can't enter virNetClientIOEventLoop, it will register an
idle source that uses virNetClientIOWakeup to interrupt the
original thread's 'g_main_loop_run' call. When this happens the
virNetClientIOEventFD callback never runs, and so the temporary
GSource is not destroyed. The g_autoptr() will remove a reference,
but by virtue of still being attached to the event context, there
is an extra reference held causing GSource to be leaked. The
next time 'g_main_loop_run' is called, the original GSource will
trigger its callback, and access data that was allocated on the
stack by the previous thread, and likely SEGV.

To solve this, the thread calling 'g_main_loop_run' must call
g_source_destroy, immediately upon return, to guarantee that
the temporary GSource is removed.

CVE-2024-4418
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Reported-by: Martin Shirokov <shirokovmartin@gmail.com>
Tested-by: Martin Shirokov <shirokovmartin@gmail.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
12 months agoqemu: Generate command line for sound devices with model 'virtio'
Rayhan Faizel [Thu, 11 Apr 2024 20:12:44 +0000 (01:42 +0530)]
qemu: Generate command line for sound devices with model 'virtio'

Allow generation of command line for virtio-sound-pci and virtio-sound-device
devices along with additional virtio options.

A new testcase is added to test virtio-sound-pci. The
arm-vexpressa9-virtio testcase is also extended to test virtio-sound-device.

Signed-off-by: Rayhan Faizel <rayhan.faizel@gmail.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agoconf: Introduce support for virtio-sound devices
Rayhan Faizel [Thu, 11 Apr 2024 20:12:43 +0000 (01:42 +0530)]
conf: Introduce support for virtio-sound devices

This patch adds parsing of the virtio sound model, along with parsing
of virtio options and PCI/virtio-mmio address assignment.

A new 'streams' attribute is added for configuring number of PCM streams
(default is 2) in virtio sound devices. QEMU additionally has jacks and chmaps
parameters but these are currently stubbed, hence they are excluded in this
patch series.

Signed-off-by: Rayhan Faizel <rayhan.faizel@gmail.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agoqemu_capabilities: Add QEMU_CAPS_DEVICE_VIRTIO_SOUND capability
Rayhan Faizel [Thu, 11 Apr 2024 20:12:42 +0000 (01:42 +0530)]
qemu_capabilities: Add QEMU_CAPS_DEVICE_VIRTIO_SOUND capability

Signed-off-by: Rayhan Faizel <rayhan.faizel@gmail.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agoci: drop CentOS 8 Stream and refresh
Daniel P. Berrangé [Thu, 25 Apr 2024 13:40:30 +0000 (14:40 +0100)]
ci: drop CentOS 8 Stream and refresh

This drops the CentOS 8 Stream distro target, since that is going EOL
at the end of May, at which point it will cease to be installable
due to package repos being archived.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
12 months agoci: refresh with latest lcitool manifest
Daniel P. Berrangé [Thu, 25 Apr 2024 13:42:32 +0000 (14:42 +0100)]
ci: refresh with latest lcitool manifest

This brings in a fix to the job rules which solves a problem with
jobs getting skipped in merge requests in some scenarios. It also
changes the way Cirrus CI vars are set, which involves a weak to
the way $PATH is set in build.yml.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
12 months agoscripts/meson-dist.py: Get builddir from env too
Michal Privoznik [Mon, 29 Apr 2024 07:49:17 +0000 (09:49 +0200)]
scripts/meson-dist.py: Get builddir from env too

When meson runs a dist script it sets both MESON_BUILD_ROOT and
MESON_DIST_ROOT envvars [1]. But for some reason, we took the
former as an argument and obtained the latter via env. Well,
obtain both via env.

1: https://mesonbuild.com/Reference-manual_builtin_meson.html#mesonadd_dist_script
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agoqemu: format machine virt ras feature and test it
Kristina Hanicova [Tue, 30 Apr 2024 14:32:39 +0000 (16:32 +0200)]
qemu: format machine virt ras feature and test it

Resolves: https://issues.redhat.com/browse/RHEL-7489
Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agoqemu: validate machine virt ras feature
Kristina Hanicova [Tue, 30 Apr 2024 14:32:38 +0000 (16:32 +0200)]
qemu: validate machine virt ras feature

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agoconf: parse and format machine virt ras feature
Kristina Hanicova [Tue, 30 Apr 2024 14:32:37 +0000 (16:32 +0200)]
conf: parse and format machine virt ras feature

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agoqemu: introduce QEMU_CAPS_MACHINE_VIRT_RAS capability
Kristina Hanicova [Tue, 30 Apr 2024 14:32:36 +0000 (16:32 +0200)]
qemu: introduce QEMU_CAPS_MACHINE_VIRT_RAS capability

The capability can be used to detect if the qemu binary already
supports 'ras' feature for 'virt' machine type.

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agoPost-release version bump to 10.4.0
Jiri Denemark [Thu, 2 May 2024 09:10:01 +0000 (11:10 +0200)]
Post-release version bump to 10.4.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
12 months agoRelease of libvirt-10.3.0
Jiri Denemark [Thu, 2 May 2024 09:07:09 +0000 (11:07 +0200)]
Release of libvirt-10.3.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
12 months agoNEWS: Document my contributions for upcoming release
Michal Privoznik [Tue, 30 Apr 2024 13:12:43 +0000 (15:12 +0200)]
NEWS: Document my contributions for upcoming release

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
12 months agoTranslated using Weblate (Swedish)
Göran Uddeborg [Thu, 2 May 2024 05:56:27 +0000 (07:56 +0200)]
Translated using Weblate (Swedish)

Currently translated at 71.0% (7403 of 10423 strings)

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

Co-authored-by: Göran Uddeborg <goeran@uddeborg.se>
Signed-off-by: Göran Uddeborg <goeran@uddeborg.se>
12 months agoNEWS: Document TLS migration bug, usb-net support and two fixes
Peter Krempa [Tue, 30 Apr 2024 08:15:04 +0000 (10:15 +0200)]
NEWS: Document TLS migration bug, usb-net support and two fixes

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
12 months agoNEWS: Fix marking of 'path' as inline literal
Peter Krempa [Tue, 30 Apr 2024 08:11:58 +0000 (10:11 +0200)]
NEWS: Fix marking of 'path' as inline literal

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
12 months agoTranslated using Weblate (Korean)
김인수 [Mon, 29 Apr 2024 04:40:28 +0000 (04:40 +0000)]
Translated using Weblate (Korean)

Currently translated at 100.0% (10423 of 10423 strings)

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

Signed-off-by: 김인수 <simmon@nplob.com>
12 months agoTranslated using Weblate (Romanian)
Remus-Gabriel Chelu [Sat, 27 Apr 2024 23:27:35 +0000 (23:27 +0000)]
Translated using Weblate (Romanian)

Currently translated at 0.8% (89 of 10423 strings)

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

Signed-off-by: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
12 months agoTranslated using Weblate (Romanian)
Weblate [Sat, 27 Apr 2024 23:23:56 +0000 (23:23 +0000)]
Translated using Weblate (Romanian)

Currently translated at 0.7% (74 of 10423 strings)

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

Signed-off-by: Weblate <noreply-mt-weblate@weblate.org>
12 months agoTranslated using Weblate (Romanian)
Remus-Gabriel Chelu [Sat, 27 Apr 2024 23:23:01 +0000 (23:23 +0000)]
Translated using Weblate (Romanian)

Currently translated at 0.7% (74 of 10423 strings)

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

Signed-off-by: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
12 months agoTranslated using Weblate (Romanian)
Weblate [Sat, 27 Apr 2024 23:08:09 +0000 (23:08 +0000)]
Translated using Weblate (Romanian)

Currently translated at 0.6% (69 of 10423 strings)

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

Signed-off-by: Weblate <noreply-mt-weblate@weblate.org>
12 months agoTranslated using Weblate (Romanian)
Remus-Gabriel Chelu [Sat, 27 Apr 2024 23:07:23 +0000 (23:07 +0000)]
Translated using Weblate (Romanian)

Currently translated at 0.6% (69 of 10423 strings)

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

Signed-off-by: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
12 months agoTranslated using Weblate (Romanian)
Remus-Gabriel Chelu [Sat, 27 Apr 2024 08:16:02 +0000 (08:16 +0000)]
Translated using Weblate (Romanian)

Currently translated at 0.4% (43 of 10423 strings)

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

Signed-off-by: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
12 months agoTranslated using Weblate (Romanian)
Weblate [Sat, 27 Apr 2024 08:15:34 +0000 (08:15 +0000)]
Translated using Weblate (Romanian)

Currently translated at 0.3% (32 of 10423 strings)

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

Signed-off-by: Weblate <noreply-mt-weblate@weblate.org>
12 months agoTranslated using Weblate (Romanian)
Remus-Gabriel Chelu [Sat, 27 Apr 2024 08:05:30 +0000 (08:05 +0000)]
Translated using Weblate (Romanian)

Currently translated at 0.3% (32 of 10423 strings)

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

Signed-off-by: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
12 months agoTranslated using Weblate (Swedish)
Göran Uddeborg [Sat, 27 Apr 2024 08:05:10 +0000 (08:05 +0000)]
Translated using Weblate (Swedish)

Currently translated at 70.8% (7383 of 10423 strings)

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

Signed-off-by: Göran Uddeborg <goeran@uddeborg.se>
12 months agoTranslated using Weblate (Romanian)
Weblate [Sat, 27 Apr 2024 08:03:59 +0000 (08:03 +0000)]
Translated using Weblate (Romanian)

Currently translated at 0.1% (11 of 10423 strings)

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

Signed-off-by: Weblate <noreply-mt-weblate@weblate.org>
12 months agoTranslated using Weblate (Romanian)
Remus-Gabriel Chelu [Sat, 27 Apr 2024 08:02:10 +0000 (08:02 +0000)]
Translated using Weblate (Romanian)

Currently translated at 0.1% (11 of 10423 strings)

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

Signed-off-by: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
12 months agoTranslated using Weblate (Swedish)
Göran Uddeborg [Sat, 27 Apr 2024 08:02:43 +0000 (08:02 +0000)]
Translated using Weblate (Swedish)

Currently translated at 70.7% (7378 of 10423 strings)

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

Signed-off-by: Göran Uddeborg <goeran@uddeborg.se>
12 months agoTranslated using Weblate (Romanian)
Weblate [Sat, 27 Apr 2024 07:57:59 +0000 (09:57 +0200)]
Translated using Weblate (Romanian)

Currently translated at 0.1% (3 of 10423 strings)

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

Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Signed-off-by: Weblate <noreply-mt-weblate@weblate.org>
12 months agoTranslated using Weblate (Romanian)
Remus-Gabriel Chelu [Sat, 27 Apr 2024 07:57:58 +0000 (09:57 +0200)]
Translated using Weblate (Romanian)

Currently translated at 0.1% (3 of 10423 strings)

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

Co-authored-by: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Signed-off-by: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
12 months agoTranslated using Weblate (Ukrainian)
Yuri Chornoivan [Sat, 27 Apr 2024 07:57:58 +0000 (09:57 +0200)]
Translated using Weblate (Ukrainian)

Currently translated at 100.0% (10423 of 10423 strings)

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

Co-authored-by: Yuri Chornoivan <yurchor@ukr.net>
Signed-off-by: Yuri Chornoivan <yurchor@ukr.net>
12 months agoTranslated using Weblate (Swedish)
Göran Uddeborg [Sat, 27 Apr 2024 07:57:57 +0000 (09:57 +0200)]
Translated using Weblate (Swedish)

Currently translated at 70.6% (7363 of 10423 strings)

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

Co-authored-by: Göran Uddeborg <goeran@uddeborg.se>
Signed-off-by: Göran Uddeborg <goeran@uddeborg.se>
12 months agoTranslated using Weblate (Korean)
김인수 [Sat, 27 Apr 2024 07:57:57 +0000 (09:57 +0200)]
Translated using Weblate (Korean)

Currently translated at 100.0% (10423 of 10423 strings)

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

Co-authored-by: 김인수 <simmon@nplob.com>
Signed-off-by: 김인수 <simmon@nplob.com>
12 months agoUpdate translation files
Weblate [Sat, 27 Apr 2024 07:57:55 +0000 (09:57 +0200)]
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/

Co-authored-by: Weblate <noreply@weblate.org>
Signed-off-by: Fedora Weblate Translation <i18n@lists.fedoraproject.org>
12 months agopo: Refresh potfile for v10.3.0
Jiri Denemark [Fri, 26 Apr 2024 08:19:09 +0000 (10:19 +0200)]
po: Refresh potfile for v10.3.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
12 months agoTranslated using Weblate (Swedish)
Göran Uddeborg [Thu, 25 Apr 2024 19:48:00 +0000 (21:48 +0200)]
Translated using Weblate (Swedish)

Currently translated at 70.3% (7345 of 10438 strings)

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

Co-authored-by: Göran Uddeborg <goeran@uddeborg.se>
Signed-off-by: Göran Uddeborg <goeran@uddeborg.se>
12 months agovsh: Refactor logic in vshCommandParse
Peter Krempa [Thu, 7 Mar 2024 16:06:18 +0000 (17:06 +0100)]
vsh: Refactor logic in vshCommandParse

Refactor the existing logic using two nested loops with a jump into the
middle of both with 3 separate places fetching next token to a single
loop using a state machine with one centralized place to fetch next
tokens and add explanation comments.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agovsh: Move option assignment debugging from vshCommandParse to vshCmdOptAssign
Peter Krempa [Wed, 17 Apr 2024 12:06:38 +0000 (14:06 +0200)]
vsh: Move option assignment debugging from vshCommandParse to vshCmdOptAssign

As we now have a centralized point to assign values to options move the
debugging logic there.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agovshCmddefCheckInternals: Remove check for "too many options"
Peter Krempa [Thu, 18 Apr 2024 14:32:44 +0000 (16:32 +0200)]
vshCmddefCheckInternals: Remove check for "too many options"

This check was needed due to the use "unsigned long long" as bitmap
which was refactored recently.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agovsh: Refactor parsed option and command assignment
Peter Krempa [Mon, 15 Apr 2024 14:55:18 +0000 (16:55 +0200)]
vsh: Refactor parsed option and command assignment

Refactor the very old opaque logic (using multiple bitmaps) by
fully-allocating vshCmdOpt for each possible argument and then filling
them as they go rather than allocating them each time after it's parsed.

This simplifies the checkers and removes the need to cross-reference
multiple arrays.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agovsh: Unexport command lookup helpers 'vshCmddefSearch', 'vshCmdGrpSearch', 'vshCmdGrp...
Peter Krempa [Mon, 15 Apr 2024 12:09:04 +0000 (14:09 +0200)]
vsh: Unexport command lookup helpers 'vshCmddefSearch', 'vshCmdGrpSearch', 'vshCmdGrpHelp'

Neither of them is used outside of vsh.c. 'vshCmddefSearch' needed to be
rearranged as it was called earlier in vsh.c than it was defined.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agovsh: Remove unused infrastructure for command completion
Peter Krempa [Mon, 15 Apr 2024 09:45:14 +0000 (11:45 +0200)]
vsh: Remove unused infrastructure for command completion

Remove the old helpers which were used previously to pick which field to
complete.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agovirsh: Introduce new 'VSH_OT_ARGV' accessors
Peter Krempa [Wed, 6 Mar 2024 16:26:56 +0000 (17:26 +0100)]
virsh: Introduce new 'VSH_OT_ARGV' accessors

In preparation for internal parser refactor introduce new accessors for
the VSH_OT_ARGV type which will return a NULL-terminated string list or
even a concatenated string for the given argument.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agovsh: Rework logic for picking which argument is to be completed
Peter Krempa [Tue, 12 Mar 2024 07:29:00 +0000 (08:29 +0100)]
vsh: Rework logic for picking which argument is to be completed

Currently the code decides which option to complete by looking into the
input string and trying to infer it based on whether we are at the
end position as we truncate the string to complete to the current cursor
position.

That basically means that only the last-parsed option will be up for
completion.

Replace the logic by remembering which is the last option rather than
using two different position checks and base the completion decision on
that and the actual value of the last argument (see comment).

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agovirshtest: Add test cases for command completion helper
Peter Krempa [Tue, 12 Mar 2024 16:03:56 +0000 (17:03 +0100)]
virshtest: Add test cases for command completion helper

Add both single invocations as well as a script containing the same
commands.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agovsh: Add a VSH_OT_STRING argument for 'virsh echo'
Peter Krempa [Wed, 3 Apr 2024 05:07:57 +0000 (07:07 +0200)]
vsh: Add a VSH_OT_STRING argument for 'virsh echo'

The argument will be used for testing the command/option completer
function.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agovsh: Fix 'stdin' closing in 'cmdComplete'
Peter Krempa [Tue, 26 Mar 2024 15:28:33 +0000 (16:28 +0100)]
vsh: Fix 'stdin' closing in 'cmdComplete'

While the 'complete' command is meant to be hidden and used only for
the completion script, there's nothing preventing it being used in all
virsh modes.

This poses a problem as the command tries to close 'stdin' to avoid the
possibility that an auth callback would want to read the password.

In interactive mode this immediately terminates virsh and in
non-interactive mode it attempts to close it multiple times if you use
virsh in batch mode.

Fix the issues by using virOnce() to close it exactly once and do so
only in non-interactive mode.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agotools: Rename vshCommandOptStringReq to vshCommandOptString
Peter Krempa [Mon, 11 Mar 2024 14:55:11 +0000 (15:55 +0100)]
tools: Rename vshCommandOptStringReq to vshCommandOptString

Shorten the function name as there isn't any vshCommandOptString.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agomeson: tests: Add 'virsh' as dependency of 'virshtest'
Peter Krempa [Mon, 8 Apr 2024 13:55:38 +0000 (15:55 +0200)]
meson: tests: Add 'virsh' as dependency of 'virshtest'

Ensure that virsh is rebuilt if needed.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
12 months agovshReadlineInit: Initialize only once
Peter Krempa [Thu, 25 Apr 2024 08:15:53 +0000 (10:15 +0200)]
vshReadlineInit: Initialize only once

'vshReadlineInit' is called when interactive virsh is started but also
on each call to 'cmdComplete'. Calling it repeatedly (using the
'complete' command interactively, or multiple times in batch mode) leaks
the buffers for history file configuration.

Avoid multiple setups of this function by returning success in case the
history file config is already present.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agovsh: cmdComplete: Don't leak buffer for completion
Peter Krempa [Thu, 25 Apr 2024 08:05:42 +0000 (10:05 +0200)]
vsh: cmdComplete: Don't leak buffer for completion

The buffer which we assign to the 'rl_line_buffer' variable of readline
would be overwritten and thus leaked on multiple invocations of
cmdComplete in one session.

Free/clear it after it's used.

Hitting this leak was until recenly possible only in non-interactive
batch mode and recently also in interactive mode as 'complete' can be
used multiple times now interactively.

Fixes: a0e1ada63c0afdc2af3b9405cbf637d8bd28700c
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
12 months agovirnetdevbandwidth.c: Put a limit to "quantum"
Michal Privoznik [Wed, 24 Apr 2024 14:55:34 +0000 (16:55 +0200)]
virnetdevbandwidth.c: Put a limit to "quantum"

The "quantum" attribute of HTB is documented as:

  Number of bytes to serve from this class before the scheduler
  moves to the next class.

Since v1.3.2-rc1~225 we compute what we think is the appropriate
value and pass it on the TC command line. But kernel and
subsequently TC use uint32_t to store this value. If we compute
value outside of this type then TC fails and prints usage which
we then interpret as an error message. Needlessly long error
message. While there's not much we can do about the latter, we
can put a cap on the value and stop tickling this behavior of TC.

Fixes: 065054daa71f645fc83aff0271f194d326208616
Resolves: https://issues.redhat.com/browse/RHEL-34112
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
12 months agotest: nodedev: fill active_config at driver startup time
Cole Robinson [Sat, 6 Apr 2024 19:13:40 +0000 (15:13 -0400)]
test: nodedev: fill active_config at driver startup time

Commit v10.0.0-265-ge67bca23e4 added a `active_config` and
`defined_config` to nodedev mdev internal XML handling.
`defined_config` can be filled at XML parse time, but `active_config`
must be filled in by nodedev driver. This wasn't implemented for the
test driver however, which caused virt-manager test suite regressions.

Working example:

```
$ virsh --connect test:///home/crobinso/src/virt-manager/tests/data/testdriver/testdriver.xml nodedev-dumpxml mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110
<device>
  <name>mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110</name>
  <path>/sys/devices/css0/0.0.0023/8e37ee90-2b51-45e3-9b25-bf8283c03110</path>
  <parent>css_0_0_0023</parent>
  <capability type='mdev'>
    <type id='vfio_ccw-io'/>
    <iommuGroup number='0'/>
  </capability>
</device>
```

Broken example:

```
$ virsh --connect test:///home/crobinso/src/virt-manager/tests/data/testdriver/testdriver.xml nodedev-dumpxml mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110
<device>
  <name>mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110</name>
  <path>/sys/devices/css0/0.0.0023/8e37ee90-2b51-45e3-9b25-bf8283c03110</path>
  <parent>css_0_0_0023</parent>
  <capability type='mdev'>
    <iommuGroup number='0'/>
  </capability>
</device>
```

There's already code that does what we want in the test suite.
Move it to a shared function, and call it in test driver when
creating a nodedev from driver startup XML.

Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
12 months agotest: Sync GetXML INACTIVE behavior with live driver
Cole Robinson [Wed, 17 Apr 2024 15:07:14 +0000 (11:07 -0400)]
test: Sync GetXML INACTIVE behavior with live driver

- Error if INACTIVE requested for transient object
- Force dumping INACTIVE XML when object is inactive

Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
12 months agotest: make parsed nodedevs active and persistent
Cole Robinson [Fri, 22 Mar 2024 14:45:48 +0000 (10:45 -0400)]
test: make parsed nodedevs active and persistent

This was the implied default before nodedevs gained a notion of
being inactive and transient. It also matches the implied default
when parsing other object types

Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
12 months agoTranslated using Weblate (Swedish)
Göran Uddeborg [Wed, 24 Apr 2024 07:36:08 +0000 (09:36 +0200)]
Translated using Weblate (Swedish)

Currently translated at 70.1% (7325 of 10438 strings)

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

Co-authored-by: Göran Uddeborg <goeran@uddeborg.se>
Signed-off-by: Göran Uddeborg <goeran@uddeborg.se>
12 months agovirDomainDeviceIsUSB: Handle all USB devices and simplify the code
Peter Krempa [Wed, 3 Apr 2024 10:13:55 +0000 (12:13 +0200)]
virDomainDeviceIsUSB: Handle all USB devices and simplify the code

Rework 'virDomainUSBDeviceDefForeach' to use virDomainDeviceInfoIterate
instead of open-coding all iterators. To achieve this
'virDomainDeviceIsUSB' needs to be fixed as it didn't properly handle
'sound', 'fs', 'chr', 'ccid', and 'net' usb devices.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jonathon Jongsma <jjongsma@redhat.com>
12 months agodocs: Rewrite documentation for network device models
Peter Krempa [Wed, 3 Apr 2024 10:49:09 +0000 (12:49 +0200)]
docs: Rewrite documentation for network device models

Since libvirt now tries to interpret network device models (unless an
unknow model is used) the documentation didn't make a good job
specifying what is supported.

Rewrite the docs to explicitly list the models which we do parse.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jonathon Jongsma <jjongsma@redhat.com>
12 months agoqemucapabilitiestest: Update qemu capability dump for qemu-9.0 release
Peter Krempa [Wed, 24 Apr 2024 08:25:08 +0000 (10:25 +0200)]
qemucapabilitiestest: Update qemu capability dump for qemu-9.0 release

qemu-9.0 was released so update the capability dump to the final
version.

Notable changes:
 - the 'vdpa' simulator support was reverted for now

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
12 months agotests: qemucapsprobe: Fix construction of path to libqemucapsprobemock.so
Peter Krempa [Wed, 24 Apr 2024 08:06:28 +0000 (10:06 +0200)]
tests: qemucapsprobe: Fix construction of path to libqemucapsprobemock.so

Prior to commit eac646ea490e66 VIR_TEST_MOCK included the path to the
build directory, but the code was not fixed after VIR_TEST_MOCK was
changed resulting in the following failure when attempting to probe
capaibilities:

 $ ./tests/qemucapsprobe /path/to/qemu/qemu-system-x86_64 > out
 libqemucapsprobemock.so: No such file or directory

Fix the construction of the path to the mock library by concatenating it
back with the absolute path to the build directory.

Fixes: eac646ea490e66500609585047f0d800e3645d6b
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
12 months agoqemu: migration: Don't use empty string for 'tls-hostname' NBD blockdev
Peter Krempa [Fri, 19 Apr 2024 13:51:35 +0000 (15:51 +0200)]
qemu: migration: Don't use empty string for 'tls-hostname' NBD blockdev

While QEMU accepts and interprets an empty string in the tls-hostname
field in migration parametes as if it's unset, the same does not apply
for the 'tls-hostname' field when 'blockdev-add'-ing a NBD backend for
non-shared storage migration.

When libvirt sets up migation with TLS in 'qemuMigrationParamsEnableTLS'
the QEMU_MIGRATION_PARAM_TLS_HOSTNAME migration parameter will be set to
empty string in case when the 'hostname' argument is passed as NULL.

Later on when setting up the NBD connections for non-shared storage
migration 'qemuMigrationParamsGetTLSHostname', which fetches the value
of the aforementioned TLS parameter.

This bug was mostly latent until recently as libvirt used
MIGRATION_DEST_CONNECT_HOST mode in most cases which required the
hostname to be passed, thus the parameter was set properly.

This changed with 8d693d79c40 for post-copy migration, where libvirt now
instructs qemu to connect and thus passes NULL hostname to
qemuMigrationParamsEnableTLS, which in turn causes libvirt to try to
add NBD connection with empty string as tls-hostname resulting in:

  error: internal error: unable to execute QEMU command 'blockdev-add': Certificate does not match the hostname

To address this modify 'qemuMigrationParamsGetTLSHostname' to undo the
weird semantics the migration code uses to handle TLS hostname and make
it return NULL if the hostname is an empty string.

Fixes: e8fa09d66bc
Resolves: https://issues.redhat.com/browse/RHEL-32880
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
12 months agovirnetdevopenvswitch: Create OVS ports as transient
Michal Privoznik [Fri, 19 Apr 2024 13:45:48 +0000 (15:45 +0200)]
virnetdevopenvswitch: Create OVS ports as transient

Since OVS keeps desired state in a DB, upon sudden crash of the
host we may leave a port behind. There's no problem on VM
shutdown or NIC hotunplug as we call corresponding del-port
function (virNetDevOpenvswitchRemovePort()). But if the host
suddenly crashes we won't ever do that. What happens next, is
when OVS starts it finds desired state in its DB and creates a
stale port.

OVS added support for transient ports in v2.5.0 (Feb 2016) and
since its v2.9.0 it even installs a systemd service
(ovs-delete-transient-ports) that automatically deletes transient
ports on system startup. If we mark a port as transient then OVS
won't restore its state on restart after crash.

This change may render "--may-exist" argument redundant, but I'm
not sure about all the implications if it was removed. Let's keep
it for now.

Resolves: https://gitlab.com/libvirt/libvirt/-/issues/615
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
12 months agoqemu_validate: Reject virtiofs with bootindex on s390x with CCW
Peter Krempa [Mon, 22 Apr 2024 13:21:37 +0000 (15:21 +0200)]
qemu_validate: Reject virtiofs with bootindex on s390x with CCW

The CCW variant of the 'vhost-user-fs' device in qemu doesn't
deliberately support the 'bootindex' attribute as the machine is unable
to boot from such device.

Reject '<boot order' on non-PCI virtiofs, add tests validating that it's
rejected as well as that virtiofs on PCI-based hosts but without address
specified will be accepted.

Resolves: https://issues.redhat.com/browse/RHEL-22728
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
12 months agoqemuxmlconftest: Decouple input and output files of 'vhost-user-fs-hugepage' case
Peter Krempa [Mon, 22 Apr 2024 14:49:28 +0000 (16:49 +0200)]
qemuxmlconftest: Decouple input and output files of 'vhost-user-fs-hugepage' case

Replace symlink by a real output file so that we can also test updates
to input file.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
12 months agoqemuxmlconftest: Add test case for virtiofs on s390 using 'ccw' addresses
Peter Krempa [Mon, 22 Apr 2024 13:15:45 +0000 (15:15 +0200)]
qemuxmlconftest: Add test case for virtiofs on s390 using 'ccw' addresses

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
12 months agoTranslated using Weblate (Swedish)
Göran Uddeborg [Mon, 22 Apr 2024 17:36:06 +0000 (19:36 +0200)]
Translated using Weblate (Swedish)

Currently translated at 69.9% (7305 of 10438 strings)

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

Translated using Weblate (Swedish)

Currently translated at 69.6% (7265 of 10438 strings)

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

Co-authored-by: Göran Uddeborg <goeran@uddeborg.se>
Signed-off-by: Göran Uddeborg <goeran@uddeborg.se>
12 months agoTranslated using Weblate (English (United Kingdom))
Andi Chandler [Mon, 22 Apr 2024 17:36:05 +0000 (19:36 +0200)]
Translated using Weblate (English (United Kingdom))

Currently translated at 46.9% (4902 of 10438 strings)

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

Co-authored-by: Andi Chandler <andi@gowling.com>
Signed-off-by: Andi Chandler <andi@gowling.com>
12 months agoqemu_command: Generate mem-reserve for controllers
Michal Privoznik [Mon, 11 Sep 2023 13:59:53 +0000 (15:59 +0200)]
qemu_command: Generate mem-reserve for controllers

Pretty straightforward. Just put mem-reserve attribute whenever
it's set. Previous commit ensures it's set only for valid
controller models.

Resolves: https://issues.redhat.com/browse/RHEL-7461
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
12 months agoqemu_validate: Restrict setting @memReserve only to some controllers
Michal Privoznik [Mon, 11 Sep 2023 13:59:44 +0000 (15:59 +0200)]
qemu_validate: Restrict setting @memReserve only to some controllers

Only two controller models allow setting mem-reserve:
pcie-root-port and pci-bridge. Reflect this fact during
validation.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
12 months agoconf: Introduce @memReserve to <controller/>
Michal Privoznik [Mon, 11 Sep 2023 12:33:18 +0000 (14:33 +0200)]
conf: Introduce @memReserve to <controller/>

There are PCI devices with pretty large non-prefetchable memory,
for instance:

  Memory at 9d800000 (64-bit, non-prefetchable) [size=8M]
  Memory at a6800000 (64-bit, non-prefetchable) [size=16K]

For cold plugged devices this is not a problem, because firmware
sets PCI controllers in a way that make devices behind them just
work. Problem arises if such PCI device is to be hot plugged.
Since the PCI device wasn't present at cold boot, firmware could
not take it into calculations and the amount of reserved memory
is not sufficient.

Introduce a know that allows users overriding value computed by
FW and thus allow hot plug of such PCI devices.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
12 months agolibvirt_nss: Fix ERROR() macro
Michal Privoznik [Thu, 18 Apr 2024 07:25:07 +0000 (09:25 +0200)]
libvirt_nss: Fix ERROR() macro

The purpose of ERROR() macro in our NSS module is to print error
message provided as arguments followed by error string
corresponding to errno. Historically, we've used strerror_r() for
that (please note, we want our NSS module to be free of libvirt
internal functions, or glib even - hence, g_strerror() is off the
table).

Now strerror_r() is documented as:

  Returns ... a pointer to a string that the function stores in
  buf, or a pointer to some (immutable) static string (in which
  case buf is unused).

Therefore, we can't rely the string being stored in the buf and
really need to store the retval and print that instead.

While touching this area, decrease the ebuf size, since its
current size (1KiB) is triggering our stack limit (2KiB) in some
cases.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
12 months agoTranslated using Weblate (Swedish)
Göran Uddeborg [Wed, 17 Apr 2024 19:36:08 +0000 (21:36 +0200)]
Translated using Weblate (Swedish)

Currently translated at 69.4% (7245 of 10438 strings)

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

Co-authored-by: Göran Uddeborg <goeran@uddeborg.se>
Signed-off-by: Göran Uddeborg <goeran@uddeborg.se>
12 months agoqemu: Change return type of qemuDomainFixupCPUs to void
Jiri Denemark [Wed, 17 Apr 2024 12:28:24 +0000 (14:28 +0200)]
qemu: Change return type of qemuDomainFixupCPUs to void

The function never fails.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
12 months agoqemu: Change return type of qemuDomainUpdateCPU to void
Jiri Denemark [Wed, 17 Apr 2024 12:24:38 +0000 (14:24 +0200)]
qemu: Change return type of qemuDomainUpdateCPU to void

The function never fails.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
12 months agoNEWS: Mention migration bug with custom XML
Jiri Denemark [Tue, 16 Apr 2024 15:38:37 +0000 (17:38 +0200)]
NEWS: Mention migration bug with custom XML

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>