Merge master.kernel.org:/pub/scm/linux/kernel/git/herbert/crypto-2.6
[linux-drm-fsl-dcu.git] / arch / cris / arch-v32 / kernel / ptrace.c
index 208489da2a87fe0ee7ad1843ae69b28439539d4c..d4d57b74133436a607518e7471318c3c1def3b92 100644 (file)
@@ -6,7 +6,6 @@
 #include <linux/sched.h>
 #include <linux/mm.h>
 #include <linux/smp.h>
-#include <linux/smp_lock.h>
 #include <linux/errno.h>
 #include <linux/ptrace.h>
 #include <linux/user.h>
@@ -46,7 +45,7 @@ long get_reg(struct task_struct *task, unsigned int regno)
        unsigned long ret;
 
        if (regno <= PT_EDA)
-               ret = ((unsigned long *)user_regs(task->thread_info))[regno];
+               ret = ((unsigned long *)task_pt_regs(task))[regno];
        else if (regno == PT_USP)
                ret = task->thread.usp;
        else if (regno == PT_PPC)
@@ -65,13 +64,13 @@ long get_reg(struct task_struct *task, unsigned int regno)
 int put_reg(struct task_struct *task, unsigned int regno, unsigned long data)
 {
        if (regno <= PT_EDA)
-               ((unsigned long *)user_regs(task->thread_info))[regno] = data;
+               ((unsigned long *)task_pt_regs(task))[regno] = data;
        else if (regno == PT_USP)
                task->thread.usp = data;
        else if (regno == PT_PPC) {
                /* Write pseudo-PC to ERP only if changed. */
                if (data != get_pseudo_pc(task))
-                       ((unsigned long *)user_regs(task->thread_info))[PT_ERP] = data;
+                       task_pt_regs(task)->erp = data;
        } else if (regno <= PT_MAX)
                return put_debugreg(task->pid, regno, data);
        else
@@ -99,55 +98,11 @@ ptrace_disable(struct task_struct *child)
 }
 
 
-asmlinkage int
-sys_ptrace(long request, long pid, long addr, long data)
+long arch_ptrace(struct task_struct *child, long request, long addr, long data)
 {
-       struct task_struct *child;
        int ret;
        unsigned long __user *datap = (unsigned long __user *)data;
 
-       lock_kernel();
-       ret = -EPERM;
-
-       if (request == PTRACE_TRACEME) {
-               /* are we already being traced? */
-               if (current->ptrace & PT_PTRACED)
-                       goto out;
-               ret = security_ptrace(current->parent, current);
-               if (ret)
-                       goto out;
-               /* set the ptrace bit in the process flags. */
-               current->ptrace |= PT_PTRACED;
-               ret = 0;
-               goto out;
-       }
-
-       ret = -ESRCH;
-       read_lock(&tasklist_lock);
-       child = find_task_by_pid(pid);
-
-       if (child)
-               get_task_struct(child);
-
-       read_unlock(&tasklist_lock);
-
-       if (!child)
-               goto out;
-
-       ret = -EPERM;
-
-       if (pid == 1)           /* Leave the init process alone! */
-               goto out_tsk;
-
-       if (request == PTRACE_ATTACH) {
-               ret = ptrace_attach(child);
-               goto out_tsk;
-       }
-
-       ret = ptrace_check_attach(child, request == PTRACE_KILL);
-       if (ret < 0)
-               goto out_tsk;
-
        switch (request) {
                /* Read word at location address. */
                case PTRACE_PEEKTEXT:
@@ -347,10 +302,7 @@ sys_ptrace(long request, long pid, long addr, long data)
                        ret = ptrace_request(child, request, addr, data);
                        break;
        }
-out_tsk:
-       put_task_struct(child);
-out:
-       unlock_kernel();
+
        return ret;
 }