Introduce xnarch_fault_um() to test if a fault happened in user-mode and applies the new feature to report core and driver crashes more verbosely.
--- include/asm-generic/system.h | 5 +++++ include/asm-sim/system.h | 1 + include/asm-uvm/system.h | 1 + ksrc/nucleus/pod.c | 11 ++++++++++- 4 files changed, 17 insertions(+), 1 deletion(-) Index: xenomai/include/asm-generic/system.h =================================================================== --- xenomai.orig/include/asm-generic/system.h +++ xenomai/include/asm-generic/system.h @@ -35,6 +35,7 @@ #include <asm/uaccess.h> #include <asm/param.h> #include <asm/mmu_context.h> +#include <asm/ptrace.h> #include <linux/config.h> #include <asm/xenomai/hal.h> #include <asm/xenomai/atomic.h> @@ -52,6 +53,10 @@ #define xnarch_trace_panic_freeze() rthal_trace_panic_freeze() #define xnarch_trace_panic_dump() rthal_trace_panic_dump() +#ifndef xnarch_fault_um +#define xnarch_fault_um(fi) user_mode(fi->regs) +#endif + #define module_param_value(parm) (parm) typedef unsigned long spl_t; Index: xenomai/include/asm-sim/system.h =================================================================== --- xenomai.orig/include/asm-sim/system.h +++ xenomai/include/asm-sim/system.h @@ -56,6 +56,7 @@ typedef void *xnarch_fltinfo_t; /* Unuse #define xnarch_fault_code(fi) 0 #define xnarch_fault_pc(fi) 0L #define xnarch_fault_notify(fi) 1 +#define xnarch_fault_um(fi) 0 typedef int spl_t; Index: xenomai/include/asm-uvm/system.h =================================================================== --- xenomai.orig/include/asm-uvm/system.h +++ xenomai/include/asm-uvm/system.h @@ -192,6 +192,7 @@ typedef void *xnarch_fltinfo_t; /* Unuse #define xnarch_fault_code(fi) 0 #define xnarch_fault_pc(fi) 0L #define xnarch_fault_notify(fi) 1 +#define xnarch_fault_um(fi) 0 typedef struct xnarch_heapcb { Index: xenomai/ksrc/nucleus/pod.c =================================================================== --- xenomai.orig/ksrc/nucleus/pod.c +++ xenomai/ksrc/nucleus/pod.c @@ -194,7 +194,16 @@ static int xnpod_fault_handler(xnarch_fl if (xnpod_shadow_p()) { #ifdef CONFIG_XENO_OPT_DEBUG - if (xnarch_fault_notify(fltinfo)) /* Don't report debug traps */ + if (!xnarch_fault_um(fltinfo)) { + xnarch_trace_panic_freeze(); + xnprintf + ("Switching %s to secondary mode after exception #%u in " + "kernel-space at 0x%lx (pid %d)\n", thread->name, + xnarch_fault_trap(fltinfo), + xnarch_fault_pc(fltinfo), + xnthread_user_pid(thread)); + xnarch_trace_panic_dump(); + } else if (xnarch_fault_notify(fltinfo)) /* Don't report debug traps */ xnprintf ("Switching %s to secondary mode after exception #%u from " "user-space at 0x%lx (pid %d)\n", thread->name, -- _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core