From: Petr Tesarik <ptesarik@suse.cz>
To: Oleg Nesterov <oleg@tv-sign.ru>
Cc: David Woodhouse <dwmw2@infradead.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Roland McGrath <roland@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Martin Schwidefsky <schwidefsky@de.ibm.com>,
linux-s390@vger.kernel.org, tony.luck@intel.com,
linux-ia64@vger.kernel.org, linux-arch@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/4] set_restore_sigmask TIF_SIGPENDING
Date: Wed, 09 Apr 2008 14:57:04 +0200 [thread overview]
Message-ID: <1207745824.8604.16.camel@elijah.suse.cz> (raw)
In-Reply-To: <20080409113939.GA99@tv-sign.ru>
On Wed, 2008-04-09 at 15:39 +0400, Oleg Nesterov wrote:
> On 04/09, David Woodhouse wrote:
> >
> > On Tue, 2008-04-08 at 15:35 +0400, Oleg Nesterov wrote:
> > > Why do we need any flag? It looks a bit ugly. Isn't it better to introduce
> > > the new magic ERESTART_XXX which means ERESTARTNOHAND + restore-sigmask ?
> > >
> > > We only need this flag as an implicit parameter to the arch dependent do_signal()
> > > which we can't call directly, and thus it must imply TIF_SIGPENDING, and it
> > > is not valid after do_signal() (should be cleared). This all looks like
> > > ERESTART_ magic, why should we add something else ?
> > >
> > > See also http://marc.info/?l=linux-kernel&m=113734458516136
> > >
> > > Of course, probably it is too late to change the implementation even if
> > > I am right, the question is: what I am missed?
> >
> > Q: When ppoll() is interrupted by a signal, what signal mask should be
> > active when the signal handler is active?
> >
> > I believe that the signal handler should run with the temporary sigmask
> > which was set by ppoll(), and the original sigmask should be restored
> > only when the handler completes -- and that's what we achieve with
> > TIF_RESTORE_SIGMASK.
>
> Yes sure.
>
> > So a signal which was originally enabled but is temporarily disabled by
> > the mask passed to ppoll() will not be able to interrupt the handler for
> > the signal which interrupted ppoll().
> >
> > Your version will restore the original signal mask _before_ invoking the
> > signal handler which interrupted ppoll()
>
> Why do you think so?
>
> Please look at the "patch" below,
>
> --- arch/x86/kernel/signal_32.c 2008-02-15 16:58:38.000000000 +0300
> +++ - 2008-04-09 15:16:05.393510662 +0400
> @@ -526,10 +526,14 @@ handle_signal(unsigned long sig, siginfo
> {
> int ret;
>
> + oldset = ¤t->blocked;
> +
> /* Are we from a system call? */
> if (regs->orig_ax >= 0) {
> /* If so, check system call restarting.. */
> switch (regs->ax) {
> + case -ERESTART_XXX:
> + oldset = ¤t->saved_sigmask;
> case -ERESTART_RESTARTBLOCK:
> case -ERESTARTNOHAND:
> regs->ax = -EINTR;
>
> We also need a similar change in do_signal(). Now,
>
> --- fs/select.c 2008-02-15 16:59:15.000000000 +0300
> +++ - 2008-04-09 15:19:29.015991911 +0400
> @@ -805,9 +805,8 @@ asmlinkage long sys_ppoll(struct pollfd
> if (sigmask) {
> memcpy(¤t->saved_sigmask, &sigsaved,
> sizeof(sigsaved));
> - set_thread_flag(TIF_RESTORE_SIGMASK);
> }
> - ret = -ERESTARTNOHAND;
> + ret = -ERESTART_XXX;
> } else if (sigmask)
> sigprocmask(SIG_SETMASK, &sigsaved, NULL);
>
> Perhaps I missed something else, though. Not that I really think it worth
> changing, but I'll try to make a proof of concept patch on Weekend, on top
> of Roland's cleanups.
>
> As I see it, the main disadvantage of ERESTART_ approach is that we need 2
> new ERESTART_ codes, one for ERESTARTNOHAND, another for ERESTART_RESTARTBLOCK.
> And yes, while I personally think this is "more clean", it is very subjective.
One error code more or less, that's cheap. Thread flags are a much more
limited resource.
Just my two cents,
Petr Tesarik
next prev parent reply other threads:[~2008-04-09 12:57 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-29 0:12 [PATCH 1/4] set_restore_sigmask Roland McGrath
2008-03-29 0:12 ` Roland McGrath
[not found] ` <20080329001230.D013726FA1D-nL1rrgvulkcB9AHHLWeGtNQXobZC6xk2@public.gmane.org>
2008-03-29 0:13 ` [PATCH 2/4] set_restore_sigmask TIF_SIGPENDING Roland McGrath
2008-03-29 0:13 ` Roland McGrath
[not found] ` <20080329001341.7F93826FA1D-nL1rrgvulkcB9AHHLWeGtNQXobZC6xk2@public.gmane.org>
2008-03-29 0:53 ` Linus Torvalds
2008-03-29 0:53 ` Linus Torvalds
[not found] ` <alpine.LFD.1.00.0803281746480.14670-5CScLwifNT1QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>
2008-03-29 2:24 ` Roland McGrath
2008-03-29 2:24 ` Roland McGrath
2008-03-29 2:52 ` Linus Torvalds
2008-03-29 2:52 ` Linus Torvalds
[not found] ` <alpine.LFD.1.00.0803281942440.14670-5CScLwifNT1QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>
2008-03-29 3:12 ` Roland McGrath
2008-03-29 3:12 ` Roland McGrath
[not found] ` <20080329022408.0DD4726FA1D-nL1rrgvulkcB9AHHLWeGtNQXobZC6xk2@public.gmane.org>
2008-03-29 3:11 ` [PATCH 1/2] HAVE_SET_RESTORE_SIGMASK Roland McGrath
2008-03-29 3:11 ` Roland McGrath
2008-04-09 11:45 ` David Woodhouse
2008-04-09 11:45 ` David Woodhouse
2008-04-10 20:32 ` Russell King
2008-04-10 20:32 ` Russell King
[not found] ` <20080410203250.GA21589-f404yB8NqCZvn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2008-04-11 13:40 ` David Woodhouse
2008-04-11 13:40 ` David Woodhouse
2008-03-29 3:14 ` Roland McGrath
2008-03-29 3:14 ` Roland McGrath
2008-03-29 3:14 ` [PATCH 2/2] x86 TS_RESTORE_SIGMASK Roland McGrath
2008-03-29 3:14 ` Roland McGrath
2008-03-31 13:01 ` Ingo Molnar
2008-03-31 13:01 ` Ingo Molnar
2008-03-31 19:30 ` Roland McGrath
2008-03-31 19:30 ` Roland McGrath
2008-03-30 10:53 ` [PATCH 2/4] set_restore_sigmask TIF_SIGPENDING Paul Mackerras
2008-03-30 10:53 ` Paul Mackerras
2008-04-08 11:35 ` Oleg Nesterov
2008-04-08 11:35 ` Oleg Nesterov
[not found] ` <20080408113519.GA227-6lXkIZvqkOAvJsYlp49lxw@public.gmane.org>
2008-04-08 14:53 ` Linus Torvalds
2008-04-08 14:53 ` Linus Torvalds
2008-04-08 19:51 ` Roland McGrath
2008-04-08 19:51 ` Roland McGrath
2008-04-09 11:16 ` David Woodhouse
2008-04-09 11:16 ` David Woodhouse
[not found] ` <1207739787.27048.57.camel-Fexsq3y4057IgHVZqg5X0TlWvGAXklZc@public.gmane.org>
2008-04-09 11:39 ` Oleg Nesterov
2008-04-09 11:39 ` Oleg Nesterov
2008-04-09 12:57 ` Petr Tesarik [this message]
2008-04-09 12:57 ` Petr Tesarik
[not found] ` <20080409113939.GA99-6lXkIZvqkOAvJsYlp49lxw@public.gmane.org>
2008-04-09 16:14 ` David Woodhouse
2008-04-09 16:14 ` David Woodhouse
2008-04-09 16:22 ` Oleg Nesterov
2008-04-09 16:22 ` Oleg Nesterov
2008-04-09 18:40 ` David Woodhouse
2008-04-09 18:40 ` David Woodhouse
2008-03-29 0:14 ` [PATCH 3/4] s390 renumber TIF_RESTORE_SIGMASK Roland McGrath
2008-03-29 0:14 ` Roland McGrath
2008-03-31 7:53 ` Martin Schwidefsky
2008-03-31 7:53 ` Martin Schwidefsky
2008-03-29 0:14 ` [PATCH 4/4] ia64 " Roland McGrath
2008-03-29 0:14 ` Roland McGrath
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1207745824.8604.16.camel@elijah.suse.cz \
--to=ptesarik@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=dwmw2@infradead.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=oleg@tv-sign.ru \
--cc=roland@redhat.com \
--cc=schwidefsky@de.ibm.com \
--cc=tony.luck@intel.com \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox