diff options
author | Markus Metzger <markus.t.metzger@intel.com> | 2009-04-03 10:43:48 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-04-07 07:36:31 -0400 |
commit | 0f4814065ff8c24ca8bfd75c9b73502be152c287 (patch) | |
tree | f3816ecb64ee198235d2e9c1649de3241c3f2ac2 | |
parent | ee811517a5604aa63fae803b7c044712699e1303 (diff) |
x86, ptrace: add bts context unconditionally
Add the ptrace bts context field to task_struct unconditionally.
Initialize the field directly in copy_process().
Remove all the unneeded functionality used to initialize that field.
Signed-off-by: Markus Metzger <markus.t.metzger@intel.com>
Cc: roland@redhat.com
Cc: eranian@googlemail.com
Cc: oleg@redhat.com
Cc: juan.villacis@intel.com
Cc: ak@linux.jf.intel.com
LKML-Reference: <20090403144603.292754000@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | arch/x86/include/asm/ptrace.h | 9 | ||||
-rw-r--r-- | arch/x86/kernel/ptrace.c | 20 | ||||
-rw-r--r-- | include/linux/ptrace.h | 10 | ||||
-rw-r--r-- | include/linux/sched.h | 2 | ||||
-rw-r--r-- | kernel/fork.c | 4 | ||||
-rw-r--r-- | kernel/ptrace.c | 10 |
6 files changed, 7 insertions, 48 deletions
diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h index e304b66abeea..5cdd19f20b5b 100644 --- a/arch/x86/include/asm/ptrace.h +++ b/arch/x86/include/asm/ptrace.h | |||
@@ -235,12 +235,11 @@ extern int do_get_thread_area(struct task_struct *p, int idx, | |||
235 | extern int do_set_thread_area(struct task_struct *p, int idx, | 235 | extern int do_set_thread_area(struct task_struct *p, int idx, |
236 | struct user_desc __user *info, int can_allocate); | 236 | struct user_desc __user *info, int can_allocate); |
237 | 237 | ||
238 | extern void x86_ptrace_untrace(struct task_struct *); | 238 | #ifdef CONFIG_X86_PTRACE_BTS |
239 | extern void x86_ptrace_fork(struct task_struct *child, | 239 | extern void ptrace_bts_untrace(struct task_struct *tsk); |
240 | unsigned long clone_flags); | ||
241 | 240 | ||
242 | #define arch_ptrace_untrace(tsk) x86_ptrace_untrace(tsk) | 241 | #define arch_ptrace_untrace(tsk) ptrace_bts_untrace(tsk) |
243 | #define arch_ptrace_fork(child, flags) x86_ptrace_fork(child, flags) | 242 | #endif /* CONFIG_X86_PTRACE_BTS */ |
244 | 243 | ||
245 | #endif /* __KERNEL__ */ | 244 | #endif /* __KERNEL__ */ |
246 | 245 | ||
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index adbb24322d8f..b32a8ee53381 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c | |||
@@ -887,37 +887,19 @@ static int ptrace_bts_size(struct task_struct *child) | |||
887 | return (trace->ds.top - trace->ds.begin) / trace->ds.size; | 887 | return (trace->ds.top - trace->ds.begin) / trace->ds.size; |
888 | } | 888 | } |
889 | 889 | ||
890 | static inline void ptrace_bts_fork(struct task_struct *tsk) | ||
891 | { | ||
892 | tsk->bts = NULL; | ||
893 | } | ||
894 | |||
895 | /* | 890 | /* |
896 | * Called from __ptrace_unlink() after the child has been moved back | 891 | * Called from __ptrace_unlink() after the child has been moved back |
897 | * to its original parent. | 892 | * to its original parent. |
898 | */ | 893 | */ |
899 | static inline void ptrace_bts_untrace(struct task_struct *child) | 894 | void ptrace_bts_untrace(struct task_struct *child) |
900 | { | 895 | { |
901 | if (unlikely(child->bts)) { | 896 | if (unlikely(child->bts)) { |
902 | free_bts_context(child->bts); | 897 | free_bts_context(child->bts); |
903 | child->bts = NULL; | 898 | child->bts = NULL; |
904 | } | 899 | } |
905 | } | 900 | } |
906 | #else | ||
907 | static inline void ptrace_bts_fork(struct task_struct *tsk) {} | ||
908 | static inline void ptrace_bts_untrace(struct task_struct *child) {} | ||
909 | #endif /* CONFIG_X86_PTRACE_BTS */ | 901 | #endif /* CONFIG_X86_PTRACE_BTS */ |
910 | 902 | ||
911 | void x86_ptrace_fork(struct task_struct *child, unsigned long clone_flags) | ||
912 | { | ||
913 | ptrace_bts_fork(child); | ||
914 | } | ||
915 | |||
916 | void x86_ptrace_untrace(struct task_struct *child) | ||
917 | { | ||
918 | ptrace_bts_untrace(child); | ||
919 | } | ||
920 | |||
921 | /* | 903 | /* |
922 | * Called by kernel/ptrace.c when detaching.. | 904 | * Called by kernel/ptrace.c when detaching.. |
923 | * | 905 | * |
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h index 67c15653fc23..59e133d39d50 100644 --- a/include/linux/ptrace.h +++ b/include/linux/ptrace.h | |||
@@ -95,7 +95,6 @@ extern void __ptrace_link(struct task_struct *child, | |||
95 | struct task_struct *new_parent); | 95 | struct task_struct *new_parent); |
96 | extern void __ptrace_unlink(struct task_struct *child); | 96 | extern void __ptrace_unlink(struct task_struct *child); |
97 | extern void exit_ptrace(struct task_struct *tracer); | 97 | extern void exit_ptrace(struct task_struct *tracer); |
98 | extern void ptrace_fork(struct task_struct *task, unsigned long clone_flags); | ||
99 | #define PTRACE_MODE_READ 1 | 98 | #define PTRACE_MODE_READ 1 |
100 | #define PTRACE_MODE_ATTACH 2 | 99 | #define PTRACE_MODE_ATTACH 2 |
101 | /* Returns 0 on success, -errno on denial. */ | 100 | /* Returns 0 on success, -errno on denial. */ |
@@ -327,15 +326,6 @@ static inline void user_enable_block_step(struct task_struct *task) | |||
327 | #define arch_ptrace_untrace(task) do { } while (0) | 326 | #define arch_ptrace_untrace(task) do { } while (0) |
328 | #endif | 327 | #endif |
329 | 328 | ||
330 | #ifndef arch_ptrace_fork | ||
331 | /* | ||
332 | * Do machine-specific work to initialize a new task. | ||
333 | * | ||
334 | * This is called from copy_process(). | ||
335 | */ | ||
336 | #define arch_ptrace_fork(child, clone_flags) do { } while (0) | ||
337 | #endif | ||
338 | |||
339 | extern int task_current_syscall(struct task_struct *target, long *callno, | 329 | extern int task_current_syscall(struct task_struct *target, long *callno, |
340 | unsigned long args[6], unsigned int maxargs, | 330 | unsigned long args[6], unsigned int maxargs, |
341 | unsigned long *sp, unsigned long *pc); | 331 | unsigned long *sp, unsigned long *pc); |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 52b8cd049c2e..451186a22ef5 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -1205,13 +1205,11 @@ struct task_struct { | |||
1205 | struct list_head ptraced; | 1205 | struct list_head ptraced; |
1206 | struct list_head ptrace_entry; | 1206 | struct list_head ptrace_entry; |
1207 | 1207 | ||
1208 | #ifdef CONFIG_X86_PTRACE_BTS | ||
1209 | /* | 1208 | /* |
1210 | * This is the tracer handle for the ptrace BTS extension. | 1209 | * This is the tracer handle for the ptrace BTS extension. |
1211 | * This field actually belongs to the ptracer task. | 1210 | * This field actually belongs to the ptracer task. |
1212 | */ | 1211 | */ |
1213 | struct bts_context *bts; | 1212 | struct bts_context *bts; |
1214 | #endif /* CONFIG_X86_PTRACE_BTS */ | ||
1215 | 1213 | ||
1216 | /* PID/PID hash table linkage. */ | 1214 | /* PID/PID hash table linkage. */ |
1217 | struct pid_link pids[PIDTYPE_MAX]; | 1215 | struct pid_link pids[PIDTYPE_MAX]; |
diff --git a/kernel/fork.c b/kernel/fork.c index 660c2b8765bc..69bde7a22e9b 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1086,8 +1086,8 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1086 | #ifdef CONFIG_DEBUG_MUTEXES | 1086 | #ifdef CONFIG_DEBUG_MUTEXES |
1087 | p->blocked_on = NULL; /* not blocked yet */ | 1087 | p->blocked_on = NULL; /* not blocked yet */ |
1088 | #endif | 1088 | #endif |
1089 | if (unlikely(current->ptrace)) | 1089 | |
1090 | ptrace_fork(p, clone_flags); | 1090 | p->bts = NULL; |
1091 | 1091 | ||
1092 | /* Perform scheduler related setup. Assign this task to a CPU. */ | 1092 | /* Perform scheduler related setup. Assign this task to a CPU. */ |
1093 | sched_fork(p, clone_flags); | 1093 | sched_fork(p, clone_flags); |
diff --git a/kernel/ptrace.c b/kernel/ptrace.c index aaad0ec34194..321127d965c2 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c | |||
@@ -27,16 +27,6 @@ | |||
27 | 27 | ||
28 | 28 | ||
29 | /* | 29 | /* |
30 | * Initialize a new task whose father had been ptraced. | ||
31 | * | ||
32 | * Called from copy_process(). | ||
33 | */ | ||
34 | void ptrace_fork(struct task_struct *child, unsigned long clone_flags) | ||
35 | { | ||
36 | arch_ptrace_fork(child, clone_flags); | ||
37 | } | ||
38 | |||
39 | /* | ||
40 | * ptrace a task: make the debugger its new parent and | 30 | * ptrace a task: make the debugger its new parent and |
41 | * move it to the ptrace list. | 31 | * move it to the ptrace list. |
42 | * | 32 | * |