Re: [PATCH] x86_64: fix delayed signals

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Linus Torvalds <torvalds@...>
Cc: Ingo Molnar <mingo@...>, Thomas Gleixner <tglx@...>, Andrew Morton <akpm@...>, <linux-kernel@...>
Date: Thursday, July 10, 2008 - 6:42 pm

> But if you really want that behaviour, then re-introducing the loop would 

I don't think so.  Firstly, TIF_SIGPENDING is not the only flag in
question.  There are other reasons to re-enter do_notify_resume().
If those are set during signal processing et al, they should take
effect before going back to user mode.

Second, there is always a race.  Anywhere after the last time the
siglock was held inside do_signal(), there can be an interrupt that
sets TIF_SIGPENDING (or other _TIF_DO_NOTIFY_MASK flags).  If you go
on to return to user mode, then it can be a long time before the new
signal is actually delivered (til the next tick).  

It really is necessary to check all the _TIF_WORK_MASK flags with
interrupts disabled, last thing.  I just don't see how any short
cuts here can be robust.  It's simple, it's right, and it's what all
the other paths (and all other arch code I've ever noticed) do.

Since it's necessary to have robust checks in the final part of the
assembly code path anyway, and stacked signals are rare, there is
just no special reason to have a loop in do_signal().  In the common
case it every time retakes the siglock again when unnecessary, with
bad SMP performance effects; optimizing that with a signal_pending()
check just shows why it's simpler not to have a loop.  Frankly, I'm
glad we don't have one because it would fix only the scenario that
has a test case that's real easy to write, and leave lying all the
much more hairy ones that will cause someone to spend days and days
some day later tearing his hair out.


Thanks,
Roland
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH] x86_64: fix delayed signals, Roland McGrath, (Thu Jul 10, 5:50 pm)
Re: [PATCH] x86_64: fix delayed signals, Ingo Molnar, (Fri Jul 11, 1:46 am)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Fri Jul 11, 1:58 pm)
Re: [PATCH] x86_64: fix delayed signals, Andi Kleen, (Sat Jul 12, 8:27 am)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Sat Jul 12, 1:41 pm)
Re: [PATCH] x86_64: fix delayed signals, Andi Kleen, (Sun Jul 13, 5:38 am)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Sun Jul 13, 1:32 pm)
Re: [PATCH] x86_64: fix delayed signals, Andi Kleen, (Sun Jul 13, 2:59 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Sun Jul 13, 3:08 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Fri Jul 11, 2:10 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Fri Jul 11, 4:37 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Fri Jul 11, 7:22 pm)
Re: [PATCH] x86_64: fix delayed signals, Török Edwin, (Sat Jul 12, 6:32 am)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Sat Jul 12, 1:29 pm)
Re: [PATCH] x86_64: fix delayed signals, Török Edwin, (Sat Jul 12, 4:26 pm)
Re: [PATCH] x86_64: fix delayed signals, Denys Vlasenko, (Sat Jul 12, 4:57 pm)
Re: [PATCH] x86_64: fix delayed signals, Oleg Nesterov, (Sun Jul 13, 6:46 am)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Sun Jul 13, 2:36 pm)
Re: [PATCH] x86_64: fix delayed signals, Peter T. Breuer, (Sun Jul 13, 2:45 pm)
Re: [PATCH] x86_64: fix delayed signals, Denys Vlasenko, (Sun Jul 13, 8:34 am)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Sat Jul 12, 4:47 pm)
Re: [PATCH] x86_64: fix delayed signals, Török Edwin, (Sat Jul 12, 9:42 am)
Re: [PATCH] x86_64: fix delayed signals, Arjan van de Ven, (Sat Jul 12, 10:55 am)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Sat Jul 12, 2:00 pm)
Re: [PATCH] x86_64: fix delayed signals, Arjan van de Ven, (Sat Jul 12, 2:15 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Sat Jul 12, 2:28 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Fri Jul 11, 2:31 pm)
Re: [PATCH] x86_64: fix delayed signals, Arjan van de Ven, (Fri Jul 11, 6:53 pm)
Re: [PATCH] x86_64: fix delayed signals, Török Edwin, (Sat Jul 12, 6:33 am)
Re: [PATCH] x86_64: fix delayed signals, Roland McGrath, (Fri Jul 11, 2:07 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Fri Jul 11, 2:16 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Fri Jul 11, 2:17 pm)
Re: [PATCH] x86_64: fix delayed signals, Elias Oltmanns, (Fri Jul 11, 8:24 am)
Re: [PATCH] x86_64: fix delayed signals, Török Edwin, (Fri Jul 11, 7:13 am)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Thu Jul 10, 6:06 pm)
Re: [PATCH] x86_64: fix delayed signals, Roland McGrath, (Thu Jul 10, 6:42 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Thu Jul 10, 6:51 pm)
Re: [PATCH] x86_64: fix delayed signals, Roland McGrath, (Thu Jul 10, 8:52 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Thu Jul 10, 9:48 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Thu Jul 10, 10:02 pm)
Re: [PATCH] x86_64: fix delayed signals, Andi Kleen, (Sat Jul 12, 8:24 am)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Thu Jul 10, 10:22 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Thu Jul 10, 10:26 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Thu Jul 10, 9:18 pm)
Re: [PATCH] x86_64: fix delayed signals, Roland McGrath, (Thu Jul 10, 9:27 pm)
Re: [PATCH] x86_64: fix delayed signals, Linus Torvalds, (Thu Jul 10, 7:02 pm)