X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fs390%2Fkernel%2Ftraps.c;h=a46793beeddda592d70797ed79fc4c462477f1d6;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=bde1d1d598586cc483bcb84ca0211008d3a70711;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c index bde1d1d59..a46793bee 100644 --- a/arch/s390/kernel/traps.c +++ b/arch/s390/kernel/traps.c @@ -14,6 +14,7 @@ * 'Traps.c' handles hardware traps and faults after we have saved some * state in 'asm.s'. */ +#include #include #include #include @@ -149,11 +150,13 @@ void show_stack(struct task_struct *task, unsigned long *sp) unsigned long *stack; int i; + // debugging aid: "show_stack(NULL);" prints the + // back trace for this cpu. + if (!sp) - stack = task ? (unsigned long *) task->thread.ksp : __r15; - else - stack = sp; + sp = task ? (unsigned long *) task->thread.ksp : __r15; + stack = sp; for (i = 0; i < kstack_depth_to_print; i++) { if (((addr_t) stack & (THREAD_SIZE-1)) == 0) break; @@ -170,7 +173,7 @@ void show_stack(struct task_struct *task, unsigned long *sp) */ void dump_stack(void) { - show_stack(NULL, NULL); + show_stack(0, 0); } EXPORT_SYMBOL(dump_stack); @@ -331,9 +334,9 @@ static void inline do_trap(long interruption_code, int signr, char *str, } } -static inline void __user *get_check_address(struct pt_regs *regs) +static inline void *get_check_address(struct pt_regs *regs) { - return (void __user *)((regs->psw.addr-S390_lowcore.pgm_ilc) & PSW_ADDR_INSN); + return (void *)((regs->psw.addr-S390_lowcore.pgm_ilc) & PSW_ADDR_INSN); } void do_single_step(struct pt_regs *regs) @@ -360,7 +363,7 @@ asmlinkage void name(struct pt_regs * regs, long interruption_code) \ info.si_signo = signr; \ info.si_errno = 0; \ info.si_code = sicode; \ - info.si_addr = siaddr; \ + info.si_addr = (void *)siaddr; \ do_trap(interruption_code, signr, str, regs, &info); \ } @@ -392,7 +395,7 @@ DO_ERROR_INFO(SIGILL, "translation exception", translation_exception, ILL_ILLOPN, get_check_address(regs)) static inline void -do_fp_trap(struct pt_regs *regs, void __user *location, +do_fp_trap(struct pt_regs *regs, void *location, int fpc, long interruption_code) { siginfo_t si; @@ -424,10 +427,10 @@ asmlinkage void illegal_op(struct pt_regs * regs, long interruption_code) { siginfo_t info; __u8 opcode[6]; - __u16 __user *location; + __u16 *location; int signal = 0; - location = get_check_address(regs); + location = (__u16 *) get_check_address(regs); /* * We got all needed information from the lowcore and can @@ -559,10 +562,10 @@ DO_ERROR_INFO(SIGILL, "specification exception", specification_exception, asmlinkage void data_exception(struct pt_regs * regs, long interruption_code) { - __u16 __user *location; + __u16 *location; int signal = 0; - location = get_check_address(regs); + location = (__u16 *) get_check_address(regs); /* * We got all needed information from the lowcore and can