From: Borislav Petkov <bp@alien8.de>
To: Scotty Bauer <sbauer@eng.utah.edu>
Cc: tglx@linutronix.de, mingo@redheat.com, hpa@zytor.com,
linux-kernel@vger.kernel.org, x86@kernel.org
Subject: Re: [PATCH] x86/smpboot: check if CLFLUSH is actually necessary
Date: Sat, 31 Jan 2015 00:31:42 +0100 [thread overview]
Message-ID: <20150130233142.GA1884@pd.tnic> (raw)
In-Reply-To: <54CBF6F9.5040508@eng.utah.edu>
On Fri, Jan 30, 2015 at 02:26:17PM -0700, Scotty Bauer wrote:
> mwait_play_dead previously issued a CLFLUSH to work around a bug on some xeon processors. We can now determine if the CPU is a buggy CPU. This patch checks if if we're on a buggy CPU which allows non-buggy cpu's to eliminate the CLFLUSH.
>
>
>
>
>
> From 3da1be5c998a8d51f98fdba09b3cb477526c5ff3 Mon Sep 17 00:00:00 2001
> From: Scott Bauer <sbauer@eng.utah.edu>
> Date: Fri, 30 Jan 2015 14:10:37 -0700
> Subject: [PATCH] Add check to determine if CLFLUSH is actually necessary
> before monitor/wait
>
> Signed-off-by: Scott Bauer <sbauer@eng.utah.edu>
> ---
> arch/x86/kernel/smpboot.c | 13 ++++++++++---
> 1 file changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
> index 6d7022c..552ff48 100644
> --- a/arch/x86/kernel/smpboot.c
> +++ b/arch/x86/kernel/smpboot.c
> @@ -1384,6 +1384,7 @@ static inline void mwait_play_dead(void)
> unsigned int highest_subcstate = 0;
> void *mwait_ptr;
> int i;
> + int cpu;
>
> if (!this_cpu_has(X86_FEATURE_MWAIT))
> return;
> @@ -1420,6 +1421,7 @@ static inline void mwait_play_dead(void)
> * content is immaterial as it is not actually modified in any way.
> */
> mwait_ptr = ¤t_thread_info()->flags;
> + cpu = smp_processor_id();
>
> wbinvd();
>
> @@ -1430,10 +1432,15 @@ static inline void mwait_play_dead(void)
> * needed, but it should be harmless in either case.
> * The WBINVD is insufficient due to the spurious-wakeup
> * case where we return around the loop.
> + *
> + * Check if the CLFLUSH is actually necessary before calling
> */
> - mb();
> - clflush(mwait_ptr);
> - mb();
> + if (cpu_has_bug(&cpu_data(cpu), X86_BUG_CLFLUSH_MONITOR)) {
> + mb();
> + clflush(mwait_ptr);
> + mb();
Or you can so something even better:
alternative(ASM_NOP3, "clflush", X86_BUG_CLFLUSH_MONITOR);
Well, almost, you'd also need to pass in mwait_ptr, i.e. something like that:
https://lkml.kernel.org/r/1422377631-8986-3-git-send-email-ross.zwisler@linux.intel.com
but simpler. Maybe this:
asm volatile(ALTERNATIVE(ASM_NOP3, "clflush %[p]", X86_BUG_CLFLUSH_MONITOR)
: [p] "+m" (*mwait_ptr));
Totally untested though - it is supposed to show the idea only.
--
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.
--
next prev parent reply other threads:[~2015-01-30 23:32 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-30 21:26 [PATCH] x86/smpboot: check if CLFLUSH is actually necessary Scotty Bauer
2015-01-30 23:31 ` Borislav Petkov [this message]
2015-02-06 16:05 ` Borislav Petkov
2015-02-06 16:13 ` [PATCH] x86, smpboot: Call CLFLUSH only on X86_BUG_CLFLUSH_MONITOR-affected CPUs Borislav Petkov
2015-02-11 18:39 ` Scotty Bauer
2015-02-11 20:25 ` Borislav Petkov
2015-02-11 21:55 ` [PATCH] x86/smpboot: check if CLFLUSH is actually necessary H. Peter Anvin
2015-02-11 23:10 ` Scotty Bauer
2015-02-12 9:16 ` Borislav Petkov
2015-02-11 21:55 ` H. Peter Anvin
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=20150130233142.GA1884@pd.tnic \
--to=bp@alien8.de \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redheat.com \
--cc=sbauer@eng.utah.edu \
--cc=tglx@linutronix.de \
--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.