Browse Source

[PATCH] x86_64: Fix a small missing schedule race

Could lead to a lost reschedule event when the process already rescheduled on
exception exit, and needs it again while still being in the kernel.  Unlikely
case though.

Also remove one redundant cli in another entry.S 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>
Andi Kleen 20 years ago
parent
commit
cdd219cd1f
1 changed files with 1 additions and 1 deletions
  1. 1 1
      arch/x86_64/kernel/entry.S

+ 1 - 1
arch/x86_64/kernel/entry.S

@@ -284,6 +284,7 @@ int_careful:
 	pushq %rdi
 	pushq %rdi
 	call schedule
 	call schedule
 	popq %rdi
 	popq %rdi
+	cli
 	jmp int_with_check
 	jmp int_with_check
 
 
 	/* handle signals and tracing -- both require a full stack frame */
 	/* handle signals and tracing -- both require a full stack frame */
@@ -453,7 +454,6 @@ retint_check:
 	andl %edi,%edx
 	andl %edi,%edx
 	jnz  retint_careful
 	jnz  retint_careful
 retint_swapgs:	 	
 retint_swapgs:	 	
-	cli
 	swapgs 
 	swapgs 
 retint_restore_args:				
 retint_restore_args:				
 	cli
 	cli