From: Steven Rostedt <rostedt@goodmis.org>
To: Ingo Molnar <mingo@elte.hu>
Cc: LKML <linux-kernel@vger.kernel.org>,
john stultz <johnstul@us.ibm.com>,
tglx@linutronix.de, George Anzinger <george@mvista.com>
Subject: [PATCH RT] fix or hrtimers (was: [ANNOUNCE] 2.6.15-rc5-hrt2 - hrtimers based high resolution patches)
Date: Wed, 11 Jan 2006 21:51:45 -0500 [thread overview]
Message-ID: <1137034306.6197.142.camel@localhost.localdomain> (raw)
In-Reply-To: <1137032072.6197.134.camel@localhost.localdomain>
On Wed, 2006-01-11 at 21:14 -0500, Steven Rostedt wrote:
> Finally! I did it. I have an updated timer_stress test at
> http://www.kihontech.com/tests/rt/timer_stress.c
> that triggers the deadlock that I have been mentioning (and hit once in
> my kernel). But this time I hit it in 2.6.15-rt4-sr1 and got the
> following output:
OK, it's not like me to just show a problem, without at least having
some type of fix for it. Since my last fix, was turned down, and
looking into it further, I now understand why.
The patch below now makes hrtimer_start cancel the timer and lock the
base in one action. It also checks to see if the timer is running, and
if it is, it doesn't do anything. It basically, tests to see if it
should cancel the timer.
This is now included in my rt maintenance patches at:
http://home.stny.rr.com/rostedt/patches/patch-2.6.15-rt4-sr2
But I'll include this patch here too so that you can look at what I've
done.
My test at http://www.kihontech.com/tests/rt/timer_stress.c hasn't
killed this kernel yet. But I'll run it all night on both a UP machine
with the -P (posix timers) and without -P on a SMP machine (setitimer).
-- Steve
Index: linux-2.6.15-rt4/kernel/hrtimer.c
===================================================================
--- linux-2.6.15-rt4.orig/kernel/hrtimer.c 2006-01-11 14:46:30.000000000 -0500
+++ linux-2.6.15-rt4/kernel/hrtimer.c 2006-01-11 21:36:31.000000000 -0500
@@ -610,6 +610,35 @@
}
/**
+ * hrtimer_cancel_and_lock - deactivate a timer and lock its base.
+ *
+ * @timer: hrtimer to stop
+ * @flags: pointer to the flags argument
+ *
+ * Returns:
+ * base of the timer.
+ */
+static struct hrtimer_base *
+hrtimer_cancel_and_lock(struct hrtimer *timer, unsigned long *flags)
+{
+ struct hrtimer_base *base;
+
+retry:
+ base = lock_hrtimer_base(timer, flags);
+
+ if (base->curr_timer == timer) {
+ unlock_hrtimer_base(timer, flags);
+ hrtimer_wait_for_timer();
+ goto retry;
+ }
+
+ remove_hrtimer(timer, base);
+
+ return base;
+
+}
+
+/**
* hrtimer_start - (re)start an relative timer on the current CPU
*
* @timer: the timer to be added
@@ -628,10 +657,7 @@
unsigned long flags;
int ret;
- base = lock_hrtimer_base(timer, &flags);
-
- /* Remove an active timer from the queue: */
- remove_hrtimer(timer, base);
+ base = hrtimer_cancel_and_lock(timer, &flags);
/* Switch the timer base, if necessary: */
new_base = switch_hrtimer_base(timer, base);
next prev parent reply other threads:[~2006-01-12 2:52 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-12-12 11:02 [ANNOUNCE] 2.6.15-rc5-hrt2 - hrtimers based high resolution patches Thomas Gleixner
2005-12-12 13:56 ` Steven Rostedt
2005-12-13 21:05 ` Steven Rostedt
2005-12-14 8:40 ` Ingo Molnar
2005-12-14 8:43 ` Ingo Molnar
2005-12-14 13:48 ` Steven Rostedt
2005-12-14 14:01 ` Thomas Gleixner
2005-12-14 14:01 ` Steven Rostedt
2005-12-14 15:43 ` [PATCH -RT] Add softirq waitqueue for CONFIG_PREEMPT_SOFTIRQ (was: Re: [ANNOUNCE] 2.6.15-rc5-hrt2 ...) Steven Rostedt
2005-12-14 16:17 ` Daniel Walker
2005-12-20 13:28 ` Ingo Molnar
2005-12-14 14:04 ` [ANNOUNCE] 2.6.15-rc5-hrt2 - hrtimers based high resolution patches Steven Rostedt
2005-12-14 19:28 ` Steven Rostedt
2006-01-10 23:59 ` Steven Rostedt
2006-01-12 2:14 ` Steven Rostedt
2006-01-12 2:51 ` Steven Rostedt [this message]
2006-01-12 11:10 ` [PATCH RT] fix or hrtimers (was: [ANNOUNCE] 2.6.15-rc5-hrt2 - hrtimers based high resolution patches) Steven Rostedt
2006-01-17 17:35 ` [ANNOUNCE] 2.6.15-rc5-hrt2 - hrtimers based high resolution patches Thomas Gleixner
2005-12-14 18:33 ` Jeff Carr
2005-12-15 0:41 ` Jeff Carr
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=1137034306.6197.142.camel@localhost.localdomain \
--to=rostedt@goodmis.org \
--cc=george@mvista.com \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.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