From: Ingo Molnar <mingo@elte.hu>
To: Dave Hansen <haveblue@us.ibm.com>
Cc: Andrew Morton <akpm@digeo.com>,
lkml <linux-kernel@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>
Subject: Re: 2.5.40-mm2
Date: Wed, 9 Oct 2002 10:12:50 +0200 (CEST) [thread overview]
Message-ID: <Pine.LNX.4.44.0210091009020.6815-100000@localhost.localdomain> (raw)
In-Reply-To: <3DA30B28.8070504@us.ibm.com>
On Tue, 8 Oct 2002, Dave Hansen wrote:
> Hehe. That'll teach me to be optimistic. This is unprocessed, but the
> EIP in tvec_bases should tell the whole story. Something _nasty_ is
> going on.
could you try BK-curr with/without my latest patch? Linus and Vojtech
found and fixed a bug in the keyboard code that caused timer tasklet
oopses.
if it still keeps crashing then please add a printk like this:
if (!fn)
printk("Bad: NULL timer fn of timer %p (data %p).\n",
timer, data);
else
fn(data)
it's the fn's NULL-ness that causes the crashes, right?
Ingo
--- linux/kernel/timer.c.orig 2002-10-08 12:39:46.000000000 +0200
+++ linux/kernel/timer.c 2002-10-08 12:49:50.000000000 +0200
@@ -266,29 +266,31 @@
int del_timer_sync(timer_t *timer)
{
tvec_base_t *base = tvec_bases;
- int i, ret;
+ int i, ret = 0;
- ret = del_timer(timer);
+del_again:
+ ret += del_timer(timer);
- for (i = 0; i < NR_CPUS; i++) {
+ for (i = 0; i < NR_CPUS; i++, base++) {
if (!cpu_online(i))
continue;
if (base->running_timer == timer) {
while (base->running_timer == timer) {
cpu_relax();
- preempt_disable();
- preempt_enable();
+ preempt_check_resched();
}
break;
}
- base++;
}
+ if (timer_pending(timer))
+ goto del_again;
+
return ret;
}
#endif
-static void cascade(tvec_base_t *base, tvec_t *tv)
+static int cascade(tvec_base_t *base, tvec_t *tv)
{
/* cascade all the timers from tv up one level */
struct list_head *head, *curr, *next;
@@ -310,7 +312,8 @@
curr = next;
}
INIT_LIST_HEAD(head);
- tv->index = (tv->index + 1) & TVN_MASK;
+
+ return tv->index = (tv->index + 1) & TVN_MASK;
}
/***
@@ -322,26 +325,18 @@
*/
static inline void __run_timers(tvec_base_t *base)
{
- unsigned long flags;
-
- spin_lock_irqsave(&base->lock, flags);
+ spin_lock_irq(&base->lock);
while ((long)(jiffies - base->timer_jiffies) >= 0) {
struct list_head *head, *curr;
/*
* Cascade timers:
*/
- if (!base->tv1.index) {
- cascade(base, &base->tv2);
- if (base->tv2.index == 1) {
- cascade(base, &base->tv3);
- if (base->tv3.index == 1) {
- cascade(base, &base->tv4);
- if (base->tv4.index == 1)
- cascade(base, &base->tv5);
- }
- }
- }
+ if (!base->tv1.index &&
+ (cascade(base, &base->tv2) == 1) &&
+ (cascade(base, &base->tv3) == 1) &&
+ cascade(base, &base->tv4) == 1)
+ cascade(base, &base->tv5);
repeat:
head = base->tv1.vec + base->tv1.index;
curr = head->next;
@@ -370,7 +365,7 @@
#if CONFIG_SMP
base->running_timer = NULL;
#endif
- spin_unlock_irqrestore(&base->lock, flags);
+ spin_unlock_irq(&base->lock);
}
/******************************************************************/
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/
next prev parent reply other threads:[~2002-10-09 8:12 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-10-06 18:47 2.5.40-mm2 Andrew Morton
2002-10-06 20:47 ` 2.5.40-mm2 Dave Hansen
2002-10-06 21:55 ` 2.5.40-mm2 Andrew Morton
2002-10-06 22:07 ` 2.5.40-mm2 Andrew Morton
2002-10-06 22:11 ` 2.5.40-mm2 Andrew Morton
2002-10-07 5:46 ` 2.5.40-mm2 Dave Hansen
2002-10-06 22:23 ` 2.5.40-mm2 Robert Love
2002-10-06 22:33 ` 2.5.40-mm2 Andrew Morton
2002-10-06 22:38 ` 2.5.40-mm2 Robert Love
2002-10-08 11:05 ` 2.5.40-mm2 Ingo Molnar
2002-10-08 16:23 ` 2.5.40-mm2 Dave Hansen
2002-10-08 16:43 ` 2.5.40-mm2 Dave Hansen
2002-10-08 16:56 ` 2.5.40-mm2 Andrew Morton
2002-10-09 8:12 ` Ingo Molnar [this message]
2002-10-07 17:45 ` 2.5.40-mm2 Badari Pulavarty
2002-10-07 17:55 ` 2.5.40-mm2 Jens Axboe
2002-10-07 18:23 ` 2.5.40-mm2 Andrew Morton
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=Pine.LNX.4.44.0210091009020.6815-100000@localhost.localdomain \
--to=mingo@elte.hu \
--cc=akpm@digeo.com \
--cc=haveblue@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.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