From: "H. Peter Anvin" <hpa@zytor.com>
To: Ingo Molnar <mingo@kernel.org>
Cc: Len Brown <lenb@kernel.org>,
x86@kernel.org, linux-pm@vger.kernel.org,
linux-kernel@vger.kernel.org, Len Brown <len.brown@intel.com>,
stable@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Mike Galbraith <efault@gmx.de>, Borislav Petkov <bp@alien8.de>
Subject: Re: [PATCH] x86 idle: repair large-server 50-watt idle-power regression
Date: Thu, 19 Dec 2013 08:13:21 -0800 [thread overview]
Message-ID: <52B31B21.6010901@zytor.com> (raw)
In-Reply-To: <20131219160210.GA28426@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 189 bytes --]
How does this look? Completely untested, of course.
I do wonder if we need more memory barriers, though.
An alternative would be to move everything into mwait_idle_with_hints().
-hpa
[-- Attachment #2: diff --]
[-- Type: text/plain, Size: 1626 bytes --]
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 7b034a4057f9..6dce588f94b4 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -723,6 +723,23 @@ static inline void __sti_mwait(unsigned long eax, unsigned long ecx)
:: "a" (eax), "c" (ecx));
}
+/*
+ * Issue a clflush in preparation for a monitor instruction if the CPU
+ * needs it. We force the address into the ax register to get a fixed
+ * length for the instruction, however, this is what the monitor instruction
+ * is going to need anyway, so it shouldn't add any additional code.
+ */
+static inline void clflush_monitor(const void *addr, unsigned long ecx,
+ unsigned long edx)
+{
+ alternative_input(ASM_NOP3,
+ "clflush (%0)",
+ X86_FEATURE_CLFLUSH_MONITOR,
+ "a" (addr));
+ __monitor(addr, eax, edx);
+ smp_mb();
+}
+
extern void select_idle_routine(const struct cpuinfo_x86 *c);
extern void init_amd_e400_c1e_mask(void);
diff --git a/arch/x86/kernel/acpi/cstate.c b/arch/x86/kernel/acpi/cstate.c
index d2b7f27781bc..b14d02354134 100644
--- a/arch/x86/kernel/acpi/cstate.c
+++ b/arch/x86/kernel/acpi/cstate.c
@@ -163,11 +163,7 @@ EXPORT_SYMBOL_GPL(acpi_processor_ffh_cstate_probe);
void mwait_idle_with_hints(unsigned long ax, unsigned long cx)
{
if (!need_resched()) {
- if (this_cpu_has(X86_FEATURE_CLFLUSH_MONITOR))
- clflush((void *)¤t_thread_info()->flags);
-
- __monitor((void *)¤t_thread_info()->flags, 0, 0);
- smp_mb();
+ clflush_monitor(¤t_thread_info()->flags, 0, 0);
if (!need_resched())
__mwait(ax, cx);
}
next prev parent reply other threads:[~2013-12-19 16:14 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-07 8:00 50 Watt idle power regression bisected to Linux-3.10 Len Brown
2013-12-07 8:39 ` Mike Galbraith
2013-12-07 16:01 ` Len Brown
2013-12-07 16:45 ` Len Brown
2013-12-07 19:17 ` Mike Galbraith
2013-12-10 11:41 ` Ingo Molnar
2013-12-07 12:54 ` Thomas Gleixner
2013-12-08 4:57 ` Mike Galbraith
2013-12-08 20:40 ` Len Brown
2013-12-09 3:16 ` Mike Galbraith
2013-12-10 5:17 ` Mike Galbraith
2013-12-10 11:45 ` Ingo Molnar
2013-12-10 14:29 ` Thomas Gleixner
2013-12-10 15:06 ` Ingo Molnar
2013-12-11 2:05 ` Thomas Gleixner
2013-12-11 3:21 ` Mike Galbraith
2013-12-11 11:28 ` Thomas Gleixner
2013-12-11 11:38 ` Borislav Petkov
2013-12-11 11:52 ` Peter Zijlstra
2013-12-11 12:29 ` Mike Galbraith
2013-12-11 12:43 ` Peter Zijlstra
2013-12-11 13:10 ` Mike Galbraith
2013-12-11 13:40 ` Borislav Petkov
2013-12-11 14:56 ` Ingo Molnar
2013-12-11 16:02 ` Borislav Petkov
2013-12-11 16:43 ` Peter Zijlstra
2013-12-11 17:50 ` Ingo Molnar
2013-12-11 23:08 ` H. Peter Anvin
2013-12-11 23:14 ` Borislav Petkov
2013-12-12 0:52 ` H. Peter Anvin
2013-12-12 4:25 ` Mike Galbraith
2013-12-12 4:49 ` H. Peter Anvin
2013-12-12 4:59 ` Mike Galbraith
2013-12-12 5:37 ` Mike Galbraith
2013-12-12 5:45 ` H. Peter Anvin
2013-12-12 5:57 ` Mike Galbraith
2013-12-12 6:05 ` Mike Galbraith
2013-12-12 7:57 ` H. Peter Anvin
2013-12-12 8:51 ` Peter Zijlstra
2013-12-12 13:28 ` Ingo Molnar
2013-12-12 15:06 ` H. Peter Anvin
2013-12-12 15:51 ` Peter Zijlstra
2013-12-11 14:42 ` Ingo Molnar
2013-12-11 15:02 ` Thomas Gleixner
2013-12-11 15:09 ` Ingo Molnar
2013-12-11 16:44 ` Peter Zijlstra
2013-12-11 17:48 ` Ingo Molnar
2013-12-11 16:44 ` Peter Zijlstra
2013-12-11 17:47 ` Ingo Molnar
2013-12-11 21:43 ` Len Brown
2013-12-11 22:22 ` Thomas Gleixner
2013-12-18 21:44 ` [PATCH] x86 idle: repair large-server 50-watt idle-power regression Len Brown
2013-12-19 12:22 ` Ingo Molnar
2013-12-19 14:40 ` H. Peter Anvin
2013-12-19 15:45 ` Borislav Petkov
2013-12-19 15:55 ` H. Peter Anvin
2013-12-19 16:02 ` Ingo Molnar
2013-12-19 16:09 ` H. Peter Anvin
2013-12-19 16:13 ` H. Peter Anvin [this message]
2013-12-19 16:21 ` Peter Zijlstra
2013-12-19 16:50 ` H. Peter Anvin
2013-12-19 17:07 ` Ingo Molnar
2013-12-19 17:25 ` Peter Zijlstra
2013-12-19 17:36 ` Peter Zijlstra
2013-12-19 18:05 ` H. Peter Anvin
2013-12-19 18:14 ` Ingo Molnar
2013-12-19 17:50 ` Peter Zijlstra
2013-12-19 18:18 ` Ingo Molnar
2013-12-19 21:05 ` H. Peter Anvin
2013-12-19 21:17 ` Ingo Molnar
2013-12-19 18:10 ` Ingo Molnar
2013-12-19 18:09 ` H. Peter Anvin
2013-12-19 18:19 ` H. Peter Anvin
2013-12-19 18:23 ` Ingo Molnar
[not found] ` <CA+55aFzGxcML7j8CEvQPYzh0W81uVoAAVmGctMOUZ7CZ1yYd2A@mail.gmail.com>
2013-12-19 18:43 ` Ingo Molnar
2013-12-19 20:09 ` [tip:x86/idle] x86, idle: Use static_cpu_has() for CLFLUSH workaround, add barriers tip-bot for H. Peter Anvin
2013-12-19 20:40 ` Ingo Molnar
2013-12-19 20:46 ` Linus Torvalds
2013-12-19 21:14 ` Ingo Molnar
2013-12-19 21:25 ` Linus Torvalds
2013-12-19 21:55 ` Peter Zijlstra
2013-12-20 8:47 ` Ingo Molnar
2013-12-19 20:33 ` [tip:x86/idle] x86, idle: Add memory barriers around clflush in mwait_play_dead() tip-bot for H. Peter Anvin
2013-12-19 18:19 ` [PATCH] x86 idle: repair large-server 50-watt idle-power regression Ingo Molnar
2013-12-19 19:22 ` H. Peter Anvin
2013-12-19 19:27 ` Peter Zijlstra
2013-12-19 19:51 ` [tip:x86/urgent] x86 idle: Repair " tip-bot for Len Brown
2014-03-18 0:20 ` Davidlohr Bueso
2014-03-18 9:16 ` Peter Zijlstra
2014-03-19 2:14 ` Jason Low
2014-03-19 6:42 ` Peter Zijlstra
2014-04-08 21:43 ` Brown, Len
2014-04-09 8:18 ` Peter Zijlstra
2014-04-15 3:27 ` Davidlohr Bueso
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=52B31B21.6010901@zytor.com \
--to=hpa@zytor.com \
--cc=a.p.zijlstra@chello.nl \
--cc=bp@alien8.de \
--cc=efault@gmx.de \
--cc=len.brown@intel.com \
--cc=lenb@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=stable@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox