Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 61b63c55 authored by Jeff Dike's avatar Jeff Dike Committed by Linus Torvalds
Browse files

uml: eliminate SIGALRM



Now that ITIMER_REAL is no longer used, there is no need for any use of
SIGALRM whatsoever.  This patch removes all mention of it.

In addition, real_alarm_handler took a signal argument which is now always
SIGVTALRM.  So, that is gone.

Signed-off-by: default avatarJeff Dike <jdike@linux.intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 5f734614
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -146,6 +146,6 @@ void init_irq_signals(int on_sigstack)
	flags = on_sigstack ? SA_ONSTACK : 0;

	set_handler(SIGIO, (__sighandler_t) sig_handler, flags | SA_RESTART,
		    SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
		    SIGUSR1, SIGIO, SIGWINCH, SIGVTALRM, -1);
	signal(SIGWINCH, SIG_IGN);
}
+1 −1
Original line number Diff line number Diff line
@@ -161,7 +161,7 @@ int __init main(int argc, char **argv, char **envp)
	 * some time) and cause a segfault.
	 */

	/* stop timers and set SIG*ALRM to be ignored */
	/* stop timers and set SIGVTALRM to be ignored */
	disable_timer();

	/* disable SIGIO for the fds and set SIGIO to be ignored */
+5 −5
Original line number Diff line number Diff line
@@ -238,15 +238,15 @@ int __init can_drop_memory(void)
void init_new_thread_signals(void)
{
	set_handler(SIGSEGV, (__sighandler_t) sig_handler, SA_ONSTACK,
		    SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
		    SIGUSR1, SIGIO, SIGWINCH, SIGVTALRM, -1);
	set_handler(SIGTRAP, (__sighandler_t) sig_handler, SA_ONSTACK,
		    SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
		    SIGUSR1, SIGIO, SIGWINCH, SIGVTALRM, -1);
	set_handler(SIGFPE, (__sighandler_t) sig_handler, SA_ONSTACK,
		    SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
		    SIGUSR1, SIGIO, SIGWINCH, SIGVTALRM, -1);
	set_handler(SIGILL, (__sighandler_t) sig_handler, SA_ONSTACK,
		    SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
		    SIGUSR1, SIGIO, SIGWINCH, SIGVTALRM, -1);
	set_handler(SIGBUS, (__sighandler_t) sig_handler, SA_ONSTACK,
		    SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
		    SIGUSR1, SIGIO, SIGWINCH, SIGVTALRM, -1);
	signal(SIGHUP, SIG_IGN);

	init_irq_signals(1);
+7 −21
Original line number Diff line number Diff line
@@ -15,8 +15,7 @@
#include "user.h"

/*
 * These are the asynchronous signals.  SIGVTALRM and SIGARLM are handled
 * together under SIGVTALRM_BIT.  SIGPROF is excluded because we want to
 * These are the asynchronous signals.  SIGPROF is excluded because we want to
 * be able to profile all of UML, not just the non-critical sections.  If
 * profiling is not thread-safe, then that is not my problem.  We can disable
 * profiling when SMP is enabled in that case.
@@ -27,9 +26,6 @@
#define SIGVTALRM_BIT 1
#define SIGVTALRM_MASK (1 << SIGVTALRM_BIT)

#define SIGALRM_BIT 2
#define SIGALRM_MASK (1 << SIGALRM_BIT)

/*
 * These are used by both the signal handlers and
 * block/unblock_signals.  I don't want modifications cached in a
@@ -55,7 +51,7 @@ void sig_handler(int sig, struct sigcontext *sc)
	set_signals(enabled);
}

static void real_alarm_handler(int sig, struct sigcontext *sc)
static void real_alarm_handler(struct sigcontext *sc)
{
	struct uml_pt_regs regs;

@@ -63,7 +59,7 @@ static void real_alarm_handler(int sig, struct sigcontext *sc)
		copy_sc(&regs, sc);
	regs.is_user = 0;
	unblock_signals();
	timer_handler(sig, &regs);
	timer_handler(SIGVTALRM, &regs);
}

void alarm_handler(int sig, struct sigcontext *sc)
@@ -72,27 +68,20 @@ void alarm_handler(int sig, struct sigcontext *sc)

	enabled = signals_enabled;
	if (!signals_enabled) {
		if (sig == SIGVTALRM)
		pending |= SIGVTALRM_MASK;
		else pending |= SIGALRM_MASK;

		return;
	}

	block_signals();

	real_alarm_handler(sig, sc);
	real_alarm_handler(sc);
	set_signals(enabled);
}

void timer_init(void)
{
	set_handler(SIGVTALRM, (__sighandler_t) alarm_handler,
		    SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGWINCH,
		    SIGALRM, -1);
	set_handler(SIGALRM, (__sighandler_t) alarm_handler,
		    SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGWINCH,
		    SIGALRM, -1);
		    SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGWINCH, -1);
}

void set_sigstack(void *sig_stack, int size)
@@ -267,11 +256,8 @@ void unblock_signals(void)
		if (save_pending & SIGIO_MASK)
			sig_handler_common_skas(SIGIO, NULL);

		if (save_pending & SIGALRM_MASK)
			real_alarm_handler(SIGALRM, NULL);

		if (save_pending & SIGVTALRM_MASK)
			real_alarm_handler(SIGVTALRM, NULL);
			real_alarm_handler(NULL);
	}
}

+1 −3
Original line number Diff line number Diff line
@@ -222,7 +222,6 @@ static int userspace_tramp(void *stack)
		sigemptyset(&sa.sa_mask);
		sigaddset(&sa.sa_mask, SIGIO);
		sigaddset(&sa.sa_mask, SIGWINCH);
		sigaddset(&sa.sa_mask, SIGALRM);
		sigaddset(&sa.sa_mask, SIGVTALRM);
		sigaddset(&sa.sa_mask, SIGUSR1);
		sa.sa_flags = SA_ONSTACK;
@@ -539,8 +538,7 @@ int start_idle_thread(void *stack, jmp_buf *switch_buf)
	int n;

	set_handler(SIGWINCH, (__sighandler_t) sig_handler,
		    SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGALRM,
		    SIGVTALRM, -1);
		    SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGVTALRM, -1);

	/*
	 * Can't use UML_SETJMP or UML_LONGJMP here because they save
Loading