On 2/22/21 6:50 PM, Cornelia Huck wrote: > On Mon, 22 Feb 2021 18:41:07 +0100 > Philippe Mathieu-Daudé <philmd@xxxxxxxxxx> wrote: > >> On 2/22/21 6:24 PM, Cornelia Huck wrote: >>> On Fri, 19 Feb 2021 18:38:37 +0100 >>> Philippe Mathieu-Daudé <philmd@xxxxxxxxxx> wrote: >>> >>>> MachineClass::kvm_type() can return -1 on failure. >>>> Document it, and add a check in kvm_init(). >>>> >>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@xxxxxxxxxx> >>>> --- >>>> include/hw/boards.h | 3 ++- >>>> accel/kvm/kvm-all.c | 6 ++++++ >>>> 2 files changed, 8 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/include/hw/boards.h b/include/hw/boards.h >>>> index a46dfe5d1a6..68d3d10f6b0 100644 >>>> --- a/include/hw/boards.h >>>> +++ b/include/hw/boards.h >>>> @@ -127,7 +127,8 @@ typedef struct { >>>> * implement and a stub device is required. >>>> * @kvm_type: >>>> * Return the type of KVM corresponding to the kvm-type string option or >>>> - * computed based on other criteria such as the host kernel capabilities. >>>> + * computed based on other criteria such as the host kernel capabilities >>>> + * (which can't be negative), or -1 on error. >>>> * @numa_mem_supported: >>>> * true if '--numa node.mem' option is supported and false otherwise >>>> * @smp_parse: >>>> diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c >>>> index 84c943fcdb2..b069938d881 100644 >>>> --- a/accel/kvm/kvm-all.c >>>> +++ b/accel/kvm/kvm-all.c >>>> @@ -2057,6 +2057,12 @@ static int kvm_init(MachineState *ms) >>>> "kvm-type", >>>> &error_abort); >>>> type = mc->kvm_type(ms, kvm_type); >>>> + if (type < 0) { >>>> + ret = -EINVAL; >>>> + fprintf(stderr, "Failed to detect kvm-type for machine '%s'\n", >>>> + mc->name); >>>> + goto err; >>>> + } >>>> } >>>> >>>> do { >>> >>> No objection to this patch; but I'm wondering why some non-pseries >>> machines implement the kvm_type callback, when I see the kvm-type >>> property only for pseries? Am I holding my git grep wrong? >> >> Can it be what David commented here? >> https://www.mail-archive.com/qemu-devel@xxxxxxxxxx/msg784508.html >> > > Ok, I might be confused about the other ppc machines; but I'm wondering > about the kvm_type callback for mips and arm/virt. Maybe I'm just > confused by the whole mechanism? For MIPS see https://www.linux-kvm.org/images/f/f2/01x08a-MIPS.pdf and Jiaxun comment here: https://lore.kernel.org/linux-mips/a2a2cfe3-5618-43b1-a6a4-cc768fc1b9fb@xxxxxxxxxxxxxxxx/ TE KVM: Trap-and-Emul guest kernel VZ KVM: HW Virtualized For "the whole mechanism" I'll defer to Paolo =)