Skip to content

Commit

Permalink
xtensa: enable kernel preemption
Browse files Browse the repository at this point in the history
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Chris Zankel <chris@zankel.net>
  • Loading branch information
Max Filippov authored and Chris Zankel committed Sep 6, 2013
1 parent aea8e7c commit 16c5bec
Showing 1 changed file with 17 additions and 28 deletions.
45 changes: 17 additions & 28 deletions arch/xtensa/kernel/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
/* Unimplemented features. */

#undef KERNEL_STACK_OVERFLOW_CHECK
#undef PREEMPTIBLE_KERNEL
#undef ALLOCA_EXCEPTION_IN_IRAM

/* Not well tested.
Expand Down Expand Up @@ -429,7 +428,9 @@ common_exception_return:
/* Jump if we are returning from kernel exceptions. */

l32i a3, a1, PT_PS
_bbci.l a3, PS_UM_BIT, 4f
GET_THREAD_INFO(a2, a1)
l32i a4, a2, TI_FLAGS
_bbci.l a3, PS_UM_BIT, 6f

/* Specific to a user exception exit:
* We need to check some flags for signal handling and rescheduling,
Expand All @@ -438,9 +439,6 @@ common_exception_return:
* Note that we don't disable interrupts here.
*/

GET_THREAD_INFO(a2,a1)
l32i a4, a2, TI_FLAGS

_bbsi.l a4, TIF_NEED_RESCHED, 3f
_bbsi.l a4, TIF_NOTIFY_RESUME, 2f
_bbci.l a4, TIF_SIGPENDING, 5f
Expand All @@ -463,13 +461,27 @@ common_exception_return:
callx4 a4
j 1b

#ifdef CONFIG_PREEMPT
6:
_bbci.l a4, TIF_NEED_RESCHED, 4f

/* Check current_thread_info->preempt_count */

l32i a4, a2, TI_PRE_COUNT
bnez a4, 4f
movi a4, preempt_schedule_irq
callx4 a4
j 1b
#endif

5:
#ifdef CONFIG_DEBUG_TLB_SANITY
l32i a4, a1, PT_DEPC
bgeui a4, VALID_DOUBLE_EXCEPTION_ADDRESS, 4f
movi a4, check_tlb_sanity
callx4 a4
#endif
6:
4:
#ifdef CONFIG_TRACE_IRQFLAGS
l32i a4, a1, PT_DEPC
Expand Down Expand Up @@ -573,29 +585,6 @@ user_exception_exit:

kernel_exception_exit:

#ifdef PREEMPTIBLE_KERNEL

#ifdef CONFIG_PREEMPT

/*
* Note: We've just returned from a call4, so we have
* at least 4 addt'l regs.
*/

/* Check current_thread_info->preempt_count */

GET_THREAD_INFO(a2)
l32i a3, a2, TI_PREEMPT
bnez a3, 1f

l32i a2, a2, TI_FLAGS

1:

#endif

#endif

/* Check if we have to do a movsp.
*
* We only have to do a movsp if the previous window-frame has
Expand Down

0 comments on commit 16c5bec

Please sign in to comment.