From: Lai Jiangshan <laijs@cn.fujitsu.com>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Ingo Molnar <mingo@elte.hu>,
Peter Zijlstra <peterz@infradead.org>,
Dipankar Sarma <dipankar@in.ibm.com>,
Jan Beulich <jbeulich@novell.com>,
David Howells <dhowells@redhat.com>,
Alexander van Heukelum <heukelum@fastmail.fm>,
"H. Peter Anvin" <hpa@linux.intel.com>,
Andrew Morton <akpm@linux-foundation.org>,
Roland McGrath <roland@redhat.com>,
Oleg Nesterov <oleg@redhat.com>, Serge Hallyn <serue@us.ibm.com>,
linux-kernel@vger.kernel.org,
Christoph Lameter <clameter@sgi.com>,
Sam Ravnborg <sam@ravnborg.org>
Subject: [RFC PATCH 4/5] RCU: Add TASK_RCU_OFFSET
Date: Mon, 28 Mar 2011 11:00:12 +0800 [thread overview]
Message-ID: <4D8FF9BC.7050609@cn.fujitsu.com> (raw)
In-Reply-To: <4D8FF8AD.5080607@cn.fujitsu.com>
We can not include linux/sched.h in linux/rcupdate.h.
If we access task's task_rcu_strut without linux/sched.h included,
We will failed with compiling error.
So we add TASK_RCU_OFFSET, which help us access
task's task_rcu_strut without linux/sched.h included.
Now, task_rcu_struct(), current_task_rcu_struct(), task_of_task_rcu() and
rcu_copy_process() can be used anywhere without linux/sched.h included.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
include/linux/rcupdate.h | 49 +++++++++++++++++++++++++++++++++++++++++----
kernel/kernel-offsets.c | 3 ++
2 files changed, 47 insertions(+), 5 deletions(-)
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index 3500138..a5ed3fe 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -140,11 +140,50 @@ static inline void init_task_rcu_struct(struct task_rcu_struct *task_rcu)
#endif
}
-#define task_rcu_struct(t) (&(t)->task_rcu_struct)
-#define current_task_rcu_struct() task_rcu_struct(current)
-#define task_of_task_rcu(task_rcu) container_of(task_rcu, struct task_struct,\
- task_rcu_struct)
-#define rcu_copy_process(tsk) init_task_rcu_struct(task_rcu_struct(tsk))
+#ifdef __KBUILD_GENARATING__
+/*
+ * Very eary kbuild stage, many important defines including TASK_RCU_OFFSET
+ * are not available, use dummies to avoid compiling errors.
+ */
+static inline
+struct task_rcu_struct *task_rcu_struct(struct task_struct *t)
+{
+ (void)t;
+ return (struct task_rcu_struct *)0x3L;
+}
+
+static inline
+struct task_struct *task_of_task_rcu(struct task_rcu_struct *task_rcu)
+{
+ (void)task_rcu;
+ return (struct task_struct *)-0x3L;
+}
+#else
+/* for generated TASK_RCU_OFFSET */
+#include <generated/kernel-offsets.h>
+
+static inline
+struct task_rcu_struct *task_rcu_struct(struct task_struct *t)
+{
+ return (struct task_rcu_struct *)(((void *)t) + TASK_RCU_OFFSET);
+}
+
+static inline
+struct task_struct *task_of_task_rcu(struct task_rcu_struct *task_rcu)
+{
+ return (struct task_struct *)(((void *)task_rcu) - TASK_RCU_OFFSET);
+}
+#endif
+
+static inline struct task_rcu_struct *current_task_rcu_struct(void)
+{
+ return task_rcu_struct(current);
+}
+
+static inline void rcu_copy_process(struct task_struct *tsk)
+{
+ init_task_rcu_struct(task_rcu_struct(tsk));
+}
#ifdef CONFIG_PREEMPT_RCU
diff --git a/kernel/kernel-offsets.c b/kernel/kernel-offsets.c
index fb73ccf..a890511 100644
--- a/kernel/kernel-offsets.c
+++ b/kernel/kernel-offsets.c
@@ -4,11 +4,14 @@
* Copyright (C) 2010 Lai Jiangshan
*/
+#include <linux/rcupdate.h>
+#include <linux/sched.h>
#include <linux/kbuild.h>
void foo(void);
void foo(void)
{
+ OFFSET(TASK_RCU_OFFSET, task_struct, task_rcu_struct);
}
--
1.7.4
next prev parent reply other threads:[~2011-03-28 2:58 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-28 2:55 [RFC PATCH 0/5] Add kernel-offset file and make rcu_read_[un]lock() included Lai Jiangshan
2011-03-28 2:58 ` [RFC PATCH 1/5] Move task's RCU code to rcupdate.h Lai Jiangshan
2011-03-31 11:31 ` Peter Zijlstra
2011-03-31 23:24 ` Paul E. McKenney
2011-03-28 2:58 ` [RFC PATCH 2/5] kbuild: dedumplicated the generating code Lai Jiangshan
2011-03-28 8:31 ` Jan Beulich
2011-03-31 18:26 ` David Howells
2011-03-28 2:59 ` [RFC PATCH 3/5] kbuild: add kernel-offset file Lai Jiangshan
2011-03-31 18:28 ` David Howells
2011-03-28 3:00 ` Lai Jiangshan [this message]
2011-03-28 8:35 ` [RFC PATCH 4/5] RCU: Add TASK_RCU_OFFSET Jan Beulich
2011-03-29 9:41 ` Lai Jiangshan
2011-03-29 21:14 ` H. Peter Anvin
2011-03-29 21:31 ` Paul E. McKenney
2011-03-29 21:32 ` H. Peter Anvin
2011-03-29 21:47 ` Paul E. McKenney
2011-03-29 22:01 ` H. Peter Anvin
2011-03-30 0:47 ` Paul E. McKenney
2011-03-30 5:25 ` Lai Jiangshan
2011-03-30 7:22 ` Lai Jiangshan
2011-03-30 10:55 ` Michal Marek
2011-03-30 10:57 ` Peter Zijlstra
2011-03-30 11:46 ` Michal Marek
2011-03-31 1:02 ` Lai Jiangshan
2011-03-31 1:21 ` Paul E. McKenney
2011-03-31 1:53 ` Lai Jiangshan
2011-03-31 23:30 ` Paul E. McKenney
2011-04-01 3:28 ` Paul E. McKenney
2011-03-31 8:04 ` Peter Zijlstra
2011-03-31 9:50 ` Lai Jiangshan
2011-03-31 11:18 ` Peter Zijlstra
2011-04-01 1:57 ` Lai Jiangshan
2011-04-01 11:35 ` Peter Zijlstra
2011-04-05 21:54 ` Paul E. McKenney
2011-04-05 23:07 ` Paul E. McKenney
2011-04-06 8:10 ` Peter Zijlstra
2011-04-06 19:21 ` Paul E. McKenney
2011-04-06 20:13 ` Paul E. McKenney
2011-04-06 21:06 ` Peter Zijlstra
2011-04-06 21:27 ` H. Peter Anvin
2011-04-07 0:30 ` Paul E. McKenney
2011-04-07 5:49 ` Lai Jiangshan
2011-04-07 15:47 ` Paul E. McKenney
2011-04-07 16:26 ` Paul E. McKenney
2011-04-08 1:26 ` Lai Jiangshan
2011-04-08 5:13 ` Paul E. McKenney
2011-04-11 3:08 ` Lai Jiangshan
2011-04-11 5:12 ` Paul E. McKenney
2011-04-11 6:01 ` Lai Jiangshan
2011-04-11 8:31 ` Lai Jiangshan
2011-04-11 21:02 ` Paul E. McKenney
2011-04-11 21:24 ` Peter Zijlstra
2011-04-22 7:19 ` Lai Jiangshan
2011-04-22 8:10 ` Peter Zijlstra
2011-04-25 7:21 ` Lai Jiangshan
2011-04-23 20:30 ` Paul E. McKenney
2011-04-11 8:33 ` Lai Jiangshan
2011-04-07 7:05 ` [PATCH 1/4] rcu: split rcupdate.h Lai Jiangshan
2011-04-07 7:07 ` [PATCH 2/4] rcu: make rcudpate.h can use struct task_struct Lai Jiangshan
2011-04-07 7:07 ` [PATCH 3/4] rcu: introduce task_rcu_struct and move task's RCU code to rcupdate_defs.h Lai Jiangshan
2011-04-07 13:40 ` Alexey Dobriyan
2011-04-07 7:08 ` [PATCH 4/4] rcu: declare preemptible __rcu_read_[un]lock() as inline function Lai Jiangshan
2011-04-06 17:41 ` [RFC PATCH 4/5] RCU: Add TASK_RCU_OFFSET Paul E. McKenney
2011-03-31 19:28 ` H. Peter Anvin
2011-03-31 19:25 ` H. Peter Anvin
2011-03-28 3:01 ` [RFC PATCH 5/5] RCU: declare preemptible __rcu_read_[un]lock() as inline function Lai Jiangshan
2011-03-28 22:17 ` [RFC PATCH 0/5] Add kernel-offset file and make rcu_read_[un]lock() included Paul E. McKenney
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=4D8FF9BC.7050609@cn.fujitsu.com \
--to=laijs@cn.fujitsu.com \
--cc=akpm@linux-foundation.org \
--cc=clameter@sgi.com \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=heukelum@fastmail.fm \
--cc=hpa@linux.intel.com \
--cc=jbeulich@novell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=oleg@redhat.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=roland@redhat.com \
--cc=sam@ravnborg.org \
--cc=serue@us.ibm.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.