rpms/kernel/F-7 kernel-2.6.spec, 1.3207, 1.3208 stable-reverts.patch, 1.1, 1.2

Dave Jones (davej) fedora-extras-commits at redhat.com
Mon May 28 17:24:29 UTC 2007


Author: davej

Update of /cvs/pkgs/rpms/kernel/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv19244

Modified Files:
	kernel-2.6.spec stable-reverts.patch 
Log Message:
* Mon May 28 2007 Dave Jones <davej at redhat.com>
- Revert suspect #2.



Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/kernel-2.6.spec,v
retrieving revision 1.3207
retrieving revision 1.3208
diff -u -r1.3207 -r1.3208
--- kernel-2.6.spec	28 May 2007 04:16:53 -0000	1.3207
+++ kernel-2.6.spec	28 May 2007 17:23:54 -0000	1.3208
@@ -2431,6 +2431,9 @@
 
 %changelog
 * Mon May 28 2007 Dave Jones <davej at redhat.com>
+- Revert suspect #2.
+
+* Mon May 28 2007 Dave Jones <davej at redhat.com>
 - Apply 2.6.21.2 & .3 again. Revert suspect #1.
 
 * Sun May 27 2007 Dave Jones <davej at redhat.com>

stable-reverts.patch:

Index: stable-reverts.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/stable-reverts.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- stable-reverts.patch	28 May 2007 04:16:53 -0000	1.1
+++ stable-reverts.patch	28 May 2007 17:23:54 -0000	1.2
@@ -1,4 +1,4 @@
-From davej  Mon May 21 15:21:31 2007
+From davej  Mon May 21 15:27:36 2007
 Return-Path: <chrisw at sous-sol.org>
 X-Spam-Checker-Version: SpamAssassin 3.1.8 (2007-02-13) on
 	gelk.kernelslacker.org
@@ -7,90 +7,183 @@
 	UNPARSEABLE_RELAY,USER_IN_WHITELIST autolearn=ham version=3.1.8
 Received: from pobox.devel.redhat.com [10.11.255.8]
 	by gelk.kernelslacker.org with IMAP (fetchmail-6.3.6)
-	for <davej at localhost> (single-drop); Mon, 21 May 2007 15:21:31 -0400 (EDT)
+	for <davej at localhost> (single-drop); Mon, 21 May 2007 15:27:36 -0400 (EDT)
 Received: from pobox.devel.redhat.com ([unix socket])
 	 by pobox.devel.redhat.com (Cyrus v2.2.12-Invoca-RPM-2.2.12-8.1.RHEL4) with LMTPA;
-	 Mon, 21 May 2007 15:21:10 -0400
+	 Mon, 21 May 2007 15:22:41 -0400
 X-Sieve: CMU Sieve 2.2
 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254])
-	by pobox.devel.redhat.com (8.13.1/8.13.1) with ESMTP id l4LJLAZY021642
-	for <davej at pobox.devel.redhat.com>; Mon, 21 May 2007 15:21:10 -0400
+	by pobox.devel.redhat.com (8.13.1/8.13.1) with ESMTP id l4LJMfF3021884
+	for <davej at pobox.devel.redhat.com>; Mon, 21 May 2007 15:22:41 -0400
 Received: from sous-sol.org (vpn-248-39.boston.redhat.com [10.13.248.39])
-	by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l4LJL8XM012486;
-	Mon, 21 May 2007 15:21:09 -0400
+	by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l4LJMcYw013202;
+	Mon, 21 May 2007 15:22:40 -0400
 Received: from sous-sol.org (localhost.localdomain [127.0.0.1])
-	by sous-sol.org (8.14.1/8.13.7) with ESMTP id l4LJGx5c029628;
-	Mon, 21 May 2007 12:16:59 -0700
+	by sous-sol.org (8.14.1/8.13.7) with ESMTP id l4LJHNAG030380;
+	Mon, 21 May 2007 12:17:23 -0700
 Received: (from chrisw at localhost)
-	by sous-sol.org (8.14.1/8.14.1/Submit) id l4LJGxGk029627;
-	Mon, 21 May 2007 12:16:59 -0700
-Message-Id: <20070521191659.548011000 at sous-sol.org>
+	by sous-sol.org (8.14.1/8.14.1/Submit) id l4LJHN3B030379;
+	Mon, 21 May 2007 12:17:23 -0700
+Message-Id: <20070521191723.247392000 at sous-sol.org>
 References: <20070521191612.800400000 at sous-sol.org>
 User-Agent: quilt/0.46-1
-Date: Mon, 21 May 2007 12:16:16 -0700
+Date: Mon, 21 May 2007 12:16:40 -0700
 From: Chris Wright <chrisw at sous-sol.org>
-To: linux-kernel at vger.kernel.org, stable at kernel.org
+To: linux-kernel at vger.kernel.org, stable at kernel.org,
+        torvalds at linux-foundation.org
 Cc: Justin Forbes <jmforbes at linuxtx.org>,
         Zwane Mwaikambo <zwane at arm.linux.org.uk>,
         "Theodore Ts'o" <tytso at mit.edu>, Randy Dunlap <rdunlap at xenotime.net>,
         Dave Jones <davej at redhat.com>, Chuck Wolber <chuckw at quantumlinux.com>,
         Chris Wedgwood <reviews at ml.cw.f00f.org>,
         Michael Krufky <mkrufky at linuxtv.org>,
-        Chuck Ebbert <cebbert at redhat.com>, torvalds at linux-foundation.org,
-        akpm at linux-foundation.org, alan at lxorguk.ukuu.org.uk,
-        Len Brown <lenb at kernel.org>, linux-acpi at vger.kernel.org,
-        Len Brown <len.brown at intel.com>
-Subject: [patch 04/69] ACPI: Fix 2.6.21 boot regression on P4/HT
-Content-Disposition: inline; filename=acpi-fix-2.6.21-boot-regression-on-p4-ht.patch
+        Chuck Ebbert <cebbert at redhat.com>, akpm at linux-foundation.org,
+        alan at lxorguk.ukuu.org.uk, rostedt at goodmis.org, mlord at pobox.com,
+        tglx at linutronix.de, mingo at elte.hu
+Subject: [patch 28/69] highres/dyntick: prevent xtime lock contention
+Content-Disposition: inline; filename=highres-dyntick-prevent-xtime-lock-contention.patch
 X-Virus-Scanned: ClamAV version 0.90.2, clamav-milter version 0.90.2 on sequoia.sous-sol.org
 X-Virus-Status: Clean
 Status: RO
-Content-Length: 1484
-Lines: 45
+Content-Length: 4678
+Lines: 138
 
 -stable review patch.  If anyone has any objections, please let us know.
 ---------------------
 
-From: Len Brown <lenb at kernel.org>
+From: Thomas Gleixner <tglx at linutronix.de>
 
-Up through 2.6.20 we cleared the FADT.CSTATE_CONTROL field
-for FADT versions before r3, because it made no sense
-for that reserved field to be set for pre-ACPI 2.0 systems.
-
-It turns out that not clearing this field exposes
-Linux to SMM BIOS failures, so do the same in 2.6.21.
-
-http://bugzilla.kernel.org/show_bug.cgi?id=8346
-
-Signed-off-by: Len Brown <len.brown at intel.com>
+While the !highres/!dyntick code assigns the duty of the do_timer() call to
+one specific CPU, this was dropped in the highres/dyntick part during
+development.
+
+Steven Rostedt discovered the xtime lock contention on highres/dyntick due
+to several CPUs trying to update jiffies.
+
+Add the single CPU assignement back.  In the dyntick case this needs to be
+handled carefully, as the CPU which has the do_timer() duty must drop the
+assignement and let it be grabbed by another CPU, which is active. 
+Otherwise the do_timer() calls would not happen during the long sleep.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Acked-by: Ingo Molnar <mingo at elte.hu>
+Cc: Steven Rostedt <rostedt at goodmis.org>
+Acked-by: Mark Lord <mlord at pobox.com>
+Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
 Signed-off-by: Chris Wright <chrisw at sous-sol.org>
 ---
- drivers/acpi/tables/tbfadt.c |   14 ++++++++++++++
- 1 file changed, 14 insertions(+)
 
---- linux-2.6.21.1.orig/drivers/acpi/tables/tbfadt.c
-+++ linux-2.6.21.1/drivers/acpi/tables/tbfadt.c
-@@ -347,6 +347,20 @@ static void acpi_tb_convert_fadt(void)
- 		acpi_gbl_xpm1b_enable.space_id = acpi_gbl_FADT.xpm1a_event_block.space_id;
+ kernel/time/tick-common.c   |    8 +++++++-
+ kernel/time/tick-internal.h |    1 +
+ kernel/time/tick-sched.c    |   42 ++++++++++++++++++++++++++++++++++++++++--
+ 3 files changed, 48 insertions(+), 3 deletions(-)
+
+--- linux-2.6.21.1.orig/kernel/time/tick-common.c
++++ linux-2.6.21.1/kernel/time/tick-common.c
+@@ -31,7 +31,7 @@ DEFINE_PER_CPU(struct tick_device, tick_
+  */
+ ktime_t tick_next_period;
+ ktime_t tick_period;
+-static int tick_do_timer_cpu = -1;
++int tick_do_timer_cpu __read_mostly = -1;
+ DEFINE_SPINLOCK(tick_device_lock);
  
+ /*
+@@ -295,6 +295,12 @@ static void tick_shutdown(unsigned int *
+ 		clockevents_exchange_device(dev, NULL);
+ 		td->evtdev = NULL;
  	}
++	/* Transfer the do_timer job away from this cpu */
++	if (*cpup == tick_do_timer_cpu) {
++		int cpu = first_cpu(cpu_online_map);
++
++		tick_do_timer_cpu = (cpu != NR_CPUS) ? cpu : -1;
++	}
+ 	spin_unlock_irqrestore(&tick_device_lock, flags);
+ }
+ 
+--- linux-2.6.21.1.orig/kernel/time/tick-internal.h
++++ linux-2.6.21.1/kernel/time/tick-internal.h
+@@ -5,6 +5,7 @@ DECLARE_PER_CPU(struct tick_device, tick
+ extern spinlock_t tick_device_lock;
+ extern ktime_t tick_next_period;
+ extern ktime_t tick_period;
++extern int tick_do_timer_cpu __read_mostly;
+ 
+ extern void tick_setup_periodic(struct clock_event_device *dev, int broadcast);
+ extern void tick_handle_periodic(struct clock_event_device *dev);
+--- linux-2.6.21.1.orig/kernel/time/tick-sched.c
++++ linux-2.6.21.1/kernel/time/tick-sched.c
+@@ -221,6 +221,18 @@ void tick_nohz_stop_sched_tick(void)
+ 			ts->tick_stopped = 1;
+ 			ts->idle_jiffies = last_jiffies;
+ 		}
++
++		/*
++		 * If this cpu is the one which updates jiffies, then
++		 * give up the assignment and let it be taken by the
++		 * cpu which runs the tick timer next, which might be
++		 * this cpu as well. If we don't drop this here the
++		 * jiffies might be stale and do_timer() never
++		 * invoked.
++		 */
++		if (cpu == tick_do_timer_cpu)
++			tick_do_timer_cpu = -1;
++
+ 		/*
+ 		 * calculate the expiry time for the next timer wheel
+ 		 * timer
+@@ -338,12 +350,24 @@ static void tick_nohz_handler(struct clo
+ {
+ 	struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
+ 	struct pt_regs *regs = get_irq_regs();
++	int cpu = smp_processor_id();
+ 	ktime_t now = ktime_get();
+ 
+ 	dev->next_event.tv64 = KTIME_MAX;
+ 
 +	/*
-+	 * _CST object and C States change notification start with
-+	 * ACPI 2.0 (FADT r3).  Although the field should be Reserved
-+	 * and 0 before then, some pre-r3 FADT set this field and
-+	 * it results in SMM-related boot failures.  For them, clear it.
++	 * Check if the do_timer duty was dropped. We don't care about
++	 * concurrency: This happens only when the cpu in charge went
++	 * into a long sleep. If two cpus happen to assign themself to
++	 * this duty, then the jiffies update is still serialized by
++	 * xtime_lock.
 +	 */
-+	if ((acpi_gbl_FADT.header.revision < 3) &&
-+		(acpi_gbl_FADT.cst_control != 0)) {
-+			ACPI_WARNING((AE_INFO,
-+				"Ignoring BIOS FADT r%u C-state control",
-+				acpi_gbl_FADT.header.revision));
-+		 	acpi_gbl_FADT.cst_control = 0;
-+	}
++	if (unlikely(tick_do_timer_cpu == -1))
++		tick_do_timer_cpu = cpu;
 +
- }
+ 	/* Check, if the jiffies need an update */
+-	tick_do_update_jiffies64(now);
++	if (tick_do_timer_cpu == cpu)
++		tick_do_update_jiffies64(now);
+ 
+ 	/*
+ 	 * When we are idle and the tick is stopped, we have to touch
+@@ -431,9 +455,23 @@ static enum hrtimer_restart tick_sched_t
+ 	struct hrtimer_cpu_base *base = timer->base->cpu_base;
+ 	struct pt_regs *regs = get_irq_regs();
+ 	ktime_t now = ktime_get();
++	int cpu = smp_processor_id();
++
++#ifdef CONFIG_NO_HZ
++	/*
++	 * Check if the do_timer duty was dropped. We don't care about
++	 * concurrency: This happens only when the cpu in charge went
++	 * into a long sleep. If two cpus happen to assign themself to
++	 * this duty, then the jiffies update is still serialized by
++	 * xtime_lock.
++	 */
++	if (unlikely(tick_do_timer_cpu == -1))
++		tick_do_timer_cpu = cpu;
++#endif
+ 
+ 	/* Check, if the jiffies need an update */
+-	tick_do_update_jiffies64(now);
++	if (tick_do_timer_cpu == cpu)
++		tick_do_update_jiffies64(now);
  
- /******************************************************************************
+ 	/*
+ 	 * Do not call, when we are not in irq context and have
 
 -- 
 




More information about the fedora-extras-commits mailing list