diff options
| author | Andrew Morton <akpm@osdl.org> | 2004-04-11 22:41:20 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-04-11 22:41:20 -0700 |
| commit | b283f09cf8f51c29bf90e42e22099f76d0f33378 (patch) | |
| tree | 7aee46f073ec3c8fc678b64eb430e2958ff0de1e /arch/alpha/kernel | |
| parent | ee28db843649533f5650186251ae4a8bd49a3da9 (diff) | |
[PATCH] Fix get_wchan() FIXME wrt. order of functions
From: William Lee Irwin III <wli@holomorphy.com>
This addresses the issue with get_wchan() that the various functions acting
as scheduling-related primitives are not, in fact, contiguous in the text
segment. It creates an ELF section for scheduling primitives to be placed
in, and places currently-detected (i.e. skipped during stack decoding)
scheduling primitives and others like io_schedule() and down(), which are
currently missed by get_wchan() code, into this section also.
The net effects are more reliability of get_wchan()'s results and the new
ability, made use of by this code, to arbitrarily place scheduling
primitives in the source code without disturbing get_wchan()'s accuracy.
Suggestions by Arnd Bergmann and Matthew Wilcox regarding reducing the
invasiveness of the patch were incorporated during prior rounds of review.
I've at least tried to sweep all arches in this patch.
Diffstat (limited to 'arch/alpha/kernel')
| -rw-r--r-- | arch/alpha/kernel/process.c | 2 | ||||
| -rw-r--r-- | arch/alpha/kernel/semaphore.c | 9 | ||||
| -rw-r--r-- | arch/alpha/kernel/vmlinux.lds.S | 1 |
3 files changed, 6 insertions, 6 deletions
diff --git a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c index e427bae12ffe..297e4b48bfe2 100644 --- a/arch/alpha/kernel/process.c +++ b/arch/alpha/kernel/process.c @@ -513,8 +513,6 @@ thread_saved_pc(task_t *t) /* * These bracket the sleeping functions.. */ -extern void scheduling_functions_start_here(void); -extern void scheduling_functions_end_here(void); #define first_sched ((unsigned long) scheduling_functions_start_here) #define last_sched ((unsigned long) scheduling_functions_end_here) diff --git a/arch/alpha/kernel/semaphore.c b/arch/alpha/kernel/semaphore.c index b52a0df303fe..4d60a0ccd6f7 100644 --- a/arch/alpha/kernel/semaphore.c +++ b/arch/alpha/kernel/semaphore.c @@ -7,6 +7,7 @@ #include <linux/errno.h> #include <linux/sched.h> +#include <linux/init.h> /* * This is basically the PPC semaphore scheme ported to use @@ -60,7 +61,7 @@ static inline int __sem_update_count(struct semaphore *sem, int incr) * Either form may be used in conjunction with "up()". */ -void +void __sched __down_failed(struct semaphore *sem) { struct task_struct *tsk = current; @@ -101,7 +102,7 @@ __down_failed(struct semaphore *sem) #endif } -int +int __sched __down_failed_interruptible(struct semaphore *sem) { struct task_struct *tsk = current; @@ -159,7 +160,7 @@ __up_wakeup(struct semaphore *sem) wake_up(&sem->wait); } -void +void __sched down(struct semaphore *sem) { #if WAITQUEUE_DEBUG @@ -173,7 +174,7 @@ down(struct semaphore *sem) __down(sem); } -int +int __sched down_interruptible(struct semaphore *sem) { #if WAITQUEUE_DEBUG diff --git a/arch/alpha/kernel/vmlinux.lds.S b/arch/alpha/kernel/vmlinux.lds.S index 7afd00d5d46b..d159b8f0d022 100644 --- a/arch/alpha/kernel/vmlinux.lds.S +++ b/arch/alpha/kernel/vmlinux.lds.S @@ -17,6 +17,7 @@ SECTIONS _text = .; /* Text and read-only data */ .text : { *(.text) + SCHED_TEXT *(.fixup) *(.gnu.warning) } :kernel |
