* [PATCH] KVM: arm64: Move management of __hyp_running_vcpu to load/put on VHE
@ 2024-05-02 15:40 Marc Zyngier
2024-05-02 16:50 ` Oliver Upton
2024-05-03 13:35 ` Marc Zyngier
0 siblings, 2 replies; 3+ messages in thread
From: Marc Zyngier @ 2024-05-02 15:40 UTC (permalink / raw)
To: kvmarm, kvm, linux-arm-kernel
Cc: James Morse, Suzuki K Poulose, Oliver Upton, Zenghui Yu,
Fuad Tabba
The per-CPU host context structure contains a __hyp_running_vcpu that
serves as a replacement for kvm_get_current_vcpu() in contexts where
we cannot make direct use of it (such as in the nVHE hypervisor).
Since there is a lot of common code between nVHE and VHE, the latter
also populates this field even if kvm_get_running_vcpu() always works.
We currently pretty inconsistent when populating __hyp_running_vcpu
to point to the currently running vcpu:
- on {n,h}VHE, we set __hyp_running_vcpu on entry to __kvm_vcpu_run
and clear it on exit.
- on VHE, we set __hyp_running_vcpu on entry to __kvm_vcpu_run_vhe
and never clear it, effectively leaving a dangling pointer...
VHE is obviously the odd one here. Although we could make it behave
just like nVHE, this wouldn't match the behaviour of KVM with VHE,
where the load phase is where most of the context-switch gets done.
So move all the __hyp_running_vcpu management to the VHE-specific
load/put phases, giving us a bit more sanity and matching the
behaviour of kvm_get_running_vcpu().
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
arch/arm64/kvm/hyp/vhe/switch.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/kvm/hyp/vhe/switch.c b/arch/arm64/kvm/hyp/vhe/switch.c
index 3c339d552591..d7af5f46f22a 100644
--- a/arch/arm64/kvm/hyp/vhe/switch.c
+++ b/arch/arm64/kvm/hyp/vhe/switch.c
@@ -194,6 +194,8 @@ static void __vcpu_put_deactivate_traps(struct kvm_vcpu *vcpu)
void kvm_vcpu_load_vhe(struct kvm_vcpu *vcpu)
{
+ host_data_ptr(host_ctxt)->__hyp_running_vcpu = vcpu;
+
__vcpu_load_switch_sysregs(vcpu);
__vcpu_load_activate_traps(vcpu);
__load_stage2(vcpu->arch.hw_mmu, vcpu->arch.hw_mmu->arch);
@@ -203,6 +205,8 @@ void kvm_vcpu_put_vhe(struct kvm_vcpu *vcpu)
{
__vcpu_put_deactivate_traps(vcpu);
__vcpu_put_switch_sysregs(vcpu);
+
+ host_data_ptr(host_ctxt)->__hyp_running_vcpu = NULL;
}
static bool kvm_hyp_handle_eret(struct kvm_vcpu *vcpu, u64 *exit_code)
@@ -307,7 +311,6 @@ static int __kvm_vcpu_run_vhe(struct kvm_vcpu *vcpu)
u64 exit_code;
host_ctxt = host_data_ptr(host_ctxt);
- host_ctxt->__hyp_running_vcpu = vcpu;
guest_ctxt = &vcpu->arch.ctxt;
sysreg_save_host_state_vhe(host_ctxt);
--
2.39.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] KVM: arm64: Move management of __hyp_running_vcpu to load/put on VHE
2024-05-02 15:40 [PATCH] KVM: arm64: Move management of __hyp_running_vcpu to load/put on VHE Marc Zyngier
@ 2024-05-02 16:50 ` Oliver Upton
2024-05-03 13:35 ` Marc Zyngier
1 sibling, 0 replies; 3+ messages in thread
From: Oliver Upton @ 2024-05-02 16:50 UTC (permalink / raw)
To: Marc Zyngier
Cc: kvmarm, kvm, linux-arm-kernel, James Morse, Suzuki K Poulose,
Zenghui Yu, Fuad Tabba
On Thu, May 02, 2024 at 04:40:30PM +0100, Marc Zyngier wrote:
> The per-CPU host context structure contains a __hyp_running_vcpu that
> serves as a replacement for kvm_get_current_vcpu() in contexts where
> we cannot make direct use of it (such as in the nVHE hypervisor).
> Since there is a lot of common code between nVHE and VHE, the latter
> also populates this field even if kvm_get_running_vcpu() always works.
>
> We currently pretty inconsistent when populating __hyp_running_vcpu
> to point to the currently running vcpu:
>
> - on {n,h}VHE, we set __hyp_running_vcpu on entry to __kvm_vcpu_run
> and clear it on exit.
>
> - on VHE, we set __hyp_running_vcpu on entry to __kvm_vcpu_run_vhe
> and never clear it, effectively leaving a dangling pointer...
>
> VHE is obviously the odd one here. Although we could make it behave
> just like nVHE, this wouldn't match the behaviour of KVM with VHE,
> where the load phase is where most of the context-switch gets done.
>
> So move all the __hyp_running_vcpu management to the VHE-specific
> load/put phases, giving us a bit more sanity and matching the
> behaviour of kvm_get_running_vcpu().
>
> Signed-off-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
--
Thanks,
Oliver
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] KVM: arm64: Move management of __hyp_running_vcpu to load/put on VHE
2024-05-02 15:40 [PATCH] KVM: arm64: Move management of __hyp_running_vcpu to load/put on VHE Marc Zyngier
2024-05-02 16:50 ` Oliver Upton
@ 2024-05-03 13:35 ` Marc Zyngier
1 sibling, 0 replies; 3+ messages in thread
From: Marc Zyngier @ 2024-05-03 13:35 UTC (permalink / raw)
To: kvmarm, kvm, linux-arm-kernel, Marc Zyngier
Cc: James Morse, Suzuki K Poulose, Oliver Upton, Zenghui Yu,
Fuad Tabba
On Thu, 02 May 2024 16:40:30 +0100, Marc Zyngier wrote:
> The per-CPU host context structure contains a __hyp_running_vcpu that
> serves as a replacement for kvm_get_current_vcpu() in contexts where
> we cannot make direct use of it (such as in the nVHE hypervisor).
> Since there is a lot of common code between nVHE and VHE, the latter
> also populates this field even if kvm_get_running_vcpu() always works.
>
> We currently pretty inconsistent when populating __hyp_running_vcpu
> to point to the currently running vcpu:
>
> [...]
Applied to next, thanks!
[1/1] KVM: arm64: Move management of __hyp_running_vcpu to load/put on VHE
commit: 9a39359903fea9c354d89dce81ffd952859c90dc
Cheers,
M.
--
Without deviation from the norm, progress is not possible.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-05-03 13:35 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-02 15:40 [PATCH] KVM: arm64: Move management of __hyp_running_vcpu to load/put on VHE Marc Zyngier
2024-05-02 16:50 ` Oliver Upton
2024-05-03 13:35 ` Marc Zyngier
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).