Re: [PATCH v4 1/2] x86/fpu: track AVX-512 usage of tasks

From: Li, Aubrey
Date: Tue Dec 11 2018 - 19:34:47 EST


On 2018/12/12 1:20, Dave Hansen wrote:
> to update AVX512 state
>> + */
>> +static inline void update_avx512_state(struct fpu *fpu)
>> +{
>> + /*
>> + * AVX512 state is tracked here because its use is known to slow
>> + * the max clock speed of the core.
>> + *
>> + * However, AVX512-using tasks are expected to clear this state when
>> + * not actively using these registers. Thus, this tracking mechanism
>> + * can miss. To ensure that false-negatives do not immediately show
>> + * up, decay the usage count over time.
>> + */
>> + if (fpu->state.xsave.header.xfeatures & XFEATURE_MASK_AVX512)
>> + fpu->avx512_usage = AVX512_STATE_DECAY_COUNT;
>> + else if (fpu->avx512_usage)
>> + fpu->avx512_usage--;
>> +}
>> +
>> /*
>> * This function is called only during boot time when x86 caps are not set
>> * up and alternative can not be used yet.
>> @@ -411,6 +432,7 @@ static inline int copy_fpregs_to_fpstate(struct fpu *fpu)
>> {
>> if (likely(use_xsave())) {
>> copy_xregs_to_kernel(&fpu->state.xsave);
>> + update_avx512_state(fpu);
>> return 1;
>> }
>
>
> Is there a reason we shouldn't do:
>
> if (!cpu_feature_enabled(X86_FEATURE_AVX512F))
> update_avx512_state(fpu);
>
> ?
>

Why _!_ ?