Re: [PATCH 2/5] x86/cpufeature: Remove static_cpu_has()

From: H. Peter Anvin
Date: Thu Jan 21 2016 - 14:06:00 EST


On 01/21/16 10:34, Borislav Petkov wrote:
> From: Borislav Petkov <bp@xxxxxxx>
>
> Well, this one doesn't work properly before alternatives have run. And
> it was supposed to provide an optimized JMP because the assumption was
> that the offset it is jumping to is within a signed byte and thus a
> two-byte JMP.
>
> So I did an x86_64 allyesconfig build and dumped all possible sites
> where static_cpu_has() was used. The optimization amounted to all in all
> 12(!) places where static_cpu_has() had generated a 2-byte JMP. Which
> has saved us a whopping 36 bytes!
>
> This clearly is not worth the trouble so we can remove it. The only
> place where the optimization might count - in __switch_to() - we will
> handle differently. But that's not subject of this patch.
>
> diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
> index 3cce9f3c5cb1..2b0abb241205 100644
> --- a/arch/x86/include/asm/cpufeature.h
> +++ b/arch/x86/include/asm/cpufeature.h
> @@ -125,103 +125,20 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
> #define cpu_has_osxsave boot_cpu_has(X86_FEATURE_OSXSAVE)
> #define cpu_has_hypervisor boot_cpu_has(X86_FEATURE_HYPERVISOR)
> /*
> - * Do not add any more of those clumsy macros - use static_cpu_has_safe() for
> + * Do not add any more of those clumsy macros - use static_cpu_has() for
> * fast paths and boot_cpu_has() otherwise!
> */
>
> #if __GNUC__ >= 4 && defined(CONFIG_X86_FAST_FEATURE_TESTS)

Just replace the __GNUC__ >= 4 with CC_HACE_ASM_GOTO in this test and
get rid of the tests of CC_HAVE_ASM_GOTO in the rest of the code.

> /*
> * gcc 3.x is too stupid to do the static test; fall back to dynamic.
> */

... and modify this comment accordingly.

-hpa