> On Jan 7, 2021, at 17:41, Liu, Jing2 <jing2....@intel.com> wrote:
> 
> static void kvm_save_current_fpu(struct fpu *fpu)  {
> +     struct fpu *src_fpu = &current->thread.fpu;
> +
>       /*
>        * If the target FPU state is not resident in the CPU registers, just
>        * memcpy() from current, else save CPU state directly to the target.
>        */
> -     if (test_thread_flag(TIF_NEED_FPU_LOAD))
> -             memcpy(&fpu->state, &current->thread.fpu.state,
> +     if (test_thread_flag(TIF_NEED_FPU_LOAD)) {
> +             memcpy(&fpu->state, &src_fpu->state,
>                      fpu_kernel_xstate_min_size);
> For kvm, if we assume that it does not support dynamic features until this 
> series,
> memcpy for only fpu->state is correct. 
> I think this kind of assumption is reasonable and we only make original 
> xstate work.
> 
> -     else
> +     } else {
> +             if (fpu->state_mask != src_fpu->state_mask)
> +                     fpu->state_mask = src_fpu->state_mask;
> 
> Though dynamic feature is not supported in kvm now, this function still need
> consider more things for fpu->state_mask.

Can you elaborate this? Which path might be affected by fpu->state_mask
without dynamic state supported in KVM?

> I suggest that we can set it before if...else (for both cases) and not change 
> other. 

I tried a minimum change here.  The fpu->state_mask value does not impact the
memcpy(). So, why do we need to change it for both?

Thanks,
Chang

Reply via email to