mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
[AVR32] Clean up exception handling code
* Use generic BUG() handling
* Remove some useless debug statements
* Use a common function _exception() to send signals or oops when
an exception can't be handled. This makes sure init doesn't
enter an infinite exception loop as well. Borrowed from powerpc.
* Add some basic exception tracing support to the page fault code.
* Rework dump_stack(), show_regs() and friends and move everything
into process.c
* Print information about configuration options and chip type when
oopsing
Signed-off-by: Haavard Skinnemoen <[email protected]>
This commit is contained in:
parent
3b328c9809
commit
623b0355d5
9 changed files with 402 additions and 417 deletions
|
|
@ -18,27 +18,53 @@
|
|||
|
||||
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
||||
|
||||
#define BUG() \
|
||||
do { \
|
||||
asm volatile(".hword %0\n\t" \
|
||||
".hword %1\n\t" \
|
||||
".long %2" \
|
||||
: \
|
||||
: "n"(AVR32_BUG_OPCODE), \
|
||||
"i"(__LINE__), "X"(__FILE__)); \
|
||||
} while (0)
|
||||
#define _BUG_OR_WARN(flags) \
|
||||
asm volatile( \
|
||||
"1: .hword %0\n" \
|
||||
" .section __bug_table,\"a\",@progbits\n" \
|
||||
"2: .long 1b\n" \
|
||||
" .long %1\n" \
|
||||
" .short %2\n" \
|
||||
" .short %3\n" \
|
||||
" .org 2b + %4\n" \
|
||||
" .previous" \
|
||||
: \
|
||||
: "i"(AVR32_BUG_OPCODE), "i"(__FILE__), \
|
||||
"i"(__LINE__), "i"(flags), \
|
||||
"i"(sizeof(struct bug_entry)))
|
||||
|
||||
#else
|
||||
|
||||
#define BUG() \
|
||||
do { \
|
||||
asm volatile(".hword %0\n\t" \
|
||||
: : "n"(AVR32_BUG_OPCODE)); \
|
||||
} while (0)
|
||||
#define _BUG_OR_WARN(flags) \
|
||||
asm volatile( \
|
||||
"1: .hword %0\n" \
|
||||
" .section __bug_table,\"a\",@progbits\n" \
|
||||
"2: .long 1b\n" \
|
||||
" .short %1\n" \
|
||||
" .org 2b + %2\n" \
|
||||
" .previous" \
|
||||
: \
|
||||
: "i"(AVR32_BUG_OPCODE), "i"(flags), \
|
||||
"i"(sizeof(struct bug_entry)))
|
||||
|
||||
#endif /* CONFIG_DEBUG_BUGVERBOSE */
|
||||
|
||||
#define BUG() \
|
||||
do { \
|
||||
_BUG_OR_WARN(0); \
|
||||
for (;;); \
|
||||
} while (0)
|
||||
|
||||
#define WARN_ON(condition) \
|
||||
({ \
|
||||
typeof(condition) __ret_warn_on = (condition); \
|
||||
if (unlikely(__ret_warn_on)) \
|
||||
_BUG_OR_WARN(BUGFLAG_WARNING); \
|
||||
unlikely(__ret_warn_on); \
|
||||
})
|
||||
|
||||
#define HAVE_ARCH_BUG
|
||||
#define HAVE_ARCH_WARN_ON
|
||||
|
||||
#endif /* CONFIG_BUG */
|
||||
|
||||
|
|
|
|||
|
|
@ -134,10 +134,10 @@ extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
|
|||
#define thread_saved_pc(tsk) ((tsk)->thread.cpu_context.pc)
|
||||
|
||||
struct pt_regs;
|
||||
void show_trace(struct task_struct *task, unsigned long *stack,
|
||||
struct pt_regs *regs);
|
||||
|
||||
extern unsigned long get_wchan(struct task_struct *p);
|
||||
extern void show_regs_log_lvl(struct pt_regs *regs, const char *log_lvl);
|
||||
extern void show_stack_log_lvl(struct task_struct *tsk, unsigned long sp,
|
||||
struct pt_regs *regs, const char *log_lvl);
|
||||
|
||||
#define KSTK_EIP(tsk) ((tsk)->thread.cpu_context.pc)
|
||||
#define KSTK_ESP(tsk) ((tsk)->thread.cpu_context.ksp)
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
#define __ASM_AVR32_SYSTEM_H
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
|
|
@ -140,15 +141,9 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
|||
sizeof(*(ptr))))
|
||||
|
||||
struct pt_regs;
|
||||
extern void __die(const char *, struct pt_regs *, unsigned long,
|
||||
const char *, const char *, unsigned long);
|
||||
extern void __die_if_kernel(const char *, struct pt_regs *, unsigned long,
|
||||
const char *, const char *, unsigned long);
|
||||
|
||||
#define die(msg, regs, err) \
|
||||
__die(msg, regs, err, __FILE__ ":", __FUNCTION__, __LINE__)
|
||||
#define die_if_kernel(msg, regs, err) \
|
||||
__die_if_kernel(msg, regs, err, __FILE__ ":", __FUNCTION__, __LINE__)
|
||||
void NORET_TYPE die(const char *str, struct pt_regs *regs, long err);
|
||||
void _exception(long signr, struct pt_regs *regs, int code,
|
||||
unsigned long addr);
|
||||
|
||||
#define arch_align_stack(x) (x)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue