[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20120425154611.GA23672@redhat.com>
Date: Wed, 25 Apr 2012 17:46:11 +0200
From: Oleg Nesterov <oleg@...hat.com>
To: Al Viro <viro@...IV.linux.org.uk>
Cc: Linus Torvalds <torvalds@...ux-foundation.org>,
linux-arch@...r.kernel.org, linux-kernel@...r.kernel.org,
Russell King <linux@....linux.org.uk>,
Tejun Heo <tj@...nel.org>, Arnd Bergmann <arnd@...db.de>,
Roland McGrath <roland@...k.frob.com>
Subject: Re: [RFC] TIF_NOTIFY_RESUME, arch/*/*/*signal*.c and all such
On 04/25, Oleg Nesterov wrote:
>
> On 04/25, Al Viro wrote:
> >
> > Point... Still, since we are talking about an arbitrary wide window (the
> > damn thing is waiting for signals to arrive, after all) this doesn't
> > sound good;
> > ...
> > IMO it's
> > a QoI problem at the very least.
>
> and looks confusing, agreed.
OK, I didn't really try to think, and somehow I simply can't wake up today.
But perhaps we can do something the following? We add the new syscall
sys_eintr(void)
{
return -EINTR;
}
(perhaps not strictly needed, perhaps we can reuse sys_restart_syscal)
Now,
--- x/arch/x86/kernel/signal.c
+++ x/arch/x86/kernel/signal.c
@@ -711,6 +711,13 @@ handle_signal(unsigned long sig, siginfo
regs->ax = regs->orig_ax;
regs->ip -= 2;
break;
+
+ case -EINTR:
+ break;
+
+ default:
+ if (regs->orig_ax == NR_eintr)
+ regs->ax = NR_eintr;
}
}
@@ -791,6 +798,7 @@ static void do_signal(struct pt_regs *re
case -ERESTARTSYS:
case -ERESTARTNOINTR:
regs->ax = regs->orig_ax;
+ regs->orig_ax = NR_eintr;
regs->ip -= 2;
break;
this ignores ERESTART_RESTARTBLOCK for simplicity.
And I am not sure this can't confuse the tools like strace...
Oleg.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists