struct pt_regs *regs, unsigned int mask)
 {
        int tmp, err = 0;
-       u32 eflags;
 
        tmp = 0;
        __asm__("movl %%gs,%0" : "=r"(tmp): "0"(tmp));
        err |= __put_user(current->thread.trap_no, &sc->trapno);
        err |= __put_user(current->thread.error_code, &sc->err);
        err |= __put_user((u32)regs->rip, &sc->eip);
-       eflags = regs->eflags;
-       if (current->ptrace & PT_PTRACED)
-               eflags &= ~TF_MASK;
-       err |= __put_user((u32)eflags, &sc->eflags);
+       err |= __put_user((u32)regs->eflags, &sc->eflags);
        err |= __put_user((u32)regs->rsp, &sc->esp_at_signal);
 
        tmp = save_i387_ia32(current, fpstate, regs, 0);
        regs->ss = __USER32_DS; 
 
        set_fs(USER_DS);
-       if (regs->eflags & TF_MASK) {
-               if (current->ptrace & PT_PTRACED) {
-                       ptrace_notify(SIGTRAP);
-               } else {
-                       regs->eflags &= ~TF_MASK;
-               }
-       }
+    regs->eflags &= ~TF_MASK;
+    if (test_thread_flag(TIF_SINGLESTEP))
+        ptrace_notify(SIGTRAP);
 
 #if DEBUG_SIG
        printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
        regs->ss = __USER32_DS; 
 
        set_fs(USER_DS);
-       if (regs->eflags & TF_MASK) {
-               if (current->ptrace & PT_PTRACED) {
-                       ptrace_notify(SIGTRAP);
-               } else {
-                       regs->eflags &= ~TF_MASK;
-               }
-       }
+    regs->eflags &= ~TF_MASK;
+    if (test_thread_flag(TIF_SINGLESTEP))
+        ptrace_notify(SIGTRAP);
 
 #if DEBUG_SIG
        printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",