From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
Zwane Mwaikambo <zwane@arm.linux.org.uk>,
"Theodore Ts'o" <tytso@mit.edu>,
Randy Dunlap <rdunlap@xenotime.net>,
Dave Jones <davej@redhat.com>,
Chuck Wolber <chuckw@quantumlinux.com>,
Chris Wedgwood <reviews@ml.cw.f00f.org>,
Michael Krufky <mkrufky@linuxtv.org>,
Chuck Ebbert <cebbert@redhat.com>,
Domenico Andreoli <cavokz@gmail.com>,
torvalds@linux-foundation.org, akpm@linux-foundation.org,
alan@lxorguk.ukuu.org.uk, tglx@linutronix.de,
Andi Kleen <ak@suse.de>
Subject: [patch 12/12] i386: Use global flag to disable broken local apic timer on AMD CPUs.
Date: Mon, 8 Oct 2007 11:06:44 -0700 [thread overview]
Message-ID: <20071008180644.GM7627@kroah.com> (raw)
In-Reply-To: <20071008180551.GA7627@kroah.com>
[-- Attachment #1: i386-use-global-flag-to-disable-broken-local-apic-timer-on-amd-cpus.patch --]
[-- Type: text/plain, Size: 3823 bytes --]
From: Andi Kleen <ak@suse.de>
commit d3f7eae182b04997be19343a23f7009170f4f7a5 upstream
The Averatec 2370 and some other Turion laptop BIOS seems to program the
ENABLE_C1E MSR inconsistently between cores. This confuses the lapic
use heuristics because when C1E is enabled anywhere it seems to affect
the complete chip.
Use a global flag instead of a per cpu flag to handle this.
If any CPU has C1E enabled disabled lapic use.
Thanks to Cal Peake for debugging.
Cc: tglx@linutronix.de
Cc: Chuck Ebbert <cebbert@redhat.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/i386/kernel/apic.c | 10 ++++------
arch/i386/kernel/cpu/amd.c | 7 ++++++-
include/asm-i386/apic.h | 2 ++
include/asm-i386/cpufeature.h | 2 +-
4 files changed, 13 insertions(+), 8 deletions(-)
--- a/arch/i386/kernel/apic.c
+++ b/arch/i386/kernel/apic.c
@@ -61,8 +61,9 @@ static int enable_local_apic __initdata
/* Local APIC timer verification ok */
static int local_apic_timer_verify_ok;
-/* Disable local APIC timer from the kernel commandline or via dmi quirk */
-static int local_apic_timer_disabled;
+/* Disable local APIC timer from the kernel commandline or via dmi quirk
+ or using CPU MSR check */
+int local_apic_timer_disabled;
/* Local APIC timer works in C2 */
int local_apic_timer_c2_ok;
EXPORT_SYMBOL_GPL(local_apic_timer_c2_ok);
@@ -367,12 +368,9 @@ void __init setup_boot_APIC_clock(void)
long delta, deltapm;
int pm_referenced = 0;
- if (boot_cpu_has(X86_FEATURE_LAPIC_TIMER_BROKEN))
- local_apic_timer_disabled = 1;
-
/*
* The local apic timer can be disabled via the kernel
- * commandline or from the test above. Register the lapic
+ * commandline or from the CPU detection code. Register the lapic
* timer as a dummy clock event source on SMP systems, so the
* broadcast mechanism is used. On UP systems simply ignore it.
*/
--- a/arch/i386/kernel/cpu/amd.c
+++ b/arch/i386/kernel/cpu/amd.c
@@ -3,6 +3,7 @@
#include <linux/mm.h>
#include <asm/io.h>
#include <asm/processor.h>
+#include <asm/apic.h>
#include "cpu.h"
@@ -22,6 +23,7 @@
extern void vide(void);
__asm__(".align 4\nvide: ret");
+#ifdef CONFIG_X86_LOCAL_APIC
#define ENABLE_C1E_MASK 0x18000000
#define CPUID_PROCESSOR_SIGNATURE 1
#define CPUID_XFAM 0x0ff00000
@@ -52,6 +54,7 @@ static __cpuinit int amd_apic_timer_brok
}
return 0;
}
+#endif
int force_mwait __cpuinitdata;
@@ -275,8 +278,10 @@ static void __cpuinit init_amd(struct cp
if (cpuid_eax(0x80000000) >= 0x80000006)
num_cache_leaves = 3;
+#ifdef CONFIG_X86_LOCAL_APIC
if (amd_apic_timer_broken())
- set_bit(X86_FEATURE_LAPIC_TIMER_BROKEN, c->x86_capability);
+ local_apic_timer_disabled = 1;
+#endif
if (c->x86 == 0x10 && !force_mwait)
clear_bit(X86_FEATURE_MWAIT, c->x86_capability);
--- a/include/asm-i386/apic.h
+++ b/include/asm-i386/apic.h
@@ -116,6 +116,8 @@ extern void enable_NMI_through_LVT0 (voi
extern int timer_over_8254;
extern int local_apic_timer_c2_ok;
+extern int local_apic_timer_disabled;
+
#else /* !CONFIG_X86_LOCAL_APIC */
static inline void lapic_shutdown(void) { }
--- a/include/asm-i386/cpufeature.h
+++ b/include/asm-i386/cpufeature.h
@@ -79,7 +79,7 @@
#define X86_FEATURE_ARCH_PERFMON (3*32+11) /* Intel Architectural PerfMon */
#define X86_FEATURE_PEBS (3*32+12) /* Precise-Event Based Sampling */
#define X86_FEATURE_BTS (3*32+13) /* Branch Trace Store */
-#define X86_FEATURE_LAPIC_TIMER_BROKEN (3*32+ 14) /* lapic timer broken in C1 */
+/* 14 free */
#define X86_FEATURE_SYNC_RDTSC (3*32+15) /* RDTSC synchronizes the CPU */
/* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */
--
next prev parent reply other threads:[~2007-10-08 18:44 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20071008180406.052382073@mini.kroah.org>
2007-10-08 18:05 ` [patch 00/12] 2.6.22.10 -stable review Greg KH
2007-10-08 18:06 ` [patch 01/12] scsi_transport_spi: fix domain validation failure from incorrect width setting Greg KH
2007-10-08 18:06 ` [patch 02/12] sky2: reduce impact of watchdog timer Greg KH
2007-10-08 18:06 ` [patch 03/12] sky2: fix VLAN receive processing Greg KH
2007-10-08 18:06 ` [patch 04/12] sky2: fix transmit state on resume Greg KH
2007-10-08 18:06 ` [patch 05/12] libata: update drive blacklists Greg KH
2007-10-08 18:06 ` [patch 06/12] Fix ppp_mppe kernel stack usage Greg KH
2007-10-08 18:06 ` [patch 07/12] i2c-algo-bit: Read block data bugfix Greg KH
2007-10-08 18:06 ` [patch 08/12] NLM: Fix a circular lock dependency in lockd Greg KH
2007-10-08 20:01 ` Roel Kluin
2007-10-09 15:00 ` Trond Myklebust
2007-10-09 15:13 ` Greg KH
2007-10-09 15:27 ` Trond Myklebust
2007-10-09 20:41 ` [stable] " Greg KH
2007-10-08 18:06 ` [patch 09/12] Fix SMP poweroff hangs Greg KH
2007-10-09 15:17 ` Olof Johansson
2007-10-09 22:20 ` [stable] " Greg KH
2007-10-09 23:21 ` Thomas Gleixner
2007-10-09 23:27 ` Linus Torvalds
2007-10-09 23:35 ` Thomas Gleixner
2007-10-10 5:29 ` Linus Torvalds
[not found] ` <200710092359.47144.spaceman__spiff@cox.net>
2007-10-10 14:57 ` ARPM shutdown oops (Re: [stable] [patch 09/12] Fix SMP poweroff hangs) Linus Torvalds
2007-10-10 16:31 ` H. Peter Anvin
2007-10-11 3:05 ` Kevin
2007-10-11 15:31 ` Linus Torvalds
2007-10-11 18:42 ` Jeff Garzik
2007-10-11 19:19 ` Dave Jones
2007-10-11 20:55 ` Rafael J. Wysocki
2007-10-11 23:27 ` APM " Adrian Bunk
2007-10-12 12:05 ` Rafael J. Wysocki
2007-10-10 0:03 ` [stable] [patch 09/12] Fix SMP poweroff hangs Olof Johansson
2007-10-10 0:08 ` [PATCH] powerpc: don't enable cpu hotplug on mpic-based pseries Olof Johansson
2007-10-10 0:18 ` Stephen Rothwell
2007-10-10 0:38 ` [PATCH v2] " Olof Johansson
2007-10-10 10:08 ` Milton Miller
2007-10-10 16:43 ` Olof Johansson
2007-10-11 5:52 ` Paul Mackerras
2007-10-11 5:59 ` Olof Johansson
2007-10-11 0:24 ` [stable] [patch 09/12] Fix SMP poweroff hangs Paul Mackerras
2007-10-09 23:28 ` Greg KH
[not found] ` <alpine.LFD.0.999.0710091625520.3838@woody.linux%foundation.org>
2007-10-10 10:06 ` Milton Miller
2007-10-10 11:35 ` Rafael J. Wysocki
2007-10-08 18:06 ` [patch 10/12] Fix timer_stats printout of events/sec Greg KH
2007-10-08 18:06 ` [patch 11/12] SELinux: clear parent death signal on SID transitions Greg KH
2007-10-08 18:06 ` Greg KH [this message]
2007-10-08 18:09 ` [patch 00/12] 2.6.22.10 -stable review Greg KH
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=20071008180644.GM7627@kroah.com \
--to=gregkh@suse.de \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=cavokz@gmail.com \
--cc=cebbert@redhat.com \
--cc=chuckw@quantumlinux.com \
--cc=davej@redhat.com \
--cc=jmforbes@linuxtx.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mkrufky@linuxtv.org \
--cc=rdunlap@xenotime.net \
--cc=reviews@ml.cw.f00f.org \
--cc=stable@kernel.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=tytso@mit.edu \
--cc=zwane@arm.linux.org.uk \
/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