As you suggested, we can simplify ptrace_request()->ptrace_resume() path, ptrace_resume_action() checks all "for resume" requests except PTRACE_CONT.
--- kernel/ptrace.c | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) --- PU/kernel/ptrace.c~125_PTRACE_REQUEST_DEFAULT_RESUME 2009-10-30 04:25:53.000000000 +0100 +++ PU/kernel/ptrace.c 2009-11-01 22:48:24.000000000 +0100 @@ -854,6 +854,11 @@ static int ptrace_resume_action(struct t case PTRACE_SYSCALL: events |= UTRACE_EVENT_SYSCALL; break; + + case PTRACE_CONT: + break; + default: + return -EIO; } if (events != engine->flags && @@ -975,21 +980,6 @@ int ptrace_request(struct task_struct *c ret = ptrace_detach(child, data); break; -#ifdef PTRACE_SINGLESTEP - case PTRACE_SINGLESTEP: -#endif -#ifdef PTRACE_SINGLEBLOCK - case PTRACE_SINGLEBLOCK: -#endif -#ifdef PTRACE_SYSEMU - case PTRACE_SYSEMU: - case PTRACE_SYSEMU_SINGLESTEP: -#endif - case PTRACE_SYSCALL: - case PTRACE_CONT: - ret = ptrace_resume(child, engine, request, data); - break; - case PTRACE_KILL: /* Ugly historical behaviour. */ if (task_is_traced(child)) @@ -998,7 +988,7 @@ int ptrace_request(struct task_struct *c break; default: - ret = -EIO; + ret = ptrace_resume(child, engine, request, data); break; }