On Jan 7, 2021, at 17:41, Liu, Jing2 <jing2.liu@xxxxxxxxx> wrote:Can you elaborate this? Which path might be affected by fpu->state_mask
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.
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