diff options
Diffstat (limited to 'arch/x86/kernel/process.c')
| -rw-r--r-- | arch/x86/kernel/process.c | 21 | 
1 files changed, 3 insertions, 18 deletions
| diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 5284cd2b5776..744508e7cfdd 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <linux/clockchips.h> | 10 | #include <linux/clockchips.h> | 
| 11 | #include <linux/random.h> | 11 | #include <linux/random.h> | 
| 12 | #include <trace/events/power.h> | 12 | #include <trace/events/power.h> | 
| 13 | #include <linux/hw_breakpoint.h> | ||
| 13 | #include <asm/system.h> | 14 | #include <asm/system.h> | 
| 14 | #include <asm/apic.h> | 15 | #include <asm/apic.h> | 
| 15 | #include <asm/syscalls.h> | 16 | #include <asm/syscalls.h> | 
| @@ -17,6 +18,7 @@ | |||
| 17 | #include <asm/uaccess.h> | 18 | #include <asm/uaccess.h> | 
| 18 | #include <asm/i387.h> | 19 | #include <asm/i387.h> | 
| 19 | #include <asm/ds.h> | 20 | #include <asm/ds.h> | 
| 21 | #include <asm/debugreg.h> | ||
| 20 | 22 | ||
| 21 | unsigned long idle_halt; | 23 | unsigned long idle_halt; | 
| 22 | EXPORT_SYMBOL(idle_halt); | 24 | EXPORT_SYMBOL(idle_halt); | 
| @@ -103,14 +105,7 @@ void flush_thread(void) | |||
| 103 | } | 105 | } | 
| 104 | #endif | 106 | #endif | 
| 105 | 107 | ||
| 106 | clear_tsk_thread_flag(tsk, TIF_DEBUG); | 108 | flush_ptrace_hw_breakpoint(tsk); | 
| 107 | |||
| 108 | tsk->thread.debugreg0 = 0; | ||
| 109 | tsk->thread.debugreg1 = 0; | ||
| 110 | tsk->thread.debugreg2 = 0; | ||
| 111 | tsk->thread.debugreg3 = 0; | ||
| 112 | tsk->thread.debugreg6 = 0; | ||
| 113 | tsk->thread.debugreg7 = 0; | ||
| 114 | memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); | 109 | memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); | 
| 115 | /* | 110 | /* | 
| 116 | * Forget coprocessor state.. | 111 | * Forget coprocessor state.. | 
| @@ -192,16 +187,6 @@ void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p, | |||
| 192 | else if (next->debugctlmsr != prev->debugctlmsr) | 187 | else if (next->debugctlmsr != prev->debugctlmsr) | 
| 193 | update_debugctlmsr(next->debugctlmsr); | 188 | update_debugctlmsr(next->debugctlmsr); | 
| 194 | 189 | ||
| 195 | if (test_tsk_thread_flag(next_p, TIF_DEBUG)) { | ||
| 196 | set_debugreg(next->debugreg0, 0); | ||
| 197 | set_debugreg(next->debugreg1, 1); | ||
| 198 | set_debugreg(next->debugreg2, 2); | ||
| 199 | set_debugreg(next->debugreg3, 3); | ||
| 200 | /* no 4 and 5 */ | ||
| 201 | set_debugreg(next->debugreg6, 6); | ||
| 202 | set_debugreg(next->debugreg7, 7); | ||
| 203 | } | ||
| 204 | |||
| 205 | if (test_tsk_thread_flag(prev_p, TIF_NOTSC) ^ | 190 | if (test_tsk_thread_flag(prev_p, TIF_NOTSC) ^ | 
| 206 | test_tsk_thread_flag(next_p, TIF_NOTSC)) { | 191 | test_tsk_thread_flag(next_p, TIF_NOTSC)) { | 
| 207 | /* prev and next are different */ | 192 | /* prev and next are different */ | 
