|
|
|
@ -31,7 +31,6 @@ |
|
|
|
|
/* Unimplemented features. */ |
|
|
|
|
|
|
|
|
|
#undef KERNEL_STACK_OVERFLOW_CHECK |
|
|
|
|
#undef PREEMPTIBLE_KERNEL |
|
|
|
|
#undef ALLOCA_EXCEPTION_IN_IRAM |
|
|
|
|
|
|
|
|
|
/* Not well tested. |
|
|
|
@ -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, |
|
|
|
@ -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 |
|
|
|
@ -463,6 +461,19 @@ 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 |
|
|
|
@ -470,6 +481,7 @@ common_exception_return: |
|
|
|
|
movi a4, check_tlb_sanity |
|
|
|
|
callx4 a4 |
|
|
|
|
#endif |
|
|
|
|
6: |
|
|
|
|
4: |
|
|
|
|
#ifdef CONFIG_TRACE_IRQFLAGS |
|
|
|
|
l32i a4, a1, PT_DEPC |
|
|
|
@ -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 |
|
|
|
|