Commit c7af77b584b02d3e321b00203a618a9c93782121
Committed by
Ingo Molnar
1 parent
051a1d1afa
Exists in
master
and in
4 other branches
sched: mark rwsem functions as __sched for wchan/profiling
This following commit http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=fdf8cb0909b531f9ae8f9b9d7e4eb35ba3505f07 un-inlined a low-level rwsem function, but did not mark it as __sched. The result is that it now shows up as thread wchan (which also affects /proc/profile stats). The following simple patch fixes this by properly marking rwsem_down_failed_common() as a __sched function. Also in this patch, which is up for discussion, marks down_read() and down_write() proper as __sched. For profiling, it is pretty much useless to know that a semaphore is beig help - it is necessary to know _which_ one. By going up another frame on the stack, the information becomes much more useful. In summary, the below change to lib/rwsem.c should be applied; the changes to kernel/rwsem.c could be applied if other kernel hackers agree with my proposal that down_read()/down_write() in the profile is not enough. [ akpm@linux-foundation.org: build fix ] Signed-off-by: Livio Soares <livio@eecg.toronto.edu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Showing 2 changed files with 4 additions and 3 deletions Side-by-side Diff
kernel/rwsem.c
... | ... | @@ -6,6 +6,7 @@ |
6 | 6 | |
7 | 7 | #include <linux/types.h> |
8 | 8 | #include <linux/kernel.h> |
9 | +#include <linux/sched.h> | |
9 | 10 | #include <linux/module.h> |
10 | 11 | #include <linux/rwsem.h> |
11 | 12 | |
... | ... | @@ -15,7 +16,7 @@ |
15 | 16 | /* |
16 | 17 | * lock for reading |
17 | 18 | */ |
18 | -void down_read(struct rw_semaphore *sem) | |
19 | +void __sched down_read(struct rw_semaphore *sem) | |
19 | 20 | { |
20 | 21 | might_sleep(); |
21 | 22 | rwsem_acquire_read(&sem->dep_map, 0, 0, _RET_IP_); |
... | ... | @@ -42,7 +43,7 @@ |
42 | 43 | /* |
43 | 44 | * lock for writing |
44 | 45 | */ |
45 | -void down_write(struct rw_semaphore *sem) | |
46 | +void __sched down_write(struct rw_semaphore *sem) | |
46 | 47 | { |
47 | 48 | might_sleep(); |
48 | 49 | rwsem_acquire(&sem->dep_map, 0, 0, _RET_IP_); |
lib/rwsem.c