Skip to content

Commit

Permalink
x86, ptrace: add bts context unconditionally
Browse files Browse the repository at this point in the history
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 <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
LKML-Reference: <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
  • Loading branch information
markus-metzger authored and Ingo Molnar committed Apr 7, 2009
1 parent ee81151 commit 0f48140
Show file tree
Hide file tree
Showing 6 changed files with 7 additions and 48 deletions.
9 changes: 4 additions & 5 deletions arch/x86/include/asm/ptrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -235,12 +235,11 @@ extern int do_get_thread_area(struct task_struct *p, int idx,
extern int do_set_thread_area(struct task_struct *p, int idx,
struct user_desc __user *info, int can_allocate);

extern void x86_ptrace_untrace(struct task_struct *);
extern void x86_ptrace_fork(struct task_struct *child,
unsigned long clone_flags);
#ifdef CONFIG_X86_PTRACE_BTS
extern void ptrace_bts_untrace(struct task_struct *tsk);

#define arch_ptrace_untrace(tsk) x86_ptrace_untrace(tsk)
#define arch_ptrace_fork(child, flags) x86_ptrace_fork(child, flags)
#define arch_ptrace_untrace(tsk) ptrace_bts_untrace(tsk)
#endif /* CONFIG_X86_PTRACE_BTS */

#endif /* __KERNEL__ */

Expand Down
20 changes: 1 addition & 19 deletions arch/x86/kernel/ptrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -887,37 +887,19 @@ static int ptrace_bts_size(struct task_struct *child)
return (trace->ds.top - trace->ds.begin) / trace->ds.size;
}

static inline void ptrace_bts_fork(struct task_struct *tsk)
{
tsk->bts = NULL;
}

/*
* Called from __ptrace_unlink() after the child has been moved back
* to its original parent.
*/
static inline void ptrace_bts_untrace(struct task_struct *child)
void ptrace_bts_untrace(struct task_struct *child)
{
if (unlikely(child->bts)) {
free_bts_context(child->bts);
child->bts = NULL;
}
}
#else
static inline void ptrace_bts_fork(struct task_struct *tsk) {}
static inline void ptrace_bts_untrace(struct task_struct *child) {}
#endif /* CONFIG_X86_PTRACE_BTS */

void x86_ptrace_fork(struct task_struct *child, unsigned long clone_flags)
{
ptrace_bts_fork(child);
}

void x86_ptrace_untrace(struct task_struct *child)
{
ptrace_bts_untrace(child);
}

/*
* Called by kernel/ptrace.c when detaching..
*
Expand Down
10 changes: 0 additions & 10 deletions include/linux/ptrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ extern void __ptrace_link(struct task_struct *child,
struct task_struct *new_parent);
extern void __ptrace_unlink(struct task_struct *child);
extern void exit_ptrace(struct task_struct *tracer);
extern void ptrace_fork(struct task_struct *task, unsigned long clone_flags);
#define PTRACE_MODE_READ 1
#define PTRACE_MODE_ATTACH 2
/* Returns 0 on success, -errno on denial. */
Expand Down Expand Up @@ -327,15 +326,6 @@ static inline void user_enable_block_step(struct task_struct *task)
#define arch_ptrace_untrace(task) do { } while (0)
#endif

#ifndef arch_ptrace_fork
/*
* Do machine-specific work to initialize a new task.
*
* This is called from copy_process().
*/
#define arch_ptrace_fork(child, clone_flags) do { } while (0)
#endif

extern int task_current_syscall(struct task_struct *target, long *callno,
unsigned long args[6], unsigned int maxargs,
unsigned long *sp, unsigned long *pc);
Expand Down
2 changes: 0 additions & 2 deletions include/linux/sched.h
Original file line number Diff line number Diff line change
Expand Up @@ -1205,13 +1205,11 @@ struct task_struct {
struct list_head ptraced;
struct list_head ptrace_entry;

#ifdef CONFIG_X86_PTRACE_BTS
/*
* This is the tracer handle for the ptrace BTS extension.
* This field actually belongs to the ptracer task.
*/
struct bts_context *bts;
#endif /* CONFIG_X86_PTRACE_BTS */

/* PID/PID hash table linkage. */
struct pid_link pids[PIDTYPE_MAX];
Expand Down
4 changes: 2 additions & 2 deletions kernel/fork.c
Original file line number Diff line number Diff line change
Expand Up @@ -1086,8 +1086,8 @@ static struct task_struct *copy_process(unsigned long clone_flags,
#ifdef CONFIG_DEBUG_MUTEXES
p->blocked_on = NULL; /* not blocked yet */
#endif
if (unlikely(current->ptrace))
ptrace_fork(p, clone_flags);

p->bts = NULL;

/* Perform scheduler related setup. Assign this task to a CPU. */
sched_fork(p, clone_flags);
Expand Down
10 changes: 0 additions & 10 deletions kernel/ptrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,6 @@
#include <asm/uaccess.h>


/*
* Initialize a new task whose father had been ptraced.
*
* Called from copy_process().
*/
void ptrace_fork(struct task_struct *child, unsigned long clone_flags)
{
arch_ptrace_fork(child, clone_flags);
}

/*
* ptrace a task: make the debugger its new parent and
* move it to the ptrace list.
Expand Down

0 comments on commit 0f48140

Please sign in to comment.