launch: libvirt, direct: Add force_kvm backend setting.

By using:

  export LIBGUESTFS_BACKEND_SETTINGS=force_kvm

you can force the backend to use KVM and never fall back to
TCG (software emulation).
This commit is contained in:
Sam Eiderman
2021-03-16 12:35:12 +02:00
committed by Richard W.M. Jones
parent f8f424325c
commit 5d686b92a6
3 changed files with 46 additions and 4 deletions

View File

@@ -772,6 +772,7 @@ parse_capabilities (guestfs_h *g, const char *capabilities_xml,
xmlAttrPtr attr;
size_t seen_qemu, seen_kvm;
int force_tcg;
int force_kvm;
doc = xmlReadMemory (capabilities_xml, strlen (capabilities_xml),
NULL, NULL, XML_PARSE_NONET);
@@ -819,11 +820,15 @@ parse_capabilities (guestfs_h *g, const char *capabilities_xml,
}
}
force_kvm = guestfs_int_get_backend_setting_bool (g, "force_kvm");
if (force_kvm == -1)
return -1;
/* This was RHBZ#886915: in that case the default libvirt URI
* pointed to a Xen hypervisor, and so could not create the
* appliance VM.
*/
if (!seen_qemu && !seen_kvm) {
if ((!seen_qemu || force_kvm) && !seen_kvm) {
CLEANUP_FREE char *backend = guestfs_get_backend (g);
error (g,
@@ -845,6 +850,14 @@ parse_capabilities (guestfs_h *g, const char *capabilities_xml,
if (force_tcg == -1)
return -1;
if (force_kvm && force_tcg) {
error (g, "Both force_kvm and force_tcg backend settings supplied.");
return -1;
}
/* if force_kvm then seen_kvm */
assert (!force_kvm || seen_kvm);
if (!force_tcg)
data->is_kvm = seen_kvm;
else