arches: use new kernel APIs
Change-Id: I4b6f5264d5295ebf4278991a1f4e2141bef6602f Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
parent
933e34621b
commit
56f561e15e
7 changed files with 40 additions and 113 deletions
|
@ -77,7 +77,7 @@ FUNC_NORETURN void _NanoFatalErrorHandler(unsigned int reason,
|
||||||
}
|
}
|
||||||
PR_EXC("Current thread ID = %p\n"
|
PR_EXC("Current thread ID = %p\n"
|
||||||
"Faulting instruction address = 0x%lx\n",
|
"Faulting instruction address = 0x%lx\n",
|
||||||
sys_thread_self_get(),
|
k_current_get(),
|
||||||
_arc_v2_aux_reg_read(_ARC_V2_ERET));
|
_arc_v2_aux_reg_read(_ARC_V2_ERET));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -25,13 +25,7 @@
|
||||||
#include <toolchain.h>
|
#include <toolchain.h>
|
||||||
#include <sections.h>
|
#include <sections.h>
|
||||||
#include <nano_private.h>
|
#include <nano_private.h>
|
||||||
|
|
||||||
#ifdef CONFIG_PRINTK
|
|
||||||
#include <misc/printk.h>
|
#include <misc/printk.h>
|
||||||
#define PRINTK(...) printk(__VA_ARGS__)
|
|
||||||
#else
|
|
||||||
#define PRINTK(...)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -53,29 +47,20 @@
|
||||||
*
|
*
|
||||||
* @return N/A
|
* @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(reason);
|
||||||
ARG_UNUSED(pEsf);
|
ARG_UNUSED(pEsf);
|
||||||
|
|
||||||
if ((curCtx == NANO_CTX_ISR) || _is_thread_essential()) {
|
if (k_is_in_isr() || _is_thread_essential()) {
|
||||||
PRINTK("Fatal fault in %s ! Spinning...\n",
|
printk("Fatal fault in %s! Spinning...\n",
|
||||||
NANO_CTX_ISR == curCtx
|
k_is_in_isr() ? "ISR" : "essential thread");
|
||||||
? "ISR"
|
|
||||||
: NANO_CTX_FIBER == curCtx ? "essential fiber"
|
|
||||||
: "essential task");
|
|
||||||
for (;;)
|
for (;;)
|
||||||
; /* spin forever */
|
; /* spin forever */
|
||||||
}
|
}
|
||||||
|
printk("Fatal fault in thread! Aborting.\n");
|
||||||
if (NANO_CTX_FIBER == curCtx) {
|
|
||||||
PRINTK("Fatal fault in fiber ! Aborting fiber.\n");
|
|
||||||
fiber_abort();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
PRINTK("Fatal fault in task ! Aborting task.\n");
|
|
||||||
k_thread_abort(_current);
|
k_thread_abort(_current);
|
||||||
|
|
||||||
|
CODE_UNREACHABLE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,8 +100,7 @@ FUNC_NORETURN void _NanoFatalErrorHandler(unsigned int reason,
|
||||||
}
|
}
|
||||||
PR_EXC("Current thread ID = %p\n"
|
PR_EXC("Current thread ID = %p\n"
|
||||||
"Faulting instruction address = 0x%" PRIx32 "\n",
|
"Faulting instruction address = 0x%" PRIx32 "\n",
|
||||||
sys_thread_self_get(),
|
k_current_get(), pEsf->pc);
|
||||||
pEsf->pc);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now that the error has been reported, call the user implemented
|
* Now that the error has been reported, call the user implemented
|
||||||
|
|
|
@ -117,8 +117,7 @@ static void _FaultThreadShow(const NANO_ESF *esf)
|
||||||
{
|
{
|
||||||
PR_EXC(" Executing thread ID (thread): %p\n"
|
PR_EXC(" Executing thread ID (thread): %p\n"
|
||||||
" Faulting instruction address: 0x%" PRIx32 "\n",
|
" Faulting instruction address: 0x%" PRIx32 "\n",
|
||||||
sys_thread_self_get(),
|
k_current_get(), esf->pc);
|
||||||
esf->pc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(CONFIG_CPU_CORTEX_M0_M0PLUS)
|
#if !defined(CONFIG_CPU_CORTEX_M0_M0PLUS)
|
||||||
|
|
|
@ -26,13 +26,7 @@
|
||||||
#include <toolchain.h>
|
#include <toolchain.h>
|
||||||
#include <sections.h>
|
#include <sections.h>
|
||||||
#include <nano_private.h>
|
#include <nano_private.h>
|
||||||
|
|
||||||
#ifdef CONFIG_PRINTK
|
|
||||||
#include <misc/printk.h>
|
#include <misc/printk.h>
|
||||||
#define PRINTK(...) printk(__VA_ARGS__)
|
|
||||||
#else
|
|
||||||
#define PRINTK(...)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -54,30 +48,20 @@
|
||||||
*
|
*
|
||||||
* @return N/A
|
* @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(reason);
|
||||||
ARG_UNUSED(pEsf);
|
ARG_UNUSED(pEsf);
|
||||||
|
|
||||||
if ((curCtx == NANO_CTX_ISR) || _is_thread_essential()) {
|
if (k_is_in_isr() || _is_thread_essential()) {
|
||||||
PRINTK("Fatal fault in %s ! Spinning...\n",
|
printk("Fatal fault in %s! Spinning...\n",
|
||||||
NANO_CTX_ISR == curCtx
|
k_is_in_isr() ? "ISR" : "essential thread");
|
||||||
? "ISR"
|
|
||||||
: NANO_CTX_FIBER == curCtx ? "essential fiber"
|
|
||||||
: "essential task");
|
|
||||||
for (;;)
|
for (;;)
|
||||||
; /* spin forever */
|
; /* spin forever */
|
||||||
}
|
}
|
||||||
|
printk("Fatal fault in thread! Aborting.\n");
|
||||||
if (NANO_CTX_FIBER == curCtx) {
|
|
||||||
PRINTK("Fatal fault in fiber ! Aborting fiber.\n");
|
|
||||||
fiber_abort();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
PRINTK("Fatal fault in task ! Aborting task.\n");
|
|
||||||
|
|
||||||
k_thread_abort(_current);
|
k_thread_abort(_current);
|
||||||
|
|
||||||
|
CODE_UNREACHABLE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,7 +97,7 @@ FUNC_NORETURN void _NanoFatalErrorHandler(unsigned int reason,
|
||||||
" r11: 0x%" PRIx32 " r12: 0x%" PRIx32 "\n"
|
" r11: 0x%" PRIx32 " r12: 0x%" PRIx32 "\n"
|
||||||
" r13: 0x%" PRIx32 " r14: 0x%" PRIx32
|
" r13: 0x%" PRIx32 " r14: 0x%" PRIx32
|
||||||
" r15: 0x%" PRIx32 " ra: 0x%" PRIx32 "\n"
|
" 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->r1, esf->r2, esf->r3, esf->r4,
|
||||||
esf->r5, esf->r6, esf->r7, esf->r8,
|
esf->r5, esf->r6, esf->r7, esf->r8,
|
||||||
esf->r9, esf->r10, esf->r11, esf->r12,
|
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,
|
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(reason);
|
||||||
ARG_UNUSED(pEsf);
|
ARG_UNUSED(pEsf);
|
||||||
|
|
||||||
if ((curCtx != NANO_CTX_ISR) && !_is_thread_essential()) {
|
if (k_is_in_isr() || _is_thread_essential()) {
|
||||||
if (curCtx == NANO_CTX_TASK) {
|
printk("Fatal fault in %s! Spinning...\n",
|
||||||
extern FUNC_NORETURN void _TaskAbort(void);
|
k_is_in_isr() ? "ISR" : "essential thread");
|
||||||
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");
|
|
||||||
#ifdef ALT_CPU_HAS_DEBUG_STUB
|
#ifdef ALT_CPU_HAS_DEBUG_STUB
|
||||||
_nios2_break();
|
_nios2_break();
|
||||||
#endif
|
#endif
|
||||||
for (;;)
|
for (;;)
|
||||||
; /* Spin forever */
|
; /* spin forever */
|
||||||
}
|
}
|
||||||
|
printk("Fatal fault in thread! Aborting.\n");
|
||||||
|
k_thread_abort(_current);
|
||||||
|
|
||||||
|
CODE_UNREACHABLE;
|
||||||
|
}
|
||||||
|
|
|
@ -26,18 +26,7 @@
|
||||||
#include <toolchain.h>
|
#include <toolchain.h>
|
||||||
#include <sections.h>
|
#include <sections.h>
|
||||||
#include <nano_private.h> /* to get access to '_current' */
|
#include <nano_private.h> /* to get access to '_current' */
|
||||||
|
|
||||||
/* override PRINTK from nano_private.h */
|
|
||||||
#ifdef PRINTK
|
|
||||||
#undef PRINTK
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_PRINTK
|
|
||||||
#include <misc/printk.h>
|
#include <misc/printk.h>
|
||||||
#define PRINTK(...) printk(__VA_ARGS__)
|
|
||||||
#else
|
|
||||||
#define PRINTK(...)
|
|
||||||
#endif /* CONFIG_PRINTK */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -60,36 +49,19 @@
|
||||||
* @return This function does not return.
|
* @return This function does not return.
|
||||||
*/
|
*/
|
||||||
FUNC_NORETURN void _SysFatalErrorHandler(unsigned int reason,
|
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(reason);
|
||||||
ARG_UNUSED(pEsf);
|
ARG_UNUSED(pEsf);
|
||||||
|
|
||||||
if ((curCtx != NANO_CTX_ISR) && !_is_thread_essential()) {
|
if (k_is_in_isr() || _is_thread_essential()) {
|
||||||
if (curCtx == NANO_CTX_TASK) {
|
printk("Fatal fault in %s! Spinning...\n",
|
||||||
extern FUNC_NORETURN void _TaskAbort(void);
|
k_is_in_isr() ? "ISR" : "essential thread");
|
||||||
PRINTK("Fatal task error! Aborting task.\n");
|
for (;;)
|
||||||
k_thread_abort(_current);
|
; /* spin forever */
|
||||||
} 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 */
|
|
||||||
}
|
}
|
||||||
|
printk("Fatal fault in thread! Aborting.\n");
|
||||||
|
k_thread_abort(_current);
|
||||||
|
|
||||||
do {
|
CODE_UNREACHABLE;
|
||||||
} while (1);
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue