From: Thomas Gleixner <tglx@linutronix.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Ingo Molnar <mingo@elte.hu>,
"Michael S. Tsirkin" <mst@mellanox.co.il>,
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>,
Soeren Sonnenburg <kernel@nn7.de>, Len Brown <lenb@kernel.org>
Subject: [PATCH] highres: do not run the TIMER_SOFTIRQ after switching to highres mode
Date: Tue, 06 Mar 2007 18:29:55 +0100 [thread overview]
Message-ID: <1173202195.24738.350.camel@localhost.localdomain> (raw)
In-Reply-To: <Pine.LNX.4.64.0703060817060.5963@woody.linux-foundation.org>
On Tue, 2007-03-06 at 08:44 -0800, Linus Torvalds wrote:
> This is just a coding style thing, but I thought I should really point it
> out, because these kinds of things quite often result in nasty bugs simply
> because the source code is so hard to read properly:
/me pleads guilty !
Replacement patch below.
tglx
--------------------->
The TIMER_SOFTIRQ runs the hrtimers during bootup until a usable
clocksource and clock event sources are registered. The switch to high
resolution mode happens inside of the TIMER_SOFTIRQ, but runs the
softirq afterwards. That way the tick emulation timer, which was set up
in the switch to highres might be executed in the softirq context, which
is a BUG. The rbtree has not to be touched by the softirq after the
highres switch.
This BUG was observed by Andres Salomon, who provided the information to
debug it.
Return early from the softirq, when the switch was sucessful.
Remove also the superfluid hres_active check on top of
hrtimer_switch_to_hres(), as we never get there, once we switched over.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Cc: Andres Salomon <dilinger@debian.org>
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
index de93a81..2e465df 100644
--- a/kernel/hrtimer.c
+++ b/kernel/hrtimer.c
@@ -540,19 +540,18 @@ static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
/*
* Switch to high resolution mode
*/
-static void hrtimer_switch_to_hres(void)
+static int hrtimer_switch_to_hres(void)
{
struct hrtimer_cpu_base *base = &__get_cpu_var(hrtimer_bases);
unsigned long flags;
-
- if (base->hres_active)
- return;
+ int err;
local_irq_save(flags);
- if (tick_init_highres()) {
+ err = tick_init_highres();
+ if (err < 0) {
local_irq_restore(flags);
- return;
+ return err;
}
base->hres_active = 1;
base->clock_base[CLOCK_REALTIME].resolution = KTIME_HIGH_RES;
@@ -565,13 +564,14 @@ static void hrtimer_switch_to_hres(void)
local_irq_restore(flags);
printk(KERN_INFO "Switched to high resolution mode on CPU %d\n",
smp_processor_id());
+ return 0;
}
#else
static inline int hrtimer_hres_active(void) { return 0; }
static inline int hrtimer_is_hres_enabled(void) { return 0; }
-static inline void hrtimer_switch_to_hres(void) { }
+static inline int hrtimer_switch_to_hres(void) { return -EINVAL; }
static inline void hrtimer_force_reprogram(struct hrtimer_cpu_base *base) { }
static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
struct hrtimer_clock_base *base)
@@ -1173,7 +1173,8 @@ void hrtimer_run_queues(void)
* deadlock vs. xtime_lock.
*/
if (tick_check_oneshot_change(!hrtimer_is_hres_enabled()))
- hrtimer_switch_to_hres();
+ if (!hrtimer_switch_to_hres())
+ return;
hrtimer_get_softirq_time(cpu_base);
next prev parent reply other threads:[~2007-03-06 17:23 UTC|newest]
Thread overview: 193+ 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
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 ` Thomas Gleixner [this message]
2007-03-06 17:41 ` [PATCH] highres: do not run the TIMER_SOFTIRQ after switching to highres mode 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
2007-03-03 2:52 [PATCH] dynticks: don't unlock spinlock twice Andres Salomon
2007-03-03 9:02 ` Thomas Gleixner
2007-03-04 11:14 ` Andres Salomon
2007-03-04 13:09 ` [PATCH] highres: Do not run the TIMER_SOFTIRQ after switching to highres mode Thomas Gleixner
2007-03-04 13:12 ` Andres Salomon
2007-03-04 13:23 ` Thomas Gleixner
2007-03-05 7:25 ` Ingo Molnar
2007-03-05 7:50 ` Andres Salomon
2007-03-05 7:52 ` Ingo Molnar
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=1173202195.24738.350.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
all inboxes | Powered by JetHome®