linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / arch / s390 / kernel / traps.c
index bde1d1d..a46793b 100644 (file)
@@ -14,6 +14,7 @@
  * 'Traps.c' handles hardware traps and faults after we have saved some
  * state in 'asm.s'.
  */
+#include <linux/config.h>
 #include <linux/sched.h>
 #include <linux/kernel.h>
 #include <linux/string.h>
@@ -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