diff options
author | Andi Kleen <ak@suse.de> | 2005-05-01 11:58:51 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-01 11:58:51 -0400 |
commit | be9e68703c53fece406bc2e40976a5cfe2a8e77f (patch) | |
tree | efa540d85ab7a193a402ba952e4c8fe63fe18f25 /arch/x86_64/kernel | |
parent | 3c3b73b6f50a47601b1897deb9c6b4b5ecadf591 (diff) |
[PATCH] x86_64: interrupt handling fix
- Initialize workmask correctly on interrupt signal handling
- Readd missing cli's in the interrupt return path.
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/x86_64/kernel')
-rw-r--r-- | arch/x86_64/kernel/entry.S | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S index 3233a15cc4e0..1086b5fcac21 100644 --- a/arch/x86_64/kernel/entry.S +++ b/arch/x86_64/kernel/entry.S | |||
@@ -296,6 +296,7 @@ int_very_careful: | |||
296 | call syscall_trace_leave | 296 | call syscall_trace_leave |
297 | popq %rdi | 297 | popq %rdi |
298 | andl $~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP),%edi | 298 | andl $~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP),%edi |
299 | cli | ||
299 | jmp int_restore_rest | 300 | jmp int_restore_rest |
300 | 301 | ||
301 | int_signal: | 302 | int_signal: |
@@ -307,6 +308,7 @@ int_signal: | |||
307 | 1: movl $_TIF_NEED_RESCHED,%edi | 308 | 1: movl $_TIF_NEED_RESCHED,%edi |
308 | int_restore_rest: | 309 | int_restore_rest: |
309 | RESTORE_REST | 310 | RESTORE_REST |
311 | cli | ||
310 | jmp int_with_check | 312 | jmp int_with_check |
311 | CFI_ENDPROC | 313 | CFI_ENDPROC |
312 | 314 | ||
@@ -490,7 +492,8 @@ retint_signal: | |||
490 | call do_notify_resume | 492 | call do_notify_resume |
491 | RESTORE_REST | 493 | RESTORE_REST |
492 | cli | 494 | cli |
493 | GET_THREAD_INFO(%rcx) | 495 | GET_THREAD_INFO(%rcx) |
496 | movl $_TIF_WORK_MASK,%edi | ||
494 | jmp retint_check | 497 | jmp retint_check |
495 | 498 | ||
496 | #ifdef CONFIG_PREEMPT | 499 | #ifdef CONFIG_PREEMPT |