/* Note that 'init' is a special process: it doesn't get signals it doesn't want to handle. Thus you cannot kill init even with a SIGKILL even by mistake.  */
asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs)
/* Note that 'init' is a special process: it doesn't get signals it doesn't want to handle. Thus you cannot kill init even with a SIGKILL even by mistake.  */
asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs)
{
	siginfo_t info;
	struct k_sigaction ka;
	int signr;
	current->thread.esp0 = (unsigned long) regs;
	if (!oldset)
		oldset = &current->blocked;
	signr = get_signal_to_deliver(&info, &ka, regs, NULL);
	if (signr > 0) {
		handle_signal(signr, &ka, &info, oldset, regs);
		return 1;
	}
	if (regs->orig_d0 >= 0)
		handle_restart(regs, NULL, 0);
	return 0;
}