Commit 94b3cbf2 authored by Ingo Molnar's avatar Ingo Molnar Committed by Thomas Gleixner

x86: preempt-rt scheduling support (32bit)

Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 4ee888c3
...@@ -371,13 +371,13 @@ END(ret_from_exception) ...@@ -371,13 +371,13 @@ END(ret_from_exception)
ENTRY(resume_kernel) ENTRY(resume_kernel)
DISABLE_INTERRUPTS(CLBR_ANY) DISABLE_INTERRUPTS(CLBR_ANY)
cmpl $0,TI_preempt_count(%ebp) # non-zero preempt_count ? cmpl $0,TI_preempt_count(%ebp) # non-zero preempt_count ?
jnz restore_all jnz restore_nocheck
need_resched: need_resched:
movl TI_flags(%ebp), %ecx # need_resched set ? movl TI_flags(%ebp), %ecx # need_resched set ?
testb $_TIF_NEED_RESCHED, %cl testb $_TIF_NEED_RESCHED, %cl
jz restore_all jz restore_nocheck
testl $X86_EFLAGS_IF,PT_EFLAGS(%esp) # interrupts off (exception path) ? testl $X86_EFLAGS_IF,PT_EFLAGS(%esp) # interrupts off (exception path) ?
jz restore_all jz restore_nocheck
call preempt_schedule_irq call preempt_schedule_irq
jmp need_resched jmp need_resched
END(resume_kernel) END(resume_kernel)
...@@ -627,12 +627,9 @@ work_pending: ...@@ -627,12 +627,9 @@ work_pending:
testb $_TIF_NEED_RESCHED, %cl testb $_TIF_NEED_RESCHED, %cl
jz work_notifysig jz work_notifysig
work_resched: work_resched:
call schedule call __schedule
LOCKDEP_SYS_EXIT LOCKDEP_SYS_EXIT
DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt
# setting need_resched or sigpending
# between sampling and the iret
TRACE_IRQS_OFF
movl TI_flags(%ebp), %ecx movl TI_flags(%ebp), %ecx
andl $_TIF_WORK_MASK, %ecx # is there any work to be done other andl $_TIF_WORK_MASK, %ecx # is there any work to be done other
# than syscall tracing? # than syscall tracing?
......
...@@ -116,10 +116,12 @@ void cpu_idle(void) ...@@ -116,10 +116,12 @@ void cpu_idle(void)
pm_idle(); pm_idle();
start_critical_timings(); start_critical_timings();
} }
local_irq_disable();
tick_nohz_restart_sched_tick(); tick_nohz_restart_sched_tick();
__preempt_enable_no_resched(); __preempt_enable_no_resched();
schedule(); __schedule();
preempt_disable(); preempt_disable();
local_irq_enable();
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment