rpms/kernel/F-9 linux-2.6-x86-32-amd-c1e-force-timer-broadcast-late.patch, NONE, 1.1 kernel.spec, 1.753, 1.754

Chuck Ebbert cebbert at fedoraproject.org
Sun Aug 31 04:51:51 UTC 2008


Author: cebbert

Update of /cvs/pkgs/rpms/kernel/F-9
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv28345

Modified Files:
	kernel.spec 
Added Files:
	linux-2.6-x86-32-amd-c1e-force-timer-broadcast-late.patch 
Log Message:
x86-32: amd c1e force timer broadcast late
  (fixes failure to disable local apic timer)

linux-2.6-x86-32-amd-c1e-force-timer-broadcast-late.patch:

--- NEW FILE linux-2.6-x86-32-amd-c1e-force-timer-broadcast-late.patch ---
x86-32: amd c1e force timer broadcast late

In kernel 2.6.26 the 32-bit x86 timers are started earlier than before.
This breaks AMD c1e detection trying to force timer broadcast for the
local apic timer. Copy the code from the 64-bit kernel to force timer
broadcast late.

This patch is not needed in 2.6.27 because it has new c1e-aware idle code.

Signed-off-by: Chuck Ebbert <cebbert at redhat.com>

--- linux-2.6.26.noarch.orig/arch/x86/kernel/apic_32.c
+++ linux-2.6.26.noarch/arch/x86/kernel/apic_32.c
@@ -552,8 +552,31 @@ void __init setup_boot_APIC_clock(void)
 	setup_APIC_timer();
 }
 
-void __devinit setup_secondary_APIC_clock(void)
+/*
+ * AMD C1E enabled CPUs have a real nasty problem: Some BIOSes set the
+ * C1E flag only in the secondary CPU, so when we detect the wreckage
+ * we already have enabled the boot CPU local apic timer. Check, if
+ * disable_apic_timer is set and the DUMMY flag is cleared. If yes,
+ * set the DUMMY flag again and force the broadcast mode in the
+ * clockevents layer.
+ */
+static void __cpuinit check_boot_apic_timer_broadcast(void)
+{
+	if (!local_apic_timer_disabled ||
+	    (lapic_clockevent.features & CLOCK_EVT_FEAT_DUMMY))
+		return;
+
+	lapic_clockevent.features |= CLOCK_EVT_FEAT_DUMMY;
+
+	local_irq_enable();
+	clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_FORCE,
+			   &boot_cpu_physical_apicid);
+	local_irq_disable();
+}
+
+void __cpuinit setup_secondary_APIC_clock(void)
 {
+	check_boot_apic_timer_broadcast();
 	setup_APIC_timer();
 }
 


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/kernel.spec,v
retrieving revision 1.753
retrieving revision 1.754
diff -u -r1.753 -r1.754
--- kernel.spec	31 Aug 2008 01:48:27 -0000	1.753
+++ kernel.spec	31 Aug 2008 04:51:20 -0000	1.754
@@ -583,6 +583,7 @@
 Patch89: linux-2.6-x86-fdiv-bug-detection-fix.patch
 Patch90: linux-2.6-x86-io-delay-add-hp-f700-quirk.patch
 Patch91: linux-2.6-x86-fix-oprofile-and-hibernation-issues.patch
+Patch92: linux-2.6-x86-32-amd-c1e-force-timer-broadcast-late.patch
 
 # ppc
 Patch140: linux-2.6-ps3-ehci-iso.patch
@@ -1033,6 +1034,8 @@
 ApplyPatch linux-2.6-x86-io-delay-add-hp-f700-quirk.patch
 # oprofile / hibernation fix
 ApplyPatch linux-2.6-x86-fix-oprofile-and-hibernation-issues.patch
+#
+ApplyPatch linux-2.6-x86-32-amd-c1e-force-timer-broadcast-late.patch
 
 #
 # PowerPC
@@ -1819,6 +1822,10 @@
 %kernel_variant_files -a /%{image_install_path}/xen*-%{KVERREL}.xen -e /etc/ld.so.conf.d/kernelcap-%{KVERREL}.xen.conf %{with_xen} xen
 
 %changelog
+* Sat Aug 30 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.26.3-27
+- x86-32: amd c1e force timer broadcast late
+  (fixes failure to disable local apic timer)
+
 * Sat Aug 30 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.26.3-26
 - mm: dirty page tracking race fix
 




More information about the scm-commits mailing list