Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f481406 authored by Markus Metzger's avatar Markus Metzger Committed by Ingo Molnar
Browse files

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: default avatarMarkus 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: default avatarIngo Molnar <mingo@elte.hu>
parent ee811517
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -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__ */

+1 −19
Original line number Diff line number Diff line
@@ -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..
 *
+0 −10
Original line number Diff line number Diff line
@@ -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. */
@@ -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);
+0 −2
Original line number Diff line number Diff line
@@ -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];
+2 −2
Original line number Diff line number Diff line
@@ -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);
Loading