[PATCH 05/10] KVM: arm64: Rework SVE host-save/guest-restore

Marc Zyngier maz at kernel.org
Wed Mar 17 14:54:51 GMT 2021


On Wed, 17 Mar 2021 14:29:39 +0000,
Will Deacon <will at kernel.org> wrote:
> 
> On Tue, Mar 16, 2021 at 10:13:07AM +0000, Marc Zyngier wrote:
> > In order to keep the code readable, move the host-save/guest-restore
> > sequences in their own functions, with the following changes:
> > - the hypervisor ZCR is now set from C code
> > - ZCR_EL2 is always used as the EL2 accessor
> > 
> > This results in some minor assembler macro rework.
> > No functional change intended.
> > 
> > Signed-off-by: Marc Zyngier <maz at kernel.org>
> > ---
> >  arch/arm64/include/asm/fpsimdmacros.h   |  8 +++--
> >  arch/arm64/include/asm/kvm_hyp.h        |  2 +-
> >  arch/arm64/kvm/hyp/fpsimd.S             |  2 +-
> >  arch/arm64/kvm/hyp/include/hyp/switch.h | 41 +++++++++++++++----------
> >  4 files changed, 33 insertions(+), 20 deletions(-)
> 
> [...]
> 
> > diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h b/arch/arm64/kvm/hyp/include/hyp/switch.h
> > index fb68271c1a0f..d34dc220a1ce 100644
> > --- a/arch/arm64/kvm/hyp/include/hyp/switch.h
> > +++ b/arch/arm64/kvm/hyp/include/hyp/switch.h
> > @@ -196,6 +196,25 @@ static inline bool __populate_fault_info(struct kvm_vcpu *vcpu)
> >  	return true;
> >  }
> >  
> > +static inline void __hyp_sve_save_host(struct kvm_vcpu *vcpu)
> > +{
> > +	struct thread_struct *thread;
> > +
> > +	thread = container_of(vcpu->arch.host_fpsimd_state, struct thread_struct,
> > +			      uw.fpsimd_state);
> > +
> > +	__sve_save_state(sve_pffr(thread), &vcpu->arch.host_fpsimd_state->fpsr);
> > +}
> > +
> > +static inline void __hyp_sve_restore_guest(struct kvm_vcpu *vcpu)
> > +{
> > +	if (read_sysreg_s(SYS_ZCR_EL2) != (vcpu_sve_vq(vcpu) - 1))
> 
> Strictly speaking, we should probably be extracting the LEN field from
> ZCR_EL2, otherwise this has the potential to go horribly wrong if any of
> the RES0 bits are allocated in future.

Good point, the equivalent asm macro has a BIC to that effect. I'll
fix that in the next round, as there are similar patterns in a number
of places.

> Other than that:
> 
> Acked-by: Will Deacon <will at kernel.org>

Thanks,

	M.

-- 
Without deviation from the norm, progress is not possible.



More information about the linux-arm-kernel mailing list