#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/stacktrace/nvhe.h>
 #include <asm/traps.h>
                            kvm_vcpu_hvc_get_imm(vcpu));
        vcpu->stat.hvc_exit_stat++;
 
+       /* Forward hvc instructions to the virtual EL2 if the guest has EL2. */
+       if (vcpu_has_nv(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;
+       }
+
        ret = kvm_hvc_call_handler(vcpu);
        if (ret < 0) {
                vcpu_set_reg(vcpu, 0, ~0UL);