From: Nick Piggin <nickpiggin@yahoo.com.au>
To: Michael Geithe <warpy@gmx.de>
Cc: Ingo Molnar <mingo@elte.hu>,
Linux Kernel list <linux-kernel@vger.kernel.org>,
Florian Schmidt <mista.tapas@gmx.net>
Subject: Re: 2.6.10-rc1-bk4 and kernel/futex.c:542
Date: Tue, 26 Oct 2004 22:04:28 +1000 [thread overview]
Message-ID: <417E3D4C.2010909@yahoo.com.au> (raw)
In-Reply-To: <200410261338.00341.warpy@gmx.de>
[-- Attachment #1: Type: text/plain, Size: 1286 bytes --]
Michael Geithe wrote:
> Hi,
>
> first config with > e100
>
> Oct 26 10:57:33 h2so4 kernel: e100: Intel(R) PRO/100 Network Driver,
> 3.2.3-k2-NAPI
> Oct 26 10:57:33 h2so4 kernel: e100: Copyright(c) 1999-2004 Intel Corporation
>
> Oct 26 11:02:19 h2so4 kernel: Badness in futex_wait at kernel/futex.c:542
> Oct 26 11:02:19 h2so4 kernel: [<c012ba15>] futex_wait+0x180/0x18a
> Oct 26 11:02:19 h2so4 kernel: [<c011532c>] default_wake_function+0x0/0xc
> Oct 26 11:02:19 h2so4 kernel: [<c011532c>] default_wake_function+0x0/0xc
> Oct 26 11:02:19 h2so4 kernel: [<c010a323>] convert_fxsr_from_user+0x15/0xd8
> Oct 26 11:02:19 h2so4 kernel: [<c012bc43>] do_futex+0x35/0x7f
> Oct 26 11:02:19 h2so4 kernel: [<c01dbd77>] copy_from_user+0x34/0x61
> Oct 26 11:02:19 h2so4 kernel: [<c012bd6d>] sys_futex+0xe0/0xec
> Oct 26 11:02:19 h2so4 kernel: [<c0103da5>] sysenter_past_esp+0x52/0x71
>
> and second config with > eepro100
>
> Oct 26 13:12:25 h2so4 kernel: eepro100.c:v1.09j-t 9/29/99 Donald Becker
> http://www.scyld.com/network/eepro100.html
> Oct 26 13:12:25 h2so4 kernel: eepro100.c: $Revision: 1.36 $ 2000/11/17
> Modified by Andrey V. Savochkin <saw@saw.sw.com.sg> and others
>
> and i dont see this message again.
>
Hi,
Can you try the following patch and see what it says?
[-- Attachment #2: futex-debug.patch --]
[-- Type: text/x-patch, Size: 3808 bytes --]
---
linux-2.6-npiggin/include/linux/sched.h | 1 +
linux-2.6-npiggin/kernel/futex.c | 15 +++++++++++++--
linux-2.6-npiggin/kernel/sched.c | 8 ++++++++
linux-2.6-npiggin/kernel/timer.c | 12 +++++++++++-
4 files changed, 33 insertions(+), 3 deletions(-)
diff -puN kernel/futex.c~futex-debug kernel/futex.c
--- linux-2.6/kernel/futex.c~futex-debug 2004-10-26 21:59:06.000000000 +1000
+++ linux-2.6-npiggin/kernel/futex.c 2004-10-26 21:59:55.000000000 +1000
@@ -271,7 +271,11 @@ static void wake_futex(struct futex_q *q
* The lock in wake_up_all() is a crucial memory barrier after the
* list_del_init() and also before assigning to q->lock_ptr.
*/
+
+ current->flags |= PF_FUTEX_DEBUG;
wake_up_all(&q->waiters);
+ current->flags &= ~PF_FUTEX_DEBUG;
+
/*
* The waiting task can free the futex_q as soon as this is written,
* without taking any locks. This must come last.
@@ -524,8 +528,11 @@ static int futex_wait(unsigned long uadd
* !list_empty() is safe here without any lock.
* q.lock_ptr != 0 is not safe, because of ordering against wakeup.
*/
- if (likely(!list_empty(&q.list)))
+ if (likely(!list_empty(&q.list))) {
+ current->flags |= PF_FUTEX_DEBUG;
time = schedule_timeout(time);
+ current->flags &= ~PF_FUTEX_DEBUG;
+ }
__set_current_state(TASK_RUNNING);
/*
@@ -539,7 +546,11 @@ static int futex_wait(unsigned long uadd
if (time == 0)
return -ETIMEDOUT;
/* A spurious wakeup should never happen. */
- WARN_ON(!signal_pending(current));
+ if (!signal_pending(current)) {
+ printk("futex_wait woken: %lu %i %lu\n",
+ uaddr, val, time);
+ WARN_ON(1);
+ }
return -EINTR;
out_unqueue:
diff -puN include/linux/sched.h~futex-debug include/linux/sched.h
--- linux-2.6/include/linux/sched.h~futex-debug 2004-10-26 21:59:06.000000000 +1000
+++ linux-2.6-npiggin/include/linux/sched.h 2004-10-26 22:01:01.000000000 +1000
@@ -701,6 +701,7 @@ do { if (atomic_dec_and_test(&(tsk)->usa
#define PF_LESS_THROTTLE 0x00100000 /* Throttle me less: I clean memory */
#define PF_SYNCWRITE 0x00200000 /* I am doing a sync write */
#define PF_BORROWED_MM 0x00400000 /* I am a kthread doing use_mm */
+#define PF_FUTEX_DEBUG 0x00800000
#ifdef CONFIG_SMP
extern int set_cpus_allowed(task_t *p, cpumask_t new_mask);
diff -puN kernel/sched.c~futex-debug kernel/sched.c
--- linux-2.6/kernel/sched.c~futex-debug 2004-10-26 21:59:06.000000000 +1000
+++ linux-2.6-npiggin/kernel/sched.c 2004-10-26 22:02:51.000000000 +1000
@@ -993,6 +993,14 @@ static int try_to_wake_up(task_t * p, un
old_state = p->state;
if (!(old_state & state))
goto out;
+
+ if ((p->flags & PF_FUTEX_DEBUG)
+ && !(current->flags & PF_FUTEX_DEBUG)) {
+ printk("%s %i waking %s: %i %i\n",
+ current->comm, (int)in_interrupt(),
+ p->comm, p->tgid, p->pid);
+ WARN_ON(1);
+ }
if (p->array)
goto out_running;
diff -puN kernel/timer.c~futex-debug kernel/timer.c
--- linux-2.6/kernel/timer.c~futex-debug 2004-10-26 21:59:17.000000000 +1000
+++ linux-2.6-npiggin/kernel/timer.c 2004-10-26 21:59:55.000000000 +1000
@@ -1083,6 +1083,13 @@ static void process_timeout(unsigned lon
wake_up_process((task_t *)__data);
}
+static void futex_timeout(unsigned long __data)
+{
+ current->flags |= PF_FUTEX_DEBUG;
+ wake_up_process((task_t *)__data);
+ current->flags &= ~PF_FUTEX_DEBUG;
+}
+
/**
* schedule_timeout - sleep until timeout
* @timeout: timeout value in jiffies
@@ -1149,7 +1156,10 @@ fastcall signed long __sched schedule_ti
init_timer(&timer);
timer.expires = expire;
timer.data = (unsigned long) current;
- timer.function = process_timeout;
+ if (current->flags & PF_FUTEX_DEBUG)
+ timer.function = futex_timeout;
+ else
+ timer.function = process_timeout;
add_timer(&timer);
schedule();
_
next prev parent reply other threads:[~2004-10-26 12:11 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-10-26 9:35 2.6.10-rc1-bk4 and kernel/futex.c:542 Michael Geithe
2004-10-26 11:31 ` Florian Schmidt
2004-10-26 11:24 ` Ingo Molnar
2004-10-26 11:38 ` Michael Geithe
2004-10-26 12:04 ` Nick Piggin [this message]
2004-10-26 18:50 ` Ingo Molnar
2004-10-26 17:21 ` Michal Schmidt
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=417E3D4C.2010909@yahoo.com.au \
--to=nickpiggin@yahoo.com.au \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mista.tapas@gmx.net \
--cc=warpy@gmx.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