From: "H. Peter Anvin" <hpa@zytor.com>
To: Borislav Petkov <bp@alien8.de>
Cc: Andy Lutomirski <luto@amacapital.net>,
Brian Gerst <brgerst@gmail.com>, X86 ML <x86@kernel.org>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 5/5] x86/alternatives: Discard dynamic check after init
Date: Thu, 21 Jan 2016 11:03:33 -0800 [thread overview]
Message-ID: <56A12B85.6030401@zytor.com> (raw)
In-Reply-To: <1453401286-26966-6-git-send-email-bp@alien8.de>
On 01/21/16 10:34, Borislav Petkov wrote:
> From: Brian Gerst <brgerst@gmail.com>
>
> Move the code to do the dynamic check to the altinstr_aux section so
> that it is discarded after alternatives have run and a static branch has
> been chosen.
>
> Boris: change it to do TESTB, as hpa suggests.
[Also document that this changes it from C code to assembly, which makes
it *substantially* smaller while avoiding a completely unnecessary call
to an out of line function.]
> * Static testing of CPU features. Used the same as boot_cpu_has().
> @@ -141,7 +140,7 @@ extern bool __static_cpu_has(u16 bit);
> static __always_inline __pure bool _static_cpu_has(u16 bit)
> {
> #ifdef CC_HAVE_ASM_GOTO
> - asm_volatile_goto("1: jmp %l[t_dynamic]\n"
> + asm_volatile_goto("1: jmp 6f\n"
> "2:\n"
> ".skip -(((5f-4f) - (2b-1b)) > 0) * "
> "((5f-4f) - (2b-1b)),0x90\n"
> @@ -166,13 +165,19 @@ static __always_inline __pure bool _static_cpu_has(u16 bit)
> " .byte 0\n" /* repl len */
> " .byte 0\n" /* pad len */
> ".previous\n"
> - : : "i" (bit), "i" (X86_FEATURE_ALWAYS)
> - : : t_dynamic, t_no);
> + ".section .altinstr_aux,\"ax\"\n"
> + "6: testb %[bitnum],%[cap_word]\n"
> + " jnz %l[t_yes]\n"
> + " jmp %l[t_no]\n"
> + ".previous\n"
> + : : "i" (bit), "i" (X86_FEATURE_ALWAYS),
> + [bitnum] "i" (1 << (bit & 7)),
> + [cap_word] "m" (((const char *)boot_cpu_data.x86_capability)[bit >> 3])
Change to [cap_byte] as we normally refer to this array by 32-bit words.
> + : : t_yes, t_no);
> + t_yes:
> return true;
> t_no:
> return false;
> - t_dynamic:
> - return __static_cpu_has(bit);
> #else
> return boot_cpu_has(bit);
> #endif /* CC_HAVE_ASM_GOTO */
> diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
> index a57ec0df9cc3..897c65bd3faa 100644
> --- a/arch/x86/kernel/cpu/common.c
> +++ b/arch/x86/kernel/cpu/common.c
> @@ -1483,12 +1483,6 @@ void warn_pre_alternatives(void)
> EXPORT_SYMBOL_GPL(warn_pre_alternatives);
> #endif
>
> -inline bool __static_cpu_has(u16 bit)
> -{
> - return boot_cpu_has(bit);
> -}
> -EXPORT_SYMBOL_GPL(__static_cpu_has);
> -
> static void bsp_resume(void)
> {
> if (this_cpu->c_bsp_resume)
>
next prev parent reply other threads:[~2016-01-21 19:04 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-21 18:34 [RFC PATCH 0/5] x86/cpufeature: Cleanups and improvements Borislav Petkov
2016-01-21 18:34 ` [PATCH 1/5] x86/cpufeature: Carve out X86_FEATURE_* Borislav Petkov
2016-01-21 18:57 ` H. Peter Anvin
2016-01-21 19:03 ` Borislav Petkov
2016-01-22 11:19 ` Borislav Petkov
2016-02-03 14:36 ` David Howells
2016-01-21 18:34 ` [PATCH 2/5] x86/cpufeature: Remove static_cpu_has() Borislav Petkov
2016-01-21 19:04 ` Andy Lutomirski
2016-01-21 19:39 ` Borislav Petkov
2016-01-21 19:41 ` H. Peter Anvin
2016-01-21 19:51 ` Borislav Petkov
2016-01-21 19:05 ` H. Peter Anvin
2016-01-21 18:34 ` [PATCH 3/5] x86/cpufeature: Get rid of the non-asm goto variant Borislav Petkov
2016-01-21 18:59 ` H. Peter Anvin
2016-01-21 18:34 ` [PATCH 4/5] x86/alternatives: Add an auxilary section Borislav Petkov
2016-01-21 19:00 ` H. Peter Anvin
2016-01-21 19:07 ` Borislav Petkov
2016-01-21 19:10 ` H. Peter Anvin
2016-01-21 18:34 ` [PATCH 5/5] x86/alternatives: Discard dynamic check after init Borislav Petkov
2016-01-21 19:03 ` H. Peter Anvin [this message]
2016-01-21 21:53 ` [RFC PATCH 0/5] x86/cpufeature: Cleanups and improvements Brian Gerst
2016-01-21 22:20 ` Borislav Petkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56A12B85.6030401@zytor.com \
--to=hpa@zytor.com \
--cc=bp@alien8.de \
--cc=brgerst@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.