Hi Marc,

On Mon, Nov 29, 2021 at 08:00:56PM +0000, Marc Zyngier wrote:
> From: Jintack Lim <[email protected]>
> 
> As we expect all PSCI calls from the L1 hypervisor to be performed
> using SMC when nested virtualization is enabled, it is clear that
> all HVC instruction from the VM (including from the virtual EL2)
> are supposed to handled in the virtual EL2.
> 
> Forward these to EL2 as required.
> 
> Signed-off-by: Jintack Lim <[email protected]>
> [maz: add handling of HCR_EL2.HCD]
> Signed-off-by: Marc Zyngier <[email protected]>
> ---
>  arch/arm64/kvm/handle_exit.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c
> index 275a27368a04..1fd1c6dfd6a0 100644
> --- a/arch/arm64/kvm/handle_exit.c
> +++ b/arch/arm64/kvm/handle_exit.c
> @@ -16,6 +16,7 @@
>  #include <asm/kvm_asm.h>
>  #include <asm/kvm_emulate.h>
>  #include <asm/kvm_mmu.h>
> +#include <asm/kvm_nested.h>
>  #include <asm/debug-monitors.h>
>  #include <asm/traps.h>
>  
> @@ -40,6 +41,16 @@ static int handle_hvc(struct kvm_vcpu *vcpu)
>                           kvm_vcpu_hvc_get_imm(vcpu));
>       vcpu->stat.hvc_exit_stat++;
>  
> +     /* Forward hvc instructions to the virtual EL2 if the guest has EL2. */
> +     if (nested_virt_in_use(vcpu)) {
> +             if (vcpu_read_sys_reg(vcpu, HCR_EL2) & HCR_HCD)
> +                     kvm_inject_undefined(vcpu);
> +             else
> +                     kvm_inject_nested_sync(vcpu, kvm_vcpu_get_esr(vcpu));
> +
> +             return 1;
> +     }

Looks good to me:

Reviewed-by: Alexandru Elisei <[email protected]>

Thanks,
Alex

> +
>       ret = kvm_hvc_call_handler(vcpu);
>       if (ret < 0) {
>               vcpu_set_reg(vcpu, 0, ~0UL);
> -- 
> 2.30.2
> 
_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to