Re: [PATCH v15 28/37] KVM: arm64: CCA: Support RSI_HOST_CALL
Suzuki K Poulose <[email protected]>
| Newsgroups | dev.linux.lists.linux-coco,dev.linux.lists.kvmarm,org.infradead.lists.linux-arm-kernel,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 15/07/2026 15:28, Steven Price wrote: > From: Joey Gouly <[email protected]> > > Realm VMs can talk to the hypervisor using the RSI_HOST_CALL SMC. The > RMM forwards this to the host and KVM handles them as regular > hypercalls. > > Signed-off-by: Joey Gouly <[email protected]> > Signed-off-by: Steven Price <[email protected]> > Reviewed-by: Gavin Shan <[email protected]> > --- minor nit: Populating the results back to the Realm is added in the Patch 14: KVM: arm64: CCA: Handle realm enter/exit May be a good idea to move to this one here ? Either ways: Reviewed-by: Suzuki K Poulose <[email protected]> > Changes since v7: > * Avoid turning a negative return from kvm_smccc_call_handler() into a > error response to the guest. Instead propagate the error back to user > space. > Changes since v4: > * Setting GPRS is now done by kvm_rec_enter() rather than > rec_exit_host_call() (see previous patch - arm64: RME: Handle realm > enter/exit). This fixes a bug where the registers set by user space > were being ignored. > --- > arch/arm64/kvm/rmi-exit.c | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/arch/arm64/kvm/rmi-exit.c b/arch/arm64/kvm/rmi-exit.c > index c668cbfa971a..78d9189fd5ca 100644 > --- a/arch/arm64/kvm/rmi-exit.c > +++ b/arch/arm64/kvm/rmi-exit.c > @@ -113,6 +113,19 @@ static int rec_exit_ripas_change(struct kvm_vcpu *vcpu) > return -EFAULT; > } > > +static int rec_exit_host_call(struct kvm_vcpu *vcpu) > +{ > + int i; > + struct realm_rec *rec = &vcpu->arch.rec; > + > + vcpu->stat.hvc_exit_stat++; > + > + for (i = 0; i < REC_RUN_GPRS; i++) > + vcpu_set_reg(vcpu, i, rec->run->exit.gprs[i]); > + > + return kvm_smccc_call_handler(vcpu); > +} > + > static void update_arch_timer_irq_lines(struct kvm_vcpu *vcpu) > { > struct realm_rec *rec = &vcpu->arch.rec; > @@ -188,6 +201,8 @@ int handle_rec_exit(struct kvm_vcpu *vcpu, int rec_run_ret) > return rec_exit_psci(vcpu); > case RMI_EXIT_RIPAS_CHANGE: > return rec_exit_ripas_change(vcpu); > + case RMI_EXIT_HOST_CALL: > + return rec_exit_host_call(vcpu); > } > > kvm_pr_unimpl("Unsupported exit reason: %u\n",