lkml.org 
[lkml]   [2020]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 27/72] KVM: MIPS: Change the definition of kvm type
    Date
    From: Huacai Chen <chenhc@lemote.com>

    [ Upstream commit 15e9e35cd1dec2bc138464de6bf8ef828df19235 ]

    MIPS defines two kvm types:

    #define KVM_VM_MIPS_TE 0
    #define KVM_VM_MIPS_VZ 1

    In Documentation/virt/kvm/api.rst it is said that "You probably want to
    use 0 as machine type", which implies that type 0 be the "automatic" or
    "default" type. And, in user-space libvirt use the null-machine (with
    type 0) to detect the kvm capability, which returns "KVM not supported"
    on a VZ platform.

    I try to fix it in QEMU but it is ugly:
    https://lists.nongnu.org/archive/html/qemu-devel/2020-08/msg05629.html

    And Thomas Huth suggests me to change the definition of kvm type:
    https://lists.nongnu.org/archive/html/qemu-devel/2020-09/msg03281.html

    So I define like this:

    #define KVM_VM_MIPS_AUTO 0
    #define KVM_VM_MIPS_VZ 1
    #define KVM_VM_MIPS_TE 2

    Since VZ and TE cannot co-exists, using type 0 on a TE platform will
    still return success (so old user-space tools have no problems on new
    kernels); the advantage is that using type 0 on a VZ platform will not
    return failure. So, the only problem is "new user-space tools use type
    2 on old kernels", but if we treat this as a kernel bug, we can backport
    this patch to old stable kernels.

    Signed-off-by: Huacai Chen <chenhc@lemote.com>
    Message-Id: <1599734031-28746-1-git-send-email-chenhc@lemote.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/mips/kvm/mips.c | 2 ++
    include/uapi/linux/kvm.h | 5 +++--
    2 files changed, 5 insertions(+), 2 deletions(-)

    diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
    index 1109924560d8c..b22a3565e1330 100644
    --- a/arch/mips/kvm/mips.c
    +++ b/arch/mips/kvm/mips.c
    @@ -131,6 +131,8 @@ int kvm_arch_check_processor_compat(void)
    int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
    {
    switch (type) {
    + case KVM_VM_MIPS_AUTO:
    + break;
    #ifdef CONFIG_KVM_MIPS_VZ
    case KVM_VM_MIPS_VZ:
    #else
    diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
    index e735bc4075dc7..1b6b8e05868dd 100644
    --- a/include/uapi/linux/kvm.h
    +++ b/include/uapi/linux/kvm.h
    @@ -768,9 +768,10 @@ struct kvm_ppc_resize_hpt {
    #define KVM_VM_PPC_HV 1
    #define KVM_VM_PPC_PR 2

    -/* on MIPS, 0 forces trap & emulate, 1 forces VZ ASE */
    -#define KVM_VM_MIPS_TE 0
    +/* on MIPS, 0 indicates auto, 1 forces VZ ASE, 2 forces trap & emulate */
    +#define KVM_VM_MIPS_AUTO 0
    #define KVM_VM_MIPS_VZ 1
    +#define KVM_VM_MIPS_TE 2

    #define KVM_S390_SIE_PAGE_OFFSET 1

    --
    2.25.1


    \
     
     \ /
      Last update: 2020-09-21 18:50    [W:4.038 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site