From: Bill Huey (hui) <billh@gnuppy.monkey.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Robert Crocombe <rcrocomb@gmail.com>,
linux-kernel@vger.kernel.org, Ingo Molnar <mingo@elte.hu>,
Thomas Gleixner <tglx@linutronix.de>,
Darren Hart <dvhltc@us.ibm.com>
Subject: [Patch] restore the RCU callback to defer put_task_struct() Re: Problems with 2.6.17-rt8
Date: Mon, 7 Aug 2006 19:56:15 -0700 [thread overview]
Message-ID: <20060808025615.GA20364@gnuppy.monkey.org> (raw)
In-Reply-To: <1154615261.32264.6.camel@localhost.localdomain>
[-- Attachment #1: Type: text/plain, Size: 1055 bytes --]
On Thu, Aug 03, 2006 at 10:27:41AM -0400, Steven Rostedt wrote:
...(output and commentary a log deleted)...
> This could also have a side effect that messes things up.
>
> Unfortunately, right now I'm assigned to other tasks and I cant spend
> much more time on this at the moment. So hopefully, Ingo, Thomas or
> Bill, or someone else can help you find the reason for this problem.
Steve and company,
Speaking of which, after talking to Steve about this and confirming this
with a revert of changes. put_task_struct() can't deallocated memory from
either the zone or SLAB cache without taking a sleeping lock. It can't
be called directly from finish_task_switch to reap the thread because of
that (violation in atomic).
It is for this reason the RCU call back to delay processing was put into
place to reap threads and was, seemingly by accident, missing from
patch-2.6.17-rt7 to -rt8. That is what broke it in the first place.
I tested it with a "make -j4" which triggers the warning and it they all
go away now.
Reverse patch attached:
bill
[-- Attachment #2: t.diff --]
[-- Type: text/plain, Size: 1991 bytes --]
============================================================
--- include/linux/sched.h 0ed8993484be9c13728f4ebdaa51fc0f0c229018
+++ include/linux/sched.h 67bbfe7b6d2f4967b795f4a608880892cf3bd6d8
@@ -1105,13 +1110,26 @@
extern void free_task(struct task_struct *tsk);
#define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
+#ifdef CONFIG_PREEMPT_RT
+extern void __put_task_struct_cb(struct rcu_head *rhp);
+
+static inline void put_task_struct(struct task_struct *t)
+{
+ if (atomic_dec_and_test(&t->usage))
+ call_rcu(&t->rcu, __put_task_struct_cb);
+}
+#else
extern void __put_task_struct(struct task_struct *t);
static inline void put_task_struct(struct task_struct *t)
{
+dobject_open_scope();
+dobject_bark_atomic();
if (atomic_dec_and_test(&t->usage))
__put_task_struct(t);
+dobject_close_scope();
}
+#endif
/*
* Per process flags
============================================================
--- kernel/fork.c 506dabd42d242f78e0321594c7723481e0cd87dc
+++ kernel/fork.c d07df07ac627dd27933b4bfb83768461ef28731c
@@ -54,6 +54,8 @@
#include <asm/cacheflush.h>
#include <asm/tlbflush.h>
+#include <linux/dobject.h>
+
/*
* Protected counters by write_lock_irq(&tasklist_lock)
*/
@@ -120,6 +122,26 @@
}
EXPORT_SYMBOL(free_task);
+#ifdef CONFIG_PREEMPT_RT
+void __put_task_struct_cb(struct rcu_head *rhp)
+{
+ struct task_struct *tsk = container_of(rhp, struct task_struct, rcu);
+
+ BUG_ON(atomic_read(&tsk->usage));
+ WARN_ON(!(tsk->flags & PF_DEAD));
+ WARN_ON(!(tsk->exit_state & (EXIT_DEAD | EXIT_ZOMBIE)));
+ WARN_ON(tsk == current);
+
+ security_task_free(tsk);
+ free_uid(tsk->user);
+ put_group_info(tsk->group_info);
+
+ if (!profile_handoff_task(tsk))
+ free_task(tsk);
+}
+
+#else
+
void __put_task_struct(struct task_struct *tsk)
{
WARN_ON(!(tsk->exit_state & (EXIT_DEAD | EXIT_ZOMBIE)));
@@ -134,6 +156,7 @@
if (!profile_handoff_task(tsk))
free_task(tsk);
}
+#endif
void __init fork_init(unsigned long mempages)
{
next prev parent reply other threads:[~2006-08-08 2:56 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <e6babb600608012231r74470b77x6e7eaeab222ee160@mail.gmail.com>
2006-08-02 5:37 ` Problems with 2.6.17-rt8 Robert Crocombe
2006-08-02 17:51 ` Steven Rostedt
2006-08-03 11:48 ` Robert Crocombe
2006-08-03 14:27 ` Steven Rostedt
2006-08-03 15:08 ` Robert Crocombe
2006-08-03 15:27 ` Steven Rostedt
2006-08-03 15:48 ` Robert Crocombe
2006-08-03 16:04 ` Steven Rostedt
2006-08-03 17:16 ` Robert Crocombe
2006-08-03 20:22 ` Bill Huey
2006-08-03 20:54 ` Steven Rostedt
2006-08-03 21:18 ` Bill Huey
2006-08-08 2:56 ` Bill Huey [this message]
2006-08-08 3:05 ` [Patch] restore the RCU callback to defer put_task_struct() " Bill Huey
2006-08-08 18:46 ` Robert Crocombe
2006-08-08 19:06 ` Steven Rostedt
2006-08-08 21:35 ` Robert Crocombe
2006-08-08 21:44 ` Steven Rostedt
2006-08-08 22:10 ` Robert Crocombe
2006-08-09 17:19 ` Robert Crocombe
2006-08-09 0:35 ` Bill Huey
2006-08-11 7:47 ` Bill Huey
2006-08-11 14:52 ` Robert Crocombe
2006-08-09 22:05 ` Esben Nielsen
2006-08-10 0:00 ` Steven Rostedt
2006-08-10 2:18 ` Bill Huey
2006-08-11 1:06 ` Bill Huey
2006-08-11 8:16 ` Esben Nielsen
2006-08-11 8:46 ` Bill Huey
2006-08-11 15:00 ` Robert Crocombe
2006-08-11 21:18 ` Bill Huey
[not found] ` <20060811221054.GA32459@gnuppy.monkey.org>
2006-08-14 17:56 ` Robert Crocombe
2006-08-14 23:44 ` Bill Huey
2006-08-15 10:43 ` Bill Huey
2006-08-15 17:53 ` Robert Crocombe
2006-08-18 11:59 ` Bill Huey
2006-08-22 0:21 ` Robert Crocombe
2006-08-22 1:37 ` rtmutex assert failure (was [Patch] restore the RCU callback...) Bill Huey
2006-08-22 23:20 ` Bill Huey
2006-08-22 23:21 ` Bill Huey
2006-08-23 17:14 ` Robert Crocombe
2006-08-23 17:24 ` Robert Crocombe
2006-08-23 20:20 ` Bill Huey
2006-08-23 21:05 ` Bill Huey
2006-08-23 21:08 ` Bill Huey
2006-08-24 1:22 ` Robert Crocombe
2006-08-24 1:46 ` Bill Huey
2006-08-25 7:19 ` Bill Huey
2006-08-26 1:24 ` Robert Crocombe
2006-08-26 1:28 ` Robert Crocombe
2006-08-26 2:37 ` Robert Crocombe
2006-08-26 10:28 ` Bill Huey
2006-08-26 10:49 ` Bill Huey
2006-08-28 18:33 ` Robert Crocombe
2006-08-28 20:28 ` Bill Huey
2006-08-29 4:05 ` Robert Crocombe
2006-08-29 17:11 ` Bill Huey
2006-08-29 17:19 ` Robert Crocombe
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=20060808025615.GA20364@gnuppy.monkey.org \
--to=billh@gnuppy.monkey.org \
--cc=dvhltc@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rcrocomb@gmail.com \
--cc=rostedt@goodmis.org \
--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