diff options
author | Al Viro <viro@ftp.linux.org.uk> | 2006-01-12 04:05:34 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-12 12:08:50 -0500 |
commit | 9fc658763bf992e778243ebe898b03746151ab88 (patch) | |
tree | 9ae10dfbf30c2301e8b7ae2845c725078088521b /include/linux | |
parent | d7102e95b7b9c00277562c29aad421d2d521c5f6 (diff) |
[PATCH] missing helper - task_stack_page()
Patchset annotates arch/* uses of ->thread_info. Ones that really are about
access of thread_info of given process are simply switched to
task_thread_info(task); ones that deal with access to objects on stack are
switched to new helper - task_stack_page(). A _lot_ of the latter are
actually open-coded instances of "find where pt_regs are"; those are
consolidated into task_pt_regs(task) (many architectures actually have such
helper already).
Note that these annotations are not mandatory - any code not converted to
these helpers still works. However, they clean up a lot of places and have
actually caught a number of bugs, so converting out of tree ports would be a
good idea...
As an example of breakage caught by that stuff, see i386 pt_regs mess - we
used to have it open-coded in a bunch of places and when back in April Stas
had fixed a bug in copy_thread(), the rest had been left out of sync. That
required two followup patches (the latest - just before 2.6.15) _and_ still
had left /proc/*/stat eip field broken. Try ps -eo eip on i386 and watch the
junk...
This patch:
new helper - task_stack_page(task). Returns pointer to the memory object
containing task stack; usually thread_info of task sits in the beginning
of that object.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/sched.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index b5ef92a043a6..a72e17135421 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -1240,6 +1240,7 @@ static inline void task_unlock(struct task_struct *p) | |||
1240 | #ifndef __HAVE_THREAD_FUNCTIONS | 1240 | #ifndef __HAVE_THREAD_FUNCTIONS |
1241 | 1241 | ||
1242 | #define task_thread_info(task) (task)->thread_info | 1242 | #define task_thread_info(task) (task)->thread_info |
1243 | #define task_stack_page(task) ((void*)((task)->thread_info)) | ||
1243 | 1244 | ||
1244 | static inline void setup_thread_stack(struct task_struct *p, struct task_struct *org) | 1245 | static inline void setup_thread_stack(struct task_struct *p, struct task_struct *org) |
1245 | { | 1246 | { |