linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: 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>,
	Emil Karlson <jkarlson@cc.hut.fi>,
	"Michael S. Tsirkin" <mst@mellanox.co.il>,
	Ingo Molnar <mingo@elte.hu>, Soeren Sonnenburg <kernel@nn7.de>,
	Len Brown <lenb@kernel.org>
Subject: Re: [5/6] 2.6.21-rc2: known regressions
Date: Tue, 06 Mar 2007 01:25:53 +0100	[thread overview]
Message-ID: <1173140753.24738.246.camel@localhost.localdomain> (raw)
In-Reply-To: <Pine.LNX.4.64.0703051542030.3998@woody.linux-foundation.org>

On Mon, 2007-03-05 at 15:45 -0800, Linus Torvalds wrote:
> 
> On Tue, 6 Mar 2007, Thomas Gleixner wrote:
> > > 
> > > Subject    : macbook pro suspend to ram broken  (clockevents)
> > > References : http://lkml.org/lkml/2007/3/4/110
> > > Submitter  : Soeren Sonnenburg <kernel@nn7.de>
> > > Caused-By  : Thomas Gleixner <tglx@linutronix.de>
> > >              commit e9e2cdb412412326c4827fc78ba27f410d837e6e
> > > Status     : unknown
> > 
> > I can reproduce this on my dual core VAIO. There are some issues:
> 
> Yeah, I think I can too, on my dual-core Mac Mini. 
> 
> I'm not done with my bisection, but e9e2cdb4 is among the 28 commits left, 
> so I'm pretty sure I'm hitting the same bug. I'll do a few more bootups to 
> be 100% sure.

I just got the resume fix cleaned up. The suspend / resume thing was
dropped unintentionally during the -mm code reshuffling.

It still needs the broadcast fix though.

Does this make the problem go away ?

	tglx

diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c
index 12b3efe..5567745 100644
--- a/kernel/time/tick-broadcast.c
+++ b/kernel/time/tick-broadcast.c
@@ -284,6 +284,42 @@ void tick_shutdown_broadcast(unsigned int *cpup)
 	spin_unlock_irqrestore(&tick_broadcast_lock, flags);
 }
 
+void tick_suspend_broadcast(void)
+{
+	struct clock_event_device *bc;
+	unsigned long flags;
+
+	spin_lock_irqsave(&tick_broadcast_lock, flags);
+
+	bc = tick_broadcast_device.evtdev;
+	if (bc && tick_broadcast_device.mode == TICKDEV_MODE_PERIODIC)
+		clockevents_set_mode(bc, CLOCK_EVT_MODE_SHUTDOWN);
+
+	spin_unlock_irqrestore(&tick_broadcast_lock, flags);
+}
+
+int tick_resume_broadcast(void)
+{
+	struct clock_event_device *bc;
+	unsigned long flags;
+	int broadcast = 0;
+
+	spin_lock_irqsave(&tick_broadcast_lock, flags);
+
+	bc = tick_broadcast_device.evtdev;
+	if (bc) {
+		if (tick_broadcast_device.mode == TICKDEV_MODE_PERIODIC &&
+		    !cpus_empty(tick_broadcast_mask))
+			tick_broadcast_start_periodic(bc);
+
+		broadcast = cpu_isset(smp_processor_id(), tick_broadcast_mask);
+	}
+	spin_unlock_irqrestore(&tick_broadcast_lock, flags);
+
+	return broadcast;
+}
+
+
 #ifdef CONFIG_TICK_ONESHOT
 
 static cpumask_t tick_broadcast_oneshot_mask;
diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c
index 0986a2b..43ba1bd 100644
--- a/kernel/time/tick-common.c
+++ b/kernel/time/tick-common.c
@@ -298,6 +298,28 @@ static void tick_shutdown(unsigned int *cpup)
 	spin_unlock_irqrestore(&tick_device_lock, flags);
 }
 
+static void tick_suspend_periodic(void)
+{
+	struct tick_device *td = &__get_cpu_var(tick_cpu_device);
+	unsigned long flags;
+
+	spin_lock_irqsave(&tick_device_lock, flags);
+	if (td->mode == TICKDEV_MODE_PERIODIC)
+		clockevents_set_mode(td->evtdev, CLOCK_EVT_MODE_SHUTDOWN);
+	spin_unlock_irqrestore(&tick_device_lock, flags);
+}
+
+static void tick_resume_periodic(void)
+{
+	struct tick_device *td = &__get_cpu_var(tick_cpu_device);
+	unsigned long flags;
+
+	spin_lock_irqsave(&tick_device_lock, flags);
+	if (td->mode == TICKDEV_MODE_PERIODIC)
+		tick_setup_periodic(td->evtdev, 0);
+	spin_unlock_irqrestore(&tick_device_lock, flags);
+}
+
 /*
  * Notification about clock event devices
  */
@@ -325,6 +347,16 @@ static int tick_notify(struct notifier_block *nb, unsigned long reason,
 		tick_shutdown(dev);
 		break;
 
+	case CLOCK_EVT_NOTIFY_SUSPEND:
+		tick_suspend_periodic();
+		tick_suspend_broadcast();
+		break;
+
+	case CLOCK_EVT_NOTIFY_RESUME:
+		if (!tick_resume_broadcast())
+			tick_resume_periodic();
+		break;
+
 	default:
 		break;
 	}
diff --git a/kernel/time/tick-internal.h b/kernel/time/tick-internal.h
index 54861a0..75890ef 100644
--- a/kernel/time/tick-internal.h
+++ b/kernel/time/tick-internal.h
@@ -67,6 +67,8 @@ extern int tick_check_broadcast_device(struct clock_event_device *dev);
 extern int tick_is_broadcast_device(struct clock_event_device *dev);
 extern void tick_broadcast_on_off(unsigned long reason, int *oncpu);
 extern void tick_shutdown_broadcast(unsigned int *cpup);
+extern void tick_suspend_broadcast(void);
+extern int tick_resume_broadcast(void);
 
 extern void
 tick_set_periodic_handler(struct clock_event_device *dev, int broadcast);
@@ -90,6 +92,8 @@ static inline int tick_device_uses_broadcast(struct clock_event_device *dev,
 static inline void tick_do_periodic_broadcast(struct clock_event_device *d) { }
 static inline void tick_broadcast_on_off(unsigned long reason, int *oncpu) { }
 static inline void tick_shutdown_broadcast(unsigned int *cpup) { }
+static inline void tick_suspend_broadcast(void) { }
+static inline int tick_resume_broadcast(void) { return 0; }
 
 /*
  * Set the periodic handler in non broadcast mode
diff --git a/kernel/timer.c b/kernel/timer.c
index 6663a87..718437f 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -997,6 +997,9 @@ static int timekeeping_resume(struct sys_device *dev)
 	write_sequnlock_irqrestore(&xtime_lock, flags);
 
 	touch_softlockup_watchdog();
+
+	clockevents_notify(CLOCK_EVT_NOTIFY_RESUME, NULL);
+
 	/* Resume hrtimers */
 	clock_was_set();
 
@@ -1011,6 +1014,9 @@ static int timekeeping_suspend(struct sys_device *dev, pm_message_t state)
 	timekeeping_suspended = 1;
 	timekeeping_suspend_time = read_persistent_clock();
 	write_sequnlock_irqrestore(&xtime_lock, flags);
+
+	clockevents_notify(CLOCK_EVT_NOTIFY_SUSPEND, NULL);
+
 	return 0;
 }
 



  reply	other threads:[~2007-03-06  0:19 UTC|newest]

Thread overview: 187+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-28  5:16 Linux 2.6.21-rc2 Linus Torvalds
2007-02-28  5:50 ` Gabriel C
2007-02-28  7:13 ` [PATCH] affinity is not defined in non-smp kernels - i386 Fernando Luis Vázquez Cao
2007-02-28  7:16   ` [PATCH] affinity is not defined in non-smp kernels - i386 (v2) Fernando Luis Vázquez Cao
2007-02-28  7:24   ` [PATCH] affinity is not defined in non-smp kernels - i386 Eric W. Biederman
2007-02-28 17:31     ` Bill Davidsen
2007-02-28 18:21       ` Eric W. Biederman
2007-02-28 18:30       ` Linus Torvalds
2007-02-28  7:42   ` [PATCH] affinity is not defined in non-smp kernels - i386 (v2) Fernando Luis Vázquez Cao
2007-02-28  7:17 ` [PATCH] affinity is not defined in non-smp kernels - x86_64 Fernando Luis Vázquez Cao
2007-02-28  7:23 ` Linux 2.6.21-rc2 David Brown
2007-02-28  7:39 ` Brice Goglin
2007-02-28 13:09   ` Eric W. Biederman
2007-02-28 16:44     ` David Brown
2007-02-28 17:07       ` Randy Dunlap
2007-02-28  7:41 ` [PATCH] affinity is not defined in non-smp kernels - x86_64 Fernando Luis Vázquez Cao
2007-02-28  7:59 ` Linux 2.6.21-rc2 Damien Wyart
2007-03-05  1:50 ` [1/6] 2.6.21-rc2: known regressions Adrian Bunk
2007-03-05  2:26   ` Andrew Morton
2007-03-05  3:35   ` Greg KH
2007-03-06  0:55     ` Johannes Berg
2007-03-05  4:01   ` Mark Lord
2007-03-05  4:34     ` Greg KH
2007-03-05 12:42       ` Marcel Holtmann
2007-03-05  4:34   ` [BUG} usb regression in 2.6.21-rc2-git3 Mark Lord
2007-03-05  4:37     ` [BUG] sdhci regression in 2.6.21-rc2 Mark Lord
2007-03-05  5:36       ` Pierre Ossman
2007-03-05 14:25         ` Mark Lord
2007-03-05 15:19           ` Mark Lord
2007-03-06  4:17             ` Andrew Morton
2007-03-06  5:47               ` Pierre Ossman
2007-03-06  6:09                 ` Andrew Morton
2007-03-06  7:23                   ` Pierre Ossman
2007-03-05 15:20           ` Pierre Ossman
2007-03-05 15:23             ` Pierre Ossman
2007-03-05 15:35               ` Mark Lord
2007-03-05 16:00                 ` Pierre Ossman
2007-03-05 16:18                   ` Mark Lord
2007-03-05  4:43     ` [BUG} usb regression in 2.6.21-rc2-git3 Mark Lord
2007-03-12 14:56     ` [BUG} usb-serial " Mark Lord
2007-03-12 15:06       ` Oliver Neukum
2007-03-12 15:13         ` Mark Lord
2007-03-12 15:27           ` Oliver Neukum
2007-03-12 15:29           ` Greg KH
2007-03-12 15:38             ` Oliver Neukum
2007-03-12 16:03             ` Mark Lord
2007-03-12 16:10               ` Greg KH
2007-03-12 16:22                 ` Mark Lord
2007-03-12 16:11               ` Mark Lord
2007-03-12 16:14                 ` Mark Lord
2007-03-12 16:27                   ` Mark Lord
2007-03-12 16:50                     ` Mark Lord
2007-03-12 18:48                       ` Oliver Neukum
2007-03-12 20:22                         ` [PATCH] usb-serial regression (Oops) in 2.6.21-rc* Mark Lord
2007-03-12 20:33                           ` Greg KH
2007-03-12 22:20                             ` Mark Lord
2007-03-12 22:42                             ` Jim Radford
2007-03-12 22:59                               ` [PATCH] usb-serial regression fix Jim Radford
2007-03-13  0:18                                 ` Greg KH
2007-03-13  0:41                                   ` Jim Radford
2007-03-13  1:55                                     ` Mark Lord
2007-03-13  9:14                                       ` Jim Radford
2007-03-13 10:14                                         ` Oliver Neukum
2007-03-13 13:39                                           ` Mark Lord
2007-03-13 13:50                                             ` Oliver Neukum
2007-03-13 13:55                                         ` Mark Lord
2007-03-13 15:30                                           ` Jim Radford
2007-03-13 16:35                                             ` Mark Lord
2007-03-12 16:28                 ` [BUG} usb-serial regression in 2.6.21-rc2-git3 Oliver Neukum
2007-03-12 15:31       ` Greg KH
2007-03-07 11:06   ` [1/6] 2.6.21-rc2: known regressions Jeff Garzik
2007-03-07 22:17     ` Albert Hopkins
2007-03-05  1:50 ` [2/6] " Adrian Bunk
2007-03-07 11:09   ` Jeff Garzik
2007-03-07 16:10     ` Linus Torvalds
2007-03-08 12:03     ` Ash Milsted
2007-03-08 12:31   ` Michael S. Tsirkin
2007-03-08 15:11     ` Jeff Chua
2007-03-08 18:01     ` Linus Torvalds
2007-03-08 19:06       ` Ingo Molnar
2007-03-08 19:10         ` Ingo Molnar
2007-03-08 19:47         ` Michael S. Tsirkin
2007-03-08 20:10           ` Ingo Molnar
2007-03-08 19:25       ` Ingo Molnar
2007-03-08 23:07         ` Ingo Molnar
2007-03-08 23:12           ` Ingo Molnar
2007-03-08 23:28             ` Ingo Molnar
2007-03-08 23:49           ` Linus Torvalds
2007-03-09 10:56             ` Ingo Molnar
2007-03-09 18:00               ` Linus Torvalds
2007-03-09 11:19             ` Pavel Machek
2007-03-18 16:07               ` Ingo Molnar
2007-03-18 16:40                 ` [linux-pm] " Jim Gettys
2007-03-19 19:08                   ` BSOD (was: [2/6] 2.6.21-rc2: known regressions) Pete Zaitcev
2007-03-19 19:38                     ` BSOD David Miller
2007-03-19 19:54                       ` BSOD Jesse Barnes
2007-03-19 20:05                         ` BSOD David Miller
2007-03-19 20:20                           ` BSOD Jesse Barnes
2007-03-19 20:20                           ` BSOD Jim Gettys
2007-03-20  9:19                           ` BSOD Paul Mackerras
2007-03-20 20:33                             ` BSOD Jim Gettys
2007-03-19 20:33                   ` [linux-pm] [2/6] 2.6.21-rc2: known regressions Bill Davidsen
2007-03-19 22:08                     ` Jim Gettys
2007-03-20 14:44                       ` Bill Davidsen
2007-03-09 17:48             ` Johannes Stezenbach
2007-03-09 23:35               ` Pavel Machek
2007-03-10  9:01                 ` Ingo Molnar
2007-03-10 11:43                   ` Stefan Seyfried
2007-03-10 13:53                     ` Johannes Stezenbach
2007-03-10 15:18                     ` Ingo Molnar
2007-03-10 22:08                       ` Pavel Machek
2007-03-11  8:20                         ` Ingo Molnar
2007-03-12  6:34                           ` Stefan Seyfried
2007-03-10 22:04                   ` s2ram (was Re: [2/6] 2.6.21-rc2: known regressions) Pavel Machek
2007-03-08 19:46       ` [2/6] 2.6.21-rc2: known regressions Michael S. Tsirkin
2007-03-08 19:57       ` Michael S. Tsirkin
     [not found]         ` <20070311120802.GA8823@elte.hu>
2007-03-12 20:20           ` Michael S. Tsirkin
2007-03-17 21:41             ` Michael S. Tsirkin
2007-03-17 22:33               ` Thomas Gleixner
2007-03-21 17:28                 ` Michael S. Tsirkin
2007-03-05  1:50 ` [3/6] " Adrian Bunk
2007-03-05  3:58   ` Michal Jaegermann
2007-03-06 17:08   ` Alan Cox
2007-03-07 11:12   ` Jeff Garzik
2007-03-10  1:09     ` Mathieu Bérard
2007-03-10  4:11       ` and try remove another quirk on this computers " Sergio Monteiro Basto
2007-03-10  5:41         ` Linus Torvalds
2007-03-11  4:32           ` Sergio Monteiro Basto
2007-03-12 11:37       ` Tejun Heo
2007-03-13 12:31         ` Mathieu Bérard
2007-03-13 12:41           ` Tejun Heo
2007-03-13 20:56             ` Mathieu Bérard
2007-03-14  6:07               ` Tejun Heo
2007-03-14 10:49                 ` Mathieu Bérard
2007-03-05  1:50 ` [4/6] " Adrian Bunk
2007-03-05 10:35   ` Antonino A. Daplas
2007-03-05 15:06     ` Andrew
2007-03-08 23:28     ` Len Brown
2007-03-09 19:25       ` Andrew
2007-03-05 12:21   ` Richard Purdie
2007-03-05  1:50 ` [5/6] " Adrian Bunk
2007-03-05  7:57   ` Ingo Molnar
2007-03-05  8:13     ` Andrew Morton
2007-03-05 15:25       ` Daniel Walker
2007-03-05 15:27         ` Ingo Molnar
2007-03-05 16:42           ` Daniel Walker
2007-03-05 19:30             ` Ingo Molnar
2007-03-05 16:14     ` Bill Davidsen
2007-03-05 16:21       ` Ingo Molnar
2007-03-05 23:12     ` Adrian Bunk
2007-03-05 23:43   ` Thomas Gleixner
2007-03-05 23:45     ` Linus Torvalds
2007-03-06  0:25       ` Thomas Gleixner [this message]
2007-03-06  6:49         ` Soeren Sonnenburg
2007-03-06  7:49           ` Soeren Sonnenburg
2007-03-06  0:38       ` Linus Torvalds
2007-03-06  1:02         ` Thomas Gleixner
2007-03-06  1:31           ` Linus Torvalds
2007-03-06  2:18             ` Linus Torvalds
2007-03-06  7:25               ` Ingo Molnar
2007-03-06  8:09                 ` Thomas Gleixner
2007-03-06 10:33               ` Michael S. Tsirkin
2007-03-06 10:37                 ` Ingo Molnar
2007-03-06 10:46                   ` Michael S. Tsirkin
2007-03-06 11:32                     ` Ingo Molnar
2007-03-06 12:20                       ` Michael S. Tsirkin
2007-03-06 16:44                       ` Linus Torvalds
2007-03-06 17:05                         ` Ingo Molnar
2007-03-06 17:29                         ` [PATCH] highres: do not run the TIMER_SOFTIRQ after switching to highres mode Thomas Gleixner
2007-03-06 17:41                           ` Linus Torvalds
2007-03-16 15:18                         ` [5/6] 2.6.21-rc2: known regressions Randy Dunlap
2007-03-06 11:36                     ` Soeren Sonnenburg
2007-03-06 12:07                       ` Ingo Molnar
2007-03-06 12:15                         ` Michael S. Tsirkin
2007-03-06 12:51                         ` Ingo Molnar
2007-03-06 12:55                           ` Michael S. Tsirkin
2007-03-06 13:03                             ` Ingo Molnar
2007-03-06 13:09                           ` Thomas Gleixner
2007-03-06 12:09                       ` Jeff Chua
2007-03-11 17:32                     ` Pavel Machek
2007-03-06 10:33               ` Michael S. Tsirkin
2007-03-05  1:50 ` [6/6] " Adrian Bunk
2007-03-05  2:07   ` David Miller
2007-03-05  2:26     ` Adrian Bunk
2007-03-05  2:29       ` David Miller
2007-03-05  4:42       ` David Miller
2007-03-05  3:32   ` 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=1173140753.24738.246.camel@localhost.localdomain \
    --to=tglx@linutronix.de \
    --cc=akpm@linux-foundation.org \
    --cc=bunk@stusta.de \
    --cc=jkarlson@cc.hut.fi \
    --cc=kernel@nn7.de \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michal.k.k.piotrowski@gmail.com \
    --cc=mingo@elte.hu \
    --cc=mst@mellanox.co.il \
    --cc=torvalds@linux-foundation.org \
    /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;
as well as URLs for NNTP newsgroup(s).