[PATCH 5/6] KVM: PPC: Book3S: Load/save FP/VMX/VSX state directly to/from vcpu struct

Alexander Graf agraf at suse.de
Wed Sep 11 04:54:59 EST 2013


On 10.09.2013, at 05:22, Paul Mackerras wrote:

> Now that we have the vcpu floating-point and vector state stored in
> the same type of struct as the main kernel uses, we can load that
> state directly from the vcpu struct instead of having extra copies
> to/from the thread_struct.  Similarly, when the guest state needs to
> be saved, we can have it saved it directly to the vcpu struct by
> setting the current->thread.fp_save_area and current->thread.vr_save_area
> pointers.  That also means that we don't need to back up and restore
> userspace's FP/vector state.  This all makes the code simpler and
> faster.
> 
> Note that it's not necessary to save or modify current->thread.fpexc_mode,
> since nothing in KVM uses or is affected by its value.  Nor is it
> necessary to touch used_vr or used_vsr.
> 
> Signed-off-by: Paul Mackerras <paulus at samba.org>
> ---
> arch/powerpc/kvm/book3s_pr.c | 72 ++++++++++----------------------------------
> arch/powerpc/kvm/booke.c     | 16 ----------
> arch/powerpc/kvm/booke.h     |  4 ++-
> 3 files changed, 19 insertions(+), 73 deletions(-)
> 
> diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c
> index 90be91c..5eae919 100644
> --- a/arch/powerpc/kvm/book3s_pr.c
> +++ b/arch/powerpc/kvm/book3s_pr.c
> @@ -462,16 +462,16 @@ void kvmppc_giveup_ext(struct kvm_vcpu *vcpu, ulong msr)
> 		 * both the traditional FP registers and the added VSX
> 		 * registers into thread.fp_state.fpr[].
> 		 */
> -		if (current->thread.regs->msr & MSR_FP)
> +		if (t->regs->msr & MSR_FP)
> 			giveup_fpu(current);

If you make a second version of this call that also gets a state area as parameter, you don't need the pointer in the thread struct anymore, no? Or do you? Ah, you want to be able to grab the FPU for in-kernel FPU using code, so it needs to be seamless.

Fiar enough - pointer it is then :).


Alex



More information about the Linuxppc-dev mailing list