[PATCH] RFC: s390: Move get_signal_to_deliver() up in do_signal
Serge E. Hallyn
serue at us.ibm.com
Thu Feb 11 15:03:31 PST 2010
Quoting Serge E. Hallyn (serue at us.ibm.com):
> Well, perhaps I've been making this more complicated than it
> needs to be.
>
> If we get frozen+checkpointed, then no matter whether we were
> frozen with a real pending signal or not, we won't handle the
> signal during restart, so we can treat it as though signr==0.
>
> So, in that case, the only thing we need to change at end of
> sys_restart is to handle the case:
>
> /* Restart a different system call. */
> if (retval == -ERESTART_RESTARTBLOCK
> && regs->psw.addr == continue_addr) {
> regs->gprs[2] = __NR_restart_syscall;
> set_thread_flag(TIF_RESTART_SVC);
> }
>
> Now that's of course a problem bc we don't know continue_addr
> when we're in sys_restart(). So before we go into get_signal_to_deliver(),
> we should set a new TIF flag which represents the fact that we are
> inside do_signal with those conditions.
>
> Then at end of restore_thread(), if that flag is set, we do the
>
> regs->gprs[2] = __NR_restart_syscall;
> set_thread_flag(TIF_RESTART_SVC);
>
> (which presumably goes into a helper)
>
> If there was a pending signal which we were intending to handle
> when checkpointed, then that will simply be delivered after we
> exit sys_restart. That is no different from the case where we
> got another signal delivered while a slow sighandler was executing.
>
> I'll try implementing that idea.
>
> -serge
Like so:
More information about the Containers
mailing list