public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andi Kleen <ak@suse.de>
To: "Mark Langsdorf" <mark.langsdorf@amd.com>
Cc: "Len Brown" <lenb@kernel.org>,
	"Linus Torvalds" <torvalds@linux-foundation.org>,
	"Morrow, William" <William.Morrow@amd.com>,
	"Crouse, Jordan" <jordan.crouse@ldcmail.amd.com>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Pavel Machek" <pavel@ucw.cz>, "Ingo Molnar" <mingo@elte.hu>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	"Nick Piggin" <nickpiggin@yahoo.com.au>,
	"Mingming Cao" <cmm@us.ibm.com>, "Adrian Bunk" <bunk@stusta.de>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>,
	"Michal Piotrowski" <michal.k.k.piotrowski@gmail.com>,
	"Mariusz Kozlowski" <m.kozlowski@tuxland.pl>,
	"Oliver Pinter" <oliver.pntr@gmail.com>,
	"Sid Boyce" <g3vbv@blueyonder.co.uk>,
	"Nick Piggin" <npiggin@suse.de>,
	"Jens Axboe" <jens.axboe@oracle.com>,
	"Thomas Renninger" <trenn@suse.de>
Subject: Re: [PATCH] i386: add command line option "local_apic_timer_c2_ok"
Date: Thu, 29 Mar 2007 22:49:37 +0200	[thread overview]
Message-ID: <200703292249.37979.ak@suse.de> (raw)
In-Reply-To: <460C1B5B.4090802@amd.com>


> Reviewed but not tested.  Needs to be wrapped in an AMD specific
> call.

Here's a patch. I don't have a system with C1E, so i only tested that
the apic timer still works on a older AMD box.

Would be good if someone with a Turion laptop, especially the HP nx6325
could test it with CONFIG_NO_HZ enabled.

-Andi

Disable local APIC timer use on AMD systems with C1E

AMD dual core laptops with C1E do not run the APIC timer correctly
when they go idle. Previously the code assumed this only happened
on C2 or deeper.  But not all of these systems report support C2.

Use a AMD supplied snippet to detect C1E being enabled and then disable
local apic timer use.

This supercedes an earlier workaround using DMI detection of specific systems.

Signed-off-by: Andi Kleen <ak@suse.de>

Index: linux/arch/i386/kernel/apic.c
===================================================================
--- linux.orig/arch/i386/kernel/apic.c
+++ linux/arch/i386/kernel/apic.c
@@ -272,32 +272,6 @@ static void __devinit setup_APIC_timer(v
 }
 
 /*
- * Detect systems with known broken BIOS implementations
- */
-static int __init lapic_check_broken_bios(struct dmi_system_id *d)
-{
-	printk(KERN_NOTICE "%s detected: disabling lapic timer.\n",
-		       d->ident);
-	local_apic_timer_disabled = 1;
-	return 0;
-}
-
-static struct dmi_system_id __initdata broken_bios_dmi_table[] = {
-	{
-		/*
-		 * BIOS exports only C1 state, but uses deeper power
-		 * modes behind the kernels back.
-		 */
-		  .callback = lapic_check_broken_bios,
-		  .ident = "HP nx6325",
-		  .matches = {
-			DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"),
-		  },
-	 },
-	 {}
-};
-
-/*
  * In this functions we calibrate APIC bus clocks to the external timer.
  *
  * We want to do the calibration only once since we want to have local timer
@@ -357,6 +331,44 @@ static void __init lapic_cal_handler(str
 	}
 }
 
+#define ENABLE_C1E_MASK         0x18000000
+#define CPUID_PROCESSOR_SIGNATURE       1
+#define CPUID_XFAM              0x0ff00000
+#define CPUID_XFAM_K8           0x00000000
+#define CPUID_XFAM_10H          0x00100000
+#define CPUID_XFAM_11H          0x00200000
+#define CPUID_XMOD              0x000f0000
+#define CPUID_XMOD_REV_F        0x00040000
+
+/* AMD systems with C1E don't have a working lAPIC timer. Check for that. */
+static __init int amd_apic_timer_broken(void)
+{
+	u32 lo, hi;
+	u32 eax = cpuid_eax(CPUID_PROCESSOR_SIGNATURE);
+	switch (eax & CPUID_XFAM) {
+	case CPUID_XFAM_K8:
+		if ((eax & CPUID_XMOD) < CPUID_XMOD_REV_F)
+			break;
+	case CPUID_XFAM_10H:
+	case CPUID_XFAM_11H:
+		rdmsr(MSR_K8_ENABLE_C1E, lo, hi);
+		if (lo & ENABLE_C1E_MASK)
+			return 1;
+                break;
+        default:
+                /* err on the side of caution */
+		return 1;
+        }
+	return 0;
+}
+
+static __init int apic_timer_broken(void)
+{
+	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
+		return amd_apic_timer_broken();
+	return 0;
+}
+
 /*
  * Setup the boot APIC
  *
@@ -372,12 +384,12 @@ void __init setup_boot_APIC_clock(void)
 	long delta, deltapm;
 	int pm_referenced = 0;
 
-	/* Detect know broken systems */
-	dmi_check_system(broken_bios_dmi_table);
+	if (apic_timer_broken())
+		local_apic_timer_disabled = 1;
 
 	/*
 	 * The local apic timer can be disabled via the kernel
-	 * commandline or from the dmi quirk above. Register the lapic
+	 * commandline or from the test above. 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.
 	 */
Index: linux/include/asm-i386/msr.h
===================================================================
--- linux.orig/include/asm-i386/msr.h
+++ linux/include/asm-i386/msr.h
@@ -275,6 +275,8 @@ static inline void wrmsr_on_cpu(unsigned
 #define MSR_K7_FID_VID_CTL		0xC0010041
 #define MSR_K7_FID_VID_STATUS		0xC0010042
 
+#define MSR_K8_ENABLE_C1E		0xC0010055
+
 /* extended feature register */
 #define MSR_EFER 			0xc0000080
 

  reply	other threads:[~2007-03-29 20:51 UTC|newest]

Thread overview: 259+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-16 16:33 Linux 2.6.21-rc4 Linus Torvalds
2007-03-16 17:01 ` Takashi Iwai
2007-03-16 17:44 ` Michal Piotrowski
2007-03-16 18:26   ` Andrew Morton
2007-03-16 18:55     ` Michal Piotrowski
2007-03-16 23:23       ` Jan Engelhardt
2007-03-16 23:31         ` Michal Piotrowski
2007-03-17  8:19           ` Mariusz Kozlowski
2007-03-16 18:54   ` Takashi Iwai
2007-03-16 19:03     ` Michal Piotrowski
2007-03-17 23:46       ` Adrian Bunk
2007-03-18 13:04         ` Michal Piotrowski
2007-03-16 20:34 ` Rafael J. Wysocki
2007-03-16 20:47   ` Thomas Gleixner
2007-03-16 23:25     ` [PATCH] clockevents: Fix suspend/resume to disk hangs Thomas Gleixner
2007-03-17  9:35       ` Milan Broz
2007-03-17 10:07       ` Thomas Meyer
2007-03-17 21:47         ` Rafael J. Wysocki
2007-03-18 17:58           ` Adrian Bunk
2007-03-18  0:42         ` appletouch quirk doesn't run at resume Adrian Bunk
2007-03-18 18:45           ` Jiri Kosina
2007-03-18 19:01             ` Thomas Meyer
2007-03-18 19:22               ` Jiri Kosina
2007-03-27 21:02                 ` Thomas Meyer
2007-03-28 12:26                   ` Jiri Kosina
2007-03-28 13:24                     ` Dmitry Torokhov
2007-03-28 16:51                       ` Thomas Meyer
2007-03-28 17:06                         ` Jiri Kosina
2007-03-28 17:35                           ` Dmitry Torokhov
2007-03-20  9:35       ` [PATCH] clockevents: Fix suspend/resume to disk hangs Marcus Better
2007-03-21 14:04         ` Thomas Gleixner
2007-03-22 10:34           ` Marcus Better
2007-03-23  9:14             ` Marcus Better
2007-03-23 10:05               ` Tino Keitel
2007-03-23 13:47               ` Rafael J. Wysocki
2007-03-23 14:36                 ` Marcus Better
2007-03-16 21:11 ` Linux 2.6.21-rc4 Randy Dunlap
2007-03-16 22:39   ` Randy Dunlap
2007-03-16 23:13     ` Chris Friesen
2007-03-16 23:27       ` Jan Engelhardt
2007-03-17  6:43     ` Sam Ravnborg
2007-03-18 12:39       ` Sam Ravnborg
2007-03-19  4:16         ` Randy Dunlap
2007-03-18 18:49 ` [1/6] 2.6.21-rc4: known regressions Adrian Bunk
2007-03-20 10:24   ` Tobias Diedrich
2007-03-20 11:14     ` Adrian Bunk
2007-03-22  3:45   ` Linus Torvalds
2007-03-22  4:18     ` Nick Piggin
2007-03-22 15:21       ` Linus Torvalds
2007-03-23  1:08         ` Mingming Cao
2007-03-23  1:40           ` Linus Torvalds
2007-03-23  2:11             ` Nick Piggin
2007-03-23  7:51               ` Michal Piotrowski
2007-03-23  9:37                 ` Nick Piggin
2007-03-23 17:19                   ` Adrian Bunk
2007-03-23 12:01                 ` [patch] hrtimers debug patch Ingo Molnar
     [not found]                   ` <4607BDD9.1010002@googlemail.com>
     [not found]                     ` <6bffcb0e0703260720i37bbb956o3d20019fe4ac9879@mail.gmail.com>
2007-03-26 14:33                       ` Thomas Gleixner
2007-03-26 14:42                         ` Michal Piotrowski
2007-03-26 15:07                           ` Michal Piotrowski
2007-03-26 17:02                     ` Ingo Molnar
2007-03-26 17:50                       ` Michal Piotrowski
2007-04-06 15:27                       ` Michal Piotrowski
2007-04-06 16:39                         ` Ingo Molnar
2007-03-23 11:42             ` [1/6] 2.6.21-rc4: known regressions Ingo Molnar
2007-03-23 11:56               ` Thomas Gleixner
2007-03-23 15:08                 ` [PATCH] i386: add command line option "local_apic_timer_c2_ok" Thomas Gleixner
2007-03-26 12:31                   ` Pavel Machek
2007-03-26 13:52                     ` Thomas Gleixner
2007-03-27 21:19                       ` Len Brown
2007-03-27 21:34                         ` Linus Torvalds
2007-03-27 22:16                           ` Len Brown
2007-03-28  2:18                             ` Len Brown
2007-03-29 14:15                               ` Andi Kleen
2007-03-29 14:53                               ` Langsdorf, Mark
2007-03-29 16:50                                 ` Andi Kleen
2007-03-29 20:02                                   ` Mark Langsdorf
2007-03-29 20:49                                     ` Andi Kleen [this message]
2007-03-29 21:16                                       ` Linus Torvalds
2007-03-29 21:45                                         ` Andreas Mohr
2007-03-29 21:56                                           ` Linus Torvalds
2007-03-29 22:06                                           ` Andi Kleen
2007-03-29 22:05                                         ` Andi Kleen
2007-03-30 21:06                                           ` Grzegorz Chwesewicz
2007-03-31  7:47                                           ` Grzegorz Chwesewicz
2007-03-29 21:43                                       ` Grzegorz Chwesewicz
2007-03-29 21:55                                         ` Grzegorz Chwesewicz
2007-03-29 14:19                           ` Andi Kleen
2007-03-23 18:13                 ` [1/6] 2.6.21-rc4: known regressions Linus Torvalds
2007-03-23 18:16                   ` Linus Torvalds
2007-03-23 18:28                     ` Linus Torvalds
2007-03-23 18:43                       ` Thomas Gleixner
2007-03-23 12:27             ` Ingo Molnar
2007-03-22 18:24       ` Mariusz Kozłowski
2007-03-18 18:49 ` [2/6] " Adrian Bunk
2007-03-18 19:25   ` Andi Kleen
2007-03-19 16:06   ` Randy Dunlap
2007-03-19 16:15     ` Adrian Bunk
2007-03-19 17:07       ` Randy Dunlap
2007-03-20 15:32   ` Ray Lee
2007-03-18 18:49 ` [3/6] " Adrian Bunk
2007-03-26  1:25   ` Jeff Chua
2007-03-26  4:05     ` Adrian Bunk
2007-03-26  5:37       ` Jeff Chua
2007-03-26 16:26         ` Thomas Gleixner
2007-03-26 17:46           ` Jeff Chua
2007-03-28  7:04             ` Thomas Gleixner
2007-03-28 13:43               ` Maxim
2007-03-28 14:41                 ` Ingo Molnar
2007-03-28 15:01                   ` Maxim
2007-03-28 16:38                     ` Linus Torvalds
2007-03-28 19:38                       ` [linux-pm] " David Brownell
2007-03-28 20:19                         ` Maxim
2007-03-28 20:59                           ` David Brownell
2007-03-28 21:27                             ` Maxim
2007-03-29 22:33                               ` David Brownell
2007-03-29 23:29                                 ` Maxim Levitsky
2007-03-30  0:09                                   ` David Brownell
2007-03-30  0:48                                     ` Maxim Levitsky
2007-03-28 20:42                         ` Linus Torvalds
2007-03-28 21:17                           ` David Brownell
2007-03-28 22:26                           ` Maxim
2007-03-29  4:41                       ` [ PATCH] Add suspend/resume for HPET was: " Maxim
2007-03-29  5:08                         ` Linus Torvalds
2007-03-29  5:47                           ` Maxim
2007-03-29 13:20                             ` Sergei Shtylyov
2007-03-29 13:31                               ` Maxim
2007-03-29 13:46                                 ` [PATCH v2] Add suspend/resume for HPET Maxim Levitsky
2007-03-29 16:53                                   ` Linus Torvalds
2007-03-29 17:28                                     ` Maxim Levitsky
2007-03-29 17:51                                     ` Ingo Molnar
2007-03-29 20:46                                       ` Andi Kleen
2007-03-29 18:11                                   ` Jeff Chua
2007-03-31 15:51                                   ` Thomas Gleixner
2007-03-31 16:01                                     ` Jeff Chua
2007-03-31 16:09                                       ` Thomas Gleixner
2007-03-31 16:09                                     ` Linus Torvalds
2007-03-31 16:33                                       ` Thomas Gleixner
2007-03-31 16:41                                         ` Greg KH
2007-03-31 16:53                                         ` Linus Torvalds
2007-03-31 17:02                                           ` Ingo Molnar
2007-03-31 18:18                                             ` [linux-pm] " David Brownell
2007-03-31 19:32                                               ` David Brownell
2007-04-01  3:13                                                 ` Jeff Chua
2007-04-01  4:13                                                   ` David Brownell
2007-03-31 17:08                                           ` Greg KH
2007-03-31 17:55                                           ` [linux-pm] " David Brownell
2007-03-31 16:56                                     ` Maxim Levitsky
2007-03-31 17:09                                       ` Linus Torvalds
2007-03-31 17:17                                         ` Ingo Molnar
2007-03-31 17:58                                           ` Daniel Walker
2007-03-29 16:35                             ` [ PATCH] Add suspend/resume for HPET was: Re: [3/6] 2.6.21-rc4: known regressions Linus Torvalds
2007-03-29 16:51                               ` Maxim Levitsky
2007-03-29 17:22                                 ` Linus Torvalds
2007-03-29 17:47                                   ` [patch, v2] add suspend/resume for HPET Ingo Molnar
2007-03-28 18:04                 ` [3/6] 2.6.21-rc4: known regressions Michael S. Tsirkin
2007-03-28 18:32                   ` Ingo Molnar
2007-03-28 18:35                   ` Randy Dunlap
2007-03-29 14:24                   ` Jeff Chua
2007-03-18 18:49 ` [4/6] " Adrian Bunk
2007-03-18 18:49 ` [5/6] " Adrian Bunk
2007-03-18 19:07   ` Maxim
2007-03-18 19:22     ` Adrian Bunk
2007-03-18 19:59       ` Maxim
2007-03-18 20:03         ` Maxim
2007-03-18 18:49 ` [6/6] " Adrian Bunk
2007-03-20  2:38   ` David Miller
2007-03-24 19:50     ` David Miller
2007-03-19 20:39 ` 2.6.21-rc4: known regressions with patches available Adrian Bunk
2007-03-20 11:02   ` [Alsa-devel] " Takashi Iwai
2007-03-23 18:48 ` [1/5] 2.6.21-rc4: known regressions (v2) Adrian Bunk
2007-03-25  4:45   ` David Miller
2007-03-25  5:08     ` Paul Collins
2007-03-25 12:22     ` Adrian Bunk
2007-03-23 18:48 ` [2/5] " Adrian Bunk
2007-03-23 21:08   ` Thomas Gleixner
2007-03-24  0:14   ` Ray Lee
2007-03-24  6:40     ` Thomas Gleixner
2007-03-24 18:17       ` Ray Lee
2007-03-24 19:11     ` [PATCH] x86_64: avoid sending LOCAL_TIMER_VECTOR IPI to itself Ingo Molnar
2007-03-25 19:24       ` Ray Lee
2007-03-26 10:01   ` [2/5] 2.6.21-rc4: known regressions (v2) Tejun Heo
2007-03-23 18:50 ` [3/5] " Adrian Bunk
2007-03-23 19:07   ` Maxim
2007-03-23 20:53   ` Rafael J. Wysocki
2007-03-24 17:04   ` Thomas Meyer
2007-03-24 18:02     ` Eric W. Biederman
2007-03-24 18:20       ` Thomas Meyer
2007-03-24 18:47         ` Eric W. Biederman
2007-03-24 20:34           ` Thomas Meyer
2007-03-25  3:39             ` Eric W. Biederman
2007-03-25 11:41               ` Thomas Meyer
2007-03-25 12:03                 ` Eric W. Biederman
2007-03-25 12:28                   ` Rafael J. Wysocki
2007-03-25 12:56                     ` Eric W. Biederman
2007-03-25 19:14                       ` Rafael J. Wysocki
2007-03-25 20:37                         ` Eric W. Biederman
2007-03-26 21:03                           ` Rafael J. Wysocki
2007-03-25 14:17                     ` Thomas Meyer
2007-03-25 18:56                       ` Rafael J. Wysocki
2007-03-25 13:54                   ` Thomas Meyer
2007-03-25 14:48                 ` Adrian Bunk
2007-03-25 17:25                   ` Thomas Meyer
2007-03-25 19:06                     ` Rafael J. Wysocki
2007-03-25 19:31                       ` Rafael J. Wysocki
2007-03-26 20:01               ` Luck, Tony
2007-03-27  3:29                 ` Eric W. Biederman
2007-04-02 15:38                   ` Bjorn Helgaas
2007-04-02 16:38                     ` Bjorn Helgaas
2007-04-02 19:50                     ` Eric W. Biederman
2007-03-25 21:34   ` Frédéric Riss
2007-03-26  6:45     ` Frédéric RISS
2007-03-26  9:14       ` Thomas Gleixner
2007-03-26 10:36         ` Frederic Riss
2007-03-26 18:53         ` Frédéric Riss
2007-03-26 19:02           ` Adrian Bunk
2007-03-26 19:39             ` Frederic Riss
2007-03-26 19:46               ` Adrian Bunk
2007-03-26 10:00   ` Marcus Better
2007-03-26 12:35     ` Pavel Machek
2007-03-26 14:11       ` Marcus Better
2007-03-26 14:34     ` Adrian Bunk
2007-03-26 17:42       ` Marcus Better
2007-03-26 18:48         ` Adrian Bunk
2007-03-27  9:42           ` Marcus Better
2007-03-23 18:50 ` [4/5] " Adrian Bunk
2007-03-23 19:15   ` Thomas Gleixner
2007-03-23 19:15     ` Adrian Bunk
2007-03-23 19:21     ` Thomas Gleixner
2007-03-23 22:23     ` Chuck Ebbert
2007-03-23 22:43       ` Thomas Gleixner
2007-03-23 23:35         ` Thomas Gleixner
2007-03-25 12:42           ` [PATCH] clocksource: Fix thinko in watchdog selection Thomas Gleixner
2007-03-23 23:00       ` [4/5] 2.6.21-rc4: known regressions (v2) Adrian Bunk
2007-03-23 23:05         ` Chuck Ebbert
2007-03-23 19:22   ` Thomas Gleixner
2007-03-24 13:47     ` Thomas Gleixner
2007-03-25 12:31       ` [PATCH] dynticks: fix hrtimer rounding error in next_timer_interrupt Thomas Gleixner
2007-03-23 19:49   ` [4/5] 2.6.21-rc4: known regressions (v2) Thomas Gleixner
     [not found]     ` <20070325071023.GL17532@mellanox.co.il>
2007-03-25  7:37       ` Thomas Gleixner
2007-03-25  8:57         ` Michael S. Tsirkin
2007-03-25 10:17           ` Thomas Gleixner
2007-03-25 10:15             ` Michael S. Tsirkin
2007-03-25 10:27               ` Thomas Gleixner
2007-03-25 10:25                 ` Michael S. Tsirkin
2007-03-25 10:38                   ` Thomas Gleixner
2007-03-25 11:16                     ` Ingo Molnar
2007-03-25 12:09                       ` Thomas Gleixner
2007-03-26 14:19       ` Michael S. Tsirkin
2007-03-23 20:00   ` Thomas Gleixner
2007-03-23 20:08   ` Thomas Gleixner
2007-03-24 13:59     ` Michal Piotrowski
2007-03-24 15:14       ` Thomas Gleixner
2007-03-24 16:13         ` Michal Piotrowski
2007-03-23 21:43   ` john stultz
2007-03-23 21:54     ` Linus Torvalds
2007-03-24  0:44       ` john stultz
2007-03-23 18:50 ` [5/5] " Adrian Bunk
2007-03-24 11:25 ` 2.6.21-rc4: known regressions with patches (v2) Adrian Bunk
2007-03-26 12:37   ` Bob Tracy

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=200703292249.37979.ak@suse.de \
    --to=ak@suse.de \
    --cc=William.Morrow@amd.com \
    --cc=akpm@linux-foundation.org \
    --cc=bunk@stusta.de \
    --cc=cmm@us.ibm.com \
    --cc=ebiederm@xmission.com \
    --cc=g3vbv@blueyonder.co.uk \
    --cc=jens.axboe@oracle.com \
    --cc=jordan.crouse@ldcmail.amd.com \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=m.kozlowski@tuxland.pl \
    --cc=mark.langsdorf@amd.com \
    --cc=michal.k.k.piotrowski@gmail.com \
    --cc=mingo@elte.hu \
    --cc=nickpiggin@yahoo.com.au \
    --cc=npiggin@suse.de \
    --cc=oliver.pntr@gmail.com \
    --cc=pavel@ucw.cz \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=trenn@suse.de \
    /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