diff options
Diffstat (limited to 'arch/x86/kernel/process.c')
| -rw-r--r-- | arch/x86/kernel/process.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 1a60beb32ed..8328009416d 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c | |||
| @@ -195,6 +195,17 @@ void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p, | |||
| 195 | prev = &prev_p->thread; | 195 | prev = &prev_p->thread; |
| 196 | next = &next_p->thread; | 196 | next = &next_p->thread; |
| 197 | 197 | ||
| 198 | if (test_tsk_thread_flag(prev_p, TIF_BLOCKSTEP) ^ | ||
| 199 | test_tsk_thread_flag(next_p, TIF_BLOCKSTEP)) { | ||
| 200 | unsigned long debugctl = get_debugctlmsr(); | ||
| 201 | |||
| 202 | debugctl &= ~DEBUGCTLMSR_BTF; | ||
| 203 | if (test_tsk_thread_flag(next_p, TIF_BLOCKSTEP)) | ||
| 204 | debugctl |= DEBUGCTLMSR_BTF; | ||
| 205 | |||
| 206 | update_debugctlmsr(debugctl); | ||
| 207 | } | ||
| 208 | |||
| 198 | if (test_tsk_thread_flag(prev_p, TIF_NOTSC) ^ | 209 | if (test_tsk_thread_flag(prev_p, TIF_NOTSC) ^ |
| 199 | test_tsk_thread_flag(next_p, TIF_NOTSC)) { | 210 | test_tsk_thread_flag(next_p, TIF_NOTSC)) { |
| 200 | /* prev and next are different */ | 211 | /* prev and next are different */ |
