Commit 1fffbb3a authored by Philippe Gerum's avatar Philippe Gerum

ARM: sched: ipipe: resync interrupt state from assembly callout

parent 60236878
...@@ -616,11 +616,13 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall) ...@@ -616,11 +616,13 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
trace_hardirqs_off(); trace_hardirqs_off();
do { do {
if (likely(thread_flags & _TIF_NEED_RESCHED)) { if (likely(thread_flags & _TIF_NEED_RESCHED)) {
local_irq_disable();
hard_cond_local_irq_enable();
schedule(); schedule();
} else { } else {
if (unlikely(!user_mode(regs))) if (unlikely(!user_mode(regs)))
return 0; return 0;
local_irq_enable(); hard_local_irq_enable();
if (thread_flags & _TIF_SIGPENDING) { if (thread_flags & _TIF_SIGPENDING) {
int restart = do_signal(regs, syscall); int restart = do_signal(regs, syscall);
if (unlikely(restart)) { if (unlikely(restart)) {
...@@ -639,7 +641,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall) ...@@ -639,7 +641,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
tracehook_notify_resume(regs); tracehook_notify_resume(regs);
} }
} }
local_irq_disable(); hard_local_irq_disable();
thread_flags = current_thread_info()->flags; thread_flags = current_thread_info()->flags;
} while (thread_flags & _TIF_WORK_MASK); } while (thread_flags & _TIF_WORK_MASK);
return 0; return 0;
......
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