mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 07:03:03 +02:00
x86/fpu: Correct AVX512 state tracking
Add a separate, local mask for tracking AVX512 usage which does not include the opmask xfeature set. Opmask registers usage does not cause frequency throttling so it is a completely unnecessary false positive. While at it, carve it out into a separate function to keep that abomination extracted out. [ bp: Rediff and cleanup ontop of 5.16-rc1. ] Signed-off-by: Noah Goldstein <goldstein.w.n@gmail.com> Signed-off-by: Borislav Petkov <bp@suse.de> Link: https://lore.kernel.org/r/20210920053951.4093668-1-goldstein.w.n@gmail.com
This commit is contained in:
parent
fa55b7dcdc
commit
0fe4ff885f
|
|
@ -98,6 +98,19 @@ bool irq_fpu_usable(void)
|
|||
}
|
||||
EXPORT_SYMBOL(irq_fpu_usable);
|
||||
|
||||
/*
|
||||
* Track AVX512 state use because it is known to slow the max clock
|
||||
* speed of the core.
|
||||
*/
|
||||
static void update_avx_timestamp(struct fpu *fpu)
|
||||
{
|
||||
|
||||
#define AVX512_TRACKING_MASK (XFEATURE_MASK_ZMM_Hi256 | XFEATURE_MASK_Hi16_ZMM)
|
||||
|
||||
if (fpu->fpstate->regs.xsave.header.xfeatures & AVX512_TRACKING_MASK)
|
||||
fpu->avx512_timestamp = jiffies;
|
||||
}
|
||||
|
||||
/*
|
||||
* Save the FPU register state in fpu->fpstate->regs. The register state is
|
||||
* preserved.
|
||||
|
|
@ -116,13 +129,7 @@ void save_fpregs_to_fpstate(struct fpu *fpu)
|
|||
{
|
||||
if (likely(use_xsave())) {
|
||||
os_xsave(fpu->fpstate);
|
||||
|
||||
/*
|
||||
* AVX512 state is tracked here because its use is
|
||||
* known to slow the max clock speed of the core.
|
||||
*/
|
||||
if (fpu->fpstate->regs.xsave.header.xfeatures & XFEATURE_MASK_AVX512)
|
||||
fpu->avx512_timestamp = jiffies;
|
||||
update_avx_timestamp(fpu);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user