x86: disable BTS ptrace extensions for now
revert the BTS ptrace extension for now. based on general objections from Roland McGrath: http://lkml.org/lkml/2008/2/21/323 we'll let the BTS functionality cook some more and re-enable it in v2.6.26. We'll leave the dead code around to help the development of this code. (X86_BTS is not defined at the moment) Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
8be8f54bae
commit
b4ef95de00
3 changed files with 16 additions and 0 deletions
|
@ -603,11 +603,13 @@ __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef X86_BTS
|
||||||
if (test_tsk_thread_flag(prev_p, TIF_BTS_TRACE_TS))
|
if (test_tsk_thread_flag(prev_p, TIF_BTS_TRACE_TS))
|
||||||
ptrace_bts_take_timestamp(prev_p, BTS_TASK_DEPARTS);
|
ptrace_bts_take_timestamp(prev_p, BTS_TASK_DEPARTS);
|
||||||
|
|
||||||
if (test_tsk_thread_flag(next_p, TIF_BTS_TRACE_TS))
|
if (test_tsk_thread_flag(next_p, TIF_BTS_TRACE_TS))
|
||||||
ptrace_bts_take_timestamp(next_p, BTS_TASK_ARRIVES);
|
ptrace_bts_take_timestamp(next_p, BTS_TASK_ARRIVES);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
if (!test_tsk_thread_flag(next_p, TIF_IO_BITMAP)) {
|
if (!test_tsk_thread_flag(next_p, TIF_IO_BITMAP)) {
|
||||||
|
|
|
@ -604,11 +604,13 @@ static inline void __switch_to_xtra(struct task_struct *prev_p,
|
||||||
memset(tss->io_bitmap, 0xff, prev->io_bitmap_max);
|
memset(tss->io_bitmap, 0xff, prev->io_bitmap_max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef X86_BTS
|
||||||
if (test_tsk_thread_flag(prev_p, TIF_BTS_TRACE_TS))
|
if (test_tsk_thread_flag(prev_p, TIF_BTS_TRACE_TS))
|
||||||
ptrace_bts_take_timestamp(prev_p, BTS_TASK_DEPARTS);
|
ptrace_bts_take_timestamp(prev_p, BTS_TASK_DEPARTS);
|
||||||
|
|
||||||
if (test_tsk_thread_flag(next_p, TIF_BTS_TRACE_TS))
|
if (test_tsk_thread_flag(next_p, TIF_BTS_TRACE_TS))
|
||||||
ptrace_bts_take_timestamp(next_p, BTS_TASK_ARRIVES);
|
ptrace_bts_take_timestamp(next_p, BTS_TASK_ARRIVES);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -544,6 +544,8 @@ static int ptrace_set_debugreg(struct task_struct *child,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef X86_BTS
|
||||||
|
|
||||||
static int ptrace_bts_get_size(struct task_struct *child)
|
static int ptrace_bts_get_size(struct task_struct *child)
|
||||||
{
|
{
|
||||||
if (!child->thread.ds_area_msr)
|
if (!child->thread.ds_area_msr)
|
||||||
|
@ -826,6 +828,7 @@ void ptrace_bts_take_timestamp(struct task_struct *tsk,
|
||||||
|
|
||||||
ptrace_bts_write_record(tsk, &rec);
|
ptrace_bts_write_record(tsk, &rec);
|
||||||
}
|
}
|
||||||
|
#endif /* X86_BTS */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called by kernel/ptrace.c when detaching..
|
* Called by kernel/ptrace.c when detaching..
|
||||||
|
@ -839,7 +842,9 @@ void ptrace_disable(struct task_struct *child)
|
||||||
clear_tsk_thread_flag(child, TIF_SYSCALL_EMU);
|
clear_tsk_thread_flag(child, TIF_SYSCALL_EMU);
|
||||||
#endif
|
#endif
|
||||||
if (child->thread.ds_area_msr) {
|
if (child->thread.ds_area_msr) {
|
||||||
|
#ifdef X86_BTS
|
||||||
ptrace_bts_realloc(child, 0, 0);
|
ptrace_bts_realloc(child, 0, 0);
|
||||||
|
#endif
|
||||||
child->thread.debugctlmsr &= ~ds_debugctl_mask();
|
child->thread.debugctlmsr &= ~ds_debugctl_mask();
|
||||||
if (!child->thread.debugctlmsr)
|
if (!child->thread.debugctlmsr)
|
||||||
clear_tsk_thread_flag(child, TIF_DEBUGCTLMSR);
|
clear_tsk_thread_flag(child, TIF_DEBUGCTLMSR);
|
||||||
|
@ -961,6 +966,10 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These bits need more cooking - not enabled yet:
|
||||||
|
*/
|
||||||
|
#ifdef X86_BTS
|
||||||
case PTRACE_BTS_CONFIG:
|
case PTRACE_BTS_CONFIG:
|
||||||
ret = ptrace_bts_config
|
ret = ptrace_bts_config
|
||||||
(child, data, (struct ptrace_bts_config __user *)addr);
|
(child, data, (struct ptrace_bts_config __user *)addr);
|
||||||
|
@ -988,6 +997,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||||
ret = ptrace_bts_drain
|
ret = ptrace_bts_drain
|
||||||
(child, data, (struct bts_struct __user *) addr);
|
(child, data, (struct bts_struct __user *) addr);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = ptrace_request(child, request, addr, data);
|
ret = ptrace_request(child, request, addr, data);
|
||||||
|
@ -1226,12 +1236,14 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
|
||||||
case PTRACE_SETOPTIONS:
|
case PTRACE_SETOPTIONS:
|
||||||
case PTRACE_SET_THREAD_AREA:
|
case PTRACE_SET_THREAD_AREA:
|
||||||
case PTRACE_GET_THREAD_AREA:
|
case PTRACE_GET_THREAD_AREA:
|
||||||
|
#ifdef X86_BTS
|
||||||
case PTRACE_BTS_CONFIG:
|
case PTRACE_BTS_CONFIG:
|
||||||
case PTRACE_BTS_STATUS:
|
case PTRACE_BTS_STATUS:
|
||||||
case PTRACE_BTS_SIZE:
|
case PTRACE_BTS_SIZE:
|
||||||
case PTRACE_BTS_GET:
|
case PTRACE_BTS_GET:
|
||||||
case PTRACE_BTS_CLEAR:
|
case PTRACE_BTS_CLEAR:
|
||||||
case PTRACE_BTS_DRAIN:
|
case PTRACE_BTS_DRAIN:
|
||||||
|
#endif
|
||||||
return sys_ptrace(request, pid, addr, data);
|
return sys_ptrace(request, pid, addr, data);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in a new issue