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 */ |