> On Jan 7, 2021, at 17:41, Liu, Jing2 <jing2.liu@xxxxxxxxx> wrote: > > static void kvm_save_current_fpu(struct fpu *fpu) { > + struct fpu *src_fpu = ¤t->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, ¤t->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