Messages in this thread Patch in this message | | | Date | Wed, 25 Apr 2012 17:46:11 +0200 | From | Oleg Nesterov <> | 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.
| |