On 19/05/2025 18:48, Suzuki K Poulose wrote: > On 16/04/2025 14:41, Steven Price wrote: >> When loading a realm VCPU much of the work is handled by the RMM so only >> some of the actions are required. Rearrange kvm_arch_vcpu_load() >> slightly so we can bail out early for a realm guest. >> >> Signed-off-by: Steven Price <steven.price@xxxxxxx> >> Reviewed-by: Gavin Shan <gshan@xxxxxxxxxx> >> --- >> arch/arm64/kvm/arm.c | 13 +++++++++---- >> 1 file changed, 9 insertions(+), 4 deletions(-) >> >> diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c >> index cf707130ef66..08d5e0d76749 100644 >> --- a/arch/arm64/kvm/arm.c >> +++ b/arch/arm64/kvm/arm.c >> @@ -644,10 +644,6 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, >> int cpu) > > I think we use the pkvm hook to skip to the nommu goto, to avoid > the VMID allocation and context flush. > > >> kvm_timer_vcpu_load(vcpu); >> kvm_vgic_load(vcpu); >> kvm_vcpu_load_debug(vcpu); >> - if (has_vhe()) >> - kvm_vcpu_load_vhe(vcpu); >> - kvm_arch_vcpu_load_fp(vcpu); >> - kvm_vcpu_pmu_restore_guest(vcpu); >> if (kvm_arm_is_pvtime_enabled(&vcpu->arch)) >> kvm_make_request(KVM_REQ_RECORD_STEAL, vcpu); > > We could also move thise pvtime to the bottom too ? > >> @@ -671,6 +667,15 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, >> int cpu) >> &vcpu->arch.vgic_cpu.vgic_v3); >> } >> + /* No additional state needs to be loaded on Realmed VMs */ >> + if (vcpu_is_rec(vcpu)) >> + return; >> + >> + if (has_vhe()) >> + kvm_vcpu_load_vhe(vcpu); >> + kvm_arch_vcpu_load_fp(vcpu); >> + kvm_vcpu_pmu_restore_guest(vcpu); >> + > > With the above addressed: > > Reviewed-by: Suzuki K Poulose <suzuki.poulose@xxxxxxx> Thanks, the suggestions above seem sensible, I'll make those changes. Thanks, Steve > > >> if (!cpumask_test_cpu(cpu, vcpu->kvm->arch.supported_cpus)) >> vcpu_set_on_unsupported_cpu(vcpu); >> } >