libvirt-10.10.0-11.el9

- Add load average information type into virDomainGetGuestInfo (RHEL-88447)
- qemu_agent: Add qemuAgentGetLoadAvg() (RHEL-88447)
- qemu: Add support for VIR_DOMAIN_GUEST_INFO_LOAD (RHEL-88447)
- virsh: Add support for VIR_DOMAIN_GUEST_INFO_LOAD (RHEL-88447)
- qemu_capabilities: Fetch caps for virtio-mem-ccw too (RHEL-87532)
- cpu_map: Add avx10* CPU features (RHEL-87796)
- cpu_map: Add GraniteRapids-v2 CPU model (RHEL-87796)
- cpu_map: Add sha512, sm3, and sm4 CPU features (RHEL-87796)
- virsh: Introduce new hypervisor-cpu-models command (RHEL-11435)
- qemu: remove nonsensical sanity check in processNetdevStreamDisconnectedEvent() (RHEL-80169)
- qemu: make processNetDevStreamDisconnectedEvent() reusable (RHEL-80169)
- qemu: respond to NETDEV_VHOST_USER_DISCONNECTED event (RHEL-80169)
- qemu: put vhost-user code that's special for passt in a helper function (RHEL-80169)
- qemu: make passt+vhostuser reconnect behave identically to passt+user (RHEL-80169)

Resolves: RHEL-11435, RHEL-80169, RHEL-87532, RHEL-87796, RHEL-88447
This commit is contained in:
Jiri Denemark 2025-05-22 12:11:58 +02:00
parent ef809b76a6
commit 05ff4ee618
15 changed files with 2345 additions and 1 deletions

View File

@ -0,0 +1,53 @@
From 9874072fc9396d609f1a0213bb06fa7e9a2fa019 Mon Sep 17 00:00:00 2001
Message-ID: <9874072fc9396d609f1a0213bb06fa7e9a2fa019.1747908717.git.jdenemar@redhat.com>
From: Martin Kletzander <mkletzan@redhat.com>
Date: Tue, 25 Feb 2025 15:36:03 +0100
Subject: [PATCH] Add load average information type into virDomainGetGuestInfo
The public API part.
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
(cherry picked from commit c52c449fd40c7263896d5f17129207b815c3a09c)
https://issues.redhat.com/browse/RHEL-88447
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
---
include/libvirt/libvirt-domain.h | 1 +
src/libvirt-domain.c | 8 ++++++++
2 files changed, 9 insertions(+)
diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
index f026ce197c..c04b696f03 100644
--- a/include/libvirt/libvirt-domain.h
+++ b/include/libvirt/libvirt-domain.h
@@ -6425,6 +6425,7 @@ typedef enum {
VIR_DOMAIN_GUEST_INFO_FILESYSTEM = (1 << 4), /* return filesystem information (Since: 5.7.0) */
VIR_DOMAIN_GUEST_INFO_DISKS = (1 << 5), /* return disks information (Since: 7.0.0) */
VIR_DOMAIN_GUEST_INFO_INTERFACES = (1 << 6), /* return interfaces information (Since: 7.10.0) */
+ VIR_DOMAIN_GUEST_INFO_LOAD = (1 << 7), /* return load averages (Since: 11.2.0) */
} virDomainGuestInfoTypes;
int virDomainGetGuestInfo(virDomainPtr domain,
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index 7c6b93963c..24752a9888 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -13292,6 +13292,14 @@ virDomainSetVcpu(virDomainPtr domain,
* "if.<num>.addr.<num1>.addr" - the IP address of addr <num1>
* "if.<num>.addr.<num1>.prefix" - the prefix of IP address of addr <num1>
*
+ * VIR_DOMAIN_GUEST_INFO_LOAD:
+ * Returns load (the number of processes in the runqueue or waiting for disk
+ * I/O) as double values:
+ *
+ * "load.1m" - load averaged over 1 minute
+ * "load.5m" - load averaged over 5 minutes
+ * "load.15m" - load averaged over 15 minutes
+ *
* Using 0 for @types returns all information groups supported by the given
* hypervisor.
*
--
2.49.0

View File

@ -0,0 +1,669 @@
From 7a9d85a3159fdc0ecec40338f7f28df91ba08a0c Mon Sep 17 00:00:00 2001
Message-ID: <7a9d85a3159fdc0ecec40338f7f28df91ba08a0c.1747908717.git.jdenemar@redhat.com>
From: Jiri Denemark <jdenemar@redhat.com>
Date: Wed, 18 Dec 2024 13:46:25 +0100
Subject: [PATCH] cpu_map: Add GraniteRapids-v2 CPU model
Introduced by QEMU 9.2.0
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 41a6de76bc6e31a206d9d82c84c5d485b710fe01)
https://issues.redhat.com/browse/RHEL-71897
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
(cherry picked from commit 4dbeaa7e1ce9fffb3e2a2b19ba10cc3d2c19091d)
Conflicts:
- tests/domaincapsdata/qemu_10.0.0* were updated by a later
upstream commit (712c39f987e1fb75a9fe3168dfb2501b719b5070)
which was already backported to RHEL-9 as commit
d056b57fff98c30ef64a695dec44a2ddfcc1c55b with the hunks
related to GraniteRapids-v2 removed, thus this backport has to
incorporate those hunks
https://issues.redhat.com/browse/RHEL-87796
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
=> 4c2001ea03d9466db571ddf07248c20d652ac775
---
src/cpu_map/index.xml | 1 +
src/cpu_map/meson.build | 1 +
src/cpu_map/x86_GraniteRapids-v2.xml | 206 ++++++++++++++++++
.../domaincapsdata/qemu_10.0.0-q35.x86_64.xml | 57 +++++
.../domaincapsdata/qemu_10.0.0-tcg.x86_64.xml | 47 ++++
tests/domaincapsdata/qemu_10.0.0.x86_64.xml | 57 +++++
.../domaincapsdata/qemu_9.2.0-q35.x86_64.xml | 57 +++++
.../domaincapsdata/qemu_9.2.0-tcg.x86_64.xml | 47 ++++
tests/domaincapsdata/qemu_9.2.0.x86_64.xml | 57 +++++
9 files changed, 530 insertions(+)
create mode 100644 src/cpu_map/x86_GraniteRapids-v2.xml
diff --git a/src/cpu_map/index.xml b/src/cpu_map/index.xml
index 8e74195312..dba2f21811 100644
--- a/src/cpu_map/index.xml
+++ b/src/cpu_map/index.xml
@@ -121,6 +121,7 @@
<include filename='x86_SapphireRapids-v3.xml'/>
<include filename='x86_GraniteRapids.xml'/>
<include filename='x86_GraniteRapids-v1.xml'/>
+ <include filename='x86_GraniteRapids-v2.xml'/>
<include filename='x86_SierraForest.xml'/>
<include filename='x86_SierraForest-v1.xml'/>
<include filename='x86_Denverton.xml'/>
diff --git a/src/cpu_map/meson.build b/src/cpu_map/meson.build
index fa7faa4016..9a1c048620 100644
--- a/src/cpu_map/meson.build
+++ b/src/cpu_map/meson.build
@@ -77,6 +77,7 @@ cpumap_data = [
'x86_EPYC.xml',
'x86_features.xml',
'x86_GraniteRapids-v1.xml',
+ 'x86_GraniteRapids-v2.xml',
'x86_GraniteRapids.xml',
'x86_Haswell-IBRS.xml',
'x86_Haswell-noTSX-IBRS.xml',
diff --git a/src/cpu_map/x86_GraniteRapids-v2.xml b/src/cpu_map/x86_GraniteRapids-v2.xml
new file mode 100644
index 0000000000..855a43d4ad
--- /dev/null
+++ b/src/cpu_map/x86_GraniteRapids-v2.xml
@@ -0,0 +1,206 @@
+<cpus>
+ <model name='GraniteRapids-v2'>
+ <decode host='on' guest='off'/>
+ <signature family='6' model='173'/>
+ <vendor name='Intel'/>
+ <feature name='3dnowprefetch'/>
+ <feature name='abm'/>
+ <feature name='adx'/>
+ <feature name='aes'/>
+ <feature name='amx-bf16'/>
+ <feature name='amx-fp16'/>
+ <feature name='amx-int8'/>
+ <feature name='amx-tile'/>
+ <feature name='apic'/>
+ <feature name='arat'/>
+ <feature name='arch-capabilities'/>
+ <feature name='avx'/>
+ <feature name='avx-vnni'/>
+ <feature name='avx10'/>
+ <feature name='avx10-128'/>
+ <feature name='avx10-256'/>
+ <feature name='avx10-512'/>
+ <feature name='avx2'/>
+ <feature name='avx512-bf16'/>
+ <feature name='avx512-fp16'/>
+ <feature name='avx512-vpopcntdq'/>
+ <feature name='avx512bitalg'/>
+ <feature name='avx512bw'/>
+ <feature name='avx512cd'/>
+ <feature name='avx512dq'/>
+ <feature name='avx512f'/>
+ <feature name='avx512ifma'/>
+ <feature name='avx512vbmi'/>
+ <feature name='avx512vbmi2'/>
+ <feature name='avx512vl'/>
+ <feature name='avx512vnni'/>
+ <feature name='bmi1'/>
+ <feature name='bmi2'/>
+ <feature name='bus-lock-detect'/>
+ <feature name='cldemote'/>
+ <feature name='clflush'/>
+ <feature name='clflushopt'/>
+ <feature name='clwb'/>
+ <feature name='cmov'/>
+ <feature name='cx16'/>
+ <feature name='cx8'/>
+ <feature name='de'/>
+ <feature name='erms'/>
+ <feature name='f16c'/>
+ <feature name='fbsdp-no'/>
+ <feature name='fma'/>
+ <feature name='fpu'/>
+ <feature name='fsgsbase'/>
+ <feature name='fsrc'/>
+ <feature name='fsrm'/>
+ <feature name='fsrs'/>
+ <feature name='fxsr'/>
+ <feature name='fzrm'/>
+ <feature name='gfni'/>
+ <feature name='hle'/>
+ <feature name='ibrs-all'/>
+ <feature name='invpcid'/>
+ <feature name='la57'/>
+ <feature name='lahf_lm'/>
+ <feature name='lm'/>
+ <feature name='mca'/>
+ <feature name='mcdt-no'/>
+ <feature name='mce'/>
+ <feature name='mds-no'/>
+ <feature name='mmx'/>
+ <feature name='movbe'/>
+ <feature name='movdir64b'/>
+ <feature name='movdiri'/>
+ <feature name='msr'/>
+ <feature name='mtrr'/>
+ <feature name='nx'/>
+ <feature name='pae'/>
+ <feature name='pat'/>
+ <feature name='pbrsb-no'/>
+ <feature name='pcid'/>
+ <feature name='pclmuldq'/>
+ <feature name='pdpe1gb'/>
+ <feature name='pge'/>
+ <feature name='pku'/>
+ <feature name='pni'/>
+ <feature name='popcnt'/>
+ <feature name='prefetchiti'/>
+ <feature name='pschange-mc-no'/>
+ <feature name='psdp-no'/>
+ <feature name='pse'/>
+ <feature name='pse36'/>
+ <feature name='rdctl-no'/>
+ <feature name='rdpid'/>
+ <feature name='rdrand'/>
+ <feature name='rdseed'/>
+ <feature name='rdtscp'/>
+ <feature name='rtm'/>
+ <feature name='sbdr-ssdp-no'/>
+ <feature name='sep'/>
+ <feature name='serialize'/>
+ <feature name='sha-ni'/>
+ <feature name='skip-l1dfl-vmentry'/>
+ <feature name='smap'/>
+ <feature name='smep'/>
+ <feature name='spec-ctrl'/>
+ <feature name='ss'/>
+ <feature name='ssbd'/>
+ <feature name='sse'/>
+ <feature name='sse2'/>
+ <feature name='sse4.1'/>
+ <feature name='sse4.2'/>
+ <feature name='ssse3'/>
+ <feature name='syscall'/>
+ <feature name='taa-no'/>
+ <feature name='tsc'/>
+ <feature name='tsc-deadline'/>
+ <feature name='tsc_adjust'/>
+ <feature name='tsx-ldtrk'/>
+ <feature name='umip'/>
+ <feature name='vaes'/>
+ <feature name='vme'/>
+ <feature name='vmx-activity-hlt'/>
+ <feature name='vmx-apicv-register'/>
+ <feature name='vmx-apicv-vid'/>
+ <feature name='vmx-apicv-x2apic'/>
+ <feature name='vmx-apicv-xapic'/>
+ <feature name='vmx-cr3-load-noexit'/>
+ <feature name='vmx-cr3-store-noexit'/>
+ <feature name='vmx-cr8-load-exit'/>
+ <feature name='vmx-cr8-store-exit'/>
+ <feature name='vmx-desc-exit'/>
+ <feature name='vmx-entry-ia32e-mode'/>
+ <feature name='vmx-entry-load-efer'/>
+ <feature name='vmx-entry-load-pat'/>
+ <feature name='vmx-entry-load-perf-global-ctrl'/>
+ <feature name='vmx-entry-noload-debugctl'/>
+ <feature name='vmx-ept'/>
+ <feature name='vmx-ept-1gb'/>
+ <feature name='vmx-ept-2mb'/>
+ <feature name='vmx-ept-execonly'/>
+ <feature name='vmx-eptad'/>
+ <feature name='vmx-eptp-switching'/>
+ <feature name='vmx-exit-ack-intr'/>
+ <feature name='vmx-exit-load-efer'/>
+ <feature name='vmx-exit-load-pat'/>
+ <feature name='vmx-exit-load-perf-global-ctrl'/>
+ <feature name='vmx-exit-nosave-debugctl'/>
+ <feature name='vmx-exit-save-efer'/>
+ <feature name='vmx-exit-save-pat'/>
+ <feature name='vmx-exit-save-preemption-timer'/>
+ <feature name='vmx-flexpriority'/>
+ <feature name='vmx-hlt-exit'/>
+ <feature name='vmx-ins-outs'/>
+ <feature name='vmx-intr-exit'/>
+ <feature name='vmx-invept'/>
+ <feature name='vmx-invept-all-context'/>
+ <feature name='vmx-invept-single-context'/>
+ <feature name='vmx-invlpg-exit'/>
+ <feature name='vmx-invpcid-exit'/>
+ <feature name='vmx-invvpid-all-context'/>
+ <feature name='vmx-invvpid-single-addr'/>
+ <feature name='vmx-invvpid-single-context-noglobals'/>
+ <feature name='vmx-io-bitmap'/>
+ <feature name='vmx-io-exit'/>
+ <feature name='vmx-monitor-exit'/>
+ <feature name='vmx-movdr-exit'/>
+ <feature name='vmx-msr-bitmap'/>
+ <feature name='vmx-mtf'/>
+ <feature name='vmx-mwait-exit'/>
+ <feature name='vmx-nmi-exit'/>
+ <feature name='vmx-page-walk-4'/>
+ <feature name='vmx-page-walk-5'/>
+ <feature name='vmx-pause-exit'/>
+ <feature name='vmx-pml'/>
+ <feature name='vmx-posted-intr'/>
+ <feature name='vmx-preemption-timer'/>
+ <feature name='vmx-rdpmc-exit'/>
+ <feature name='vmx-rdrand-exit'/>
+ <feature name='vmx-rdseed-exit'/>
+ <feature name='vmx-rdtsc-exit'/>
+ <feature name='vmx-rdtscp-exit'/>
+ <feature name='vmx-secondary-ctls'/>
+ <feature name='vmx-shadow-vmcs'/>
+ <feature name='vmx-store-lma'/>
+ <feature name='vmx-true-ctls'/>
+ <feature name='vmx-tsc-offset'/>
+ <feature name='vmx-unrestricted-guest'/>
+ <feature name='vmx-vintr-pending'/>
+ <feature name='vmx-vmfunc'/>
+ <feature name='vmx-vmwrite-vmexit-fields'/>
+ <feature name='vmx-vnmi'/>
+ <feature name='vmx-vnmi-pending'/>
+ <feature name='vmx-vpid'/>
+ <feature name='vmx-wbinvd-exit'/>
+ <feature name='vmx-xsaves'/>
+ <feature name='vpclmulqdq'/>
+ <feature name='wbnoinvd'/>
+ <feature name='x2apic'/>
+ <feature name='xfd'/>
+ <feature name='xgetbv1'/>
+ <feature name='xsave'/>
+ <feature name='xsavec'/>
+ <feature name='xsaveopt'/>
+ <feature name='xsaves'/>
+ </model>
+</cpus>
diff --git a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml
index e4d8862569..f1a7963d34 100644
--- a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml
@@ -565,6 +565,63 @@
<feature name='xfd'/>
<feature name='xsaves'/>
</blockers>
+ <model usable='no' vendor='Intel'>GraniteRapids-v2</model>
+ <blockers model='GraniteRapids-v2'>
+ <feature name='amx-bf16'/>
+ <feature name='amx-fp16'/>
+ <feature name='amx-int8'/>
+ <feature name='amx-tile'/>
+ <feature name='avx-vnni'/>
+ <feature name='avx10'/>
+ <feature name='avx10-128'/>
+ <feature name='avx10-256'/>
+ <feature name='avx10-512'/>
+ <feature name='avx512-bf16'/>
+ <feature name='avx512-fp16'/>
+ <feature name='avx512-vpopcntdq'/>
+ <feature name='avx512bitalg'/>
+ <feature name='avx512bw'/>
+ <feature name='avx512cd'/>
+ <feature name='avx512dq'/>
+ <feature name='avx512f'/>
+ <feature name='avx512ifma'/>
+ <feature name='avx512vbmi'/>
+ <feature name='avx512vbmi2'/>
+ <feature name='avx512vl'/>
+ <feature name='avx512vnni'/>
+ <feature name='bus-lock-detect'/>
+ <feature name='cldemote'/>
+ <feature name='erms'/>
+ <feature name='fbsdp-no'/>
+ <feature name='fsrc'/>
+ <feature name='fsrm'/>
+ <feature name='fsrs'/>
+ <feature name='fzrm'/>
+ <feature name='gfni'/>
+ <feature name='hle'/>
+ <feature name='ibrs-all'/>
+ <feature name='invpcid'/>
+ <feature name='la57'/>
+ <feature name='mcdt-no'/>
+ <feature name='movdir64b'/>
+ <feature name='movdiri'/>
+ <feature name='pbrsb-no'/>
+ <feature name='pcid'/>
+ <feature name='pku'/>
+ <feature name='prefetchiti'/>
+ <feature name='psdp-no'/>
+ <feature name='rtm'/>
+ <feature name='sbdr-ssdp-no'/>
+ <feature name='serialize'/>
+ <feature name='spec-ctrl'/>
+ <feature name='ss'/>
+ <feature name='taa-no'/>
+ <feature name='tsx-ldtrk'/>
+ <feature name='vaes'/>
+ <feature name='vpclmulqdq'/>
+ <feature name='xfd'/>
+ <feature name='xsaves'/>
+ </blockers>
<model usable='no' vendor='Intel' canonical='Haswell-v1'>Haswell</model>
<blockers model='Haswell'>
<feature name='erms'/>
diff --git a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml
index a21ed4997e..9a7d39c1f8 100644
--- a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml
@@ -733,6 +733,53 @@
<feature name='xsavec'/>
<feature name='xsaves'/>
</blockers>
+ <model usable='no' vendor='Intel'>GraniteRapids-v2</model>
+ <blockers model='GraniteRapids-v2'>
+ <feature name='amx-bf16'/>
+ <feature name='amx-fp16'/>
+ <feature name='amx-int8'/>
+ <feature name='amx-tile'/>
+ <feature name='arch-capabilities'/>
+ <feature name='avx-vnni'/>
+ <feature name='avx10'/>
+ <feature name='avx10-128'/>
+ <feature name='avx10-256'/>
+ <feature name='avx10-512'/>
+ <feature name='avx512-bf16'/>
+ <feature name='avx512-fp16'/>
+ <feature name='avx512-vpopcntdq'/>
+ <feature name='avx512bitalg'/>
+ <feature name='avx512bw'/>
+ <feature name='avx512cd'/>
+ <feature name='avx512dq'/>
+ <feature name='avx512f'/>
+ <feature name='avx512ifma'/>
+ <feature name='avx512vbmi'/>
+ <feature name='avx512vbmi2'/>
+ <feature name='avx512vl'/>
+ <feature name='avx512vnni'/>
+ <feature name='bus-lock-detect'/>
+ <feature name='cldemote'/>
+ <feature name='gfni'/>
+ <feature name='hle'/>
+ <feature name='invpcid'/>
+ <feature name='mcdt-no'/>
+ <feature name='movdir64b'/>
+ <feature name='movdiri'/>
+ <feature name='pcid'/>
+ <feature name='prefetchiti'/>
+ <feature name='rtm'/>
+ <feature name='serialize'/>
+ <feature name='spec-ctrl'/>
+ <feature name='ssbd'/>
+ <feature name='tsc-deadline'/>
+ <feature name='tsc_adjust'/>
+ <feature name='tsx-ldtrk'/>
+ <feature name='vpclmulqdq'/>
+ <feature name='xfd'/>
+ <feature name='xsavec'/>
+ <feature name='xsaves'/>
+ </blockers>
<model usable='no' vendor='Intel' canonical='Haswell-v1'>Haswell</model>
<blockers model='Haswell'>
<feature name='hle'/>
diff --git a/tests/domaincapsdata/qemu_10.0.0.x86_64.xml b/tests/domaincapsdata/qemu_10.0.0.x86_64.xml
index f4989749ce..64dc451eda 100644
--- a/tests/domaincapsdata/qemu_10.0.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_10.0.0.x86_64.xml
@@ -564,6 +564,63 @@
<feature name='xfd'/>
<feature name='xsaves'/>
</blockers>
+ <model usable='no' vendor='Intel'>GraniteRapids-v2</model>
+ <blockers model='GraniteRapids-v2'>
+ <feature name='amx-bf16'/>
+ <feature name='amx-fp16'/>
+ <feature name='amx-int8'/>
+ <feature name='amx-tile'/>
+ <feature name='avx-vnni'/>
+ <feature name='avx10'/>
+ <feature name='avx10-128'/>
+ <feature name='avx10-256'/>
+ <feature name='avx10-512'/>
+ <feature name='avx512-bf16'/>
+ <feature name='avx512-fp16'/>
+ <feature name='avx512-vpopcntdq'/>
+ <feature name='avx512bitalg'/>
+ <feature name='avx512bw'/>
+ <feature name='avx512cd'/>
+ <feature name='avx512dq'/>
+ <feature name='avx512f'/>
+ <feature name='avx512ifma'/>
+ <feature name='avx512vbmi'/>
+ <feature name='avx512vbmi2'/>
+ <feature name='avx512vl'/>
+ <feature name='avx512vnni'/>
+ <feature name='bus-lock-detect'/>
+ <feature name='cldemote'/>
+ <feature name='erms'/>
+ <feature name='fbsdp-no'/>
+ <feature name='fsrc'/>
+ <feature name='fsrm'/>
+ <feature name='fsrs'/>
+ <feature name='fzrm'/>
+ <feature name='gfni'/>
+ <feature name='hle'/>
+ <feature name='ibrs-all'/>
+ <feature name='invpcid'/>
+ <feature name='la57'/>
+ <feature name='mcdt-no'/>
+ <feature name='movdir64b'/>
+ <feature name='movdiri'/>
+ <feature name='pbrsb-no'/>
+ <feature name='pcid'/>
+ <feature name='pku'/>
+ <feature name='prefetchiti'/>
+ <feature name='psdp-no'/>
+ <feature name='rtm'/>
+ <feature name='sbdr-ssdp-no'/>
+ <feature name='serialize'/>
+ <feature name='spec-ctrl'/>
+ <feature name='ss'/>
+ <feature name='taa-no'/>
+ <feature name='tsx-ldtrk'/>
+ <feature name='vaes'/>
+ <feature name='vpclmulqdq'/>
+ <feature name='xfd'/>
+ <feature name='xsaves'/>
+ </blockers>
<model usable='no' vendor='Intel' canonical='Haswell-v1'>Haswell</model>
<blockers model='Haswell'>
<feature name='erms'/>
diff --git a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml
index 99445e5f44..d5db9af49e 100644
--- a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml
@@ -565,6 +565,63 @@
<feature name='xfd'/>
<feature name='xsaves'/>
</blockers>
+ <model usable='no' vendor='Intel'>GraniteRapids-v2</model>
+ <blockers model='GraniteRapids-v2'>
+ <feature name='amx-bf16'/>
+ <feature name='amx-fp16'/>
+ <feature name='amx-int8'/>
+ <feature name='amx-tile'/>
+ <feature name='avx-vnni'/>
+ <feature name='avx10'/>
+ <feature name='avx10-128'/>
+ <feature name='avx10-256'/>
+ <feature name='avx10-512'/>
+ <feature name='avx512-bf16'/>
+ <feature name='avx512-fp16'/>
+ <feature name='avx512-vpopcntdq'/>
+ <feature name='avx512bitalg'/>
+ <feature name='avx512bw'/>
+ <feature name='avx512cd'/>
+ <feature name='avx512dq'/>
+ <feature name='avx512f'/>
+ <feature name='avx512ifma'/>
+ <feature name='avx512vbmi'/>
+ <feature name='avx512vbmi2'/>
+ <feature name='avx512vl'/>
+ <feature name='avx512vnni'/>
+ <feature name='bus-lock-detect'/>
+ <feature name='cldemote'/>
+ <feature name='erms'/>
+ <feature name='fbsdp-no'/>
+ <feature name='fsrc'/>
+ <feature name='fsrm'/>
+ <feature name='fsrs'/>
+ <feature name='fzrm'/>
+ <feature name='gfni'/>
+ <feature name='hle'/>
+ <feature name='ibrs-all'/>
+ <feature name='invpcid'/>
+ <feature name='la57'/>
+ <feature name='mcdt-no'/>
+ <feature name='movdir64b'/>
+ <feature name='movdiri'/>
+ <feature name='pbrsb-no'/>
+ <feature name='pcid'/>
+ <feature name='pku'/>
+ <feature name='prefetchiti'/>
+ <feature name='psdp-no'/>
+ <feature name='rtm'/>
+ <feature name='sbdr-ssdp-no'/>
+ <feature name='serialize'/>
+ <feature name='spec-ctrl'/>
+ <feature name='ss'/>
+ <feature name='taa-no'/>
+ <feature name='tsx-ldtrk'/>
+ <feature name='vaes'/>
+ <feature name='vpclmulqdq'/>
+ <feature name='xfd'/>
+ <feature name='xsaves'/>
+ </blockers>
<model usable='no' vendor='Intel' canonical='Haswell-v1'>Haswell</model>
<blockers model='Haswell'>
<feature name='erms'/>
diff --git a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml
index 8bf967c99f..7ccdc11412 100644
--- a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml
@@ -733,6 +733,53 @@
<feature name='xsavec'/>
<feature name='xsaves'/>
</blockers>
+ <model usable='no' vendor='Intel'>GraniteRapids-v2</model>
+ <blockers model='GraniteRapids-v2'>
+ <feature name='amx-bf16'/>
+ <feature name='amx-fp16'/>
+ <feature name='amx-int8'/>
+ <feature name='amx-tile'/>
+ <feature name='arch-capabilities'/>
+ <feature name='avx-vnni'/>
+ <feature name='avx10'/>
+ <feature name='avx10-128'/>
+ <feature name='avx10-256'/>
+ <feature name='avx10-512'/>
+ <feature name='avx512-bf16'/>
+ <feature name='avx512-fp16'/>
+ <feature name='avx512-vpopcntdq'/>
+ <feature name='avx512bitalg'/>
+ <feature name='avx512bw'/>
+ <feature name='avx512cd'/>
+ <feature name='avx512dq'/>
+ <feature name='avx512f'/>
+ <feature name='avx512ifma'/>
+ <feature name='avx512vbmi'/>
+ <feature name='avx512vbmi2'/>
+ <feature name='avx512vl'/>
+ <feature name='avx512vnni'/>
+ <feature name='bus-lock-detect'/>
+ <feature name='cldemote'/>
+ <feature name='gfni'/>
+ <feature name='hle'/>
+ <feature name='invpcid'/>
+ <feature name='mcdt-no'/>
+ <feature name='movdir64b'/>
+ <feature name='movdiri'/>
+ <feature name='pcid'/>
+ <feature name='prefetchiti'/>
+ <feature name='rtm'/>
+ <feature name='serialize'/>
+ <feature name='spec-ctrl'/>
+ <feature name='ssbd'/>
+ <feature name='tsc-deadline'/>
+ <feature name='tsc_adjust'/>
+ <feature name='tsx-ldtrk'/>
+ <feature name='vpclmulqdq'/>
+ <feature name='xfd'/>
+ <feature name='xsavec'/>
+ <feature name='xsaves'/>
+ </blockers>
<model usable='no' vendor='Intel' canonical='Haswell-v1'>Haswell</model>
<blockers model='Haswell'>
<feature name='hle'/>
diff --git a/tests/domaincapsdata/qemu_9.2.0.x86_64.xml b/tests/domaincapsdata/qemu_9.2.0.x86_64.xml
index 40aa971144..05a5ce4bee 100644
--- a/tests/domaincapsdata/qemu_9.2.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_9.2.0.x86_64.xml
@@ -564,6 +564,63 @@
<feature name='xfd'/>
<feature name='xsaves'/>
</blockers>
+ <model usable='no' vendor='Intel'>GraniteRapids-v2</model>
+ <blockers model='GraniteRapids-v2'>
+ <feature name='amx-bf16'/>
+ <feature name='amx-fp16'/>
+ <feature name='amx-int8'/>
+ <feature name='amx-tile'/>
+ <feature name='avx-vnni'/>
+ <feature name='avx10'/>
+ <feature name='avx10-128'/>
+ <feature name='avx10-256'/>
+ <feature name='avx10-512'/>
+ <feature name='avx512-bf16'/>
+ <feature name='avx512-fp16'/>
+ <feature name='avx512-vpopcntdq'/>
+ <feature name='avx512bitalg'/>
+ <feature name='avx512bw'/>
+ <feature name='avx512cd'/>
+ <feature name='avx512dq'/>
+ <feature name='avx512f'/>
+ <feature name='avx512ifma'/>
+ <feature name='avx512vbmi'/>
+ <feature name='avx512vbmi2'/>
+ <feature name='avx512vl'/>
+ <feature name='avx512vnni'/>
+ <feature name='bus-lock-detect'/>
+ <feature name='cldemote'/>
+ <feature name='erms'/>
+ <feature name='fbsdp-no'/>
+ <feature name='fsrc'/>
+ <feature name='fsrm'/>
+ <feature name='fsrs'/>
+ <feature name='fzrm'/>
+ <feature name='gfni'/>
+ <feature name='hle'/>
+ <feature name='ibrs-all'/>
+ <feature name='invpcid'/>
+ <feature name='la57'/>
+ <feature name='mcdt-no'/>
+ <feature name='movdir64b'/>
+ <feature name='movdiri'/>
+ <feature name='pbrsb-no'/>
+ <feature name='pcid'/>
+ <feature name='pku'/>
+ <feature name='prefetchiti'/>
+ <feature name='psdp-no'/>
+ <feature name='rtm'/>
+ <feature name='sbdr-ssdp-no'/>
+ <feature name='serialize'/>
+ <feature name='spec-ctrl'/>
+ <feature name='ss'/>
+ <feature name='taa-no'/>
+ <feature name='tsx-ldtrk'/>
+ <feature name='vaes'/>
+ <feature name='vpclmulqdq'/>
+ <feature name='xfd'/>
+ <feature name='xsaves'/>
+ </blockers>
<model usable='no' vendor='Intel' canonical='Haswell-v1'>Haswell</model>
<blockers model='Haswell'>
<feature name='erms'/>
--
2.49.0

View File

@ -0,0 +1,51 @@
From 9a44ff8f39bc9873ea9efa42d5705dab5f43be2a Mon Sep 17 00:00:00 2001
Message-ID: <9a44ff8f39bc9873ea9efa42d5705dab5f43be2a.1747908717.git.jdenemar@redhat.com>
From: Jiri Denemark <jdenemar@redhat.com>
Date: Wed, 18 Dec 2024 13:30:16 +0100
Subject: [PATCH] cpu_map: Add avx10* CPU features
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 30f05acf354437a776b528487bb70ddccf324cd2)
https://issues.redhat.com/browse/RHEL-87796
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
---
src/cpu_map/x86_features.xml | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
index 08bf014604..8be8fab42e 100644
--- a/src/cpu_map/x86_features.xml
+++ b/src/cpu_map/x86_features.xml
@@ -469,6 +469,9 @@
<feature name='prefetchiti'>
<cpuid eax_in='0x00000007' ecx_in='0x00000001' edx='0x00004000'/>
</feature>
+ <feature name='avx10'>
+ <cpuid eax_in='0x00000007' ecx_in='0x00000001' edx='0x00080000'/>
+ </feature>
<!-- cpuid level 0x00000007, 0x0002 (edx) -->
<feature name='mcdt-no'>
@@ -541,6 +544,17 @@
<cpuid eax_in='0x00000014' ecx_in='0x00000000' ecx='0x80000000'/>
</feature>
+ <!-- cpuid level 0x00000024, 0x0000 (ebx) -->
+ <feature name='avx10-128'>
+ <cpuid eax_in='0x00000024' ecx_in='0x00000000' ebx='0x00010000'/>
+ </feature>
+ <feature name='avx10-256'>
+ <cpuid eax_in='0x00000024' ecx_in='0x00000000' ebx='0x00020000'/>
+ </feature>
+ <feature name='avx10-512'>
+ <cpuid eax_in='0x00000024' ecx_in='0x00000000' ebx='0x00040000'/>
+ </feature>
+
<!-- cpuid level 0x80000001 (ecx) -->
<feature name='lahf_lm'>
<alias name='lahf-lm' source='qemu'/>
--
2.49.0

View File

@ -0,0 +1,46 @@
From a28c3abf6f5c7c1d8d45b3fc681f6768e2a3d7a9 Mon Sep 17 00:00:00 2001
Message-ID: <a28c3abf6f5c7c1d8d45b3fc681f6768e2a3d7a9.1747908718.git.jdenemar@redhat.com>
From: Jiri Denemark <jdenemar@redhat.com>
Date: Wed, 18 Dec 2024 13:27:40 +0100
Subject: [PATCH] cpu_map: Add sha512, sm3, and sm4 CPU features
Introduced by Clearwater Forest platform.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 212b7d8e280cabddef1f0996bd9553c6a55babd8)
https://issues.redhat.com/browse/RHEL-71898
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
(cherry picked from commit 153ee694e806ebf1ba684c1b7ddfa7a90c9d3adf)
https://issues.redhat.com/browse/RHEL-87796
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
---
src/cpu_map/x86_features.xml | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
index 8be8fab42e..0e1fee6e98 100644
--- a/src/cpu_map/x86_features.xml
+++ b/src/cpu_map/x86_features.xml
@@ -416,6 +416,15 @@
</feature>
<!-- cpuid level 0x00000007, 0x0001 (eax) -->
+ <feature name='sha512'>
+ <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00000001'/>
+ </feature>
+ <feature name='sm3'>
+ <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00000002'/>
+ </feature>
+ <feature name='sm4'>
+ <cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00000004'/>
+ </feature>
<feature name='avx-vnni'>
<cpuid eax_in='0x00000007' ecx_in='0x00000001' eax='0x00000010'/>
</feature>
--
2.49.0

View File

@ -0,0 +1,72 @@
From aeff1ebf96b595337f14ef6d1412d6c407bdc085 Mon Sep 17 00:00:00 2001
Message-ID: <aeff1ebf96b595337f14ef6d1412d6c407bdc085.1747908717.git.jdenemar@redhat.com>
From: Martin Kletzander <mkletzan@redhat.com>
Date: Tue, 25 Feb 2025 15:36:32 +0100
Subject: [PATCH] qemu: Add support for VIR_DOMAIN_GUEST_INFO_LOAD
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
(cherry picked from commit b4cf9c8cba45e65551aa9440dea2c3757a96aa0c)
https://issues.redhat.com/browse/RHEL-88447
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
---
src/qemu/qemu_driver.c | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 8a354a606a..11dbbc1aab 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -19276,7 +19276,8 @@ static const unsigned int qemuDomainGetGuestInfoSupportedTypes =
VIR_DOMAIN_GUEST_INFO_HOSTNAME |
VIR_DOMAIN_GUEST_INFO_FILESYSTEM |
VIR_DOMAIN_GUEST_INFO_DISKS |
- VIR_DOMAIN_GUEST_INFO_INTERFACES;
+ VIR_DOMAIN_GUEST_INFO_INTERFACES |
+ VIR_DOMAIN_GUEST_INFO_LOAD;
static int
qemuDomainGetGuestInfoCheckSupport(unsigned int types,
@@ -19563,6 +19564,10 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
qemuAgentDiskInfo **agentdiskinfo = NULL;
virDomainInterfacePtr *ifaces = NULL;
size_t nifaces = 0;
+ double load1m = 0;
+ double load5m = 0;
+ double load15m = 0;
+ bool format_load = false;
size_t i;
virCheckFlags(0, -1);
@@ -19633,6 +19638,14 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
nifaces = rc;
}
+ if (supportedTypes & VIR_DOMAIN_GUEST_INFO_LOAD) {
+ rc = qemuAgentGetLoadAvg(agent, &load1m, &load5m, &load15m, report_unsupported);
+ if (rc == -1)
+ goto exitagent;
+ if (rc >= 0)
+ format_load = true;
+ }
+
qemuDomainObjExitAgent(vm, agent);
virDomainObjEndAgentJob(vm);
@@ -19659,6 +19672,12 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
virDomainInterfaceFormatParams(ifaces, nifaces, params, nparams, &maxparams);
}
+ if (format_load) {
+ virTypedParamsAddDouble(params, nparams, &maxparams, "load.1m", load1m);
+ virTypedParamsAddDouble(params, nparams, &maxparams, "load.5m", load5m);
+ virTypedParamsAddDouble(params, nparams, &maxparams, "load.15m", load15m);
+ }
+
ret = 0;
cleanup:
--
2.49.0

View File

@ -0,0 +1,111 @@
From 74aeb210bdbeba3389eff4f07860217dd8bb068e Mon Sep 17 00:00:00 2001
Message-ID: <74aeb210bdbeba3389eff4f07860217dd8bb068e.1747908718.git.jdenemar@redhat.com>
From: Laine Stump <laine@redhat.com>
Date: Fri, 4 Apr 2025 19:44:52 -0400
Subject: [PATCH] qemu: make passt+vhostuser reconnect behave identically to
passt+user
When "original passt" support was added, we decided that we always
wanted to reconnect (i.e. restart the passt process) if it was somehow
terminated. Generic vhost-user, on the other hand, only turns on
reconnect if specified by the user in the config. But there is no
reason to require the user to specify this if the other end of the
vhost-user socket is a passt process - we know what has happened and
what we want to do; no reason to do the *wrong* thing by default, and
force the user to make an arbitrary decision about what to add to the
config in order to make it do the *right* thing; instead we just
hardcode it to always do the right thing.
(NB: when the backend is passt, <interface type='vhostuser'> has
always ignored the reconnect setting in <source> when parsing and
formatting, just as it has always ignored the socket path (since that
also is not user configurable for the passt backend)
Resolves: https://issues.redhat.com/browse/RHEL-80169
Signed-off-by: Laine Stump <laine@redhat.com>
Tested-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 44abaa0128ac0fc8be9de4eebc15c03809bf5867)
Conflicts:
tests/qemuxmlconfdata/schema-reorder-domain-subelements.x86_64-latest.args:
This file (created by upstream commit be5332c81d28) was modified
upstream but doesin't exist downstream
https://issues.redhat.com/browse/RHEL-80169
Signed-off-by: Laine Stump <laine@redhat.com>
---
src/qemu/qemu_passt.c | 16 +++++++++++++---
.../net-vhostuser-passt.x86_64-latest.args | 6 +++---
2 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c
index bc495eca1e..fcc34de384 100644
--- a/src/qemu/qemu_passt.c
+++ b/src/qemu/qemu_passt.c
@@ -36,7 +36,7 @@ VIR_LOG_INIT("qemu.passt");
#define PASST "passt"
-
+#define QEMU_PASST_RECONNECT_TIMEOUT 5
static char *
qemuPasstCreatePidFilename(virDomainObj *vm,
@@ -106,11 +106,15 @@ qemuPasstAddNetProps(virDomainObj *vm,
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NETDEV_STREAM_RECONNECT)) {
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NETDEV_STREAM_RECONNECT_MILISECONDS)) {
- if (virJSONValueObjectAdd(netprops, "u:reconnect-ms", 5000, NULL) < 0)
+ if (virJSONValueObjectAdd(netprops, "u:reconnect-ms",
+ QEMU_PASST_RECONNECT_TIMEOUT * 1000, NULL) < 0) {
return -1;
+ }
} else {
- if (virJSONValueObjectAdd(netprops, "u:reconnect", 5, NULL) < 0)
+ if (virJSONValueObjectAdd(netprops, "u:reconnect",
+ QEMU_PASST_RECONNECT_TIMEOUT, NULL) < 0) {
return -1;
+ }
}
}
@@ -182,6 +186,12 @@ qemuPasstPrepareVhostUser(virDomainObj *vm,
*/
g_free(net->data.vhostuser->data.nix.path);
net->data.vhostuser->data.nix.path = qemuPasstCreateSocketPath(vm, net);
+
+ /* reconnect is always enabled, with timeout always at 5 seconds, when
+ * using passt
+ */
+ net->data.vhostuser->data.nix.reconnect.enabled = VIR_TRISTATE_BOOL_YES;
+ net->data.vhostuser->data.nix.reconnect.timeout = QEMU_PASST_RECONNECT_TIMEOUT;
}
int
diff --git a/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args b/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args
index 7c030d7067..afbbe188cf 100644
--- a/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args
+++ b/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args
@@ -28,13 +28,13 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
-boot strict=on \
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","read-only":false}' \
-device '{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-1-storage","id":"ide0-0-0","bootindex":1}' \
--chardev socket,id=charnet0,path=/var/run/libvirt/qemu/passt/-1-QEMUGuest1-net0.socket \
+-chardev socket,id=charnet0,path=/var/run/libvirt/qemu/passt/-1-QEMUGuest1-net0.socket,reconnect-ms=5000 \
-netdev '{"type":"vhost-user","chardev":"charnet0","id":"hostnet0"}' \
-device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":"00:11:22:33:44:55","bus":"pci.0","addr":"0x2"}' \
--chardev socket,id=charnet1,path=/var/run/libvirt/qemu/passt/-1-QEMUGuest1-net1.socket \
+-chardev socket,id=charnet1,path=/var/run/libvirt/qemu/passt/-1-QEMUGuest1-net1.socket,reconnect-ms=5000 \
-netdev '{"type":"vhost-user","chardev":"charnet1","id":"hostnet1"}' \
-device '{"driver":"virtio-net-pci","netdev":"hostnet1","id":"net1","mac":"00:11:22:33:44:11","bus":"pci.0","addr":"0x3"}' \
--chardev socket,id=charnet2,path=/var/run/libvirt/qemu/passt/-1-QEMUGuest1-net2.socket \
+-chardev socket,id=charnet2,path=/var/run/libvirt/qemu/passt/-1-QEMUGuest1-net2.socket,reconnect-ms=5000 \
-netdev '{"type":"vhost-user","chardev":"charnet2","id":"hostnet2"}' \
-device '{"driver":"virtio-net-pci","netdev":"hostnet2","id":"net2","mac":"00:11:22:33:44:11","bus":"pci.0","addr":"0x4"}' \
-audiodev '{"id":"audio1","driver":"none"}' \
--
2.49.0

View File

@ -0,0 +1,119 @@
From a34cd486d22bf36ea64a6dd14541138fcca31b37 Mon Sep 17 00:00:00 2001
Message-ID: <a34cd486d22bf36ea64a6dd14541138fcca31b37.1747908718.git.jdenemar@redhat.com>
From: Laine Stump <laine@redhat.com>
Date: Fri, 4 Apr 2025 16:57:21 -0400
Subject: [PATCH] qemu: make processNetDevStreamDisconnectedEvent() reusable
We will be adding a new event whose response will be *exactly* the
same as the response to NETDEV_STREAM_DISCONNECTED. Rather than doing
a copy-paste of the complete function that does the processing, turn
that function into something more generic that takes the name of the
event as an arg (the event name is only used in log messages).
Signed-off-by: Laine Stump <laine@redhat.com>
Tested-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 03a6bc7752ec73d7ea222d5386e8f4124fe51c7f)
Conflicts:
src/qemu/qemu_driver.c:
In context surrounding a chunk, the arguments to
processNicRxFilterChangedEvent() changed upstream (due to upstream
commit 50981052a5f)
https://issues.redhat.com/browse/RHEL-80169
Signed-off-by: Laine Stump <laine@redhat.com>
---
src/qemu/qemu_driver.c | 37 +++++++++++++++++++++++--------------
1 file changed, 23 insertions(+), 14 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 89bb10756e..3373dfb845 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -3618,8 +3618,9 @@ processDeviceDeletedEvent(virQEMUDriver *driver,
static void
-processNetdevStreamDisconnectedEvent(virDomainObj *vm,
- const char *netdevId)
+processNetdevDisconnectedEvent(virDomainObj *vm,
+ const char *netdevId,
+ const char *eventName)
{
virDomainDeviceDef dev;
virDomainNetDef *def;
@@ -3634,13 +3635,13 @@ processNetdevStreamDisconnectedEvent(virDomainObj *vm,
*/
if (!devAlias) {
- VIR_WARN("Received NETDEV_STREAM_DISCONNECTED event for unrecognized netdev %s from domain %p %s",
- netdevId, vm, vm->def->name);
+ VIR_WARN("Received %s event for unrecognized netdev %s from domain %p %s",
+ eventName, netdevId, vm, vm->def->name);
return;
}
- VIR_DEBUG("Received NETDEV_STREAM_DISCONNECTED event for device %s from domain %p %s",
- devAlias, vm, vm->def->name);
+ VIR_DEBUG("Received %s event for device %s from domain %p %s",
+ eventName, devAlias, vm, vm->def->name);
if (virDomainObjBeginJob(vm, VIR_JOB_QUERY) < 0)
return;
@@ -3651,28 +3652,28 @@ processNetdevStreamDisconnectedEvent(virDomainObj *vm,
}
if (virDomainDefFindDevice(vm->def, devAlias, &dev, true) < 0) {
- VIR_WARN("NETDEV_STREAM_DISCONNECTED event received for non-existent device %s in domain %s",
- devAlias, vm->def->name);
+ VIR_WARN("%s event received for non-existent device %s in domain %s",
+ eventName, devAlias, vm->def->name);
goto endjob;
}
if (dev.type != VIR_DOMAIN_DEVICE_NET) {
- VIR_WARN("NETDEV_STREAM_DISCONNECTED event received for non-network device %s in domain %s",
- devAlias, vm->def->name);
+ VIR_WARN("%s event received for non-network device %s in domain %s",
+ eventName, devAlias, vm->def->name);
goto endjob;
}
def = dev.data.net;
if (def->backend.type != VIR_DOMAIN_NET_BACKEND_PASST) {
- VIR_DEBUG("ignore NETDEV_STREAM_DISCONNECTED event for non-passt network device %s in domain %s",
- def->info.alias, vm->def->name);
+ VIR_DEBUG("ignore %s event for non-passt network device %s in domain %s",
+ eventName, def->info.alias, vm->def->name);
goto endjob;
}
/* handle the event - restart the passt process with its original
* parameters
*/
- VIR_DEBUG("process NETDEV_STREAM_DISCONNECTED event for network device %s in domain %s",
- def->info.alias, vm->def->name);
+ VIR_DEBUG("process %s event for network device %s in domain %s",
+ eventName, def->info.alias, vm->def->name);
if (qemuPasstStart(vm, def) < 0)
goto endjob;
@@ -3682,6 +3683,14 @@ processNetdevStreamDisconnectedEvent(virDomainObj *vm,
}
+static void
+processNetdevStreamDisconnectedEvent(virDomainObj *vm,
+ const char *netdevId)
+{
+ processNetdevDisconnectedEvent(vm, netdevId, "NETDEV_STREAM_DISCONNECTED");
+}
+
+
static void
processNicRxFilterChangedEvent(virDomainObj *vm,
const char *devAlias)
--
2.49.0

View File

@ -0,0 +1,110 @@
From 0cc716142961427bd257a528ef54b87b3a053ade Mon Sep 17 00:00:00 2001
Message-ID: <0cc716142961427bd257a528ef54b87b3a053ade.1747908718.git.jdenemar@redhat.com>
From: Laine Stump <laine@redhat.com>
Date: Fri, 4 Apr 2025 19:38:28 -0400
Subject: [PATCH] qemu: put vhost-user code that's special for passt in a
helper function
Rather than duplicating these two lines of chr device object setup for
hotplug and domain start, put them in a helper function that's called
from both places. That way when we need to setup *more* stuff specific
to passt+vhostuser, we can just add it in that one place.
Signed-off-by: Laine Stump <laine@redhat.com>
Tested-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 95ff77f2896478e039673bb552affec2c5a5e822)
https://issues.redhat.com/browse/RHEL-80169
Signed-off-by: Laine Stump <laine@redhat.com>
---
src/qemu/qemu_hotplug.c | 7 +------
src/qemu/qemu_passt.c | 19 +++++++++++++++++++
src/qemu/qemu_passt.h | 3 +++
src/qemu/qemu_process.c | 9 ++-------
4 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index c8746f5e22..ff09b58bfe 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -1264,12 +1264,7 @@ qemuDomainAttachNetDevice(virQEMUDriver *driver,
if (net->backend.type == VIR_DOMAIN_NET_BACKEND_PASST) {
- /* vhostuser needs socket path in this location, and when
- * backend is passt, the path is derived from other info,
- * not taken from config.
- */
- g_free(net->data.vhostuser->data.nix.path);
- net->data.vhostuser->data.nix.path = qemuPasstCreateSocketPath(vm, net);
+ qemuPasstPrepareVhostUser(vm, net);
if (qemuPasstStart(vm, net) < 0)
goto cleanup;
diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c
index b9616d1c63..bc495eca1e 100644
--- a/src/qemu/qemu_passt.c
+++ b/src/qemu/qemu_passt.c
@@ -165,6 +165,25 @@ qemuPasstSetupCgroup(virDomainObj *vm,
}
+void
+qemuPasstPrepareVhostUser(virDomainObj *vm,
+ virDomainNetDef *net)
+{
+ /* There are some options on the QEMU commandline for a vhost-user
+ * chr device that are normally configurable, but when it is passt
+ * speaking to the vhost-user device those things are
+ * derived/fixed. This function, which is called prior to
+ * generating the QEMU commandline, sets thos derived/fixed things
+ * in the chr device object.
+ */
+
+ /* The socket path is not user-configurable for passt - it is
+ * derived from other info
+ */
+ g_free(net->data.vhostuser->data.nix.path);
+ net->data.vhostuser->data.nix.path = qemuPasstCreateSocketPath(vm, net);
+}
+
int
qemuPasstStart(virDomainObj *vm,
virDomainNetDef *net)
diff --git a/src/qemu/qemu_passt.h b/src/qemu/qemu_passt.h
index e0b9aaac8d..ea545ccf38 100644
--- a/src/qemu/qemu_passt.h
+++ b/src/qemu/qemu_passt.h
@@ -37,5 +37,8 @@ int qemuPasstSetupCgroup(virDomainObj *vm,
virDomainNetDef *net,
virCgroup *cgroup);
+void qemuPasstPrepareVhostUser(virDomainObj *vm,
+ virDomainNetDef *net);
+
char *qemuPasstCreateSocketPath(virDomainObj *vm,
virDomainNetDef *net);
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 2076ad8208..c1ae324ad4 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -5898,13 +5898,8 @@ qemuProcessPrepareDomainNetwork(virDomainObj *vm)
case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
if (net->backend.type == VIR_DOMAIN_NET_BACKEND_PASST) {
- /* when using the passt backend, the path of the
- * unix socket is always derived from other info
- * *not* manually given in the config, but all the
- * vhostuser code looks for it there.
- */
- g_free(net->data.vhostuser->data.nix.path);
- net->data.vhostuser->data.nix.path = qemuPasstCreateSocketPath(vm, net);
+ /* some extra setup of internal data for passt vhostuser mode */
+ qemuPasstPrepareVhostUser(vm, net);
}
break;
--
2.49.0

View File

@ -0,0 +1,56 @@
From 13ff514007822c650ad0f3006882e2f85aab9b48 Mon Sep 17 00:00:00 2001
Message-ID: <13ff514007822c650ad0f3006882e2f85aab9b48.1747908718.git.jdenemar@redhat.com>
From: Laine Stump <laine@redhat.com>
Date: Fri, 4 Apr 2025 16:48:23 -0400
Subject: [PATCH] qemu: remove nonsensical sanity check in
processNetdevStreamDisconnectedEvent()
By definition QEMU will never send a NETDEV_STREAM_DISCONNECTED event
if it doesn't support the reconnect option for a stream netdev. And
even if, by some comedy of errors, it did send
NETDEV_STREAM_DISCONNECTED in that case, our response to the event
doesn't request anything at all of QEMU (much less something that
would fail if QEMU didn't understand NETDEV_STREAM_DISCONNECTED) - it
just starts a new passt process to replace the one that has been
terminated, so we don't need to check the QEMU capabilities for
QEMU_CAPS_NETDEV_STREAM_RECONNECT.
Signed-off-by: Laine Stump <laine@redhat.com>
Tested-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 51a54dc1c4ecf37d60acee1cb94252e51c5ef627)
https://issues.redhat.com/browse/RHEL-80169
Signed-off-by: Laine Stump <laine@redhat.com>
---
src/qemu/qemu_driver.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 11dbbc1aab..89bb10756e 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -3623,7 +3623,6 @@ processNetdevStreamDisconnectedEvent(virDomainObj *vm,
{
virDomainDeviceDef dev;
virDomainNetDef *def;
- virQEMUCaps *qemuCaps = QEMU_DOMAIN_PRIVATE(vm)->qemuCaps;
const char *devAlias = STRSKIP(netdevId, "host");
/* The event sends us the "netdev-id", but we don't store the
@@ -3669,12 +3668,6 @@ processNetdevStreamDisconnectedEvent(virDomainObj *vm,
goto endjob;
}
- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_NETDEV_STREAM_RECONNECT)) {
- VIR_WARN("ignore NETDEV_STREAM_DISCONNECTED event for passt network device %s in domain %s - QEMU binary does not support reconnect",
- def->info.alias, vm->def->name);
- goto endjob;
- }
-
/* handle the event - restart the passt process with its original
* parameters
*/
--
2.49.0

View File

@ -0,0 +1,224 @@
From 1be043d47792afe408bef01a5c169dcd4e98e782 Mon Sep 17 00:00:00 2001
Message-ID: <1be043d47792afe408bef01a5c169dcd4e98e782.1747908718.git.jdenemar@redhat.com>
From: Laine Stump <laine@redhat.com>
Date: Fri, 4 Apr 2025 17:16:43 -0400
Subject: [PATCH] qemu: respond to NETDEV_VHOST_USER_DISCONNECTED event
This response to this event is identical to NETDEV_STREAM_DISCONNECTED
(start a new passt process to replace the one that just disappeared -
see commitf62ce81b8a5), except that the new passt process will have
"--vhost-user" appended to the commandline. Fortunately that
difference is already handled based on the virDomainNetDef contents,
so we can, in fact, respond to the new event in exactly the same
manner.
Signed-off-by: Laine Stump <laine@redhat.com>
Tested-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit dedf1ada95f046310827194eb8794fa18975b9e7)
Conflicts:
src/qemu/qemu_driver.c:
In context surrounding a chunk, the arguments to
processNicRxFilterChangedEvent() changed upstream (due to upstream
commit 50981052a5f)
https://issues.redhat.com/browse/RHEL-80169
Signed-off-by: Laine Stump <laine@redhat.com>
---
src/qemu/qemu_domain.c | 1 +
src/qemu/qemu_domain.h | 1 +
src/qemu/qemu_driver.c | 11 +++++++++++
src/qemu/qemu_monitor.c | 11 +++++++++++
src/qemu/qemu_monitor.h | 6 ++++++
src/qemu/qemu_monitor_json.c | 16 ++++++++++++++++
src/qemu/qemu_process.c | 18 ++++++++++++++++++
7 files changed, 64 insertions(+)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 4234e4605b..cc47adb724 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -10038,6 +10038,7 @@ qemuProcessEventFree(struct qemuProcessEvent *event)
case QEMU_PROCESS_EVENT_WATCHDOG:
case QEMU_PROCESS_EVENT_DEVICE_DELETED:
case QEMU_PROCESS_EVENT_NETDEV_STREAM_DISCONNECTED:
+ case QEMU_PROCESS_EVENT_NETDEV_VHOST_USER_DISCONNECTED:
case QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED:
case QEMU_PROCESS_EVENT_SERIAL_CHANGED:
case QEMU_PROCESS_EVENT_GUEST_CRASHLOADED:
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 6246988491..63f422bbcb 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -465,6 +465,7 @@ typedef enum {
QEMU_PROCESS_EVENT_GUESTPANIC,
QEMU_PROCESS_EVENT_DEVICE_DELETED,
QEMU_PROCESS_EVENT_NETDEV_STREAM_DISCONNECTED,
+ QEMU_PROCESS_EVENT_NETDEV_VHOST_USER_DISCONNECTED,
QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED,
QEMU_PROCESS_EVENT_SERIAL_CHANGED,
QEMU_PROCESS_EVENT_JOB_STATUS_CHANGE,
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 3373dfb845..b374b1978c 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -3691,6 +3691,14 @@ processNetdevStreamDisconnectedEvent(virDomainObj *vm,
}
+static void
+processNetdevVhostUserDisconnectedEvent(virDomainObj *vm,
+ const char *netdevId)
+{
+ processNetdevDisconnectedEvent(vm, netdevId, "NETDEV_VHOST_USER_DISCONNECTED");
+}
+
+
static void
processNicRxFilterChangedEvent(virDomainObj *vm,
const char *devAlias)
@@ -4089,6 +4097,9 @@ static void qemuProcessEventHandler(void *data, void *opaque)
case QEMU_PROCESS_EVENT_NETDEV_STREAM_DISCONNECTED:
processNetdevStreamDisconnectedEvent(vm, processEvent->data);
break;
+ case QEMU_PROCESS_EVENT_NETDEV_VHOST_USER_DISCONNECTED:
+ processNetdevVhostUserDisconnectedEvent(vm, processEvent->data);
+ break;
case QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED:
processNicRxFilterChangedEvent(vm, processEvent->data);
break;
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 82aa1cbc5f..ed63b7a29b 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -1267,6 +1267,17 @@ qemuMonitorEmitNetdevStreamDisconnected(qemuMonitor *mon,
}
+void
+qemuMonitorEmitNetdevVhostUserDisconnected(qemuMonitor *mon,
+ const char *devAlias)
+{
+ VIR_DEBUG("mon=%p", mon);
+
+ QEMU_MONITOR_CALLBACK(mon, domainNetdevVhostUserDisconnected,
+ mon->vm, devAlias);
+}
+
+
void
qemuMonitorEmitSerialChange(qemuMonitor *mon,
const char *devAlias,
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index 672cd6487e..bcb39409ac 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -255,6 +255,9 @@ typedef void (*qemuMonitorDomainDeviceUnplugErrCallback)(qemuMonitor *mon,
typedef void (*qemuMonitorDomainNetdevStreamDisconnectedCallback)(qemuMonitor *mon,
virDomainObj *vm,
const char *devAlias);
+typedef void (*qemuMonitorDomainNetdevVhostUserDisconnectedCallback)(qemuMonitor *mon,
+ virDomainObj *vm,
+ const char *devAlias);
typedef void (*qemuMonitorDomainNicRxFilterChangedCallback)(qemuMonitor *mon,
virDomainObj *vm,
const char *devAlias);
@@ -403,6 +406,7 @@ struct _qemuMonitorCallbacks {
qemuMonitorDomainMemoryDeviceSizeChange domainMemoryDeviceSizeChange;
qemuMonitorDomainDeviceUnplugErrCallback domainDeviceUnplugError;
qemuMonitorDomainNetdevStreamDisconnectedCallback domainNetdevStreamDisconnected;
+ qemuMonitorDomainNetdevVhostUserDisconnectedCallback domainNetdevVhostUserDisconnected;
};
qemuMonitor *qemuMonitorOpen(virDomainObj *vm,
@@ -490,6 +494,8 @@ void qemuMonitorEmitDeviceUnplugErr(qemuMonitor *mon,
const char *devAlias);
void qemuMonitorEmitNetdevStreamDisconnected(qemuMonitor *mon,
const char *devAlias);
+void qemuMonitorEmitNetdevVhostUserDisconnected(qemuMonitor *mon,
+ const char *devAlias);
void qemuMonitorEmitNicRxFilterChanged(qemuMonitor *mon,
const char *devAlias);
void qemuMonitorEmitSerialChange(qemuMonitor *mon,
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 6f9f495888..be5d3be7e6 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -85,6 +85,7 @@ static void qemuMonitorJSONHandleMemoryFailure(qemuMonitor *mon, virJSONValue *d
static void qemuMonitorJSONHandleMemoryDeviceSizeChange(qemuMonitor *mon, virJSONValue *data);
static void qemuMonitorJSONHandleDeviceUnplugErr(qemuMonitor *mon, virJSONValue *data);
static void qemuMonitorJSONHandleNetdevStreamDisconnected(qemuMonitor *mon, virJSONValue *data);
+static void qemuMonitorJSONHandleNetdevVhostUserDisconnected(qemuMonitor *mon, virJSONValue *data);
typedef struct {
const char *type;
@@ -108,6 +109,7 @@ static qemuEventHandler eventHandlers[] = {
{ "MIGRATION", qemuMonitorJSONHandleMigrationStatus, },
{ "MIGRATION_PASS", qemuMonitorJSONHandleMigrationPass, },
{ "NETDEV_STREAM_DISCONNECTED", qemuMonitorJSONHandleNetdevStreamDisconnected, },
+ { "NETDEV_VHOST_USER_DISCONNECTED", qemuMonitorJSONHandleNetdevVhostUserDisconnected, },
{ "NIC_RX_FILTER_CHANGED", qemuMonitorJSONHandleNicRxFilterChanged, },
{ "PR_MANAGER_STATUS_CHANGED", qemuMonitorJSONHandlePRManagerStatusChanged, },
{ "RDMA_GID_STATUS_CHANGED", qemuMonitorJSONHandleRdmaGidStatusChanged, },
@@ -1044,6 +1046,20 @@ qemuMonitorJSONHandleNetdevStreamDisconnected(qemuMonitor *mon, virJSONValue *da
}
+static void
+qemuMonitorJSONHandleNetdevVhostUserDisconnected(qemuMonitor *mon, virJSONValue *data)
+{
+ const char *name;
+
+ if (!(name = virJSONValueObjectGetString(data, "netdev-id"))) {
+ VIR_WARN("missing device in NETDEV_VHOST_USER_DISCONNECTED event");
+ return;
+ }
+
+ qemuMonitorEmitNetdevVhostUserDisconnected(mon, name);
+}
+
+
static void
qemuMonitorJSONHandleNicRxFilterChanged(qemuMonitor *mon, virJSONValue *data)
{
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index ad7e99750f..2076ad8208 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -1402,6 +1402,23 @@ qemuProcessHandleNetdevStreamDisconnected(qemuMonitor *mon G_GNUC_UNUSED,
}
+static void
+qemuProcessHandleNetdevVhostUserDisconnected(qemuMonitor *mon G_GNUC_UNUSED,
+ virDomainObj *vm,
+ const char *devAlias)
+{
+ virObjectLock(vm);
+
+ VIR_DEBUG("Device %s Netdev vhost-user Disconnected in domain %p %s",
+ devAlias, vm, vm->def->name);
+
+ qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_NETDEV_VHOST_USER_DISCONNECTED,
+ 0, 0, g_strdup(devAlias));
+
+ virObjectUnlock(vm);
+}
+
+
static void
qemuProcessHandleNicRxFilterChanged(qemuMonitor *mon G_GNUC_UNUSED,
virDomainObj *vm,
@@ -1848,6 +1865,7 @@ static qemuMonitorCallbacks monitorCallbacks = {
.domainMemoryDeviceSizeChange = qemuProcessHandleMemoryDeviceSizeChange,
.domainDeviceUnplugError = qemuProcessHandleDeviceUnplugErr,
.domainNetdevStreamDisconnected = qemuProcessHandleNetdevStreamDisconnected,
+ .domainNetdevVhostUserDisconnected = qemuProcessHandleNetdevVhostUserDisconnected,
};
static void
--
2.49.0

View File

@ -0,0 +1,163 @@
From 8c10ceadcb2c32217b90277ee73f1eb990c67cbc Mon Sep 17 00:00:00 2001
Message-ID: <8c10ceadcb2c32217b90277ee73f1eb990c67cbc.1747908717.git.jdenemar@redhat.com>
From: Martin Kletzander <mkletzan@redhat.com>
Date: Tue, 25 Feb 2025 15:23:07 +0100
Subject: [PATCH] qemu_agent: Add qemuAgentGetLoadAvg()
With qemu guest agent 9.3 we are able to get the load averages with a
new command.
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
(cherry picked from commit 1669d91eade46b930ebb44e4b9d398ea8c2064e7)
https://issues.redhat.com/browse/RHEL-88447
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
---
src/qemu/qemu_agent.c | 46 +++++++++++++++++++++++++++++++++++++
src/qemu/qemu_agent.h | 6 +++++
tests/qemuagenttest.c | 53 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 105 insertions(+)
diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
index 43fca86f10..16a6eaa998 100644
--- a/src/qemu/qemu_agent.c
+++ b/src/qemu/qemu_agent.c
@@ -2568,3 +2568,49 @@ int qemuAgentGetDisks(qemuAgent *agent,
g_free(*disks);
return -1;
}
+
+
+int
+qemuAgentGetLoadAvg(qemuAgent *agent,
+ double *load1m,
+ double *load5m,
+ double *load15m,
+ bool report_unsupported)
+{
+ g_autoptr(virJSONValue) cmd = NULL;
+ g_autoptr(virJSONValue) reply = NULL;
+ virJSONValue *data = NULL;
+ int rc;
+
+ if (!(cmd = qemuAgentMakeCommand("guest-get-load", NULL)))
+ return -1;
+
+ if ((rc = qemuAgentCommandFull(agent, cmd, &reply, agent->timeout,
+ report_unsupported)) < 0)
+ return rc;
+
+ if (!(data = virJSONValueObjectGetObject(reply, "return"))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("qemu agent didn't return an array of loads"));
+ return -1;
+ }
+
+#define GET_NUMBER_PARAM(param_) \
+ do { \
+ if (param_ && \
+ virJSONValueObjectGetNumberDouble(data, #param_, param_) < 0) { \
+ virReportError(VIR_ERR_INTERNAL_ERROR, \
+ _("parameter '%1$s' is missing in reply of guest-get-load"), \
+ #param_); \
+ return -1; \
+ } \
+ } while (0)
+
+ GET_NUMBER_PARAM(load1m);
+ GET_NUMBER_PARAM(load5m);
+ GET_NUMBER_PARAM(load15m);
+
+#undef GET_NUMBER_PARAM
+
+ return 0;
+}
diff --git a/src/qemu/qemu_agent.h b/src/qemu/qemu_agent.h
index f98586e8f8..cd17a98d39 100644
--- a/src/qemu/qemu_agent.h
+++ b/src/qemu/qemu_agent.h
@@ -195,3 +195,9 @@ int qemuAgentSSHRemoveAuthorizedKeys(qemuAgent *agent,
int qemuAgentGetDisks(qemuAgent *mon,
qemuAgentDiskInfo ***disks,
bool report_unsupported);
+
+int qemuAgentGetLoadAvg(qemuAgent *agent,
+ double *load1m,
+ double *load5m,
+ double *load15m,
+ bool report_unsupported);
diff --git a/tests/qemuagenttest.c b/tests/qemuagenttest.c
index 3287880241..566571cf11 100644
--- a/tests/qemuagenttest.c
+++ b/tests/qemuagenttest.c
@@ -1356,6 +1356,58 @@ testQemuAgentTimezone(const void *data)
virTypedParamsFree(params, nparams);
return ret;
}
+
+
+static const char testQemuAgentGetLoadAvgResponse[] =
+ "{"
+ " \"return\": {"
+ " \"load15m\": 0.03564453125,"
+ " \"load5m\": 0.064453125,"
+ " \"load1m\": 0.00390625"
+ " }"
+ "}";
+
+static int
+testQemuAgentGetLoadAvg(const void *data)
+{
+ virDomainXMLOption *xmlopt = (virDomainXMLOption *)data;
+ g_autoptr(qemuMonitorTest) test = qemuMonitorTestNewAgent(xmlopt);
+ double load1m = 0;
+ double load5m = 0;
+ double load15m = 0;
+
+ if (!test)
+ return -1;
+
+ if (qemuMonitorTestAddAgentSyncResponse(test) < 0)
+ return -1;
+
+ if (qemuMonitorTestAddItem(test, "guest-get-load",
+ testQemuAgentGetLoadAvgResponse) < 0)
+ return -1;
+
+ if (qemuAgentGetLoadAvg(qemuMonitorTestGetAgent(test),
+ &load1m, &load5m, &load15m, true) < 0)
+ return -1;
+
+#define VALIDATE_LOAD(value_, expected_) \
+ do { \
+ if (value_ != expected_) { \
+ virReportError(VIR_ERR_INTERNAL_ERROR, \
+ "Expected " #value_ " '%.11f', got '%.11f'", \
+ expected_, value_); \
+ return -1; \
+ } \
+ } while (0)
+
+ VALIDATE_LOAD(load1m, 0.00390625);
+ VALIDATE_LOAD(load5m, 0.064453125);
+ VALIDATE_LOAD(load15m, 0.03564453125);
+
+ return 0;
+}
+
+
static int
mymain(void)
{
@@ -1392,6 +1444,7 @@ mymain(void)
DO_TEST(Timezone);
DO_TEST(SSHKeys);
DO_TEST(GetDisks);
+ DO_TEST(GetLoadAvg);
DO_TEST(Timeout); /* Timeout should always be called last */
--
2.49.0

View File

@ -0,0 +1,409 @@
From 6d104057ac63fed07c493e2a73694503ac0ef0f1 Mon Sep 17 00:00:00 2001
Message-ID: <6d104057ac63fed07c493e2a73694503ac0ef0f1.1747908717.git.jdenemar@redhat.com>
From: Michal Privoznik <mprivozn@redhat.com>
Date: Wed, 7 May 2025 14:32:52 +0200
Subject: [PATCH] qemu_capabilities: Fetch caps for virtio-mem-ccw too
While with upstream QEMU it's impossible to have virtio-mem-ccw and not
have virtio-mem-pci, in RHEL the QEMU's build system is patched to make
that possible. But this breaks our assumption when fetching
capabilities.
Well, just do what we are already doing in this situation (e.g.
"virtio-blk-pci"/"virtio-blk-ccw" & virQEMUCapsDevicePropsVirtioBlk, or
"virtio-scsi-pci"/"virtio-net-ccw" & virQEMUCapsDevicePropsVirtioSCSI):
fetch the same set of props for both devices.
Resolves: https://issues.redhat.com/browse/RHEL-87532
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
(cherry picked from commit 6ff8d08777ebbcb9a1e11534c3a3341fbf0343e8)
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Conflicts:
tests/qemucapabilitiesdata/caps_10.0.0_s390x.replies: Context,
becuase v11.3.0-28-g670aae6cda is not backported.
---
src/qemu/qemu_capabilities.c | 4 +
.../caps_10.0.0_s390x.replies | 202 +++++++++++++++---
2 files changed, 182 insertions(+), 24 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 1a9cf72482..b507027667 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -1546,6 +1546,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVhostUserFS[] =
{ "bootindex", QEMU_CAPS_VHOST_USER_FS_BOOTINDEX, NULL },
};
+/* This is used also for QEMU_CAPS_DEVICE_VIRTIO_MEM_CCW */
static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioMemPCI[] = {
{ "prealloc", QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI_PREALLOC, NULL },
{ "dynamic-memslots", QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI_DYNAMIC_MEMSLOTS, NULL },
@@ -1714,6 +1715,9 @@ static virQEMUCapsDeviceTypeProps virQEMUCapsDeviceProps[] = {
{ "virtio-mem-pci", virQEMUCapsDevicePropsVirtioMemPCI,
G_N_ELEMENTS(virQEMUCapsDevicePropsVirtioMemPCI),
QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI },
+ { "virtio-mem-ccw", virQEMUCapsDevicePropsVirtioMemPCI,
+ G_N_ELEMENTS(virQEMUCapsDevicePropsVirtioMemPCI),
+ QEMU_CAPS_DEVICE_VIRTIO_MEM_CCW },
{ "virtio-iommu-pci", virQEMUCapsDevicePropsVirtioIOMMU,
G_N_ELEMENTS(virQEMUCapsDevicePropsVirtioIOMMU),
QEMU_CAPS_DEVICE_VIRTIO_IOMMU_PCI },
diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_s390x.replies b/tests/qemucapabilitiesdata/caps_10.0.0_s390x.replies
index 05b13b2d2b..18f098153d 100644
--- a/tests/qemucapabilitiesdata/caps_10.0.0_s390x.replies
+++ b/tests/qemucapabilitiesdata/caps_10.0.0_s390x.replies
@@ -29500,11 +29500,165 @@
{
"execute": "device-list-properties",
"arguments": {
- "typename": "virtio-iommu-pci"
+ "typename": "virtio-mem-ccw"
},
"id": "libvirt-30"
}
+{
+ "return": [
+ {
+ "name": "dev_id",
+ "description": "Read-only identifier of an I/O device in the channel subsystem, example: fe.1.23ab",
+ "type": "str"
+ },
+ {
+ "name": "devno",
+ "description": "Identifier of an I/O device in the channel subsystem, example: fe.1.23ab",
+ "type": "str"
+ },
+ {
+ "name": "subch_id",
+ "description": "Read-only identifier of an I/O device in the channel subsystem, example: fe.1.23ab",
+ "type": "str"
+ },
+ {
+ "default-value": 2,
+ "name": "max_revision",
+ "type": "uint32"
+ },
+ {
+ "default-value": true,
+ "name": "ioeventfd",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "default-value": 0,
+ "name": "memaddr",
+ "type": "uint64"
+ },
+ {
+ "default-value": true,
+ "name": "indirect_desc",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "default-value": false,
+ "name": "iommu_platform",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "name": "memdev",
+ "type": "link<memory-backend>"
+ },
+ {
+ "default-value": true,
+ "name": "event_idx",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "default-value": true,
+ "name": "x-early-migration",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "default-value": 0,
+ "name": "node",
+ "type": "uint32"
+ },
+ {
+ "name": "requested-size",
+ "type": "size"
+ },
+ {
+ "default-value": true,
+ "name": "any_layout",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "default-value": false,
+ "name": "x-disable-legacy-check",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "default-value": true,
+ "name": "queue_reset",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "default-value": true,
+ "name": "notify_on_empty",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "default-value": false,
+ "name": "packed",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "name": "block-size",
+ "type": "size"
+ },
+ {
+ "default-value": false,
+ "name": "prealloc",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "default-value": true,
+ "name": "use-started",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "default-value": false,
+ "name": "in_order",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "name": "size",
+ "type": "size"
+ },
+ {
+ "default-value": true,
+ "name": "use-disabled-flag",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "default-value": true,
+ "name": "dynamic-memslots",
+ "description": "on/off",
+ "type": "bool"
+ },
+ {
+ "name": "virtio-backend",
+ "type": "child<virtio-mem>"
+ }
+ ],
+ "id": "libvirt-30"
+}
+
+{
+ "execute": "device-list-properties",
+ "arguments": {
+ "typename": "virtio-iommu-pci"
+ },
+ "id": "libvirt-31"
+}
+
{
"return": [
{
@@ -29774,7 +29928,7 @@
"type": "child<virtio-iommu-device>"
}
],
- "id": "libvirt-30"
+ "id": "libvirt-31"
}
{
@@ -29782,7 +29936,7 @@
"arguments": {
"typename": "virtio-blk-ccw"
},
- "id": "libvirt-31"
+ "id": "libvirt-32"
}
{
@@ -30065,7 +30219,7 @@
"type": "bool"
}
],
- "id": "libvirt-31"
+ "id": "libvirt-32"
}
{
@@ -30073,7 +30227,7 @@
"arguments": {
"typename": "memory-backend-file"
},
- "id": "libvirt-32"
+ "id": "libvirt-33"
}
{
@@ -30163,7 +30317,7 @@
"type": "bool"
}
],
- "id": "libvirt-32"
+ "id": "libvirt-33"
}
{
@@ -30171,7 +30325,7 @@
"arguments": {
"typename": "memory-backend-memfd"
},
- "id": "libvirt-33"
+ "id": "libvirt-34"
}
{
@@ -30250,12 +30404,12 @@
"type": "int"
}
],
- "id": "libvirt-33"
+ "id": "libvirt-34"
}
{
"execute": "query-machines",
- "id": "libvirt-34"
+ "id": "libvirt-35"
}
{
@@ -30530,7 +30684,7 @@
"default-ram-id": "s390.ram"
}
],
- "id": "libvirt-34"
+ "id": "libvirt-35"
}
{
@@ -30538,7 +30692,7 @@
"arguments": {
"typename": "none-machine"
},
- "id": "libvirt-35"
+ "id": "libvirt-36"
}
{
@@ -30653,12 +30807,12 @@
"type": "bool"
}
],
- "id": "libvirt-35"
+ "id": "libvirt-36"
}
{
"execute": "query-cpu-definitions",
- "id": "libvirt-36"
+ "id": "libvirt-37"
}
{
@@ -31368,32 +31522,32 @@
"deprecated": false
}
],
- "id": "libvirt-36"
+ "id": "libvirt-37"
}
{
"execute": "query-tpm-models",
- "id": "libvirt-37"
+ "id": "libvirt-38"
}
{
"return": [],
- "id": "libvirt-37"
+ "id": "libvirt-38"
}
{
"execute": "query-tpm-types",
- "id": "libvirt-38"
+ "id": "libvirt-39"
}
{
"return": [],
- "id": "libvirt-38"
+ "id": "libvirt-39"
}
{
"execute": "query-command-line-options",
- "id": "libvirt-39"
+ "id": "libvirt-40"
}
{
@@ -32646,12 +32800,12 @@
"option": "drive"
}
],
- "id": "libvirt-39"
+ "id": "libvirt-40"
}
{
"execute": "query-migrate-capabilities",
- "id": "libvirt-40"
+ "id": "libvirt-41"
}
{
@@ -32745,7 +32899,7 @@
"capability": "mapped-ram"
}
],
- "id": "libvirt-40"
+ "id": "libvirt-41"
}
{
@@ -32756,7 +32910,7 @@
"name": "host"
}
},
- "id": "libvirt-41"
+ "id": "libvirt-42"
}
{
@@ -32828,7 +32982,7 @@
}
}
},
- "id": "libvirt-41"
+ "id": "libvirt-42"
}
{
--
2.49.0

View File

@ -0,0 +1,71 @@
From 4452c8f1b0a9e953615d15d02ada49c1834c72d5 Mon Sep 17 00:00:00 2001
Message-ID: <4452c8f1b0a9e953615d15d02ada49c1834c72d5.1747908717.git.jdenemar@redhat.com>
From: Martin Kletzander <mkletzan@redhat.com>
Date: Tue, 25 Feb 2025 15:22:35 +0100
Subject: [PATCH] virsh: Add support for VIR_DOMAIN_GUEST_INFO_LOAD
Resolves: https://issues.redhat.com/browse/RHEL-71883
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
(cherry picked from commit 71e75ce09203aa2489803426ae368d1693ee925b)
https://issues.redhat.com/browse/RHEL-88447
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
---
docs/manpages/virsh.rst | 8 +++++++-
tools/virsh-domain.c | 6 ++++++
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
index aea920b7a7..2bb1313a48 100644
--- a/docs/manpages/virsh.rst
+++ b/docs/manpages/virsh.rst
@@ -2927,7 +2927,7 @@ Success is always reported in this case.
You can limit the types of information that are returned by specifying one or
more flags. Available information types flags are *--user*, *--os*,
-*--timezone*, *--hostname*, *--filesystem*, *--disk* and *--interface*.
+*--timezone*, *--hostname*, *--filesystem*, *--disk*, *--interface* and *--load*.
If an explicitly requested information type is not supported by the guest agent
at that point, the processes will provide an exit code of 1.
@@ -3006,6 +3006,12 @@ returned:
* ``if.<num>.addr.<num1>.addr`` - the IP address of addr <num1>
* ``if.<num>.addr.<num1>.prefix`` - the prefix of IP address of addr <num1>
+*--load* returns:
+* ``load.1m`` - average load in guest for last 1 minute
+* ``load.5m`` - average load in guest for last 5 minutes
+* ``load.15m`` - average load in guest for last 15 minutes
+
+
guestvcpus
----------
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index e4923284af..0f30a65fd9 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -13066,6 +13066,10 @@ static const vshCmdOptDef opts_guestinfo[] = {
.type = VSH_OT_BOOL,
.help = N_("report interface information"),
},
+ {.name = "load",
+ .type = VSH_OT_BOOL,
+ .help = N_("report load averages information"),
+ },
{.name = NULL}
};
@@ -13093,6 +13097,8 @@ cmdGuestInfo(vshControl *ctl, const vshCmd *cmd)
types |= VIR_DOMAIN_GUEST_INFO_DISKS;
if (vshCommandOptBool(cmd, "interface"))
types |= VIR_DOMAIN_GUEST_INFO_INTERFACES;
+ if (vshCommandOptBool(cmd, "load"))
+ types |= VIR_DOMAIN_GUEST_INFO_LOAD;
if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
return false;
--
2.49.0

View File

@ -0,0 +1,160 @@
From 1d5f1c125cbe567b5586ff661e6b030f7f7f4151 Mon Sep 17 00:00:00 2001
Message-ID: <1d5f1c125cbe567b5586ff661e6b030f7f7f4151.1747908718.git.jdenemar@redhat.com>
From: David Judkovics <djudkovi(a)linux.ibm.com>
Date: Thu, 20 Mar 2025 01:28:24 -0400
Subject: [PATCH] virsh: Introduce new hypervisor-cpu-models command
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Add new virsh command 'hypervisor-cpu-models'. Command pulls from the
existing domcapabilities XML and uses xpath to parse CPU model strings.
By default, only models reported as usable by the hypervisor on the
host system are printed. User may specify "--all" to also print
models which are not supported on the host.
Signed-off-by: David Judkovics <djudkovi@linux.ibm.com>
Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Signed-off-by: Collin Walling <walling@linux.ibm.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
(cherry picked from commit 65eeaf12d0780d20fcd7b76479d892c50f56a78c)
https://issues.redhat.com/browse/RHEL-11435
Signed-off-by: Boris Fiuczynski <bfiuczyn@redhat.com>
---
docs/manpages/virsh.rst | 25 ++++++++++++++
tools/virsh-host.c | 75 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 100 insertions(+)
diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
index 2bb1313a48..4d86caecd6 100644
--- a/docs/manpages/virsh.rst
+++ b/docs/manpages/virsh.rst
@@ -1032,6 +1032,31 @@ listed in the XML description. If *--migratable* is specified, features that
block migration will not be included in the resulting CPU.
+hypervisor-cpu-models
+---------------------
+
+**Syntax:**
+
+::
+
+ hypervisor-cpu-models [--virttype virttype] [--emulator emulator]
+ [--arch arch] [--machine machine] [--all]
+
+Print the list of CPU models known by the hypervisor for the specified architecture.
+It is not guaranteed that a listed CPU will run on the host. To determine CPU
+model compatibility with the host, see ``virsh hypervisor-cpu-baseline`` and
+``virsh hypervisor-cpu-compare``.
+
+The *virttype* option specifies the virtualization type (usable in the 'type'
+attribute of the <domain> top level element from the domain XML). *emulator*
+specifies the path to the emulator, *arch* specifies the CPU architecture, and
+*machine* specifies the machine type.
+
+By default, only the models that are claimed to be "usable" by the hypervisor
+on the host are reported. The option *--all* will report every CPU model known
+to the hypervisor, including ones that are not supported on the hypervisor (e.g.
+newer generation models).
+
DOMAIN COMMANDS
===============
diff --git a/tools/virsh-host.c b/tools/virsh-host.c
index 2fe64e415f..eac782f2d4 100644
--- a/tools/virsh-host.c
+++ b/tools/virsh-host.c
@@ -1751,6 +1751,75 @@ cmdHypervisorCPUBaseline(vshControl *ctl,
}
+/*
+ * "hypervisor-cpu-models" command
+ */
+static const vshCmdInfo info_hypervisor_cpu_models = {
+ .help = N_("Hypervisor reported CPU models"),
+ .desc = N_("Get the CPU models reported by the hypervisor."),
+};
+
+static const vshCmdOptDef opts_hypervisor_cpu_models[] = {
+ {.name = "virttype",
+ .type = VSH_OT_STRING,
+ .completer = virshDomainVirtTypeCompleter,
+ .help = N_("virtualization type (/domain/@type)"),
+ },
+ {.name = "emulator",
+ .type = VSH_OT_STRING,
+ .help = N_("path to emulator binary (/domain/devices/emulator)"),
+ },
+ {.name = "arch",
+ .type = VSH_OT_STRING,
+ .completer = virshArchCompleter,
+ .help = N_("CPU architecture (/domain/os/type/@arch)"),
+ },
+ {.name = "machine",
+ .type = VSH_OT_STRING,
+ .help = N_("machine type (/domain/os/type/@machine)"),
+ },
+ {.name = "all",
+ .type = VSH_OT_BOOL,
+ .help = N_("include all CPU models known to the hypervisor for the architecture")
+ },
+ {.name = NULL}
+};
+
+static bool
+cmdHypervisorCPUModelNames(vshControl *ctl,
+ const vshCmd *cmd)
+{
+ g_autofree char *caps_xml = NULL;
+ const char *virttype = NULL;
+ const char *emulator = NULL;
+ const char *arch = NULL;
+ const char *machine = NULL;
+ const char *xpath = NULL;
+ virshControl *priv = ctl->privData;
+
+ if (vshCommandOptString(ctl, cmd, "virttype", &virttype) < 0 ||
+ vshCommandOptString(ctl, cmd, "emulator", &emulator) < 0 ||
+ vshCommandOptString(ctl, cmd, "arch", &arch) < 0 ||
+ vshCommandOptString(ctl, cmd, "machine", &machine) < 0)
+ return false;
+
+ if (vshCommandOptBool(cmd, "all"))
+ xpath = "//cpu//model[@usable]/text()";
+ else
+ xpath = "//cpu//model[@usable='yes']/text()";
+
+ caps_xml = virConnectGetDomainCapabilities(priv->conn, emulator, arch,
+ machine, virttype, 0);
+
+ if (!caps_xml) {
+ vshError(ctl, "%s", _("failed to get hypervisor CPU model names"));
+ return false;
+ }
+
+ return virshDumpXML(ctl, caps_xml, "domcapabilities", xpath, false);
+}
+
+
const vshCmdDef hostAndHypervisorCmds[] = {
{.name = "allocpages",
.handler = cmdAllocpages,
@@ -1818,6 +1887,12 @@ const vshCmdDef hostAndHypervisorCmds[] = {
.info = &info_hypervisor_cpu_compare,
.flags = 0
},
+ {.name = "hypervisor-cpu-models",
+ .handler = cmdHypervisorCPUModelNames,
+ .opts = opts_hypervisor_cpu_models,
+ .info = &info_hypervisor_cpu_models,
+ .flags = 0
+ },
{.name = "maxvcpus",
.handler = cmdMaxvcpus,
.opts = opts_maxvcpus,
--
2.49.0

View File

@ -289,7 +289,7 @@
Summary: Library providing a simple virtualization API
Name: libvirt
Version: 10.10.0
Release: 10%{?dist}%{?extra_release}
Release: 11%{?dist}%{?extra_release}
License: GPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND OFL-1.1
URL: https://libvirt.org/
@ -419,6 +419,20 @@ Patch119: libvirt-qemu-Validate-virtio-mem-ccw.patch
Patch120: libvirt-qemu-Allow-virtio-mem-on-CCW.patch
Patch121: libvirt-qemuxmlconftest-Introduce-memory-hotplug-virtio-mem-ccw-s390x.xml.patch
Patch122: libvirt-qemu_domain_address-fix-CCW-virtio-mem-hotplug.patch
Patch123: libvirt-Add-load-average-information-type-into-virDomainGetGuestInfo.patch
Patch124: libvirt-qemu_agent-Add-qemuAgentGetLoadAvg.patch
Patch125: libvirt-qemu-Add-support-for-VIR_DOMAIN_GUEST_INFO_LOAD.patch
Patch126: libvirt-virsh-Add-support-for-VIR_DOMAIN_GUEST_INFO_LOAD.patch
Patch127: libvirt-qemu_capabilities-Fetch-caps-for-virtio-mem-ccw-too.patch
Patch128: libvirt-cpu_map-Add-avx10-CPU-features.patch
Patch129: libvirt-cpu_map-Add-GraniteRapids-v2-CPU-model.patch
Patch130: libvirt-cpu_map-Add-sha512-sm3-and-sm4-CPU-features.patch
Patch131: libvirt-virsh-Introduce-new-hypervisor-cpu-models-command.patch
Patch132: libvirt-qemu-remove-nonsensical-sanity-check-in-processNetdevStreamDisconnectedEvent.patch
Patch133: libvirt-qemu-make-processNetDevStreamDisconnectedEvent-reusable.patch
Patch134: libvirt-qemu-respond-to-NETDEV_VHOST_USER_DISCONNECTED-event.patch
Patch135: libvirt-qemu-put-vhost-user-code-that-s-special-for-passt-in-a-helper-function.patch
Patch136: libvirt-qemu-make-passt-vhostuser-reconnect-behave-identically-to-passt-user.patch
Requires: libvirt-daemon = %{version}-%{release}
@ -2744,6 +2758,22 @@ exit 0
%endif
%changelog
* Thu May 22 2025 Jiri Denemark <jdenemar@redhat.com> - 10.10.0-11
- Add load average information type into virDomainGetGuestInfo (RHEL-88447)
- qemu_agent: Add qemuAgentGetLoadAvg() (RHEL-88447)
- qemu: Add support for VIR_DOMAIN_GUEST_INFO_LOAD (RHEL-88447)
- virsh: Add support for VIR_DOMAIN_GUEST_INFO_LOAD (RHEL-88447)
- qemu_capabilities: Fetch caps for virtio-mem-ccw too (RHEL-87532)
- cpu_map: Add avx10* CPU features (RHEL-87796)
- cpu_map: Add GraniteRapids-v2 CPU model (RHEL-87796)
- cpu_map: Add sha512, sm3, and sm4 CPU features (RHEL-87796)
- virsh: Introduce new hypervisor-cpu-models command (RHEL-11435)
- qemu: remove nonsensical sanity check in processNetdevStreamDisconnectedEvent() (RHEL-80169)
- qemu: make processNetDevStreamDisconnectedEvent() reusable (RHEL-80169)
- qemu: respond to NETDEV_VHOST_USER_DISCONNECTED event (RHEL-80169)
- qemu: put vhost-user code that's special for passt in a helper function (RHEL-80169)
- qemu: make passt+vhostuser reconnect behave identically to passt+user (RHEL-80169)
* Thu Apr 17 2025 Jiri Denemark <jdenemar@redhat.com> - 10.10.0-10
- esxConnectListAllDomains: Don't propagate failure to lookup a single domain (RHEL-80606)
- conf: parse interface/source/@dev for all interface types (with backend type='passt') (RHEL-82539)