Add upstream patch to use -cpu max.
This commit is contained in:
parent
2f9953e2d1
commit
1a5193c66e
80
0001-appliance-Use-cpu-max.patch
Normal file
80
0001-appliance-Use-cpu-max.patch
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
From 282e2f74cf1209ecf6bb18655018b2000a5b36a1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
|
Date: Thu, 28 Jan 2021 12:20:49 +0000
|
||||||
|
Subject: [PATCH] appliance: Use -cpu max.
|
||||||
|
|
||||||
|
QEMU has a newish feature (from about 2017 / qemu 2.9) called -cpu max
|
||||||
|
which is supposed to select the best CPU, ideal for libguestfs.
|
||||||
|
|
||||||
|
After this change, on x86-64:
|
||||||
|
|
||||||
|
KVM TCG
|
||||||
|
|
||||||
|
Direct -cpu max -cpu max
|
||||||
|
(non-libvirt)
|
||||||
|
|
||||||
|
Libvirt <cpu mode="host-passthrough"> <cpu mode="host-model">
|
||||||
|
<model fallback="allow"/> <model fallback="allow"/>
|
||||||
|
</cpu> </cpu>
|
||||||
|
---
|
||||||
|
lib/appliance-cpu.c | 16 ++++++++--------
|
||||||
|
lib/launch-libvirt.c | 9 +++++++++
|
||||||
|
2 files changed, 17 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/appliance-cpu.c b/lib/appliance-cpu.c
|
||||||
|
index 5ef9f5c72..54ac6e2e3 100644
|
||||||
|
--- a/lib/appliance-cpu.c
|
||||||
|
+++ b/lib/appliance-cpu.c
|
||||||
|
@@ -38,6 +38,11 @@
|
||||||
|
*
|
||||||
|
* The literal string C<"host"> means use C<-cpu host>.
|
||||||
|
*
|
||||||
|
+ * =item C<"max">
|
||||||
|
+ *
|
||||||
|
+ * The literal string C<"max"> means use C<-cpu max> (the best
|
||||||
|
+ * possible). This requires awkward translation for libvirt.
|
||||||
|
+ *
|
||||||
|
* =item some string
|
||||||
|
*
|
||||||
|
* Some string such as C<"cortex-a57"> means use C<-cpu cortex-a57>.
|
||||||
|
@@ -80,14 +85,9 @@ guestfs_int_get_cpu_model (int kvm)
|
||||||
|
/* See discussion in https://bugzilla.redhat.com/show_bug.cgi?id=1605071 */
|
||||||
|
return NULL;
|
||||||
|
#else
|
||||||
|
- /* On most architectures, it is faster to pass the CPU host model to
|
||||||
|
- * the appliance, allowing maximum speed for things like checksums
|
||||||
|
- * and encryption. Only do this with KVM. It is broken in subtle
|
||||||
|
- * ways on TCG, and fairly pointless when you're emulating anyway.
|
||||||
|
+ /* On most architectures we can use "max" to get the best possible CPU.
|
||||||
|
+ * For recent qemu this should work even on TCG.
|
||||||
|
*/
|
||||||
|
- if (kvm)
|
||||||
|
- return "host";
|
||||||
|
- else
|
||||||
|
- return NULL;
|
||||||
|
+ return "max";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
diff --git a/lib/launch-libvirt.c b/lib/launch-libvirt.c
|
||||||
|
index 026dc6b26..eff1c8f7e 100644
|
||||||
|
--- a/lib/launch-libvirt.c
|
||||||
|
+++ b/lib/launch-libvirt.c
|
||||||
|
@@ -1169,6 +1169,15 @@ construct_libvirt_xml_cpu (guestfs_h *g,
|
||||||
|
attribute ("fallback", "allow");
|
||||||
|
} end_element ();
|
||||||
|
}
|
||||||
|
+ else if (STREQ (cpu_model, "max")) {
|
||||||
|
+ if (params->data->is_kvm)
|
||||||
|
+ attribute ("mode", "host-passthrough");
|
||||||
|
+ else
|
||||||
|
+ attribute ("mode", "host-model");
|
||||||
|
+ start_element ("model") {
|
||||||
|
+ attribute ("fallback", "allow");
|
||||||
|
+ } end_element ();
|
||||||
|
+ }
|
||||||
|
else
|
||||||
|
single_element ("model", cpu_model);
|
||||||
|
} end_element ();
|
||||||
|
--
|
||||||
|
2.29.0.rc2
|
||||||
|
|
@ -29,6 +29,7 @@
|
|||||||
%else
|
%else
|
||||||
# RHEL 9 only:
|
# RHEL 9 only:
|
||||||
# x86-64: "/lib64/libc.so.6: CPU ISA level is lower than required"
|
# x86-64: "/lib64/libc.so.6: CPU ISA level is lower than required"
|
||||||
|
# (RHBZ#1919389)
|
||||||
%global test_arches NONE
|
%global test_arches NONE
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
@ -85,6 +86,9 @@ Source7: libguestfs.keyring
|
|||||||
# Maintainer script which helps with handling patches.
|
# Maintainer script which helps with handling patches.
|
||||||
Source8: copy-patches.sh
|
Source8: copy-patches.sh
|
||||||
|
|
||||||
|
# Upstream patch to use -cpu max.
|
||||||
|
Patch1: 0001-appliance-Use-cpu-max.patch
|
||||||
|
|
||||||
%if 0%{patches_touch_autotools}
|
%if 0%{patches_touch_autotools}
|
||||||
BuildRequires: autoconf, automake, libtool, gettext-devel
|
BuildRequires: autoconf, automake, libtool, gettext-devel
|
||||||
%endif
|
%endif
|
||||||
|
Loading…
Reference in New Issue
Block a user