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: 55+ 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:03 ` Olof Johansson
2007-10-10 0:08 ` [PATCH] powerpc: don't enable cpu hotplug on mpic-based pseries Olof Johansson
2007-10-10 0:08 ` Olof Johansson
2007-10-10 0:18 ` Stephen Rothwell
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 10:08 ` Milton Miller
2007-10-10 16:43 ` Olof Johansson
2007-10-10 16:43 ` Olof Johansson
2007-10-11 15:25 ` Milton Miller
2007-10-11 5:52 ` Paul Mackerras
2007-10-11 5:59 ` Olof Johansson
2007-10-11 21:42 ` Milton Miller
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-10 11:35 ` Rafael J. Wysocki
2007-10-10 10:06 ` Milton Miller
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 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.