diff options
Diffstat (limited to 'arch/x86/kernel/entry_32.S')
| -rw-r--r-- | arch/x86/kernel/entry_32.S | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index 44a8e0dc6737..3dc8593dd2aa 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
| @@ -375,15 +375,18 @@ END(ret_from_exception) | |||
| 375 | ENTRY(resume_kernel) | 375 | ENTRY(resume_kernel) |
| 376 | DISABLE_INTERRUPTS(CLBR_ANY) | 376 | DISABLE_INTERRUPTS(CLBR_ANY) |
| 377 | cmpl $0,TI_preempt_count(%ebp) # non-zero preempt_count ? | 377 | cmpl $0,TI_preempt_count(%ebp) # non-zero preempt_count ? |
| 378 | jnz restore_all | 378 | jnz restore_nocheck_trace |
| 379 | need_resched: | 379 | need_resched: |
| 380 | movl TI_flags(%ebp), %ecx # need_resched set ? | 380 | movl TI_flags(%ebp), %ecx # need_resched set ? |
| 381 | testb $_TIF_NEED_RESCHED, %cl | 381 | testb $_TIF_NEED_RESCHED, %cl |
| 382 | jz restore_all | 382 | jz restore_nocheck_trace |
| 383 | testl $X86_EFLAGS_IF,PT_EFLAGS(%esp) # interrupts off (exception path) ? | 383 | testl $X86_EFLAGS_IF,PT_EFLAGS(%esp) # interrupts off (exception path) ? |
| 384 | jz restore_all | 384 | jz restore_nocheck_trace |
| 385 | call preempt_schedule_irq | 385 | call preempt_schedule_irq |
| 386 | jmp need_resched | 386 | jmp need_resched |
| 387 | restore_nocheck_trace: | ||
| 388 | TRACE_IRQS_IRET | ||
| 389 | jmp restore_nocheck | ||
| 387 | END(resume_kernel) | 390 | END(resume_kernel) |
| 388 | #endif | 391 | #endif |
| 389 | CFI_ENDPROC | 392 | CFI_ENDPROC |
| @@ -639,12 +642,9 @@ work_pending: | |||
| 639 | testb $_TIF_NEED_RESCHED, %cl | 642 | testb $_TIF_NEED_RESCHED, %cl |
| 640 | jz work_notifysig | 643 | jz work_notifysig |
| 641 | work_resched: | 644 | work_resched: |
| 642 | call schedule | 645 | call __schedule |
| 643 | LOCKDEP_SYS_EXIT | 646 | LOCKDEP_SYS_EXIT |
| 644 | DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt | 647 | |
| 645 | # setting need_resched or sigpending | ||
| 646 | # between sampling and the iret | ||
| 647 | TRACE_IRQS_OFF | ||
| 648 | movl TI_flags(%ebp), %ecx | 648 | movl TI_flags(%ebp), %ecx |
| 649 | andl $_TIF_WORK_MASK, %ecx # is there any work to be done other | 649 | andl $_TIF_WORK_MASK, %ecx # is there any work to be done other |
| 650 | # than syscall tracing? | 650 | # than syscall tracing? |
