forked from rpms/libvirt
import libvirt-6.0.0-27.module+el8.3.0+7602+4b93512e
This commit is contained in:
commit
1b746786dc
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
SOURCES/libvirt-6.0.0.tar.xz
|
1
.libvirt.metadata
Normal file
1
.libvirt.metadata
Normal file
@ -0,0 +1 @@
|
||||
9939a559e652d44b27e3404a26bcabe58988e4b4 SOURCES/libvirt-6.0.0.tar.xz
|
@ -0,0 +1,36 @@
|
||||
From a04fcb5b463c90c47705ca0f28e40b73c00b6b72 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <a04fcb5b463c90c47705ca0f28e40b73c00b6b72@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Mon, 22 Feb 2016 12:51:51 +0100
|
||||
Subject: [PATCH] RHEL: Add rhel machine types to qemuDomainMachineNeedsFDC
|
||||
|
||||
RHEL-only.
|
||||
|
||||
pc-q35-rhel7.0.0 and pc-q35-rhel7.1.0 do not need an explicit
|
||||
isa-fdc controller.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1227880
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_domain.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index a6dde15bad..0edf316fff 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -12631,6 +12631,10 @@ qemuDomainMachineNeedsFDC(const char *machine,
|
||||
return false;
|
||||
}
|
||||
|
||||
+ if (STRPREFIX(p, "rhel7.0.0") ||
|
||||
+ STRPREFIX(p, "rhel7.1.0"))
|
||||
+ return false;
|
||||
+
|
||||
return true;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.0
|
||||
|
46
SOURCES/libvirt-RHEL-Fix-virConnectGetMaxVcpus-output.patch
Normal file
46
SOURCES/libvirt-RHEL-Fix-virConnectGetMaxVcpus-output.patch
Normal file
@ -0,0 +1,46 @@
|
||||
From 3e50b013277c7fa05987ceba440f8c4583b6c634 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <3e50b013277c7fa05987ceba440f8c4583b6c634@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Mon, 27 Aug 2018 13:09:38 +0200
|
||||
Subject: [PATCH] RHEL: Fix virConnectGetMaxVcpus output
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1092363
|
||||
|
||||
RHEL-only.
|
||||
|
||||
Ignore the maximum vcpu limit (KVM_CAP_MAX_VCPUS) on RHEL,
|
||||
since RHEL QEMU treats the recommended limit (KVM_CAP_NR_VCPUS)
|
||||
as the maximum, see:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=998708
|
||||
|
||||
(cherry picked from commit 7dff909fa34bdd93ad200dbffe70c0c1ee931925)
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
|
||||
https: //bugzilla.redhat.com/show_bug.cgi?id=1582222
|
||||
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/util/virhostcpu.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
|
||||
index 7f14340f49..256976cce1 100644
|
||||
--- a/src/util/virhostcpu.c
|
||||
+++ b/src/util/virhostcpu.c
|
||||
@@ -1169,6 +1169,11 @@ virHostCPUGetKVMMaxVCPUs(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
+/* Ignore KVM_CAP_MAX_VCPUS on RHEL - the recommended maximum
|
||||
+ * is treated as a hard limit.
|
||||
+ */
|
||||
+# undef KVM_CAP_MAX_VCPUS
|
||||
+
|
||||
# ifdef KVM_CAP_MAX_VCPUS
|
||||
/* at first try KVM_CAP_MAX_VCPUS to determine the maximum count */
|
||||
if ((ret = ioctl(fd, KVM_CHECK_EXTENSION, KVM_CAP_MAX_VCPUS)) > 0)
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,190 @@
|
||||
From 0dd015e1aff1a56a4584824d1a97c9eacabf7f03 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0dd015e1aff1a56a4584824d1a97c9eacabf7f03@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Fri, 27 Mar 2015 12:48:40 +0100
|
||||
Subject: [PATCH] RHEL: Hack around changed Broadwell/Haswell CPUs
|
||||
|
||||
RHEL-only
|
||||
|
||||
Upstream tried to solve the change of Broadwell and Haswell CPUs by
|
||||
removing rtm and hle features from the corresponding CPU models for new
|
||||
machine types. Then they reverted this and introduced new *-noTSX models
|
||||
instead. However, the original fix was backported to RHEL.
|
||||
|
||||
This patch makes sure Broadwell and Haswell will always contain rtm and
|
||||
hle features regardless on RHEL version or machine type used.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1199446
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_command.c | 21 +++++++++++++++++++
|
||||
tests/qemuxml2argvdata/cpu-Haswell.args | 2 +-
|
||||
.../qemuxml2argvdata/cpu-host-model-cmt.args | 2 +-
|
||||
.../cpu-translation.x86_64-4.0.0.args | 4 ++--
|
||||
.../cpu-translation.x86_64-latest.args | 4 ++--
|
||||
tests/qemuxml2argvdata/cpu-tsc-frequency.args | 4 ++--
|
||||
tests/qemuxml2argvdata/q35-acpi-nouefi.args | 2 +-
|
||||
tests/qemuxml2argvdata/q35-acpi-uefi.args | 2 +-
|
||||
tests/qemuxml2argvdata/q35-noacpi-nouefi.args | 2 +-
|
||||
9 files changed, 32 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index 904d2beab5..e10cc7fc74 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -6469,6 +6469,8 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
||||
{
|
||||
size_t i;
|
||||
virCPUDefPtr cpu = def->cpu;
|
||||
+ bool hle = false;
|
||||
+ bool rtm = false;
|
||||
|
||||
switch ((virCPUMode) cpu->mode) {
|
||||
case VIR_CPU_MODE_HOST_PASSTHROUGH:
|
||||
@@ -6524,6 +6526,11 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
||||
virBufferAsprintf(buf, ",vendor=%s", cpu->vendor_id);
|
||||
|
||||
for (i = 0; i < cpu->nfeatures; i++) {
|
||||
+ if (STREQ("rtm", cpu->features[i].name))
|
||||
+ rtm = true;
|
||||
+ if (STREQ("hle", cpu->features[i].name))
|
||||
+ hle = true;
|
||||
+
|
||||
switch ((virCPUFeaturePolicy) cpu->features[i].policy) {
|
||||
case VIR_CPU_FEATURE_FORCE:
|
||||
case VIR_CPU_FEATURE_REQUIRE:
|
||||
@@ -6541,6 +6548,20 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
||||
}
|
||||
}
|
||||
|
||||
+ /* Some versions of qemu-kvm in RHEL provide Broadwell and Haswell CPU
|
||||
+ * models which lack rtm and hle features when used with some machine
|
||||
+ * types. Let's make sure Broadwell and Haswell will always have these
|
||||
+ * features. But only if the features were not explicitly mentioned in
|
||||
+ * the guest CPU definition.
|
||||
+ */
|
||||
+ if (STREQ_NULLABLE(cpu->model, "Broadwell") ||
|
||||
+ STREQ_NULLABLE(cpu->model, "Haswell")) {
|
||||
+ if (!rtm)
|
||||
+ qemuBuildCpuFeature(qemuCaps, buf, "rtm", true);
|
||||
+ if (!hle)
|
||||
+ qemuBuildCpuFeature(qemuCaps, buf, "hle", true);
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-Haswell.args b/tests/qemuxml2argvdata/cpu-Haswell.args
|
||||
index a33b16f7ce..d35de5ea58 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-Haswell.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-Haswell.args
|
||||
@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-name QEMUGuest1 \
|
||||
-S \
|
||||
-machine pc,accel=kvm,usb=off,dump-guest-core=off \
|
||||
--cpu Haswell \
|
||||
+-cpu Haswell,+rtm,+hle \
|
||||
-m 214 \
|
||||
-realtime mlock=off \
|
||||
-smp 6,sockets=6,cores=1,threads=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-host-model-cmt.args b/tests/qemuxml2argvdata/cpu-host-model-cmt.args
|
||||
index 42f969fd62..c8795acb3e 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-host-model-cmt.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-host-model-cmt.args
|
||||
@@ -12,7 +12,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-S \
|
||||
-machine pc,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\
|
||||
-+smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm \
|
||||
++smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+rtm,+hle \
|
||||
-m 214 \
|
||||
-realtime mlock=off \
|
||||
-smp 6,sockets=6,cores=1,threads=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args b/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args
|
||||
index f8e19fca24..08c672fd2c 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args
|
||||
@@ -14,8 +14,8 @@ QEMU_AUDIO_DRV=none \
|
||||
file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-machine pc-i440fx-4.0,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-cpu Haswell,pclmuldq=on,ds_cpl=on,tsc_adjust=on,fxsr_opt=on,lahf_lm=on,\
|
||||
-cmp_legacy=on,nodeid_msr=on,perfctr_core=on,perfctr_nb=on,kvm_pv_eoi=on,\
|
||||
-kvm_pv_unhalt=on \
|
||||
+cmp_legacy=on,nodeid_msr=on,perfctr_core=on,perfctr_nb=on,rtm=on,hle=on,\
|
||||
+kvm_pv_eoi=on,kvm_pv_unhalt=on \
|
||||
-m 214 \
|
||||
-overcommit mem-lock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
|
||||
index 9322b826f4..1dbfc9553b 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
|
||||
@@ -14,8 +14,8 @@ QEMU_AUDIO_DRV=none \
|
||||
file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-machine pc,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-cpu Haswell,pclmulqdq=on,ds-cpl=on,tsc-adjust=on,fxsr-opt=on,lahf-lm=on,\
|
||||
-cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,kvm-pv-eoi=on,\
|
||||
-kvm-pv-unhalt=on \
|
||||
+cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,rtm=on,hle=on,\
|
||||
+kvm-pv-eoi=on,kvm-pv-unhalt=on \
|
||||
-m 214 \
|
||||
-overcommit mem-lock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-tsc-frequency.args b/tests/qemuxml2argvdata/cpu-tsc-frequency.args
|
||||
index 55b72b4404..45a777d468 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-tsc-frequency.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-tsc-frequency.args
|
||||
@@ -12,8 +12,8 @@ QEMU_AUDIO_DRV=none \
|
||||
-S \
|
||||
-machine pc,accel=kvm,usb=off,dump-guest-core=off \
|
||||
-cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\
|
||||
-+smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+invtsc,\
|
||||
-tsc-frequency=3504000000 \
|
||||
++smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+invtsc,+rtm,\
|
||||
++hle,tsc-frequency=3504000000 \
|
||||
-m 214 \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/q35-acpi-nouefi.args b/tests/qemuxml2argvdata/q35-acpi-nouefi.args
|
||||
index 09e06c96ea..aed56fb1fc 100644
|
||||
--- a/tests/qemuxml2argvdata/q35-acpi-nouefi.args
|
||||
+++ b/tests/qemuxml2argvdata/q35-acpi-nouefi.args
|
||||
@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-name guest \
|
||||
-S \
|
||||
-machine q35,accel=tcg,usb=off,dump-guest-core=off \
|
||||
--cpu Haswell \
|
||||
+-cpu Haswell,+rtm,+hle \
|
||||
-m 1024 \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/q35-acpi-uefi.args b/tests/qemuxml2argvdata/q35-acpi-uefi.args
|
||||
index d00fe5bc1d..1f4bfe7f87 100644
|
||||
--- a/tests/qemuxml2argvdata/q35-acpi-uefi.args
|
||||
+++ b/tests/qemuxml2argvdata/q35-acpi-uefi.args
|
||||
@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-name guest \
|
||||
-S \
|
||||
-machine q35,accel=tcg,usb=off,dump-guest-core=off \
|
||||
--cpu Haswell \
|
||||
+-cpu Haswell,+rtm,+hle \
|
||||
-drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,\
|
||||
readonly=on \
|
||||
-drive file=/var/lib/libvirt/qemu/nvram/guest_VARS.fd,if=pflash,format=raw,\
|
||||
diff --git a/tests/qemuxml2argvdata/q35-noacpi-nouefi.args b/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
|
||||
index de34dff1cf..ccea7f91f9 100644
|
||||
--- a/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
|
||||
+++ b/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
|
||||
@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-name guest \
|
||||
-S \
|
||||
-machine q35,accel=tcg,usb=off,dump-guest-core=off \
|
||||
--cpu Haswell \
|
||||
+-cpu Haswell,+rtm,+hle \
|
||||
-m 1024 \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,69 @@
|
||||
From fce502cf5233d800479c2efcf7721ab895db8998 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <fce502cf5233d800479c2efcf7721ab895db8998@dist-git>
|
||||
From: John Ferlan <jferlan@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 20:42:30 -0500
|
||||
Subject: [PATCH] RHEL: qemu: Add ability to set sgio values for hostdev
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1582424
|
||||
|
||||
RHEL-only
|
||||
|
||||
Add necessary checks in order to allow setting sgio values for a scsi
|
||||
host device
|
||||
|
||||
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit f2cf0ae7bc371c75f6c0e79192711f2b1d201b10)
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 15 ++++++++-------
|
||||
1 file changed, 8 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index b62dd1df52..ce7869e6be 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1810,6 +1810,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
virDomainDiskDefPtr disk = NULL;
|
||||
virDomainHostdevDefPtr hostdev = NULL;
|
||||
g_autofree char *sysfs_path = NULL;
|
||||
+ g_autofree char *hostdev_path = NULL;
|
||||
const char *path = NULL;
|
||||
int val = -1;
|
||||
|
||||
@@ -1830,14 +1831,10 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
if (!qemuIsSharedHostdev(hostdev))
|
||||
return 0;
|
||||
|
||||
- if (hostdev->source.subsys.u.scsi.sgio) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("'sgio' is not supported for SCSI "
|
||||
- "generic device yet "));
|
||||
+ if (!(hostdev_path = qemuGetHostdevPath(hostdev)))
|
||||
return -1;
|
||||
- }
|
||||
|
||||
- return 0;
|
||||
+ path = hostdev_path;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
@@ -1846,7 +1843,11 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
return -1;
|
||||
|
||||
/* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0. */
|
||||
- val = (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
|
||||
+ if (dev->type == VIR_DOMAIN_DEVICE_DISK)
|
||||
+ val = (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
|
||||
+ else
|
||||
+ val = (hostdev->source.subsys.u.scsi.sgio ==
|
||||
+ VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
|
||||
|
||||
/* Do not do anything if unpriv_sgio is not supported by the kernel and the
|
||||
* whitelist is enabled. But if requesting unfiltered access, always call
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,67 @@
|
||||
From 5a192657ad4e08fc773fef90c6b07df3620fa1c2 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5a192657ad4e08fc773fef90c6b07df3620fa1c2@dist-git>
|
||||
From: John Ferlan <jferlan@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 20:42:31 -0500
|
||||
Subject: [PATCH] RHEL: qemu: Add check for unpriv sgio for SCSI generic host
|
||||
device
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1582424
|
||||
|
||||
RHEL-only
|
||||
|
||||
Check if the hostdev has set the sgio filtered/unfiltered and handle
|
||||
appropriately.
|
||||
|
||||
This restores functionality removed by upstream commit id 'ce346623'
|
||||
to remove sgio support for the SCSI generic host device.
|
||||
|
||||
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 712005bcf26190dc6fd1fe56283377987909cc4b)
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 20 ++++++++++++++++++--
|
||||
1 file changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index ce7869e6be..2a84972fd9 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1717,13 +1717,29 @@ qemuSharedHostdevAddRemoveInternal(virQEMUDriverPtr driver,
|
||||
{
|
||||
g_autofree char *dev_path = NULL;
|
||||
g_autofree char *key = NULL;
|
||||
+ virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
|
||||
+ virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
|
||||
int ret = -1;
|
||||
|
||||
if (!qemuIsSharedHostdev(hostdev))
|
||||
return 0;
|
||||
|
||||
- if (!(dev_path = qemuGetHostdevPath(hostdev)) ||
|
||||
- !(key = qemuGetSharedDeviceKey(dev_path)))
|
||||
+ if (!(dev_path = qemuGetHostdevPath(hostdev)))
|
||||
+ return -1;
|
||||
+
|
||||
+ if ((ret = qemuCheckUnprivSGIO(driver->sharedDevices, dev_path,
|
||||
+ scsisrc->sgio)) < 0) {
|
||||
+ if (ret == -2) {
|
||||
+ virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
+ _("sgio of shared scsi host device '%s-%u-%u-%llu' "
|
||||
+ "conflicts with other active domains"),
|
||||
+ scsihostsrc->adapter, scsihostsrc->bus,
|
||||
+ scsihostsrc->target, scsihostsrc->unit);
|
||||
+ }
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (!(key = qemuGetSharedDeviceKey(dev_path)))
|
||||
return -1;
|
||||
|
||||
qemuDriverLock(driver);
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,53 @@
|
||||
From e79d54ff8e760ac1a200a37fb05cc9aa758c48d3 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <e79d54ff8e760ac1a200a37fb05cc9aa758c48d3@dist-git>
|
||||
From: John Ferlan <jferlan@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 20:42:33 -0500
|
||||
Subject: [PATCH] RHEL: qemu: Alter qemuSetUnprivSGIO hostdev shareable logic
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1656362 (RHEL8)
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1656360 (RHEL7)
|
||||
|
||||
RHEL-only
|
||||
|
||||
Fix the logic to handle the case where if the <shareable/> element
|
||||
was removed from the domain <hostdev.../>, then we have to reset the
|
||||
SGIO value back to 0. Without this patch the check for not shareable
|
||||
and return 0 would bypass resetting the value back to 0.
|
||||
|
||||
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 7 +++----
|
||||
1 file changed, 3 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index faabc4d49f..590052b035 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1844,9 +1844,6 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
} else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
||||
hostdev = dev->data.hostdev;
|
||||
|
||||
- if (!qemuIsSharedHostdev(hostdev))
|
||||
- return 0;
|
||||
-
|
||||
if (!(hostdev_path = qemuGetHostdevPath(hostdev)))
|
||||
return -1;
|
||||
|
||||
@@ -1863,7 +1860,9 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED) {
|
||||
val = 1;
|
||||
} else {
|
||||
- if (hostdev->source.subsys.u.scsi.sgio ==
|
||||
+ /* Only settable if <shareable/> was present for hostdev */
|
||||
+ if (qemuIsSharedHostdev(hostdev) &&
|
||||
+ hostdev->source.subsys.u.scsi.sgio ==
|
||||
VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
|
||||
val = 1;
|
||||
}
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,60 @@
|
||||
From fa46b5b4d5bb732462d0d5484cc010aa652d821b Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <fa46b5b4d5bb732462d0d5484cc010aa652d821b@dist-git>
|
||||
From: John Ferlan <jferlan@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 20:42:32 -0500
|
||||
Subject: [PATCH] RHEL: qemu: Alter @val usage in qemuSetUnprivSGIO
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1656362 (RHEL8)
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1656360 (RHEL7)
|
||||
|
||||
RHEL-only
|
||||
|
||||
Rather than initializing to -1 and then setting to the result
|
||||
of a boolean check (either 0 or 1), let's just initialize @val
|
||||
to 0 and then only change to 1 if conditions are "right".
|
||||
|
||||
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 15 +++++++++------
|
||||
1 file changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index 2a84972fd9..faabc4d49f 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1828,7 +1828,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
g_autofree char *sysfs_path = NULL;
|
||||
g_autofree char *hostdev_path = NULL;
|
||||
const char *path = NULL;
|
||||
- int val = -1;
|
||||
+ int val = 0;
|
||||
|
||||
/* "sgio" is only valid for block disk; cdrom
|
||||
* and floopy disk can have empty source.
|
||||
@@ -1859,11 +1859,14 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
return -1;
|
||||
|
||||
/* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0. */
|
||||
- if (dev->type == VIR_DOMAIN_DEVICE_DISK)
|
||||
- val = (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
|
||||
- else
|
||||
- val = (hostdev->source.subsys.u.scsi.sgio ==
|
||||
- VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
|
||||
+ if (dev->type == VIR_DOMAIN_DEVICE_DISK &&
|
||||
+ disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED) {
|
||||
+ val = 1;
|
||||
+ } else {
|
||||
+ if (hostdev->source.subsys.u.scsi.sgio ==
|
||||
+ VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
|
||||
+ val = 1;
|
||||
+ }
|
||||
|
||||
/* Do not do anything if unpriv_sgio is not supported by the kernel and the
|
||||
* whitelist is enabled. But if requesting unfiltered access, always call
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,45 @@
|
||||
From 163740bff28c6f1a82663bc652f2cd5df39e4276 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <163740bff28c6f1a82663bc652f2cd5df39e4276@dist-git>
|
||||
From: John Ferlan <jferlan@redhat.com>
|
||||
Date: Fri, 25 Jan 2019 12:19:12 -0500
|
||||
Subject: [PATCH] RHEL: qemu: Fix crash trying to use iSCSI hostdev
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1669424
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1669966
|
||||
|
||||
RHEL-only
|
||||
|
||||
Commit 861a1a4d2 moved the qemuIsSharedHostdev filter in the
|
||||
HOSTDEV half of the logic to allow calling qemuGetHostdevPath;
|
||||
however, that neglected to check whether the SCSI hostdev was
|
||||
using the iSCSI protocol which has a different overlayed struct
|
||||
format (u.iscsi vs. u.host) resulting in attempted access of
|
||||
u.host when calling virSCSIDeviceGetDevName.
|
||||
|
||||
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index 0674292fab..3d2f0e7bbb 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1844,6 +1844,10 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
} else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
||||
hostdev = dev->data.hostdev;
|
||||
|
||||
+ if (hostdev->source.subsys.u.scsi.protocol ==
|
||||
+ VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
|
||||
+ return 0;
|
||||
+
|
||||
if (!(hostdev_path = qemuGetHostdevPath(hostdev)))
|
||||
return -1;
|
||||
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,59 @@
|
||||
From f6a05ac3cb33c473de8ed49b53d22910fc0140df Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f6a05ac3cb33c473de8ed49b53d22910fc0140df@dist-git>
|
||||
From: John Ferlan <jferlan@redhat.com>
|
||||
Date: Wed, 16 Jan 2019 15:54:31 -0500
|
||||
Subject: [PATCH] RHEL: qemu: Fix logic error in qemuSetUnprivSGIO
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1666605
|
||||
|
||||
RHEL-only
|
||||
|
||||
Commit c0f26a13c6 had a logic error with using both DISK and
|
||||
sgio which resulted in a DISK that didn't have sgio set falling
|
||||
into the else clause and trying to deref a NULL @hostdev resulting
|
||||
in a libvirtd crash:
|
||||
|
||||
Thread 1 (Thread 0x7ffbc6353700 (LWP 12642)):
|
||||
0 0x00007ffb958e7d7a in qemuSetUnprivSGIO
|
||||
1 0x00007ffb958d9d92 in qemuDomainAttachDeviceDiskLive
|
||||
2 0x00007ffb9594fce8 in qemuDomainAttachDeviceFlags
|
||||
3 0x00007ffbde399d71 in virDomainAttachDevice
|
||||
4 0x0000563b73ded4b2 in remoteDispatchDomainAttachDeviceHelper
|
||||
|
||||
for hotplug of XML:
|
||||
|
||||
<disk device="lun" type="block">
|
||||
<source dev="/dev/sdb"/>
|
||||
<driver name="qemu" type="raw"/>
|
||||
<target bus="scsi" dev="sdb"/>
|
||||
</disk>
|
||||
|
||||
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index 590052b035..0674292fab 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1856,9 +1856,9 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
return -1;
|
||||
|
||||
/* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0. */
|
||||
- if (dev->type == VIR_DOMAIN_DEVICE_DISK &&
|
||||
- disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED) {
|
||||
- val = 1;
|
||||
+ if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||
+ if (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
|
||||
+ val = 1;
|
||||
} else {
|
||||
/* Only settable if <shareable/> was present for hostdev */
|
||||
if (qemuIsSharedHostdev(hostdev) &&
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,42 @@
|
||||
From ef5a82d50464478a302cb59804d03e4a3dada83e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <ef5a82d50464478a302cb59804d03e4a3dada83e@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Fri, 6 Mar 2020 15:52:26 +0100
|
||||
Subject: [PATCH] RHEL: qemuCheckUnprivSGIO: use @sysfs_path to get unpriv_sgio
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Downstream commit 65f4ff0e2c9a968b7ec65c8d751d4055cc212628
|
||||
RHEL: qemuSetUnprivSGIO: Actually use calculated
|
||||
@sysfs_path to set unpriv_sgio
|
||||
removed the device_path -> sysfs_path conversion from
|
||||
both virGetDeviceUnprivSGIO and virSetDeviceUnprivSGIO,
|
||||
but only adjusted one of the callers.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1808400
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Message-Id: <20200306145226.1610708-7-abologna@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index b61d7e59fa..6a22d78ac6 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1430,7 +1430,7 @@ qemuCheckUnprivSGIO(virHashTablePtr sharedDevices,
|
||||
if (!(virHashLookup(sharedDevices, key)))
|
||||
return 0;
|
||||
|
||||
- if (virGetDeviceUnprivSGIO(device_path, &val) < 0)
|
||||
+ if (virGetDeviceUnprivSGIO(sysfs_path, &val) < 0)
|
||||
return -1;
|
||||
|
||||
/* Error message on failure needs to be handled in caller
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,170 @@
|
||||
From 717423e7a452b0715e95b492b15dc08983677d12 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <717423e7a452b0715e95b492b15dc08983677d12@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 6 Mar 2020 15:52:25 +0100
|
||||
Subject: [PATCH] RHEL: qemuSetUnprivSGIO: Actually use calculated @sysfs_path
|
||||
to set unpriv_sgio
|
||||
|
||||
In previous commits I've attempted to make qemuSetUnprivSGIO()
|
||||
construct a generic enough path for SCSI devices to set
|
||||
unpriv_sgio. However, virSetDeviceUnprivSGIO() does not care
|
||||
about that - it constructs the path on it's own again. This is
|
||||
suboptimal in either case - we already have the path constructed.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1808390
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Message-Id: <20200306145226.1610708-6-abologna@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 8 +++-----
|
||||
src/util/virutil.c | 24 ++++++------------------
|
||||
src/util/virutil.h | 2 --
|
||||
3 files changed, 9 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index 6d6feb97cd..b61d7e59fa 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1430,7 +1430,7 @@ qemuCheckUnprivSGIO(virHashTablePtr sharedDevices,
|
||||
if (!(virHashLookup(sharedDevices, key)))
|
||||
return 0;
|
||||
|
||||
- if (virGetDeviceUnprivSGIO(device_path, NULL, &val) < 0)
|
||||
+ if (virGetDeviceUnprivSGIO(device_path, &val) < 0)
|
||||
return -1;
|
||||
|
||||
/* Error message on failure needs to be handled in caller
|
||||
@@ -1789,7 +1789,6 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
virDomainDiskDefPtr disk = NULL;
|
||||
virDomainHostdevDefPtr hostdev = NULL;
|
||||
g_autofree char *sysfs_path = NULL;
|
||||
- const char *path = NULL;
|
||||
int val = 0;
|
||||
|
||||
/* "sgio" is only valid for block disk; cdrom
|
||||
@@ -1797,13 +1796,12 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
*/
|
||||
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||
disk = dev->data.disk;
|
||||
+ const char *path = virDomainDiskGetSource(disk);
|
||||
|
||||
if (disk->device != VIR_DOMAIN_DISK_DEVICE_LUN ||
|
||||
!virStorageSourceIsBlockLocal(disk->src))
|
||||
return 0;
|
||||
|
||||
- path = virDomainDiskGetSource(disk);
|
||||
-
|
||||
if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, NULL)))
|
||||
return -1;
|
||||
|
||||
@@ -1843,7 +1841,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
* virSetDeviceUnprivSGIO, to report an error for unsupported unpriv_sgio.
|
||||
*/
|
||||
if ((virFileExists(sysfs_path) || val == 1) &&
|
||||
- virSetDeviceUnprivSGIO(path, NULL, val) < 0)
|
||||
+ virSetDeviceUnprivSGIO(sysfs_path, val) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
diff --git a/src/util/virutil.c b/src/util/virutil.c
|
||||
index f142951acf..4198473fce 100644
|
||||
--- a/src/util/virutil.c
|
||||
+++ b/src/util/virutil.c
|
||||
@@ -1421,18 +1421,13 @@ virGetUnprivSGIOSysfsPath(const char *path,
|
||||
|
||||
int
|
||||
virSetDeviceUnprivSGIO(const char *path,
|
||||
- const char *sysfs_dir,
|
||||
int unpriv_sgio)
|
||||
{
|
||||
- char *sysfs_path = NULL;
|
||||
char *val = NULL;
|
||||
int ret = -1;
|
||||
int rc;
|
||||
|
||||
- if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, sysfs_dir)))
|
||||
- return -1;
|
||||
-
|
||||
- if (!virFileExists(sysfs_path)) {
|
||||
+ if (!virFileExists(path)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("unpriv_sgio is not supported by this kernel"));
|
||||
goto cleanup;
|
||||
@@ -1440,38 +1435,32 @@ virSetDeviceUnprivSGIO(const char *path,
|
||||
|
||||
val = g_strdup_printf("%d", unpriv_sgio);
|
||||
|
||||
- if ((rc = virFileWriteStr(sysfs_path, val, 0)) < 0) {
|
||||
- virReportSystemError(-rc, _("failed to set %s"), sysfs_path);
|
||||
+ if ((rc = virFileWriteStr(path, val, 0)) < 0) {
|
||||
+ virReportSystemError(-rc, _("failed to set %s"), path);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
- VIR_FREE(sysfs_path);
|
||||
VIR_FREE(val);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
virGetDeviceUnprivSGIO(const char *path,
|
||||
- const char *sysfs_dir,
|
||||
int *unpriv_sgio)
|
||||
{
|
||||
- char *sysfs_path = NULL;
|
||||
char *buf = NULL;
|
||||
char *tmp = NULL;
|
||||
int ret = -1;
|
||||
|
||||
- if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, sysfs_dir)))
|
||||
- return -1;
|
||||
-
|
||||
- if (!virFileExists(sysfs_path)) {
|
||||
+ if (!virFileExists(path)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("unpriv_sgio is not supported by this kernel"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- if (virFileReadAll(sysfs_path, 1024, &buf) < 0)
|
||||
+ if (virFileReadAll(path, 1024, &buf) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if ((tmp = strchr(buf, '\n')))
|
||||
@@ -1479,13 +1468,12 @@ virGetDeviceUnprivSGIO(const char *path,
|
||||
|
||||
if (virStrToLong_i(buf, NULL, 10, unpriv_sgio) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- _("failed to parse value of %s"), sysfs_path);
|
||||
+ _("failed to parse value of %s"), path);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
- VIR_FREE(sysfs_path);
|
||||
VIR_FREE(buf);
|
||||
return ret;
|
||||
}
|
||||
diff --git a/src/util/virutil.h b/src/util/virutil.h
|
||||
index 1a6ae1787a..a2530e21b5 100644
|
||||
--- a/src/util/virutil.h
|
||||
+++ b/src/util/virutil.h
|
||||
@@ -124,10 +124,8 @@ int virGetDeviceID(const char *path,
|
||||
int *maj,
|
||||
int *min);
|
||||
int virSetDeviceUnprivSGIO(const char *path,
|
||||
- const char *sysfs_dir,
|
||||
int unpriv_sgio);
|
||||
int virGetDeviceUnprivSGIO(const char *path,
|
||||
- const char *sysfs_dir,
|
||||
int *unpriv_sgio);
|
||||
char *virGetUnprivSGIOSysfsPath(const char *path,
|
||||
const char *sysfs_dir);
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,228 @@
|
||||
From f66beef45382be2aed6d021a409e90f8114c8671 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f66beef45382be2aed6d021a409e90f8114c8671@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 6 Mar 2020 15:52:21 +0100
|
||||
Subject: [PATCH] RHEL: virscsi: Check device type before getting it's /dev
|
||||
node name
|
||||
|
||||
Not all SCSI devices are block devices, therefore
|
||||
/sys/bus/scsi/devices/X:X:X:X/block/ directory does not always
|
||||
exist. Check if the SCSI device is a block device beforehand.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1808390
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Message-Id: <20200306145226.1610708-2-abologna@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/util/virscsi.c | 146 ++++++++++++++++++++++++++++++---
|
||||
tests/virscsidata/0-0-0-0/type | 1 +
|
||||
tests/virscsidata/1-0-0-0/type | 1 +
|
||||
3 files changed, 137 insertions(+), 11 deletions(-)
|
||||
create mode 100644 tests/virscsidata/0-0-0-0/type
|
||||
create mode 100644 tests/virscsidata/1-0-0-0/type
|
||||
|
||||
diff --git a/src/util/virscsi.c b/src/util/virscsi.c
|
||||
index 06659c45c7..c40857977f 100644
|
||||
--- a/src/util/virscsi.c
|
||||
+++ b/src/util/virscsi.c
|
||||
@@ -50,6 +50,32 @@ struct _virUsedByInfo {
|
||||
typedef struct _virUsedByInfo virUsedByInfo;
|
||||
typedef virUsedByInfo *virUsedByInfoPtr;
|
||||
|
||||
+
|
||||
+/* Keep in sync with scsi/scsi_proto.h */
|
||||
+typedef enum {
|
||||
+ VIR_SCSI_DEVICE_TYPE_NONE = -1,
|
||||
+ VIR_SCSI_DEVICE_TYPE_DISK = 0x00,
|
||||
+ VIR_SCSI_DEVICE_TYPE_TAPE = 0x01,
|
||||
+ VIR_SCSI_DEVICE_TYPE_PRINTER = 0x02,
|
||||
+ VIR_SCSI_DEVICE_TYPE_PROCESSOR = 0x03,
|
||||
+ VIR_SCSI_DEVICE_TYPE_WORM = 0x04,
|
||||
+ VIR_SCSI_DEVICE_TYPE_ROM = 0x05,
|
||||
+ VIR_SCSI_DEVICE_TYPE_SCANNER = 0x06,
|
||||
+ VIR_SCSI_DEVICE_TYPE_MOD = 0x07,
|
||||
+ VIR_SCSI_DEVICE_TYPE_MEDIUM_CHANGER = 0x08,
|
||||
+ VIR_SCSI_DEVICE_TYPE_COMM = 0x09,
|
||||
+ VIR_SCSI_DEVICE_TYPE_RAID = 0x0c,
|
||||
+ VIR_SCSI_DEVICE_TYPE_ENCLOSURE = 0x0d,
|
||||
+ VIR_SCSI_DEVICE_TYPE_RBC = 0x0e,
|
||||
+ VIR_SCSI_DEVICE_TYPE_OSD = 0x11,
|
||||
+ VIR_SCSI_DEVICE_TYPE_ZBC = 0x14,
|
||||
+ VIR_SCSI_DEVICE_TYPE_WLUN = 0x1e,
|
||||
+ VIR_SCSI_DEVICE_TYPE_NO_LUN = 0x7f,
|
||||
+
|
||||
+ VIR_SCSI_DEVICE_TYPE_LAST,
|
||||
+} virSCSIDeviceType;
|
||||
+
|
||||
+
|
||||
struct _virSCSIDevice {
|
||||
unsigned int adapter;
|
||||
unsigned int bus;
|
||||
@@ -134,6 +160,84 @@ virSCSIDeviceGetSgName(const char *sysfs_prefix,
|
||||
return sg;
|
||||
}
|
||||
|
||||
+
|
||||
+static int
|
||||
+virSCSIDeviceGetType(const char *prefix,
|
||||
+ unsigned int adapter,
|
||||
+ unsigned int bus,
|
||||
+ unsigned int target,
|
||||
+ unsigned long long unit,
|
||||
+ virSCSIDeviceType *type)
|
||||
+{
|
||||
+ int intType;
|
||||
+
|
||||
+ if (virFileReadValueInt(&intType,
|
||||
+ "%s/%d:%u:%u:%llu/type",
|
||||
+ prefix, adapter, bus, target, unit) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ switch (intType) {
|
||||
+ case VIR_SCSI_DEVICE_TYPE_DISK:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_TAPE:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_PRINTER:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_PROCESSOR:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_WORM:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_ROM:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_SCANNER:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_MOD:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_MEDIUM_CHANGER:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_COMM:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_RAID:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_ENCLOSURE:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_RBC:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_OSD:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_ZBC:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_WLUN:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_NO_LUN:
|
||||
+ *type = intType;
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("unknown SCSI device type: %x"),
|
||||
+ intType);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static char *
|
||||
+virSCSIDeviceGetDevNameBlock(const char *prefix,
|
||||
+ unsigned int adapter,
|
||||
+ unsigned int bus,
|
||||
+ unsigned int target,
|
||||
+ unsigned long long unit)
|
||||
+{
|
||||
+ DIR *dir = NULL;
|
||||
+ struct dirent *entry;
|
||||
+ g_autofree char *path = NULL;
|
||||
+ char *name = NULL;
|
||||
+
|
||||
+ path = g_strdup_printf("%s/%d:%u:%u:%llu/block",
|
||||
+ prefix, adapter, bus, target, unit);
|
||||
+
|
||||
+ if (virDirOpen(&dir, path) < 0)
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ while (virDirRead(dir, &entry, path) > 0) {
|
||||
+ name = g_strdup(entry->d_name);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ cleanup:
|
||||
+ VIR_DIR_CLOSE(dir);
|
||||
+
|
||||
+ return name;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/* Returns device name (e.g. "sdc") on success, or NULL
|
||||
* on failure.
|
||||
*/
|
||||
@@ -144,32 +248,52 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
|
||||
unsigned int target,
|
||||
unsigned long long unit)
|
||||
{
|
||||
- DIR *dir = NULL;
|
||||
- struct dirent *entry;
|
||||
- g_autofree char *path = NULL;
|
||||
char *name = NULL;
|
||||
unsigned int adapter_id;
|
||||
+ virSCSIDeviceType type;
|
||||
const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SCSI_DEVICES;
|
||||
|
||||
if (virSCSIDeviceGetAdapterId(adapter, &adapter_id) < 0)
|
||||
return NULL;
|
||||
|
||||
- path = g_strdup_printf("%s/%d:%u:%u:%llu/block", prefix, adapter_id, bus,
|
||||
- target, unit);
|
||||
+ if (virSCSIDeviceGetType(prefix, adapter_id,
|
||||
+ bus, target, unit, &type) < 0)
|
||||
+ return NULL;
|
||||
|
||||
- if (virDirOpen(&dir, path) < 0)
|
||||
- goto cleanup;
|
||||
+ switch (type) {
|
||||
+ case VIR_SCSI_DEVICE_TYPE_DISK:
|
||||
+ name = virSCSIDeviceGetDevNameBlock(prefix, adapter_id, bus, target, unit);
|
||||
+ break;
|
||||
|
||||
- while (virDirRead(dir, &entry, path) > 0) {
|
||||
- name = g_strdup(entry->d_name);
|
||||
+ case VIR_SCSI_DEVICE_TYPE_TAPE:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_PRINTER:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_PROCESSOR:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_WORM:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_ROM:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_SCANNER:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_MOD:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_MEDIUM_CHANGER:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_COMM:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_RAID:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_ENCLOSURE:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_RBC:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_OSD:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_ZBC:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_WLUN:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_NO_LUN:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_NONE:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_LAST:
|
||||
+ default:
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("unsupported SCSI device type: %x"),
|
||||
+ type);
|
||||
break;
|
||||
}
|
||||
|
||||
- cleanup:
|
||||
- VIR_DIR_CLOSE(dir);
|
||||
return name;
|
||||
}
|
||||
|
||||
+
|
||||
virSCSIDevicePtr
|
||||
virSCSIDeviceNew(const char *sysfs_prefix,
|
||||
const char *adapter,
|
||||
diff --git a/tests/virscsidata/0-0-0-0/type b/tests/virscsidata/0-0-0-0/type
|
||||
new file mode 100644
|
||||
index 0000000000..573541ac97
|
||||
--- /dev/null
|
||||
+++ b/tests/virscsidata/0-0-0-0/type
|
||||
@@ -0,0 +1 @@
|
||||
+0
|
||||
diff --git a/tests/virscsidata/1-0-0-0/type b/tests/virscsidata/1-0-0-0/type
|
||||
new file mode 100644
|
||||
index 0000000000..573541ac97
|
||||
--- /dev/null
|
||||
+++ b/tests/virscsidata/1-0-0-0/type
|
||||
@@ -0,0 +1 @@
|
||||
+0
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,137 @@
|
||||
From c9fc757c867d197c17350b6a9cabc63cc08105d2 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <c9fc757c867d197c17350b6a9cabc63cc08105d2@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 6 Mar 2020 15:52:23 +0100
|
||||
Subject: [PATCH] RHEL: virscsi: Introduce and use
|
||||
virSCSIDeviceGetUnprivSGIOSysfsPath()
|
||||
|
||||
When constructing a path to the 'unpriv_sgio' file of given SCSI
|
||||
device we don't need to go through /dev/* and major() + minor()
|
||||
path. The generated path points to
|
||||
/sys/dev/block/MAJ:MIN/queue/unpriv_sgio which is wrong if the
|
||||
SCSI device in question is not a block device. We can generate a
|
||||
different path: /sys/bus/scsi/devices/X:X:X:X/unpriv_sgio where
|
||||
the file is directly accessible regardless of the SCSI device
|
||||
type.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1808390
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Message-Id: <20200306145226.1610708-4-abologna@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/libvirt_private.syms | 1 +
|
||||
src/qemu/qemu_conf.c | 18 +++++++++++-------
|
||||
src/util/virscsi.c | 18 ++++++++++++++++++
|
||||
src/util/virscsi.h | 5 +++++
|
||||
4 files changed, 35 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index 5dc99e03cf..1f97879faa 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -2959,6 +2959,7 @@ virSCSIDeviceGetSgName;
|
||||
virSCSIDeviceGetShareable;
|
||||
virSCSIDeviceGetTarget;
|
||||
virSCSIDeviceGetUnit;
|
||||
+virSCSIDeviceGetUnprivSGIOSysfsPath;
|
||||
virSCSIDeviceIsAvailable;
|
||||
virSCSIDeviceListAdd;
|
||||
virSCSIDeviceListCount;
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index 7aaf2862a4..6d6feb97cd 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1789,7 +1789,6 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
virDomainDiskDefPtr disk = NULL;
|
||||
virDomainHostdevDefPtr hostdev = NULL;
|
||||
g_autofree char *sysfs_path = NULL;
|
||||
- g_autofree char *hostdev_path = NULL;
|
||||
const char *path = NULL;
|
||||
int val = 0;
|
||||
|
||||
@@ -1804,24 +1803,29 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
return 0;
|
||||
|
||||
path = virDomainDiskGetSource(disk);
|
||||
+
|
||||
+ if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, NULL)))
|
||||
+ return -1;
|
||||
+
|
||||
} else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
||||
hostdev = dev->data.hostdev;
|
||||
+ virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
|
||||
+ virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
|
||||
|
||||
if (hostdev->source.subsys.u.scsi.protocol ==
|
||||
VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
|
||||
return 0;
|
||||
|
||||
- if (!(hostdev_path = qemuGetHostdevPath(hostdev)))
|
||||
+ if (!(sysfs_path = virSCSIDeviceGetUnprivSGIOSysfsPath(NULL,
|
||||
+ scsihostsrc->adapter,
|
||||
+ scsihostsrc->bus,
|
||||
+ scsihostsrc->target,
|
||||
+ scsihostsrc->unit)))
|
||||
return -1;
|
||||
-
|
||||
- path = hostdev_path;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
- if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, NULL)))
|
||||
- return -1;
|
||||
-
|
||||
/* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0. */
|
||||
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||
if (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
|
||||
diff --git a/src/util/virscsi.c b/src/util/virscsi.c
|
||||
index 57958c06ea..1bba4051b6 100644
|
||||
--- a/src/util/virscsi.c
|
||||
+++ b/src/util/virscsi.c
|
||||
@@ -322,6 +322,24 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
|
||||
}
|
||||
|
||||
|
||||
+char *
|
||||
+virSCSIDeviceGetUnprivSGIOSysfsPath(const char *sysfs_prefix,
|
||||
+ const char *adapter,
|
||||
+ unsigned int bus,
|
||||
+ unsigned int target,
|
||||
+ unsigned long long unit)
|
||||
+{
|
||||
+ unsigned int adapter_id;
|
||||
+ const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SCSI_DEVICES;
|
||||
+
|
||||
+ if (virSCSIDeviceGetAdapterId(adapter, &adapter_id) < 0)
|
||||
+ return NULL;
|
||||
+
|
||||
+ return g_strdup_printf("%s/%d:%u:%u:%llu/unpriv_sgio",
|
||||
+ prefix, adapter_id, bus, target, unit);
|
||||
+}
|
||||
+
|
||||
+
|
||||
virSCSIDevicePtr
|
||||
virSCSIDeviceNew(const char *sysfs_prefix,
|
||||
const char *adapter,
|
||||
diff --git a/src/util/virscsi.h b/src/util/virscsi.h
|
||||
index 51627e0c05..c040d76716 100644
|
||||
--- a/src/util/virscsi.h
|
||||
+++ b/src/util/virscsi.h
|
||||
@@ -42,6 +42,11 @@ char *virSCSIDeviceGetDevName(const char *sysfs_prefix,
|
||||
unsigned int bus,
|
||||
unsigned int target,
|
||||
unsigned long long unit);
|
||||
+char *virSCSIDeviceGetUnprivSGIOSysfsPath(const char *sysfs_prefix,
|
||||
+ const char *adapter,
|
||||
+ unsigned int bus,
|
||||
+ unsigned int target,
|
||||
+ unsigned long long unit);
|
||||
|
||||
virSCSIDevicePtr virSCSIDeviceNew(const char *sysfs_prefix,
|
||||
const char *adapter,
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,202 @@
|
||||
From c481bcacd1f515d2e93036dc452a25e9ff06f7ae Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <c481bcacd1f515d2e93036dc452a25e9ff06f7ae@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 6 Mar 2020 15:52:22 +0100
|
||||
Subject: [PATCH] RHEL: virscsi: Support TAPEs in virSCSIDeviceGetDevName()
|
||||
|
||||
If the SCSI device we want to get /dev node name for is TAPE
|
||||
device we need to look at 'tape' symlink in the sysfs dir
|
||||
corresponding to the device.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1808390
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Message-Id: <20200306145226.1610708-3-abologna@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/util/virscsi.c | 28 +++++++++++++++
|
||||
tests/virscsidata/2-0-0-0/model | 1 +
|
||||
tests/virscsidata/2-0-0-0/scsi_tape/st0/dev | 1 +
|
||||
tests/virscsidata/2-0-0-0/sg3/dev | 1 +
|
||||
tests/virscsidata/2-0-0-0/tape | 1 +
|
||||
tests/virscsidata/2-0-0-0/type | 1 +
|
||||
tests/virscsidata/2-0-0-0/vendor | 1 +
|
||||
tests/virscsidata/sg3 | 0
|
||||
tests/virscsitest.c | 38 ++++++++++++++++++---
|
||||
9 files changed, 67 insertions(+), 5 deletions(-)
|
||||
create mode 100644 tests/virscsidata/2-0-0-0/model
|
||||
create mode 100644 tests/virscsidata/2-0-0-0/scsi_tape/st0/dev
|
||||
create mode 100644 tests/virscsidata/2-0-0-0/sg3/dev
|
||||
create mode 120000 tests/virscsidata/2-0-0-0/tape
|
||||
create mode 100644 tests/virscsidata/2-0-0-0/type
|
||||
create mode 100644 tests/virscsidata/2-0-0-0/vendor
|
||||
create mode 100644 tests/virscsidata/sg3
|
||||
|
||||
diff --git a/src/util/virscsi.c b/src/util/virscsi.c
|
||||
index c40857977f..57958c06ea 100644
|
||||
--- a/src/util/virscsi.c
|
||||
+++ b/src/util/virscsi.c
|
||||
@@ -238,6 +238,31 @@ virSCSIDeviceGetDevNameBlock(const char *prefix,
|
||||
}
|
||||
|
||||
|
||||
+static char *
|
||||
+virSCSIDeviceGetDevNameTape(const char *prefix,
|
||||
+ unsigned int adapter,
|
||||
+ unsigned int bus,
|
||||
+ unsigned int target,
|
||||
+ unsigned long long unit)
|
||||
+{
|
||||
+ g_autofree char *path = NULL;
|
||||
+ g_autofree char *resolvedPath = NULL;
|
||||
+ g_autoptr(GError) err = NULL;
|
||||
+
|
||||
+ path = g_strdup_printf("%s/%d:%u:%u:%llu/tape",
|
||||
+ prefix, adapter, bus, target, unit);
|
||||
+
|
||||
+ if (!(resolvedPath = g_file_read_link(path, &err))) {
|
||||
+ virReportError(VIR_ERR_SYSTEM_ERROR,
|
||||
+ _("Unable to read link: %s"),
|
||||
+ err->message);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return g_path_get_basename(resolvedPath);
|
||||
+}
|
||||
+
|
||||
+
|
||||
/* Returns device name (e.g. "sdc") on success, or NULL
|
||||
* on failure.
|
||||
*/
|
||||
@@ -266,6 +291,9 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
|
||||
break;
|
||||
|
||||
case VIR_SCSI_DEVICE_TYPE_TAPE:
|
||||
+ name = virSCSIDeviceGetDevNameTape(prefix, adapter_id, bus, target, unit);
|
||||
+ break;
|
||||
+
|
||||
case VIR_SCSI_DEVICE_TYPE_PRINTER:
|
||||
case VIR_SCSI_DEVICE_TYPE_PROCESSOR:
|
||||
case VIR_SCSI_DEVICE_TYPE_WORM:
|
||||
diff --git a/tests/virscsidata/2-0-0-0/model b/tests/virscsidata/2-0-0-0/model
|
||||
new file mode 100644
|
||||
index 0000000000..d2ab4715c3
|
||||
--- /dev/null
|
||||
+++ b/tests/virscsidata/2-0-0-0/model
|
||||
@@ -0,0 +1 @@
|
||||
+scsi_debug
|
||||
diff --git a/tests/virscsidata/2-0-0-0/scsi_tape/st0/dev b/tests/virscsidata/2-0-0-0/scsi_tape/st0/dev
|
||||
new file mode 100644
|
||||
index 0000000000..3dd777e840
|
||||
--- /dev/null
|
||||
+++ b/tests/virscsidata/2-0-0-0/scsi_tape/st0/dev
|
||||
@@ -0,0 +1 @@
|
||||
+9:0
|
||||
diff --git a/tests/virscsidata/2-0-0-0/sg3/dev b/tests/virscsidata/2-0-0-0/sg3/dev
|
||||
new file mode 100644
|
||||
index 0000000000..b369a59b3e
|
||||
--- /dev/null
|
||||
+++ b/tests/virscsidata/2-0-0-0/sg3/dev
|
||||
@@ -0,0 +1 @@
|
||||
+21:3
|
||||
diff --git a/tests/virscsidata/2-0-0-0/tape b/tests/virscsidata/2-0-0-0/tape
|
||||
new file mode 120000
|
||||
index 0000000000..6ca7f77539
|
||||
--- /dev/null
|
||||
+++ b/tests/virscsidata/2-0-0-0/tape
|
||||
@@ -0,0 +1 @@
|
||||
+scsi_tape/st0
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/virscsidata/2-0-0-0/type b/tests/virscsidata/2-0-0-0/type
|
||||
new file mode 100644
|
||||
index 0000000000..d00491fd7e
|
||||
--- /dev/null
|
||||
+++ b/tests/virscsidata/2-0-0-0/type
|
||||
@@ -0,0 +1 @@
|
||||
+1
|
||||
diff --git a/tests/virscsidata/2-0-0-0/vendor b/tests/virscsidata/2-0-0-0/vendor
|
||||
new file mode 100644
|
||||
index 0000000000..9b075671ea
|
||||
--- /dev/null
|
||||
+++ b/tests/virscsidata/2-0-0-0/vendor
|
||||
@@ -0,0 +1 @@
|
||||
+Linux
|
||||
diff --git a/tests/virscsidata/sg3 b/tests/virscsidata/sg3
|
||||
new file mode 100644
|
||||
index 0000000000..e69de29bb2
|
||||
diff --git a/tests/virscsitest.c b/tests/virscsitest.c
|
||||
index d5a0da4753..e501d6d041 100644
|
||||
--- a/tests/virscsitest.c
|
||||
+++ b/tests/virscsitest.c
|
||||
@@ -32,18 +32,34 @@ VIR_LOG_INIT("tests.scsitest");
|
||||
|
||||
static char *virscsi_prefix;
|
||||
|
||||
+typedef struct {
|
||||
+ const char *adapter;
|
||||
+ unsigned int bus;
|
||||
+ unsigned int target;
|
||||
+ unsigned int unit;
|
||||
+ const char *expectedName;
|
||||
+} testGetDevNameData;
|
||||
+
|
||||
static int
|
||||
-test1(const void *data G_GNUC_UNUSED)
|
||||
+testGetDevName(const void *opaque)
|
||||
{
|
||||
+ const testGetDevNameData *data = opaque;
|
||||
char *name = NULL;
|
||||
int ret = -1;
|
||||
|
||||
if (!(name = virSCSIDeviceGetDevName(virscsi_prefix,
|
||||
- "scsi_host1", 0, 0, 0)))
|
||||
+ data->adapter,
|
||||
+ data->bus,
|
||||
+ data->target,
|
||||
+ data->unit)))
|
||||
return -1;
|
||||
|
||||
- if (STRNEQ(name, "sdh"))
|
||||
+ if (STRNEQ(name, data->expectedName)) {
|
||||
+ fprintf(stderr,
|
||||
+ "SCSI dev name mismatch, expected %s got %s",
|
||||
+ data->expectedName, name);
|
||||
goto cleanup;
|
||||
+ }
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
@@ -212,15 +228,27 @@ mymain(void)
|
||||
|
||||
CREATE_SYMLINK("0-0-0-0", "0:0:0:0");
|
||||
CREATE_SYMLINK("1-0-0-0", "1:0:0:0");
|
||||
+ CREATE_SYMLINK("2-0-0-0", "2:0:0:0");
|
||||
CREATE_SYMLINK("sg0", "sg0");
|
||||
+ CREATE_SYMLINK("sg3", "sg3");
|
||||
CREATE_SYMLINK("sg8", "sg8");
|
||||
|
||||
VIR_FREE(virscsi_prefix);
|
||||
|
||||
virscsi_prefix = g_strdup(tmpdir);
|
||||
|
||||
- if (virTestRun("test1", test1, NULL) < 0)
|
||||
- ret = -1;
|
||||
+#define TEST_GET_DEV_NAME(adapter, bus, target, unit, expectedName) \
|
||||
+ do { \
|
||||
+ testGetDevNameData data = {adapter, bus, target, unit, expectedName}; \
|
||||
+ if (virTestRun("test getDevname " expectedName, \
|
||||
+ testGetDevName, &data) < 0) \
|
||||
+ ret = -1; \
|
||||
+ } while (0)
|
||||
+
|
||||
+ TEST_GET_DEV_NAME("scsi_host0", 0, 0, 0, "sda");
|
||||
+ TEST_GET_DEV_NAME("scsi_host1", 0, 0, 0, "sdh");
|
||||
+ TEST_GET_DEV_NAME("scsi_host2", 0, 0, 0, "st0");
|
||||
+
|
||||
if (virTestRun("test2", test2, NULL) < 0)
|
||||
ret = -1;
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,37 @@
|
||||
From cd2640c256389b4041e4cd38fd72f77184bb4414 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <cd2640c256389b4041e4cd38fd72f77184bb4414@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 6 Mar 2020 15:52:24 +0100
|
||||
Subject: [PATCH] RHEL: virutil: Accept non-block devices in virGetDeviceID()
|
||||
|
||||
If a caller wants to learn major or minor number for a device,
|
||||
let them. There's no need to check if the device is a block
|
||||
device here.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1808390
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Message-Id: <20200306145226.1610708-5-abologna@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/util/virutil.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/src/util/virutil.c b/src/util/virutil.c
|
||||
index a0fd7618ee..f142951acf 100644
|
||||
--- a/src/util/virutil.c
|
||||
+++ b/src/util/virutil.c
|
||||
@@ -1379,9 +1379,6 @@ virGetDeviceID(const char *path, int *maj, int *min)
|
||||
if (stat(path, &sb) < 0)
|
||||
return -errno;
|
||||
|
||||
- if (!S_ISBLK(sb.st_mode))
|
||||
- return -EINVAL;
|
||||
-
|
||||
if (maj)
|
||||
*maj = major(sb.st_rdev);
|
||||
if (min)
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,62 @@
|
||||
From ca7c7a8b07c31dc8bf96f7da6fb53af884e36ddb Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <ca7c7a8b07c31dc8bf96f7da6fb53af884e36ddb@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 4 Feb 2020 15:08:01 +0100
|
||||
Subject: [PATCH] Remove checking of return value of virHashNew
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
There are two calls to virHashNew which check the return value. It's not
|
||||
necessary any more as virHashNew always returns a valid pointer.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 6eab924daa243afa67f2cc20dcbdf521904bb62b)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1793263
|
||||
Message-Id: <08acb2e50b584a75c0131a628ee441f47e8fe823.1580824112.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/backup_conf.c | 6 +-----
|
||||
src/qemu/qemu_monitor_json.c | 3 +--
|
||||
2 files changed, 2 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/conf/backup_conf.c b/src/conf/backup_conf.c
|
||||
index b370b686f1..64c8f6cc09 100644
|
||||
--- a/src/conf/backup_conf.c
|
||||
+++ b/src/conf/backup_conf.c
|
||||
@@ -439,15 +439,11 @@ virDomainBackupAlignDisks(virDomainBackupDefPtr def,
|
||||
virDomainDefPtr dom,
|
||||
const char *suffix)
|
||||
{
|
||||
- g_autoptr(virHashTable) disks = NULL;
|
||||
+ g_autoptr(virHashTable) disks = virHashNew(NULL);
|
||||
size_t i;
|
||||
int ndisks;
|
||||
bool backup_all = false;
|
||||
|
||||
-
|
||||
- if (!(disks = virHashNew(NULL)))
|
||||
- return -1;
|
||||
-
|
||||
/* Unlikely to have a guest without disks but technically possible. */
|
||||
if (!dom->ndisks) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
|
||||
index 5d8c7e9b5e..3fc0bcb80c 100644
|
||||
--- a/src/qemu/qemu_monitor_json.c
|
||||
+++ b/src/qemu/qemu_monitor_json.c
|
||||
@@ -2992,8 +2992,7 @@ qemuMonitorJSONBlockGetNamedNodeDataJSON(virJSONValuePtr nodes)
|
||||
{
|
||||
g_autoptr(virHashTable) ret = NULL;
|
||||
|
||||
- if (!(ret = virHashNew((virHashDataFree) qemuMonitorJSONBlockNamedNodeDataFree)))
|
||||
- return NULL;
|
||||
+ ret = virHashNew((virHashDataFree) qemuMonitorJSONBlockNamedNodeDataFree);
|
||||
|
||||
if (virJSONValueArrayForeachSteal(nodes,
|
||||
qemuMonitorJSONBlockGetNamedNodeDataWorker,
|
||||
--
|
||||
2.25.0
|
||||
|
109
SOURCES/libvirt-Remove-qemuDomainSecretInfoNew.patch
Normal file
109
SOURCES/libvirt-Remove-qemuDomainSecretInfoNew.patch
Normal file
@ -0,0 +1,109 @@
|
||||
From 160863c5cac5519c287462439b9ce8abc6a8237e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <160863c5cac5519c287462439b9ce8abc6a8237e@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 16 Mar 2020 22:11:48 +0100
|
||||
Subject: [PATCH] Remove qemuDomainSecretInfoNew
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Replace it by a direct call to qemuDomainSecretAESSetupFromSecret.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit f742461389c11a7d4cc8bda941814c4128eadf94)
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804750
|
||||
Message-Id: <c14d98c90ae9d0e9c5e4fef6a8e5061411c43a78.1584391726.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_domain.c | 53 +++++++++++-------------------------------
|
||||
1 file changed, 13 insertions(+), 40 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index c286f50650..af23079d5d 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -1669,33 +1669,6 @@ qemuDomainSecretInfoNewPlain(virSecretUsageType usageType,
|
||||
}
|
||||
|
||||
|
||||
-/* qemuDomainSecretInfoNew:
|
||||
- * @priv: pointer to domain private object
|
||||
- * @srcAlias: Alias base to use for TLS object
|
||||
- * @usageType: Secret usage type
|
||||
- * @username: username
|
||||
- * @looupDef: lookup def describing secret
|
||||
- * @isLuks: boolean for luks lookup
|
||||
- *
|
||||
- * Helper function to create a secinfo to be used for secinfo consumers. This
|
||||
- * sets up encrypted data to be used with qemu's 'secret' object.
|
||||
- *
|
||||
- * Returns @secinfo on success, NULL on failure. Caller is responsible
|
||||
- * to eventually free @secinfo.
|
||||
- */
|
||||
-static qemuDomainSecretInfoPtr
|
||||
-qemuDomainSecretInfoNew(qemuDomainObjPrivatePtr priv,
|
||||
- const char *srcAlias,
|
||||
- virSecretUsageType usageType,
|
||||
- const char *username,
|
||||
- virSecretLookupTypeDefPtr lookupDef,
|
||||
- bool isLuks)
|
||||
-{
|
||||
- return qemuDomainSecretAESSetupFromSecret(priv, srcAlias, usageType, username,
|
||||
- lookupDef, isLuks);
|
||||
-}
|
||||
-
|
||||
-
|
||||
/**
|
||||
* qemuDomainSecretInfoTLSNew:
|
||||
* @priv: pointer to domain private object
|
||||
@@ -1722,9 +1695,9 @@ qemuDomainSecretInfoTLSNew(qemuDomainObjPrivatePtr priv,
|
||||
}
|
||||
seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_UUID;
|
||||
|
||||
- return qemuDomainSecretInfoNew(priv, srcAlias,
|
||||
- VIR_SECRET_USAGE_TYPE_TLS, NULL,
|
||||
- &seclookupdef, false);
|
||||
+ return qemuDomainSecretAESSetupFromSecret(priv, srcAlias,
|
||||
+ VIR_SECRET_USAGE_TYPE_TLS,
|
||||
+ NULL, &seclookupdef, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -1814,11 +1787,11 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
|
||||
src->auth->username,
|
||||
&src->auth->seclookupdef);
|
||||
} else {
|
||||
- srcPriv->secinfo = qemuDomainSecretInfoNew(priv, authalias,
|
||||
- usageType,
|
||||
- src->auth->username,
|
||||
- &src->auth->seclookupdef,
|
||||
- false);
|
||||
+ srcPriv->secinfo = qemuDomainSecretAESSetupFromSecret(priv, authalias,
|
||||
+ usageType,
|
||||
+ src->auth->username,
|
||||
+ &src->auth->seclookupdef,
|
||||
+ false);
|
||||
}
|
||||
|
||||
if (!srcPriv->secinfo)
|
||||
@@ -1826,11 +1799,11 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
|
||||
}
|
||||
|
||||
if (hasEnc) {
|
||||
- if (!(srcPriv->encinfo =
|
||||
- qemuDomainSecretInfoNew(priv, encalias,
|
||||
- VIR_SECRET_USAGE_TYPE_VOLUME, NULL,
|
||||
- &src->encryption->secrets[0]->seclookupdef,
|
||||
- true)))
|
||||
+ if (!(srcPriv->encinfo = qemuDomainSecretAESSetupFromSecret(priv, encalias,
|
||||
+ VIR_SECRET_USAGE_TYPE_VOLUME,
|
||||
+ NULL,
|
||||
+ &src->encryption->secrets[0]->seclookupdef,
|
||||
+ true)))
|
||||
return -1;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,45 @@
|
||||
From 0c1bec6a89f97c77ba9e0ed4146deb8606ea6f16 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0c1bec6a89f97c77ba9e0ed4146deb8606ea6f16@dist-git>
|
||||
From: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Date: Wed, 25 Mar 2020 11:21:19 -0500
|
||||
Subject: [PATCH] api: disallow virDomainAgentSetResponseTimeout() on read-only
|
||||
connections
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This function changes the amount of time that libvirt waits for a
|
||||
response from the guest agent for all guest agent commands. Since this
|
||||
is a configuration change, it should not be allowed on read-only
|
||||
connections.
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 4cc90c2e62df653e909ad31fd810224bf8bcf913)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1814508
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Message-Id: <20200325162119.9047-2-jjongsma@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/libvirt-domain.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
|
||||
index eb66999f07..3deee54e48 100644
|
||||
--- a/src/libvirt-domain.c
|
||||
+++ b/src/libvirt-domain.c
|
||||
@@ -12554,6 +12554,8 @@ virDomainAgentSetResponseTimeout(virDomainPtr domain,
|
||||
virCheckDomainReturn(domain, -1);
|
||||
conn = domain->conn;
|
||||
|
||||
+ virCheckReadOnlyGoto(conn->flags, error);
|
||||
+
|
||||
if (conn->driver->domainAgentSetResponseTimeout) {
|
||||
if (conn->driver->domainAgentSetResponseTimeout(domain, timeout, flags) < 0)
|
||||
goto error;
|
||||
--
|
||||
2.26.0
|
||||
|
@ -0,0 +1,449 @@
|
||||
From 4abdfae3b67295a0143f650768630e009d1b2798 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <4abdfae3b67295a0143f650768630e009d1b2798@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 16 Mar 2020 22:11:57 +0100
|
||||
Subject: [PATCH] conf: Add support for cookies for HTTP based disks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Add possibility to specify one or more cookies for http based disks.
|
||||
This patch adds the config parser, storage and validation of the
|
||||
cookies.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3b076391befc3fe72deb0c244ac6c2b4c100b410)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804750
|
||||
Message-Id: <3135a30f0d0a1a4bb8da02c49f10a1bcf3a394f4.1584391727.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 10 ++
|
||||
docs/schemas/domaincommon.rng | 24 ++++
|
||||
src/conf/domain_conf.c | 82 +++++++++++++
|
||||
src/libvirt_private.syms | 1 +
|
||||
src/util/virstoragefile.c | 115 ++++++++++++++++++
|
||||
src/util/virstoragefile.h | 15 +++
|
||||
.../disk-network-http.xml | 8 ++
|
||||
7 files changed, 255 insertions(+)
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 2cce247958..5a10d64e83 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -2839,6 +2839,9 @@
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source protocol="http" name="url_path">
|
||||
<host name="hostname" port="80"/>
|
||||
+ <cookies>
|
||||
+ <cookie name="test">somevalue</cookie>
|
||||
+ </cookies>
|
||||
</source>
|
||||
<target dev='hde' bus='ide' tray='open'/>
|
||||
<readonly/>
|
||||
@@ -3382,6 +3385,13 @@
|
||||
certificate validation. Supported values are <code>yes</code> and
|
||||
<code>no</code>. <span class="since">Since 6.2.0</span>
|
||||
</dd>
|
||||
+ <dt><code>cookies</code></dt>
|
||||
+ <dd>
|
||||
+ For <code>http</code> and <code>https</code> accessed storage it's
|
||||
+ possible to pass one or more cookies. The cookie name and value
|
||||
+ must conform to the HTTP specification.
|
||||
+ <span class="since">Since 6.2.0</span>
|
||||
+ </dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index 548601b61c..bdf35e64f6 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -1817,6 +1817,24 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
+ <define name="diskSourceNetworkProtocolHTTPCookies">
|
||||
+ <element name="cookies">
|
||||
+ <oneOrMore>
|
||||
+ <element name="cookie">
|
||||
+ <attribute name="name">
|
||||
+ <data type="string">
|
||||
+ <param name="pattern">[!#$%&'*+\-.0-9A-Z\^_`a-z|~]+</param>
|
||||
+ </data>
|
||||
+ </attribute>
|
||||
+ <data type="string">
|
||||
+ <param name="pattern">[!#$%&'()*+\-./0-9:>=<?@A-Z\^_`\[\]a-z|~]+</param>
|
||||
+ </data>
|
||||
+ </element>
|
||||
+ </oneOrMore>
|
||||
+ <empty/>
|
||||
+ </element>
|
||||
+ </define>
|
||||
+
|
||||
<define name="diskSourceNetworkProtocolHTTPS">
|
||||
<element name="source">
|
||||
<attribute name="protocol">
|
||||
@@ -1833,6 +1851,9 @@
|
||||
<optional>
|
||||
<ref name="diskSourceNetworkProtocolSSLVerify"/>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <ref name="diskSourceNetworkProtocolHTTPCookies"/>
|
||||
+ </optional>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
@@ -1849,6 +1870,9 @@
|
||||
<optional>
|
||||
<ref name="encryption"/>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <ref name="diskSourceNetworkProtocolHTTPCookies"/>
|
||||
+ </optional>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 70bbc35bb3..d066d3aac1 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -9249,6 +9249,62 @@ virDomainDiskSourcePoolDefParse(xmlNodePtr node,
|
||||
}
|
||||
|
||||
|
||||
+static virStorageNetCookieDefPtr
|
||||
+virDomainStorageNetCookieParse(xmlNodePtr node,
|
||||
+ xmlXPathContextPtr ctxt)
|
||||
+{
|
||||
+ VIR_XPATH_NODE_AUTORESTORE(ctxt);
|
||||
+ g_autoptr(virStorageNetCookieDef) cookie = NULL;
|
||||
+
|
||||
+ ctxt->node = node;
|
||||
+
|
||||
+ cookie = g_new0(virStorageNetCookieDef, 1);
|
||||
+
|
||||
+ if (!(cookie->name = virXPathString("string(./@name)", ctxt))) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, "%s", _("missing cookie name"));
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (!(cookie->value = virXPathString("string(.)", ctxt))) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, _("missing value for cookie '%s'"),
|
||||
+ cookie->name);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return g_steal_pointer(&cookie);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
+virDomainStorageNetCookiesParse(xmlNodePtr node,
|
||||
+ xmlXPathContextPtr ctxt,
|
||||
+ virStorageSourcePtr src)
|
||||
+{
|
||||
+ VIR_XPATH_NODE_AUTORESTORE(ctxt);
|
||||
+ g_autofree xmlNodePtr *nodes = NULL;
|
||||
+ ssize_t nnodes;
|
||||
+ size_t i;
|
||||
+
|
||||
+ ctxt->node = node;
|
||||
+
|
||||
+ if ((nnodes = virXPathNodeSet("./cookie", ctxt, &nodes)) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ src->cookies = g_new0(virStorageNetCookieDefPtr, nnodes);
|
||||
+ src->ncookies = nnodes;
|
||||
+
|
||||
+ for (i = 0; i < nnodes; i++) {
|
||||
+ if (!(src->cookies[i] = virDomainStorageNetCookieParse(nodes[i], ctxt)))
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (virStorageSourceNetCookiesValidate(src) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
xmlXPathContextPtr ctxt,
|
||||
@@ -9260,6 +9316,7 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
g_autofree char *haveTLS = NULL;
|
||||
g_autofree char *tlsCfg = NULL;
|
||||
g_autofree char *sslverifystr = NULL;
|
||||
+ xmlNodePtr tmpnode;
|
||||
|
||||
if (!(protocol = virXMLPropString(node, "protocol"))) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
@@ -9345,6 +9402,13 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
src->sslverify = verify;
|
||||
}
|
||||
|
||||
+ if ((src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP ||
|
||||
+ src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS) &&
|
||||
+ (tmpnode = virXPathNode("./cookies", ctxt))) {
|
||||
+ if (virDomainStorageNetCookiesParse(tmpnode, ctxt, src) < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -24281,6 +24345,22 @@ virDomainSourceDefFormatSeclabel(virBufferPtr buf,
|
||||
}
|
||||
|
||||
|
||||
+static void
|
||||
+virDomainDiskSourceFormatNetworkCookies(virBufferPtr buf,
|
||||
+ virStorageSourcePtr src)
|
||||
+{
|
||||
+ g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
+ size_t i;
|
||||
+
|
||||
+ for (i = 0; i < src->ncookies; i++) {
|
||||
+ virBufferEscapeString(&childBuf, "<cookie name='%s'>", src->cookies[i]->name);
|
||||
+ virBufferEscapeString(&childBuf, "%s</cookie>\n", src->cookies[i]->value);
|
||||
+ }
|
||||
+
|
||||
+ virXMLFormatElement(buf, "cookies", NULL, &childBuf);
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
|
||||
virBufferPtr childBuf,
|
||||
@@ -24331,6 +24411,8 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
|
||||
virTristateBoolTypeToString(src->sslverify));
|
||||
}
|
||||
|
||||
+ virDomainDiskSourceFormatNetworkCookies(childBuf, src);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index dbbec0d567..ac5527ef01 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -3123,6 +3123,7 @@ virStorageSourceIsEmpty;
|
||||
virStorageSourceIsLocalStorage;
|
||||
virStorageSourceIsRelative;
|
||||
virStorageSourceIsSameLocation;
|
||||
+virStorageSourceNetCookiesValidate;
|
||||
virStorageSourceNetworkAssignDefaultPorts;
|
||||
virStorageSourceNew;
|
||||
virStorageSourceNewFromBacking;
|
||||
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
|
||||
index cfa77fccf8..6350168d73 100644
|
||||
--- a/src/util/virstoragefile.c
|
||||
+++ b/src/util/virstoragefile.c
|
||||
@@ -2157,6 +2157,118 @@ virStorageSourceSeclabelsCopy(virStorageSourcePtr to,
|
||||
}
|
||||
|
||||
|
||||
+void
|
||||
+virStorageNetCookieDefFree(virStorageNetCookieDefPtr def)
|
||||
+{
|
||||
+ if (!def)
|
||||
+ return;
|
||||
+
|
||||
+ g_free(def->name);
|
||||
+ g_free(def->value);
|
||||
+
|
||||
+ g_free(def);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+virStorageSourceNetCookiesClear(virStorageSourcePtr src)
|
||||
+{
|
||||
+ size_t i;
|
||||
+
|
||||
+ if (!src || !src->cookies)
|
||||
+ return;
|
||||
+
|
||||
+ for (i = 0; i < src->ncookies; i++)
|
||||
+ virStorageNetCookieDefFree(src->cookies[i]);
|
||||
+
|
||||
+ g_clear_pointer(&src->cookies, g_free);
|
||||
+ src->ncookies = 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+virStorageSourceNetCookiesCopy(virStorageSourcePtr to,
|
||||
+ const virStorageSource *from)
|
||||
+{
|
||||
+ size_t i;
|
||||
+
|
||||
+ if (from->ncookies == 0)
|
||||
+ return;
|
||||
+
|
||||
+ to->cookies = g_new0(virStorageNetCookieDefPtr, from->ncookies);
|
||||
+ to->ncookies = from->ncookies;
|
||||
+
|
||||
+ for (i = 0; i < from->ncookies; i++) {
|
||||
+ to->cookies[i]->name = g_strdup(from->cookies[i]->name);
|
||||
+ to->cookies[i]->value = g_strdup(from->cookies[i]->value);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/* see https://tools.ietf.org/html/rfc6265#section-4.1.1 */
|
||||
+static const char virStorageSourceCookieValueInvalidChars[] =
|
||||
+ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
|
||||
+ "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
|
||||
+ " \",;\\";
|
||||
+
|
||||
+/* in addition cookie name can't contain these */
|
||||
+static const char virStorageSourceCookieNameInvalidChars[] =
|
||||
+ "()<>@:/[]?={}";
|
||||
+
|
||||
+static int
|
||||
+virStorageSourceNetCookieValidate(virStorageNetCookieDefPtr def)
|
||||
+{
|
||||
+ /* name must have at least 1 character */
|
||||
+ if (*(def->name) == '\0') {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
+ _("cookie name must not be empty"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ /* check invalid characters in name */
|
||||
+ if (virStringHasChars(def->name, virStorageSourceCookieValueInvalidChars) ||
|
||||
+ virStringHasChars(def->name, virStorageSourceCookieNameInvalidChars)) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("cookie name '%s' contains invalid characters"),
|
||||
+ def->name);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ /* check invalid characters in value */
|
||||
+ if (virStringHasChars(def->value, virStorageSourceCookieValueInvalidChars)) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("value of cookie '%s' contains invalid characters"),
|
||||
+ def->name);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+int
|
||||
+virStorageSourceNetCookiesValidate(virStorageSourcePtr src)
|
||||
+{
|
||||
+ size_t i;
|
||||
+ size_t j;
|
||||
+
|
||||
+ for (i = 0; i < src->ncookies; i++) {
|
||||
+ if (virStorageSourceNetCookieValidate(src->cookies[i]) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ for (j = i + 1; j < src->ncookies; j++) {
|
||||
+ if (STREQ(src->cookies[i]->name, src->cookies[j]->name)) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, _("duplicate cookie '%s'"),
|
||||
+ src->cookies[i]->name);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static virStorageTimestampsPtr
|
||||
virStorageTimestampsCopy(const virStorageTimestamps *src)
|
||||
{
|
||||
@@ -2299,6 +2411,8 @@ virStorageSourceCopy(const virStorageSource *src,
|
||||
def->nhosts = src->nhosts;
|
||||
}
|
||||
|
||||
+ virStorageSourceNetCookiesCopy(def, src);
|
||||
+
|
||||
if (src->srcpool &&
|
||||
!(def->srcpool = virStorageSourcePoolDefCopy(src->srcpool)))
|
||||
return NULL;
|
||||
@@ -2560,6 +2674,7 @@ virStorageSourceClear(virStorageSourcePtr def)
|
||||
VIR_FREE(def->volume);
|
||||
VIR_FREE(def->snapshot);
|
||||
VIR_FREE(def->configFile);
|
||||
+ virStorageSourceNetCookiesClear(def);
|
||||
virStorageSourcePoolDefFree(def->srcpool);
|
||||
virBitmapFree(def->features);
|
||||
VIR_FREE(def->compat);
|
||||
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
|
||||
index fab4248c3d..1c7c046ad6 100644
|
||||
--- a/src/util/virstoragefile.h
|
||||
+++ b/src/util/virstoragefile.h
|
||||
@@ -162,6 +162,17 @@ struct _virStorageNetHostDef {
|
||||
char *socket; /* path to unix socket */
|
||||
};
|
||||
|
||||
+typedef struct _virStorageNetCookieDef virStorageNetCookieDef;
|
||||
+typedef virStorageNetCookieDef *virStorageNetCookieDefPtr;
|
||||
+struct _virStorageNetCookieDef {
|
||||
+ char *name;
|
||||
+ char *value;
|
||||
+};
|
||||
+
|
||||
+void virStorageNetCookieDefFree(virStorageNetCookieDefPtr def);
|
||||
+
|
||||
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virStorageNetCookieDef, virStorageNetCookieDefFree);
|
||||
+
|
||||
/* Information for a storage volume from a virStoragePool */
|
||||
|
||||
/*
|
||||
@@ -276,6 +287,8 @@ struct _virStorageSource {
|
||||
the source definition */
|
||||
size_t nhosts;
|
||||
virStorageNetHostDefPtr hosts;
|
||||
+ size_t ncookies;
|
||||
+ virStorageNetCookieDefPtr *cookies;
|
||||
virStorageSourcePoolDefPtr srcpool;
|
||||
virStorageAuthDefPtr auth;
|
||||
bool authInherited;
|
||||
@@ -477,6 +490,8 @@ int virStorageSourceUpdateCapacity(virStorageSourcePtr src,
|
||||
int virStorageSourceNewFromBacking(virStorageSourcePtr parent,
|
||||
virStorageSourcePtr *backing);
|
||||
|
||||
+int virStorageSourceNetCookiesValidate(virStorageSourcePtr src);
|
||||
+
|
||||
virStorageSourcePtr virStorageSourceCopy(const virStorageSource *src,
|
||||
bool backingChain)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
diff --git a/tests/genericxml2xmlindata/disk-network-http.xml b/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
index bdcc1977f2..bafb77c8ec 100644
|
||||
--- a/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
+++ b/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
@@ -33,6 +33,10 @@
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source protocol='http' name='test3.img'>
|
||||
<host name='example.org' port='1234'/>
|
||||
+ <cookies>
|
||||
+ <cookie name='test'>testcookievalue</cookie>
|
||||
+ <cookie name='test2'>blurb</cookie>
|
||||
+ </cookies>
|
||||
</source>
|
||||
<target dev='vdc' bus='virtio'/>
|
||||
</disk>
|
||||
@@ -41,6 +45,10 @@
|
||||
<source protocol='https' name='test4.img'>
|
||||
<host name='example.org' port='1234'/>
|
||||
<ssl verify='yes'/>
|
||||
+ <cookies>
|
||||
+ <cookie name='test'>testcookievalue</cookie>
|
||||
+ <cookie name='test2'>blurb</cookie>
|
||||
+ </cookies>
|
||||
</source>
|
||||
<target dev='vdd' bus='virtio'/>
|
||||
</disk>
|
||||
--
|
||||
2.25.1
|
||||
|
160
SOURCES/libvirt-conf-Add-support-for-http-s-query-strings.patch
Normal file
160
SOURCES/libvirt-conf-Add-support-for-http-s-query-strings.patch
Normal file
@ -0,0 +1,160 @@
|
||||
From 45ecbd824c92bd05a46557bfcaff39196f701e6c Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <45ecbd824c92bd05a46557bfcaff39196f701e6c@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 30 Mar 2020 17:21:45 +0200
|
||||
Subject: [PATCH] conf: Add support for http(s) query strings
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Add a new attribute for holding the query part for http(s) disks.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 56368124728f0d65dde07244c741b459fcd6b939)
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804750
|
||||
Message-Id: <b60abcf1e7711e9e29175e1fdcfe2820d5694a17.1585581552.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 7 ++++++-
|
||||
docs/schemas/domaincommon.rng | 6 ++++++
|
||||
src/conf/domain_conf.c | 5 +++++
|
||||
src/util/virstoragefile.c | 2 ++
|
||||
src/util/virstoragefile.h | 1 +
|
||||
tests/qemuxml2argvdata/disk-network-http.xml | 2 +-
|
||||
.../qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml | 2 +-
|
||||
7 files changed, 22 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 143db21d4d..9c588185df 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -2837,7 +2837,7 @@
|
||||
</disk>
|
||||
<disk type='network' device='cdrom'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
- <source protocol="http" name="url_path">
|
||||
+ <source protocol="http" name="url_path" query="foo=bar&amp;baz=flurb>
|
||||
<host name="hostname" port="80"/>
|
||||
<cookies>
|
||||
<cookie name="test">somevalue</cookie>
|
||||
@@ -3103,6 +3103,11 @@
|
||||
('tls' <span class="since">Since 4.5.0</span>)
|
||||
</p>
|
||||
|
||||
+ <p>For protocols <code>http</code> and <code>https</code> an
|
||||
+ optional attribute <code>query</code> specifies the query string.
|
||||
+ (<span class="since">Since 6.2.0</span>)
|
||||
+ </p>
|
||||
+
|
||||
<p>For "iscsi" (<span class="since">since 1.0.4</span>), the
|
||||
<code>name</code> attribute may include a logical unit number,
|
||||
separated from the target's name by a slash (e.g.,
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index e17f7ff8c0..dd8f27243a 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -1869,6 +1869,9 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
<attribute name="name"/>
|
||||
+ <optional>
|
||||
+ <attribute name="query"/>
|
||||
+ </optional>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<ref name="diskSourceNetworkHost"/>
|
||||
<optional>
|
||||
@@ -1894,6 +1897,9 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
<attribute name="name"/>
|
||||
+ <optional>
|
||||
+ <attribute name="query"/>
|
||||
+ </optional>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<ref name="diskSourceNetworkHost"/>
|
||||
<optional>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index e3755fa285..28160a2967 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -9382,6 +9382,10 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
/* config file currently only works with remote disks */
|
||||
src->configFile = virXPathString("string(./config/@file)", ctxt);
|
||||
|
||||
+ if (src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP ||
|
||||
+ src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS)
|
||||
+ src->query = virXMLPropString(node, "query");
|
||||
+
|
||||
if (virDomainStorageNetworkParseHosts(node, &src->hosts, &src->nhosts) < 0)
|
||||
return -1;
|
||||
|
||||
@@ -24390,6 +24394,7 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
|
||||
path = g_strdup_printf("%s/%s", src->volume, src->path);
|
||||
|
||||
virBufferEscapeString(attrBuf, " name='%s'", path ? path : src->path);
|
||||
+ virBufferEscapeString(attrBuf, " query='%s'", src->query);
|
||||
|
||||
if (src->haveTLS != VIR_TRISTATE_BOOL_ABSENT &&
|
||||
!(flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE &&
|
||||
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
|
||||
index f8d741f040..4082e3f5f7 100644
|
||||
--- a/src/util/virstoragefile.c
|
||||
+++ b/src/util/virstoragefile.c
|
||||
@@ -2418,6 +2418,7 @@ virStorageSourceCopy(const virStorageSource *src,
|
||||
def->compat = g_strdup(src->compat);
|
||||
def->tlsAlias = g_strdup(src->tlsAlias);
|
||||
def->tlsCertdir = g_strdup(src->tlsCertdir);
|
||||
+ def->query = g_strdup(src->query);
|
||||
|
||||
if (src->sliceStorage)
|
||||
def->sliceStorage = virStorageSourceSliceCopy(src->sliceStorage);
|
||||
@@ -2696,6 +2697,7 @@ virStorageSourceClear(virStorageSourcePtr def)
|
||||
VIR_FREE(def->volume);
|
||||
VIR_FREE(def->snapshot);
|
||||
VIR_FREE(def->configFile);
|
||||
+ VIR_FREE(def->query);
|
||||
virStorageSourceNetCookiesClear(def);
|
||||
virStorageSourcePoolDefFree(def->srcpool);
|
||||
virBitmapFree(def->features);
|
||||
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
|
||||
index 0230f44652..8089d1e07f 100644
|
||||
--- a/src/util/virstoragefile.h
|
||||
+++ b/src/util/virstoragefile.h
|
||||
@@ -285,6 +285,7 @@ struct _virStorageSource {
|
||||
char *snapshot; /* for storage systems supporting internal snapshots */
|
||||
char *configFile; /* some storage systems use config file as part of
|
||||
the source definition */
|
||||
+ char *query; /* query string for HTTP based protocols */
|
||||
size_t nhosts;
|
||||
virStorageNetHostDefPtr hosts;
|
||||
size_t ncookies;
|
||||
diff --git a/tests/qemuxml2argvdata/disk-network-http.xml b/tests/qemuxml2argvdata/disk-network-http.xml
|
||||
index 93e6617433..3abf499019 100644
|
||||
--- a/tests/qemuxml2argvdata/disk-network-http.xml
|
||||
+++ b/tests/qemuxml2argvdata/disk-network-http.xml
|
||||
@@ -42,7 +42,7 @@
|
||||
</disk>
|
||||
<disk type='network' device='disk'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
- <source protocol='https' name='test4.img'>
|
||||
+ <source protocol='https' name='test4.img' query='par=val&other=ble'>
|
||||
<host name='example.org' port='1234'/>
|
||||
<ssl verify='no'/>
|
||||
<cookies>
|
||||
diff --git a/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml b/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
|
||||
index 60073c227c..45b01841ec 100644
|
||||
--- a/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
|
||||
@@ -46,7 +46,7 @@
|
||||
</disk>
|
||||
<disk type='network' device='disk'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
- <source protocol='https' name='test4.img'>
|
||||
+ <source protocol='https' name='test4.img' query='par=val&other=ble'>
|
||||
<host name='example.org' port='1234'/>
|
||||
<ssl verify='no'/>
|
||||
<cookies>
|
||||
--
|
||||
2.26.0
|
||||
|
@ -0,0 +1,242 @@
|
||||
From ffe8028ca07eb049b12d5c152b3d66489378d731 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <ffe8028ca07eb049b12d5c152b3d66489378d731@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 16 Mar 2020 22:11:56 +0100
|
||||
Subject: [PATCH] conf: Add support for modifying ssl validation for https/ftps
|
||||
disks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
To allow turning off verification of SSL cerificates add a new element
|
||||
<ssl> to the disk source XML which will allow configuring the validation
|
||||
process using the 'verify' attribute.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 25481e25b14108373bf2e5e95c04fe30bff96bb4)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804750
|
||||
Message-Id: <ede13179128fc9ef05036a5408f4115132a2c12d.1584391727.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 9 ++++
|
||||
docs/schemas/domaincommon.rng | 51 ++++++++++++++++++-
|
||||
src/conf/domain_conf.c | 19 +++++++
|
||||
src/util/virstoragefile.c | 1 +
|
||||
src/util/virstoragefile.h | 1 +
|
||||
.../disk-network-http.xml | 9 ++++
|
||||
6 files changed, 88 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index e9830ab231..2cce247958 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -2847,6 +2847,7 @@
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source protocol="https" name="url_path">
|
||||
<host name="hostname" port="443"/>
|
||||
+ <ssl verify="no"/>
|
||||
</source>
|
||||
<target dev='hdf' bus='ide' tray='open'/>
|
||||
<readonly/>
|
||||
@@ -3373,6 +3374,14 @@
|
||||
The <code>offset</code> and <code>size</code> values are in bytes.
|
||||
<span class="since">Since 6.1.0</span>
|
||||
</dd>
|
||||
+ <dt><code>ssl</code></dt>
|
||||
+ <dd>
|
||||
+ For <code>https</code> and <code>ftps</code> accessed storage it's
|
||||
+ possible to tweak the SSL transport parameters with this element.
|
||||
+ The <code>verify</code> attribute allows to turn on or off SSL
|
||||
+ certificate validation. Supported values are <code>yes</code> and
|
||||
+ <code>no</code>. <span class="since">Since 6.2.0</span>
|
||||
+ </dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index aa70e340b9..548601b61c 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -1808,12 +1808,39 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
+ <define name="diskSourceNetworkProtocolSSLVerify">
|
||||
+ <element name="ssl">
|
||||
+ <attribute name="verify">
|
||||
+ <ref name="virYesNo"/>
|
||||
+ </attribute>
|
||||
+ <empty/>
|
||||
+ </element>
|
||||
+ </define>
|
||||
+
|
||||
+ <define name="diskSourceNetworkProtocolHTTPS">
|
||||
+ <element name="source">
|
||||
+ <attribute name="protocol">
|
||||
+ <choice>
|
||||
+ <value>https</value>
|
||||
+ </choice>
|
||||
+ </attribute>
|
||||
+ <attribute name="name"/>
|
||||
+ <ref name="diskSourceCommon"/>
|
||||
+ <ref name="diskSourceNetworkHost"/>
|
||||
+ <optional>
|
||||
+ <ref name="encryption"/>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <ref name="diskSourceNetworkProtocolSSLVerify"/>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </define>
|
||||
+
|
||||
<define name="diskSourceNetworkProtocolHTTP">
|
||||
<element name="source">
|
||||
<attribute name="protocol">
|
||||
<choice>
|
||||
<value>http</value>
|
||||
- <value>https</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
<attribute name="name"/>
|
||||
@@ -1825,13 +1852,31 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
+ <define name="diskSourceNetworkProtocolFTPS">
|
||||
+ <element name="source">
|
||||
+ <attribute name="protocol">
|
||||
+ <choice>
|
||||
+ <value>ftps</value>
|
||||
+ </choice>
|
||||
+ </attribute>
|
||||
+ <attribute name="name"/>
|
||||
+ <ref name="diskSourceCommon"/>
|
||||
+ <ref name="diskSourceNetworkHost"/>
|
||||
+ <optional>
|
||||
+ <ref name="encryption"/>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <ref name="diskSourceNetworkProtocolSSLVerify"/>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </define>
|
||||
+
|
||||
<define name="diskSourceNetworkProtocolSimple">
|
||||
<element name="source">
|
||||
<attribute name="protocol">
|
||||
<choice>
|
||||
<value>sheepdog</value>
|
||||
<value>ftp</value>
|
||||
- <value>ftps</value>
|
||||
<value>tftp</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
@@ -1909,6 +1954,8 @@
|
||||
<ref name="diskSourceNetworkProtocolRBD"/>
|
||||
<ref name="diskSourceNetworkProtocolISCSI"/>
|
||||
<ref name="diskSourceNetworkProtocolHTTP"/>
|
||||
+ <ref name="diskSourceNetworkProtocolHTTPS"/>
|
||||
+ <ref name="diskSourceNetworkProtocolFTPS"/>
|
||||
<ref name="diskSourceNetworkProtocolSimple"/>
|
||||
<ref name="diskSourceNetworkProtocolVxHS"/>
|
||||
</choice>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index b3c4084c38..70bbc35bb3 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -9259,6 +9259,7 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
g_autofree char *protocol = NULL;
|
||||
g_autofree char *haveTLS = NULL;
|
||||
g_autofree char *tlsCfg = NULL;
|
||||
+ g_autofree char *sslverifystr = NULL;
|
||||
|
||||
if (!(protocol = virXMLPropString(node, "protocol"))) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
@@ -9331,6 +9332,19 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
|
||||
virStorageSourceInitiatorParseXML(ctxt, &src->initiator);
|
||||
|
||||
+ if ((src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS ||
|
||||
+ src->protocol == VIR_STORAGE_NET_PROTOCOL_FTPS) &&
|
||||
+ (sslverifystr = virXPathString("string(./ssl/@verify)", ctxt))) {
|
||||
+ int verify;
|
||||
+ if ((verify = virTristateBoolTypeFromString(sslverifystr)) < 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("invalid ssl verify mode '%s'"), sslverifystr);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ src->sslverify = verify;
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -24312,6 +24326,11 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
|
||||
|
||||
virStorageSourceInitiatorFormatXML(&src->initiator, childBuf);
|
||||
|
||||
+ if (src->sslverify != VIR_TRISTATE_BOOL_ABSENT) {
|
||||
+ virBufferAsprintf(childBuf, "<ssl verify='%s'/>\n",
|
||||
+ virTristateBoolTypeToString(src->sslverify));
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
|
||||
index b88763b267..cfa77fccf8 100644
|
||||
--- a/src/util/virstoragefile.c
|
||||
+++ b/src/util/virstoragefile.c
|
||||
@@ -2270,6 +2270,7 @@ virStorageSourceCopy(const virStorageSource *src,
|
||||
def->cachemode = src->cachemode;
|
||||
def->discard = src->discard;
|
||||
def->detect_zeroes = src->detect_zeroes;
|
||||
+ def->sslverify = src->sslverify;
|
||||
|
||||
/* storage driver metadata are not copied */
|
||||
def->drv = NULL;
|
||||
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
|
||||
index 5b995d54ab..fab4248c3d 100644
|
||||
--- a/src/util/virstoragefile.h
|
||||
+++ b/src/util/virstoragefile.h
|
||||
@@ -282,6 +282,7 @@ struct _virStorageSource {
|
||||
virStorageEncryptionPtr encryption;
|
||||
bool encryptionInherited;
|
||||
virStoragePRDefPtr pr;
|
||||
+ virTristateBool sslverify;
|
||||
|
||||
virStorageSourceNVMeDefPtr nvme; /* type == VIR_STORAGE_TYPE_NVME */
|
||||
|
||||
diff --git a/tests/genericxml2xmlindata/disk-network-http.xml b/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
index fde1222fd0..bdcc1977f2 100644
|
||||
--- a/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
+++ b/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
@@ -25,6 +25,7 @@
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source protocol='https' name='test2.img'>
|
||||
<host name='example.org' port='443'/>
|
||||
+ <ssl verify='no'/>
|
||||
</source>
|
||||
<target dev='vdb' bus='virtio'/>
|
||||
</disk>
|
||||
@@ -35,6 +36,14 @@
|
||||
</source>
|
||||
<target dev='vdc' bus='virtio'/>
|
||||
</disk>
|
||||
+ <disk type='network' device='disk'>
|
||||
+ <driver name='qemu' type='raw'/>
|
||||
+ <source protocol='https' name='test4.img'>
|
||||
+ <host name='example.org' port='1234'/>
|
||||
+ <ssl verify='yes'/>
|
||||
+ </source>
|
||||
+ <target dev='vdd' bus='virtio'/>
|
||||
+ </disk>
|
||||
<controller type='usb' index='0'/>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<input type='mouse' bus='ps2'/>
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,205 @@
|
||||
From 3050ddce41896311b8c3ad06f148bea358e597b8 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <3050ddce41896311b8c3ad06f148bea358e597b8@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 16 Mar 2020 22:11:58 +0100
|
||||
Subject: [PATCH] conf: Add support for setting timeout and readahead size for
|
||||
network disks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Some disk backends support configuring the readahead buffer or timeout
|
||||
for requests. Add the knobs to the XML.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 63fd46177367c6653c4c986558f6d0e4a700cfcc)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804750
|
||||
Message-Id: <2694bc6f9a327f89d82da18320e7137152915ad3.1584391727.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 16 +++++++++++++
|
||||
docs/schemas/domaincommon.rng | 23 +++++++++++++++++++
|
||||
src/conf/domain_conf.c | 19 +++++++++++++++
|
||||
src/util/virstoragefile.c | 2 ++
|
||||
src/util/virstoragefile.h | 3 +++
|
||||
.../disk-network-http.xml | 2 ++
|
||||
6 files changed, 65 insertions(+)
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 5a10d64e83..2b8f9eabc2 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -2842,6 +2842,8 @@
|
||||
<cookies>
|
||||
<cookie name="test">somevalue</cookie>
|
||||
</cookies>
|
||||
+ <readahead size='65536'/>
|
||||
+ <timeout seconds='6'/>
|
||||
</source>
|
||||
<target dev='hde' bus='ide' tray='open'/>
|
||||
<readonly/>
|
||||
@@ -3392,6 +3394,20 @@
|
||||
must conform to the HTTP specification.
|
||||
<span class="since">Since 6.2.0</span>
|
||||
</dd>
|
||||
+ <dt><code>readahead</code></dt>
|
||||
+ <dd>
|
||||
+ Specifies the size of the readahead buffer for protocols
|
||||
+ which support it. (all 'curl' based drivers in qemu). The size
|
||||
+ is in bytes. Note that '0' is considered as if the value is not
|
||||
+ provided.
|
||||
+ <span class="since">Since 6.2.0</span>
|
||||
+ </dd>
|
||||
+ <dt><code>timeout</code></dt>
|
||||
+ <dd>
|
||||
+ Specifies the connection timeout for protocols which support it.
|
||||
+ Note that '0' is considered as if the value is not provided.
|
||||
+ <span class="since">Since 6.2.0</span>
|
||||
+ </dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index bdf35e64f6..3a0edbed97 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -1808,6 +1808,25 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
+ <define name="diskSourceNetworkProtocolPropsCommon">
|
||||
+ <optional>
|
||||
+ <element name="readahead">
|
||||
+ <attribute name="size">
|
||||
+ <ref name="positiveInteger"/>
|
||||
+ </attribute>
|
||||
+ <empty/>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <element name="timeout">
|
||||
+ <attribute name="seconds">
|
||||
+ <ref name="positiveInteger"/>
|
||||
+ </attribute>
|
||||
+ <empty/>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
+ </define>
|
||||
+
|
||||
<define name="diskSourceNetworkProtocolSSLVerify">
|
||||
<element name="ssl">
|
||||
<attribute name="verify">
|
||||
@@ -1854,6 +1873,7 @@
|
||||
<optional>
|
||||
<ref name="diskSourceNetworkProtocolHTTPCookies"/>
|
||||
</optional>
|
||||
+ <ref name="diskSourceNetworkProtocolPropsCommon"/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
@@ -1873,6 +1893,7 @@
|
||||
<optional>
|
||||
<ref name="diskSourceNetworkProtocolHTTPCookies"/>
|
||||
</optional>
|
||||
+ <ref name="diskSourceNetworkProtocolPropsCommon"/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
@@ -1892,6 +1913,7 @@
|
||||
<optional>
|
||||
<ref name="diskSourceNetworkProtocolSSLVerify"/>
|
||||
</optional>
|
||||
+ <ref name="diskSourceNetworkProtocolPropsCommon"/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
@@ -1910,6 +1932,7 @@
|
||||
<optional>
|
||||
<ref name="encryption"/>
|
||||
</optional>
|
||||
+ <ref name="diskSourceNetworkProtocolPropsCommon"/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index d066d3aac1..8aec85e83c 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -9409,6 +9409,19 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ if (src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP ||
|
||||
+ src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS ||
|
||||
+ src->protocol == VIR_STORAGE_NET_PROTOCOL_FTP ||
|
||||
+ src->protocol == VIR_STORAGE_NET_PROTOCOL_FTPS) {
|
||||
+
|
||||
+ if (virXPathULongLong("string(./readahead/@size)", ctxt, &src->readahead) == -2 ||
|
||||
+ virXPathULongLong("string(./timeout/@seconds)", ctxt, &src->timeout) == -2) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
+ _("invalid readahead size or timeout"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -24413,6 +24426,12 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
|
||||
|
||||
virDomainDiskSourceFormatNetworkCookies(childBuf, src);
|
||||
|
||||
+ if (src->readahead)
|
||||
+ virBufferAsprintf(childBuf, "<readahead size='%llu'/>\n", src->readahead);
|
||||
+
|
||||
+ if (src->timeout)
|
||||
+ virBufferAsprintf(childBuf, "<timeout seconds='%llu'/>\n", src->timeout);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
|
||||
index 6350168d73..7893e054c3 100644
|
||||
--- a/src/util/virstoragefile.c
|
||||
+++ b/src/util/virstoragefile.c
|
||||
@@ -2383,6 +2383,8 @@ virStorageSourceCopy(const virStorageSource *src,
|
||||
def->discard = src->discard;
|
||||
def->detect_zeroes = src->detect_zeroes;
|
||||
def->sslverify = src->sslverify;
|
||||
+ def->readahead = src->readahead;
|
||||
+ def->timeout = src->timeout;
|
||||
|
||||
/* storage driver metadata are not copied */
|
||||
def->drv = NULL;
|
||||
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
|
||||
index 1c7c046ad6..1abdaf89ce 100644
|
||||
--- a/src/util/virstoragefile.h
|
||||
+++ b/src/util/virstoragefile.h
|
||||
@@ -296,6 +296,9 @@ struct _virStorageSource {
|
||||
bool encryptionInherited;
|
||||
virStoragePRDefPtr pr;
|
||||
virTristateBool sslverify;
|
||||
+ /* both values below have 0 as default value */
|
||||
+ unsigned long long readahead; /* size of the readahead buffer in bytes */
|
||||
+ unsigned long long timeout; /* connection timeout in seconds */
|
||||
|
||||
virStorageSourceNVMeDefPtr nvme; /* type == VIR_STORAGE_TYPE_NVME */
|
||||
|
||||
diff --git a/tests/genericxml2xmlindata/disk-network-http.xml b/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
index bafb77c8ec..a8430b8365 100644
|
||||
--- a/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
+++ b/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
@@ -49,6 +49,8 @@
|
||||
<cookie name='test'>testcookievalue</cookie>
|
||||
<cookie name='test2'>blurb</cookie>
|
||||
</cookies>
|
||||
+ <readahead size='65536'/>
|
||||
+ <timeout seconds='10'/>
|
||||
</source>
|
||||
<target dev='vdd' bus='virtio'/>
|
||||
</disk>
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,58 @@
|
||||
From 898e0003ae21e9fbe49995980c8746e9d2ac9b8b Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <898e0003ae21e9fbe49995980c8746e9d2ac9b8b@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 23 Jun 2020 14:23:06 +0200
|
||||
Subject: [PATCH] conf: Don't format http cookies unless
|
||||
VIR_DOMAIN_DEF_FORMAT_SECURE is used
|
||||
|
||||
Starting with 3b076391befc3fe72deb0c244ac6c2b4c100b410
|
||||
(v6.1.0-122-g3b076391be) we support http cookies. Since they may contain
|
||||
somewhat sensitive information we should not format them into the XML
|
||||
unless VIR_DOMAIN_DEF_FORMAT_SECURE is asserted.
|
||||
|
||||
Reported-by: Han Han <hhan@redhat.com>
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Erik Skultety <eskultet@redhat.com>
|
||||
(cherry picked from commit a5b064bf4b17a9884d7d361733737fb614ad8979)
|
||||
|
||||
CVE-2020-14301
|
||||
Message-Id: <592a0b594666f580e743b6bd2b4ddccbd1e0cc7c.1592914898.git.pkrempa@redhat.com>
|
||||
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index ed9ca0e9d8..60962ee7c1 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -24377,11 +24377,15 @@ virDomainSourceDefFormatSeclabel(virBufferPtr buf,
|
||||
|
||||
static void
|
||||
virDomainDiskSourceFormatNetworkCookies(virBufferPtr buf,
|
||||
- virStorageSourcePtr src)
|
||||
+ virStorageSourcePtr src,
|
||||
+ unsigned int flags)
|
||||
{
|
||||
g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
size_t i;
|
||||
|
||||
+ if (!(flags & VIR_DOMAIN_DEF_FORMAT_SECURE))
|
||||
+ return;
|
||||
+
|
||||
for (i = 0; i < src->ncookies; i++) {
|
||||
virBufferEscapeString(&childBuf, "<cookie name='%s'>", src->cookies[i]->name);
|
||||
virBufferEscapeString(&childBuf, "%s</cookie>\n", src->cookies[i]->value);
|
||||
@@ -24442,7 +24446,7 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
|
||||
virTristateBoolTypeToString(src->sslverify));
|
||||
}
|
||||
|
||||
- virDomainDiskSourceFormatNetworkCookies(childBuf, src);
|
||||
+ virDomainDiskSourceFormatNetworkCookies(childBuf, src, flags);
|
||||
|
||||
if (src->readahead)
|
||||
virBufferAsprintf(childBuf, "<readahead size='%llu'/>\n", src->readahead);
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,97 @@
|
||||
From 3ff27fe469c36e5655231f6759150350b17de298 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <3ff27fe469c36e5655231f6759150350b17de298@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 13 Mar 2020 13:08:09 +0100
|
||||
Subject: [PATCH] conf: Don't generate machine names with a dot
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
According to the linked BZ, machined expects either valid
|
||||
hostname or valid FQDN (see systemd commit
|
||||
v239-3092-gd65652f1f2). While in case of multiple dots, a
|
||||
trailing one doesn't violate FQDN, it does violate the rule in
|
||||
case of something simple, like "domain.". But it's safe to remove
|
||||
it in both cases.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1808499
|
||||
Fixes: 45464db8ba502764cf37ec9335770248bdb3d9a8
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 2695191a44eb7375225b4ad073825ed3563a172a)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Message-Id: <355e05e31ec98522fa0e03a0c2c7af8ca097070d.1584101247.git.mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 14 +++++++-------
|
||||
tests/virsystemdtest.c | 5 +++--
|
||||
2 files changed, 10 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 4b297c96bc..b3c4084c38 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -30688,20 +30688,20 @@ static void
|
||||
virDomainMachineNameAppendValid(virBufferPtr buf,
|
||||
const char *name)
|
||||
{
|
||||
- bool skip_dot = false;
|
||||
+ bool skip = true;
|
||||
|
||||
for (; *name; name++) {
|
||||
if (strlen(virBufferCurrentContent(buf)) >= 64)
|
||||
break;
|
||||
|
||||
- if (*name == '.') {
|
||||
- if (!skip_dot)
|
||||
+ if (*name == '.' || *name == '-') {
|
||||
+ if (!skip)
|
||||
virBufferAddChar(buf, *name);
|
||||
- skip_dot = true;
|
||||
+ skip = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
- skip_dot = false;
|
||||
+ skip = false;
|
||||
|
||||
if (!strchr(HOSTNAME_CHARS, *name))
|
||||
continue;
|
||||
@@ -30709,8 +30709,8 @@ virDomainMachineNameAppendValid(virBufferPtr buf,
|
||||
virBufferAddChar(buf, *name);
|
||||
}
|
||||
|
||||
- /* trailing dashes are not allowed */
|
||||
- virBufferTrimChars(buf, "-");
|
||||
+ /* trailing dashes or dots are not allowed */
|
||||
+ virBufferTrimChars(buf, "-.");
|
||||
}
|
||||
|
||||
#undef HOSTNAME_CHARS
|
||||
diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c
|
||||
index 26876850b8..eb510b40e4 100644
|
||||
--- a/tests/virsystemdtest.c
|
||||
+++ b/tests/virsystemdtest.c
|
||||
@@ -733,7 +733,7 @@ mymain(void)
|
||||
TEST_MACHINE("demo", 1, "qemu-1-demo");
|
||||
TEST_MACHINE("demo-name", 2, "qemu-2-demo-name");
|
||||
TEST_MACHINE("demo!name", 3, "qemu-3-demoname");
|
||||
- TEST_MACHINE(".demo", 4, "qemu-4-.demo");
|
||||
+ TEST_MACHINE(".demo", 4, "qemu-4-demo");
|
||||
TEST_MACHINE("bull\U0001f4a9", 5, "qemu-5-bull");
|
||||
TEST_MACHINE("demo..name", 6, "qemu-6-demo.name");
|
||||
TEST_MACHINE("12345678901234567890123456789012345678901234567890123456789", 7,
|
||||
@@ -743,7 +743,8 @@ mymain(void)
|
||||
TEST_MACHINE("kstest-network-device-default-httpks_(c9eed63e-981e-48ec-acdc-56b3f8c5f678)", 100,
|
||||
"qemu-100-kstest-network-device-default-httpksc9eed63e-981e-48ec");
|
||||
TEST_MACHINE("kstest-network-device-default-httpks_(c9eed63e-981e-48ec--cdc-56b3f8c5f678)", 10,
|
||||
- "qemu-10-kstest-network-device-default-httpksc9eed63e-981e-48ec");
|
||||
+ "qemu-10-kstest-network-device-default-httpksc9eed63e-981e-48ec-c");
|
||||
+ TEST_MACHINE("demo.-.test.", 11, "qemu-11-demo.test");
|
||||
|
||||
# define TESTS_PM_SUPPORT_HELPER(name, function) \
|
||||
do { \
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,143 @@
|
||||
From 6d5174acd7530d554ac2651f3e6a5da9f69fe6e4 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <6d5174acd7530d554ac2651f3e6a5da9f69fe6e4@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 19 Feb 2020 15:10:20 +0100
|
||||
Subject: [PATCH] conf: Implement support for <slices> of disk source
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Implement parsing and formatting of the 'storage' slice.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit bbf5d05cfd003e33600009cac7ea98ef1539dd7c)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1791788
|
||||
Message-Id: <d31bb27ae30140c9deb696972ee76a90d7bcc610.1582120424.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 86 ++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 86 insertions(+)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index b46b92aecf..5c11f49463 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -9441,6 +9441,57 @@ virDomainStorageSourceParseBase(const char *type,
|
||||
}
|
||||
|
||||
|
||||
+static virStorageSourceSlicePtr
|
||||
+virDomainStorageSourceParseSlice(xmlNodePtr node,
|
||||
+ xmlXPathContextPtr ctxt)
|
||||
+{
|
||||
+ VIR_XPATH_NODE_AUTORESTORE(ctxt);
|
||||
+ g_autofree char *offset = NULL;
|
||||
+ g_autofree char *size = NULL;
|
||||
+ g_autofree virStorageSourceSlicePtr ret = g_new0(virStorageSourceSlice, 1);
|
||||
+
|
||||
+ ctxt->node = node;
|
||||
+
|
||||
+ if (!(offset = virXPathString("string(./@offset)", ctxt)) ||
|
||||
+ !(size = virXPathString("string(./@size)", ctxt))) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
+ _("missing offset or size attribute of slice"));
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (virStrToLong_ullp(offset, NULL, 10, &ret->offset) < 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("malformed value '%s' of 'offset' attribute of slice"),
|
||||
+ offset);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (virStrToLong_ullp(size, NULL, 10, &ret->size) < 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("malformed value '%s' of 'size' attribute of slice"),
|
||||
+ size);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return g_steal_pointer(&ret);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
+virDomainStorageSourceParseSlices(virStorageSourcePtr src,
|
||||
+ xmlXPathContextPtr ctxt)
|
||||
+{
|
||||
+ xmlNodePtr node;
|
||||
+
|
||||
+ if ((node = virXPathNode("./slices/slice[@type='storage']", ctxt))) {
|
||||
+ if (!(src->sliceStorage = virDomainStorageSourceParseSlice(node, ctxt)))
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/**
|
||||
* virDomainStorageSourceParse:
|
||||
* @node: XML node pointing to the source element to parse
|
||||
@@ -9506,6 +9557,9 @@ virDomainStorageSourceParse(xmlNodePtr node,
|
||||
if (virDomainDiskSourcePRParse(node, ctxt, &src->pr) < 0)
|
||||
return -1;
|
||||
|
||||
+ if (virDomainStorageSourceParseSlices(src, ctxt) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
if (virSecurityDeviceLabelDefParseXML(&src->seclabels, &src->nseclabels,
|
||||
ctxt, flags) < 0)
|
||||
return -1;
|
||||
@@ -24226,6 +24280,36 @@ virDomainDiskSourceFormatPrivateData(virBufferPtr buf,
|
||||
}
|
||||
|
||||
|
||||
+static void
|
||||
+virDomainDiskSourceFormatSlice(virBufferPtr buf,
|
||||
+ const char *slicetype,
|
||||
+ virStorageSourceSlicePtr slice)
|
||||
+{
|
||||
+ g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
|
||||
+
|
||||
+ if (!slice)
|
||||
+ return;
|
||||
+
|
||||
+ virBufferAsprintf(&attrBuf, " type='%s'", slicetype);
|
||||
+ virBufferAsprintf(&attrBuf, " offset='%llu'", slice->offset);
|
||||
+ virBufferAsprintf(&attrBuf, " size='%llu'", slice->size);
|
||||
+
|
||||
+ virXMLFormatElement(buf, "slice", &attrBuf, NULL);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+virDomainDiskSourceFormatSlices(virBufferPtr buf,
|
||||
+ virStorageSourcePtr src)
|
||||
+{
|
||||
+ g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
+
|
||||
+ virDomainDiskSourceFormatSlice(&childBuf, "storage", src->sliceStorage);
|
||||
+
|
||||
+ virXMLFormatElement(buf, "slices", NULL, &childBuf);
|
||||
+}
|
||||
+
|
||||
+
|
||||
/**
|
||||
* virDomainDiskSourceFormat:
|
||||
* @buf: output buffer
|
||||
@@ -24296,6 +24380,8 @@ virDomainDiskSourceFormat(virBufferPtr buf,
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ virDomainDiskSourceFormatSlices(&childBuf, src);
|
||||
+
|
||||
if (src->type != VIR_STORAGE_TYPE_NETWORK)
|
||||
virDomainSourceDefFormatSeclabel(&childBuf, src->nseclabels,
|
||||
src->seclabels, flags);
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,129 @@
|
||||
From eb6bdf4798eea9bae5ddca1fdd13fb5ef6e99596 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <eb6bdf4798eea9bae5ddca1fdd13fb5ef6e99596@dist-git>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Fri, 14 Feb 2020 13:12:35 +0100
|
||||
Subject: [PATCH] conf: Introduce VIR_DOMAIN_TIMER_NAME_ARMVTIMER
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This new timer model will be used to control the behavior of the
|
||||
virtual timer for KVM ARM/virt guests.
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3809e88a87e5898c9cf3a277cb32e20fca8fb2d0)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1762634
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Message-Id: <20200214121237.623948-5-abologna@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/schemas/domaincommon.rng | 1 +
|
||||
src/conf/domain_conf.c | 1 +
|
||||
src/conf/domain_conf.h | 1 +
|
||||
src/libxl/libxl_conf.c | 1 +
|
||||
src/libxl/xen_common.c | 1 +
|
||||
src/qemu/qemu_command.c | 2 ++
|
||||
src/qemu/qemu_domain.c | 3 +++
|
||||
7 files changed, 10 insertions(+)
|
||||
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index 026e753567..19476a2735 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -1239,6 +1239,7 @@
|
||||
<choice>
|
||||
<value>hpet</value>
|
||||
<value>pit</value>
|
||||
+ <value>armvtimer</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
<optional>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 58f72b3b0f..68d9ce9c4e 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -1062,6 +1062,7 @@ VIR_ENUM_IMPL(virDomainTimerName,
|
||||
"tsc",
|
||||
"kvmclock",
|
||||
"hypervclock",
|
||||
+ "armvtimer",
|
||||
);
|
||||
|
||||
VIR_ENUM_IMPL(virDomainTimerTrack,
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index ee8eb3ddc0..ef2c1b80f7 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -1989,6 +1989,7 @@ typedef enum {
|
||||
VIR_DOMAIN_TIMER_NAME_TSC,
|
||||
VIR_DOMAIN_TIMER_NAME_KVMCLOCK,
|
||||
VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK,
|
||||
+ VIR_DOMAIN_TIMER_NAME_ARMVTIMER,
|
||||
|
||||
VIR_DOMAIN_TIMER_NAME_LAST
|
||||
} virDomainTimerNameType;
|
||||
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
|
||||
index 2488bb9d32..ffac890262 100644
|
||||
--- a/src/libxl/libxl_conf.c
|
||||
+++ b/src/libxl/libxl_conf.c
|
||||
@@ -361,6 +361,7 @@ libxlMakeDomBuildInfo(virDomainDefPtr def,
|
||||
case VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK:
|
||||
case VIR_DOMAIN_TIMER_NAME_RTC:
|
||||
case VIR_DOMAIN_TIMER_NAME_PIT:
|
||||
+ case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("unsupported timer type (name) '%s'"),
|
||||
virDomainTimerNameTypeToString(clock.timers[i]->name));
|
||||
diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c
|
||||
index 415549a42c..9a385eba0d 100644
|
||||
--- a/src/libxl/xen_common.c
|
||||
+++ b/src/libxl/xen_common.c
|
||||
@@ -2182,6 +2182,7 @@ xenFormatCPUFeatures(virConfPtr conf, virDomainDefPtr def)
|
||||
case VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK:
|
||||
case VIR_DOMAIN_TIMER_NAME_RTC:
|
||||
case VIR_DOMAIN_TIMER_NAME_PIT:
|
||||
+ case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("unsupported timer type (name) '%s'"),
|
||||
virDomainTimerNameTypeToString(def->clock.timers[i]->name));
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index 0ad09baa1d..e1e19e0fcc 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -6200,6 +6200,7 @@ qemuBuildClockCommandLine(virCommandPtr cmd,
|
||||
case VIR_DOMAIN_TIMER_NAME_TSC:
|
||||
case VIR_DOMAIN_TIMER_NAME_KVMCLOCK:
|
||||
case VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK:
|
||||
+ case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
|
||||
/* Timers above are handled when building -cpu. */
|
||||
case VIR_DOMAIN_TIMER_NAME_LAST:
|
||||
break;
|
||||
@@ -6631,6 +6632,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
|
||||
if (timer->frequency > 0)
|
||||
virBufferAsprintf(&buf, ",tsc-frequency=%lu", timer->frequency);
|
||||
break;
|
||||
+ case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
|
||||
case VIR_DOMAIN_TIMER_NAME_PLATFORM:
|
||||
case VIR_DOMAIN_TIMER_NAME_PIT:
|
||||
case VIR_DOMAIN_TIMER_NAME_RTC:
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index 846d1ecb29..4de4f9da53 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -5504,6 +5504,9 @@ qemuDomainDefValidateClockTimers(const virDomainDef *def,
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
+
|
||||
+ case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
|
||||
+ break;
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,87 @@
|
||||
From 2780cb41f7682741be2bbe662d629dd1bd3b4f6e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2780cb41f7682741be2bbe662d629dd1bd3b4f6e@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 26 Apr 2020 13:04:10 -0400
|
||||
Subject: [PATCH] conf: add new PCI_CONNECT flag AUTOASSIGN
|
||||
|
||||
This new flag will be set for any controller that we decide can have
|
||||
devices assigned to it automatically during PCI device assignment. In
|
||||
the past PCI_CONNECT_TYPE_HOTPLUGGABLE was used for this purpose, but
|
||||
that is overloading that flag, and no longer technically correct; what
|
||||
we *really* want is to auto-assign devices to any pcie-root-port or
|
||||
pcie-switch-downstream-port regardless of whether or not that
|
||||
controller happens to have hotplug enabled.
|
||||
|
||||
This patch just adds the flag, but doesn't use it at all. Note that
|
||||
the numbering of all the other flags was changed in order to insert
|
||||
the new flag near the beginning of the list; that doesn't cause any
|
||||
problem because the connect flags aren't stored anywhere between runs
|
||||
of libvirtd.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit c296a846ad7de3066a17404f4f407d3e1b6d7935)
|
||||
|
||||
https://bugzilla.redhat.com/1802592
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200426170415.18328-8-laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_addr.h | 41 +++++++++++++++++++++--------------------
|
||||
1 file changed, 21 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h
|
||||
index dcb90618f8..40738ddb72 100644
|
||||
--- a/src/conf/domain_addr.h
|
||||
+++ b/src/conf/domain_addr.h
|
||||
@@ -32,26 +32,27 @@ typedef enum {
|
||||
} virPCIDeviceAddressExtensionFlags;
|
||||
|
||||
typedef enum {
|
||||
- VIR_PCI_CONNECT_HOTPLUGGABLE = 1 << 0, /* is hotplug needed/supported */
|
||||
-
|
||||
- /* set for devices that can share a single slot in auto-assignment
|
||||
- * (by assigning one device to each of the 8 functions on the slot)
|
||||
- */
|
||||
- VIR_PCI_CONNECT_AGGREGATE_SLOT = 1 << 1,
|
||||
-
|
||||
- /* kinds of devices as a bitmap so they can be combined (some PCI
|
||||
- * controllers permit connecting multiple types of devices)
|
||||
- */
|
||||
- VIR_PCI_CONNECT_TYPE_PCI_DEVICE = 1 << 2,
|
||||
- VIR_PCI_CONNECT_TYPE_PCIE_DEVICE = 1 << 3,
|
||||
- VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT = 1 << 4,
|
||||
- VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT = 1 << 5,
|
||||
- VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT = 1 << 6,
|
||||
- VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE = 1 << 7,
|
||||
- VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS = 1 << 8,
|
||||
- VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS = 1 << 9,
|
||||
- VIR_PCI_CONNECT_TYPE_PCI_BRIDGE = 1 << 10,
|
||||
- VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE = 1 << 11,
|
||||
+ VIR_PCI_CONNECT_AUTOASSIGN = 1 << 0, /* okay to autoassign a device to this controller */
|
||||
+ VIR_PCI_CONNECT_HOTPLUGGABLE = 1 << 1, /* is hotplug needed/supported */
|
||||
+
|
||||
+ /* set for devices that can share a single slot in auto-assignment
|
||||
+ * (by assigning one device to each of the 8 functions on the slot)
|
||||
+ */
|
||||
+ VIR_PCI_CONNECT_AGGREGATE_SLOT = 1 << 2,
|
||||
+
|
||||
+ /* kinds of devices as a bitmap so they can be combined (some PCI
|
||||
+ * controllers permit connecting multiple types of devices)
|
||||
+ */
|
||||
+ VIR_PCI_CONNECT_TYPE_PCI_DEVICE = 1 << 3,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCIE_DEVICE = 1 << 4,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT = 1 << 5,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT = 1 << 6,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT = 1 << 7,
|
||||
+ VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE = 1 << 8,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS = 1 << 9,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS = 1 << 10,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCI_BRIDGE = 1 << 11,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE = 1 << 12,
|
||||
} virDomainPCIConnectFlags;
|
||||
|
||||
/* a combination of all bits that describe the type of connections
|
||||
--
|
||||
2.26.2
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,395 @@
|
||||
From c811bd72130364673dd4a0d2a997a1d8f675eb71 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <c811bd72130364673dd4a0d2a997a1d8f675eb71@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Wed, 4 Mar 2020 12:42:42 +0100
|
||||
Subject: [PATCH] conf: add virtiofs-related elements and attributes
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Add more elements for tuning the virtiofsd daemon
|
||||
and the vhost-user-fs device:
|
||||
|
||||
<driver type='virtiofs' queue='1024' xattr='on'>
|
||||
<binary path='/usr/libexec/virtiofsd'>
|
||||
<cache mode='always'/>
|
||||
<lock posix='off' flock='off'/>
|
||||
</binary>
|
||||
</driver>
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Tested-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit 66079339847dc942b9b673e3040b56b055a8d8f5)
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1694166
|
||||
Message-Id: <506d0532c6043a9b8c946bdc42c3d9c5529f6fb8.1583322090.git.jtomko@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 25 ++++-
|
||||
docs/schemas/domaincommon.rng | 48 ++++++++
|
||||
src/conf/domain_conf.c | 104 +++++++++++++++++-
|
||||
src/conf/domain_conf.h | 15 +++
|
||||
src/libvirt_private.syms | 1 +
|
||||
.../vhost-user-fs-fd-memory.xml | 6 +-
|
||||
.../vhost-user-fs-hugepages.xml | 1 +
|
||||
7 files changed, 197 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 337ab01316..e9830ab231 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -3936,7 +3936,11 @@
|
||||
<readonly/>
|
||||
</filesystem>
|
||||
<filesystem type='mount' accessmode='passthrough'>
|
||||
- <driver type='virtiofs'/>
|
||||
+ <driver type='virtiofs queue='1024'/>
|
||||
+ <binary path='/usr/libexec/virtiofsd' xattr='on'>
|
||||
+ <cache mode='always'/>
|
||||
+ <lock posix='on' flock='on'/>
|
||||
+ </binary>
|
||||
<source dir='/path'/>
|
||||
<target dir='mount_tag'/>
|
||||
</filesystem>
|
||||
@@ -4063,9 +4067,28 @@
|
||||
<a href="#elementsVirtio">Virtio-specific options</a> can also be
|
||||
set. (<span class="since">Since 3.5.0</span>)
|
||||
</li>
|
||||
+ <li>
|
||||
+ For <code>virtiofs</code>, the <code>queue</code> attribute can be used
|
||||
+ to specify the queue size (i.e. how many requests can the queue fit).
|
||||
+ (<span class="since">Since 6.2.0</span>)
|
||||
+ </li>
|
||||
</ul>
|
||||
</dd>
|
||||
|
||||
+ <dt><code>binary</code></dt>
|
||||
+ <dd>
|
||||
+ The optional <code>binary</code> element can tune the options for virtiofsd.
|
||||
+ All of the following attributes and elements are optional.
|
||||
+ The attribute <code>path</code> can be used to override the path to the daemon.
|
||||
+ Attribute <code>xattr</code> enables the use of filesystem extended attributes.
|
||||
+ Caching can be tuned via the <code>cache</code> element, possible <code>mode</code>
|
||||
+ values being <code>none</code> and <code>always</code>.
|
||||
+ Locking can be controlled via the <code>lock</code>
|
||||
+ element - attributes <code>posix</code> and <code>flock</code> both accepting
|
||||
+ values <code>on</code> or <code>off</code>.
|
||||
+ (<span class="since">Since 6.2.0</span>)
|
||||
+ </dd>
|
||||
+
|
||||
<dt><code>source</code></dt>
|
||||
<dd>
|
||||
The resource on the host that is being accessed in the guest. The
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index 5a9291b443..aa70e340b9 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -2500,6 +2500,9 @@
|
||||
<optional>
|
||||
<ref name="fsDriver"/>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <ref name="fsBinary"/>
|
||||
+ </optional>
|
||||
<interleave>
|
||||
<element name="source">
|
||||
<attribute name="dir">
|
||||
@@ -2649,12 +2652,57 @@
|
||||
<attribute name="type">
|
||||
<value>virtiofs</value>
|
||||
</attribute>
|
||||
+ <optional>
|
||||
+ <attribute name="queue">
|
||||
+ <ref name="unsignedInt"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
<ref name='virtioOptions'/>
|
||||
</group>
|
||||
<empty/>
|
||||
</choice>
|
||||
</element>
|
||||
</define>
|
||||
+ <define name="fsBinary">
|
||||
+ <element name="binary">
|
||||
+ <optional>
|
||||
+ <attribute name="path">
|
||||
+ <ref name="absFilePath"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <attribute name="xattr">
|
||||
+ <ref name="virOnOff"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <element name="cache">
|
||||
+ <optional>
|
||||
+ <attribute name="mode">
|
||||
+ <choice>
|
||||
+ <value>none</value>
|
||||
+ <value>always</value>
|
||||
+ </choice>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <element name="lock">
|
||||
+ <optional>
|
||||
+ <attribute name="posix">
|
||||
+ <ref name="virOnOff"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <attribute name="flock">
|
||||
+ <ref name="virOnOff"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </define>
|
||||
|
||||
<define name="interface-network-attributes">
|
||||
<attribute name="network">
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 31d4828802..3a370e6b90 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -500,6 +500,14 @@ VIR_ENUM_IMPL(virDomainFSModel,
|
||||
"virtio-non-transitional",
|
||||
);
|
||||
|
||||
+VIR_ENUM_IMPL(virDomainFSCacheMode,
|
||||
+ VIR_DOMAIN_FS_CACHE_MODE_LAST,
|
||||
+ "default",
|
||||
+ "none",
|
||||
+ "always",
|
||||
+);
|
||||
+
|
||||
+
|
||||
VIR_ENUM_IMPL(virDomainNet,
|
||||
VIR_DOMAIN_NET_TYPE_LAST,
|
||||
"user",
|
||||
@@ -2322,6 +2330,7 @@ void virDomainFSDefFree(virDomainFSDefPtr def)
|
||||
virDomainDeviceInfoClear(&def->info);
|
||||
VIR_FREE(def->virtio);
|
||||
virObjectUnref(def->privateData);
|
||||
+ VIR_FREE(def->binary);
|
||||
|
||||
VIR_FREE(def);
|
||||
}
|
||||
@@ -11293,6 +11302,63 @@ virDomainFSDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
}
|
||||
}
|
||||
|
||||
+ if (def->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
|
||||
+ g_autofree char *queue_size = virXPathString("string(./driver/@queue)", ctxt);
|
||||
+ g_autofree char *binary = virXPathString("string(./binary/@path)", ctxt);
|
||||
+ g_autofree char *xattr = virXPathString("string(./binary/@xattr)", ctxt);
|
||||
+ g_autofree char *cache = virXPathString("string(./binary/cache/@mode)", ctxt);
|
||||
+ g_autofree char *posix_lock = virXPathString("string(./binary/lock/@posix)", ctxt);
|
||||
+ g_autofree char *flock = virXPathString("string(./binary/lock/@flock)", ctxt);
|
||||
+ int val;
|
||||
+
|
||||
+ if (queue_size && virStrToLong_ull(queue_size, NULL, 10, &def->queue_size) < 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("cannot parse queue size '%s' for virtiofs"),
|
||||
+ queue_size);
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
+ if (binary)
|
||||
+ def->binary = virFileSanitizePath(binary);
|
||||
+
|
||||
+ if (xattr) {
|
||||
+ if ((val = virTristateSwitchTypeFromString(xattr)) <= 0) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("unknown xattr value '%s'"), xattr);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->xattr = val;
|
||||
+ }
|
||||
+
|
||||
+ if (cache) {
|
||||
+ if ((val = virDomainFSCacheModeTypeFromString(cache)) <= 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("cannot parse cache mode '%s' for virtiofs"),
|
||||
+ cache);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->cache = val;
|
||||
+ }
|
||||
+
|
||||
+ if (posix_lock) {
|
||||
+ if ((val = virTristateSwitchTypeFromString(posix_lock)) <= 0) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("unknown posix lock value '%s'"), posix_lock);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->posix_lock = val;
|
||||
+ }
|
||||
+
|
||||
+ if (flock) {
|
||||
+ if ((val = virTristateSwitchTypeFromString(flock)) <= 0) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("unknown flock value '%s'"), flock);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->flock = val;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (format) {
|
||||
if ((def->format = virStorageFileFormatTypeFromString(format)) <= 0) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
@@ -24994,6 +25060,9 @@ virDomainFSDefFormat(virBufferPtr buf,
|
||||
const char *wrpolicy = virDomainFSWrpolicyTypeToString(def->wrpolicy);
|
||||
const char *src = def->src->path;
|
||||
g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
|
||||
+ g_auto(virBuffer) driverBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
+ g_auto(virBuffer) binaryAttrBuf = VIR_BUFFER_INITIALIZER;
|
||||
+ g_auto(virBuffer) binaryBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
|
||||
if (!type) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
@@ -25017,6 +25086,8 @@ virDomainFSDefFormat(virBufferPtr buf,
|
||||
virBufferAddLit(buf, ">\n");
|
||||
|
||||
virBufferAdjustIndent(buf, 2);
|
||||
+ virBufferAdjustIndent(&driverBuf, 2);
|
||||
+ virBufferAdjustIndent(&binaryBuf, 2);
|
||||
if (def->fsdriver) {
|
||||
virBufferAsprintf(&driverAttrBuf, " type='%s'", fsdriver);
|
||||
|
||||
@@ -25028,11 +25099,42 @@ virDomainFSDefFormat(virBufferPtr buf,
|
||||
if (def->wrpolicy)
|
||||
virBufferAsprintf(&driverAttrBuf, " wrpolicy='%s'", wrpolicy);
|
||||
|
||||
+ if (def->queue_size)
|
||||
+ virBufferAsprintf(&driverAttrBuf, " queue='%llu'", def->queue_size);
|
||||
+
|
||||
+ }
|
||||
+
|
||||
+ if (def->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
|
||||
+ g_auto(virBuffer) lockAttrBuf = VIR_BUFFER_INITIALIZER;
|
||||
+ virBufferEscapeString(&binaryAttrBuf, " path='%s'", def->binary);
|
||||
+
|
||||
+ if (def->xattr != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&binaryAttrBuf, " xattr='%s'",
|
||||
+ virTristateSwitchTypeToString(def->xattr));
|
||||
+ }
|
||||
+
|
||||
+ if (def->cache != VIR_DOMAIN_FS_CACHE_MODE_DEFAULT) {
|
||||
+ virBufferAsprintf(&binaryBuf, "<cache mode='%s'/>\n",
|
||||
+ virDomainFSCacheModeTypeToString(def->cache));
|
||||
+ }
|
||||
+
|
||||
+ if (def->posix_lock != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&lockAttrBuf, " posix='%s'",
|
||||
+ virTristateSwitchTypeToString(def->posix_lock));
|
||||
+ }
|
||||
+
|
||||
+ if (def->flock != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&lockAttrBuf, " flock='%s'",
|
||||
+ virTristateSwitchTypeToString(def->flock));
|
||||
+ }
|
||||
+
|
||||
+ virXMLFormatElement(&binaryBuf, "lock", &lockAttrBuf, NULL);
|
||||
}
|
||||
|
||||
virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio);
|
||||
|
||||
- virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL);
|
||||
+ virXMLFormatElement(buf, "driver", &driverAttrBuf, &driverBuf);
|
||||
+ virXMLFormatElement(buf, "binary", &binaryAttrBuf, &binaryBuf);
|
||||
|
||||
switch (def->type) {
|
||||
case VIR_DOMAIN_FS_TYPE_MOUNT:
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index 921cc42a57..2a382ede72 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -802,6 +802,14 @@ typedef enum {
|
||||
VIR_DOMAIN_FS_MODEL_LAST
|
||||
} virDomainFSModel;
|
||||
|
||||
+typedef enum {
|
||||
+ VIR_DOMAIN_FS_CACHE_MODE_DEFAULT = 0,
|
||||
+ VIR_DOMAIN_FS_CACHE_MODE_NONE,
|
||||
+ VIR_DOMAIN_FS_CACHE_MODE_ALWAYS,
|
||||
+
|
||||
+ VIR_DOMAIN_FS_CACHE_MODE_LAST
|
||||
+} virDomainFSCacheMode;
|
||||
+
|
||||
struct _virDomainFSDef {
|
||||
int type;
|
||||
int fsdriver; /* enum virDomainFSDriverType */
|
||||
@@ -817,6 +825,12 @@ struct _virDomainFSDef {
|
||||
unsigned long long space_hard_limit; /* in bytes */
|
||||
unsigned long long space_soft_limit; /* in bytes */
|
||||
bool symlinksResolved;
|
||||
+ char *binary;
|
||||
+ unsigned long long queue_size;
|
||||
+ virTristateSwitch xattr;
|
||||
+ virDomainFSCacheMode cache;
|
||||
+ virTristateSwitch posix_lock;
|
||||
+ virTristateSwitch flock;
|
||||
virDomainVirtioOptionsPtr virtio;
|
||||
virObjectPtr privateData;
|
||||
};
|
||||
@@ -3437,6 +3451,7 @@ VIR_ENUM_DECL(virDomainFSDriver);
|
||||
VIR_ENUM_DECL(virDomainFSAccessMode);
|
||||
VIR_ENUM_DECL(virDomainFSWrpolicy);
|
||||
VIR_ENUM_DECL(virDomainFSModel);
|
||||
+VIR_ENUM_DECL(virDomainFSCacheMode);
|
||||
VIR_ENUM_DECL(virDomainNet);
|
||||
VIR_ENUM_DECL(virDomainNetBackend);
|
||||
VIR_ENUM_DECL(virDomainNetVirtioTxMode);
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index bc2858fc00..5dc99e03cf 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -389,6 +389,7 @@ virDomainDiskSourceFormat;
|
||||
virDomainDiskTranslateSourcePool;
|
||||
virDomainFeatureTypeFromString;
|
||||
virDomainFeatureTypeToString;
|
||||
+virDomainFSCacheModeTypeToString;
|
||||
virDomainFSDefFree;
|
||||
virDomainFSDefNew;
|
||||
virDomainFSDriverTypeToString;
|
||||
diff --git a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
index a6b6279fb8..f6bb663e97 100644
|
||||
--- a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
+++ b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
@@ -27,7 +27,11 @@
|
||||
<controller type='usb' index='0' model='none'/>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<filesystem type='mount' accessmode='passthrough'>
|
||||
- <driver type='virtiofs'/>
|
||||
+ <driver type='virtiofs' queue='1024'/>
|
||||
+ <binary path='/usr/libexec/virtiofsd' xattr='on'>
|
||||
+ <cache mode='always'/>
|
||||
+ <lock posix='off' flock='off'/>
|
||||
+ </binary>
|
||||
<source dir='/path'/>
|
||||
<target dir='mount_tag'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
diff --git a/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
index 70df7b890d..96b9774704 100644
|
||||
--- a/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
+++ b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
@@ -63,6 +63,7 @@
|
||||
</controller>
|
||||
<filesystem type='mount' accessmode='passthrough'>
|
||||
<driver type='virtiofs'/>
|
||||
+ <binary path='/usr/libexec/virtiofsd'/>
|
||||
<source dir='/path'/>
|
||||
<target dir='mount_tag'/>
|
||||
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,146 @@
|
||||
From 100ae962cd0f4dbfd5270bc2d61f05ec1c524c0a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <100ae962cd0f4dbfd5270bc2d61f05ec1c524c0a@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 4 Feb 2020 15:07:40 +0100
|
||||
Subject: [PATCH] conf: backup: Allow configuration of names exported via NBD
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
If users wish to use different name for exported disks or bitmaps
|
||||
the new fields allow to do so. Additionally they also document the
|
||||
current settings.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
|
||||
Reviewed-by: Eric Blake <eblake@redhat.com>
|
||||
(cherry picked from commit 12ccd8d4db12d71a270d903701a8edb83d41f127)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1207659
|
||||
Message-Id: <8043f75d8d4b4ae7e7ae3671d71407f733e6a3cf.1580824112.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/formatbackup.html.in | 9 +++++++++
|
||||
docs/schemas/domainbackup.rng | 8 ++++++++
|
||||
src/conf/backup_conf.c | 10 ++++++++++
|
||||
src/conf/backup_conf.h | 2 ++
|
||||
tests/domainbackupxml2xmlin/backup-pull-seclabel.xml | 2 +-
|
||||
tests/domainbackupxml2xmlout/backup-pull-seclabel.xml | 2 +-
|
||||
6 files changed, 31 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/docs/formatbackup.html.in b/docs/formatbackup.html.in
|
||||
index 1c690901c7..543d913072 100644
|
||||
--- a/docs/formatbackup.html.in
|
||||
+++ b/docs/formatbackup.html.in
|
||||
@@ -85,6 +85,15 @@
|
||||
<dd>Setting this attribute to <code>yes</code>(default) specifies
|
||||
that the disk should take part in the backup and using
|
||||
<code>no</code> excludes the disk from the backup.</dd>
|
||||
+ <dt><code>exportname</code></dt>
|
||||
+ <dd>Allows modification of the NBD export name for the given disk.
|
||||
+ By default equal to disk target.
|
||||
+ Valid only for pull mode backups.</dd>
|
||||
+ <dt><code>exportbitmap</code></dt>
|
||||
+ <dd>Allows modification of the name of the bitmap describing dirty
|
||||
+ blocks for an incremental backup exported via NBD export name
|
||||
+ for the given disk.
|
||||
+ Valid only for pull mode backups.</dd>
|
||||
<dt><code>type</code></dt>
|
||||
<dd>A mandatory attribute to describe the type of the
|
||||
disk, except when <code>backup='no'</code> is
|
||||
diff --git a/docs/schemas/domainbackup.rng b/docs/schemas/domainbackup.rng
|
||||
index c1e4d80302..395ea841f9 100644
|
||||
--- a/docs/schemas/domainbackup.rng
|
||||
+++ b/docs/schemas/domainbackup.rng
|
||||
@@ -165,6 +165,14 @@
|
||||
<attribute name='name'>
|
||||
<ref name='diskTarget'/>
|
||||
</attribute>
|
||||
+ <optional>
|
||||
+ <attribute name='exportname'>
|
||||
+ <text/>
|
||||
+ </attribute>
|
||||
+ <attribute name='exportbitmap'>
|
||||
+ <text/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
<choice>
|
||||
<group>
|
||||
<attribute name='backup'>
|
||||
diff --git a/src/conf/backup_conf.c b/src/conf/backup_conf.c
|
||||
index 61dc8cd4b2..b370b686f1 100644
|
||||
--- a/src/conf/backup_conf.c
|
||||
+++ b/src/conf/backup_conf.c
|
||||
@@ -71,6 +71,8 @@ virDomainBackupDefFree(virDomainBackupDefPtr def)
|
||||
virDomainBackupDiskDefPtr disk = def->disks + i;
|
||||
|
||||
g_free(disk->name);
|
||||
+ g_free(disk->exportname);
|
||||
+ g_free(disk->exportbitmap);
|
||||
virObjectUnref(disk->store);
|
||||
}
|
||||
|
||||
@@ -124,6 +126,11 @@ virDomainBackupDiskDefParseXML(xmlNodePtr node,
|
||||
if (def->backup == VIR_TRISTATE_BOOL_NO)
|
||||
return 0;
|
||||
|
||||
+ if (!push) {
|
||||
+ def->exportname = virXMLPropString(node, "exportname");
|
||||
+ def->exportbitmap = virXMLPropString(node, "exportbitmap");
|
||||
+ }
|
||||
+
|
||||
if (internal) {
|
||||
if (!(state = virXMLPropString(node, "state")) ||
|
||||
(tmp = virDomainBackupDiskStateTypeFromString(state)) < 0) {
|
||||
@@ -333,6 +340,9 @@ virDomainBackupDiskDefFormat(virBufferPtr buf,
|
||||
if (disk->backup == VIR_TRISTATE_BOOL_YES) {
|
||||
virBufferAsprintf(&attrBuf, " type='%s'", virStorageTypeToString(disk->store->type));
|
||||
|
||||
+ virBufferEscapeString(&attrBuf, " exportname='%s'", disk->exportname);
|
||||
+ virBufferEscapeString(&attrBuf, " exportbitmap='%s'", disk->exportbitmap);
|
||||
+
|
||||
if (disk->store->format > 0)
|
||||
virBufferEscapeString(&childBuf, "<driver type='%s'/>\n",
|
||||
virStorageFileFormatTypeToString(disk->store->format));
|
||||
diff --git a/src/conf/backup_conf.h b/src/conf/backup_conf.h
|
||||
index 7cf44245d4..672fd52ee7 100644
|
||||
--- a/src/conf/backup_conf.h
|
||||
+++ b/src/conf/backup_conf.h
|
||||
@@ -51,6 +51,8 @@ typedef virDomainBackupDiskDef *virDomainBackupDiskDefPtr;
|
||||
struct _virDomainBackupDiskDef {
|
||||
char *name; /* name matching the <target dev='...' of the domain */
|
||||
virTristateBool backup; /* whether backup is requested */
|
||||
+ char *exportname; /* name of the NBD export for pull mode backup */
|
||||
+ char *exportbitmap; /* name of the bitmap exposed in NBD for pull mode backup */
|
||||
|
||||
/* details of target for push-mode, or of the scratch file for pull-mode */
|
||||
virStorageSourcePtr store;
|
||||
diff --git a/tests/domainbackupxml2xmlin/backup-pull-seclabel.xml b/tests/domainbackupxml2xmlin/backup-pull-seclabel.xml
|
||||
index a00d8758bb..4e6e602c19 100644
|
||||
--- a/tests/domainbackupxml2xmlin/backup-pull-seclabel.xml
|
||||
+++ b/tests/domainbackupxml2xmlin/backup-pull-seclabel.xml
|
||||
@@ -2,7 +2,7 @@
|
||||
<incremental>1525889631</incremental>
|
||||
<server transport='tcp' name='localhost' port='10809'/>
|
||||
<disks>
|
||||
- <disk name='vda' type='file'>
|
||||
+ <disk name='vda' type='file' exportname='test-vda' exportbitmap='blah'>
|
||||
<driver type='qcow2'/>
|
||||
<scratch file='/path/to/file'>
|
||||
<seclabel model='dac' relabel='no'/>
|
||||
diff --git a/tests/domainbackupxml2xmlout/backup-pull-seclabel.xml b/tests/domainbackupxml2xmlout/backup-pull-seclabel.xml
|
||||
index c631c9b979..450f007d3a 100644
|
||||
--- a/tests/domainbackupxml2xmlout/backup-pull-seclabel.xml
|
||||
+++ b/tests/domainbackupxml2xmlout/backup-pull-seclabel.xml
|
||||
@@ -2,7 +2,7 @@
|
||||
<incremental>1525889631</incremental>
|
||||
<server transport='tcp' name='localhost' port='10809'/>
|
||||
<disks>
|
||||
- <disk name='vda' backup='yes' type='file'>
|
||||
+ <disk name='vda' backup='yes' type='file' exportname='test-vda' exportbitmap='blah'>
|
||||
<driver type='qcow2'/>
|
||||
<scratch file='/path/to/file'>
|
||||
<seclabel model='dac' relabel='no'/>
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,67 @@
|
||||
From 7f5c44bfd2b6290e142380775b6a6205ccc43840 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <7f5c44bfd2b6290e142380775b6a6205ccc43840@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 23 Jun 2020 12:23:37 +0200
|
||||
Subject: [PATCH] conf: backup: Store incremental backup checkpoint name
|
||||
per-disk
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
In preparation to allow heterogenous backups store the 'incremental'
|
||||
field per-disk and fill it by default from the per-backup field.
|
||||
|
||||
Having this will be important once we'll want to allow incremental
|
||||
backup working while hotplugging a new disk.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Eric Blake <eblake@redhat.com>
|
||||
(cherry picked from commit b8295160c36e555d8bcaef5015d0c1e3ae85fb17)
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804593
|
||||
Message-Id: <ee6c31ce5f3400523559793fe40e789656068f7c.1592906423.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/backup_conf.c | 8 ++++++++
|
||||
src/conf/backup_conf.h | 1 +
|
||||
2 files changed, 9 insertions(+)
|
||||
|
||||
diff --git a/src/conf/backup_conf.c b/src/conf/backup_conf.c
|
||||
index 64c8f6cc09..58fb3ec759 100644
|
||||
--- a/src/conf/backup_conf.c
|
||||
+++ b/src/conf/backup_conf.c
|
||||
@@ -71,6 +71,7 @@ virDomainBackupDefFree(virDomainBackupDefPtr def)
|
||||
virDomainBackupDiskDefPtr disk = def->disks + i;
|
||||
|
||||
g_free(disk->name);
|
||||
+ g_free(disk->incremental);
|
||||
g_free(disk->exportname);
|
||||
g_free(disk->exportbitmap);
|
||||
virObjectUnref(disk->store);
|
||||
@@ -503,5 +504,12 @@ virDomainBackupAlignDisks(virDomainBackupDefPtr def,
|
||||
}
|
||||
}
|
||||
|
||||
+ for (i = 0; i < def->ndisks; i++) {
|
||||
+ virDomainBackupDiskDefPtr backupdisk = &def->disks[i];
|
||||
+
|
||||
+ if (def->incremental && !backupdisk->incremental)
|
||||
+ backupdisk->incremental = g_strdup(def->incremental);
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
diff --git a/src/conf/backup_conf.h b/src/conf/backup_conf.h
|
||||
index 672fd52ee7..7ce7a46ad4 100644
|
||||
--- a/src/conf/backup_conf.h
|
||||
+++ b/src/conf/backup_conf.h
|
||||
@@ -51,6 +51,7 @@ typedef virDomainBackupDiskDef *virDomainBackupDiskDefPtr;
|
||||
struct _virDomainBackupDiskDef {
|
||||
char *name; /* name matching the <target dev='...' of the domain */
|
||||
virTristateBool backup; /* whether backup is requested */
|
||||
+ char *incremental; /* name of the starting point checkpoint of an incremental backup */
|
||||
char *exportname; /* name of the NBD export for pull mode backup */
|
||||
char *exportbitmap; /* name of the bitmap exposed in NBD for pull mode backup */
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,51 @@
|
||||
From 28094095fe6e4b05b25e459a34d93d195b7afb62 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <28094095fe6e4b05b25e459a34d93d195b7afb62@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 26 Apr 2020 13:17:02 -0400
|
||||
Subject: [PATCH] conf: check HOTPLUGGABLE connect flag when validating a PCI
|
||||
address
|
||||
|
||||
The HOTPLUGGABLE flag is set for appropriates buses in a PCI address
|
||||
set, and thnis patch updates virDomainPCIAddressFlagsCompatible() to
|
||||
check the HOTPLUGGABLE flag when searching for a suitable bus/slot for
|
||||
a device. No devices request HOTPLUGGABLE though (yet), so there is no
|
||||
observable effect.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit a283189f8c64882681ea99259ccfc8d1b8e524dd)
|
||||
|
||||
https://bugzilla.redhat.com/1802592
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200426171703.18808-2-laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_addr.c | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
|
||||
index cc45a0bbf1..ed41eca114 100644
|
||||
--- a/src/conf/domain_addr.c
|
||||
+++ b/src/conf/domain_addr.c
|
||||
@@ -376,6 +376,18 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
|
||||
return false;
|
||||
}
|
||||
|
||||
+ if ((devFlags & VIR_PCI_CONNECT_HOTPLUGGABLE) &&
|
||||
+ !(busFlags & VIR_PCI_CONNECT_HOTPLUGGABLE)) {
|
||||
+ if (reportError) {
|
||||
+ virReportError(errType,
|
||||
+ _("The device at PCI address %s requires "
|
||||
+ "hotplug capability, but the PCI controller "
|
||||
+ "with index='%d' doesn't support hotplug"),
|
||||
+ addrStr, addr->bus);
|
||||
+ }
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
/* If this bus doesn't allow the type of connection (PCI
|
||||
* vs. PCIe) required by the device, or if the device requires
|
||||
* hot-plug and this bus doesn't have it, return false.
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,70 @@
|
||||
From f9fdeb29a61a98868d1a9f5284a85c57f826d6d1 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f9fdeb29a61a98868d1a9f5284a85c57f826d6d1@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Fri, 13 Mar 2020 13:08:08 +0100
|
||||
Subject: [PATCH] conf: do not generate machine names ending with a dash
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
As of systemd commit:
|
||||
|
||||
commit d65652f1f21a4b0c59711320f34266c635393c89
|
||||
Author: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
|
||||
CommitDate: 2018-12-10 09:56:56 +0100
|
||||
|
||||
Partially unify hostname_is_valid() and dns_name_is_valid()
|
||||
|
||||
Dashes are no longer allowed at the end of machine names.
|
||||
|
||||
Trim the trailing dashes from the generated name before passing
|
||||
it to machined.
|
||||
|
||||
Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=1790409
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Reviewed-by: Erik Skultety <eskultet@redhat.com>
|
||||
(cherry picked from commit 45464db8ba502764cf37ec9335770248bdb3d9a8)
|
||||
|
||||
Prerequisite for: https://bugzilla.redhat.com/show_bug.cgi?id=1808499
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Message-Id: <ae17f80d69ee7772d32dd5c34c332be6b77e7afb.1584101247.git.mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 3 +++
|
||||
tests/virsystemdtest.c | 4 ++++
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 77e3d25a2d..4b297c96bc 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -30708,6 +30708,9 @@ virDomainMachineNameAppendValid(virBufferPtr buf,
|
||||
|
||||
virBufferAddChar(buf, *name);
|
||||
}
|
||||
+
|
||||
+ /* trailing dashes are not allowed */
|
||||
+ virBufferTrimChars(buf, "-");
|
||||
}
|
||||
|
||||
#undef HOSTNAME_CHARS
|
||||
diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c
|
||||
index 9b95ca6789..26876850b8 100644
|
||||
--- a/tests/virsystemdtest.c
|
||||
+++ b/tests/virsystemdtest.c
|
||||
@@ -740,6 +740,10 @@ mymain(void)
|
||||
"qemu-7-123456789012345678901234567890123456789012345678901234567");
|
||||
TEST_MACHINE("123456789012345678901234567890123456789012345678901234567890", 8,
|
||||
"qemu-8-123456789012345678901234567890123456789012345678901234567");
|
||||
+ TEST_MACHINE("kstest-network-device-default-httpks_(c9eed63e-981e-48ec-acdc-56b3f8c5f678)", 100,
|
||||
+ "qemu-100-kstest-network-device-default-httpksc9eed63e-981e-48ec");
|
||||
+ TEST_MACHINE("kstest-network-device-default-httpks_(c9eed63e-981e-48ec--cdc-56b3f8c5f678)", 10,
|
||||
+ "qemu-10-kstest-network-device-default-httpksc9eed63e-981e-48ec");
|
||||
|
||||
# define TESTS_PM_SUPPORT_HELPER(name, function) \
|
||||
do { \
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,73 @@
|
||||
From 04792aa0715be4e779fca81fa8f7e9f2c5c1b71f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <04792aa0715be4e779fca81fa8f7e9f2c5c1b71f@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 4 Feb 2020 15:08:00 +0100
|
||||
Subject: [PATCH] conf: domain: Remove checking of return value of
|
||||
virHashCreateFull
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This module has last two direct checks whether the value returned by
|
||||
virHashCreateFull is NULL. Remove them so that static analyzers don't
|
||||
get the false idea that checking the value is necessary.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 2a5ea0a0c1843c7c43e673b3d2082cc3abdef602)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1793263
|
||||
Message-Id: <2e310ad44b341511caba735608bc0bba4b072d6c.1580824112.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/domain_addr.c | 30 ++++++++++++------------------
|
||||
1 file changed, 12 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
|
||||
index 607ba56efd..f07b3d9725 100644
|
||||
--- a/src/conf/domain_addr.c
|
||||
+++ b/src/conf/domain_addr.c
|
||||
@@ -1044,28 +1044,22 @@ virDomainPCIAddressSetExtensionAlloc(virDomainPCIAddressSetPtr addrs,
|
||||
if (VIR_ALLOC(addrs->zpciIds) < 0)
|
||||
return -1;
|
||||
|
||||
- if (!(addrs->zpciIds->uids = virHashCreateFull(10, NULL,
|
||||
- virZPCIAddrKeyCode,
|
||||
- virZPCIAddrKeyEqual,
|
||||
- virZPCIAddrKeyCopy,
|
||||
- virZPCIAddrKeyPrintHuman,
|
||||
- virZPCIAddrKeyFree)))
|
||||
- goto error;
|
||||
+ addrs->zpciIds->uids = virHashCreateFull(10, NULL,
|
||||
+ virZPCIAddrKeyCode,
|
||||
+ virZPCIAddrKeyEqual,
|
||||
+ virZPCIAddrKeyCopy,
|
||||
+ virZPCIAddrKeyPrintHuman,
|
||||
+ virZPCIAddrKeyFree);
|
||||
|
||||
- if (!(addrs->zpciIds->fids = virHashCreateFull(10, NULL,
|
||||
- virZPCIAddrKeyCode,
|
||||
- virZPCIAddrKeyEqual,
|
||||
- virZPCIAddrKeyCopy,
|
||||
- virZPCIAddrKeyPrintHuman,
|
||||
- virZPCIAddrKeyFree)))
|
||||
- goto error;
|
||||
+ addrs->zpciIds->fids = virHashCreateFull(10, NULL,
|
||||
+ virZPCIAddrKeyCode,
|
||||
+ virZPCIAddrKeyEqual,
|
||||
+ virZPCIAddrKeyCopy,
|
||||
+ virZPCIAddrKeyPrintHuman,
|
||||
+ virZPCIAddrKeyFree);
|
||||
}
|
||||
|
||||
return 0;
|
||||
-
|
||||
- error:
|
||||
- virDomainPCIAddressSetExtensionFree(addrs);
|
||||
- return -1;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,47 @@
|
||||
From 5ec240811e391f97378d0b6b726e0dee13ae8a40 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5ec240811e391f97378d0b6b726e0dee13ae8a40@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 26 Apr 2020 13:17:03 -0400
|
||||
Subject: [PATCH] conf: during PCI hotplug, require that the controller support
|
||||
hotplug
|
||||
|
||||
Before this patch we would simply rely on QEMU failing to attach the
|
||||
device. Since we have a flag in the address set telling us which
|
||||
controllers support hotplug, we can fail the operation sooner.
|
||||
|
||||
This also assures that when hotplugging with no provided PCI address,
|
||||
that we skip any controllers with hotplug='off', and attempt to assign
|
||||
the device to a controller that not only supports hotplug, but also
|
||||
has it enabled.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 7118bdee1550b6022e7362402ca8204add4cf80b)
|
||||
|
||||
https://bugzilla.redhat.com/1802592
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200426171703.18808-3-laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_addr.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
|
||||
index ed41eca114..34ea7bc051 100644
|
||||
--- a/src/conf/domain_addr.c
|
||||
+++ b/src/conf/domain_addr.c
|
||||
@@ -936,6 +936,11 @@ virDomainPCIAddressEnsureAddr(virDomainPCIAddressSetPtr addrs,
|
||||
if (!flags)
|
||||
return 0;
|
||||
|
||||
+ /* This function is only called during hotplug, so we require hotplug
|
||||
+ * support from the controller.
|
||||
+ */
|
||||
+ flags |= VIR_PCI_CONNECT_HOTPLUGGABLE;
|
||||
+
|
||||
if (!(addrStr = virPCIDeviceAddressAsString(&dev->addr.pci)))
|
||||
goto cleanup;
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,290 @@
|
||||
From 12892e0376be4dc07dc317b807f2ec86c27a94b2 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <12892e0376be4dc07dc317b807f2ec86c27a94b2@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 26 Apr 2020 13:04:07 -0400
|
||||
Subject: [PATCH] conf: new attribute "hotplug" for pci controllers
|
||||
|
||||
a <controller type='pci'...> element can now have a "hotplug"
|
||||
attribute in the <target> subelement. This is intended to control
|
||||
whether or not the slot(s) of the controller support
|
||||
hotplugging/unplugging a device:
|
||||
|
||||
<controller type='pci' model='pcie-root-port'>
|
||||
<target hotplug='off'/>
|
||||
</controller>
|
||||
|
||||
The default value of hotplug is "on".
|
||||
|
||||
Since support for configuring such an option is hypervisor-dependent
|
||||
(and will vary among different types of PCI controllers even on a
|
||||
single hypervisor), no validation is done in this patch - that
|
||||
validation will be done in the patch that wires support for the
|
||||
setting into the hypervisor.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 78f4d5e6f188a9f0f8d6da6b1fe78b9f4172d9ad)
|
||||
|
||||
https://bugzilla.redhat.com/1802592
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
|
||||
Conflicts/Changes from upstread:
|
||||
|
||||
tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml:
|
||||
|
||||
had to be modified to remove reference to the qemu64 CPU type.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200426170415.18328-5-laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 11 +++
|
||||
docs/schemas/domaincommon.rng | 5 ++
|
||||
src/conf/domain_conf.c | 20 +++++-
|
||||
src/conf/domain_conf.h | 1 +
|
||||
.../pcie-root-port-nohotplug.xml | 35 ++++++++++
|
||||
...pcie-root-port-nohotplug.x86_64-latest.xml | 67 +++++++++++++++++++
|
||||
tests/qemuxml2xmltest.c | 2 +-
|
||||
7 files changed, 139 insertions(+), 2 deletions(-)
|
||||
create mode 100644 tests/qemuxml2argvdata/pcie-root-port-nohotplug.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 9c588185df..76799f5ffc 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -4651,6 +4651,17 @@
|
||||
which is visible to the virtual machine. If set, port must be
|
||||
between 0 and 255.
|
||||
</dd>
|
||||
+ <dt><code>hotplug</code></dt>
|
||||
+ <dd>
|
||||
+ pcie-root-port and pcie-switch-downstream-port controllers can
|
||||
+ also have a <code>hotplug</code> attribute in
|
||||
+ the <code><target></code> subelement, which is used to
|
||||
+ disable hotplug/unplug of devices on a particular
|
||||
+ controller. The default setting of <code>hotplug</code>
|
||||
+ is <code>on</code>; it should be set to <code>off</code> to
|
||||
+ disable hotplug/unplug of devices on a particular controller.
|
||||
+ <span class="since">Since 6.3.0</span>
|
||||
+ </dd>
|
||||
<dt><code>busNr</code></dt>
|
||||
<dd>
|
||||
pci-expander-bus and pcie-expander-bus controllers can have an
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index dd8f27243a..9fda5f17e0 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -2475,6 +2475,11 @@
|
||||
<ref name='uint8'/>
|
||||
</attribute>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <attribute name='hotplug'>
|
||||
+ <ref name="virOnOff"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
<optional>
|
||||
<element name='node'>
|
||||
<ref name='unsignedInt'/>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 28160a2967..ed9ca0e9d8 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -10933,6 +10933,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
g_autofree char *port = NULL;
|
||||
g_autofree char *busNr = NULL;
|
||||
g_autofree char *targetIndex = NULL;
|
||||
+ g_autofree char *hotplug = NULL;
|
||||
g_autofree char *ioeventfd = NULL;
|
||||
g_autofree char *portsStr = NULL;
|
||||
g_autofree char *iothread = NULL;
|
||||
@@ -11004,6 +11005,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
chassis = virXMLPropString(cur, "chassis");
|
||||
port = virXMLPropString(cur, "port");
|
||||
busNr = virXMLPropString(cur, "busNr");
|
||||
+ hotplug = virXMLPropString(cur, "hotplug");
|
||||
targetIndex = virXMLPropString(cur, "index");
|
||||
processedTarget = true;
|
||||
}
|
||||
@@ -11240,6 +11242,17 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
}
|
||||
def->opts.pciopts.numaNode = numaNode;
|
||||
}
|
||||
+ if (hotplug) {
|
||||
+ int val = virTristateSwitchTypeFromString(hotplug);
|
||||
+
|
||||
+ if (val <= 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("PCI controller unrecognized hotplug setting '%s'"),
|
||||
+ hotplug);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->opts.pciopts.hotplug = val;
|
||||
+ }
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: {
|
||||
g_autofree char *gntframes = virXMLPropString(node, "maxGrantFrames");
|
||||
@@ -25112,7 +25125,8 @@ virDomainControllerDefFormat(virBufferPtr buf,
|
||||
def->opts.pciopts.port != -1 ||
|
||||
def->opts.pciopts.busNr != -1 ||
|
||||
def->opts.pciopts.targetIndex != -1 ||
|
||||
- def->opts.pciopts.numaNode != -1) {
|
||||
+ def->opts.pciopts.numaNode != -1 ||
|
||||
+ def->opts.pciopts.hotplug != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
virBufferAddLit(&childBuf, "<target");
|
||||
if (def->opts.pciopts.chassisNr != -1)
|
||||
virBufferAsprintf(&childBuf, " chassisNr='%d'",
|
||||
@@ -25129,6 +25143,10 @@ virDomainControllerDefFormat(virBufferPtr buf,
|
||||
if (def->opts.pciopts.targetIndex != -1)
|
||||
virBufferAsprintf(&childBuf, " index='%d'",
|
||||
def->opts.pciopts.targetIndex);
|
||||
+ if (def->opts.pciopts.hotplug != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&childBuf, " hotplug='%s'",
|
||||
+ virTristateSwitchTypeToString(def->opts.pciopts.hotplug));
|
||||
+ }
|
||||
if (def->opts.pciopts.numaNode == -1) {
|
||||
virBufferAddLit(&childBuf, "/>\n");
|
||||
} else {
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index 2a382ede72..118077edaa 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -719,6 +719,7 @@ struct _virDomainPCIControllerOpts {
|
||||
* item in memory target config) -1 == unspecified
|
||||
*/
|
||||
int numaNode;
|
||||
+ virTristateSwitch hotplug; /* 'off' to prevent hotplug/unplug, default 'on' */
|
||||
};
|
||||
|
||||
struct _virDomainUSBControllerOpts {
|
||||
diff --git a/tests/qemuxml2argvdata/pcie-root-port-nohotplug.xml b/tests/qemuxml2argvdata/pcie-root-port-nohotplug.xml
|
||||
new file mode 100644
|
||||
index 0000000000..8a01494470
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/pcie-root-port-nohotplug.xml
|
||||
@@ -0,0 +1,35 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>guest</name>
|
||||
+ <uuid>11dbdcdd-4c3b-482b-8903-9bdb8c0a2774</uuid>
|
||||
+ <memory unit='KiB'>2097152</memory>
|
||||
+ <currentMemory unit='KiB'>2097152</currentMemory>
|
||||
+ <vcpu placement='static'>2</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='q35'>hvm</type>
|
||||
+ </os>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
+ <controller type='pci' index='0' model='pcie-root'/>
|
||||
+ <controller type='pci' index='1' model='pcie-root-port'/>
|
||||
+ <controller type='pci' index='2' model='pcie-root-port'>
|
||||
+ <target hotplug='off'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='3' model='pcie-root-port'>
|
||||
+ <model name='ioh3420'/>
|
||||
+ <target hotplug='off'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='4' model='pcie-switch-upstream-port'/>
|
||||
+ <controller type='pci' index='5' model='pcie-switch-downstream-port'>
|
||||
+ <target hotplug='off'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='6' model='pcie-switch-downstream-port'>
|
||||
+ <target hotplug='on'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='7' model='pcie-switch-downstream-port'/>
|
||||
+ <controller type='pci' index='8' model='pcie-switch-downstream-port'>
|
||||
+ <model name='xio3130-downstream'/>
|
||||
+ <target chassis='30' port='0x27'/>
|
||||
+ </controller>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml b/tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml
|
||||
new file mode 100644
|
||||
index 0000000000..f7dbaccae9
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml
|
||||
@@ -0,0 +1,67 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>guest</name>
|
||||
+ <uuid>11dbdcdd-4c3b-482b-8903-9bdb8c0a2774</uuid>
|
||||
+ <memory unit='KiB'>2097152</memory>
|
||||
+ <currentMemory unit='KiB'>2097152</currentMemory>
|
||||
+ <vcpu placement='static'>2</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='q35'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
+ <controller type='pci' index='0' model='pcie-root'/>
|
||||
+ <controller type='pci' index='1' model='pcie-root-port'>
|
||||
+ <model name='pcie-root-port'/>
|
||||
+ <target chassis='1' port='0x8'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='2' model='pcie-root-port'>
|
||||
+ <model name='pcie-root-port'/>
|
||||
+ <target chassis='2' port='0x9' hotplug='off'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='3' model='pcie-root-port'>
|
||||
+ <model name='ioh3420'/>
|
||||
+ <target chassis='3' port='0xa' hotplug='off'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='4' model='pcie-switch-upstream-port'>
|
||||
+ <model name='x3130-upstream'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='5' model='pcie-switch-downstream-port'>
|
||||
+ <model name='xio3130-downstream'/>
|
||||
+ <target chassis='5' port='0x0' hotplug='off'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='6' model='pcie-switch-downstream-port'>
|
||||
+ <model name='xio3130-downstream'/>
|
||||
+ <target chassis='6' port='0x1' hotplug='on'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x01' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='7' model='pcie-switch-downstream-port'>
|
||||
+ <model name='xio3130-downstream'/>
|
||||
+ <target chassis='7' port='0x2'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x02' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='8' model='pcie-switch-downstream-port'>
|
||||
+ <model name='xio3130-downstream'/>
|
||||
+ <target chassis='30' port='0x27'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x03' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='usb' index='0' model='qemu-xhci'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='sata' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||
index 15110dd104..c8218e423e 100644
|
||||
--- a/tests/qemuxml2xmltest.c
|
||||
+++ b/tests/qemuxml2xmltest.c
|
||||
@@ -953,7 +953,7 @@ mymain(void)
|
||||
QEMU_CAPS_DEVICE_IOH3420);
|
||||
DO_TEST("pcie-root-port-model-ioh3420",
|
||||
QEMU_CAPS_DEVICE_IOH3420);
|
||||
-
|
||||
+ DO_TEST_CAPS_LATEST("pcie-root-port-nohotplug");
|
||||
DO_TEST("pcie-switch-upstream-port",
|
||||
QEMU_CAPS_DEVICE_IOH3420,
|
||||
QEMU_CAPS_DEVICE_X3130_UPSTREAM,
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,468 @@
|
||||
From 653245c4de76aba4e75131da8d40eed5b15ffd0d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <653245c4de76aba4e75131da8d40eed5b15ffd0d@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Thu, 30 Jan 2020 14:12:40 -0500
|
||||
Subject: [PATCH] conf: parse/format <teaming> subelement of <interface>
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The subelement <teaming> of <interface> devices is used to configure a
|
||||
simple teaming association between two interfaces in a domain. Example:
|
||||
|
||||
<interface type='bridge'>
|
||||
<source bridge='br0'/>
|
||||
<model type='virtio'/>
|
||||
<mac address='00:11:22:33:44:55'/>
|
||||
<alias name='ua-backup0'/>
|
||||
<teaming type='persistent'/>
|
||||
</interface>
|
||||
<interface type='hostdev'>
|
||||
<source>
|
||||
<address type='pci' bus='0x02' slot='0x10' function='0x4'/>
|
||||
</source>
|
||||
<mac address='00:11:22:33:44:55'/>
|
||||
<teaming type='transient' persistent='ua-backup0'/>
|
||||
</interface>
|
||||
|
||||
The interface with <teaming type='persistent'/> is assumed to always
|
||||
be present, while the interface with type='transient' may be be
|
||||
unplugged and later re-plugged; the persistent='blah' attribute (and
|
||||
in the one currently available implementation, also the matching MAC
|
||||
addresses) is what associates the two devices with each other. It is
|
||||
up to the hypervisor and the guest network drivers to determine what
|
||||
to do with this information.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit fb0509d06ac57434c2edbd81ee63deb32a0e598a)
|
||||
|
||||
https://bugzilla.redhat.com/1693587
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200130191244.24174-3-laine@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
docs/schemas/domaincommon.rng | 19 ++++++
|
||||
src/conf/domain_conf.c | 47 +++++++++++++
|
||||
src/conf/domain_conf.h | 14 ++++
|
||||
.../net-virtio-teaming-network.xml | 37 +++++++++++
|
||||
tests/qemuxml2argvdata/net-virtio-teaming.xml | 50 ++++++++++++++
|
||||
.../net-virtio-teaming-network.xml | 51 ++++++++++++++
|
||||
.../qemuxml2xmloutdata/net-virtio-teaming.xml | 66 +++++++++++++++++++
|
||||
tests/qemuxml2xmltest.c | 6 ++
|
||||
8 files changed, 290 insertions(+)
|
||||
create mode 100644 tests/qemuxml2argvdata/net-virtio-teaming-network.xml
|
||||
create mode 100644 tests/qemuxml2argvdata/net-virtio-teaming.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/net-virtio-teaming.xml
|
||||
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index 76d94b156f..026e753567 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -3158,6 +3158,25 @@
|
||||
<optional>
|
||||
<ref name="vlan"/>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <element name="teaming">
|
||||
+ <choice>
|
||||
+ <group>
|
||||
+ <attribute name="type">
|
||||
+ <value>persistent</value>
|
||||
+ </attribute>
|
||||
+ </group>
|
||||
+ <group>
|
||||
+ <attribute name="type">
|
||||
+ <value>transient</value>
|
||||
+ </attribute>
|
||||
+ <attribute name="persistent">
|
||||
+ <ref name="aliasName"/>
|
||||
+ </attribute>
|
||||
+ </group>
|
||||
+ </choice>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
</interleave>
|
||||
</define>
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 0478914c69..58f72b3b0f 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -554,6 +554,13 @@ VIR_ENUM_IMPL(virDomainNetVirtioTxMode,
|
||||
"timer",
|
||||
);
|
||||
|
||||
+VIR_ENUM_IMPL(virDomainNetTeaming,
|
||||
+ VIR_DOMAIN_NET_TEAMING_TYPE_LAST,
|
||||
+ "none",
|
||||
+ "persistent",
|
||||
+ "transient",
|
||||
+);
|
||||
+
|
||||
VIR_ENUM_IMPL(virDomainNetInterfaceLinkState,
|
||||
VIR_DOMAIN_NET_INTERFACE_LINK_STATE_LAST,
|
||||
"default",
|
||||
@@ -6276,6 +6283,21 @@ virDomainNetDefValidate(const virDomainNetDef *net)
|
||||
virDomainNetTypeToString(net->type));
|
||||
return -1;
|
||||
}
|
||||
+
|
||||
+ if (net->teaming.type == VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT) {
|
||||
+ if (!net->teaming.persistent) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("teaming persistent attribute must be set if teaming type is 'transient'"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (net->teaming.persistent) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("teaming persistent attribute not allowed if teaming type is '%s'"),
|
||||
+ virDomainNetTeamingTypeToString(net->teaming.type));
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -11574,6 +11596,8 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
g_autofree char *vhostuser_type = NULL;
|
||||
g_autofree char *trustGuestRxFilters = NULL;
|
||||
g_autofree char *vhost_path = NULL;
|
||||
+ g_autofree char *teamingType = NULL;
|
||||
+ g_autofree char *teamingPersistent = NULL;
|
||||
const char *prefix = xmlopt ? xmlopt->config.netPrefix : NULL;
|
||||
|
||||
if (!(def = virDomainNetDefNew(xmlopt)))
|
||||
@@ -11775,6 +11799,10 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
if (!vhost_path && (tmp = virXMLPropString(cur, "vhost")))
|
||||
vhost_path = virFileSanitizePath(tmp);
|
||||
VIR_FREE(tmp);
|
||||
+ } else if (virXMLNodeNameEqual(cur, "teaming") &&
|
||||
+ !teamingType && !teamingPersistent) {
|
||||
+ teamingType = virXMLPropString(cur, "type");
|
||||
+ teamingPersistent = virXMLPropString(cur, "persistent");
|
||||
}
|
||||
}
|
||||
cur = cur->next;
|
||||
@@ -12296,6 +12324,19 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
}
|
||||
}
|
||||
|
||||
+ if (teamingType) {
|
||||
+ int tmpTeaming;
|
||||
+
|
||||
+ if ((tmpTeaming = virDomainNetTeamingTypeFromString(teamingType)) <= 0) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("unknown teaming type '%s'"),
|
||||
+ teamingType);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->teaming.type = tmpTeaming;
|
||||
+ }
|
||||
+ def->teaming.persistent = g_steal_pointer(&teamingPersistent);
|
||||
+
|
||||
rv = virXPathULong("string(./tune/sndbuf)", ctxt, &def->tune.sndbuf);
|
||||
if (rv >= 0) {
|
||||
def->tune.sndbuf_specified = true;
|
||||
@@ -25741,6 +25782,12 @@ virDomainNetDefFormat(virBufferPtr buf,
|
||||
virBufferAddLit(buf, "</tune>\n");
|
||||
}
|
||||
|
||||
+ if (def->teaming.type != VIR_DOMAIN_NET_TEAMING_TYPE_NONE) {
|
||||
+ virBufferAsprintf(buf, "<teaming type='%s'",
|
||||
+ virDomainNetTeamingTypeToString(def->teaming.type));
|
||||
+ virBufferEscapeString(buf, " persistent='%s'", def->teaming.persistent);
|
||||
+ virBufferAddLit(buf, "/>\n");
|
||||
+ }
|
||||
if (def->linkstate) {
|
||||
virBufferAsprintf(buf, "<link state='%s'/>\n",
|
||||
virDomainNetInterfaceLinkStateTypeToString(def->linkstate));
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index 6ae89fa498..ee8eb3ddc0 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -884,6 +884,15 @@ typedef enum {
|
||||
VIR_DOMAIN_NET_VIRTIO_TX_MODE_LAST
|
||||
} virDomainNetVirtioTxModeType;
|
||||
|
||||
+/* the type of teaming device */
|
||||
+typedef enum {
|
||||
+ VIR_DOMAIN_NET_TEAMING_TYPE_NONE,
|
||||
+ VIR_DOMAIN_NET_TEAMING_TYPE_PERSISTENT,
|
||||
+ VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT,
|
||||
+
|
||||
+ VIR_DOMAIN_NET_TEAMING_TYPE_LAST
|
||||
+} virDomainNetTeamingType;
|
||||
+
|
||||
/* link interface states */
|
||||
typedef enum {
|
||||
VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DEFAULT = 0, /* Default link state (up) */
|
||||
@@ -958,6 +967,10 @@ struct _virDomainNetDef {
|
||||
char *tap;
|
||||
char *vhost;
|
||||
} backend;
|
||||
+ struct {
|
||||
+ virDomainNetTeamingType type;
|
||||
+ char *persistent; /* alias name of persistent device */
|
||||
+ } teaming;
|
||||
union {
|
||||
virDomainChrSourceDefPtr vhostuser;
|
||||
struct {
|
||||
@@ -3425,6 +3438,7 @@ VIR_ENUM_DECL(virDomainFSModel);
|
||||
VIR_ENUM_DECL(virDomainNet);
|
||||
VIR_ENUM_DECL(virDomainNetBackend);
|
||||
VIR_ENUM_DECL(virDomainNetVirtioTxMode);
|
||||
+VIR_ENUM_DECL(virDomainNetTeaming);
|
||||
VIR_ENUM_DECL(virDomainNetInterfaceLinkState);
|
||||
VIR_ENUM_DECL(virDomainNetModel);
|
||||
VIR_ENUM_DECL(virDomainChrDevice);
|
||||
diff --git a/tests/qemuxml2argvdata/net-virtio-teaming-network.xml b/tests/qemuxml2argvdata/net-virtio-teaming-network.xml
|
||||
new file mode 100644
|
||||
index 0000000000..edab52f3a1
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/net-virtio-teaming-network.xml
|
||||
@@ -0,0 +1,37 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='i686' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-i386</emulator>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
+ <target dev='hda' bus='ide'/>
|
||||
+ </disk>
|
||||
+ <controller type='usb' index='0'/>
|
||||
+ <interface type='network'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <source network='mybridge'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='persistent'/>
|
||||
+ <alias name='ua-backup0'/>
|
||||
+ </interface>
|
||||
+ <interface type='network'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <source network='myhostdevpool'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='transient' persistent='ua-backup0'/>
|
||||
+ </interface>
|
||||
+ <memballoon model='virtio'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvdata/net-virtio-teaming.xml b/tests/qemuxml2argvdata/net-virtio-teaming.xml
|
||||
new file mode 100644
|
||||
index 0000000000..830ce28524
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/net-virtio-teaming.xml
|
||||
@@ -0,0 +1,50 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='i686' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-i386</emulator>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
+ <target dev='hda' bus='ide'/>
|
||||
+ </disk>
|
||||
+ <controller type='usb' index='0'/>
|
||||
+ <interface type='user'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='persistent'/>
|
||||
+ <alias name='ua-backup0'/>
|
||||
+ </interface>
|
||||
+ <interface type='user'>
|
||||
+ <mac address='66:44:33:22:11:00'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='persistent'/>
|
||||
+ <alias name='ua-backup1'/>
|
||||
+ </interface>
|
||||
+ <interface type='hostdev' managed='yes'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <source>
|
||||
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x1'/>
|
||||
+ </source>
|
||||
+ <teaming type='transient' persistent='ua-backup0'/>
|
||||
+ </interface>
|
||||
+ <interface type='hostdev' managed='yes'>
|
||||
+ <mac address='66:44:33:22:11:00'/>
|
||||
+ <source>
|
||||
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x2'/>
|
||||
+ </source>
|
||||
+ <teaming type='transient' persistent='ua-backup1'/>
|
||||
+ </interface>
|
||||
+ <memballoon model='virtio'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml b/tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml
|
||||
new file mode 100644
|
||||
index 0000000000..e0dbeafe02
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml
|
||||
@@ -0,0 +1,51 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='i686' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-i386</emulator>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <driver name='qemu' type='raw'/>
|
||||
+ <source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
+ <target dev='hda' bus='ide'/>
|
||||
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
+ </disk>
|
||||
+ <controller type='usb' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <controller type='ide' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
+ </controller>
|
||||
+ <interface type='network'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <source network='mybridge'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='persistent'/>
|
||||
+ <alias name='ua-backup0'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <interface type='network'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <source network='myhostdevpool'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='transient' persistent='ua-backup0'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='virtio'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
|
||||
+ </memballoon>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/net-virtio-teaming.xml b/tests/qemuxml2xmloutdata/net-virtio-teaming.xml
|
||||
new file mode 100644
|
||||
index 0000000000..5a5695794a
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/net-virtio-teaming.xml
|
||||
@@ -0,0 +1,66 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='i686' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-i386</emulator>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <driver name='qemu' type='raw'/>
|
||||
+ <source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
+ <target dev='hda' bus='ide'/>
|
||||
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
+ </disk>
|
||||
+ <controller type='usb' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <controller type='ide' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
+ </controller>
|
||||
+ <interface type='user'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='persistent'/>
|
||||
+ <alias name='ua-backup0'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <interface type='user'>
|
||||
+ <mac address='66:44:33:22:11:00'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='persistent'/>
|
||||
+ <alias name='ua-backup1'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <interface type='hostdev' managed='yes'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <source>
|
||||
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x1'/>
|
||||
+ </source>
|
||||
+ <teaming type='transient' persistent='ua-backup0'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <interface type='hostdev' managed='yes'>
|
||||
+ <mac address='66:44:33:22:11:00'/>
|
||||
+ <source>
|
||||
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x2'/>
|
||||
+ </source>
|
||||
+ <teaming type='transient' persistent='ua-backup1'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='virtio'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
|
||||
+ </memballoon>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||
index 3cefc64833..e54c540ef6 100644
|
||||
--- a/tests/qemuxml2xmltest.c
|
||||
+++ b/tests/qemuxml2xmltest.c
|
||||
@@ -451,6 +451,12 @@ mymain(void)
|
||||
DO_TEST("net-eth-unmanaged-tap", NONE);
|
||||
DO_TEST("net-virtio-network-portgroup", NONE);
|
||||
DO_TEST("net-virtio-rxtxqueuesize", NONE);
|
||||
+ DO_TEST("net-virtio-teaming",
|
||||
+ QEMU_CAPS_VIRTIO_NET_FAILOVER,
|
||||
+ QEMU_CAPS_DEVICE_VFIO_PCI);
|
||||
+ DO_TEST("net-virtio-teaming-network",
|
||||
+ QEMU_CAPS_VIRTIO_NET_FAILOVER,
|
||||
+ QEMU_CAPS_DEVICE_VFIO_PCI);
|
||||
DO_TEST("net-hostdev", NONE);
|
||||
DO_TEST("net-hostdev-bootorder", NONE);
|
||||
DO_TEST("net-hostdev-vfio", QEMU_CAPS_DEVICE_VFIO_PCI);
|
||||
--
|
||||
2.25.0
|
||||
|
327
SOURCES/libvirt-conf-qemu-add-virtiofs-fsdriver-type.patch
Normal file
327
SOURCES/libvirt-conf-qemu-add-virtiofs-fsdriver-type.patch
Normal file
@ -0,0 +1,327 @@
|
||||
From 2fce649fb569ab21c224f387456c996428f8a251 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2fce649fb569ab21c224f387456c996428f8a251@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Wed, 4 Mar 2020 12:42:41 +0100
|
||||
Subject: [PATCH] conf: qemu: add virtiofs fsdriver type
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Introduce a new 'virtiofs' driver type for filesystem.
|
||||
|
||||
<filesystem type='mount' accessmode='passthrough'>
|
||||
<driver type='virtiofs'/>
|
||||
<source dir='/path'/>
|
||||
<target dir='mount_tag'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</filesystem>
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Tested-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit ecc6ad6b90ad674a903c95d2a637f8b1b5833be2)
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1694166
|
||||
Message-Id: <abe26807f06ed14b2be3cbd098461afc307e88e3.1583322090.git.jtomko@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 12 ++-
|
||||
docs/schemas/domaincommon.rng | 6 ++
|
||||
src/conf/domain_conf.c | 1 +
|
||||
src/conf/domain_conf.h | 1 +
|
||||
src/qemu/qemu_command.c | 4 +
|
||||
src/qemu/qemu_domain.c | 4 +
|
||||
src/qemu/qemu_domain_address.c | 4 +
|
||||
.../vhost-user-fs-fd-memory.xml | 39 ++++++++++
|
||||
.../vhost-user-fs-hugepages.xml | 74 +++++++++++++++++++
|
||||
.../vhost-user-fs-fd-memory.x86_64-latest.xml | 1 +
|
||||
.../vhost-user-fs-hugepages.x86_64-latest.xml | 1 +
|
||||
tests/qemuxml2xmltest.c | 3 +
|
||||
12 files changed, 149 insertions(+), 1 deletion(-)
|
||||
create mode 100644 tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
create mode 100644 tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
create mode 120000 tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml
|
||||
create mode 120000 tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 50914a5207..337ab01316 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -3935,6 +3935,11 @@
|
||||
<target dir='/import/from/host'/>
|
||||
<readonly/>
|
||||
</filesystem>
|
||||
+ <filesystem type='mount' accessmode='passthrough'>
|
||||
+ <driver type='virtiofs'/>
|
||||
+ <source dir='/path'/>
|
||||
+ <target dir='mount_tag'/>
|
||||
+ </filesystem>
|
||||
...
|
||||
</devices>
|
||||
...</pre>
|
||||
@@ -3963,6 +3968,9 @@
|
||||
while the value <code>immediate</code> means that a host writeback
|
||||
is immediately triggered for all pages touched during a guest file
|
||||
write operation <span class="since">(since 0.9.10)</span>.
|
||||
+ <span class="since">Since 6.2.0</span>, <code>type='virtiofs'</code>
|
||||
+ is also supported. Using virtiofs requires setting up shared memory,
|
||||
+ see the guide: <a href="kbase/virtiofs.html">Virtio-FS</a>
|
||||
</dd>
|
||||
<dt><code>template</code></dt>
|
||||
<dd>
|
||||
@@ -3998,7 +4006,9 @@
|
||||
The filesystem element has an optional attribute <code>accessmode</code>
|
||||
which specifies the security mode for accessing the source
|
||||
<span class="since">(since 0.8.5)</span>. Currently this only works
|
||||
- with <code>type='mount'</code> for the QEMU/KVM driver. The possible
|
||||
+ with <code>type='mount'</code> for the QEMU/KVM driver.
|
||||
+ For driver type <code>virtiofs</code>, only <code>passthrough</code> is
|
||||
+ supported. For other driver types, the possible
|
||||
values are:
|
||||
|
||||
<dl>
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index bfd8786ea8..5a9291b443 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -2645,6 +2645,12 @@
|
||||
</optional>
|
||||
<ref name='virtioOptions'/>
|
||||
</group>
|
||||
+ <group>
|
||||
+ <attribute name="type">
|
||||
+ <value>virtiofs</value>
|
||||
+ </attribute>
|
||||
+ <ref name='virtioOptions'/>
|
||||
+ </group>
|
||||
<empty/>
|
||||
</choice>
|
||||
</element>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 990c5bcc1e..31d4828802 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -476,6 +476,7 @@ VIR_ENUM_IMPL(virDomainFSDriver,
|
||||
"loop",
|
||||
"nbd",
|
||||
"ploop",
|
||||
+ "virtiofs",
|
||||
);
|
||||
|
||||
VIR_ENUM_IMPL(virDomainFSAccessMode,
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index ef2c1b80f7..921cc42a57 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -771,6 +771,7 @@ typedef enum {
|
||||
VIR_DOMAIN_FS_DRIVER_TYPE_LOOP,
|
||||
VIR_DOMAIN_FS_DRIVER_TYPE_NBD,
|
||||
VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP,
|
||||
+ VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS,
|
||||
|
||||
VIR_DOMAIN_FS_DRIVER_TYPE_LAST
|
||||
} virDomainFSDriverType;
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index 252809a8d7..7fdf58f067 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -2695,6 +2695,10 @@ qemuBuildFilesystemCommandLine(virCommandPtr cmd,
|
||||
return -1;
|
||||
break;
|
||||
|
||||
+ case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
|
||||
+ /* TODO: vhost-user-fs-pci */
|
||||
+ break;
|
||||
+
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index ed35260712..402b079b09 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -8361,6 +8361,10 @@ qemuDomainDeviceDefValidateFS(virDomainFSDefPtr fs,
|
||||
_("Filesystem driver type not supported"));
|
||||
return -1;
|
||||
|
||||
+ case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
|
||||
+ /* TODO: vhost-user-fs-pci */
|
||||
+ return 0;
|
||||
+
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_LAST:
|
||||
default:
|
||||
virReportEnumRangeError(virDomainFSDriverType, fs->fsdriver);
|
||||
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
|
||||
index 9e3bcc434d..3c6ac62ff5 100644
|
||||
--- a/src/qemu/qemu_domain_address.c
|
||||
+++ b/src/qemu/qemu_domain_address.c
|
||||
@@ -690,6 +690,10 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
|
||||
}
|
||||
break;
|
||||
|
||||
+ case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
|
||||
+ /* vhost-user-fs-pci */
|
||||
+ return virtioFlags;
|
||||
+
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
|
||||
diff --git a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
new file mode 100644
|
||||
index 0000000000..a6b6279fb8
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
@@ -0,0 +1,39 @@
|
||||
+<domain type='kvm'>
|
||||
+ <name>guest</name>
|
||||
+ <uuid>126f2720-6f8e-45ab-a886-ec9277079a67</uuid>
|
||||
+ <memory unit='KiB'>14680064</memory>
|
||||
+ <currentMemory unit='KiB'>14680064</currentMemory>
|
||||
+ <memoryBacking>
|
||||
+ <source type='file'/>
|
||||
+ <access mode='shared'/>
|
||||
+ </memoryBacking>
|
||||
+ <vcpu placement='static'>2</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <cpu mode='custom' match='exact' check='none'>
|
||||
+ <model fallback='forbid'>qemu64</model>
|
||||
+ <numa>
|
||||
+ <cell id='0' cpus='0-1' memory='14680064' unit='KiB' memAccess='shared'/>
|
||||
+ </numa>
|
||||
+ </cpu>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
+ <controller type='usb' index='0' model='none'/>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <filesystem type='mount' accessmode='passthrough'>
|
||||
+ <driver type='virtiofs'/>
|
||||
+ <source dir='/path'/>
|
||||
+ <target dir='mount_tag'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
+ </filesystem>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
new file mode 100644
|
||||
index 0000000000..70df7b890d
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
@@ -0,0 +1,74 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>guest</name>
|
||||
+ <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
|
||||
+ <memory unit='KiB'>4194304</memory>
|
||||
+ <currentMemory unit='KiB'>4194304</currentMemory>
|
||||
+ <memoryBacking>
|
||||
+ <hugepages>
|
||||
+ <page size='2048' unit='KiB'/>
|
||||
+ </hugepages>
|
||||
+ <access mode='shared'/>
|
||||
+ </memoryBacking>
|
||||
+ <vcpu placement='static'>2</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='q35'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <features>
|
||||
+ <acpi/>
|
||||
+ <apic/>
|
||||
+ </features>
|
||||
+ <cpu mode='custom' match='exact' check='none'>
|
||||
+ <model fallback='forbid'>qemu64</model>
|
||||
+ <numa>
|
||||
+ <cell id='0' cpus='0-1' memory='2097152' unit='KiB' memAccess='shared'/>
|
||||
+ </numa>
|
||||
+ </cpu>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
+ <disk type='file' device='disk'>
|
||||
+ <driver name='qemu' type='qcow2'/>
|
||||
+ <source file='/var/lib/libvirt/images/guest.qcow2'/>
|
||||
+ <target dev='vda' bus='virtio'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
|
||||
+ </disk>
|
||||
+ <controller type='usb' index='0' model='none'/>
|
||||
+ <controller type='sata' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='0' model='pcie-root'/>
|
||||
+ <controller type='pci' index='1' model='pcie-root-port'>
|
||||
+ <model name='pcie-root-port'/>
|
||||
+ <target chassis='1' port='0x8'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='2' model='pcie-root-port'>
|
||||
+ <model name='pcie-root-port'/>
|
||||
+ <target chassis='2' port='0x9'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='3' model='pcie-root-port'>
|
||||
+ <model name='pcie-root-port'/>
|
||||
+ <target chassis='3' port='0xa'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='4' model='pcie-root-port'>
|
||||
+ <model name='pcie-root-port'/>
|
||||
+ <target chassis='4' port='0xb'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/>
|
||||
+ </controller>
|
||||
+ <filesystem type='mount' accessmode='passthrough'>
|
||||
+ <driver type='virtiofs'/>
|
||||
+ <source dir='/path'/>
|
||||
+ <target dir='mount_tag'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||
+ </filesystem>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml b/tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml
|
||||
new file mode 120000
|
||||
index 0000000000..fbc552ef94
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml
|
||||
@@ -0,0 +1 @@
|
||||
+../qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml b/tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml
|
||||
new file mode 120000
|
||||
index 0000000000..0c0f05b254
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml
|
||||
@@ -0,0 +1 @@
|
||||
+../qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||
index d58259587b..f77f59fa3c 100644
|
||||
--- a/tests/qemuxml2xmltest.c
|
||||
+++ b/tests/qemuxml2xmltest.c
|
||||
@@ -1428,6 +1428,9 @@ mymain(void)
|
||||
DO_TEST("vhost-vsock-ccw-auto", QEMU_CAPS_DEVICE_VHOST_VSOCK,
|
||||
QEMU_CAPS_CCW);
|
||||
|
||||
+ DO_TEST_CAPS_LATEST("vhost-user-fs-fd-memory");
|
||||
+ DO_TEST_CAPS_LATEST("vhost-user-fs-hugepages");
|
||||
+
|
||||
DO_TEST("riscv64-virt",
|
||||
QEMU_CAPS_DEVICE_VIRTIO_MMIO);
|
||||
DO_TEST("riscv64-virt-pci",
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,161 @@
|
||||
From 4f2bf4edfb640c38281d63e54145433ce8a78d28 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <4f2bf4edfb640c38281d63e54145433ce8a78d28@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 26 Apr 2020 13:04:11 -0400
|
||||
Subject: [PATCH] conf/qemu:
|
||||
s/VIR_PCI_CONNECT_HOTPLUGGABLE/VIR_PCI_CONNECT_AUTOASSIGN/g
|
||||
|
||||
When the HOTPLUGGABLE flag was originally added, it was set for all
|
||||
the PCI controllers that accepted hotplugged devices, and requested
|
||||
for all devices that were auto-assigned to a controller. While we're
|
||||
still autoassigning to the same list of controllers, those controllers
|
||||
may or may not support hotplug, so let's use the flag that fits what
|
||||
we're actually doing.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 7c98f5e3652e19e4eb015d290c1eed2f1b58ee72)
|
||||
|
||||
https://bugzilla.redhat.com/1802592
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200426170415.18328-9-laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_addr.c | 18 +++++++++---------
|
||||
src/qemu/qemu_domain_address.c | 14 +++++++-------
|
||||
2 files changed, 16 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
|
||||
index e0be655772..53be6cd34b 100644
|
||||
--- a/src/conf/domain_addr.c
|
||||
+++ b/src/conf/domain_addr.c
|
||||
@@ -362,8 +362,8 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
|
||||
* libvirt's assumptions about whether or not hotplug
|
||||
* capability will be required.
|
||||
*/
|
||||
- if (devFlags & VIR_PCI_CONNECT_HOTPLUGGABLE)
|
||||
- busFlags |= VIR_PCI_CONNECT_HOTPLUGGABLE;
|
||||
+ if (devFlags & VIR_PCI_CONNECT_AUTOASSIGN)
|
||||
+ busFlags |= VIR_PCI_CONNECT_AUTOASSIGN;
|
||||
/* if the device is a pci-bridge, allow manually
|
||||
* assigning to any bus that would also accept a
|
||||
* standard PCI device.
|
||||
@@ -419,8 +419,8 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
|
||||
addrStr, addr->bus, connectStr);
|
||||
return false;
|
||||
}
|
||||
- if ((devFlags & VIR_PCI_CONNECT_HOTPLUGGABLE) &&
|
||||
- !(busFlags & VIR_PCI_CONNECT_HOTPLUGGABLE)) {
|
||||
+ if ((devFlags & VIR_PCI_CONNECT_AUTOASSIGN) &&
|
||||
+ !(busFlags & VIR_PCI_CONNECT_AUTOASSIGN)) {
|
||||
if (reportError) {
|
||||
virReportError(errType,
|
||||
_("The device at PCI address %s requires "
|
||||
@@ -509,7 +509,7 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
|
||||
*/
|
||||
switch (model) {
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
|
||||
- bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_BRIDGE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS);
|
||||
@@ -517,14 +517,14 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
|
||||
bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE:
|
||||
- bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_BRIDGE);
|
||||
bus->minSlot = 1;
|
||||
bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS:
|
||||
- bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_BRIDGE);
|
||||
bus->minSlot = 0;
|
||||
@@ -555,7 +555,7 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_TO_PCI_BRIDGE:
|
||||
/* Same as pci-bridge: 32 hotpluggable traditional PCI slots (0-31),
|
||||
* the first of which is not usable because of the SHPC */
|
||||
- bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_BRIDGE);
|
||||
bus->minSlot = 1;
|
||||
@@ -566,7 +566,7 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
|
||||
/* provides one slot which is pcie, can be used by endpoint
|
||||
* devices, pcie-switch-upstream-ports or pcie-to-pci-bridges,
|
||||
* and is hotpluggable */
|
||||
- bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_DEVICE |
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT |
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE);
|
||||
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
|
||||
index 3c6ac62ff5..e81585bc6c 100644
|
||||
--- a/src/qemu/qemu_domain_address.c
|
||||
+++ b/src/qemu/qemu_domain_address.c
|
||||
@@ -571,7 +571,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
|
||||
virDomainPCIConnectFlags virtioFlags)
|
||||
{
|
||||
virDomainPCIConnectFlags pciFlags = (VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
- VIR_PCI_CONNECT_HOTPLUGGABLE);
|
||||
+ VIR_PCI_CONNECT_AUTOASSIGN);
|
||||
|
||||
switch ((virDomainDeviceType)dev->type) {
|
||||
case VIR_DOMAIN_DEVICE_CONTROLLER: {
|
||||
@@ -1063,17 +1063,17 @@ qemuDomainFillDevicePCIConnectFlagsIterInit(virDomainDefPtr def,
|
||||
|
||||
if (qemuDomainHasPCIeRoot(def)) {
|
||||
data->pcieFlags = (VIR_PCI_CONNECT_TYPE_PCIE_DEVICE |
|
||||
- VIR_PCI_CONNECT_HOTPLUGGABLE);
|
||||
+ VIR_PCI_CONNECT_AUTOASSIGN);
|
||||
} else {
|
||||
data->pcieFlags = (VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
- VIR_PCI_CONNECT_HOTPLUGGABLE);
|
||||
+ VIR_PCI_CONNECT_AUTOASSIGN);
|
||||
}
|
||||
|
||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY)) {
|
||||
data->virtioFlags = data->pcieFlags;
|
||||
} else {
|
||||
data->virtioFlags = (VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
- VIR_PCI_CONNECT_HOTPLUGGABLE);
|
||||
+ VIR_PCI_CONNECT_AUTOASSIGN);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1729,7 +1729,7 @@ qemuDomainValidateDevicePCISlotsPIIX3(virDomainDefPtr def,
|
||||
virPCIDeviceAddress tmp_addr;
|
||||
bool qemuDeviceVideoUsable = virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
|
||||
g_autofree char *addrStr = NULL;
|
||||
- virDomainPCIConnectFlags flags = (VIR_PCI_CONNECT_HOTPLUGGABLE
|
||||
+ virDomainPCIConnectFlags flags = (VIR_PCI_CONNECT_AUTOASSIGN
|
||||
| VIR_PCI_CONNECT_TYPE_PCI_DEVICE);
|
||||
|
||||
/* Verify that first IDE and USB controllers (if any) is on the PIIX3, fn 1 */
|
||||
@@ -2666,7 +2666,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
|
||||
* domain.
|
||||
*/
|
||||
virDomainDeviceInfo info = {
|
||||
- .pciConnectFlags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ .pciConnectFlags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE),
|
||||
.pciAddrExtFlags = VIR_PCI_ADDRESS_EXTENSION_NONE
|
||||
};
|
||||
@@ -2707,7 +2707,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
|
||||
addrs->nbuses > max_idx + 1 &&
|
||||
qemuDomainHasPCIeRoot(def)) {
|
||||
virDomainDeviceInfo info = {
|
||||
- .pciConnectFlags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ .pciConnectFlags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_DEVICE),
|
||||
.pciAddrExtFlags = VIR_PCI_ADDRESS_EXTENSION_NONE
|
||||
};
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,88 @@
|
||||
From 6ece5388a7fb7fc3c703cd1bc9e214ad411451d8 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <6ece5388a7fb7fc3c703cd1bc9e214ad411451d8@dist-git>
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Mon, 3 Feb 2020 18:07:23 +0000
|
||||
Subject: [PATCH] conf: remove unused virCapabilitiesSetHostCPU method
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit 2ce9474c2a6ba3df4977068dcee35d3fa5468749)
|
||||
|
||||
BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1785207
|
||||
BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1785211
|
||||
Message-Id: <20200203180726.2203691-3-berrange@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/conf/capabilities.c | 21 ---------------------
|
||||
src/conf/capabilities.h | 6 ------
|
||||
src/libvirt_private.syms | 1 -
|
||||
3 files changed, 28 deletions(-)
|
||||
|
||||
diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
|
||||
index 9a39858280..bf1d9936ed 100644
|
||||
--- a/src/conf/capabilities.c
|
||||
+++ b/src/conf/capabilities.c
|
||||
@@ -368,27 +368,6 @@ virCapabilitiesHostNUMAAddCell(virCapsHostNUMAPtr caps,
|
||||
g_ptr_array_add(caps->cells, cell);
|
||||
}
|
||||
|
||||
-
|
||||
-/**
|
||||
- * virCapabilitiesSetHostCPU:
|
||||
- * @caps: capabilities to extend
|
||||
- * @cpu: CPU definition
|
||||
- *
|
||||
- * Sets host CPU specification
|
||||
- */
|
||||
-int
|
||||
-virCapabilitiesSetHostCPU(virCapsPtr caps,
|
||||
- virCPUDefPtr cpu)
|
||||
-{
|
||||
- if (cpu == NULL)
|
||||
- return -1;
|
||||
-
|
||||
- caps->host.cpu = cpu;
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-
|
||||
/**
|
||||
* virCapabilitiesAllocMachines:
|
||||
* @machines: machine variants for emulator ('pc', or 'isapc', etc)
|
||||
diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h
|
||||
index f604e7b95e..4a49e94aa5 100644
|
||||
--- a/src/conf/capabilities.h
|
||||
+++ b/src/conf/capabilities.h
|
||||
@@ -258,12 +258,6 @@ virCapabilitiesHostNUMAAddCell(virCapsHostNUMAPtr caps,
|
||||
int npageinfo,
|
||||
virCapsHostNUMACellPageInfoPtr pageinfo);
|
||||
|
||||
-
|
||||
-int
|
||||
-virCapabilitiesSetHostCPU(virCapsPtr caps,
|
||||
- virCPUDefPtr cpu);
|
||||
-
|
||||
-
|
||||
virCapsGuestMachinePtr *
|
||||
virCapabilitiesAllocMachines(const char *const *names,
|
||||
int nnames);
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index b97906b852..afa7d4fcae 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -77,7 +77,6 @@ virCapabilitiesHostSecModelAddBaseLabel;
|
||||
virCapabilitiesInitCaches;
|
||||
virCapabilitiesInitPages;
|
||||
virCapabilitiesNew;
|
||||
-virCapabilitiesSetHostCPU;
|
||||
virCapabilitiesSetNetPrefix;
|
||||
|
||||
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,144 @@
|
||||
From 9b070e02e7b5bb95728a1fcdc8b7dfaaacc5f30a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <9b070e02e7b5bb95728a1fcdc8b7dfaaacc5f30a@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 24 Mar 2020 16:25:55 +0100
|
||||
Subject: [PATCH] conf: rename 'namespace' property of struct
|
||||
_virStorageSourceNVMeDef
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
While 'namespace' is not a reserved word in C, it is in C++. Our
|
||||
compilers are happy with it but syntax-hilighting in some editors
|
||||
hilights is as a keyword. Rename it to prevent confusion.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 5793b8baa75747860f6ba97470969047e60c8579)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804617
|
||||
Message-Id: <bfe6cf10a95868ae56a91f362a1ea50667754027.1585063415.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 12 ++++++------
|
||||
src/qemu/qemu_block.c | 2 +-
|
||||
src/util/virhostdev.c | 2 +-
|
||||
src/util/virstoragefile.c | 4 ++--
|
||||
src/util/virstoragefile.h | 2 +-
|
||||
5 files changed, 11 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 8aec85e83c..1e8518139c 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -6054,7 +6054,7 @@ virDomainDiskDefValidate(const virDomainDef *def,
|
||||
|
||||
if (disk->src->type == VIR_STORAGE_TYPE_NVME) {
|
||||
/* NVMe namespaces start from 1 */
|
||||
- if (disk->src->nvme->namespace == 0) {
|
||||
+ if (disk->src->nvme->namespc == 0) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("NVMe namespace can't be zero"));
|
||||
return -1;
|
||||
@@ -9433,7 +9433,7 @@ virDomainDiskSourceNVMeParse(xmlNodePtr node,
|
||||
{
|
||||
g_autoptr(virStorageSourceNVMeDef) nvme = NULL;
|
||||
g_autofree char *type = NULL;
|
||||
- g_autofree char *namespace = NULL;
|
||||
+ g_autofree char *namespc = NULL;
|
||||
g_autofree char *managed = NULL;
|
||||
xmlNodePtr address;
|
||||
|
||||
@@ -9452,16 +9452,16 @@ virDomainDiskSourceNVMeParse(xmlNodePtr node,
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (!(namespace = virXMLPropString(node, "namespace"))) {
|
||||
+ if (!(namespc = virXMLPropString(node, "namespace"))) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("missing 'namespace' attribute to disk source"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (virStrToLong_ull(namespace, NULL, 10, &nvme->namespace) < 0) {
|
||||
+ if (virStrToLong_ull(namespc, NULL, 10, &nvme->namespc) < 0) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("malformed namespace '%s'"),
|
||||
- namespace);
|
||||
+ namespc);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -24444,7 +24444,7 @@ virDomainDiskSourceNVMeFormat(virBufferPtr attrBuf,
|
||||
virBufferAddLit(attrBuf, " type='pci'");
|
||||
virBufferAsprintf(attrBuf, " managed='%s'",
|
||||
virTristateBoolTypeToString(nvme->managed));
|
||||
- virBufferAsprintf(attrBuf, " namespace='%llu'", nvme->namespace);
|
||||
+ virBufferAsprintf(attrBuf, " namespace='%llu'", nvme->namespc);
|
||||
virPCIDeviceAddressFormat(childBuf, nvme->pciAddr, false);
|
||||
}
|
||||
|
||||
diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
|
||||
index 73cb5ba4bc..5697d4fc73 100644
|
||||
--- a/src/qemu/qemu_block.c
|
||||
+++ b/src/qemu/qemu_block.c
|
||||
@@ -1008,7 +1008,7 @@ qemuBlockStorageSourceGetNVMeProps(virStorageSourcePtr src)
|
||||
ignore_value(virJSONValueObjectCreate(&ret,
|
||||
"s:driver", "nvme",
|
||||
"s:device", pciAddr,
|
||||
- "U:namespace", nvme->namespace,
|
||||
+ "U:namespace", nvme->namespc,
|
||||
NULL));
|
||||
return ret;
|
||||
}
|
||||
diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
|
||||
index 9b4ea30216..9596482146 100644
|
||||
--- a/src/util/virhostdev.c
|
||||
+++ b/src/util/virhostdev.c
|
||||
@@ -2256,7 +2256,7 @@ virHostdevGetNVMeDeviceList(virNVMeDeviceListPtr nvmeDevices,
|
||||
continue;
|
||||
|
||||
if (!(dev = virNVMeDeviceNew(&srcNVMe->pciAddr,
|
||||
- srcNVMe->namespace,
|
||||
+ srcNVMe->namespc,
|
||||
srcNVMe->managed)))
|
||||
return -1;
|
||||
|
||||
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
|
||||
index fa37840532..2e54620139 100644
|
||||
--- a/src/util/virstoragefile.c
|
||||
+++ b/src/util/virstoragefile.c
|
||||
@@ -2052,7 +2052,7 @@ virStorageSourceNVMeDefCopy(const virStorageSourceNVMeDef *src)
|
||||
|
||||
ret = g_new0(virStorageSourceNVMeDef, 1);
|
||||
|
||||
- ret->namespace = src->namespace;
|
||||
+ ret->namespc = src->namespc;
|
||||
ret->managed = src->managed;
|
||||
virPCIDeviceAddressCopy(&ret->pciAddr, &src->pciAddr);
|
||||
return ret;
|
||||
@@ -2069,7 +2069,7 @@ virStorageSourceNVMeDefIsEqual(const virStorageSourceNVMeDef *a,
|
||||
if (!a || !b)
|
||||
return false;
|
||||
|
||||
- if (a->namespace != b->namespace ||
|
||||
+ if (a->namespc != b->namespc ||
|
||||
a->managed != b->managed ||
|
||||
!virPCIDeviceAddressEqual(&a->pciAddr, &b->pciAddr))
|
||||
return false;
|
||||
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
|
||||
index c1430cadd1..0230f44652 100644
|
||||
--- a/src/util/virstoragefile.h
|
||||
+++ b/src/util/virstoragefile.h
|
||||
@@ -246,7 +246,7 @@ struct _virStorageSourceInitiatorDef {
|
||||
typedef struct _virStorageSourceNVMeDef virStorageSourceNVMeDef;
|
||||
typedef virStorageSourceNVMeDef *virStorageSourceNVMeDefPtr;
|
||||
struct _virStorageSourceNVMeDef {
|
||||
- unsigned long long namespace;
|
||||
+ unsigned long long namespc;
|
||||
int managed; /* enum virTristateBool */
|
||||
virPCIDeviceAddress pciAddr;
|
||||
|
||||
--
|
||||
2.26.0
|
||||
|
@ -0,0 +1,83 @@
|
||||
From f52197675b2babfafb1b89058e3fd01decebd8ab Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f52197675b2babfafb1b89058e3fd01decebd8ab@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 26 Apr 2020 13:04:12 -0400
|
||||
Subject: [PATCH] conf: simplify logic when checking for AUTOASSIGN PCI
|
||||
addresses
|
||||
|
||||
Old behavior: If the address was manually provided by config, copy
|
||||
device AUTOASSIGN flag into the bus flag, and then later on in the
|
||||
function *always* check for a match of the flags (which will always
|
||||
match if the address came from config, since we just copied it).
|
||||
|
||||
New behavior: Don't mess with the bus flags - just directly check if
|
||||
the AUTOASSIGN flag matches in bus and dev, but only make the check if
|
||||
the address didn't come from config (i.e. it was auto-assigned by
|
||||
libvirt).
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit fcdf87d3ef14de9dfb0acaf4b4445e1580dfc629)
|
||||
|
||||
https://bugzilla.redhat.com/1802592
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200426170415.18328-10-laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_addr.c | 27 ++++++++++-----------------
|
||||
1 file changed, 10 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
|
||||
index 53be6cd34b..05f036e3e6 100644
|
||||
--- a/src/conf/domain_addr.c
|
||||
+++ b/src/conf/domain_addr.c
|
||||
@@ -358,18 +358,22 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
|
||||
*/
|
||||
if (busFlags & VIR_PCI_CONNECT_TYPES_ENDPOINT)
|
||||
busFlags |= VIR_PCI_CONNECT_TYPES_ENDPOINT;
|
||||
- /* Also allow manual specification of bus to override
|
||||
- * libvirt's assumptions about whether or not hotplug
|
||||
- * capability will be required.
|
||||
- */
|
||||
- if (devFlags & VIR_PCI_CONNECT_AUTOASSIGN)
|
||||
- busFlags |= VIR_PCI_CONNECT_AUTOASSIGN;
|
||||
/* if the device is a pci-bridge, allow manually
|
||||
* assigning to any bus that would also accept a
|
||||
* standard PCI device.
|
||||
*/
|
||||
if (devFlags & VIR_PCI_CONNECT_TYPE_PCI_BRIDGE)
|
||||
devFlags |= VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
|
||||
+ } else if ((devFlags & VIR_PCI_CONNECT_AUTOASSIGN) &&
|
||||
+ !(busFlags & VIR_PCI_CONNECT_AUTOASSIGN)) {
|
||||
+ if (reportError) {
|
||||
+ virReportError(errType,
|
||||
+ _("The device at PCI address %s was auto-assigned "
|
||||
+ "this address, but the PCI controller "
|
||||
+ "with index='%d' doesn't allow auto-assignment"),
|
||||
+ addrStr, addr->bus);
|
||||
+ }
|
||||
+ return false;
|
||||
}
|
||||
|
||||
/* If this bus doesn't allow the type of connection (PCI
|
||||
@@ -419,17 +423,6 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
|
||||
addrStr, addr->bus, connectStr);
|
||||
return false;
|
||||
}
|
||||
- if ((devFlags & VIR_PCI_CONNECT_AUTOASSIGN) &&
|
||||
- !(busFlags & VIR_PCI_CONNECT_AUTOASSIGN)) {
|
||||
- if (reportError) {
|
||||
- virReportError(errType,
|
||||
- _("The device at PCI address %s requires "
|
||||
- "hotplug capability, but the PCI controller "
|
||||
- "with index='%d' doesn't support hotplug"),
|
||||
- addrStr, addr->bus);
|
||||
- }
|
||||
- return false;
|
||||
- }
|
||||
return true;
|
||||
}
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,70 @@
|
||||
From d77f180068dab8747f5e2c098a9c59213ce19108 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <d77f180068dab8747f5e2c098a9c59213ce19108@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Wed, 4 Mar 2020 12:42:29 +0100
|
||||
Subject: [PATCH] conf: use virXMLFormatElement in virDomainFSDefFormat
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Use the virXMLFormatElement helper to format the driver element
|
||||
to simplify adding further sub-elements.
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 3efdbae5bf054d1a2bdc98fdccff0273abe54c88)
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1694166
|
||||
Message-Id: <966ad0eebcb1ae5f20f59fc6cc84008bbfa6426f.1583322090.git.jtomko@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 16 ++++++----------
|
||||
1 file changed, 6 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 8a5f14d6cb..88117187c8 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -24991,7 +24991,7 @@ virDomainFSDefFormat(virBufferPtr buf,
|
||||
const char *fsdriver = virDomainFSDriverTypeToString(def->fsdriver);
|
||||
const char *wrpolicy = virDomainFSWrpolicyTypeToString(def->wrpolicy);
|
||||
const char *src = def->src->path;
|
||||
- g_auto(virBuffer) driverBuf = VIR_BUFFER_INITIALIZER;
|
||||
+ g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
if (!type) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
@@ -25016,25 +25016,21 @@ virDomainFSDefFormat(virBufferPtr buf,
|
||||
|
||||
virBufferAdjustIndent(buf, 2);
|
||||
if (def->fsdriver) {
|
||||
- virBufferAsprintf(&driverBuf, " type='%s'", fsdriver);
|
||||
+ virBufferAsprintf(&driverAttrBuf, " type='%s'", fsdriver);
|
||||
|
||||
if (def->format)
|
||||
- virBufferAsprintf(&driverBuf, " format='%s'",
|
||||
+ virBufferAsprintf(&driverAttrBuf, " format='%s'",
|
||||
virStorageFileFormatTypeToString(def->format));
|
||||
|
||||
/* Don't generate anything if wrpolicy is set to default */
|
||||
if (def->wrpolicy)
|
||||
- virBufferAsprintf(&driverBuf, " wrpolicy='%s'", wrpolicy);
|
||||
+ virBufferAsprintf(&driverAttrBuf, " wrpolicy='%s'", wrpolicy);
|
||||
|
||||
}
|
||||
|
||||
- virDomainVirtioOptionsFormat(&driverBuf, def->virtio);
|
||||
+ virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio);
|
||||
|
||||
- if (virBufferUse(&driverBuf)) {
|
||||
- virBufferAddLit(buf, "<driver");
|
||||
- virBufferAddBuffer(buf, &driverBuf);
|
||||
- virBufferAddLit(buf, "/>\n");
|
||||
- }
|
||||
+ virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL);
|
||||
|
||||
switch (def->type) {
|
||||
case VIR_DOMAIN_FS_TYPE_MOUNT:
|
||||
--
|
||||
2.25.1
|
||||
|
@ -0,0 +1,53 @@
|
||||
From 2145d7b6f4370dfcd7dadae7daf544767cde0392 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2145d7b6f4370dfcd7dadae7daf544767cde0392@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:51 +0200
|
||||
Subject: [PATCH] cpu: Change control flow in virCPUUpdateLive
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The updateLive CPU sub-driver function is supposed to be called only for
|
||||
a subset of CPU definitions. Let's make it more obvious by turning a
|
||||
negative test and return into a positive check.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 68c0b85ecb07c8cefcf4f4a2ffc28e123baa9e8c)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1839999
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <2633727669ca50970bd10abe9b045e24b76028d1.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu.c | 11 ++++++-----
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
|
||||
index ae3a0acc10..1cb2dd04f4 100644
|
||||
--- a/src/cpu/cpu.c
|
||||
+++ b/src/cpu/cpu.c
|
||||
@@ -647,13 +647,14 @@ virCPUUpdateLive(virArch arch,
|
||||
if (!driver->updateLive)
|
||||
return 1;
|
||||
|
||||
- if (cpu->mode != VIR_CPU_MODE_CUSTOM)
|
||||
- return 1;
|
||||
+ if (cpu->mode == VIR_CPU_MODE_CUSTOM) {
|
||||
+ if (driver->updateLive(cpu, dataEnabled, dataDisabled) < 0)
|
||||
+ return -1;
|
||||
|
||||
- if (driver->updateLive(cpu, dataEnabled, dataDisabled) < 0)
|
||||
- return -1;
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
- return 0;
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,100 @@
|
||||
From 781e82d0330afe60ab1c366e43dfe8292fcf68eb Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <781e82d0330afe60ab1c366e43dfe8292fcf68eb@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:53 +0200
|
||||
Subject: [PATCH] cpu: Honor check='full' for host-passthrough CPUs
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The check attribute was completely ignored for host-passthrough CPUs
|
||||
even if they explicitly requested some features to be enabled. For
|
||||
example, a domain with the following CPU definition
|
||||
|
||||
<cpu mode='host-passthrough' check='full'>
|
||||
<feature policy='require' name='svm'/>
|
||||
</cpu>
|
||||
|
||||
would happily start even when 'svm' cannot be enabled.
|
||||
|
||||
Let's call virCPUArchUpdateLive for host-passthrough CPUs with
|
||||
VIR_CPU_CHECK_FULL to make sure the architecture specific code can
|
||||
validate the provided virtual CPU against the desired definition.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1515677
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit ac36a824641862dcac057c6403b27ab1e91874f5)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1839999
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <b8d30055a0df31c423d6c1832ca0bfbf3eafd222.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu.c | 3 ++-
|
||||
src/cpu/cpu_x86.c | 10 +++++++++-
|
||||
2 files changed, 11 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
|
||||
index 1cb2dd04f4..f2a0f560f6 100644
|
||||
--- a/src/cpu/cpu.c
|
||||
+++ b/src/cpu/cpu.c
|
||||
@@ -647,7 +647,8 @@ virCPUUpdateLive(virArch arch,
|
||||
if (!driver->updateLive)
|
||||
return 1;
|
||||
|
||||
- if (cpu->mode == VIR_CPU_MODE_CUSTOM) {
|
||||
+ if (cpu->mode == VIR_CPU_MODE_CUSTOM ||
|
||||
+ cpu->check == VIR_CPU_CHECK_FULL) {
|
||||
if (driver->updateLive(cpu, dataEnabled, dataDisabled) < 0)
|
||||
return -1;
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 9e686a86d2..8c865bdaa4 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -3009,8 +3009,10 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
virCPUDataPtr dataEnabled,
|
||||
virCPUDataPtr dataDisabled)
|
||||
{
|
||||
+ bool hostPassthrough = cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH;
|
||||
virCPUx86MapPtr map;
|
||||
virCPUx86ModelPtr model = NULL;
|
||||
+ virCPUx86ModelPtr modelDisabled = NULL;
|
||||
virCPUx86Data enabled = VIR_CPU_X86_DATA_INIT;
|
||||
virCPUx86Data disabled = VIR_CPU_X86_DATA_INIT;
|
||||
virBuffer bufAdded = VIR_BUFFER_INITIALIZER;
|
||||
@@ -3026,6 +3028,10 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
if (!(model = x86ModelFromCPU(cpu, map, -1)))
|
||||
goto cleanup;
|
||||
|
||||
+ if (hostPassthrough &&
|
||||
+ !(modelDisabled = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_DISABLE)))
|
||||
+ goto cleanup;
|
||||
+
|
||||
if (dataEnabled &&
|
||||
x86DataCopy(&enabled, &dataEnabled->data.x86) < 0)
|
||||
goto cleanup;
|
||||
@@ -3040,7 +3046,8 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
|
||||
if (x86DataIsSubset(&model->data, &feature->data))
|
||||
expected = VIR_CPU_FEATURE_REQUIRE;
|
||||
- else
|
||||
+ else if (!hostPassthrough ||
|
||||
+ x86DataIsSubset(&modelDisabled->data, &feature->data))
|
||||
expected = VIR_CPU_FEATURE_DISABLE;
|
||||
|
||||
if (expected == VIR_CPU_FEATURE_DISABLE &&
|
||||
@@ -3101,6 +3108,7 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
|
||||
cleanup:
|
||||
x86ModelFree(model);
|
||||
+ x86ModelFree(modelDisabled);
|
||||
virCPUx86DataClear(&enabled);
|
||||
virCPUx86DataClear(&disabled);
|
||||
VIR_FREE(added);
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,41 @@
|
||||
From 4b8dbdb81eb6a755dc58b359e65b769ee1dc3f86 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <4b8dbdb81eb6a755dc58b359e65b769ee1dc3f86@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 24 Jan 2020 15:05:49 +0100
|
||||
Subject: [PATCH] cpu.c: Check properly for virCapabilitiesGetNodeInfo() retval
|
||||
|
||||
The virCapabilitiesGetNodeInfo() function has the usual return
|
||||
value semantics for integeres: a negative value means an error,
|
||||
zero or a positive value means success. However, the function
|
||||
call done in virCPUProbeHost() doesn't check for the return value
|
||||
accordingly.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 609acf1f5d5d666148355719346c8ee05f911e33)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1794691
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Message-Id: <033f07f79bc9fa26f669c83f9aa790bfaef25b93.1579874719.git.mprivozn@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/cpu/cpu.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
|
||||
index a2ae5b8c07..d99466472b 100644
|
||||
--- a/src/cpu/cpu.c
|
||||
+++ b/src/cpu/cpu.c
|
||||
@@ -455,7 +455,7 @@ virCPUProbeHost(virArch arch)
|
||||
{
|
||||
virNodeInfo nodeinfo;
|
||||
|
||||
- if (virCapabilitiesGetNodeInfo(&nodeinfo))
|
||||
+ if (virCapabilitiesGetNodeInfo(&nodeinfo) < 0)
|
||||
return NULL;
|
||||
|
||||
return virCPUGetHost(arch, VIR_CPU_TYPE_HOST, &nodeinfo, NULL);
|
||||
--
|
||||
2.25.0
|
||||
|
@ -0,0 +1,80 @@
|
||||
From 37b27a297ecb87e65f41c212aaabde7311b042d6 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <37b27a297ecb87e65f41c212aaabde7311b042d6@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 20 Feb 2020 09:08:05 +0100
|
||||
Subject: [PATCH] cpu_conf: Format vendor_id for host-model CPUs
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
In commit v5.9.0-400-gaf8e39921a I removed printing model's fallback and
|
||||
vendor_id attributes when no model is specified. However, vendor_id
|
||||
makes sense even without a specific CPU model (for host-model CPUs).
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804549
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 0905f222f1bfd9d741e94a8d653e05bb174846d3)
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <0b46ae9e26d1c7dbaa7f2dd58fd1156db237a853.1582186015.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/cpu_conf.c | 14 +++++++++-----
|
||||
tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml | 4 +++-
|
||||
2 files changed, 12 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
|
||||
index 837d77581c..1a2948ce11 100644
|
||||
--- a/src/conf/cpu_conf.c
|
||||
+++ b/src/conf/cpu_conf.c
|
||||
@@ -791,10 +791,10 @@ virCPUDefFormatBuf(virBufferPtr buf,
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (formatModel && def->model) {
|
||||
+ if (formatModel && (def->model || def->vendor_id)) {
|
||||
virBufferAddLit(buf, "<model");
|
||||
|
||||
- if (def->type == VIR_CPU_TYPE_GUEST) {
|
||||
+ if (def->type == VIR_CPU_TYPE_GUEST && def->model) {
|
||||
const char *fallback;
|
||||
|
||||
fallback = virCPUFallbackTypeToString(def->fallback);
|
||||
@@ -805,11 +805,15 @@ virCPUDefFormatBuf(virBufferPtr buf,
|
||||
return -1;
|
||||
}
|
||||
virBufferAsprintf(buf, " fallback='%s'", fallback);
|
||||
- if (def->vendor_id)
|
||||
- virBufferEscapeString(buf, " vendor_id='%s'", def->vendor_id);
|
||||
}
|
||||
|
||||
- virBufferEscapeString(buf, ">%s</model>\n", def->model);
|
||||
+ if (def->type == VIR_CPU_TYPE_GUEST)
|
||||
+ virBufferEscapeString(buf, " vendor_id='%s'", def->vendor_id);
|
||||
+
|
||||
+ if (def->model)
|
||||
+ virBufferEscapeString(buf, ">%s</model>\n", def->model);
|
||||
+ else
|
||||
+ virBufferAddLit(buf, "/>\n");
|
||||
}
|
||||
|
||||
if (formatModel && def->vendor)
|
||||
diff --git a/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml b/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml
|
||||
index d2447ccd10..2a7d0246cc 100644
|
||||
--- a/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml
|
||||
@@ -8,7 +8,9 @@
|
||||
<type arch='x86_64' machine='pc'>hvm</type>
|
||||
<boot dev='network'/>
|
||||
</os>
|
||||
- <cpu mode='host-model' check='partial'/>
|
||||
+ <cpu mode='host-model' check='partial'>
|
||||
+ <model vendor_id='Libvirt QEMU'/>
|
||||
+ </cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
--
|
||||
2.25.0
|
||||
|
289
SOURCES/libvirt-cpu_map-Add-Cooperlake-x86-CPU-model.patch
Normal file
289
SOURCES/libvirt-cpu_map-Add-Cooperlake-x86-CPU-model.patch
Normal file
@ -0,0 +1,289 @@
|
||||
From 1c8af21807f2cdaaa24651808f6dfeebfbcf75bb Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <1c8af21807f2cdaaa24651808f6dfeebfbcf75bb@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:40 +0200
|
||||
Subject: [PATCH] cpu_map: Add Cooperlake x86 CPU model
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The stepping range (10-11) is likely incomplete. QEMU uses 10 and the
|
||||
CPUID data for Cooperlake show 11. We will update the range if needed
|
||||
once more details about he CPU are available.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
(cherry picked from commit 3944f6855b9d4df73754bb6e5c8023d77399879b)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1781878
|
||||
|
||||
Conflicts:
|
||||
tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
|
||||
tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml
|
||||
tests/domaincapsdata/qemu_5.1.0.x86_64.xml
|
||||
- test data files do not exist downstream
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <62f2fa3e2ecab2026c41e93430b4e2b695c674f0.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu_map/index.xml | 1 +
|
||||
src/cpu_map/x86_Cooperlake.xml | 90 +++++++++++++++++++
|
||||
.../x86_64-cpuid-Cooperlake-guest.xml | 13 +--
|
||||
.../x86_64-cpuid-Cooperlake-host.xml | 13 +--
|
||||
.../x86_64-cpuid-Cooperlake-json.xml | 13 +--
|
||||
.../domaincapsdata/qemu_5.0.0-q35.x86_64.xml | 1 +
|
||||
.../domaincapsdata/qemu_5.0.0-tcg.x86_64.xml | 1 +
|
||||
tests/domaincapsdata/qemu_5.0.0.x86_64.xml | 1 +
|
||||
8 files changed, 100 insertions(+), 33 deletions(-)
|
||||
create mode 100644 src/cpu_map/x86_Cooperlake.xml
|
||||
|
||||
diff --git a/src/cpu_map/index.xml b/src/cpu_map/index.xml
|
||||
index 50b030de29..ff1da2e677 100644
|
||||
--- a/src/cpu_map/index.xml
|
||||
+++ b/src/cpu_map/index.xml
|
||||
@@ -54,6 +54,7 @@
|
||||
<include filename="x86_Icelake-Client-noTSX.xml"/>
|
||||
<include filename="x86_Icelake-Server.xml"/>
|
||||
<include filename="x86_Icelake-Server-noTSX.xml"/>
|
||||
+ <include filename="x86_Cooperlake.xml"/>
|
||||
|
||||
<!-- AMD CPUs -->
|
||||
<include filename="x86_athlon.xml"/>
|
||||
diff --git a/src/cpu_map/x86_Cooperlake.xml b/src/cpu_map/x86_Cooperlake.xml
|
||||
new file mode 100644
|
||||
index 0000000000..41bd210638
|
||||
--- /dev/null
|
||||
+++ b/src/cpu_map/x86_Cooperlake.xml
|
||||
@@ -0,0 +1,90 @@
|
||||
+<cpus>
|
||||
+ <model name='Cooperlake'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
+ <signature family='6' model='85' stepping='10-11'/> <!-- 05065b -->
|
||||
+ <vendor name='Intel'/>
|
||||
+ <feature name="3dnowprefetch"/>
|
||||
+ <feature name="abm"/>
|
||||
+ <feature name="adx"/>
|
||||
+ <feature name="aes"/>
|
||||
+ <feature name="apic"/>
|
||||
+ <feature name="arat"/>
|
||||
+ <feature name="arch-capabilities"/>
|
||||
+ <feature name="avx"/>
|
||||
+ <feature name="avx2"/>
|
||||
+ <feature name="avx512-bf16"/>
|
||||
+ <feature name="avx512bw"/>
|
||||
+ <feature name="avx512cd"/>
|
||||
+ <feature name="avx512dq"/>
|
||||
+ <feature name="avx512f"/>
|
||||
+ <feature name="avx512vl"/>
|
||||
+ <feature name="avx512vnni"/>
|
||||
+ <feature name="bmi1"/>
|
||||
+ <feature name="bmi2"/>
|
||||
+ <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="fma"/>
|
||||
+ <feature name="fpu"/>
|
||||
+ <feature name="fsgsbase"/>
|
||||
+ <feature name="fxsr"/>
|
||||
+ <feature name="hle"/>
|
||||
+ <feature name="ibrs-all"/>
|
||||
+ <feature name="invpcid"/>
|
||||
+ <feature name="lahf_lm"/>
|
||||
+ <feature name="lm"/>
|
||||
+ <feature name="mca"/>
|
||||
+ <feature name="mce"/>
|
||||
+ <feature name="mds-no"/>
|
||||
+ <feature name="mmx"/>
|
||||
+ <feature name="movbe"/>
|
||||
+ <feature name="msr"/>
|
||||
+ <feature name="mtrr"/>
|
||||
+ <feature name="nx"/>
|
||||
+ <feature name="pae"/>
|
||||
+ <feature name="pat"/>
|
||||
+ <feature name="pcid"/>
|
||||
+ <feature name="pclmuldq"/>
|
||||
+ <feature name="pdpe1gb"/>
|
||||
+ <feature name="pge"/>
|
||||
+ <feature name="pku"/>
|
||||
+ <feature name="pni"/>
|
||||
+ <feature name="popcnt"/>
|
||||
+ <feature name="pschange-mc-no"/>
|
||||
+ <feature name="pse"/>
|
||||
+ <feature name="pse36"/>
|
||||
+ <feature name="rdctl-no"/>
|
||||
+ <feature name="rdrand"/>
|
||||
+ <feature name="rdseed"/>
|
||||
+ <feature name="rdtscp"/>
|
||||
+ <feature name="rtm"/>
|
||||
+ <feature name="sep"/>
|
||||
+ <feature name="skip-l1dfl-vmentry"/>
|
||||
+ <feature name="smap"/>
|
||||
+ <feature name="smep"/>
|
||||
+ <feature name="spec-ctrl"/>
|
||||
+ <feature name="ssbd"/>
|
||||
+ <feature name="sse"/>
|
||||
+ <feature name="sse2"/>
|
||||
+ <feature name="sse4.1"/>
|
||||
+ <feature name="sse4.2"/>
|
||||
+ <feature name="ssse3"/>
|
||||
+ <feature name="stibp"/>
|
||||
+ <feature name="syscall"/>
|
||||
+ <feature name="taa-no"/>
|
||||
+ <feature name="tsc"/>
|
||||
+ <feature name="tsc-deadline"/>
|
||||
+ <feature name="vme"/>
|
||||
+ <feature name="x2apic"/>
|
||||
+ <feature name="xgetbv1"/>
|
||||
+ <feature name="xsave"/>
|
||||
+ <feature name="xsavec"/>
|
||||
+ <feature name="xsaveopt"/>
|
||||
+ </model>
|
||||
+</cpus>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
|
||||
index db5598740c..f169458399 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Cascadelake-Server</model>
|
||||
+ <model fallback='forbid'>Cooperlake</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ds'/>
|
||||
<feature policy='require' name='acpi'/>
|
||||
@@ -20,22 +20,13 @@
|
||||
<feature policy='require' name='osxsave'/>
|
||||
<feature policy='require' name='tsc_adjust'/>
|
||||
<feature policy='require' name='cmt'/>
|
||||
+ <feature policy='require' name='mpx'/>
|
||||
<feature policy='require' name='intel-pt'/>
|
||||
- <feature policy='require' name='pku'/>
|
||||
<feature policy='require' name='ospke'/>
|
||||
<feature policy='require' name='md-clear'/>
|
||||
- <feature policy='require' name='stibp'/>
|
||||
- <feature policy='require' name='arch-capabilities'/>
|
||||
- <feature policy='require' name='avx512-bf16'/>
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='mbm_total'/>
|
||||
<feature policy='require' name='mbm_local'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
- <feature policy='require' name='rdctl-no'/>
|
||||
- <feature policy='require' name='ibrs-all'/>
|
||||
- <feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
- <feature policy='require' name='mds-no'/>
|
||||
- <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='require' name='tsx-ctrl'/>
|
||||
- <feature policy='require' name='taa-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
|
||||
index 6926b7c975..b0777181bb 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpu>
|
||||
<arch>x86_64</arch>
|
||||
- <model>Cascadelake-Server</model>
|
||||
+ <model>Cooperlake</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature name='ds'/>
|
||||
<feature name='acpi'/>
|
||||
@@ -21,22 +21,13 @@
|
||||
<feature name='osxsave'/>
|
||||
<feature name='tsc_adjust'/>
|
||||
<feature name='cmt'/>
|
||||
+ <feature name='mpx'/>
|
||||
<feature name='intel-pt'/>
|
||||
- <feature name='pku'/>
|
||||
<feature name='ospke'/>
|
||||
<feature name='md-clear'/>
|
||||
- <feature name='stibp'/>
|
||||
- <feature name='arch-capabilities'/>
|
||||
- <feature name='avx512-bf16'/>
|
||||
<feature name='xsaves'/>
|
||||
<feature name='mbm_total'/>
|
||||
<feature name='mbm_local'/>
|
||||
<feature name='invtsc'/>
|
||||
- <feature name='rdctl-no'/>
|
||||
- <feature name='ibrs-all'/>
|
||||
- <feature name='skip-l1dfl-vmentry'/>
|
||||
- <feature name='mds-no'/>
|
||||
- <feature name='pschange-mc-no'/>
|
||||
<feature name='tsx-ctrl'/>
|
||||
- <feature name='taa-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
|
||||
index fc52805b2f..fb319d547c 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
|
||||
@@ -1,24 +1,15 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Cascadelake-Server</model>
|
||||
+ <model fallback='forbid'>Cooperlake</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ss'/>
|
||||
<feature policy='require' name='vmx'/>
|
||||
<feature policy='require' name='hypervisor'/>
|
||||
<feature policy='require' name='tsc_adjust'/>
|
||||
+ <feature policy='require' name='mpx'/>
|
||||
<feature policy='require' name='umip'/>
|
||||
- <feature policy='require' name='pku'/>
|
||||
<feature policy='require' name='md-clear'/>
|
||||
- <feature policy='require' name='stibp'/>
|
||||
- <feature policy='require' name='arch-capabilities'/>
|
||||
- <feature policy='require' name='avx512-bf16'/>
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='ibpb'/>
|
||||
<feature policy='require' name='amd-ssbd'/>
|
||||
- <feature policy='require' name='rdctl-no'/>
|
||||
- <feature policy='require' name='ibrs-all'/>
|
||||
- <feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
- <feature policy='require' name='mds-no'/>
|
||||
- <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='require' name='tsx-ctrl'/>
|
||||
- <feature policy='require' name='taa-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
index b7e2c8a4fe..7bfd786ff6 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
@@ -93,6 +93,7 @@
|
||||
<model usable='no'>EPYC-IBPB</model>
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
+ <model usable='no'>Cooperlake</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
<model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
|
||||
index d634803b29..0a4bb16a89 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
|
||||
@@ -101,6 +101,7 @@
|
||||
<model usable='no'>EPYC-IBPB</model>
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
+ <model usable='no'>Cooperlake</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
<model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
index d2741375b4..d6ee66ab60 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
@@ -92,6 +92,7 @@
|
||||
<model usable='no'>EPYC-IBPB</model>
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
+ <model usable='no'>Cooperlake</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
<model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,749 @@
|
||||
From 4658a565f5536002c3a65e942eed0d877cd1d070 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <4658a565f5536002c3a65e942eed0d877cd1d070@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:56 +0200
|
||||
Subject: [PATCH] cpu_map: Add <decode> element to x86 CPU model definitions
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The element specifies whether a particular CPU model can be used when
|
||||
creating a CPU definition from raw CPUID/MSR data. The @host attribute
|
||||
determines whether the CPU model can be used (host='on') for creating
|
||||
CPU definition for host capabilities. Usability of the model for domain
|
||||
capabilities and host-model CPU definitions is controlled by the @guest
|
||||
attribute.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
(cherry picked from commit f4914045c2bff46b120c6c2af80066d24e48b609)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840008
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <3097db79eff1e45257ef12f891e8f9243bc8580f.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 43 +++++++++++++++++++
|
||||
src/cpu_map/x86_486.xml | 1 +
|
||||
src/cpu_map/x86_Broadwell-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Broadwell-noTSX-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Broadwell-noTSX.xml | 1 +
|
||||
src/cpu_map/x86_Broadwell.xml | 1 +
|
||||
src/cpu_map/x86_Cascadelake-Server-noTSX.xml | 1 +
|
||||
src/cpu_map/x86_Cascadelake-Server.xml | 1 +
|
||||
src/cpu_map/x86_Conroe.xml | 1 +
|
||||
src/cpu_map/x86_Dhyana.xml | 1 +
|
||||
src/cpu_map/x86_EPYC-IBPB.xml | 1 +
|
||||
src/cpu_map/x86_EPYC.xml | 1 +
|
||||
src/cpu_map/x86_Haswell-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Haswell-noTSX-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Haswell-noTSX.xml | 1 +
|
||||
src/cpu_map/x86_Haswell.xml | 1 +
|
||||
src/cpu_map/x86_Icelake-Client-noTSX.xml | 1 +
|
||||
src/cpu_map/x86_Icelake-Client.xml | 1 +
|
||||
src/cpu_map/x86_Icelake-Server-noTSX.xml | 1 +
|
||||
src/cpu_map/x86_Icelake-Server.xml | 1 +
|
||||
src/cpu_map/x86_IvyBridge-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_IvyBridge.xml | 1 +
|
||||
src/cpu_map/x86_Nehalem-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Nehalem.xml | 1 +
|
||||
src/cpu_map/x86_Opteron_G1.xml | 1 +
|
||||
src/cpu_map/x86_Opteron_G2.xml | 1 +
|
||||
src/cpu_map/x86_Opteron_G3.xml | 1 +
|
||||
src/cpu_map/x86_Opteron_G4.xml | 1 +
|
||||
src/cpu_map/x86_Opteron_G5.xml | 1 +
|
||||
src/cpu_map/x86_Penryn.xml | 1 +
|
||||
src/cpu_map/x86_SandyBridge-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_SandyBridge.xml | 1 +
|
||||
src/cpu_map/x86_Skylake-Client-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Skylake-Client.xml | 1 +
|
||||
src/cpu_map/x86_Skylake-Server-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Skylake-Server.xml | 1 +
|
||||
src/cpu_map/x86_Westmere-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Westmere.xml | 1 +
|
||||
src/cpu_map/x86_athlon.xml | 1 +
|
||||
src/cpu_map/x86_core2duo.xml | 1 +
|
||||
src/cpu_map/x86_coreduo.xml | 1 +
|
||||
src/cpu_map/x86_cpu64-rhel5.xml | 1 +
|
||||
src/cpu_map/x86_cpu64-rhel6.xml | 1 +
|
||||
src/cpu_map/x86_kvm32.xml | 1 +
|
||||
src/cpu_map/x86_kvm64.xml | 1 +
|
||||
src/cpu_map/x86_n270.xml | 1 +
|
||||
src/cpu_map/x86_pentium.xml | 1 +
|
||||
src/cpu_map/x86_pentium2.xml | 1 +
|
||||
src/cpu_map/x86_pentium3.xml | 1 +
|
||||
src/cpu_map/x86_pentiumpro.xml | 1 +
|
||||
src/cpu_map/x86_phenom.xml | 1 +
|
||||
src/cpu_map/x86_qemu32.xml | 1 +
|
||||
src/cpu_map/x86_qemu64.xml | 1 +
|
||||
55 files changed, 97 insertions(+)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 8c865bdaa4..7fbb4c9a6c 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -125,6 +125,8 @@ typedef struct _virCPUx86Model virCPUx86Model;
|
||||
typedef virCPUx86Model *virCPUx86ModelPtr;
|
||||
struct _virCPUx86Model {
|
||||
char *name;
|
||||
+ bool decodeHost;
|
||||
+ bool decodeGuest;
|
||||
virCPUx86VendorPtr vendor;
|
||||
size_t nsignatures;
|
||||
uint32_t *signatures;
|
||||
@@ -1347,6 +1349,44 @@ x86ModelCompare(virCPUx86ModelPtr model1,
|
||||
}
|
||||
|
||||
|
||||
+static int
|
||||
+x86ModelParseDecode(virCPUx86ModelPtr model,
|
||||
+ xmlXPathContextPtr ctxt)
|
||||
+{
|
||||
+ g_autofree char *host = NULL;
|
||||
+ g_autofree char *guest = NULL;
|
||||
+ int val;
|
||||
+
|
||||
+ if ((host = virXPathString("string(./decode/@host)", ctxt)))
|
||||
+ val = virTristateSwitchTypeFromString(host);
|
||||
+ else
|
||||
+ val = VIR_TRISTATE_SWITCH_ABSENT;
|
||||
+
|
||||
+ if (val <= 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("invalid or missing decode/host attribute in CPU model %s"),
|
||||
+ model->name);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ model->decodeHost = val == VIR_TRISTATE_SWITCH_ON;
|
||||
+
|
||||
+ if ((guest = virXPathString("string(./decode/@guest)", ctxt)))
|
||||
+ val = virTristateSwitchTypeFromString(guest);
|
||||
+ else
|
||||
+ val = VIR_TRISTATE_SWITCH_ABSENT;
|
||||
+
|
||||
+ if (val <= 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("invalid or missing decode/guest attribute in CPU model %s"),
|
||||
+ model->name);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ model->decodeGuest = val == VIR_TRISTATE_SWITCH_ON;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
x86ModelParseAncestor(virCPUx86ModelPtr model,
|
||||
xmlXPathContextPtr ctxt,
|
||||
@@ -1521,6 +1561,9 @@ x86ModelParse(xmlXPathContextPtr ctxt,
|
||||
|
||||
model->name = g_strdup(name);
|
||||
|
||||
+ if (x86ModelParseDecode(model, ctxt) < 0)
|
||||
+ goto cleanup;
|
||||
+
|
||||
if (x86ModelParseAncestor(model, ctxt, map) < 0)
|
||||
goto cleanup;
|
||||
|
||||
diff --git a/src/cpu_map/x86_486.xml b/src/cpu_map/x86_486.xml
|
||||
index 61fa3797e8..d05b277392 100644
|
||||
--- a/src/cpu_map/x86_486.xml
|
||||
+++ b/src/cpu_map/x86_486.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='486'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='fpu'/>
|
||||
<feature name='pse'/>
|
||||
<feature name='vme'/>
|
||||
diff --git a/src/cpu_map/x86_Broadwell-IBRS.xml b/src/cpu_map/x86_Broadwell-IBRS.xml
|
||||
index 4600cacec0..9033d5fcd5 100644
|
||||
--- a/src/cpu_map/x86_Broadwell-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Broadwell-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Broadwell-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='61'/> <!-- 0306d0 -->
|
||||
<signature family='6' model='71'/> <!-- 040670 -->
|
||||
<signature family='6' model='79'/> <!-- 0406f0 -->
|
||||
diff --git a/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml b/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml
|
||||
index b3fc0b726a..c044b60e36 100644
|
||||
--- a/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Broadwell-noTSX-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='61'/> <!-- 0306d0 -->
|
||||
<signature family='6' model='71'/> <!-- 040670 -->
|
||||
<signature family='6' model='79'/> <!-- 0406f0 -->
|
||||
diff --git a/src/cpu_map/x86_Broadwell-noTSX.xml b/src/cpu_map/x86_Broadwell-noTSX.xml
|
||||
index ad932d0853..637f29ba1c 100644
|
||||
--- a/src/cpu_map/x86_Broadwell-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Broadwell-noTSX.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Broadwell-noTSX'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='61'/> <!-- 0306d0 -->
|
||||
<signature family='6' model='71'/> <!-- 040670 -->
|
||||
<signature family='6' model='79'/> <!-- 0406f0 -->
|
||||
diff --git a/src/cpu_map/x86_Broadwell.xml b/src/cpu_map/x86_Broadwell.xml
|
||||
index 6de9227322..82939a4509 100644
|
||||
--- a/src/cpu_map/x86_Broadwell.xml
|
||||
+++ b/src/cpu_map/x86_Broadwell.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Broadwell'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='61'/> <!-- 0306d0 -->
|
||||
<signature family='6' model='71'/> <!-- 040670 -->
|
||||
<signature family='6' model='79'/> <!-- 0406f0 -->
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
index d24415ebce..5adea664e9 100644
|
||||
--- a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Cascadelake-Server-noTSX'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server.xml b/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
index b69ac198b6..d7ec42f57e 100644
|
||||
--- a/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Cascadelake-Server'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Conroe.xml b/src/cpu_map/x86_Conroe.xml
|
||||
index 89fe0ad2cf..4cacee6142 100644
|
||||
--- a/src/cpu_map/x86_Conroe.xml
|
||||
+++ b/src/cpu_map/x86_Conroe.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Conroe'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='15'/> <!-- 0006f0 -->
|
||||
<signature family='6' model='22'/> <!-- 010660 -->
|
||||
<vendor name='Intel'/>
|
||||
diff --git a/src/cpu_map/x86_Dhyana.xml b/src/cpu_map/x86_Dhyana.xml
|
||||
index cbc8020a94..689daf8649 100644
|
||||
--- a/src/cpu_map/x86_Dhyana.xml
|
||||
+++ b/src/cpu_map/x86_Dhyana.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Dhyana'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='24' model='0'/> <!-- 900f00 -->
|
||||
<vendor name='Hygon'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_EPYC-IBPB.xml b/src/cpu_map/x86_EPYC-IBPB.xml
|
||||
index 283697ebd1..983c5f4445 100644
|
||||
--- a/src/cpu_map/x86_EPYC-IBPB.xml
|
||||
+++ b/src/cpu_map/x86_EPYC-IBPB.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='EPYC-IBPB'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='23' model='1'/> <!-- 800f10 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_EPYC.xml b/src/cpu_map/x86_EPYC.xml
|
||||
index f0601392fd..3ebba9f4ed 100644
|
||||
--- a/src/cpu_map/x86_EPYC.xml
|
||||
+++ b/src/cpu_map/x86_EPYC.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='EPYC'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='23' model='1'/> <!-- 800f10 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Haswell-IBRS.xml b/src/cpu_map/x86_Haswell-IBRS.xml
|
||||
index 4f86db838f..0ffe2bae0d 100644
|
||||
--- a/src/cpu_map/x86_Haswell-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Haswell-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Haswell-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='60'/> <!-- 0306c0 -->
|
||||
<signature family='6' model='63'/> <!-- 0306f0 -->
|
||||
<signature family='6' model='69'/> <!-- 040650 -->
|
||||
diff --git a/src/cpu_map/x86_Haswell-noTSX-IBRS.xml b/src/cpu_map/x86_Haswell-noTSX-IBRS.xml
|
||||
index 47318be6d5..75d709c009 100644
|
||||
--- a/src/cpu_map/x86_Haswell-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Haswell-noTSX-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Haswell-noTSX-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='60'/> <!-- 0306c0 -->
|
||||
<signature family='6' model='63'/> <!-- 0306f0 -->
|
||||
<signature family='6' model='69'/> <!-- 040650 -->
|
||||
diff --git a/src/cpu_map/x86_Haswell-noTSX.xml b/src/cpu_map/x86_Haswell-noTSX.xml
|
||||
index efd10c47de..b0a0faa856 100644
|
||||
--- a/src/cpu_map/x86_Haswell-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Haswell-noTSX.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Haswell-noTSX'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='60'/> <!-- 0306c0 -->
|
||||
<signature family='6' model='63'/> <!-- 0306f0 -->
|
||||
<signature family='6' model='69'/> <!-- 040650 -->
|
||||
diff --git a/src/cpu_map/x86_Haswell.xml b/src/cpu_map/x86_Haswell.xml
|
||||
index ac358d7967..ee16b30f19 100644
|
||||
--- a/src/cpu_map/x86_Haswell.xml
|
||||
+++ b/src/cpu_map/x86_Haswell.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Haswell'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='60'/> <!-- 0306c0 -->
|
||||
<signature family='6' model='63'/> <!-- 0306f0 -->
|
||||
<signature family='6' model='69'/> <!-- 040650 -->
|
||||
diff --git a/src/cpu_map/x86_Icelake-Client-noTSX.xml b/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
index cd51881f40..540732af6f 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Icelake-Client-noTSX'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='126'/> <!-- 0706e0 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Client.xml b/src/cpu_map/x86_Icelake-Client.xml
|
||||
index fbd53bbe11..5cf32e91fa 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Client.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Client.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Icelake-Client'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='126'/> <!-- 0706e0 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Server-noTSX.xml b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
index 538c656712..5a53da23c7 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Icelake-Server-noTSX'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='134'/> <!-- 080660 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Server.xml b/src/cpu_map/x86_Icelake-Server.xml
|
||||
index a565371977..367ade7240 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Server.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Icelake-Server'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='134'/> <!-- 080660 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_IvyBridge-IBRS.xml b/src/cpu_map/x86_IvyBridge-IBRS.xml
|
||||
index e0f2adfa82..430bc3232d 100644
|
||||
--- a/src/cpu_map/x86_IvyBridge-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_IvyBridge-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='IvyBridge-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='58'/> <!-- 0306a0 -->
|
||||
<signature family='6' model='62'/> <!-- 0306e0 -->
|
||||
<vendor name='Intel'/>
|
||||
diff --git a/src/cpu_map/x86_IvyBridge.xml b/src/cpu_map/x86_IvyBridge.xml
|
||||
index 16213dbc62..eaf5d02e82 100644
|
||||
--- a/src/cpu_map/x86_IvyBridge.xml
|
||||
+++ b/src/cpu_map/x86_IvyBridge.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='IvyBridge'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='58'/> <!-- 0306a0 -->
|
||||
<signature family='6' model='62'/> <!-- 0306e0 -->
|
||||
<vendor name='Intel'/>
|
||||
diff --git a/src/cpu_map/x86_Nehalem-IBRS.xml b/src/cpu_map/x86_Nehalem-IBRS.xml
|
||||
index 8cc19eff03..00d0d2fe51 100644
|
||||
--- a/src/cpu_map/x86_Nehalem-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Nehalem-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Nehalem-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='26'/> <!-- 0106a0 -->
|
||||
<signature family='6' model='30'/> <!-- 0106e0 -->
|
||||
<signature family='6' model='31'/> <!-- 0106f0 -->
|
||||
diff --git a/src/cpu_map/x86_Nehalem.xml b/src/cpu_map/x86_Nehalem.xml
|
||||
index 530e5e8a0d..9968001fe7 100644
|
||||
--- a/src/cpu_map/x86_Nehalem.xml
|
||||
+++ b/src/cpu_map/x86_Nehalem.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Nehalem'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='26'/> <!-- 0106a0 -->
|
||||
<signature family='6' model='30'/> <!-- 0106e0 -->
|
||||
<signature family='6' model='31'/> <!-- 0106f0 -->
|
||||
diff --git a/src/cpu_map/x86_Opteron_G1.xml b/src/cpu_map/x86_Opteron_G1.xml
|
||||
index 73cf1de71e..57648ca93f 100644
|
||||
--- a/src/cpu_map/x86_Opteron_G1.xml
|
||||
+++ b/src/cpu_map/x86_Opteron_G1.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Opteron_G1'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='15' model='6'/> <!-- 100e60 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='apic'/>
|
||||
diff --git a/src/cpu_map/x86_Opteron_G2.xml b/src/cpu_map/x86_Opteron_G2.xml
|
||||
index 342105730e..db961b0067 100644
|
||||
--- a/src/cpu_map/x86_Opteron_G2.xml
|
||||
+++ b/src/cpu_map/x86_Opteron_G2.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Opteron_G2'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='15' model='6'/> <!-- 100e60 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='apic'/>
|
||||
diff --git a/src/cpu_map/x86_Opteron_G3.xml b/src/cpu_map/x86_Opteron_G3.xml
|
||||
index 7fbf8ac9e9..dab59d4f82 100644
|
||||
--- a/src/cpu_map/x86_Opteron_G3.xml
|
||||
+++ b/src/cpu_map/x86_Opteron_G3.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Opteron_G3'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='15' model='6'/> <!-- 100e60 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='abm'/>
|
||||
diff --git a/src/cpu_map/x86_Opteron_G4.xml b/src/cpu_map/x86_Opteron_G4.xml
|
||||
index 463b3676a0..a7fc8d5828 100644
|
||||
--- a/src/cpu_map/x86_Opteron_G4.xml
|
||||
+++ b/src/cpu_map/x86_Opteron_G4.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Opteron_G4'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='21' model='1'/> <!-- 600f10 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Opteron_G5.xml b/src/cpu_map/x86_Opteron_G5.xml
|
||||
index 0f8fe32c87..ff775bdcef 100644
|
||||
--- a/src/cpu_map/x86_Opteron_G5.xml
|
||||
+++ b/src/cpu_map/x86_Opteron_G5.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Opteron_G5'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='21' model='2'/> <!-- 600f20 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Penryn.xml b/src/cpu_map/x86_Penryn.xml
|
||||
index 279bb05570..29d4cd635b 100644
|
||||
--- a/src/cpu_map/x86_Penryn.xml
|
||||
+++ b/src/cpu_map/x86_Penryn.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Penryn'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='23'/> <!-- 010670 -->
|
||||
<signature family='6' model='29'/> <!-- 0106d0 -->
|
||||
<vendor name='Intel'/>
|
||||
diff --git a/src/cpu_map/x86_SandyBridge-IBRS.xml b/src/cpu_map/x86_SandyBridge-IBRS.xml
|
||||
index 7d1342ec6f..fbdb4f2bf6 100644
|
||||
--- a/src/cpu_map/x86_SandyBridge-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_SandyBridge-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='SandyBridge-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='42'/> <!-- 0206a0 -->
|
||||
<signature family='6' model='45'/> <!-- 0206d0 -->
|
||||
<vendor name='Intel'/>
|
||||
diff --git a/src/cpu_map/x86_SandyBridge.xml b/src/cpu_map/x86_SandyBridge.xml
|
||||
index 48e4ac8082..7c85ed42df 100644
|
||||
--- a/src/cpu_map/x86_SandyBridge.xml
|
||||
+++ b/src/cpu_map/x86_SandyBridge.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='SandyBridge'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='42'/> <!-- 0206a0 -->
|
||||
<signature family='6' model='45'/> <!-- 0206d0 -->
|
||||
<vendor name='Intel'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client-IBRS.xml b/src/cpu_map/x86_Skylake-Client-IBRS.xml
|
||||
index 4440313fc4..5709e7c2f9 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Client-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Client-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Client-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='94'/> <!-- 0506e0 -->
|
||||
<signature family='6' model='78'/> <!-- 0406e0 -->
|
||||
<!-- These are Kaby Lake and Coffee Lake successors to Skylake,
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
index 3d2976692f..0c2f1e6ac4 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Client-noTSX-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='94'/> <!-- 0506e0 -->
|
||||
<signature family='6' model='78'/> <!-- 0406e0 -->
|
||||
<!-- These are Kaby Lake and Coffee Lake successors to Skylake,
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client.xml b/src/cpu_map/x86_Skylake-Client.xml
|
||||
index 1053fa4a04..14cd57e176 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Client.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Client.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Client'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='94'/> <!-- 0506e0 -->
|
||||
<signature family='6' model='78'/> <!-- 0406e0 -->
|
||||
<!-- These are Kaby Lake and Coffee Lake successors to Skylake,
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-IBRS.xml b/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
index 71179f9f74..bd6b6457ad 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
index 455a072119..91a206f575 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server-noTSX-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server.xml b/src/cpu_map/x86_Skylake-Server.xml
|
||||
index 2da69e0dfc..f96875a85f 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Westmere-IBRS.xml b/src/cpu_map/x86_Westmere-IBRS.xml
|
||||
index 3baf56f47a..c7898f0c22 100644
|
||||
--- a/src/cpu_map/x86_Westmere-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Westmere-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Westmere-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='44'/> <!-- 0206c0 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='aes'/>
|
||||
diff --git a/src/cpu_map/x86_Westmere.xml b/src/cpu_map/x86_Westmere.xml
|
||||
index 95c1d690c8..16e4ad6c30 100644
|
||||
--- a/src/cpu_map/x86_Westmere.xml
|
||||
+++ b/src/cpu_map/x86_Westmere.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Westmere'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='44'/> <!-- 0206c0 -->
|
||||
<signature family='6' model='47'/> <!-- 0206f0 -->
|
||||
<signature family='6' model='37'/> <!-- 020650 -->
|
||||
diff --git a/src/cpu_map/x86_athlon.xml b/src/cpu_map/x86_athlon.xml
|
||||
index 0d44508e20..81c43c81e8 100644
|
||||
--- a/src/cpu_map/x86_athlon.xml
|
||||
+++ b/src/cpu_map/x86_athlon.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='athlon'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<vendor name='AMD'/>
|
||||
<feature name='3dnow'/>
|
||||
<feature name='3dnowext'/>
|
||||
diff --git a/src/cpu_map/x86_core2duo.xml b/src/cpu_map/x86_core2duo.xml
|
||||
index 3c9a148f3c..412039fe55 100644
|
||||
--- a/src/cpu_map/x86_core2duo.xml
|
||||
+++ b/src/cpu_map/x86_core2duo.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='core2duo'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<vendor name='Intel'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
diff --git a/src/cpu_map/x86_coreduo.xml b/src/cpu_map/x86_coreduo.xml
|
||||
index 676e846920..e2fda9a1d4 100644
|
||||
--- a/src/cpu_map/x86_coreduo.xml
|
||||
+++ b/src/cpu_map/x86_coreduo.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='coreduo'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<vendor name='Intel'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
diff --git a/src/cpu_map/x86_cpu64-rhel5.xml b/src/cpu_map/x86_cpu64-rhel5.xml
|
||||
index 670a92f274..be6bcdb7a6 100644
|
||||
--- a/src/cpu_map/x86_cpu64-rhel5.xml
|
||||
+++ b/src/cpu_map/x86_cpu64-rhel5.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='cpu64-rhel5'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
<feature name='cmov'/>
|
||||
diff --git a/src/cpu_map/x86_cpu64-rhel6.xml b/src/cpu_map/x86_cpu64-rhel6.xml
|
||||
index 3cae0f00c2..c62b1b5575 100644
|
||||
--- a/src/cpu_map/x86_cpu64-rhel6.xml
|
||||
+++ b/src/cpu_map/x86_cpu64-rhel6.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='cpu64-rhel6'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
<feature name='cmov'/>
|
||||
diff --git a/src/cpu_map/x86_kvm32.xml b/src/cpu_map/x86_kvm32.xml
|
||||
index 5f08a5e7fc..9dd96d5b56 100644
|
||||
--- a/src/cpu_map/x86_kvm32.xml
|
||||
+++ b/src/cpu_map/x86_kvm32.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='kvm32'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
<feature name='cmov'/>
|
||||
diff --git a/src/cpu_map/x86_kvm64.xml b/src/cpu_map/x86_kvm64.xml
|
||||
index 80b24e2a49..185af06f78 100644
|
||||
--- a/src/cpu_map/x86_kvm64.xml
|
||||
+++ b/src/cpu_map/x86_kvm64.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='kvm64'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
<feature name='cmov'/>
|
||||
diff --git a/src/cpu_map/x86_n270.xml b/src/cpu_map/x86_n270.xml
|
||||
index cb359d968e..5507d2ea3b 100644
|
||||
--- a/src/cpu_map/x86_n270.xml
|
||||
+++ b/src/cpu_map/x86_n270.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='n270'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<vendor name='Intel'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
diff --git a/src/cpu_map/x86_pentium.xml b/src/cpu_map/x86_pentium.xml
|
||||
index d44c1399b0..f0a8982115 100644
|
||||
--- a/src/cpu_map/x86_pentium.xml
|
||||
+++ b/src/cpu_map/x86_pentium.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='pentium'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='cx8'/>
|
||||
<feature name='de'/>
|
||||
<feature name='fpu'/>
|
||||
diff --git a/src/cpu_map/x86_pentium2.xml b/src/cpu_map/x86_pentium2.xml
|
||||
index 0d772bad2f..aeba082297 100644
|
||||
--- a/src/cpu_map/x86_pentium2.xml
|
||||
+++ b/src/cpu_map/x86_pentium2.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='pentium2'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='cmov'/>
|
||||
<feature name='cx8'/>
|
||||
<feature name='de'/>
|
||||
diff --git a/src/cpu_map/x86_pentium3.xml b/src/cpu_map/x86_pentium3.xml
|
||||
index 24eb227c28..ab85d2967f 100644
|
||||
--- a/src/cpu_map/x86_pentium3.xml
|
||||
+++ b/src/cpu_map/x86_pentium3.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='pentium3'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='cmov'/>
|
||||
<feature name='cx8'/>
|
||||
<feature name='de'/>
|
||||
diff --git a/src/cpu_map/x86_pentiumpro.xml b/src/cpu_map/x86_pentiumpro.xml
|
||||
index 9f7a610a87..b6e061187c 100644
|
||||
--- a/src/cpu_map/x86_pentiumpro.xml
|
||||
+++ b/src/cpu_map/x86_pentiumpro.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='pentiumpro'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='cmov'/>
|
||||
<feature name='cx8'/>
|
||||
diff --git a/src/cpu_map/x86_phenom.xml b/src/cpu_map/x86_phenom.xml
|
||||
index 71f004057b..f0f8ece57a 100644
|
||||
--- a/src/cpu_map/x86_phenom.xml
|
||||
+++ b/src/cpu_map/x86_phenom.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='phenom'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<vendor name='AMD'/>
|
||||
<feature name='3dnow'/>
|
||||
<feature name='3dnowext'/>
|
||||
diff --git a/src/cpu_map/x86_qemu32.xml b/src/cpu_map/x86_qemu32.xml
|
||||
index 3c9cdec981..f3fb1959be 100644
|
||||
--- a/src/cpu_map/x86_qemu32.xml
|
||||
+++ b/src/cpu_map/x86_qemu32.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='qemu32'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='cmov'/>
|
||||
<feature name='cx8'/>
|
||||
diff --git a/src/cpu_map/x86_qemu64.xml b/src/cpu_map/x86_qemu64.xml
|
||||
index a8e8dfe58d..0fe207a2b4 100644
|
||||
--- a/src/cpu_map/x86_qemu64.xml
|
||||
+++ b/src/cpu_map/x86_qemu64.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='qemu64'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<!-- These are supported only by TCG. KVM supports them only if the
|
||||
host does. So we leave them out:
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
831
SOURCES/libvirt-cpu_map-Add-more-noTSX-x86-CPU-models.patch
Normal file
831
SOURCES/libvirt-cpu_map-Add-more-noTSX-x86-CPU-models.patch
Normal file
@ -0,0 +1,831 @@
|
||||
From 59287d64100517e89dbd3a88af6fec4755ceab42 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <59287d64100517e89dbd3a88af6fec4755ceab42@dist-git>
|
||||
From: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Date: Tue, 26 May 2020 10:58:55 +0200
|
||||
Subject: [PATCH] cpu_map: Add more -noTSX x86 CPU models
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
One of the mitigation methods for TAA[1] is to disable TSX
|
||||
support on the host system. Linux added a mechanism to disable
|
||||
TSX globally through the kernel command line, and many Linux
|
||||
distributions now default to tsx=off. This makes existing CPU
|
||||
models that have HLE and RTM enabled not usable anymore.
|
||||
|
||||
Add new versions of all CPU models that have the HLE and RTM
|
||||
features enabled, that can be used when TSX is disabled in the
|
||||
host system.
|
||||
|
||||
On systems disabling the features without those types defined
|
||||
in cpu-maps users end up without modern CPU types in the list
|
||||
of usable CPUs to use in the likes of virsh domcapabilities
|
||||
or tools higher in the stack like virt-manager.
|
||||
|
||||
This adds:
|
||||
-Cascadelake-Server-noTSX
|
||||
-Icelake-Client-noTSX
|
||||
-Icelake-Server-noTSX
|
||||
-Skylake-Server-noTSX-IBRS
|
||||
-Skylake-Client-noTSX-IBRS
|
||||
|
||||
Introduced in QEMU by commit v4.2.0-rc2-3-g9ab2237f19 (function)
|
||||
and commit v4.2.0-rc2-4-g02fa60d101 (names)
|
||||
|
||||
References:
|
||||
|
||||
[1] TAA, TSX asynchronous Abort:
|
||||
https://software.intel.com/security-software-guidance/insights/deep-dive-intel-transactional-synchronization-extensions-intel-tsx-asynchronous-abort
|
||||
https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/tsx_async_abort.html
|
||||
|
||||
Fixes: https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1853200
|
||||
|
||||
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Message-Id: <20200310104806.2723-2-christian.ehrhardt@canonical.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit dd17a4eba8618aeb0144f268f2222f65a85425fc)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840008
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <ab2edc2c9107c87dfa7153b6c54ddd1401c82a4b.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu_map/Makefile.inc.am | 5 ++
|
||||
src/cpu_map/index.xml | 5 ++
|
||||
src/cpu_map/x86_Cascadelake-Server-noTSX.xml | 78 ++++++++++++++++
|
||||
src/cpu_map/x86_Icelake-Client-noTSX.xml | 81 +++++++++++++++++
|
||||
src/cpu_map/x86_Icelake-Server-noTSX.xml | 90 +++++++++++++++++++
|
||||
src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml | 73 +++++++++++++++
|
||||
src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml | 75 ++++++++++++++++
|
||||
.../x86_64-cpuid-Core-i7-8550U-guest.xml | 4 +-
|
||||
.../x86_64-cpuid-Core-i7-8550U-host.xml | 11 +--
|
||||
.../x86_64-cpuid-Core-i7-8550U-json.xml | 4 +-
|
||||
.../domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 5 ++
|
||||
.../domaincapsdata/qemu_4.2.0-tcg.x86_64.xml | 5 ++
|
||||
tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 5 ++
|
||||
.../domaincapsdata/qemu_5.0.0-q35.x86_64.xml | 5 ++
|
||||
.../domaincapsdata/qemu_5.0.0-tcg.x86_64.xml | 5 ++
|
||||
tests/domaincapsdata/qemu_5.0.0.x86_64.xml | 5 ++
|
||||
16 files changed, 440 insertions(+), 16 deletions(-)
|
||||
create mode 100644 src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
create mode 100644 src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
create mode 100644 src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
create mode 100644 src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
create mode 100644 src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
|
||||
diff --git a/src/cpu_map/Makefile.inc.am b/src/cpu_map/Makefile.inc.am
|
||||
index e935178304..be64c9a0d4 100644
|
||||
--- a/src/cpu_map/Makefile.inc.am
|
||||
+++ b/src/cpu_map/Makefile.inc.am
|
||||
@@ -20,6 +20,7 @@ cpumap_DATA = \
|
||||
cpu_map/x86_Broadwell-noTSX.xml \
|
||||
cpu_map/x86_Broadwell-noTSX-IBRS.xml \
|
||||
cpu_map/x86_Cascadelake-Server.xml \
|
||||
+ cpu_map/x86_Cascadelake-Server-noTSX.xml \
|
||||
cpu_map/x86_Conroe.xml \
|
||||
cpu_map/x86_core2duo.xml \
|
||||
cpu_map/x86_coreduo.xml \
|
||||
@@ -33,7 +34,9 @@ cpumap_DATA = \
|
||||
cpu_map/x86_Haswell-noTSX.xml \
|
||||
cpu_map/x86_Haswell-noTSX-IBRS.xml \
|
||||
cpu_map/x86_Icelake-Client.xml \
|
||||
+ cpu_map/x86_Icelake-Client-noTSX.xml \
|
||||
cpu_map/x86_Icelake-Server.xml \
|
||||
+ cpu_map/x86_Icelake-Server-noTSX.xml \
|
||||
cpu_map/x86_IvyBridge.xml \
|
||||
cpu_map/x86_IvyBridge-IBRS.xml \
|
||||
cpu_map/x86_kvm32.xml \
|
||||
@@ -58,8 +61,10 @@ cpumap_DATA = \
|
||||
cpu_map/x86_SandyBridge-IBRS.xml \
|
||||
cpu_map/x86_Skylake-Client.xml \
|
||||
cpu_map/x86_Skylake-Client-IBRS.xml \
|
||||
+ cpu_map/x86_Skylake-Client-noTSX-IBRS.xml \
|
||||
cpu_map/x86_Skylake-Server.xml \
|
||||
cpu_map/x86_Skylake-Server-IBRS.xml \
|
||||
+ cpu_map/x86_Skylake-Server-noTSX-IBRS.xml \
|
||||
cpu_map/x86_Westmere.xml \
|
||||
cpu_map/x86_Westmere-IBRS.xml \
|
||||
$(NULL)
|
||||
diff --git a/src/cpu_map/index.xml b/src/cpu_map/index.xml
|
||||
index ffb2f6fe1b..50b030de29 100644
|
||||
--- a/src/cpu_map/index.xml
|
||||
+++ b/src/cpu_map/index.xml
|
||||
@@ -44,11 +44,16 @@
|
||||
<include filename="x86_Broadwell-IBRS.xml"/>
|
||||
<include filename="x86_Skylake-Client.xml"/>
|
||||
<include filename="x86_Skylake-Client-IBRS.xml"/>
|
||||
+ <include filename="x86_Skylake-Client-noTSX-IBRS.xml"/>
|
||||
<include filename="x86_Skylake-Server.xml"/>
|
||||
<include filename="x86_Skylake-Server-IBRS.xml"/>
|
||||
+ <include filename="x86_Skylake-Server-noTSX-IBRS.xml"/>
|
||||
<include filename="x86_Cascadelake-Server.xml"/>
|
||||
+ <include filename="x86_Cascadelake-Server-noTSX.xml"/>
|
||||
<include filename="x86_Icelake-Client.xml"/>
|
||||
+ <include filename="x86_Icelake-Client-noTSX.xml"/>
|
||||
<include filename="x86_Icelake-Server.xml"/>
|
||||
+ <include filename="x86_Icelake-Server-noTSX.xml"/>
|
||||
|
||||
<!-- AMD CPUs -->
|
||||
<include filename="x86_athlon.xml"/>
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
new file mode 100644
|
||||
index 0000000000..d24415ebce
|
||||
--- /dev/null
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
@@ -0,0 +1,78 @@
|
||||
+<cpus>
|
||||
+ <model name='Cascadelake-Server-noTSX'>
|
||||
+ <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <vendor name='Intel'/>
|
||||
+ <feature name='3dnowprefetch'/>
|
||||
+ <feature name='abm'/>
|
||||
+ <feature name='adx'/>
|
||||
+ <feature name='aes'/>
|
||||
+ <feature name='apic'/>
|
||||
+ <feature name='arat'/>
|
||||
+ <feature name='avx'/>
|
||||
+ <feature name='avx2'/>
|
||||
+ <feature name='avx512bw'/>
|
||||
+ <feature name='avx512cd'/>
|
||||
+ <feature name='avx512dq'/>
|
||||
+ <feature name='avx512f'/>
|
||||
+ <feature name='avx512vl'/>
|
||||
+ <feature name='avx512vnni'/>
|
||||
+ <feature name='bmi1'/>
|
||||
+ <feature name='bmi2'/>
|
||||
+ <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='fma'/>
|
||||
+ <feature name='fpu'/>
|
||||
+ <feature name='fsgsbase'/>
|
||||
+ <feature name='fxsr'/>
|
||||
+ <feature name='invpcid'/>
|
||||
+ <feature name='lahf_lm'/>
|
||||
+ <feature name='lm'/>
|
||||
+ <feature name='mca'/>
|
||||
+ <feature name='mce'/>
|
||||
+ <feature name='mmx'/>
|
||||
+ <feature name='movbe'/>
|
||||
+ <feature name='mpx'/>
|
||||
+ <feature name='msr'/>
|
||||
+ <feature name='mtrr'/>
|
||||
+ <feature name='nx'/>
|
||||
+ <feature name='pae'/>
|
||||
+ <feature name='pat'/>
|
||||
+ <feature name='pcid'/>
|
||||
+ <feature name='pclmuldq'/>
|
||||
+ <feature name='pdpe1gb'/>
|
||||
+ <feature name='pge'/>
|
||||
+ <feature name='pni'/>
|
||||
+ <feature name='popcnt'/>
|
||||
+ <feature name='pse'/>
|
||||
+ <feature name='pse36'/>
|
||||
+ <feature name='rdrand'/>
|
||||
+ <feature name='rdseed'/>
|
||||
+ <feature name='rdtscp'/>
|
||||
+ <feature name='sep'/>
|
||||
+ <feature name='smap'/>
|
||||
+ <feature name='smep'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ <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='tsc'/>
|
||||
+ <feature name='tsc-deadline'/>
|
||||
+ <feature name='vme'/>
|
||||
+ <feature name='x2apic'/>
|
||||
+ <feature name='xgetbv1'/>
|
||||
+ <feature name='xsave'/>
|
||||
+ <feature name='xsavec'/>
|
||||
+ <feature name='xsaveopt'/>
|
||||
+ </model>
|
||||
+</cpus>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Client-noTSX.xml b/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
new file mode 100644
|
||||
index 0000000000..cd51881f40
|
||||
--- /dev/null
|
||||
+++ b/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
@@ -0,0 +1,81 @@
|
||||
+<cpus>
|
||||
+ <model name='Icelake-Client-noTSX'>
|
||||
+ <signature family='6' model='126'/> <!-- 0706e0 -->
|
||||
+ <vendor name='Intel'/>
|
||||
+ <feature name='3dnowprefetch'/>
|
||||
+ <feature name='abm'/>
|
||||
+ <feature name='adx'/>
|
||||
+ <feature name='aes'/>
|
||||
+ <feature name='apic'/>
|
||||
+ <feature name='arat'/>
|
||||
+ <feature name='avx'/>
|
||||
+ <feature name='avx2'/>
|
||||
+ <feature name='avx512-vpopcntdq'/>
|
||||
+ <feature name='avx512bitalg'/>
|
||||
+ <feature name='avx512vbmi'/>
|
||||
+ <feature name='avx512vbmi2'/>
|
||||
+ <feature name='avx512vnni'/>
|
||||
+ <feature name='bmi1'/>
|
||||
+ <feature name='bmi2'/>
|
||||
+ <feature name='clflush'/>
|
||||
+ <feature name='cmov'/>
|
||||
+ <feature name='cx16'/>
|
||||
+ <feature name='cx8'/>
|
||||
+ <feature name='de'/>
|
||||
+ <feature name='erms'/>
|
||||
+ <feature name='f16c'/>
|
||||
+ <feature name='fma'/>
|
||||
+ <feature name='fpu'/>
|
||||
+ <feature name='fsgsbase'/>
|
||||
+ <feature name='fxsr'/>
|
||||
+ <feature name='gfni'/>
|
||||
+ <feature name='intel-pt'/>
|
||||
+ <feature name='invpcid'/>
|
||||
+ <feature name='lahf_lm'/>
|
||||
+ <feature name='lm'/>
|
||||
+ <feature name='mca'/>
|
||||
+ <feature name='mce'/>
|
||||
+ <feature name='mmx'/>
|
||||
+ <feature name='movbe'/>
|
||||
+ <feature name='mpx'/>
|
||||
+ <feature name='msr'/>
|
||||
+ <feature name='mtrr'/>
|
||||
+ <feature name='nx'/>
|
||||
+ <feature name='pae'/>
|
||||
+ <feature name='pat'/>
|
||||
+ <feature name='pcid'/>
|
||||
+ <feature name='pclmuldq'/>
|
||||
+ <feature name='pge'/>
|
||||
+ <feature name='pku'/>
|
||||
+ <feature name='pni'/>
|
||||
+ <feature name='popcnt'/>
|
||||
+ <feature name='pse'/>
|
||||
+ <feature name='pse36'/>
|
||||
+ <feature name='rdrand'/>
|
||||
+ <feature name='rdseed'/>
|
||||
+ <feature name='rdtscp'/>
|
||||
+ <feature name='sep'/>
|
||||
+ <feature name='smap'/>
|
||||
+ <feature name='smep'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ <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='tsc'/>
|
||||
+ <feature name='tsc-deadline'/>
|
||||
+ <feature name='umip'/>
|
||||
+ <feature name='vaes'/>
|
||||
+ <feature name='vme'/>
|
||||
+ <feature name='vpclmulqdq'/>
|
||||
+ <feature name='wbnoinvd'/>
|
||||
+ <feature name='x2apic'/>
|
||||
+ <feature name='xgetbv1'/>
|
||||
+ <feature name='xsave'/>
|
||||
+ <feature name='xsavec'/>
|
||||
+ <feature name='xsaveopt'/>
|
||||
+ </model>
|
||||
+</cpus>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Server-noTSX.xml b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
new file mode 100644
|
||||
index 0000000000..538c656712
|
||||
--- /dev/null
|
||||
+++ b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
@@ -0,0 +1,90 @@
|
||||
+<cpus>
|
||||
+ <model name='Icelake-Server-noTSX'>
|
||||
+ <signature family='6' model='134'/> <!-- 080660 -->
|
||||
+ <vendor name='Intel'/>
|
||||
+ <feature name='3dnowprefetch'/>
|
||||
+ <feature name='abm'/>
|
||||
+ <feature name='adx'/>
|
||||
+ <feature name='aes'/>
|
||||
+ <feature name='apic'/>
|
||||
+ <feature name='arat'/>
|
||||
+ <feature name='avx'/>
|
||||
+ <feature name='avx2'/>
|
||||
+ <feature name='avx512-vpopcntdq'/>
|
||||
+ <feature name='avx512bitalg'/>
|
||||
+ <feature name='avx512bw'/>
|
||||
+ <feature name='avx512cd'/>
|
||||
+ <feature name='avx512dq'/>
|
||||
+ <feature name='avx512f'/>
|
||||
+ <feature name='avx512vbmi'/>
|
||||
+ <feature name='avx512vbmi2'/>
|
||||
+ <feature name='avx512vl'/>
|
||||
+ <feature name='avx512vnni'/>
|
||||
+ <feature name='bmi1'/>
|
||||
+ <feature name='bmi2'/>
|
||||
+ <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='fma'/>
|
||||
+ <feature name='fpu'/>
|
||||
+ <feature name='fsgsbase'/>
|
||||
+ <feature name='fxsr'/>
|
||||
+ <feature name='gfni'/>
|
||||
+ <feature name='intel-pt'/>
|
||||
+ <feature name='invpcid'/>
|
||||
+ <feature name='la57'/>
|
||||
+ <feature name='lahf_lm'/>
|
||||
+ <feature name='lm'/>
|
||||
+ <feature name='mca'/>
|
||||
+ <feature name='mce'/>
|
||||
+ <feature name='mmx'/>
|
||||
+ <feature name='movbe'/>
|
||||
+ <feature name='mpx'/>
|
||||
+ <feature name='msr'/>
|
||||
+ <feature name='mtrr'/>
|
||||
+ <feature name='nx'/>
|
||||
+ <feature name='pae'/>
|
||||
+ <feature name='pat'/>
|
||||
+ <feature name='pcid'/>
|
||||
+ <feature name='pclmuldq'/>
|
||||
+ <feature name='pdpe1gb'/>
|
||||
+ <feature name='pge'/>
|
||||
+ <feature name='pku'/>
|
||||
+ <feature name='pni'/>
|
||||
+ <feature name='popcnt'/>
|
||||
+ <feature name='pse'/>
|
||||
+ <feature name='pse36'/>
|
||||
+ <feature name='rdrand'/>
|
||||
+ <feature name='rdseed'/>
|
||||
+ <feature name='rdtscp'/>
|
||||
+ <feature name='sep'/>
|
||||
+ <feature name='smap'/>
|
||||
+ <feature name='smep'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ <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='tsc'/>
|
||||
+ <feature name='tsc-deadline'/>
|
||||
+ <feature name='umip'/>
|
||||
+ <feature name='vaes'/>
|
||||
+ <feature name='vme'/>
|
||||
+ <feature name='vpclmulqdq'/>
|
||||
+ <feature name='wbnoinvd'/>
|
||||
+ <feature name='x2apic'/>
|
||||
+ <feature name='xgetbv1'/>
|
||||
+ <feature name='xsave'/>
|
||||
+ <feature name='xsavec'/>
|
||||
+ <feature name='xsaveopt'/>
|
||||
+ </model>
|
||||
+</cpus>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
new file mode 100644
|
||||
index 0000000000..3d2976692f
|
||||
--- /dev/null
|
||||
+++ b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
@@ -0,0 +1,73 @@
|
||||
+<cpus>
|
||||
+ <model name='Skylake-Client-noTSX-IBRS'>
|
||||
+ <signature family='6' model='94'/> <!-- 0506e0 -->
|
||||
+ <signature family='6' model='78'/> <!-- 0406e0 -->
|
||||
+ <!-- These are Kaby Lake and Coffee Lake successors to Skylake,
|
||||
+ but we don't have specific models for them. -->
|
||||
+ <signature family='6' model='142'/> <!-- 0806e0 -->
|
||||
+ <signature family='6' model='158'/> <!-- 0906e0 -->
|
||||
+ <vendor name='Intel'/>
|
||||
+ <feature name='3dnowprefetch'/>
|
||||
+ <feature name='abm'/>
|
||||
+ <feature name='adx'/>
|
||||
+ <feature name='aes'/>
|
||||
+ <feature name='apic'/>
|
||||
+ <feature name='arat'/>
|
||||
+ <feature name='avx'/>
|
||||
+ <feature name='avx2'/>
|
||||
+ <feature name='bmi1'/>
|
||||
+ <feature name='bmi2'/>
|
||||
+ <feature name='clflush'/>
|
||||
+ <feature name='cmov'/>
|
||||
+ <feature name='cx16'/>
|
||||
+ <feature name='cx8'/>
|
||||
+ <feature name='de'/>
|
||||
+ <feature name='erms'/>
|
||||
+ <feature name='f16c'/>
|
||||
+ <feature name='fma'/>
|
||||
+ <feature name='fpu'/>
|
||||
+ <feature name='fsgsbase'/>
|
||||
+ <feature name='fxsr'/>
|
||||
+ <feature name='invpcid'/>
|
||||
+ <feature name='lahf_lm'/>
|
||||
+ <feature name='lm'/>
|
||||
+ <feature name='mca'/>
|
||||
+ <feature name='mce'/>
|
||||
+ <feature name='mmx'/>
|
||||
+ <feature name='movbe'/>
|
||||
+ <feature name='mpx'/>
|
||||
+ <feature name='msr'/>
|
||||
+ <feature name='mtrr'/>
|
||||
+ <feature name='nx'/>
|
||||
+ <feature name='pae'/>
|
||||
+ <feature name='pat'/>
|
||||
+ <feature name='pcid'/>
|
||||
+ <feature name='pclmuldq'/>
|
||||
+ <feature name='pge'/>
|
||||
+ <feature name='pni'/>
|
||||
+ <feature name='popcnt'/>
|
||||
+ <feature name='pse'/>
|
||||
+ <feature name='pse36'/>
|
||||
+ <feature name='rdrand'/>
|
||||
+ <feature name='rdseed'/>
|
||||
+ <feature name='rdtscp'/>
|
||||
+ <feature name='sep'/>
|
||||
+ <feature name='smap'/>
|
||||
+ <feature name='smep'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ <feature name='sse'/>
|
||||
+ <feature name='sse2'/>
|
||||
+ <feature name='sse4.1'/>
|
||||
+ <feature name='sse4.2'/>
|
||||
+ <feature name='ssse3'/>
|
||||
+ <feature name='syscall'/>
|
||||
+ <feature name='tsc'/>
|
||||
+ <feature name='tsc-deadline'/>
|
||||
+ <feature name='vme'/>
|
||||
+ <feature name='x2apic'/>
|
||||
+ <feature name='xgetbv1'/>
|
||||
+ <feature name='xsave'/>
|
||||
+ <feature name='xsavec'/>
|
||||
+ <feature name='xsaveopt'/>
|
||||
+ </model>
|
||||
+</cpus>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
new file mode 100644
|
||||
index 0000000000..455a072119
|
||||
--- /dev/null
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
@@ -0,0 +1,75 @@
|
||||
+<cpus>
|
||||
+ <model name='Skylake-Server-noTSX-IBRS'>
|
||||
+ <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <vendor name='Intel'/>
|
||||
+ <feature name='3dnowprefetch'/>
|
||||
+ <feature name='abm'/>
|
||||
+ <feature name='adx'/>
|
||||
+ <feature name='aes'/>
|
||||
+ <feature name='apic'/>
|
||||
+ <feature name='arat'/>
|
||||
+ <feature name='avx'/>
|
||||
+ <feature name='avx2'/>
|
||||
+ <feature name='avx512bw'/>
|
||||
+ <feature name='avx512cd'/>
|
||||
+ <feature name='avx512dq'/>
|
||||
+ <feature name='avx512f'/>
|
||||
+ <feature name='avx512vl'/>
|
||||
+ <feature name='bmi1'/>
|
||||
+ <feature name='bmi2'/>
|
||||
+ <feature name='clflush'/>
|
||||
+ <feature name='clwb'/>
|
||||
+ <feature name='cmov'/>
|
||||
+ <feature name='cx16'/>
|
||||
+ <feature name='cx8'/>
|
||||
+ <feature name='de'/>
|
||||
+ <feature name='erms'/>
|
||||
+ <feature name='f16c'/>
|
||||
+ <feature name='fma'/>
|
||||
+ <feature name='fpu'/>
|
||||
+ <feature name='fsgsbase'/>
|
||||
+ <feature name='fxsr'/>
|
||||
+ <feature name='invpcid'/>
|
||||
+ <feature name='lahf_lm'/>
|
||||
+ <feature name='lm'/>
|
||||
+ <feature name='mca'/>
|
||||
+ <feature name='mce'/>
|
||||
+ <feature name='mmx'/>
|
||||
+ <feature name='movbe'/>
|
||||
+ <feature name='mpx'/>
|
||||
+ <feature name='msr'/>
|
||||
+ <feature name='mtrr'/>
|
||||
+ <feature name='nx'/>
|
||||
+ <feature name='pae'/>
|
||||
+ <feature name='pat'/>
|
||||
+ <feature name='pcid'/>
|
||||
+ <feature name='pclmuldq'/>
|
||||
+ <feature name='pdpe1gb'/>
|
||||
+ <feature name='pge'/>
|
||||
+ <feature name='pni'/>
|
||||
+ <feature name='popcnt'/>
|
||||
+ <feature name='pse'/>
|
||||
+ <feature name='pse36'/>
|
||||
+ <feature name='rdrand'/>
|
||||
+ <feature name='rdseed'/>
|
||||
+ <feature name='rdtscp'/>
|
||||
+ <feature name='sep'/>
|
||||
+ <feature name='smap'/>
|
||||
+ <feature name='smep'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ <feature name='sse'/>
|
||||
+ <feature name='sse2'/>
|
||||
+ <feature name='sse4.1'/>
|
||||
+ <feature name='sse4.2'/>
|
||||
+ <feature name='ssse3'/>
|
||||
+ <feature name='syscall'/>
|
||||
+ <feature name='tsc'/>
|
||||
+ <feature name='tsc-deadline'/>
|
||||
+ <feature name='vme'/>
|
||||
+ <feature name='x2apic'/>
|
||||
+ <feature name='xgetbv1'/>
|
||||
+ <feature name='xsave'/>
|
||||
+ <feature name='xsavec'/>
|
||||
+ <feature name='xsaveopt'/>
|
||||
+ </model>
|
||||
+</cpus>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
index 92404e4d03..e03c4a06ba 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Skylake-Client-IBRS</model>
|
||||
+ <model fallback='forbid'>Skylake-Client-noTSX-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ds'/>
|
||||
<feature policy='require' name='acpi'/>
|
||||
@@ -26,6 +26,4 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
- <feature policy='disable' name='hle'/>
|
||||
- <feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
|
||||
index 808a8ff969..7f6fe2eac3 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
|
||||
@@ -1,8 +1,7 @@
|
||||
<cpu>
|
||||
<arch>x86_64</arch>
|
||||
- <model>Broadwell-noTSX-IBRS</model>
|
||||
+ <model>Skylake-Client-noTSX-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
- <feature name='vme'/>
|
||||
<feature name='ds'/>
|
||||
<feature name='acpi'/>
|
||||
<feature name='ss'/>
|
||||
@@ -18,22 +17,14 @@
|
||||
<feature name='xtpr'/>
|
||||
<feature name='pdcm'/>
|
||||
<feature name='osxsave'/>
|
||||
- <feature name='f16c'/>
|
||||
- <feature name='rdrand'/>
|
||||
- <feature name='arat'/>
|
||||
<feature name='tsc_adjust'/>
|
||||
- <feature name='mpx'/>
|
||||
<feature name='clflushopt'/>
|
||||
<feature name='intel-pt'/>
|
||||
<feature name='md-clear'/>
|
||||
<feature name='stibp'/>
|
||||
<feature name='ssbd'/>
|
||||
- <feature name='xsaveopt'/>
|
||||
- <feature name='xsavec'/>
|
||||
- <feature name='xgetbv1'/>
|
||||
<feature name='xsaves'/>
|
||||
<feature name='pdpe1gb'/>
|
||||
- <feature name='abm'/>
|
||||
<feature name='invtsc'/>
|
||||
<feature name='skip-l1dfl-vmentry'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
index 645c0934c2..3d8e6775bf 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Skylake-Client-IBRS</model>
|
||||
+ <model fallback='forbid'>Skylake-Client-noTSX-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ss'/>
|
||||
<feature policy='require' name='vmx'/>
|
||||
@@ -14,6 +14,4 @@
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
- <feature policy='disable' name='hle'/>
|
||||
- <feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
diff --git a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
|
||||
index c4c6bfb564..e257657981 100644
|
||||
--- a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
|
||||
@@ -63,8 +63,10 @@
|
||||
<model usable='no'>athlon</model>
|
||||
<model usable='yes'>Westmere-IBRS</model>
|
||||
<model usable='yes'>Westmere</model>
|
||||
+ <model usable='no'>Skylake-Server-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Server-IBRS</model>
|
||||
<model usable='no'>Skylake-Server</model>
|
||||
+ <model usable='yes'>Skylake-Client-noTSX-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client</model>
|
||||
<model usable='yes'>SandyBridge-IBRS</model>
|
||||
@@ -79,7 +81,9 @@
|
||||
<model usable='yes'>Nehalem</model>
|
||||
<model usable='yes'>IvyBridge-IBRS</model>
|
||||
<model usable='yes'>IvyBridge</model>
|
||||
+ <model usable='no'>Icelake-Server-noTSX</model>
|
||||
<model usable='no'>Icelake-Server</model>
|
||||
+ <model usable='no'>Icelake-Client-noTSX</model>
|
||||
<model usable='no'>Icelake-Client</model>
|
||||
<model usable='yes'>Haswell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Haswell-noTSX</model>
|
||||
@@ -89,6 +93,7 @@
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
+ <model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
<model usable='yes'>Broadwell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Broadwell-noTSX</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
|
||||
index a7f8d9c5ee..c762b0b600 100644
|
||||
--- a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
|
||||
@@ -73,8 +73,10 @@
|
||||
<model usable='yes'>athlon</model>
|
||||
<model usable='no'>Westmere-IBRS</model>
|
||||
<model usable='no'>Westmere</model>
|
||||
+ <model usable='no'>Skylake-Server-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Server-IBRS</model>
|
||||
<model usable='no'>Skylake-Server</model>
|
||||
+ <model usable='no'>Skylake-Client-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Client-IBRS</model>
|
||||
<model usable='no'>Skylake-Client</model>
|
||||
<model usable='no'>SandyBridge-IBRS</model>
|
||||
@@ -89,7 +91,9 @@
|
||||
<model usable='no'>Nehalem</model>
|
||||
<model usable='no'>IvyBridge-IBRS</model>
|
||||
<model usable='no'>IvyBridge</model>
|
||||
+ <model usable='no'>Icelake-Server-noTSX</model>
|
||||
<model usable='no'>Icelake-Server</model>
|
||||
+ <model usable='no'>Icelake-Client-noTSX</model>
|
||||
<model usable='no'>Icelake-Client</model>
|
||||
<model usable='no'>Haswell-noTSX-IBRS</model>
|
||||
<model usable='no'>Haswell-noTSX</model>
|
||||
@@ -99,6 +103,7 @@
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
+ <model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
<model usable='no'>Broadwell-noTSX-IBRS</model>
|
||||
<model usable='no'>Broadwell-noTSX</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
|
||||
index f0e0f182a4..2918ba9715 100644
|
||||
--- a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
|
||||
@@ -62,8 +62,10 @@
|
||||
<model usable='no'>athlon</model>
|
||||
<model usable='yes'>Westmere-IBRS</model>
|
||||
<model usable='yes'>Westmere</model>
|
||||
+ <model usable='no'>Skylake-Server-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Server-IBRS</model>
|
||||
<model usable='no'>Skylake-Server</model>
|
||||
+ <model usable='yes'>Skylake-Client-noTSX-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client</model>
|
||||
<model usable='yes'>SandyBridge-IBRS</model>
|
||||
@@ -78,7 +80,9 @@
|
||||
<model usable='yes'>Nehalem</model>
|
||||
<model usable='yes'>IvyBridge-IBRS</model>
|
||||
<model usable='yes'>IvyBridge</model>
|
||||
+ <model usable='no'>Icelake-Server-noTSX</model>
|
||||
<model usable='no'>Icelake-Server</model>
|
||||
+ <model usable='no'>Icelake-Client-noTSX</model>
|
||||
<model usable='no'>Icelake-Client</model>
|
||||
<model usable='yes'>Haswell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Haswell-noTSX</model>
|
||||
@@ -88,6 +92,7 @@
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
+ <model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
<model usable='yes'>Broadwell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Broadwell-noTSX</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
index b635d573ef..7b2a929738 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
@@ -63,8 +63,10 @@
|
||||
<model usable='no'>athlon</model>
|
||||
<model usable='yes'>Westmere-IBRS</model>
|
||||
<model usable='yes'>Westmere</model>
|
||||
+ <model usable='no'>Skylake-Server-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Server-IBRS</model>
|
||||
<model usable='no'>Skylake-Server</model>
|
||||
+ <model usable='yes'>Skylake-Client-noTSX-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client</model>
|
||||
<model usable='yes'>SandyBridge-IBRS</model>
|
||||
@@ -79,7 +81,9 @@
|
||||
<model usable='yes'>Nehalem</model>
|
||||
<model usable='yes'>IvyBridge-IBRS</model>
|
||||
<model usable='yes'>IvyBridge</model>
|
||||
+ <model usable='no'>Icelake-Server-noTSX</model>
|
||||
<model usable='no'>Icelake-Server</model>
|
||||
+ <model usable='no'>Icelake-Client-noTSX</model>
|
||||
<model usable='no'>Icelake-Client</model>
|
||||
<model usable='yes'>Haswell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Haswell-noTSX</model>
|
||||
@@ -89,6 +93,7 @@
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
+ <model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
<model usable='yes'>Broadwell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Broadwell-noTSX</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
|
||||
index 0fbc632267..d634803b29 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
|
||||
@@ -72,8 +72,10 @@
|
||||
<model usable='yes'>athlon</model>
|
||||
<model usable='no'>Westmere-IBRS</model>
|
||||
<model usable='yes'>Westmere</model>
|
||||
+ <model usable='no'>Skylake-Server-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Server-IBRS</model>
|
||||
<model usable='no'>Skylake-Server</model>
|
||||
+ <model usable='no'>Skylake-Client-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Client-IBRS</model>
|
||||
<model usable='no'>Skylake-Client</model>
|
||||
<model usable='no'>SandyBridge-IBRS</model>
|
||||
@@ -88,7 +90,9 @@
|
||||
<model usable='yes'>Nehalem</model>
|
||||
<model usable='no'>IvyBridge-IBRS</model>
|
||||
<model usable='no'>IvyBridge</model>
|
||||
+ <model usable='no'>Icelake-Server-noTSX</model>
|
||||
<model usable='no'>Icelake-Server</model>
|
||||
+ <model usable='no'>Icelake-Client-noTSX</model>
|
||||
<model usable='no'>Icelake-Client</model>
|
||||
<model usable='no'>Haswell-noTSX-IBRS</model>
|
||||
<model usable='no'>Haswell-noTSX</model>
|
||||
@@ -98,6 +102,7 @@
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
+ <model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
<model usable='no'>Broadwell-noTSX-IBRS</model>
|
||||
<model usable='no'>Broadwell-noTSX</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
index 27f76a8a5e..7609d49020 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
@@ -62,8 +62,10 @@
|
||||
<model usable='no'>athlon</model>
|
||||
<model usable='yes'>Westmere-IBRS</model>
|
||||
<model usable='yes'>Westmere</model>
|
||||
+ <model usable='no'>Skylake-Server-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Server-IBRS</model>
|
||||
<model usable='no'>Skylake-Server</model>
|
||||
+ <model usable='yes'>Skylake-Client-noTSX-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client</model>
|
||||
<model usable='yes'>SandyBridge-IBRS</model>
|
||||
@@ -78,7 +80,9 @@
|
||||
<model usable='yes'>Nehalem</model>
|
||||
<model usable='yes'>IvyBridge-IBRS</model>
|
||||
<model usable='yes'>IvyBridge</model>
|
||||
+ <model usable='no'>Icelake-Server-noTSX</model>
|
||||
<model usable='no'>Icelake-Server</model>
|
||||
+ <model usable='no'>Icelake-Client-noTSX</model>
|
||||
<model usable='no'>Icelake-Client</model>
|
||||
<model usable='yes'>Haswell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Haswell-noTSX</model>
|
||||
@@ -88,6 +92,7 @@
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
+ <model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
<model usable='yes'>Broadwell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Broadwell-noTSX</model>
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,212 @@
|
||||
From 7d0790fb5061cb956390ce5f7a2b92ac9702ada6 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <7d0790fb5061cb956390ce5f7a2b92ac9702ada6@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:39 +0200
|
||||
Subject: [PATCH] cpu_map: Add pschange-mc-no bit in IA32_ARCH_CAPABILITIES MSR
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
(cherry picked from commit 12eb0c9496e802bad9e5ec71cde888b8fdb1b0b4)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1781878
|
||||
|
||||
Conflicts:
|
||||
tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml
|
||||
tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml
|
||||
tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml
|
||||
tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml
|
||||
tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
|
||||
tests/domaincapsdata/qemu_5.1.0.x86_64.xml
|
||||
- test data files do not exist downstream
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <d106df21f8423a9acff9eb5bf75ab25611c1de1f.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_features.xml | 3 +++
|
||||
tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml | 2 +-
|
||||
tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml | 2 +-
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml | 1 +
|
||||
tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 1 +
|
||||
tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 1 +
|
||||
tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml | 1 +
|
||||
tests/domaincapsdata/qemu_5.0.0.x86_64.xml | 1 +
|
||||
14 files changed, 16 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
|
||||
index 2c4c29dc99..8525ae0fa5 100644
|
||||
--- a/src/cpu_map/x86_features.xml
|
||||
+++ b/src/cpu_map/x86_features.xml
|
||||
@@ -509,6 +509,9 @@
|
||||
<feature name='mds-no'>
|
||||
<msr index='0x10a' edx='0x00000000' eax='0x00000020'/>
|
||||
</feature>
|
||||
+ <feature name='pschange-mc-no'>
|
||||
+ <msr index='0x10a' edx='0x00000000' eax='0x00000040'/>
|
||||
+ </feature>
|
||||
<feature name='tsx-ctrl'>
|
||||
<msr index='0x10a' edx='0x00000000' eax='0x00000080'/>
|
||||
</feature>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
|
||||
index b5137e3c03..db5598740c 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
|
||||
@@ -35,6 +35,7 @@
|
||||
<feature policy='require' name='ibrs-all'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
<feature policy='require' name='mds-no'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='require' name='tsx-ctrl'/>
|
||||
<feature policy='require' name='taa-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
|
||||
index 52b352f4f1..6926b7c975 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
|
||||
@@ -36,6 +36,7 @@
|
||||
<feature name='ibrs-all'/>
|
||||
<feature name='skip-l1dfl-vmentry'/>
|
||||
<feature name='mds-no'/>
|
||||
+ <feature name='pschange-mc-no'/>
|
||||
<feature name='tsx-ctrl'/>
|
||||
<feature name='taa-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
|
||||
index e323d6205e..fc52805b2f 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
|
||||
@@ -18,6 +18,7 @@
|
||||
<feature policy='require' name='ibrs-all'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
<feature policy='require' name='mds-no'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='require' name='tsx-ctrl'/>
|
||||
<feature policy='require' name='taa-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml
|
||||
index 6c480eeacf..57f8ebabba 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml
|
||||
@@ -5,5 +5,5 @@
|
||||
<cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x009c47ab' ecx='0x00000004' edx='0xac000400'/>
|
||||
<cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
|
||||
<cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
|
||||
- <msr index='0x10a' edx='0x00000000' eax='0x00000008'/>
|
||||
+ <msr index='0x10a' edx='0x00000000' eax='0x00000048'/>
|
||||
</cpudata>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
index 92404e4d03..ed06515e99 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
@@ -26,6 +26,7 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='disable' name='hle'/>
|
||||
<feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
|
||||
index 7f6fe2eac3..7681c94649 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
|
||||
@@ -27,4 +27,5 @@
|
||||
<feature name='pdpe1gb'/>
|
||||
<feature name='invtsc'/>
|
||||
<feature name='skip-l1dfl-vmentry'/>
|
||||
+ <feature name='pschange-mc-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
index 645c0934c2..4774d39c7e 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
@@ -14,6 +14,7 @@
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='disable' name='hle'/>
|
||||
<feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml
|
||||
index 43c3a93a16..cd082feffe 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml
|
||||
@@ -6,5 +6,5 @@
|
||||
<cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
|
||||
<cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
|
||||
<cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x01001000' ecx='0x00000000' edx='0x00000000'/>
|
||||
- <msr index='0x10a' edx='0x00000000' eax='0x000000ab'/>
|
||||
+ <msr index='0x10a' edx='0x00000000' eax='0x000000eb'/>
|
||||
</cpudata>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml
|
||||
index 36e95029be..10c256ee1e 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml
|
||||
@@ -17,5 +17,6 @@
|
||||
<feature policy='require' name='ibrs-all'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
<feature policy='require' name='mds-no'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='require' name='tsx-ctrl'/>
|
||||
</cpu>
|
||||
diff --git a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
|
||||
index e257657981..4d9616cb69 100644
|
||||
--- a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
|
||||
@@ -47,6 +47,7 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
</mode>
|
||||
<mode name='custom' supported='yes'>
|
||||
<model usable='yes'>qemu64</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
|
||||
index 2918ba9715..5210c917aa 100644
|
||||
--- a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
|
||||
@@ -46,6 +46,7 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
</mode>
|
||||
<mode name='custom' supported='yes'>
|
||||
<model usable='yes'>qemu64</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
index 7b2a929738..b7e2c8a4fe 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
@@ -47,6 +47,7 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
</mode>
|
||||
<mode name='custom' supported='yes'>
|
||||
<model usable='yes'>qemu64</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
index 7609d49020..d2741375b4 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
@@ -46,6 +46,7 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
</mode>
|
||||
<mode name='custom' supported='yes'>
|
||||
<model usable='yes'>qemu64</model>
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,154 @@
|
||||
From f1926a0cb9147ce54484858f5e0f7376ee9ac648 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f1926a0cb9147ce54484858f5e0f7376ee9ac648@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:37 +0200
|
||||
Subject: [PATCH] cpu_map: Distinguish Cascadelake-Server from Skylake-Server
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The signatures of these two CPU model differ only in stepping as both
|
||||
report family 6 and model 85. Skylake-Server uses stepping 4 or less and
|
||||
Cascadelake-Server uses stepping 5..7.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1761678
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 5d6059f8ec16d64f240dc5e6413ca55a3b46b3f7)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <8711c401083e2605e7d8734764a5fe1b092749b0.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Cascadelake-Server-noTSX.xml | 2 +-
|
||||
src/cpu_map/x86_Cascadelake-Server.xml | 2 +-
|
||||
src/cpu_map/x86_Skylake-Server-IBRS.xml | 2 +-
|
||||
src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml | 2 +-
|
||||
src/cpu_map/x86_Skylake-Server.xml | 2 +-
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml | 5 +++--
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml | 5 +++--
|
||||
7 files changed, 11 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
index 459174a30d..bfd4629836 100644
|
||||
--- a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
@@ -1,7 +1,7 @@
|
||||
<cpus>
|
||||
<model name='Cascadelake-Server-noTSX'>
|
||||
<decode host='on' guest='off'/>
|
||||
- <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <signature family='6' model='85' stepping='5-7'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
<feature name='abm'/>
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server.xml b/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
index d7ec42f57e..335e9cb584 100644
|
||||
--- a/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
@@ -1,7 +1,7 @@
|
||||
<cpus>
|
||||
<model name='Cascadelake-Server'>
|
||||
<decode host='on' guest='on'/>
|
||||
- <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <signature family='6' model='85' stepping='5-7'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
<feature name='abm'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-IBRS.xml b/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
index bd6b6457ad..9fb3488809 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
@@ -1,7 +1,7 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server-IBRS'>
|
||||
<decode host='on' guest='on'/>
|
||||
- <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <signature family='6' model='85' stepping='0-4'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
<feature name='abm'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
index c2b7de40e8..c162c0acc3 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
@@ -1,7 +1,7 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server-noTSX-IBRS'>
|
||||
<decode host='on' guest='off'/>
|
||||
- <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <signature family='6' model='85' stepping='0-4'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
<feature name='abm'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server.xml b/src/cpu_map/x86_Skylake-Server.xml
|
||||
index f96875a85f..e022d94c84 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server.xml
|
||||
@@ -1,7 +1,7 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server'>
|
||||
<decode host='on' guest='on'/>
|
||||
- <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <signature family='6' model='85' stepping='0-4'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
<feature name='abm'/>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml
|
||||
index cfb0eb982d..c21cb1e600 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Cascadelake-Server</model>
|
||||
+ <model fallback='forbid'>Skylake-Server-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ds'/>
|
||||
<feature policy='require' name='acpi'/>
|
||||
@@ -20,14 +20,15 @@
|
||||
<feature policy='require' name='osxsave'/>
|
||||
<feature policy='require' name='tsc_adjust'/>
|
||||
<feature policy='require' name='cmt'/>
|
||||
+ <feature policy='require' name='clflushopt'/>
|
||||
<feature policy='require' name='intel-pt'/>
|
||||
<feature policy='require' name='pku'/>
|
||||
<feature policy='require' name='ospke'/>
|
||||
<feature policy='require' name='md-clear'/>
|
||||
<feature policy='require' name='stibp'/>
|
||||
+ <feature policy='require' name='ssbd'/>
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='mbm_total'/>
|
||||
<feature policy='require' name='mbm_local'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
- <feature policy='disable' name='avx512vnni'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml
|
||||
index 968d904557..b482043ccf 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml
|
||||
@@ -1,16 +1,17 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Cascadelake-Server</model>
|
||||
+ <model fallback='forbid'>Skylake-Server-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ss'/>
|
||||
<feature policy='require' name='vmx'/>
|
||||
<feature policy='require' name='hypervisor'/>
|
||||
<feature policy='require' name='tsc_adjust'/>
|
||||
+ <feature policy='require' name='clflushopt'/>
|
||||
<feature policy='require' name='umip'/>
|
||||
<feature policy='require' name='pku'/>
|
||||
<feature policy='require' name='md-clear'/>
|
||||
<feature policy='require' name='stibp'/>
|
||||
<feature policy='require' name='arch-capabilities'/>
|
||||
+ <feature policy='require' name='ssbd'/>
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
- <feature policy='disable' name='avx512vnni'/>
|
||||
</cpu>
|
||||
--
|
||||
2.26.2
|
||||
|
37
SOURCES/libvirt-cpu_map-Distribute-x86_Cooperlake.xml.patch
Normal file
37
SOURCES/libvirt-cpu_map-Distribute-x86_Cooperlake.xml.patch
Normal file
@ -0,0 +1,37 @@
|
||||
From a48703c3f77054ba1bdfa1adf3aa8277814874d1 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <a48703c3f77054ba1bdfa1adf3aa8277814874d1@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 28 May 2020 09:50:05 +0200
|
||||
Subject: [PATCH] cpu_map: Distribute x86_Cooperlake.xml
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit 1c425857fb9f652c7811f075f3d31ff561b95632)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1781878
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <98b6a65536435b8130694e50adc9f39ff3110d90.1590652079.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu_map/Makefile.inc.am | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/cpu_map/Makefile.inc.am b/src/cpu_map/Makefile.inc.am
|
||||
index be64c9a0d4..b949cb0bea 100644
|
||||
--- a/src/cpu_map/Makefile.inc.am
|
||||
+++ b/src/cpu_map/Makefile.inc.am
|
||||
@@ -22,6 +22,7 @@ cpumap_DATA = \
|
||||
cpu_map/x86_Cascadelake-Server.xml \
|
||||
cpu_map/x86_Cascadelake-Server-noTSX.xml \
|
||||
cpu_map/x86_Conroe.xml \
|
||||
+ cpu_map/x86_Cooperlake.xml \
|
||||
cpu_map/x86_core2duo.xml \
|
||||
cpu_map/x86_coreduo.xml \
|
||||
cpu_map/x86_cpu64-rhel5.xml \
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,137 @@
|
||||
From 2268a9862c16c87007bfbae117d345268f8420e4 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2268a9862c16c87007bfbae117d345268f8420e4@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:58 +0200
|
||||
Subject: [PATCH] cpu_map: Don't use new noTSX models for host-model CPUs
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Host-model CPU definitions (and domain capabilities) will use the
|
||||
original CPU models (without noTSX in their name) and explicitly disable
|
||||
hle and rtm features. This way domains with host-model CPUs will be
|
||||
migratable even to older versions of libvirt which do not support the
|
||||
noTSX model variants.
|
||||
|
||||
The new models will be advertised in host capabilities and they may
|
||||
be used explicitly with custom CPUs.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
(cherry picked from commit 17cdefe5f197030c70a0d250f3c5387b41663516)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840008
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <d27a0adb8f142f053fbd830947f03bad04eff264.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Cascadelake-Server-noTSX.xml | 2 +-
|
||||
src/cpu_map/x86_Icelake-Client-noTSX.xml | 2 +-
|
||||
src/cpu_map/x86_Icelake-Server-noTSX.xml | 2 +-
|
||||
src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml | 2 +-
|
||||
src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml | 2 +-
|
||||
tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml | 4 +++-
|
||||
tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml | 4 +++-
|
||||
7 files changed, 11 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
index 5adea664e9..459174a30d 100644
|
||||
--- a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Cascadelake-Server-noTSX'>
|
||||
- <decode host='on' guest='on'/>
|
||||
+ <decode host='on' guest='off'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Client-noTSX.xml b/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
index 540732af6f..65e648ae21 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Icelake-Client-noTSX'>
|
||||
- <decode host='on' guest='on'/>
|
||||
+ <decode host='on' guest='off'/>
|
||||
<signature family='6' model='126'/> <!-- 0706e0 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Server-noTSX.xml b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
index 5a53da23c7..2fd6906406 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Icelake-Server-noTSX'>
|
||||
- <decode host='on' guest='on'/>
|
||||
+ <decode host='on' guest='off'/>
|
||||
<signature family='6' model='134'/> <!-- 080660 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
index 0c2f1e6ac4..ffba34502a 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Client-noTSX-IBRS'>
|
||||
- <decode host='on' guest='on'/>
|
||||
+ <decode host='on' guest='off'/>
|
||||
<signature family='6' model='94'/> <!-- 0506e0 -->
|
||||
<signature family='6' model='78'/> <!-- 0406e0 -->
|
||||
<!-- These are Kaby Lake and Coffee Lake successors to Skylake,
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
index 91a206f575..c2b7de40e8 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server-noTSX-IBRS'>
|
||||
- <decode host='on' guest='on'/>
|
||||
+ <decode host='on' guest='off'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
index e03c4a06ba..92404e4d03 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Skylake-Client-noTSX-IBRS</model>
|
||||
+ <model fallback='forbid'>Skylake-Client-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ds'/>
|
||||
<feature policy='require' name='acpi'/>
|
||||
@@ -26,4 +26,6 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='disable' name='hle'/>
|
||||
+ <feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
index 3d8e6775bf..645c0934c2 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Skylake-Client-noTSX-IBRS</model>
|
||||
+ <model fallback='forbid'>Skylake-Client-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ss'/>
|
||||
<feature policy='require' name='vmx'/>
|
||||
@@ -14,4 +14,6 @@
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='disable' name='hle'/>
|
||||
+ <feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,183 @@
|
||||
From 51290a9442c1b9347c43b2fec34b7aa979d26c77 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <51290a9442c1b9347c43b2fec34b7aa979d26c77@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:34 +0200
|
||||
Subject: [PATCH] cpu_x86: Add support for stepping part of CPU signature
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
CPU models defined in the cpu_map can use signature/@stepping attribute
|
||||
to match a limited set of stepping numbers. The value is a bitmap for
|
||||
bits 0..15 each corresponding to a single stepping value. For example,
|
||||
stepping='4-6,9' will match 4, 5, 6, and 9. Omitting the attribute is
|
||||
equivalent to stepping='0-15'.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit c7a27949954d78dc95459758e329fb9c580361bb)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <20bd9df72a22a004bb665409ddba20ff89a5b66d.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 60 +++++++++++++++++++++++++++++++++++++++--------
|
||||
1 file changed, 50 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 45a073c1d0..0d81f3d2ae 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -125,6 +125,7 @@ typedef struct _virCPUx86Signature virCPUx86Signature;
|
||||
struct _virCPUx86Signature {
|
||||
unsigned int family;
|
||||
unsigned int model;
|
||||
+ virBitmapPtr stepping;
|
||||
};
|
||||
|
||||
typedef struct _virCPUx86Signatures virCPUx86Signatures;
|
||||
@@ -732,7 +733,17 @@ x86MakeSignature(unsigned int family,
|
||||
static uint32_t
|
||||
virCPUx86SignatureToCPUID(virCPUx86Signature *sig)
|
||||
{
|
||||
- return x86MakeSignature(sig->family, sig->model, 0);
|
||||
+ unsigned int stepping = 0;
|
||||
+
|
||||
+ if (sig->stepping) {
|
||||
+ ssize_t firstBit;
|
||||
+
|
||||
+ firstBit = virBitmapNextSetBit(sig->stepping, -1);
|
||||
+ if (firstBit >= 0)
|
||||
+ stepping = firstBit;
|
||||
+ }
|
||||
+
|
||||
+ return x86MakeSignature(sig->family, sig->model, stepping);
|
||||
}
|
||||
|
||||
|
||||
@@ -767,8 +778,8 @@ x86DataToSignatureFull(const virCPUx86Data *data,
|
||||
}
|
||||
|
||||
|
||||
-/* Mask out irrelevant bits (R and Step) from processor signature. */
|
||||
-#define SIGNATURE_MASK 0x0fff3ff0
|
||||
+/* Mask out reserved bits from processor signature. */
|
||||
+#define SIGNATURE_MASK 0x0fff3fff
|
||||
|
||||
static uint32_t
|
||||
x86DataToSignature(const virCPUx86Data *data)
|
||||
@@ -1134,9 +1145,14 @@ virCPUx86SignaturesNew(size_t count)
|
||||
static void
|
||||
virCPUx86SignaturesFree(virCPUx86SignaturesPtr sigs)
|
||||
{
|
||||
+ size_t i;
|
||||
+
|
||||
if (!sigs)
|
||||
return;
|
||||
|
||||
+ for (i = 0; i < sigs->count; i++)
|
||||
+ virBitmapFree(sigs->items[i].stepping);
|
||||
+
|
||||
g_free(sigs->items);
|
||||
g_free(sigs);
|
||||
}
|
||||
@@ -1153,8 +1169,12 @@ virCPUx86SignaturesCopy(virCPUx86SignaturesPtr src)
|
||||
|
||||
dst = virCPUx86SignaturesNew(src->count);
|
||||
|
||||
- for (i = 0; i < src->count; i++)
|
||||
- dst->items[i] = src->items[i];
|
||||
+ for (i = 0; i < src->count; i++) {
|
||||
+ dst->items[i].family = src->items[i].family;
|
||||
+ dst->items[i].model = src->items[i].model;
|
||||
+ if (src->items[i].stepping)
|
||||
+ dst->items[i].stepping = virBitmapNewCopy(src->items[i].stepping);
|
||||
+ }
|
||||
|
||||
return dst;
|
||||
}
|
||||
@@ -1176,7 +1196,9 @@ virCPUx86SignaturesMatch(virCPUx86SignaturesPtr sigs,
|
||||
|
||||
for (i = 0; i < sigs->count; i++) {
|
||||
if (sigs->items[i].family == family &&
|
||||
- sigs->items[i].model == model)
|
||||
+ sigs->items[i].model == model &&
|
||||
+ (!sigs->items[i].stepping ||
|
||||
+ virBitmapIsBitSet(sigs->items[i].stepping, stepping)))
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1194,9 +1216,15 @@ virCPUx86SignaturesFormat(virCPUx86SignaturesPtr sigs)
|
||||
return virBufferContentAndReset(&buf);
|
||||
|
||||
for (i = 0; i < sigs->count; i++) {
|
||||
- virBufferAsprintf(&buf, "(%u,%u,0), ",
|
||||
+ g_autofree char *stepping = NULL;
|
||||
+
|
||||
+ if (sigs->items[i].stepping)
|
||||
+ stepping = virBitmapFormat(sigs->items[i].stepping);
|
||||
+
|
||||
+ virBufferAsprintf(&buf, "(%u,%u,%s), ",
|
||||
sigs->items[i].family,
|
||||
- sigs->items[i].model);
|
||||
+ sigs->items[i].model,
|
||||
+ stepping ? stepping : "0-15");
|
||||
}
|
||||
|
||||
virBufferTrim(&buf, ", ", -1);
|
||||
@@ -1473,6 +1501,7 @@ x86ModelParseSignatures(virCPUx86ModelPtr model,
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
virCPUx86Signature *sig = &model->signatures->items[i];
|
||||
+ g_autofree char *stepping = NULL;
|
||||
int rc;
|
||||
|
||||
ctxt->node = nodes[i];
|
||||
@@ -1492,6 +1521,11 @@ x86ModelParseSignatures(virCPUx86ModelPtr model,
|
||||
model->name);
|
||||
return -1;
|
||||
}
|
||||
+
|
||||
+ stepping = virXPathString("string(@stepping)", ctxt);
|
||||
+ /* stepping corresponds to 4 bits in 32b signature, see above */
|
||||
+ if (stepping && virBitmapParse(stepping, &sig->stepping, 16) < 0)
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
ctxt->node = root;
|
||||
@@ -2090,6 +2124,9 @@ x86Decode(virCPUDefPtr cpu,
|
||||
virDomainCapsCPUModelPtr hvModel = NULL;
|
||||
g_autofree char *sigs = NULL;
|
||||
uint32_t signature;
|
||||
+ unsigned int sigFamily;
|
||||
+ unsigned int sigModel;
|
||||
+ unsigned int sigStepping;
|
||||
ssize_t i;
|
||||
int rc;
|
||||
|
||||
@@ -2103,6 +2140,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
|
||||
vendor = x86DataToVendor(&data, map);
|
||||
signature = x86DataToSignature(&data);
|
||||
+ virCPUx86SignatureFromCPUID(signature, &sigFamily, &sigModel, &sigStepping);
|
||||
|
||||
x86DataFilterTSX(&data, vendor, map);
|
||||
|
||||
@@ -2184,8 +2222,10 @@ x86Decode(virCPUDefPtr cpu,
|
||||
|
||||
sigs = virCPUx86SignaturesFormat(model->signatures);
|
||||
|
||||
- VIR_DEBUG("Using CPU model %s (signatures %s) for CPU with signature %06lx",
|
||||
- model->name, NULLSTR(sigs), (unsigned long)signature);
|
||||
+ VIR_DEBUG("Using CPU model %s with signatures [%s] for "
|
||||
+ "CPU with signature (%u,%u,%u)",
|
||||
+ model->name, NULLSTR(sigs),
|
||||
+ sigFamily, sigModel, sigStepping);
|
||||
|
||||
cpu->model = g_steal_pointer(&cpuModel->model);
|
||||
cpu->features = g_steal_pointer(&cpuModel->features);
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,74 @@
|
||||
From 8a18e258633c347eb421904c63c2265ed59d61b5 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <8a18e258633c347eb421904c63c2265ed59d61b5@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:33 +0200
|
||||
Subject: [PATCH] cpu_x86: Don't check return value of x86ModelCopy
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Thanks to glib allocation functions which abort on OOM the function
|
||||
cannot ever return NULL.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 70f3041d39802e53a19901bee040ff33850cd5e0)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <3db9e891cf44e608a45504b120a5c276ead3ea8d.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 14 ++++----------
|
||||
1 file changed, 4 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index b87e3753da..45a073c1d0 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1287,9 +1287,6 @@ x86ModelFromCPU(const virCPUDef *cpu,
|
||||
model = g_new0(virCPUx86Model, 1);
|
||||
}
|
||||
|
||||
- if (!model)
|
||||
- return NULL;
|
||||
-
|
||||
for (i = 0; i < cpu->nfeatures; i++) {
|
||||
virCPUx86FeaturePtr feature;
|
||||
virCPUFeaturePolicy fpol;
|
||||
@@ -1869,9 +1866,7 @@ x86Compute(virCPUDefPtr host,
|
||||
return VIR_CPU_COMPARE_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
- if (!(diff = x86ModelCopy(host_model)))
|
||||
- return VIR_CPU_COMPARE_ERROR;
|
||||
-
|
||||
+ diff = x86ModelCopy(host_model);
|
||||
x86DataSubtract(&diff->data, &cpu_optional->data);
|
||||
x86DataSubtract(&diff->data, &cpu_require->data);
|
||||
x86DataSubtract(&diff->data, &cpu_disable->data);
|
||||
@@ -1892,8 +1887,7 @@ x86Compute(virCPUDefPtr host,
|
||||
}
|
||||
|
||||
if (guest) {
|
||||
- if (!(guest_model = x86ModelCopy(host_model)))
|
||||
- return VIR_CPU_COMPARE_ERROR;
|
||||
+ guest_model = x86ModelCopy(host_model);
|
||||
|
||||
if (cpu->vendor && host_model->vendor &&
|
||||
virCPUx86DataAddItem(&guest_model->data,
|
||||
@@ -3131,8 +3125,8 @@ virCPUx86ExpandFeatures(virCPUDefPtr cpu)
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (!(model = x86ModelCopy(model)) ||
|
||||
- x86DataToCPUFeatures(expanded, host ? -1 : VIR_CPU_FEATURE_REQUIRE,
|
||||
+ model = x86ModelCopy(model);
|
||||
+ if (x86DataToCPUFeatures(expanded, host ? -1 : VIR_CPU_FEATURE_REQUIRE,
|
||||
&model->data, map) < 0)
|
||||
return -1;
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,102 @@
|
||||
From 882e0241f82b5bcbe239cf00134950e141de642a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <882e0241f82b5bcbe239cf00134950e141de642a@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:59 +0200
|
||||
Subject: [PATCH] cpu_x86: Drop noTSX hint for incompatible CPUs
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The hint was introduced a long time ago when broken TSX implementation
|
||||
was found in Haswell and Broadwell CPUs. Since then many more CPUs with
|
||||
TSX were introduced and and disabled due to TAA vulnerability.
|
||||
|
||||
Thus the hint is not very useful and I think removing it is a better
|
||||
choice then updating it to cover all current noTSX models.
|
||||
|
||||
This partially reverts:
|
||||
commit 7f127ded657b24e0e55cd5f3539ef5b2dc935908
|
||||
cpu: Rework cpuCompare* APIs
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 8452779049ef785b1d2e373b4d42633d4a929a60)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <1126fcc8a0e18f0eed38c182013429fd7266c274.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 44 ++++++--------------------------------------
|
||||
1 file changed, 6 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index b4d5c795f7..1b388ec1b2 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1937,8 +1937,6 @@ virCPUx86Compare(virCPUDefPtr host,
|
||||
bool failIncompatible)
|
||||
{
|
||||
virCPUCompareResult ret = VIR_CPU_COMPARE_ERROR;
|
||||
- virCPUx86MapPtr map;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
char *message = NULL;
|
||||
|
||||
if (!host || !host->model) {
|
||||
@@ -1954,46 +1952,16 @@ virCPUx86Compare(virCPUDefPtr host,
|
||||
|
||||
ret = x86Compute(host, cpu, NULL, &message);
|
||||
|
||||
- if (ret == VIR_CPU_COMPARE_INCOMPATIBLE) {
|
||||
- bool noTSX = false;
|
||||
-
|
||||
- if (STREQ_NULLABLE(cpu->model, "Haswell") ||
|
||||
- STREQ_NULLABLE(cpu->model, "Broadwell")) {
|
||||
- if (!(map = virCPUx86GetMap()))
|
||||
- goto cleanup;
|
||||
-
|
||||
- if (!(model = x86ModelFromCPU(cpu, map, -1)))
|
||||
- goto cleanup;
|
||||
-
|
||||
- noTSX = !x86FeatureInData("hle", &model->data, map) ||
|
||||
- !x86FeatureInData("rtm", &model->data, map);
|
||||
- }
|
||||
-
|
||||
- if (failIncompatible) {
|
||||
- ret = VIR_CPU_COMPARE_ERROR;
|
||||
- if (message) {
|
||||
- if (noTSX) {
|
||||
- virReportError(VIR_ERR_CPU_INCOMPATIBLE,
|
||||
- _("%s; try using '%s-noTSX' CPU model"),
|
||||
- message, cpu->model);
|
||||
- } else {
|
||||
- virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", message);
|
||||
- }
|
||||
- } else {
|
||||
- if (noTSX) {
|
||||
- virReportError(VIR_ERR_CPU_INCOMPATIBLE,
|
||||
- _("try using '%s-noTSX' CPU model"),
|
||||
- cpu->model);
|
||||
- } else {
|
||||
- virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL);
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
+ if (ret == VIR_CPU_COMPARE_INCOMPATIBLE && failIncompatible) {
|
||||
+ ret = VIR_CPU_COMPARE_ERROR;
|
||||
+ if (message)
|
||||
+ virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", message);
|
||||
+ else
|
||||
+ virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(message);
|
||||
- x86ModelFree(model);
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,67 @@
|
||||
From ba2f2a8c39f2e7fe5684d9b84a0a832be482a3ab Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <ba2f2a8c39f2e7fe5684d9b84a0a832be482a3ab@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:57 +0200
|
||||
Subject: [PATCH] cpu_x86: Honor CPU models' <decode> element
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
(cherry picked from commit 7cd896ef31d33f78d40df918a33fe3867e251509)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840008
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <15f1eedf2c0df29a3942b4b28bc4575fa51ca19a.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 22 +++++++++++++++++-----
|
||||
1 file changed, 17 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 7fbb4c9a6c..b4d5c795f7 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2044,10 +2044,23 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
|
||||
virCPUx86ModelPtr candidate,
|
||||
virCPUDefPtr cpuCandidate,
|
||||
uint32_t signature,
|
||||
- const char *preferred,
|
||||
- bool checkPolicy)
|
||||
+ const char *preferred)
|
||||
{
|
||||
- if (checkPolicy) {
|
||||
+ if (cpuCandidate->type == VIR_CPU_TYPE_HOST &&
|
||||
+ !candidate->decodeHost) {
|
||||
+ VIR_DEBUG("%s is not supposed to be used for host CPU definition",
|
||||
+ cpuCandidate->model);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (cpuCandidate->type == VIR_CPU_TYPE_GUEST &&
|
||||
+ !candidate->decodeGuest) {
|
||||
+ VIR_DEBUG("%s is not supposed to be used for guest CPU definition",
|
||||
+ cpuCandidate->model);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (cpuCandidate->type == VIR_CPU_TYPE_HOST) {
|
||||
size_t i;
|
||||
for (i = 0; i < cpuCandidate->nfeatures; i++) {
|
||||
if (cpuCandidate->features[i].policy == VIR_CPU_FEATURE_DISABLE)
|
||||
@@ -2209,8 +2222,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
|
||||
if ((rc = x86DecodeUseCandidate(model, cpuModel,
|
||||
candidate, cpuCandidate,
|
||||
- signature, preferred,
|
||||
- cpu->type == VIR_CPU_TYPE_HOST))) {
|
||||
+ signature, preferred))) {
|
||||
virCPUDefFree(cpuModel);
|
||||
cpuModel = cpuCandidate;
|
||||
model = candidate;
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,71 @@
|
||||
From 48e546c1097a61c806412efe53e216fbc8beafca Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <48e546c1097a61c806412efe53e216fbc8beafca@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:31 +0200
|
||||
Subject: [PATCH] cpu_x86: Introduce virCPUx86SignatureFromCPUID
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It can be used for separating family, model, and stepping numbers from a
|
||||
single 32b integer as reported by CPUID.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3b474c1f8f3c1f124fab303625733ea79047660c)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <1fe352bfb7cf40b5b8e24eea3bf4e476269adb92.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 19 ++++++++++++++-----
|
||||
1 file changed, 14 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index ed2090b0c6..dad3bceff0 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -717,6 +717,18 @@ x86MakeSignature(unsigned int family,
|
||||
}
|
||||
|
||||
|
||||
+static void
|
||||
+virCPUx86SignatureFromCPUID(uint32_t sig,
|
||||
+ unsigned int *family,
|
||||
+ unsigned int *model,
|
||||
+ unsigned int *stepping)
|
||||
+{
|
||||
+ *family = ((sig >> 20) & 0xff) + ((sig >> 8) & 0xf);
|
||||
+ *model = ((sig >> 12) & 0xf0) + ((sig >> 4) & 0xf);
|
||||
+ *stepping = sig & 0xf;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void
|
||||
x86DataToSignatureFull(const virCPUx86Data *data,
|
||||
unsigned int *family,
|
||||
@@ -725,17 +737,14 @@ x86DataToSignatureFull(const virCPUx86Data *data,
|
||||
{
|
||||
virCPUx86DataItem leaf1 = CPUID(.eax_in = 0x1);
|
||||
virCPUx86DataItemPtr item;
|
||||
- virCPUx86CPUIDPtr cpuid;
|
||||
|
||||
*family = *model = *stepping = 0;
|
||||
|
||||
if (!(item = virCPUx86DataGet(data, &leaf1)))
|
||||
return;
|
||||
|
||||
- cpuid = &item->data.cpuid;
|
||||
- *family = ((cpuid->eax >> 20) & 0xff) + ((cpuid->eax >> 8) & 0xf);
|
||||
- *model = ((cpuid->eax >> 12) & 0xf0) + ((cpuid->eax >> 4) & 0xf);
|
||||
- *stepping = cpuid->eax & 0xf;
|
||||
+ virCPUx86SignatureFromCPUID(item->data.cpuid.eax,
|
||||
+ family, model, stepping);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,64 @@
|
||||
From 75afc6d9dc443666e1207ef6f1c968abdfec712a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <75afc6d9dc443666e1207ef6f1c968abdfec712a@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:30 +0200
|
||||
Subject: [PATCH] cpu_x86: Introduce virCPUx86SignaturesFree
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The function will be used for freeing virCPUx86Signatures structure
|
||||
introduced later in this series.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 372b2cf1ca3f4361546732a3f5f9c0c0be2591e9)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <163ef39d14ce5457272e7508172f64d58d22a56b.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 11 +++++++++--
|
||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 9248403eff..ed2090b0c6 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1090,6 +1090,13 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
|
||||
|
||||
+static void
|
||||
+virCPUx86SignaturesFree(uint32_t *signatures)
|
||||
+{
|
||||
+ g_free(signatures);
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
virCPUx86SignaturesCopy(virCPUx86ModelPtr dst,
|
||||
virCPUx86ModelPtr src)
|
||||
@@ -1149,7 +1156,7 @@ x86ModelFree(virCPUx86ModelPtr model)
|
||||
return;
|
||||
|
||||
g_free(model->name);
|
||||
- g_free(model->signatures);
|
||||
+ virCPUx86SignaturesFree(model->signatures);
|
||||
virCPUx86DataClear(&model->data);
|
||||
g_free(model);
|
||||
}
|
||||
@@ -1414,7 +1421,7 @@ x86ModelParseSignatures(virCPUx86ModelPtr model,
|
||||
return n;
|
||||
|
||||
/* Remove inherited signatures. */
|
||||
- VIR_FREE(model->signatures);
|
||||
+ virCPUx86SignaturesFree(model->signatures);
|
||||
|
||||
model->nsignatures = n;
|
||||
if (VIR_ALLOC_N(model->signatures, n) < 0)
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,97 @@
|
||||
From 2b76e3009c224c0d03a4d951e0686aad6f6dc577 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2b76e3009c224c0d03a4d951e0686aad6f6dc577@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:29 +0200
|
||||
Subject: [PATCH] cpu_x86: Move and rename x86FormatSignatures
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Later in this series the function will work on a newly introduced
|
||||
virCPUx86Signatures structure. Let's move it to the place where all
|
||||
related functions will be added and rename the function as
|
||||
virCPUx86SignaturesFormat for easier review of the virCPUx86Signatures
|
||||
patch.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 7e0d351fa69c468906533b2ac9b24212df13a370)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Conflicts:
|
||||
src/cpu/cpu_x86.c
|
||||
- v6.0.0-264-g0a125c7144 which removes the third argument
|
||||
from virBufferTrim was not backported
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <fd16284339dd71e9f99b57bb7682014065e5d0ec.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 36 ++++++++++++++++++------------------
|
||||
1 file changed, 18 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 65a99876a9..9248403eff 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1125,6 +1125,23 @@ virCPUx86SignaturesMatch(virCPUx86ModelPtr model,
|
||||
}
|
||||
|
||||
|
||||
+static char *
|
||||
+virCPUx86SignaturesFormat(virCPUx86ModelPtr model)
|
||||
+{
|
||||
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
+ size_t i;
|
||||
+
|
||||
+ for (i = 0; i < model->nsignatures; i++) {
|
||||
+ virBufferAsprintf(&buf, "%06lx,",
|
||||
+ (unsigned long)model->signatures[i]);
|
||||
+ }
|
||||
+
|
||||
+ virBufferTrim(&buf, ",", -1);
|
||||
+
|
||||
+ return virBufferContentAndReset(&buf);
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void
|
||||
x86ModelFree(virCPUx86ModelPtr model)
|
||||
{
|
||||
@@ -1890,23 +1907,6 @@ virCPUx86Compare(virCPUDefPtr host,
|
||||
}
|
||||
|
||||
|
||||
-static char *
|
||||
-x86FormatSignatures(virCPUx86ModelPtr model)
|
||||
-{
|
||||
- virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
- size_t i;
|
||||
-
|
||||
- for (i = 0; i < model->nsignatures; i++) {
|
||||
- virBufferAsprintf(&buf, "%06lx,",
|
||||
- (unsigned long)model->signatures[i]);
|
||||
- }
|
||||
-
|
||||
- virBufferTrim(&buf, ",", -1);
|
||||
-
|
||||
- return virBufferContentAndReset(&buf);
|
||||
-}
|
||||
-
|
||||
-
|
||||
/*
|
||||
* Checks whether a candidate model is a better fit for the CPU data than the
|
||||
* current model.
|
||||
@@ -2134,7 +2134,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
if (vendor)
|
||||
cpu->vendor = g_strdup(vendor->name);
|
||||
|
||||
- sigs = x86FormatSignatures(model);
|
||||
+ sigs = virCPUx86SignaturesFormat(model);
|
||||
|
||||
VIR_DEBUG("Using CPU model %s (signatures %s) for CPU with signature %06lx",
|
||||
model->name, NULLSTR(sigs), (unsigned long)signature);
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,100 @@
|
||||
From 33cac9bcf27a885febf12e094cb2579f16a421b6 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <33cac9bcf27a885febf12e094cb2579f16a421b6@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:27 +0200
|
||||
Subject: [PATCH] cpu_x86: Move and rename x86ModelCopySignatures
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Later in this series the function will work on a newly introduced
|
||||
virCPUx86Signatures structure. Let's move it to the place were all
|
||||
related functions will be added and rename the function as
|
||||
virCPUx86SignaturesCopy for easier review of the virCPUx86Signatures
|
||||
patch.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit a8ec1d746ed41ac76df2e28cbc5683b3e37b9a60)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <0d4f902805cd5534eadedd2ec61385e9798c8b40.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 36 ++++++++++++++++++------------------
|
||||
1 file changed, 18 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index b4b1b475d6..16e6aa73d2 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1090,23 +1090,9 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
|
||||
|
||||
-static void
|
||||
-x86ModelFree(virCPUx86ModelPtr model)
|
||||
-{
|
||||
- if (!model)
|
||||
- return;
|
||||
-
|
||||
- g_free(model->name);
|
||||
- g_free(model->signatures);
|
||||
- virCPUx86DataClear(&model->data);
|
||||
- g_free(model);
|
||||
-}
|
||||
-G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Model, x86ModelFree);
|
||||
-
|
||||
-
|
||||
static int
|
||||
-x86ModelCopySignatures(virCPUx86ModelPtr dst,
|
||||
- virCPUx86ModelPtr src)
|
||||
+virCPUx86SignaturesCopy(virCPUx86ModelPtr dst,
|
||||
+ virCPUx86ModelPtr src)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
@@ -1124,6 +1110,20 @@ x86ModelCopySignatures(virCPUx86ModelPtr dst,
|
||||
}
|
||||
|
||||
|
||||
+static void
|
||||
+x86ModelFree(virCPUx86ModelPtr model)
|
||||
+{
|
||||
+ if (!model)
|
||||
+ return;
|
||||
+
|
||||
+ g_free(model->name);
|
||||
+ g_free(model->signatures);
|
||||
+ virCPUx86DataClear(&model->data);
|
||||
+ g_free(model);
|
||||
+}
|
||||
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Model, x86ModelFree);
|
||||
+
|
||||
+
|
||||
static virCPUx86ModelPtr
|
||||
x86ModelCopy(virCPUx86ModelPtr model)
|
||||
{
|
||||
@@ -1132,7 +1132,7 @@ x86ModelCopy(virCPUx86ModelPtr model)
|
||||
copy = g_new0(virCPUx86Model, 1);
|
||||
copy->name = g_strdup(model->name);
|
||||
|
||||
- if (x86ModelCopySignatures(copy, model) < 0) {
|
||||
+ if (virCPUx86SignaturesCopy(copy, model) < 0) {
|
||||
x86ModelFree(copy);
|
||||
return NULL;
|
||||
}
|
||||
@@ -1360,7 +1360,7 @@ x86ModelParseAncestor(virCPUx86ModelPtr model,
|
||||
}
|
||||
|
||||
model->vendor = ancestor->vendor;
|
||||
- if (x86ModelCopySignatures(model, ancestor) < 0)
|
||||
+ if (virCPUx86SignaturesCopy(model, ancestor) < 0)
|
||||
return -1;
|
||||
|
||||
x86DataCopy(&model->data, &ancestor->data);
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,101 @@
|
||||
From 693d01f00b9608a4f4cac3b91e38b5537eff754f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <693d01f00b9608a4f4cac3b91e38b5537eff754f@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:28 +0200
|
||||
Subject: [PATCH] cpu_x86: Move and rename x86ModelHasSignature
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Later in this series the function will work on a newly introduced
|
||||
virCPUx86Signatures structure. Let's move it to the place were all
|
||||
related functions will be added and rename the function as
|
||||
virCPUx86SignaturesMatch for easier review of the virCPUx86Signatures
|
||||
patch.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 782be9f0af2e02e725fca45b7674e8b2f008dc6c)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <7662ee03449ae588a5381c546eb7e8a3b64cadb3.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 38 +++++++++++++++++++-------------------
|
||||
1 file changed, 19 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 16e6aa73d2..65a99876a9 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1110,6 +1110,21 @@ virCPUx86SignaturesCopy(virCPUx86ModelPtr dst,
|
||||
}
|
||||
|
||||
|
||||
+static bool
|
||||
+virCPUx86SignaturesMatch(virCPUx86ModelPtr model,
|
||||
+ uint32_t signature)
|
||||
+{
|
||||
+ size_t i;
|
||||
+
|
||||
+ for (i = 0; i < model->nsignatures; i++) {
|
||||
+ if (model->signatures[i] == signature)
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void
|
||||
x86ModelFree(virCPUx86ModelPtr model)
|
||||
{
|
||||
@@ -1875,21 +1890,6 @@ virCPUx86Compare(virCPUDefPtr host,
|
||||
}
|
||||
|
||||
|
||||
-static bool
|
||||
-x86ModelHasSignature(virCPUx86ModelPtr model,
|
||||
- uint32_t signature)
|
||||
-{
|
||||
- size_t i;
|
||||
-
|
||||
- for (i = 0; i < model->nsignatures; i++) {
|
||||
- if (model->signatures[i] == signature)
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- return false;
|
||||
-}
|
||||
-
|
||||
-
|
||||
static char *
|
||||
x86FormatSignatures(virCPUx86ModelPtr model)
|
||||
{
|
||||
@@ -1961,8 +1961,8 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
|
||||
* consider candidates with matching family/model.
|
||||
*/
|
||||
if (signature &&
|
||||
- x86ModelHasSignature(current, signature) &&
|
||||
- !x86ModelHasSignature(candidate, signature)) {
|
||||
+ virCPUx86SignaturesMatch(current, signature) &&
|
||||
+ !virCPUx86SignaturesMatch(candidate, signature)) {
|
||||
VIR_DEBUG("%s differs in signature from matching %s",
|
||||
cpuCandidate->model, cpuCurrent->model);
|
||||
return 0;
|
||||
@@ -1978,8 +1978,8 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
|
||||
* result in longer list of features.
|
||||
*/
|
||||
if (signature &&
|
||||
- x86ModelHasSignature(candidate, signature) &&
|
||||
- !x86ModelHasSignature(current, signature)) {
|
||||
+ virCPUx86SignaturesMatch(candidate, signature) &&
|
||||
+ !virCPUx86SignaturesMatch(current, signature)) {
|
||||
VIR_DEBUG("%s provides matching signature", cpuCandidate->model);
|
||||
return 1;
|
||||
}
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,59 @@
|
||||
From 760e248164be819bebc03893ace58e0ddae7e440 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <760e248164be819bebc03893ace58e0ddae7e440@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:52 +0200
|
||||
Subject: [PATCH] cpu_x86: Prepare virCPUx86UpdateLive for easier extension
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Adding more checks into the existing if statements would turn them into
|
||||
an unreadable mess.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 8dc791b5d3b20552cc0b8d6c04e34dd0f3ebe2ff)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1839999
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <169ed0334144715b52575ca3f7e67ce3170ba91a.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 12 +++++++++---
|
||||
1 file changed, 9 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 9b7981d574..9e686a86d2 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -3036,9 +3036,15 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
|
||||
for (i = 0; i < map->nfeatures; i++) {
|
||||
virCPUx86FeaturePtr feature = map->features[i];
|
||||
+ virCPUFeaturePolicy expected = VIR_CPU_FEATURE_LAST;
|
||||
|
||||
- if (x86DataIsSubset(&enabled, &feature->data) &&
|
||||
- !x86DataIsSubset(&model->data, &feature->data)) {
|
||||
+ if (x86DataIsSubset(&model->data, &feature->data))
|
||||
+ expected = VIR_CPU_FEATURE_REQUIRE;
|
||||
+ else
|
||||
+ expected = VIR_CPU_FEATURE_DISABLE;
|
||||
+
|
||||
+ if (expected == VIR_CPU_FEATURE_DISABLE &&
|
||||
+ x86DataIsSubset(&enabled, &feature->data)) {
|
||||
VIR_DEBUG("Feature '%s' enabled by the hypervisor", feature->name);
|
||||
if (cpu->check == VIR_CPU_CHECK_FULL)
|
||||
virBufferAsprintf(&bufAdded, "%s,", feature->name);
|
||||
@@ -3048,7 +3054,7 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
}
|
||||
|
||||
if (x86DataIsSubset(&disabled, &feature->data) ||
|
||||
- (x86DataIsSubset(&model->data, &feature->data) &&
|
||||
+ (expected == VIR_CPU_FEATURE_REQUIRE &&
|
||||
!x86DataIsSubset(&enabled, &feature->data))) {
|
||||
VIR_DEBUG("Feature '%s' disabled by the hypervisor", feature->name);
|
||||
if (cpu->check == VIR_CPU_CHECK_FULL)
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,325 @@
|
||||
From 22fecd96659495908f37e1c33c1ed52be5fb2d44 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <22fecd96659495908f37e1c33c1ed52be5fb2d44@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:32 +0200
|
||||
Subject: [PATCH] cpu_x86: Replace 32b signatures in virCPUx86Model with a
|
||||
struct
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The CPU models in our cpu_map define their signatures using separate
|
||||
family and model numbers. Let's store the signatures in the same way in
|
||||
our runtime representation of the cpu_map.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 22bded201ffc91661e44065203dcb987e51084ca)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Conflicts:
|
||||
src/cpu/cpu_x86.c
|
||||
- v6.0.0-264-g0a125c7144 which removes the third argument
|
||||
from virBufferTrim was not backported
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <21c1eee9c7bb3811f43aa044bb97fa373a159e26.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 149 +++++++++++++++++++++++++++++-----------------
|
||||
1 file changed, 95 insertions(+), 54 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index dad3bceff0..b87e3753da 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -121,6 +121,19 @@ static virCPUx86Feature x86_kvm_features[] =
|
||||
KVM_FEATURE(VIR_CPU_x86_HV_STIMER_DIRECT),
|
||||
};
|
||||
|
||||
+typedef struct _virCPUx86Signature virCPUx86Signature;
|
||||
+struct _virCPUx86Signature {
|
||||
+ unsigned int family;
|
||||
+ unsigned int model;
|
||||
+};
|
||||
+
|
||||
+typedef struct _virCPUx86Signatures virCPUx86Signatures;
|
||||
+typedef virCPUx86Signatures *virCPUx86SignaturesPtr;
|
||||
+struct _virCPUx86Signatures {
|
||||
+ size_t count;
|
||||
+ virCPUx86Signature *items;
|
||||
+};
|
||||
+
|
||||
typedef struct _virCPUx86Model virCPUx86Model;
|
||||
typedef virCPUx86Model *virCPUx86ModelPtr;
|
||||
struct _virCPUx86Model {
|
||||
@@ -128,8 +141,7 @@ struct _virCPUx86Model {
|
||||
bool decodeHost;
|
||||
bool decodeGuest;
|
||||
virCPUx86VendorPtr vendor;
|
||||
- size_t nsignatures;
|
||||
- uint32_t *signatures;
|
||||
+ virCPUx86SignaturesPtr signatures;
|
||||
virCPUx86Data data;
|
||||
};
|
||||
|
||||
@@ -717,6 +729,13 @@ x86MakeSignature(unsigned int family,
|
||||
}
|
||||
|
||||
|
||||
+static uint32_t
|
||||
+virCPUx86SignatureToCPUID(virCPUx86Signature *sig)
|
||||
+{
|
||||
+ return x86MakeSignature(sig->family, sig->model, 0);
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void
|
||||
virCPUx86SignatureFromCPUID(uint32_t sig,
|
||||
unsigned int *family,
|
||||
@@ -1099,41 +1118,65 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
|
||||
|
||||
+static virCPUx86SignaturesPtr
|
||||
+virCPUx86SignaturesNew(size_t count)
|
||||
+{
|
||||
+ virCPUx86SignaturesPtr sigs;
|
||||
+
|
||||
+ sigs = g_new0(virCPUx86Signatures, 1);
|
||||
+ sigs->items = g_new0(virCPUx86Signature, count);
|
||||
+ sigs->count = count;
|
||||
+
|
||||
+ return sigs;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void
|
||||
-virCPUx86SignaturesFree(uint32_t *signatures)
|
||||
+virCPUx86SignaturesFree(virCPUx86SignaturesPtr sigs)
|
||||
{
|
||||
- g_free(signatures);
|
||||
+ if (!sigs)
|
||||
+ return;
|
||||
+
|
||||
+ g_free(sigs->items);
|
||||
+ g_free(sigs);
|
||||
}
|
||||
|
||||
|
||||
-static int
|
||||
-virCPUx86SignaturesCopy(virCPUx86ModelPtr dst,
|
||||
- virCPUx86ModelPtr src)
|
||||
+static virCPUx86SignaturesPtr
|
||||
+virCPUx86SignaturesCopy(virCPUx86SignaturesPtr src)
|
||||
{
|
||||
+ virCPUx86SignaturesPtr dst;
|
||||
size_t i;
|
||||
|
||||
- if (src->nsignatures == 0)
|
||||
- return 0;
|
||||
+ if (!src || src->count == 0)
|
||||
+ return NULL;
|
||||
|
||||
- if (VIR_ALLOC_N(dst->signatures, src->nsignatures) < 0)
|
||||
- return -1;
|
||||
+ dst = virCPUx86SignaturesNew(src->count);
|
||||
|
||||
- dst->nsignatures = src->nsignatures;
|
||||
- for (i = 0; i < src->nsignatures; i++)
|
||||
- dst->signatures[i] = src->signatures[i];
|
||||
+ for (i = 0; i < src->count; i++)
|
||||
+ dst->items[i] = src->items[i];
|
||||
|
||||
- return 0;
|
||||
+ return dst;
|
||||
}
|
||||
|
||||
|
||||
static bool
|
||||
-virCPUx86SignaturesMatch(virCPUx86ModelPtr model,
|
||||
+virCPUx86SignaturesMatch(virCPUx86SignaturesPtr sigs,
|
||||
uint32_t signature)
|
||||
{
|
||||
size_t i;
|
||||
+ unsigned int family;
|
||||
+ unsigned int model;
|
||||
+ unsigned int stepping;
|
||||
|
||||
- for (i = 0; i < model->nsignatures; i++) {
|
||||
- if (model->signatures[i] == signature)
|
||||
+ if (!sigs)
|
||||
+ return false;
|
||||
+
|
||||
+ virCPUx86SignatureFromCPUID(signature, &family, &model, &stepping);
|
||||
+
|
||||
+ for (i = 0; i < sigs->count; i++) {
|
||||
+ if (sigs->items[i].family == family &&
|
||||
+ sigs->items[i].model == model)
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1142,17 +1185,21 @@ virCPUx86SignaturesMatch(virCPUx86ModelPtr model,
|
||||
|
||||
|
||||
static char *
|
||||
-virCPUx86SignaturesFormat(virCPUx86ModelPtr model)
|
||||
+virCPUx86SignaturesFormat(virCPUx86SignaturesPtr sigs)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
size_t i;
|
||||
|
||||
- for (i = 0; i < model->nsignatures; i++) {
|
||||
- virBufferAsprintf(&buf, "%06lx,",
|
||||
- (unsigned long)model->signatures[i]);
|
||||
+ if (!sigs)
|
||||
+ return virBufferContentAndReset(&buf);
|
||||
+
|
||||
+ for (i = 0; i < sigs->count; i++) {
|
||||
+ virBufferAsprintf(&buf, "(%u,%u,0), ",
|
||||
+ sigs->items[i].family,
|
||||
+ sigs->items[i].model);
|
||||
}
|
||||
|
||||
- virBufferTrim(&buf, ",", -1);
|
||||
+ virBufferTrim(&buf, ", ", -1);
|
||||
|
||||
return virBufferContentAndReset(&buf);
|
||||
}
|
||||
@@ -1179,16 +1226,11 @@ x86ModelCopy(virCPUx86ModelPtr model)
|
||||
|
||||
copy = g_new0(virCPUx86Model, 1);
|
||||
copy->name = g_strdup(model->name);
|
||||
-
|
||||
- if (virCPUx86SignaturesCopy(copy, model) < 0) {
|
||||
- x86ModelFree(copy);
|
||||
- return NULL;
|
||||
- }
|
||||
+ copy->signatures = virCPUx86SignaturesCopy(model->signatures);
|
||||
x86DataCopy(©->data, &model->data);
|
||||
-
|
||||
copy->vendor = model->vendor;
|
||||
|
||||
- return copy;
|
||||
+ return g_steal_pointer(©);
|
||||
}
|
||||
|
||||
|
||||
@@ -1408,9 +1450,7 @@ x86ModelParseAncestor(virCPUx86ModelPtr model,
|
||||
}
|
||||
|
||||
model->vendor = ancestor->vendor;
|
||||
- if (virCPUx86SignaturesCopy(model, ancestor) < 0)
|
||||
- return -1;
|
||||
-
|
||||
+ model->signatures = virCPUx86SignaturesCopy(ancestor->signatures);
|
||||
x86DataCopy(&model->data, &ancestor->data);
|
||||
|
||||
return 0;
|
||||
@@ -1432,34 +1472,29 @@ x86ModelParseSignatures(virCPUx86ModelPtr model,
|
||||
/* Remove inherited signatures. */
|
||||
virCPUx86SignaturesFree(model->signatures);
|
||||
|
||||
- model->nsignatures = n;
|
||||
- if (VIR_ALLOC_N(model->signatures, n) < 0)
|
||||
- return -1;
|
||||
+ model->signatures = virCPUx86SignaturesNew(n);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
- unsigned int sigFamily = 0;
|
||||
- unsigned int sigModel = 0;
|
||||
+ virCPUx86Signature *sig = &model->signatures->items[i];
|
||||
int rc;
|
||||
|
||||
ctxt->node = nodes[i];
|
||||
|
||||
- rc = virXPathUInt("string(@family)", ctxt, &sigFamily);
|
||||
- if (rc < 0 || sigFamily == 0) {
|
||||
+ rc = virXPathUInt("string(@family)", ctxt, &sig->family);
|
||||
+ if (rc < 0 || sig->family == 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Invalid CPU signature family in model %s"),
|
||||
model->name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
- rc = virXPathUInt("string(@model)", ctxt, &sigModel);
|
||||
+ rc = virXPathUInt("string(@model)", ctxt, &sig->model);
|
||||
if (rc < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Invalid CPU signature model in model %s"),
|
||||
model->name);
|
||||
return -1;
|
||||
}
|
||||
-
|
||||
- model->signatures[i] = x86MakeSignature(sigFamily, sigModel, 0);
|
||||
}
|
||||
|
||||
ctxt->node = root;
|
||||
@@ -1865,9 +1900,12 @@ x86Compute(virCPUDefPtr host,
|
||||
&host_model->vendor->data) < 0)
|
||||
return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
- if (host_model->signatures &&
|
||||
- x86DataAddSignature(&guest_model->data, *host_model->signatures) < 0)
|
||||
- return VIR_CPU_COMPARE_ERROR;
|
||||
+ if (host_model->signatures && host_model->signatures->count > 0) {
|
||||
+ virCPUx86Signature *sig = &host_model->signatures->items[0];
|
||||
+ if (x86DataAddSignature(&guest_model->data,
|
||||
+ virCPUx86SignatureToCPUID(sig)) < 0)
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
+ }
|
||||
|
||||
if (cpu->type == VIR_CPU_TYPE_GUEST
|
||||
&& cpu->match == VIR_CPU_MATCH_EXACT)
|
||||
@@ -1977,8 +2015,8 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
|
||||
* consider candidates with matching family/model.
|
||||
*/
|
||||
if (signature &&
|
||||
- virCPUx86SignaturesMatch(current, signature) &&
|
||||
- !virCPUx86SignaturesMatch(candidate, signature)) {
|
||||
+ virCPUx86SignaturesMatch(current->signatures, signature) &&
|
||||
+ !virCPUx86SignaturesMatch(candidate->signatures, signature)) {
|
||||
VIR_DEBUG("%s differs in signature from matching %s",
|
||||
cpuCandidate->model, cpuCurrent->model);
|
||||
return 0;
|
||||
@@ -1994,8 +2032,8 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
|
||||
* result in longer list of features.
|
||||
*/
|
||||
if (signature &&
|
||||
- virCPUx86SignaturesMatch(candidate, signature) &&
|
||||
- !virCPUx86SignaturesMatch(current, signature)) {
|
||||
+ virCPUx86SignaturesMatch(candidate->signatures, signature) &&
|
||||
+ !virCPUx86SignaturesMatch(current->signatures, signature)) {
|
||||
VIR_DEBUG("%s provides matching signature", cpuCandidate->model);
|
||||
return 1;
|
||||
}
|
||||
@@ -2150,7 +2188,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
if (vendor)
|
||||
cpu->vendor = g_strdup(vendor->name);
|
||||
|
||||
- sigs = virCPUx86SignaturesFormat(model);
|
||||
+ sigs = virCPUx86SignaturesFormat(model->signatures);
|
||||
|
||||
VIR_DEBUG("Using CPU model %s (signatures %s) for CPU with signature %06lx",
|
||||
model->name, NULLSTR(sigs), (unsigned long)signature);
|
||||
@@ -3046,9 +3084,12 @@ virCPUx86Translate(virCPUDefPtr cpu,
|
||||
virCPUx86DataAddItem(&model->data, &model->vendor->data) < 0)
|
||||
return -1;
|
||||
|
||||
- if (model->signatures &&
|
||||
- x86DataAddSignature(&model->data, model->signatures[0]) < 0)
|
||||
- return -1;
|
||||
+ if (model->signatures && model->signatures->count > 0) {
|
||||
+ virCPUx86Signature *sig = &model->signatures->items[0];
|
||||
+ if (x86DataAddSignature(&model->data,
|
||||
+ virCPUx86SignatureToCPUID(sig)) < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
if (!(translated = virCPUDefCopyWithoutModel(cpu)))
|
||||
return -1;
|
||||
--
|
||||
2.26.2
|
||||
|
160
SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Baseline.patch
Normal file
160
SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Baseline.patch
Normal file
@ -0,0 +1,160 @@
|
||||
From da1511d57b10d2cc1cb14d78c6911815ec7d9f64 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <da1511d57b10d2cc1cb14d78c6911815ec7d9f64@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:20 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86Baseline
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 5efefe7d7eb129b72bcbbebfbba2d5750ffeeeff)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <d93fb6757fd9ecd9ffe8634c422cc613c8d03e84.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 46 +++++++++++++++++-----------------------------
|
||||
1 file changed, 17 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 1ade53a4a8..6e7311694d 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2697,21 +2697,20 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
|
||||
bool migratable)
|
||||
{
|
||||
virCPUx86MapPtr map = NULL;
|
||||
- virCPUx86ModelPtr base_model = NULL;
|
||||
- virCPUDefPtr cpu = NULL;
|
||||
+ g_autoptr(virCPUx86Model) base_model = NULL;
|
||||
+ g_autoptr(virCPUDef) cpu = NULL;
|
||||
size_t i;
|
||||
virCPUx86VendorPtr vendor = NULL;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
bool outputVendor = true;
|
||||
const char *modelName;
|
||||
bool matchingNames = true;
|
||||
- virCPUDataPtr featData = NULL;
|
||||
+ g_autoptr(virCPUData) featData = NULL;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
|
||||
if (!(base_model = x86ModelFromCPU(cpus[0], map, -1)))
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
|
||||
cpu = virCPUDefNew();
|
||||
|
||||
@@ -2723,11 +2722,12 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
|
||||
} else if (!(vendor = x86VendorFind(map, cpus[0]->vendor))) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("Unknown CPU vendor %s"), cpus[0]->vendor);
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
modelName = cpus[0]->model;
|
||||
for (i = 1; i < ncpus; i++) {
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
const char *vn = NULL;
|
||||
|
||||
if (matchingNames && cpus[i]->model) {
|
||||
@@ -2740,14 +2740,14 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
|
||||
}
|
||||
|
||||
if (!(model = x86ModelFromCPU(cpus[i], map, -1)))
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
|
||||
if (cpus[i]->vendor && model->vendor &&
|
||||
STRNEQ(cpus[i]->vendor, model->vendor->name)) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("CPU vendor %s of model %s differs from vendor %s"),
|
||||
model->vendor->name, model->name, cpus[i]->vendor);
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
if (cpus[i]->vendor) {
|
||||
@@ -2763,30 +2763,28 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
|
||||
if (!(vendor = x86VendorFind(map, vn))) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("Unknown CPU vendor %s"), vn);
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
} else if (STRNEQ(vendor->name, vn)) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
"%s", _("CPU vendors do not match"));
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
x86DataIntersect(&base_model->data, &model->data);
|
||||
- x86ModelFree(model);
|
||||
- model = NULL;
|
||||
}
|
||||
|
||||
if (features) {
|
||||
virCPUx86FeaturePtr feat;
|
||||
|
||||
if (!(featData = virCPUDataNew(archs[0])))
|
||||
- goto cleanup;
|
||||
+ return NULL;
|
||||
|
||||
for (i = 0; features[i]; i++) {
|
||||
if ((feat = x86FeatureFind(map, features[i])) &&
|
||||
x86DataAdd(&featData->data.x86, &feat->data) < 0)
|
||||
- goto cleanup;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
x86DataIntersect(&base_model->data, &featData->data.x86);
|
||||
@@ -2795,15 +2793,15 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
|
||||
if (x86DataIsEmpty(&base_model->data)) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
"%s", _("CPUs are incompatible"));
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
if (vendor &&
|
||||
virCPUx86DataAddItem(&base_model->data, &vendor->data) < 0)
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
|
||||
if (x86Decode(cpu, &base_model->data, models, modelName, migratable) < 0)
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
|
||||
if (STREQ_NULLABLE(cpu->model, modelName))
|
||||
cpu->fallback = VIR_CPU_FALLBACK_FORBID;
|
||||
@@ -2811,17 +2809,7 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
|
||||
if (!outputVendor)
|
||||
VIR_FREE(cpu->vendor);
|
||||
|
||||
- cleanup:
|
||||
- x86ModelFree(base_model);
|
||||
- virCPUx86DataFree(featData);
|
||||
-
|
||||
- return cpu;
|
||||
-
|
||||
- error:
|
||||
- x86ModelFree(model);
|
||||
- virCPUDefFree(cpu);
|
||||
- cpu = NULL;
|
||||
- goto cleanup;
|
||||
+ return g_steal_pointer(&cpu);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,54 @@
|
||||
From 22d4493fd34661f4b93c8d4c885e627d561f2e70 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <22d4493fd34661f4b93c8d4c885e627d561f2e70@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:18 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86CheckFeature
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3b5f1ca58e8f12bc7b768206cb9c7c2ef237e3ff)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <0834c0debe689b9b8a5f694738edc149856a08fa.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 11 +++--------
|
||||
1 file changed, 3 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 56081145c0..0aebe534e6 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2278,21 +2278,16 @@ static int
|
||||
virCPUx86CheckFeature(const virCPUDef *cpu,
|
||||
const char *name)
|
||||
{
|
||||
- int ret = -1;
|
||||
virCPUx86MapPtr map;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
return -1;
|
||||
|
||||
if (!(model = x86ModelFromCPU(cpu, map, -1)))
|
||||
- goto cleanup;
|
||||
-
|
||||
- ret = x86FeatureInData(name, &model->data, map);
|
||||
+ return -1;
|
||||
|
||||
- cleanup:
|
||||
- x86ModelFree(model);
|
||||
- return ret;
|
||||
+ return x86FeatureInData(name, &model->data, map);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
69
SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Compare.patch
Normal file
69
SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Compare.patch
Normal file
@ -0,0 +1,69 @@
|
||||
From 2abd91246d3967f62473a9034f5d11f8e8ea8980 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2abd91246d3967f62473a9034f5d11f8e8ea8980@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:14 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86Compare
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit bc62d7a49141d745b19d066c07599f228020a0b3)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <548eeddbf9eabf5e4a872390189bb0adf746c75f.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 16 +++++++---------
|
||||
1 file changed, 7 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 1a1c846383..c111ff45d4 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1847,32 +1847,30 @@ virCPUx86Compare(virCPUDefPtr host,
|
||||
virCPUDefPtr cpu,
|
||||
bool failIncompatible)
|
||||
{
|
||||
- virCPUCompareResult ret = VIR_CPU_COMPARE_ERROR;
|
||||
- char *message = NULL;
|
||||
+ virCPUCompareResult ret;
|
||||
+ g_autofree char *message = NULL;
|
||||
|
||||
if (!host || !host->model) {
|
||||
if (failIncompatible) {
|
||||
virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s",
|
||||
_("unknown host CPU"));
|
||||
- } else {
|
||||
- VIR_WARN("unknown host CPU");
|
||||
- ret = VIR_CPU_COMPARE_INCOMPATIBLE;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
}
|
||||
- goto cleanup;
|
||||
+
|
||||
+ VIR_WARN("unknown host CPU");
|
||||
+ return VIR_CPU_COMPARE_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
ret = x86Compute(host, cpu, NULL, &message);
|
||||
|
||||
if (ret == VIR_CPU_COMPARE_INCOMPATIBLE && failIncompatible) {
|
||||
- ret = VIR_CPU_COMPARE_ERROR;
|
||||
if (message)
|
||||
virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", message);
|
||||
else
|
||||
virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL);
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
}
|
||||
|
||||
- cleanup:
|
||||
- VIR_FREE(message);
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,54 @@
|
||||
From a96d5bdc7d2d2de7b35820530f0665dda3c66c68 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <a96d5bdc7d2d2de7b35820530f0665dda3c66c68@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:26 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86CopyMigratable
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit a32a3e934f5e7769dc9d12a221f344319200b435)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <240a340d63d1c8612e58c2d5c52970291f3e7b6d.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 10 +++-------
|
||||
1 file changed, 3 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 917cf857a6..b4b1b475d6 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -3109,7 +3109,7 @@ x86FeatureFilterMigratable(const char *name,
|
||||
static virCPUDefPtr
|
||||
virCPUx86CopyMigratable(virCPUDefPtr cpu)
|
||||
{
|
||||
- virCPUDefPtr copy;
|
||||
+ g_autoptr(virCPUDef) copy = NULL;
|
||||
virCPUx86MapPtr map;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
@@ -3120,13 +3120,9 @@ virCPUx86CopyMigratable(virCPUDefPtr cpu)
|
||||
|
||||
if (virCPUDefCopyModelFilter(copy, cpu, false,
|
||||
x86FeatureFilterMigratable, map) < 0)
|
||||
- goto error;
|
||||
-
|
||||
- return copy;
|
||||
+ return NULL;
|
||||
|
||||
- error:
|
||||
- virCPUDefFree(copy);
|
||||
- return NULL;
|
||||
+ return g_steal_pointer(©);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,87 @@
|
||||
From 45226d208c57719b50152dbec99a75969989208b Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <45226d208c57719b50152dbec99a75969989208b@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:12 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86DataParse
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit c1532711dda6db27c7f6fa7d86ab5ec5d2ab2224)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <e98c6869043aa0b7d0cc3adffe879f5d7d3c39f2.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 23 ++++++++---------------
|
||||
1 file changed, 8 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index cb5a2f941e..107fd9227d 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1636,8 +1636,8 @@ virCPUx86DataFormat(const virCPUData *data)
|
||||
static virCPUDataPtr
|
||||
virCPUx86DataParse(xmlXPathContextPtr ctxt)
|
||||
{
|
||||
- xmlNodePtr *nodes = NULL;
|
||||
- virCPUDataPtr cpuData = NULL;
|
||||
+ g_autofree xmlNodePtr *nodes = NULL;
|
||||
+ g_autoptr(virCPUData) cpuData = NULL;
|
||||
virCPUx86DataItem item;
|
||||
size_t i;
|
||||
int n;
|
||||
@@ -1646,11 +1646,11 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
|
||||
if (n <= 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("no x86 CPU data found"));
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
if (!(cpuData = virCPUDataNew(VIR_ARCH_X86_64)))
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
ctxt->node = nodes[i];
|
||||
@@ -1658,28 +1658,21 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
|
||||
if (x86ParseCPUID(ctxt, &item) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("failed to parse cpuid[%zu]"), i);
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
} else {
|
||||
if (x86ParseMSR(ctxt, &item) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("failed to parse msr[%zu]"), i);
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (virCPUx86DataAdd(cpuData, &item) < 0)
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
- cleanup:
|
||||
- VIR_FREE(nodes);
|
||||
- return cpuData;
|
||||
-
|
||||
- error:
|
||||
- virCPUx86DataFree(cpuData);
|
||||
- cpuData = NULL;
|
||||
- goto cleanup;
|
||||
+ return g_steal_pointer(&cpuData);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,86 @@
|
||||
From 5f9b035adcf2813beb6cc82200b745f5e34acd8d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5f9b035adcf2813beb6cc82200b745f5e34acd8d@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:25 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86ExpandFeatures
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit ff6897c84504a3e663759d710968ad1f72bc9208)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <d82daa166403fda2bcd89c68478162b45d8b9711.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 22 ++++++++--------------
|
||||
1 file changed, 8 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index c4654c8d4c..917cf857a6 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -3055,30 +3055,29 @@ static int
|
||||
virCPUx86ExpandFeatures(virCPUDefPtr cpu)
|
||||
{
|
||||
virCPUx86MapPtr map;
|
||||
- virCPUDefPtr expanded = NULL;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
+ g_autoptr(virCPUDef) expanded = NULL;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
bool host = cpu->type == VIR_CPU_TYPE_HOST;
|
||||
size_t i;
|
||||
- int ret = -1;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (!(expanded = virCPUDefCopy(cpu)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
virCPUDefFreeFeatures(expanded);
|
||||
|
||||
if (!(model = x86ModelFind(map, cpu->model))) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("unknown CPU model %s"), cpu->model);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (!(model = x86ModelCopy(model)) ||
|
||||
x86DataToCPUFeatures(expanded, host ? -1 : VIR_CPU_FEATURE_REQUIRE,
|
||||
&model->data, map) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
for (i = 0; i < cpu->nfeatures; i++) {
|
||||
virCPUFeatureDefPtr f = cpu->features + i;
|
||||
@@ -3089,17 +3088,12 @@ virCPUx86ExpandFeatures(virCPUDefPtr cpu)
|
||||
continue;
|
||||
|
||||
if (virCPUDefUpdateFeature(expanded, f->name, f->policy) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
virCPUDefFreeModel(cpu);
|
||||
|
||||
- ret = virCPUDefCopyModel(cpu, expanded, false);
|
||||
-
|
||||
- cleanup:
|
||||
- virCPUDefFree(expanded);
|
||||
- x86ModelFree(model);
|
||||
- return ret;
|
||||
+ return virCPUDefCopyModel(cpu, expanded, false);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
71
SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86GetHost.patch
Normal file
71
SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86GetHost.patch
Normal file
@ -0,0 +1,71 @@
|
||||
From 0b64dac1a3a9ef9cdfe3446ebbe114da1ae86e97 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0b64dac1a3a9ef9cdfe3446ebbe114da1ae86e97@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:19 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86GetHost
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 4a7f6f43a2a6144780d7ab74b8a6f6b008a7aa9d)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <94056710375d491c42d12a46b20f670453c2a1c8.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 14 ++++++--------
|
||||
1 file changed, 6 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 0aebe534e6..1ade53a4a8 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2637,18 +2637,18 @@ static int
|
||||
virCPUx86GetHost(virCPUDefPtr cpu,
|
||||
virDomainCapsCPUModelsPtr models)
|
||||
{
|
||||
- virCPUDataPtr cpuData = NULL;
|
||||
- int ret = -1;
|
||||
+ g_autoptr(virCPUData) cpuData = NULL;
|
||||
+ int ret;
|
||||
|
||||
if (virCPUx86DriverInitialize() < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (!(cpuData = virCPUDataNew(archs[0])))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (cpuidSet(CPUX86_BASIC, cpuData) < 0 ||
|
||||
cpuidSet(CPUX86_EXTENDED, cpuData) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
/* Read the IA32_ARCH_CAPABILITIES MSR (0x10a) if supported.
|
||||
* This is best effort since there might be no way to read the MSR
|
||||
@@ -2668,7 +2668,7 @@ virCPUx86GetHost(virCPUDefPtr cpu,
|
||||
};
|
||||
|
||||
if (virCPUx86DataAdd(cpuData, &item) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2684,8 +2684,6 @@ virCPUx86GetHost(virCPUDefPtr cpu,
|
||||
VIR_DEBUG("Host CPU does not support invariant TSC");
|
||||
}
|
||||
|
||||
- cleanup:
|
||||
- virCPUx86DataFree(cpuData);
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
--
|
||||
2.26.2
|
||||
|
51
SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86LoadMap.patch
Normal file
51
SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86LoadMap.patch
Normal file
@ -0,0 +1,51 @@
|
||||
From 91a87dbe3a25e405ea5fbd87e4444ca77d04a34c Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <91a87dbe3a25e405ea5fbd87e4444ca77d04a34c@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:11 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86LoadMap
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3c650a8f7a89046b925fb5ddc78c4b6669ed76ef)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <63da1b86ef1c4f174234ff34e43d502afe326a2b.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 10 +++-------
|
||||
1 file changed, 3 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 20cdd24390..cb5a2f941e 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1559,18 +1559,14 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Map, x86MapFree);
|
||||
static virCPUx86MapPtr
|
||||
virCPUx86LoadMap(void)
|
||||
{
|
||||
- virCPUx86MapPtr map;
|
||||
+ g_autoptr(virCPUx86Map) map = NULL;
|
||||
|
||||
map = g_new0(virCPUx86Map, 1);
|
||||
|
||||
if (cpuMapLoad("x86", x86VendorParse, x86FeatureParse, x86ModelParse, map) < 0)
|
||||
- goto error;
|
||||
-
|
||||
- return map;
|
||||
+ return NULL;
|
||||
|
||||
- error:
|
||||
- x86MapFree(map);
|
||||
- return NULL;
|
||||
+ return g_steal_pointer(&map);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,85 @@
|
||||
From 13d45a3f07d1639250101b037bb65c20aed60763 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <13d45a3f07d1639250101b037bb65c20aed60763@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:24 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86Translate
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit dff59020187c34e3f814c2aa24f3832d1d5b34f9)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <574920457f9fec4bc1938615016278eddd46ba90.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 26 ++++++++++----------------
|
||||
1 file changed, 10 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index e3a83061d0..c4654c8d4c 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -3015,45 +3015,39 @@ static int
|
||||
virCPUx86Translate(virCPUDefPtr cpu,
|
||||
virDomainCapsCPUModelsPtr models)
|
||||
{
|
||||
- virCPUDefPtr translated = NULL;
|
||||
+ g_autoptr(virCPUDef) translated = NULL;
|
||||
virCPUx86MapPtr map;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
size_t i;
|
||||
- int ret = -1;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (!(model = x86ModelFromCPU(cpu, map, -1)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (model->vendor &&
|
||||
virCPUx86DataAddItem(&model->data, &model->vendor->data) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (model->signatures &&
|
||||
x86DataAddSignature(&model->data, model->signatures[0]) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (!(translated = virCPUDefCopyWithoutModel(cpu)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (x86Decode(translated, &model->data, models, NULL, false) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
for (i = 0; i < cpu->nfeatures; i++) {
|
||||
virCPUFeatureDefPtr f = cpu->features + i;
|
||||
if (virCPUDefUpdateFeature(translated, f->name, f->policy) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
virCPUDefStealModel(cpu, translated, true);
|
||||
- ret = 0;
|
||||
-
|
||||
- cleanup:
|
||||
- virCPUDefFree(translated);
|
||||
- x86ModelFree(model);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
73
SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Update.patch
Normal file
73
SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Update.patch
Normal file
@ -0,0 +1,73 @@
|
||||
From 2631931d1dc94aeab384d92bd00866de912c9b7d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2631931d1dc94aeab384d92bd00866de912c9b7d@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:22 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86Update
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit e0244a786db265647ab6c1c37ca3852876e4b0a3)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <1d8ad3e099081c35a41e1013458fa52d8fb4fae0.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 15 +++++----------
|
||||
1 file changed, 5 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 98f7863b6f..1f7a8802f6 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2853,9 +2853,8 @@ static int
|
||||
virCPUx86Update(virCPUDefPtr guest,
|
||||
const virCPUDef *host)
|
||||
{
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
virCPUx86MapPtr map;
|
||||
- int ret = -1;
|
||||
size_t i;
|
||||
|
||||
if (!host) {
|
||||
@@ -2868,14 +2867,14 @@ virCPUx86Update(virCPUDefPtr guest,
|
||||
return -1;
|
||||
|
||||
if (!(model = x86ModelFromCPU(host, map, -1)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
for (i = 0; i < guest->nfeatures; i++) {
|
||||
if (guest->features[i].policy == VIR_CPU_FEATURE_OPTIONAL) {
|
||||
int supported = x86FeatureInData(guest->features[i].name,
|
||||
&model->data, map);
|
||||
if (supported < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
else if (supported)
|
||||
guest->features[i].policy = VIR_CPU_FEATURE_REQUIRE;
|
||||
else
|
||||
@@ -2885,13 +2884,9 @@ virCPUx86Update(virCPUDefPtr guest,
|
||||
|
||||
if (guest->mode == VIR_CPU_MODE_HOST_MODEL ||
|
||||
guest->match == VIR_CPU_MATCH_MINIMUM)
|
||||
- ret = x86UpdateHostModel(guest, host);
|
||||
- else
|
||||
- ret = 0;
|
||||
+ return x86UpdateHostModel(guest, host);
|
||||
|
||||
- cleanup:
|
||||
- x86ModelFree(model);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
116
SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86UpdateLive.patch
Normal file
116
SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86UpdateLive.patch
Normal file
@ -0,0 +1,116 @@
|
||||
From 7a293db132130fdda7b550d701fdb426de5257e3 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <7a293db132130fdda7b550d701fdb426de5257e3@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:23 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86UpdateLive
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 2748e91c548cbc48a5ea499e06e62de528c10d20)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <5c29b10ead2332033087fc6ed487c9ca53b7e3a4.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 42 +++++++++++++++---------------------------
|
||||
1 file changed, 15 insertions(+), 27 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 1f7a8802f6..e3a83061d0 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2897,26 +2897,25 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
{
|
||||
bool hostPassthrough = cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH;
|
||||
virCPUx86MapPtr map;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
- virCPUx86ModelPtr modelDisabled = NULL;
|
||||
- virCPUx86Data enabled = VIR_CPU_X86_DATA_INIT;
|
||||
- virCPUx86Data disabled = VIR_CPU_X86_DATA_INIT;
|
||||
- virBuffer bufAdded = VIR_BUFFER_INITIALIZER;
|
||||
- virBuffer bufRemoved = VIR_BUFFER_INITIALIZER;
|
||||
- char *added = NULL;
|
||||
- char *removed = NULL;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
+ g_autoptr(virCPUx86Model) modelDisabled = NULL;
|
||||
+ g_auto(virCPUx86Data) enabled = VIR_CPU_X86_DATA_INIT;
|
||||
+ g_auto(virCPUx86Data) disabled = VIR_CPU_X86_DATA_INIT;
|
||||
+ g_auto(virBuffer) bufAdded = VIR_BUFFER_INITIALIZER;
|
||||
+ g_auto(virBuffer) bufRemoved = VIR_BUFFER_INITIALIZER;
|
||||
+ g_autofree char *added = NULL;
|
||||
+ g_autofree char *removed = NULL;
|
||||
size_t i;
|
||||
- int ret = -1;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
return -1;
|
||||
|
||||
if (!(model = x86ModelFromCPU(cpu, map, -1)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (hostPassthrough &&
|
||||
!(modelDisabled = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_DISABLE)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (dataEnabled)
|
||||
x86DataCopy(&enabled, &dataEnabled->data.x86);
|
||||
@@ -2941,7 +2940,7 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
virBufferAsprintf(&bufAdded, "%s,", feature->name);
|
||||
else if (virCPUDefUpdateFeature(cpu, feature->name,
|
||||
VIR_CPU_FEATURE_REQUIRE) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (x86DataIsSubset(&disabled, &feature->data) ||
|
||||
@@ -2952,7 +2951,7 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
virBufferAsprintf(&bufRemoved, "%s,", feature->name);
|
||||
else if (virCPUDefUpdateFeature(cpu, feature->name,
|
||||
VIR_CPU_FEATURE_DISABLE) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2978,28 +2977,17 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
_("guest CPU doesn't match specification: "
|
||||
"missing features: %s"),
|
||||
removed);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (cpu->check == VIR_CPU_CHECK_FULL &&
|
||||
!x86DataIsEmpty(&disabled)) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("guest CPU doesn't match specification"));
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
- ret = 0;
|
||||
-
|
||||
- cleanup:
|
||||
- x86ModelFree(model);
|
||||
- x86ModelFree(modelDisabled);
|
||||
- virCPUx86DataClear(&enabled);
|
||||
- virCPUx86DataClear(&disabled);
|
||||
- VIR_FREE(added);
|
||||
- VIR_FREE(removed);
|
||||
- virBufferFreeAndReset(&bufAdded);
|
||||
- virBufferFreeAndReset(&bufRemoved);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
181
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Compute.patch
Normal file
181
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Compute.patch
Normal file
@ -0,0 +1,181 @@
|
||||
From b8162d4174443babbd260b36ea4645469eca7d67 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b8162d4174443babbd260b36ea4645469eca7d67@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:13 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86Compute
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit edf3c9045f1742d6c132066e4ba2da25c9ad7b26)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <6022f3717ce7ab0df25d31f2aaa08cac1c5f82de.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 65 +++++++++++++++++------------------------------
|
||||
1 file changed, 24 insertions(+), 41 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 107fd9227d..1a1c846383 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1680,7 +1680,6 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
|
||||
* redundant code:
|
||||
* MSG: error message
|
||||
* CPU_DEF: a virCPUx86Data pointer with flags that are conflicting
|
||||
- * RET: return code to set
|
||||
*
|
||||
* This macro generates the error string outputs it into logs.
|
||||
*/
|
||||
@@ -1689,13 +1688,12 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
|
||||
char *flagsStr = NULL; \
|
||||
if (!(flagsStr = x86FeatureNames(map, ", ", (CPU_DEF)))) { \
|
||||
virReportOOMError(); \
|
||||
- goto error; \
|
||||
+ return VIR_CPU_COMPARE_ERROR; \
|
||||
} \
|
||||
if (message) \
|
||||
*message = g_strdup_printf("%s: %s", _(MSG), flagsStr); \
|
||||
VIR_DEBUG("%s: %s", MSG, flagsStr); \
|
||||
VIR_FREE(flagsStr); \
|
||||
- ret = VIR_CPU_COMPARE_INCOMPATIBLE; \
|
||||
} while (0)
|
||||
|
||||
|
||||
@@ -1706,15 +1704,15 @@ x86Compute(virCPUDefPtr host,
|
||||
char **message)
|
||||
{
|
||||
virCPUx86MapPtr map = NULL;
|
||||
- virCPUx86ModelPtr host_model = NULL;
|
||||
- virCPUx86ModelPtr cpu_force = NULL;
|
||||
- virCPUx86ModelPtr cpu_require = NULL;
|
||||
- virCPUx86ModelPtr cpu_optional = NULL;
|
||||
- virCPUx86ModelPtr cpu_disable = NULL;
|
||||
- virCPUx86ModelPtr cpu_forbid = NULL;
|
||||
- virCPUx86ModelPtr diff = NULL;
|
||||
- virCPUx86ModelPtr guest_model = NULL;
|
||||
- virCPUDataPtr guestData = NULL;
|
||||
+ g_autoptr(virCPUx86Model) host_model = NULL;
|
||||
+ g_autoptr(virCPUx86Model) cpu_force = NULL;
|
||||
+ g_autoptr(virCPUx86Model) cpu_require = NULL;
|
||||
+ g_autoptr(virCPUx86Model) cpu_optional = NULL;
|
||||
+ g_autoptr(virCPUx86Model) cpu_disable = NULL;
|
||||
+ g_autoptr(virCPUx86Model) cpu_forbid = NULL;
|
||||
+ g_autoptr(virCPUx86Model) diff = NULL;
|
||||
+ g_autoptr(virCPUx86Model) guest_model = NULL;
|
||||
+ g_autoptr(virCPUData) guestData = NULL;
|
||||
virCPUCompareResult ret;
|
||||
virCPUx86CompareResult result;
|
||||
virArch arch;
|
||||
@@ -1764,13 +1762,13 @@ x86Compute(virCPUDefPtr host,
|
||||
!(cpu_optional = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_OPTIONAL)) ||
|
||||
!(cpu_disable = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_DISABLE)) ||
|
||||
!(cpu_forbid = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_FORBID)))
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
x86DataIntersect(&cpu_forbid->data, &host_model->data);
|
||||
if (!x86DataIsEmpty(&cpu_forbid->data)) {
|
||||
virX86CpuIncompatible(N_("Host CPU provides forbidden features"),
|
||||
&cpu_forbid->data);
|
||||
- goto cleanup;
|
||||
+ return VIR_CPU_COMPARE_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
/* first remove features that were inherited from the CPU model and were
|
||||
@@ -1785,20 +1783,20 @@ x86Compute(virCPUDefPtr host,
|
||||
virX86CpuIncompatible(N_("Host CPU does not provide required "
|
||||
"features"),
|
||||
&cpu_require->data);
|
||||
- goto cleanup;
|
||||
+ return VIR_CPU_COMPARE_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
- ret = VIR_CPU_COMPARE_IDENTICAL;
|
||||
-
|
||||
if (!(diff = x86ModelCopy(host_model)))
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
x86DataSubtract(&diff->data, &cpu_optional->data);
|
||||
x86DataSubtract(&diff->data, &cpu_require->data);
|
||||
x86DataSubtract(&diff->data, &cpu_disable->data);
|
||||
x86DataSubtract(&diff->data, &cpu_force->data);
|
||||
|
||||
- if (!x86DataIsEmpty(&diff->data))
|
||||
+ if (x86DataIsEmpty(&diff->data))
|
||||
+ ret = VIR_CPU_COMPARE_IDENTICAL;
|
||||
+ else
|
||||
ret = VIR_CPU_COMPARE_SUPERSET;
|
||||
|
||||
if (ret == VIR_CPU_COMPARE_SUPERSET
|
||||
@@ -1807,54 +1805,39 @@ x86Compute(virCPUDefPtr host,
|
||||
virX86CpuIncompatible(N_("Host CPU does not strictly match guest CPU: "
|
||||
"Extra features"),
|
||||
&diff->data);
|
||||
- goto cleanup;
|
||||
+ return VIR_CPU_COMPARE_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
if (guest) {
|
||||
if (!(guest_model = x86ModelCopy(host_model)))
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
if (cpu->vendor && host_model->vendor &&
|
||||
virCPUx86DataAddItem(&guest_model->data,
|
||||
&host_model->vendor->data) < 0)
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
if (host_model->signatures &&
|
||||
x86DataAddSignature(&guest_model->data, *host_model->signatures) < 0)
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
if (cpu->type == VIR_CPU_TYPE_GUEST
|
||||
&& cpu->match == VIR_CPU_MATCH_EXACT)
|
||||
x86DataSubtract(&guest_model->data, &diff->data);
|
||||
|
||||
if (x86DataAdd(&guest_model->data, &cpu_force->data))
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
x86DataSubtract(&guest_model->data, &cpu_disable->data);
|
||||
|
||||
if (!(guestData = virCPUDataNew(arch)))
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
x86DataCopy(&guestData->data.x86, &guest_model->data);
|
||||
|
||||
- *guest = guestData;
|
||||
+ *guest = g_steal_pointer(&guestData);
|
||||
}
|
||||
|
||||
- cleanup:
|
||||
- x86ModelFree(host_model);
|
||||
- x86ModelFree(diff);
|
||||
- x86ModelFree(cpu_force);
|
||||
- x86ModelFree(cpu_require);
|
||||
- x86ModelFree(cpu_optional);
|
||||
- x86ModelFree(cpu_disable);
|
||||
- x86ModelFree(cpu_forbid);
|
||||
- x86ModelFree(guest_model);
|
||||
-
|
||||
return ret;
|
||||
-
|
||||
- error:
|
||||
- virCPUx86DataFree(guestData);
|
||||
- ret = VIR_CPU_COMPARE_ERROR;
|
||||
- goto cleanup;
|
||||
}
|
||||
#undef virX86CpuIncompatible
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
71
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86DataToCPU.patch
Normal file
71
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86DataToCPU.patch
Normal file
@ -0,0 +1,71 @@
|
||||
From caedf791f3486b5b3ed1ef54e9c25e7c97b3a39a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <caedf791f3486b5b3ed1ef54e9c25e7c97b3a39a@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:06 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86DataToCPU
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 4f2fdad36db2da1aa139470846b3f60f65da8424)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <6f88b9d54c70352f9e4aeadd515cd9f4a599545a.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 20 ++++++--------------
|
||||
1 file changed, 6 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 48f36c2bfc..310dfcbcb3 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -771,9 +771,9 @@ x86DataToCPU(const virCPUx86Data *data,
|
||||
virCPUx86MapPtr map,
|
||||
virDomainCapsCPUModelPtr hvModel)
|
||||
{
|
||||
- virCPUDefPtr cpu;
|
||||
- virCPUx86Data copy = VIR_CPU_X86_DATA_INIT;
|
||||
- virCPUx86Data modelData = VIR_CPU_X86_DATA_INIT;
|
||||
+ g_autoptr(virCPUDef) cpu = NULL;
|
||||
+ g_auto(virCPUx86Data) copy = VIR_CPU_X86_DATA_INIT;
|
||||
+ g_auto(virCPUx86Data) modelData = VIR_CPU_X86_DATA_INIT;
|
||||
virCPUx86VendorPtr vendor;
|
||||
|
||||
cpu = virCPUDefNew();
|
||||
@@ -801,7 +801,7 @@ x86DataToCPU(const virCPUx86Data *data,
|
||||
if ((feature = x86FeatureFind(map, *blocker)) &&
|
||||
!x86DataIsSubset(©, &feature->data))
|
||||
if (x86DataAdd(&modelData, &feature->data) < 0)
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -810,17 +810,9 @@ x86DataToCPU(const virCPUx86Data *data,
|
||||
|
||||
if (x86DataToCPUFeatures(cpu, VIR_CPU_FEATURE_REQUIRE, ©, map) ||
|
||||
x86DataToCPUFeatures(cpu, VIR_CPU_FEATURE_DISABLE, &modelData, map))
|
||||
- goto error;
|
||||
-
|
||||
- cleanup:
|
||||
- virCPUx86DataClear(&modelData);
|
||||
- virCPUx86DataClear(©);
|
||||
- return cpu;
|
||||
+ return NULL;
|
||||
|
||||
- error:
|
||||
- virCPUDefFree(cpu);
|
||||
- cpu = NULL;
|
||||
- goto cleanup;
|
||||
+ return g_steal_pointer(&cpu);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
99
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Decode.patch
Normal file
99
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Decode.patch
Normal file
@ -0,0 +1,99 @@
|
||||
From e9b93240af4c391414b301c7a4a20837bc09b109 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <e9b93240af4c391414b301c7a4a20837bc09b109@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:15 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86Decode
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 9bb9cbf6761ecf985fe9cf8a18030a8aff9b448b)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <1414d86a79eb63d5600cf494455411814cbf10f7.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 24 +++++++-----------------
|
||||
1 file changed, 7 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index c111ff45d4..dba4165527 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2032,15 +2032,12 @@ x86Decode(virCPUDefPtr cpu,
|
||||
const char *preferred,
|
||||
bool migratable)
|
||||
{
|
||||
- int ret = -1;
|
||||
virCPUx86MapPtr map;
|
||||
virCPUx86ModelPtr candidate;
|
||||
virCPUDefPtr cpuCandidate;
|
||||
virCPUx86ModelPtr model = NULL;
|
||||
- virCPUDefPtr cpuModel = NULL;
|
||||
- virCPUx86Data data = VIR_CPU_X86_DATA_INIT;
|
||||
- virCPUx86Data copy = VIR_CPU_X86_DATA_INIT;
|
||||
- virCPUx86Data features = VIR_CPU_X86_DATA_INIT;
|
||||
+ g_autoptr(virCPUDef) cpuModel = NULL;
|
||||
+ g_auto(virCPUx86Data) data = VIR_CPU_X86_DATA_INIT;
|
||||
virCPUx86VendorPtr vendor;
|
||||
virDomainCapsCPUModelPtr hvModel = NULL;
|
||||
g_autofree char *sigs = NULL;
|
||||
@@ -2054,7 +2051,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
x86DataCopy(&data, cpuData);
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
vendor = x86DataToVendor(&data, map);
|
||||
signature = x86DataToSignature(&data);
|
||||
@@ -2073,7 +2070,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("CPU model %s is not supported by hypervisor"),
|
||||
preferred);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
} else {
|
||||
VIR_WARN("Preferred CPU model %s not allowed by"
|
||||
" hypervisor; closest supported model will be"
|
||||
@@ -2096,7 +2093,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
}
|
||||
|
||||
if (!(cpuCandidate = x86DataToCPU(&data, candidate, map, hvModel)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
cpuCandidate->type = cpu->type;
|
||||
|
||||
if ((rc = x86DecodeUseCandidate(model, cpuModel,
|
||||
@@ -2115,7 +2112,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
if (!cpuModel) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
"%s", _("Cannot find suitable CPU model for given data"));
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
/* Remove non-migratable features if requested
|
||||
@@ -2149,14 +2146,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
cpu->nfeatures_max = cpuModel->nfeatures_max;
|
||||
cpuModel->nfeatures_max = 0;
|
||||
|
||||
- ret = 0;
|
||||
-
|
||||
- cleanup:
|
||||
- virCPUDefFree(cpuModel);
|
||||
- virCPUx86DataClear(&data);
|
||||
- virCPUx86DataClear(©);
|
||||
- virCPUx86DataClear(&features);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
--
|
||||
2.26.2
|
||||
|
141
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Encode.patch
Normal file
141
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Encode.patch
Normal file
@ -0,0 +1,141 @@
|
||||
From fc8f77c828ada1bfd3ac4957410f9b4efc659ce1 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <fc8f77c828ada1bfd3ac4957410f9b4efc659ce1@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:17 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86Encode
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit e6e54fcebe99f1c07fe905c419cbe5d12f6844b1)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <4729842dcc538cca58a2ccd18fe2bcf9be410bbb.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 51 +++++++++++++++++++----------------------------
|
||||
1 file changed, 21 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index fd410aeafb..56081145c0 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2188,12 +2188,12 @@ x86Encode(virArch arch,
|
||||
virCPUDataPtr *vendor)
|
||||
{
|
||||
virCPUx86MapPtr map = NULL;
|
||||
- virCPUDataPtr data_forced = NULL;
|
||||
- virCPUDataPtr data_required = NULL;
|
||||
- virCPUDataPtr data_optional = NULL;
|
||||
- virCPUDataPtr data_disabled = NULL;
|
||||
- virCPUDataPtr data_forbidden = NULL;
|
||||
- virCPUDataPtr data_vendor = NULL;
|
||||
+ g_autoptr(virCPUData) data_forced = NULL;
|
||||
+ g_autoptr(virCPUData) data_required = NULL;
|
||||
+ g_autoptr(virCPUData) data_optional = NULL;
|
||||
+ g_autoptr(virCPUData) data_disabled = NULL;
|
||||
+ g_autoptr(virCPUData) data_forbidden = NULL;
|
||||
+ g_autoptr(virCPUData) data_vendor = NULL;
|
||||
|
||||
if (forced)
|
||||
*forced = NULL;
|
||||
@@ -2209,37 +2209,37 @@ x86Encode(virArch arch,
|
||||
*vendor = NULL;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (forced &&
|
||||
(!(data_forced = virCPUDataNew(arch)) ||
|
||||
x86EncodePolicy(&data_forced->data.x86, cpu, map,
|
||||
VIR_CPU_FEATURE_FORCE) < 0))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (required &&
|
||||
(!(data_required = virCPUDataNew(arch)) ||
|
||||
x86EncodePolicy(&data_required->data.x86, cpu, map,
|
||||
VIR_CPU_FEATURE_REQUIRE) < 0))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (optional &&
|
||||
(!(data_optional = virCPUDataNew(arch)) ||
|
||||
x86EncodePolicy(&data_optional->data.x86, cpu, map,
|
||||
VIR_CPU_FEATURE_OPTIONAL) < 0))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (disabled &&
|
||||
(!(data_disabled = virCPUDataNew(arch)) ||
|
||||
x86EncodePolicy(&data_disabled->data.x86, cpu, map,
|
||||
VIR_CPU_FEATURE_DISABLE) < 0))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (forbidden &&
|
||||
(!(data_forbidden = virCPUDataNew(arch)) ||
|
||||
x86EncodePolicy(&data_forbidden->data.x86, cpu, map,
|
||||
VIR_CPU_FEATURE_FORBID) < 0))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (vendor) {
|
||||
virCPUx86VendorPtr v = NULL;
|
||||
@@ -2247,39 +2247,30 @@ x86Encode(virArch arch,
|
||||
if (cpu->vendor && !(v = x86VendorFind(map, cpu->vendor))) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("CPU vendor %s not found"), cpu->vendor);
|
||||
- goto error;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (!(data_vendor = virCPUDataNew(arch)))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (v && virCPUx86DataAdd(data_vendor, &v->data) < 0)
|
||||
- goto error;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (forced)
|
||||
- *forced = data_forced;
|
||||
+ *forced = g_steal_pointer(&data_forced);
|
||||
if (required)
|
||||
- *required = data_required;
|
||||
+ *required = g_steal_pointer(&data_required);
|
||||
if (optional)
|
||||
- *optional = data_optional;
|
||||
+ *optional = g_steal_pointer(&data_optional);
|
||||
if (disabled)
|
||||
- *disabled = data_disabled;
|
||||
+ *disabled = g_steal_pointer(&data_disabled);
|
||||
if (forbidden)
|
||||
- *forbidden = data_forbidden;
|
||||
+ *forbidden = g_steal_pointer(&data_forbidden);
|
||||
if (vendor)
|
||||
- *vendor = data_vendor;
|
||||
+ *vendor = g_steal_pointer(&data_vendor);
|
||||
|
||||
return 0;
|
||||
-
|
||||
- error:
|
||||
- virCPUx86DataFree(data_forced);
|
||||
- virCPUx86DataFree(data_required);
|
||||
- virCPUx86DataFree(data_optional);
|
||||
- virCPUx86DataFree(data_disabled);
|
||||
- virCPUx86DataFree(data_forbidden);
|
||||
- virCPUx86DataFree(data_vendor);
|
||||
- return -1;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
46
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86EncodePolicy.patch
Normal file
46
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86EncodePolicy.patch
Normal file
@ -0,0 +1,46 @@
|
||||
From b91ae8a08c0906011e9ff2ed4f8c8fce908603b5 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b91ae8a08c0906011e9ff2ed4f8c8fce908603b5@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:16 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86EncodePolicy
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 5b45d2cf1ff0d2d972f103a678c01bc0eb7c1e18)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <cf057cf29d8f8f2369eab3afb5202a6466c0dc2e.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index dba4165527..fd410aeafb 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2164,7 +2164,7 @@ x86EncodePolicy(virCPUx86Data *data,
|
||||
virCPUx86MapPtr map,
|
||||
virCPUFeaturePolicy policy)
|
||||
{
|
||||
- virCPUx86ModelPtr model;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
|
||||
if (!(model = x86ModelFromCPU(cpu, map, policy)))
|
||||
return -1;
|
||||
@@ -2172,7 +2172,6 @@ x86EncodePolicy(virCPUx86Data *data,
|
||||
*data = model->data;
|
||||
model->data.len = 0;
|
||||
model->data.items = NULL;
|
||||
- x86ModelFree(model);
|
||||
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.26.2
|
||||
|
115
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86FeatureParse.patch
Normal file
115
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86FeatureParse.patch
Normal file
@ -0,0 +1,115 @@
|
||||
From 39dea7f80de53e9f7fb8f298d1f9f7f32f20fc29 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <39dea7f80de53e9f7fb8f298d1f9f7f32f20fc29@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:08 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86FeatureParse
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3125688f78f6289e51bfdaa196addb230b0de4e1)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <14cf6ca6816ee8bda3e195aa5218162b280715b5.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 31 ++++++++++++-------------------
|
||||
1 file changed, 12 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 3ffddf0342..10c5fbacf7 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1023,13 +1023,12 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
void *data)
|
||||
{
|
||||
virCPUx86MapPtr map = data;
|
||||
- xmlNodePtr *nodes = NULL;
|
||||
- virCPUx86FeaturePtr feature;
|
||||
+ g_autofree xmlNodePtr *nodes = NULL;
|
||||
+ g_autoptr(virCPUx86Feature) feature = NULL;
|
||||
virCPUx86DataItem item;
|
||||
size_t i;
|
||||
int n;
|
||||
- char *str = NULL;
|
||||
- int ret = -1;
|
||||
+ g_autofree char *str = NULL;
|
||||
|
||||
feature = g_new0(virCPUx86Feature, 1);
|
||||
feature->migratable = true;
|
||||
@@ -1038,7 +1037,7 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
if (x86FeatureFind(map, feature->name)) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("CPU feature %s already defined"), feature->name);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
str = virXPathString("string(@migratable)", ctxt);
|
||||
@@ -1047,13 +1046,13 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
|
||||
n = virXPathNodeSet("./cpuid|./msr", ctxt, &nodes);
|
||||
if (n < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (n == 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Missing cpuid or msr element in feature %s"),
|
||||
feature->name);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
@@ -1063,37 +1062,31 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Invalid cpuid[%zu] in %s feature"),
|
||||
i, feature->name);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
} else {
|
||||
if (x86ParseMSR(ctxt, &item) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Invalid msr[%zu] in %s feature"),
|
||||
i, feature->name);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (virCPUx86DataAddItem(&feature->data, &item))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (!feature->migratable &&
|
||||
VIR_APPEND_ELEMENT_COPY(map->migrate_blockers,
|
||||
map->nblockers,
|
||||
feature) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (VIR_APPEND_ELEMENT(map->features, map->nfeatures, feature) < 0)
|
||||
- goto cleanup;
|
||||
-
|
||||
- ret = 0;
|
||||
+ return -1;
|
||||
|
||||
- cleanup:
|
||||
- x86FeatureFree(feature);
|
||||
- VIR_FREE(nodes);
|
||||
- VIR_FREE(str);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
74
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86ModelFromCPU.patch
Normal file
74
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86ModelFromCPU.patch
Normal file
@ -0,0 +1,74 @@
|
||||
From db7c7611aa3f80aca75e557795a12354f6fde82c Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <db7c7611aa3f80aca75e557795a12354f6fde82c@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:09 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86ModelFromCPU
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 93f173adbecee92f9973745a2aca65a27c4aa8a6)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <f205d9dfe07f4009faaeb702cf6be1726306747b.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 14 +++++---------
|
||||
1 file changed, 5 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 10c5fbacf7..5215405755 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1173,7 +1173,7 @@ x86ModelFromCPU(const virCPUDef *cpu,
|
||||
virCPUx86MapPtr map,
|
||||
int policy)
|
||||
{
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
size_t i;
|
||||
|
||||
/* host CPU only contains required features; requesting other features
|
||||
@@ -1216,7 +1216,7 @@ x86ModelFromCPU(const virCPUDef *cpu,
|
||||
if (!(feature = x86FeatureFind(map, cpu->features[i].name))) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Unknown CPU feature %s"), cpu->features[i].name);
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
if (policy == -1) {
|
||||
@@ -1224,7 +1224,7 @@ x86ModelFromCPU(const virCPUDef *cpu,
|
||||
case VIR_CPU_FEATURE_FORCE:
|
||||
case VIR_CPU_FEATURE_REQUIRE:
|
||||
if (x86DataAdd(&model->data, &feature->data) < 0)
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
break;
|
||||
|
||||
case VIR_CPU_FEATURE_DISABLE:
|
||||
@@ -1238,15 +1238,11 @@ x86ModelFromCPU(const virCPUDef *cpu,
|
||||
break;
|
||||
}
|
||||
} else if (x86DataAdd(&model->data, &feature->data) < 0) {
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
- return model;
|
||||
-
|
||||
- error:
|
||||
- x86ModelFree(model);
|
||||
- return NULL;
|
||||
+ return g_steal_pointer(&model);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
80
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86ModelParse.patch
Normal file
80
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86ModelParse.patch
Normal file
@ -0,0 +1,80 @@
|
||||
From 3400f296861c822d2b0e6d3b31e878c69187f40e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <3400f296861c822d2b0e6d3b31e878c69187f40e@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:10 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86ModelParse
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit b239a60967cc2979f01e4521d6582b7d6acedd72)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <ed4ff8e858f5f735a3a6e013188aca08e8a9a94a.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 23 +++++++++--------------
|
||||
1 file changed, 9 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 5215405755..20cdd24390 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1493,41 +1493,36 @@ x86ModelParse(xmlXPathContextPtr ctxt,
|
||||
void *data)
|
||||
{
|
||||
virCPUx86MapPtr map = data;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
- int ret = -1;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
|
||||
if (x86ModelFind(map, name)) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Multiple definitions of CPU model '%s'"), name);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
model = g_new0(virCPUx86Model, 1);
|
||||
model->name = g_strdup(name);
|
||||
|
||||
if (x86ModelParseDecode(model, ctxt) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (x86ModelParseAncestor(model, ctxt, map) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (x86ModelParseSignatures(model, ctxt) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (x86ModelParseVendor(model, ctxt, map) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (x86ModelParseFeatures(model, ctxt, map) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (VIR_APPEND_ELEMENT(map->models, map->nmodels, model) < 0)
|
||||
- goto cleanup;
|
||||
-
|
||||
- ret = 0;
|
||||
+ return -1;
|
||||
|
||||
- cleanup:
|
||||
- x86ModelFree(model);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,71 @@
|
||||
From 2545e373c4a5b08836742742960244ece2586545 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2545e373c4a5b08836742742960244ece2586545@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:21 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86UpdateHostModel
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 2f9d15b495efdd9e63c07cd6fda611701e71ee46)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <f39c8eb1774d8c9af13a8af47689f8759ce57cb3.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 14 +++++---------
|
||||
1 file changed, 5 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 6e7311694d..98f7863b6f 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2817,17 +2817,16 @@ static int
|
||||
x86UpdateHostModel(virCPUDefPtr guest,
|
||||
const virCPUDef *host)
|
||||
{
|
||||
- virCPUDefPtr updated = NULL;
|
||||
+ g_autoptr(virCPUDef) updated = NULL;
|
||||
size_t i;
|
||||
- int ret = -1;
|
||||
|
||||
if (!(updated = virCPUDefCopyWithoutModel(host)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
updated->type = VIR_CPU_TYPE_GUEST;
|
||||
updated->mode = VIR_CPU_MODE_CUSTOM;
|
||||
if (virCPUDefCopyModel(updated, host, true) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (guest->vendor_id) {
|
||||
VIR_FREE(updated->vendor_id);
|
||||
@@ -2838,18 +2837,15 @@ x86UpdateHostModel(virCPUDefPtr guest,
|
||||
if (virCPUDefUpdateFeature(updated,
|
||||
guest->features[i].name,
|
||||
guest->features[i].policy) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
virCPUDefStealModel(guest, updated,
|
||||
guest->mode == VIR_CPU_MODE_CUSTOM);
|
||||
guest->mode = VIR_CPU_MODE_CUSTOM;
|
||||
guest->match = VIR_CPU_MATCH_EXACT;
|
||||
- ret = 0;
|
||||
|
||||
- cleanup:
|
||||
- virCPUDefFree(updated);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
76
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86VendorParse.patch
Normal file
76
SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86VendorParse.patch
Normal file
@ -0,0 +1,76 @@
|
||||
From 6a7bb46df53af5c1213e3a53a530c8745eb1aa0e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <6a7bb46df53af5c1213e3a53a530c8745eb1aa0e@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:07 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86VendorParse
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 6a0a7db9041cb1d8d92919bb4adf0d19bdd5dd68)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <3d21717ab7a594e301afc7f33ddbb32b57a8c56e.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 20 +++++++-------------
|
||||
1 file changed, 7 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 310dfcbcb3..3ffddf0342 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -849,9 +849,8 @@ x86VendorParse(xmlXPathContextPtr ctxt,
|
||||
void *data)
|
||||
{
|
||||
virCPUx86MapPtr map = data;
|
||||
- virCPUx86VendorPtr vendor = NULL;
|
||||
- char *string = NULL;
|
||||
- int ret = -1;
|
||||
+ g_autoptr(virCPUx86Vendor) vendor = NULL;
|
||||
+ g_autofree char *string = NULL;
|
||||
|
||||
vendor = g_new0(virCPUx86Vendor, 1);
|
||||
vendor->name = g_strdup(name);
|
||||
@@ -859,7 +858,7 @@ x86VendorParse(xmlXPathContextPtr ctxt,
|
||||
if (x86VendorFind(map, vendor->name)) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("CPU vendor %s already defined"), vendor->name);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
string = virXPathString("string(@string)", ctxt);
|
||||
@@ -867,21 +866,16 @@ x86VendorParse(xmlXPathContextPtr ctxt,
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Missing vendor string for CPU vendor %s"),
|
||||
vendor->name);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (virCPUx86VendorToData(string, &vendor->data) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (VIR_APPEND_ELEMENT(map->vendors, map->nvendors, vendor) < 0)
|
||||
- goto cleanup;
|
||||
-
|
||||
- ret = 0;
|
||||
+ return -1;
|
||||
|
||||
- cleanup:
|
||||
- x86VendorFree(vendor);
|
||||
- VIR_FREE(string);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,149 @@
|
||||
From 6fa7baf5345b053e8215b34f721316f6f72f1cf3 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <6fa7baf5345b053e8215b34f721316f6f72f1cf3@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:00 +0200
|
||||
Subject: [PATCH] cpu_x86: Use glib allocation for virCPU{, x86}Data
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 800868583012e20fb60eb4be9fb1ccc018677006)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <dbb07df3c1ad3f47f21caa1b9555bd37db037694.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 45 ++++++++++++++++++++++-----------------------
|
||||
1 file changed, 22 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 1b388ec1b2..4d82d85746 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -468,8 +468,9 @@ virCPUx86DataClear(virCPUx86Data *data)
|
||||
if (!data)
|
||||
return;
|
||||
|
||||
- VIR_FREE(data->items);
|
||||
+ g_free(data->items);
|
||||
}
|
||||
+G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(virCPUx86Data, virCPUx86DataClear);
|
||||
|
||||
|
||||
static void
|
||||
@@ -481,21 +482,19 @@ virCPUx86DataFree(virCPUDataPtr data)
|
||||
virCPUx86DataClear(&data->data.x86);
|
||||
VIR_FREE(data);
|
||||
}
|
||||
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUData, virCPUx86DataFree);
|
||||
|
||||
|
||||
-static int
|
||||
+static void
|
||||
x86DataCopy(virCPUx86Data *dst, const virCPUx86Data *src)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
- if (VIR_ALLOC_N(dst->items, src->len) < 0)
|
||||
- return -1;
|
||||
-
|
||||
+ dst->items = g_new0(virCPUx86DataItem, src->len);
|
||||
dst->len = src->len;
|
||||
+
|
||||
for (i = 0; i < src->len; i++)
|
||||
dst->items[i] = src->items[i];
|
||||
-
|
||||
- return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -781,9 +780,8 @@ x86DataToCPU(const virCPUx86Data *data,
|
||||
|
||||
cpu->model = g_strdup(model->name);
|
||||
|
||||
- if (x86DataCopy(©, data) < 0 ||
|
||||
- x86DataCopy(&modelData, &model->data) < 0)
|
||||
- goto error;
|
||||
+ x86DataCopy(©, data);
|
||||
+ x86DataCopy(&modelData, &model->data);
|
||||
|
||||
if ((vendor = x86DataToVendor(©, map)))
|
||||
cpu->vendor = g_strdup(vendor->name);
|
||||
@@ -1183,11 +1181,11 @@ x86ModelCopy(virCPUx86ModelPtr model)
|
||||
|
||||
copy->name = g_strdup(model->name);
|
||||
|
||||
- if (x86ModelCopySignatures(copy, model) < 0 ||
|
||||
- x86DataCopy(©->data, &model->data) < 0) {
|
||||
+ if (x86ModelCopySignatures(copy, model) < 0) {
|
||||
x86ModelFree(copy);
|
||||
return NULL;
|
||||
}
|
||||
+ x86DataCopy(©->data, &model->data);
|
||||
|
||||
copy->vendor = model->vendor;
|
||||
|
||||
@@ -1415,10 +1413,11 @@ x86ModelParseAncestor(virCPUx86ModelPtr model,
|
||||
}
|
||||
|
||||
model->vendor = ancestor->vendor;
|
||||
- if (x86ModelCopySignatures(model, ancestor) < 0 ||
|
||||
- x86DataCopy(&model->data, &ancestor->data) < 0)
|
||||
+ if (x86ModelCopySignatures(model, ancestor) < 0)
|
||||
return -1;
|
||||
|
||||
+ x86DataCopy(&model->data, &ancestor->data);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1904,9 +1903,9 @@ x86Compute(virCPUDefPtr host,
|
||||
|
||||
x86DataSubtract(&guest_model->data, &cpu_disable->data);
|
||||
|
||||
- if (!(guestData = virCPUDataNew(arch)) ||
|
||||
- x86DataCopy(&guestData->data.x86, &guest_model->data) < 0)
|
||||
+ if (!(guestData = virCPUDataNew(arch)))
|
||||
goto error;
|
||||
+ x86DataCopy(&guestData->data.x86, &guest_model->data);
|
||||
|
||||
*guest = guestData;
|
||||
}
|
||||
@@ -2139,9 +2138,11 @@ x86Decode(virCPUDefPtr cpu,
|
||||
ssize_t i;
|
||||
int rc;
|
||||
|
||||
- if (!cpuData || x86DataCopy(&data, cpuData) < 0)
|
||||
+ if (!cpuData)
|
||||
return -1;
|
||||
|
||||
+ x86DataCopy(&data, cpuData);
|
||||
+
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
goto cleanup;
|
||||
|
||||
@@ -3055,13 +3056,11 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
!(modelDisabled = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_DISABLE)))
|
||||
goto cleanup;
|
||||
|
||||
- if (dataEnabled &&
|
||||
- x86DataCopy(&enabled, &dataEnabled->data.x86) < 0)
|
||||
- goto cleanup;
|
||||
+ if (dataEnabled)
|
||||
+ x86DataCopy(&enabled, &dataEnabled->data.x86);
|
||||
|
||||
- if (dataDisabled &&
|
||||
- x86DataCopy(&disabled, &dataDisabled->data.x86) < 0)
|
||||
- goto cleanup;
|
||||
+ if (dataDisabled)
|
||||
+ x86DataCopy(&disabled, &dataDisabled->data.x86);
|
||||
|
||||
for (i = 0; i < map->nfeatures; i++) {
|
||||
virCPUx86FeaturePtr feature = map->features[i];
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,74 @@
|
||||
From 9810efd43b52070c20fe41b41175b0afff6710aa Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <9810efd43b52070c20fe41b41175b0afff6710aa@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:02 +0200
|
||||
Subject: [PATCH] cpu_x86: Use glib allocation for virCPUx86Feature
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 51b6e9c1000151cc515804134a00ccb0d7b3e44a)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <4c4090765c01f7359c521cb09d247b1694afbe9c.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 22 ++++------------------
|
||||
1 file changed, 4 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index aa66309b21..3a598e35d2 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -893,28 +893,17 @@ x86VendorParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
|
||||
|
||||
-static virCPUx86FeaturePtr
|
||||
-x86FeatureNew(void)
|
||||
-{
|
||||
- virCPUx86FeaturePtr feature;
|
||||
-
|
||||
- if (VIR_ALLOC(feature) < 0)
|
||||
- return NULL;
|
||||
-
|
||||
- return feature;
|
||||
-}
|
||||
-
|
||||
-
|
||||
static void
|
||||
x86FeatureFree(virCPUx86FeaturePtr feature)
|
||||
{
|
||||
if (!feature)
|
||||
return;
|
||||
|
||||
- VIR_FREE(feature->name);
|
||||
+ g_free(feature->name);
|
||||
virCPUx86DataClear(&feature->data);
|
||||
- VIR_FREE(feature);
|
||||
+ g_free(feature);
|
||||
}
|
||||
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Feature, x86FeatureFree);
|
||||
|
||||
|
||||
static int
|
||||
@@ -1056,11 +1045,8 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
char *str = NULL;
|
||||
int ret = -1;
|
||||
|
||||
- if (!(feature = x86FeatureNew()))
|
||||
- goto cleanup;
|
||||
-
|
||||
+ feature = g_new0(virCPUx86Feature, 1);
|
||||
feature->migratable = true;
|
||||
-
|
||||
feature->name = g_strdup(name);
|
||||
|
||||
if (x86FeatureFind(map, feature->name)) {
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,69 @@
|
||||
From 9adc6c8a4450e5eab78d7a8abd14b0e460d23a08 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <9adc6c8a4450e5eab78d7a8abd14b0e460d23a08@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:04 +0200
|
||||
Subject: [PATCH] cpu_x86: Use glib allocation for virCPUx86Map
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 247e115e2753bde7957cc07a20d5a48a8a6632b0)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <0e3dc412e6e755f75e39a9ec22b2b5549c82930e.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 373c34a834..3711e03b3f 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1566,23 +1566,24 @@ x86MapFree(virCPUx86MapPtr map)
|
||||
|
||||
for (i = 0; i < map->nfeatures; i++)
|
||||
x86FeatureFree(map->features[i]);
|
||||
- VIR_FREE(map->features);
|
||||
+ g_free(map->features);
|
||||
|
||||
for (i = 0; i < map->nmodels; i++)
|
||||
x86ModelFree(map->models[i]);
|
||||
- VIR_FREE(map->models);
|
||||
+ g_free(map->models);
|
||||
|
||||
for (i = 0; i < map->nvendors; i++)
|
||||
x86VendorFree(map->vendors[i]);
|
||||
- VIR_FREE(map->vendors);
|
||||
+ g_free(map->vendors);
|
||||
|
||||
/* migrate_blockers only points to the features from map->features list,
|
||||
* which were already freed above
|
||||
*/
|
||||
- VIR_FREE(map->migrate_blockers);
|
||||
+ g_free(map->migrate_blockers);
|
||||
|
||||
- VIR_FREE(map);
|
||||
+ g_free(map);
|
||||
}
|
||||
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Map, x86MapFree);
|
||||
|
||||
|
||||
static virCPUx86MapPtr
|
||||
@@ -1590,8 +1591,7 @@ virCPUx86LoadMap(void)
|
||||
{
|
||||
virCPUx86MapPtr map;
|
||||
|
||||
- if (VIR_ALLOC(map) < 0)
|
||||
- return NULL;
|
||||
+ map = g_new0(virCPUx86Map, 1);
|
||||
|
||||
if (cpuMapLoad("x86", x86VendorParse, x86FeatureParse, x86ModelParse, map) < 0)
|
||||
goto error;
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,103 @@
|
||||
From 18b41d5bb489080b8be3c78d7f8436c9fb13087a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <18b41d5bb489080b8be3c78d7f8436c9fb13087a@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:03 +0200
|
||||
Subject: [PATCH] cpu_x86: Use glib allocation for virCPUx86Model
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit ccc0c2e4de58d62308e224076a7aa979ae97b520)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <db624beaa5c879842c45b90269fb58a8f2fcfff2.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 31 ++++++++-----------------------
|
||||
1 file changed, 8 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 3a598e35d2..373c34a834 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1111,29 +1111,18 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
|
||||
|
||||
-static virCPUx86ModelPtr
|
||||
-x86ModelNew(void)
|
||||
-{
|
||||
- virCPUx86ModelPtr model;
|
||||
-
|
||||
- if (VIR_ALLOC(model) < 0)
|
||||
- return NULL;
|
||||
-
|
||||
- return model;
|
||||
-}
|
||||
-
|
||||
-
|
||||
static void
|
||||
x86ModelFree(virCPUx86ModelPtr model)
|
||||
{
|
||||
if (!model)
|
||||
return;
|
||||
|
||||
- VIR_FREE(model->name);
|
||||
- VIR_FREE(model->signatures);
|
||||
+ g_free(model->name);
|
||||
+ g_free(model->signatures);
|
||||
virCPUx86DataClear(&model->data);
|
||||
- VIR_FREE(model);
|
||||
+ g_free(model);
|
||||
}
|
||||
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Model, x86ModelFree);
|
||||
|
||||
|
||||
static int
|
||||
@@ -1161,9 +1150,7 @@ x86ModelCopy(virCPUx86ModelPtr model)
|
||||
{
|
||||
virCPUx86ModelPtr copy;
|
||||
|
||||
- if (VIR_ALLOC(copy) < 0)
|
||||
- return NULL;
|
||||
-
|
||||
+ copy = g_new0(virCPUx86Model, 1);
|
||||
copy->name = g_strdup(model->name);
|
||||
|
||||
if (x86ModelCopySignatures(copy, model) < 0) {
|
||||
@@ -1216,7 +1203,7 @@ x86ModelFromCPU(const virCPUDef *cpu,
|
||||
if (cpu->type == VIR_CPU_TYPE_HOST &&
|
||||
policy != VIR_CPU_FEATURE_REQUIRE &&
|
||||
policy != -1)
|
||||
- return x86ModelNew();
|
||||
+ return g_new0(virCPUx86Model, 1);
|
||||
|
||||
if (cpu->model &&
|
||||
(policy == VIR_CPU_FEATURE_REQUIRE || policy == -1)) {
|
||||
@@ -1228,7 +1215,7 @@ x86ModelFromCPU(const virCPUDef *cpu,
|
||||
|
||||
model = x86ModelCopy(model);
|
||||
} else {
|
||||
- model = x86ModelNew();
|
||||
+ model = g_new0(virCPUx86Model, 1);
|
||||
}
|
||||
|
||||
if (!model)
|
||||
@@ -1540,9 +1527,7 @@ x86ModelParse(xmlXPathContextPtr ctxt,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- if (!(model = x86ModelNew()))
|
||||
- goto cleanup;
|
||||
-
|
||||
+ model = g_new0(virCPUx86Model, 1);
|
||||
model->name = g_strdup(name);
|
||||
|
||||
if (x86ModelParseDecode(model, ctxt) < 0)
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,53 @@
|
||||
From d151191af331a2127aa6b2126d15e2afd19e548d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <d151191af331a2127aa6b2126d15e2afd19e548d@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:01 +0200
|
||||
Subject: [PATCH] cpu_x86: Use glib allocation for virCPUx86Vendor
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 8a41417b23dda97eb09bcd2921c1ab0d5fbce1b6)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <f5811f02d9c0cce74d007f5986454b8d89b2f548.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 9 ++++-----
|
||||
1 file changed, 4 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 4d82d85746..aa66309b21 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -830,9 +830,10 @@ x86VendorFree(virCPUx86VendorPtr vendor)
|
||||
if (!vendor)
|
||||
return;
|
||||
|
||||
- VIR_FREE(vendor->name);
|
||||
- VIR_FREE(vendor);
|
||||
+ g_free(vendor->name);
|
||||
+ g_free(vendor);
|
||||
}
|
||||
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Vendor, x86VendorFree);
|
||||
|
||||
|
||||
static virCPUx86VendorPtr
|
||||
@@ -860,9 +861,7 @@ x86VendorParse(xmlXPathContextPtr ctxt,
|
||||
char *string = NULL;
|
||||
int ret = -1;
|
||||
|
||||
- if (VIR_ALLOC(vendor) < 0)
|
||||
- goto cleanup;
|
||||
-
|
||||
+ vendor = g_new0(virCPUx86Vendor, 1);
|
||||
vendor->name = g_strdup(name);
|
||||
|
||||
if (x86VendorFind(map, vendor->name)) {
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,52 @@
|
||||
From a271a6a71073253a7dde518a63d5ee4965ee53d8 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <a271a6a71073253a7dde518a63d5ee4965ee53d8@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:05 +0200
|
||||
Subject: [PATCH] cpu_x86: Use glib allocation in virCPUx86GetModels
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit e43e2ff7f5b629f979e56387c4be46f2be251b75)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <1d1d9c9b60f1ea44a2252cb2fbfbf3886ecd245f.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 10 +---------
|
||||
1 file changed, 1 insertion(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 3711e03b3f..48f36c2bfc 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -3121,21 +3121,13 @@ virCPUx86GetModels(char ***models)
|
||||
return -1;
|
||||
|
||||
if (models) {
|
||||
- if (VIR_ALLOC_N(*models, map->nmodels + 1) < 0)
|
||||
- goto error;
|
||||
+ *models = g_new0(char *, map->nmodels + 1);
|
||||
|
||||
for (i = 0; i < map->nmodels; i++)
|
||||
(*models)[i] = g_strdup(map->models[i]->name);
|
||||
}
|
||||
|
||||
return map->nmodels;
|
||||
-
|
||||
- error:
|
||||
- if (models) {
|
||||
- virStringListFree(*models);
|
||||
- *models = NULL;
|
||||
- }
|
||||
- return -1;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
1869
SOURCES/libvirt-cputest-Add-data-for-Cooperlake-CPU.patch
Normal file
1869
SOURCES/libvirt-cputest-Add-data-for-Cooperlake-CPU.patch
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,245 @@
|
||||
From 026160bc76bab26772c2a80bd50ae55119e3b60b Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <026160bc76bab26772c2a80bd50ae55119e3b60b@dist-git>
|
||||
From: Viktor Mihajlovski <mihajlov@linux.ibm.com>
|
||||
Date: Wed, 24 Jun 2020 13:16:23 +0200
|
||||
Subject: [PATCH] docs: Describe protected virtualization guest setup
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Protected virtualization/IBM Secure Execution for Linux protects
|
||||
guest memory and state from the host.
|
||||
|
||||
Add some basic information about technology and a brief guide
|
||||
on setting up secure guests with libvirt.
|
||||
|
||||
Signed-off-by: Viktor Mihajlovski <mihajlov@linux.ibm.com>
|
||||
Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
Reviewed-by: Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
|
||||
Reviewed-by: Erik Skultety <eskultet@redhat.com>
|
||||
(cherry picked from commit f0d0cd6179709461b026f24569a688065e90d766)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1848997
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1850351
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <cf598d01d242bb56e64e14bfc32cece69341d949.1592996194.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/kbase.html.in | 3 +
|
||||
docs/kbase/s390_protected_virt.rst | 189 +++++++++++++++++++++++++++++
|
||||
2 files changed, 192 insertions(+)
|
||||
create mode 100644 docs/kbase/s390_protected_virt.rst
|
||||
|
||||
diff --git a/docs/kbase.html.in b/docs/kbase.html.in
|
||||
index f2975960f6..05773db16d 100644
|
||||
--- a/docs/kbase.html.in
|
||||
+++ b/docs/kbase.html.in
|
||||
@@ -14,6 +14,9 @@
|
||||
<dt><a href="kbase/secureusage.html">Secure usage</a></dt>
|
||||
<dd>Secure usage of the libvirt APIs</dd>
|
||||
|
||||
+ <dt><a href="kbase/s390_protected_virt.html">Protected virtualization on s390</a></dt>
|
||||
+ <dd>Running secure s390 guests with IBM Secure Execution</dd>
|
||||
+
|
||||
<dt><a href="kbase/launch_security_sev.html">Launch security</a></dt>
|
||||
<dd>Securely launching VMs with AMD SEV</dd>
|
||||
|
||||
diff --git a/docs/kbase/s390_protected_virt.rst b/docs/kbase/s390_protected_virt.rst
|
||||
new file mode 100644
|
||||
index 0000000000..f38d16d743
|
||||
--- /dev/null
|
||||
+++ b/docs/kbase/s390_protected_virt.rst
|
||||
@@ -0,0 +1,189 @@
|
||||
+================================
|
||||
+Protected Virtualization on s390
|
||||
+================================
|
||||
+
|
||||
+.. contents::
|
||||
+
|
||||
+Overview
|
||||
+========
|
||||
+
|
||||
+Protected virtualization, also known as IBM Secure Execution is a
|
||||
+hardware-based privacy protection technology for s390x (IBM Z).
|
||||
+It allows to execute virtual machines such that the host system
|
||||
+has no access to a VM's state and memory contents.
|
||||
+
|
||||
+Unlike other similar technologies, the memory of a running guest
|
||||
+is not encrypted but protected by hardware access controls, which
|
||||
+may only be manipulated by trusted system firmware, called
|
||||
+ultravisor.
|
||||
+
|
||||
+For the cases where the host needs access to guest memory (e.g. for
|
||||
+paging), it can request pages to be exported to it. The exported page
|
||||
+will be encrypted with a unique key for the running guest by the
|
||||
+ultravisor. The ultravisor also computes an integrity value for
|
||||
+the page, and stores it in a special table, together with the page
|
||||
+index and a counter. This way it can verify the integrity of
|
||||
+the page content upon re-import into the guest.
|
||||
+
|
||||
+In other cases it may be necessary for a guest to grant the host access
|
||||
+to dedicated memory regions (e.g. for I/O). The guest can request
|
||||
+that the ultravisor removes the memory protection from individual
|
||||
+pages, so that they can be shared with the host. Likewise, the
|
||||
+guest can undo the sharing.
|
||||
+
|
||||
+A secure guest will initially start in a regular non-protected VM.
|
||||
+The start-up is controlled by a small bootstrap program loaded
|
||||
+into memory together with encrypted operating system components and
|
||||
+a control structure (the PV header).
|
||||
+The operating system components (e.g. Linux kernel, initial RAM
|
||||
+file system, kernel parameters) are encrypted and integrity
|
||||
+protected. The component encryption keys and integrity values are
|
||||
+stored in the PV header.
|
||||
+The PV header is wrapped with a public key belonging to a specific
|
||||
+system (in fact it can be wrapped with multiple such keys). The
|
||||
+matching private key is only accessible by trusted hardware and
|
||||
+firmware in that specific system.
|
||||
+Consequently, such a secure guest boot image can only be run on the
|
||||
+systems it has been prepared for. Its contents can't be decrypted
|
||||
+without access to the private key and it can't be modified as
|
||||
+it is integrity protected.
|
||||
+
|
||||
+Host Requirements
|
||||
+=================
|
||||
+
|
||||
+IBM Secure Execution for Linux has some hardware and firmware
|
||||
+requirements. The system hardware must be an IBM z15 (or newer),
|
||||
+or an IBM LinuxONE III (or newer).
|
||||
+
|
||||
+It is also necessary that the IBM Secure Execution feature is
|
||||
+enabled for that system. With libvirt >= 6.5.0 you can run
|
||||
+``libvirt-host--validate`` or otherwise check for facility '158', e.g.
|
||||
+
|
||||
+::
|
||||
+
|
||||
+ $ grep facilities /proc/cpuinfo | grep 158
|
||||
+
|
||||
+The kernel must include the protected virtualization support
|
||||
+which can be verified by checking for the presence of directory
|
||||
+``/sys/firmware/uv``. It will only be present when both the
|
||||
+hardware and the kernel support are available.
|
||||
+
|
||||
+Finally, the host operating system must donate some memory to
|
||||
+the ultravisor needed to store memory security information.
|
||||
+This is achieved by specifying the following kernel command
|
||||
+line parameter to the host boot configuration
|
||||
+
|
||||
+::
|
||||
+
|
||||
+ prot_virt=1
|
||||
+
|
||||
+
|
||||
+Guest Requirements
|
||||
+==================
|
||||
+
|
||||
+Guest Boot
|
||||
+----------
|
||||
+
|
||||
+To start a guest in protected virtualization secure mode, the
|
||||
+boot image must have been prepared first with the program
|
||||
+``genprotimg`` using the correct public key for this host.
|
||||
+``genprotimg`` is part of the package ``s390-tools``, or
|
||||
+``s390-utils``, depending on the Linux distribution being used.
|
||||
+It can also be found at
|
||||
+`<https://github.com/ibm-s390-tools/s390-tools/tree/master/genprotimg>`_
|
||||
+
|
||||
+The guests have to be configured to use the host CPU model, which
|
||||
+must contain the ``unpack`` facility indicating ultravisor guest support.
|
||||
+
|
||||
+With the following command it's possible to check whether the host
|
||||
+CPU model satisfies the requirement
|
||||
+
|
||||
+::
|
||||
+
|
||||
+ $ virsh domcapabilities | grep unpack
|
||||
+
|
||||
+which should return
|
||||
+
|
||||
+::
|
||||
+
|
||||
+ <feature policy='require' name='unpack'/>
|
||||
+
|
||||
+Note that on hosts with libvirt < 6.5.0 if the check fails despite
|
||||
+the host system actually supporting protected virtualization guests,
|
||||
+this can be caused by a stale libvirt capabilities cache.
|
||||
+To recover, run the following commands
|
||||
+
|
||||
+::
|
||||
+
|
||||
+ $ systemctl stop libvirtd
|
||||
+ $ rm /var/cache/libvirt/qemu/capabilities/*.xml
|
||||
+ $ systemctl start libvirtd
|
||||
+
|
||||
+
|
||||
+Guest I/O
|
||||
+---------
|
||||
+
|
||||
+Protected virtualization guests support I/O using virtio devices.
|
||||
+As the virtio data structures of secure guests are not accessible
|
||||
+by the host, it is necessary to use shared memory ('bounce buffers').
|
||||
+
|
||||
+To enable virtio devices to use shared buffers, it is necessary
|
||||
+to configure them with platform_iommu enabled. This can done by adding
|
||||
+``iommu='on'`` to the driver element of a virtio device definition in the
|
||||
+guest's XML, e.g.
|
||||
+
|
||||
+::
|
||||
+
|
||||
+ <interface type='network'>
|
||||
+ <source network='default'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <driver name='vhost' iommu='on'/>
|
||||
+ </interface>
|
||||
+
|
||||
+It is mandatory to define all virtio bus devices in this way to
|
||||
+prevent the host from attempting to access protected memory.
|
||||
+Ballooning will not work and is fenced by QEMU. It should be
|
||||
+disabled by specifying
|
||||
+
|
||||
+::
|
||||
+
|
||||
+ <memballoon model='none'/>
|
||||
+
|
||||
+Finally, the guest Linux must be instructed to allocate I/O
|
||||
+buffers using memory shared between host and guest using SWIOTLB.
|
||||
+This is done by adding ``swiotlb=nnn`` to the guest's kernel command
|
||||
+line string, where ``nnn`` stands for the number of statically
|
||||
+allocated 2K entries. A commonly used value for swiotlb is 262144.
|
||||
+
|
||||
+Example guest definition
|
||||
+========================
|
||||
+
|
||||
+Minimal domain XML for a protected virtualization guest, essentially
|
||||
+it's mostly about the ``iommu`` property
|
||||
+
|
||||
+::
|
||||
+
|
||||
+ <domain type='kvm'>
|
||||
+ <name>protected</name>
|
||||
+ <memory unit='KiB'>2048000</memory>
|
||||
+ <currentMemory unit='KiB'>2048000</currentMemory>
|
||||
+ <vcpu>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='s390x'>hvm</type>
|
||||
+ </os>
|
||||
+ <cpu mode='host-model'/>
|
||||
+ <devices>
|
||||
+ <disk type='file' device='disk'>
|
||||
+ <driver name='qemu' type='qcow2' cache='none' io='native' iommu='on'>
|
||||
+ <source file='/var/lib/libvirt/images/protected.qcow2'/>
|
||||
+ <target dev='vda' bus='virtio'/>
|
||||
+ </disk>
|
||||
+ <interface type='network'>
|
||||
+ <driver iommu='on'/>
|
||||
+ <source network='default'/>
|
||||
+ <model type='virtio'/>
|
||||
+ </interface>
|
||||
+ <console type='pty'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+ </domain>
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,100 @@
|
||||
From 0f126297ca984aa2ef145e2a703fff3dc31c53db Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0f126297ca984aa2ef145e2a703fff3dc31c53db@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 19 Feb 2020 15:10:19 +0100
|
||||
Subject: [PATCH] docs: Document the new <slices> sub-element of disk's
|
||||
<source>
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
We are going to add support for specifying offset and size attributes
|
||||
which will allow controling where the image and where the guest data
|
||||
itself starts in the source of the disk. This will be represented by
|
||||
a <slices> element filled with either a <slice type='storage'> for the
|
||||
offset of the image format data.
|
||||
|
||||
Add the XML documentation and RNG schema.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 44f0f76890c6b53a893ffc370836794d74317c34)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1791788
|
||||
Message-Id: <9f5488f2e0e5b6d7df386fa428f7779346cbcff4.1582120424.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 13 +++++++++++++
|
||||
docs/schemas/domaincommon.rng | 19 +++++++++++++++++++
|
||||
2 files changed, 32 insertions(+)
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index ec48ed77a5..5dbb8b59cf 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -2878,6 +2878,9 @@
|
||||
<disk type='block' device='lun'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source dev='/dev/sda'>
|
||||
+ <slices>
|
||||
+ <slice type='storage' offset='12345' size='123'/>
|
||||
+ </slices>
|
||||
<reservations managed='no'>
|
||||
<source type='unix' path='/path/to/qemu-pr-helper' mode='client'/>
|
||||
</reservations>
|
||||
@@ -3360,6 +3363,16 @@
|
||||
controller.
|
||||
<span class="since">Since 6.0.0</span>
|
||||
</dd>
|
||||
+ <dt><code>slices</code></dt>
|
||||
+ <dd>The <code>slices</code> element using its <code>slice</code>
|
||||
+ sub-elements allows configuring offset and size of either the
|
||||
+ location of the image format (<code>slice type='storage'</code>)
|
||||
+ inside the storage source or the guest data inside the image format
|
||||
+ container (future expansion).
|
||||
+
|
||||
+ The <code>offset</code> and <code>size</code> values are in bytes.
|
||||
+ <span class="since">Since 6.1.0</span>
|
||||
+ </dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index 19476a2735..38aef19e89 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -1596,12 +1596,31 @@
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
+ <define name="diskSourceSlice">
|
||||
+ <attribute name='offset'>
|
||||
+ <ref name="positiveInteger"/>
|
||||
+ </attribute>
|
||||
+ <attribute name='size'>
|
||||
+ <ref name="positiveInteger"/>
|
||||
+ </attribute>
|
||||
+ </define>
|
||||
+
|
||||
<define name="diskSourceCommon">
|
||||
<optional>
|
||||
<attribute name="index">
|
||||
<ref name="positiveInteger"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <element name='slices'>
|
||||
+ <element name='slice'>
|
||||
+ <attribute name='type'>
|
||||
+ <value>storage</value>
|
||||
+ </attribute>
|
||||
+ <ref name="diskSourceSlice"/>
|
||||
+ </element>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
</define>
|
||||
|
||||
<define name="diskSource">
|
||||
--
|
||||
2.25.0
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user