From 56f561e15e7f2a2263582ebe82f06b5f8473364f Mon Sep 17 00:00:00 2001 From: Andrew Boie Date: Wed, 9 Nov 2016 11:10:21 -0800 Subject: [PATCH] arches: use new kernel APIs Change-Id: I4b6f5264d5295ebf4278991a1f4e2141bef6602f Signed-off-by: Andrew Boie --- arch/arc/core/fatal.c | 2 +- arch/arc/core/sys_fatal_error_handler.c | 31 +++++------------ arch/arm/core/fatal.c | 3 +- arch/arm/core/fault.c | 3 +- arch/arm/core/sys_fatal_error_handler.c | 32 +++++------------ arch/nios2/core/fatal.c | 36 +++++++------------ arch/x86/core/sys_fatal_error_handler.c | 46 +++++-------------------- 7 files changed, 40 insertions(+), 113 deletions(-) diff --git a/arch/arc/core/fatal.c b/arch/arc/core/fatal.c index 0a43e5aff36..f83da2f43db 100644 --- a/arch/arc/core/fatal.c +++ b/arch/arc/core/fatal.c @@ -77,7 +77,7 @@ FUNC_NORETURN void _NanoFatalErrorHandler(unsigned int reason, } PR_EXC("Current thread ID = %p\n" "Faulting instruction address = 0x%lx\n", - sys_thread_self_get(), + k_current_get(), _arc_v2_aux_reg_read(_ARC_V2_ERET)); /* diff --git a/arch/arc/core/sys_fatal_error_handler.c b/arch/arc/core/sys_fatal_error_handler.c index cb98915f88c..1c1178bdb31 100644 --- a/arch/arc/core/sys_fatal_error_handler.c +++ b/arch/arc/core/sys_fatal_error_handler.c @@ -25,13 +25,7 @@ #include #include #include - -#ifdef CONFIG_PRINTK #include -#define PRINTK(...) printk(__VA_ARGS__) -#else -#define PRINTK(...) -#endif /** * @@ -53,29 +47,20 @@ * * @return N/A */ -void _SysFatalErrorHandler(unsigned int reason, const NANO_ESF * pEsf) +FUNC_NORETURN void _SysFatalErrorHandler(unsigned int reason, + const NANO_ESF *pEsf) { - nano_context_type_t curCtx = sys_execution_context_type_get(); - ARG_UNUSED(reason); ARG_UNUSED(pEsf); - if ((curCtx == NANO_CTX_ISR) || _is_thread_essential()) { - PRINTK("Fatal fault in %s ! Spinning...\n", - NANO_CTX_ISR == curCtx - ? "ISR" - : NANO_CTX_FIBER == curCtx ? "essential fiber" - : "essential task"); + if (k_is_in_isr() || _is_thread_essential()) { + printk("Fatal fault in %s! Spinning...\n", + k_is_in_isr() ? "ISR" : "essential thread"); for (;;) ; /* spin forever */ } - - if (NANO_CTX_FIBER == curCtx) { - PRINTK("Fatal fault in fiber ! Aborting fiber.\n"); - fiber_abort(); - return; - } - - PRINTK("Fatal fault in task ! Aborting task.\n"); + printk("Fatal fault in thread! Aborting.\n"); k_thread_abort(_current); + + CODE_UNREACHABLE; } diff --git a/arch/arm/core/fatal.c b/arch/arm/core/fatal.c index e5e69abc03e..4445ad4132d 100644 --- a/arch/arm/core/fatal.c +++ b/arch/arm/core/fatal.c @@ -100,8 +100,7 @@ FUNC_NORETURN void _NanoFatalErrorHandler(unsigned int reason, } PR_EXC("Current thread ID = %p\n" "Faulting instruction address = 0x%" PRIx32 "\n", - sys_thread_self_get(), - pEsf->pc); + k_current_get(), pEsf->pc); /* * Now that the error has been reported, call the user implemented diff --git a/arch/arm/core/fault.c b/arch/arm/core/fault.c index 8bc14a25bdd..cc0c84f6f22 100644 --- a/arch/arm/core/fault.c +++ b/arch/arm/core/fault.c @@ -117,8 +117,7 @@ static void _FaultThreadShow(const NANO_ESF *esf) { PR_EXC(" Executing thread ID (thread): %p\n" " Faulting instruction address: 0x%" PRIx32 "\n", - sys_thread_self_get(), - esf->pc); + k_current_get(), esf->pc); } #if !defined(CONFIG_CPU_CORTEX_M0_M0PLUS) diff --git a/arch/arm/core/sys_fatal_error_handler.c b/arch/arm/core/sys_fatal_error_handler.c index 6a84dd7d40e..30c78070c45 100644 --- a/arch/arm/core/sys_fatal_error_handler.c +++ b/arch/arm/core/sys_fatal_error_handler.c @@ -26,13 +26,7 @@ #include #include #include - -#ifdef CONFIG_PRINTK #include -#define PRINTK(...) printk(__VA_ARGS__) -#else -#define PRINTK(...) -#endif /** * @@ -54,30 +48,20 @@ * * @return N/A */ -void _SysFatalErrorHandler(unsigned int reason, const NANO_ESF * pEsf) +FUNC_NORETURN void _SysFatalErrorHandler(unsigned int reason, + const NANO_ESF *pEsf) { - nano_context_type_t curCtx = sys_execution_context_type_get(); - ARG_UNUSED(reason); ARG_UNUSED(pEsf); - if ((curCtx == NANO_CTX_ISR) || _is_thread_essential()) { - PRINTK("Fatal fault in %s ! Spinning...\n", - NANO_CTX_ISR == curCtx - ? "ISR" - : NANO_CTX_FIBER == curCtx ? "essential fiber" - : "essential task"); + if (k_is_in_isr() || _is_thread_essential()) { + printk("Fatal fault in %s! Spinning...\n", + k_is_in_isr() ? "ISR" : "essential thread"); for (;;) ; /* spin forever */ } - - if (NANO_CTX_FIBER == curCtx) { - PRINTK("Fatal fault in fiber ! Aborting fiber.\n"); - fiber_abort(); - return; - } - - PRINTK("Fatal fault in task ! Aborting task.\n"); - + printk("Fatal fault in thread! Aborting.\n"); k_thread_abort(_current); + + CODE_UNREACHABLE; } diff --git a/arch/nios2/core/fatal.c b/arch/nios2/core/fatal.c index f4818259015..07cae1f6e76 100644 --- a/arch/nios2/core/fatal.c +++ b/arch/nios2/core/fatal.c @@ -97,7 +97,7 @@ FUNC_NORETURN void _NanoFatalErrorHandler(unsigned int reason, " r11: 0x%" PRIx32 " r12: 0x%" PRIx32 "\n" " r13: 0x%" PRIx32 " r14: 0x%" PRIx32 " r15: 0x%" PRIx32 " ra: 0x%" PRIx32 "\n" - "estatus: %" PRIx32 "\n", sys_thread_self_get(), esf->instr - 4, + "estatus: %" PRIx32 "\n", k_current_get(), esf->instr - 4, esf->r1, esf->r2, esf->r3, esf->r4, esf->r5, esf->r6, esf->r7, esf->r8, esf->r9, esf->r10, esf->r11, esf->r12, @@ -224,32 +224,20 @@ FUNC_NORETURN void _Fault(const NANO_ESF *esf) FUNC_NORETURN void _SysFatalErrorHandler(unsigned int reason, const NANO_ESF *pEsf) { - nano_context_type_t curCtx = sys_execution_context_type_get(); - ARG_UNUSED(reason); ARG_UNUSED(pEsf); - if ((curCtx != NANO_CTX_ISR) && !_is_thread_essential()) { - if (curCtx == NANO_CTX_TASK) { - extern FUNC_NORETURN void _TaskAbort(void); - printk("Fatal task error! Aborting task.\n"); - k_thread_abort(_current); - } else { - printk("Fatal fiber error! Aborting fiber.\n"); - fiber_abort(); - } - CODE_UNREACHABLE; - } - - printk("Fatal fault in %s ! Spinning...\n", - curCtx == NANO_CTX_ISR - ? "ISR" - : curCtx == NANO_CTX_FIBER ? "essential fiber" - : "essential task"); + if (k_is_in_isr() || _is_thread_essential()) { + printk("Fatal fault in %s! Spinning...\n", + k_is_in_isr() ? "ISR" : "essential thread"); #ifdef ALT_CPU_HAS_DEBUG_STUB - _nios2_break(); + _nios2_break(); #endif - for (;;) - ; /* Spin forever */ -} + for (;;) + ; /* spin forever */ + } + printk("Fatal fault in thread! Aborting.\n"); + k_thread_abort(_current); + CODE_UNREACHABLE; +} diff --git a/arch/x86/core/sys_fatal_error_handler.c b/arch/x86/core/sys_fatal_error_handler.c index 0cab4441064..c41c3aa5bdc 100644 --- a/arch/x86/core/sys_fatal_error_handler.c +++ b/arch/x86/core/sys_fatal_error_handler.c @@ -26,18 +26,7 @@ #include #include #include /* to get access to '_current' */ - -/* override PRINTK from nano_private.h */ -#ifdef PRINTK -#undef PRINTK -#endif - -#ifdef CONFIG_PRINTK #include -#define PRINTK(...) printk(__VA_ARGS__) -#else -#define PRINTK(...) -#endif /* CONFIG_PRINTK */ /** * @@ -60,36 +49,19 @@ * @return This function does not return. */ FUNC_NORETURN void _SysFatalErrorHandler(unsigned int reason, - const NANO_ESF * pEsf) + const NANO_ESF *pEsf) { - nano_context_type_t curCtx = sys_execution_context_type_get(); - ARG_UNUSED(reason); ARG_UNUSED(pEsf); - if ((curCtx != NANO_CTX_ISR) && !_is_thread_essential()) { - if (curCtx == NANO_CTX_TASK) { - extern FUNC_NORETURN void _TaskAbort(void); - PRINTK("Fatal task error! Aborting task.\n"); - k_thread_abort(_current); - } else { - PRINTK("Fatal fiber error! Aborting fiber.\n"); - fiber_abort(); - } - } else { -#ifdef CONFIG_PRINTK - /* - * Conditionalize the ctxText[] definition to prevent an "unused - * variable" warning when the PRINTK kconfig option is disabled. - */ - - static const char * const ctxText[] = {"ISR", "essential fiber", - "essential task"}; - - PRINTK("Fatal %s error! Spinning...\n", ctxText[curCtx]); -#endif /* CONFIG_PRINTK */ + if (k_is_in_isr() || _is_thread_essential()) { + printk("Fatal fault in %s! Spinning...\n", + k_is_in_isr() ? "ISR" : "essential thread"); + for (;;) + ; /* spin forever */ } + printk("Fatal fault in thread! Aborting.\n"); + k_thread_abort(_current); - do { - } while (1); + CODE_UNREACHABLE; }