[PATCH v2] KVM: arm64: Allow KVM to be disabled from the command line

Andrew Scull ascull at google.com
Thu Oct 7 09:59:22 PDT 2021


Reviewed-by: Andrew Scull <ascull at google.com>


On Fri, 1 Oct 2021 at 18:06, Marc Zyngier <maz at kernel.org> wrote:
>
> Although KVM can be compiled out of the kernel, it cannot be disabled
> at runtime. Allow this possibility by introducing a new mode that
> will prevent KVM from initialising.
>
> This is useful in the (limited) circumstances where you don't want
> KVM to be available (what is wrong with you?), or when you want
> to install another hypervisor instead (good luck with that).
>
> Reviewed-by: David Brazdil <dbrazdil at google.com>
> Acked-by: Will Deacon <will at kernel.org>
> Acked-by: Suzuki K Poulose <suzuki.poulose at arm.com>
> Signed-off-by: Marc Zyngier <maz at kernel.org>
> ---
>
> Notes:
>     v2: Dropped the id_aa64mmfr1_vh=0 setting so that KVM can be disabled
>         and yet stay in VHE mode on platforms that require it.
>         I kept the AB/RB's, but please shout if you disagree!
>
>  Documentation/admin-guide/kernel-parameters.txt |  2 ++
>  arch/arm64/include/asm/kvm_host.h               |  1 +
>  arch/arm64/kvm/arm.c                            | 14 +++++++++++++-
>  3 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
> index 91ba391f9b32..f268731a3d4d 100644
> --- a/Documentation/admin-guide/kernel-parameters.txt
> +++ b/Documentation/admin-guide/kernel-parameters.txt
> @@ -2365,6 +2365,8 @@
>         kvm-arm.mode=
>                         [KVM,ARM] Select one of KVM/arm64's modes of operation.
>
> +                       none: Forcefully disable KVM.
> +
>                         nvhe: Standard nVHE-based mode, without support for
>                               protected guests.
>
> diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
> index f8be56d5342b..019490c67976 100644
> --- a/arch/arm64/include/asm/kvm_host.h
> +++ b/arch/arm64/include/asm/kvm_host.h
> @@ -58,6 +58,7 @@
>  enum kvm_mode {
>         KVM_MODE_DEFAULT,
>         KVM_MODE_PROTECTED,
> +       KVM_MODE_NONE,
>  };
>  enum kvm_mode kvm_get_mode(void);
>
> diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
> index fe102cd2e518..658171231af9 100644
> --- a/arch/arm64/kvm/arm.c
> +++ b/arch/arm64/kvm/arm.c
> @@ -2064,6 +2064,11 @@ int kvm_arch_init(void *opaque)
>                 return -ENODEV;
>         }
>
> +       if (kvm_get_mode() == KVM_MODE_NONE) {
> +               kvm_info("KVM disabled from command line\n");
> +               return -ENODEV;
> +       }
> +
>         in_hyp_mode = is_kernel_in_hyp_mode();
>
>         if (cpus_have_final_cap(ARM64_WORKAROUND_DEVICE_LOAD_ACQUIRE) ||
> @@ -2137,8 +2142,15 @@ static int __init early_kvm_mode_cfg(char *arg)
>                 return 0;
>         }
>
> -       if (strcmp(arg, "nvhe") == 0 && !WARN_ON(is_kernel_in_hyp_mode()))
> +       if (strcmp(arg, "nvhe") == 0 && !WARN_ON(is_kernel_in_hyp_mode())) {
> +               kvm_mode = KVM_MODE_DEFAULT;
>                 return 0;
> +       }
> +
> +       if (strcmp(arg, "none") == 0) {
> +               kvm_mode = KVM_MODE_NONE;
> +               return 0;
> +       }
>
>         return -EINVAL;
>  }
> --
> 2.30.2
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to kernel-team+unsubscribe at android.com.
>



More information about the linux-arm-kernel mailing list