]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/s390/kernel/ptrace.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
[linux-2.6-omap-h63xx.git] / arch / s390 / kernel / ptrace.c
index 2a8f0872ea8b2dbd435f8b4879f8fce11d448187..6e036bae987534d0c46e05159e6de1f310cc41bd 100644 (file)
@@ -86,13 +86,13 @@ FixPerRegisters(struct task_struct *task)
                per_info->control_regs.bits.storage_alt_space_ctl = 0;
 }
 
-static void set_single_step(struct task_struct *task)
+void user_enable_single_step(struct task_struct *task)
 {
        task->thread.per_info.single_step = 1;
        FixPerRegisters(task);
 }
 
-static void clear_single_step(struct task_struct *task)
+void user_disable_single_step(struct task_struct *task)
 {
        task->thread.per_info.single_step = 0;
        FixPerRegisters(task);
@@ -107,7 +107,7 @@ void
 ptrace_disable(struct task_struct *child)
 {
        /* make sure the single step bit is not set. */
-       clear_single_step(child);
+       user_disable_single_step(child);
 }
 
 #ifndef CONFIG_64BIT
@@ -294,7 +294,6 @@ poke_user(struct task_struct *child, addr_t addr, addr_t data)
 static int
 do_ptrace_normal(struct task_struct *child, long request, long addr, long data)
 {
-       unsigned long tmp;
        ptrace_area parea; 
        int copied, ret;
 
@@ -304,10 +303,7 @@ do_ptrace_normal(struct task_struct *child, long request, long addr, long data)
                /* Remove high order bit from address (only for 31 bit). */
                addr &= PSW_ADDR_INSN;
                /* read word at location addr. */
-               copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
-               if (copied != sizeof(tmp))
-                       return -EIO;
-               return put_user(tmp, (unsigned long __force __user *) data);
+               return generic_ptrace_peekdata(child, addr, data);
 
        case PTRACE_PEEKUSR:
                /* read the word at location addr in the USER area. */
@@ -318,10 +314,7 @@ do_ptrace_normal(struct task_struct *child, long request, long addr, long data)
                /* Remove high order bit from address (only for 31 bit). */
                addr &= PSW_ADDR_INSN;
                /* write the word at location addr. */
-               copied = access_process_vm(child, addr, &data, sizeof(data),1);
-               if (copied != sizeof(data))
-                       return -EIO;
-               return 0;
+               return generic_ptrace_pokedata(child, addr, data);
 
        case PTRACE_POKEUSR:
                /* write the word at location addr in the USER area */
@@ -658,7 +651,7 @@ do_ptrace(struct task_struct *child, long request, long addr, long data)
                        clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
                child->exit_code = data;
                /* make sure the single step bit is not set. */
-               clear_single_step(child);
+               user_disable_single_step(child);
                wake_up_process(child);
                return 0;
 
@@ -672,7 +665,7 @@ do_ptrace(struct task_struct *child, long request, long addr, long data)
                        return 0;
                child->exit_code = SIGKILL;
                /* make sure the single step bit is not set. */
-               clear_single_step(child);
+               user_disable_single_step(child);
                wake_up_process(child);
                return 0;
 
@@ -682,19 +675,11 @@ do_ptrace(struct task_struct *child, long request, long addr, long data)
                        return -EIO;
                clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
                child->exit_code = data;
-               if (data)
-                       set_tsk_thread_flag(child, TIF_SINGLE_STEP);
-               else
-                       set_single_step(child);
+               user_enable_single_step(child);
                /* give it a chance to run. */
                wake_up_process(child);
                return 0;
 
-       case PTRACE_DETACH:
-               /* detach a process that was attached. */
-               return ptrace_detach(child, data);
-
-
        /* Do requests that differ for 31/64 bit */
        default:
 #ifdef CONFIG_COMPAT