[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 30/30] spapr.c: set a 'kvm-type' default value instead of relying
From: |
David Gibson |
Subject: |
[PULL 30/30] spapr.c: set a 'kvm-type' default value instead of relying on NULL |
Date: |
Mon, 14 Dec 2020 15:58:07 +1100 |
From: Daniel Henrique Barboza <danielhb413@gmail.com>
spapr_kvm_type() is considering 'vm_type=NULL' as a valid input, where
the function returns 0. This is relying on the current QEMU machine
options handling logic, where the absence of the 'kvm-type' option
will be reflected as 'vm_type=NULL' in this function.
This is not robust, and will break if QEMU options code decides to propagate
something else in the case mentioned above (e.g. an empty string instead
of NULL).
Let's avoid this entirely by setting a non-NULL default value in case of
no user input for 'kvm-type'. spapr_kvm_type() was changed to handle 3 fixed
values of kvm-type: "auto", "hv", and "pr", with "auto" being the default
if no kvm-type was set by the user. This allows us to always be predictable
regardless of any enhancements/changes made in QEMU options mechanics.
While we're at it, let's also document in 'kvm-type' description the
already existing default mode, now named 'auto'. The information provided
about it is based on how the pseries kernel handles the KVM_CREATE_VM
ioctl(), where the default value '0' makes the kernel choose an available
KVM module to use, giving precedence to kvm_hv. This logic is described in
the kernel source file arch/powerpc/kvm/powerpc.c, function kvm_arch_init_vm().
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20201210145517.1532269-2-danielhb413@gmail.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
---
hw/ppc/spapr.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index dfedded9a8..dee48a0043 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3021,17 +3021,25 @@ static void spapr_machine_init(MachineState *machine)
qemu_cond_init(&spapr->fwnmi_machine_check_interlock_cond);
}
+#define DEFAULT_KVM_TYPE "auto"
static int spapr_kvm_type(MachineState *machine, const char *vm_type)
{
- if (!vm_type) {
+ /*
+ * The use of g_ascii_strcasecmp() for 'hv' and 'pr' is to
+ * accomodate the 'HV' and 'PV' formats that exists in the
+ * wild. The 'auto' mode is being introduced already as
+ * lower-case, thus we don't need to bother checking for
+ * "AUTO".
+ */
+ if (!vm_type || !strcmp(vm_type, DEFAULT_KVM_TYPE)) {
return 0;
}
- if (!strcmp(vm_type, "HV")) {
+ if (!g_ascii_strcasecmp(vm_type, "hv")) {
return 1;
}
- if (!strcmp(vm_type, "PR")) {
+ if (!g_ascii_strcasecmp(vm_type, "pr")) {
return 2;
}
@@ -3270,10 +3278,15 @@ static void spapr_instance_init(Object *obj)
spapr->htab_fd = -1;
spapr->use_hotplug_event_source = true;
+ spapr->kvm_type = g_strdup(DEFAULT_KVM_TYPE);
object_property_add_str(obj, "kvm-type",
spapr_get_kvm_type, spapr_set_kvm_type);
object_property_set_description(obj, "kvm-type",
- "Specifies the KVM virtualization mode
(HV, PR)");
+ "Specifies the KVM virtualization mode
(auto,"
+ " hv, pr). Defaults to 'auto'. This mode
will use"
+ " any available KVM module loaded in the
host,"
+ " where kvm_hv takes precedence if both
kvm_hv and"
+ " kvm_pr are loaded.");
object_property_add_bool(obj, "modern-hotplug-events",
spapr_get_modern_hotplug_events,
spapr_set_modern_hotplug_events);
--
2.29.2
- [PULL 16/30] xive: Add trace events, (continued)
- [PULL 16/30] xive: Add trace events, David Gibson, 2020/12/13
- [PULL 20/30] spapr: spapr_drc_attach() cannot fail, David Gibson, 2020/12/13
- [PULL 21/30] target/ppc: Remove "compat" property of server class POWER CPUs, David Gibson, 2020/12/13
- [PULL 24/30] ppc/e500: Free irqs array to avoid memleak, David Gibson, 2020/12/13
- [PULL 22/30] hw/ppc: Do not re-read the clock on pre_save if doing savevm, David Gibson, 2020/12/13
- [PULL 29/30] spapr: Pass sPAPR machine state to some RTAS events handling functions, David Gibson, 2020/12/13
- [PULL 27/30] spapr: Pass sPAPR machine state down to spapr_pci_switch_vga(), David Gibson, 2020/12/13
- [PULL 26/30] target/ppc: Introduce an mmu_is_64bit() helper, David Gibson, 2020/12/13
- [PULL 25/30] ppc/translate: Use POWERPC_MMU_64 to detect 64-bit MMU models, David Gibson, 2020/12/13
- [PULL 28/30] spapr: Don't use qdev_get_machine() in spapr_msi_write(), David Gibson, 2020/12/13
- [PULL 30/30] spapr.c: set a 'kvm-type' default value instead of relying on NULL,
David Gibson <=
- Re: [PULL 00/30] ppc-for-6.0 queue 20201214, Peter Maydell, 2020/12/14