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: Jeff Dike <jdike@linux.intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Jeff Dike 2007-10-16 01:27:27 -07:00 committed by Linus Torvalds
parent 5f734614fc
commit 61b63c556c
7 changed files with 17 additions and 35 deletions

View File

@ -146,6 +146,6 @@ void init_irq_signals(int on_sigstack)
flags = on_sigstack ? SA_ONSTACK : 0; flags = on_sigstack ? SA_ONSTACK : 0;
set_handler(SIGIO, (__sighandler_t) sig_handler, flags | SA_RESTART, 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); signal(SIGWINCH, SIG_IGN);
} }

View File

@ -161,7 +161,7 @@ int __init main(int argc, char **argv, char **envp)
* some time) and cause a segfault. * 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_timer();
/* disable SIGIO for the fds and set SIGIO to be ignored */ /* disable SIGIO for the fds and set SIGIO to be ignored */

View File

@ -238,15 +238,15 @@ out:
void init_new_thread_signals(void) void init_new_thread_signals(void)
{ {
set_handler(SIGSEGV, (__sighandler_t) sig_handler, SA_ONSTACK, 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, 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, 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, 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, set_handler(SIGBUS, (__sighandler_t) sig_handler, SA_ONSTACK,
SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1); SIGUSR1, SIGIO, SIGWINCH, SIGVTALRM, -1);
signal(SIGHUP, SIG_IGN); signal(SIGHUP, SIG_IGN);
init_irq_signals(1); init_irq_signals(1);

View File

@ -15,8 +15,7 @@
#include "user.h" #include "user.h"
/* /*
* These are the asynchronous signals. SIGVTALRM and SIGARLM are handled * These are the asynchronous signals. SIGPROF is excluded because we want to
* together under SIGVTALRM_BIT. SIGPROF is excluded because we want to
* be able to profile all of UML, not just the non-critical sections. If * 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 is not thread-safe, then that is not my problem. We can disable
* profiling when SMP is enabled in that case. * profiling when SMP is enabled in that case.
@ -27,9 +26,6 @@
#define SIGVTALRM_BIT 1 #define SIGVTALRM_BIT 1
#define SIGVTALRM_MASK (1 << SIGVTALRM_BIT) #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 * These are used by both the signal handlers and
* block/unblock_signals. I don't want modifications cached in a * 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); 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; struct uml_pt_regs regs;
@ -63,7 +59,7 @@ static void real_alarm_handler(int sig, struct sigcontext *sc)
copy_sc(&regs, sc); copy_sc(&regs, sc);
regs.is_user = 0; regs.is_user = 0;
unblock_signals(); unblock_signals();
timer_handler(sig, &regs); timer_handler(SIGVTALRM, &regs);
} }
void alarm_handler(int sig, struct sigcontext *sc) void alarm_handler(int sig, struct sigcontext *sc)
@ -72,27 +68,20 @@ void alarm_handler(int sig, struct sigcontext *sc)
enabled = signals_enabled; enabled = signals_enabled;
if (!signals_enabled) { if (!signals_enabled) {
if (sig == SIGVTALRM)
pending |= SIGVTALRM_MASK; pending |= SIGVTALRM_MASK;
else pending |= SIGALRM_MASK;
return; return;
} }
block_signals(); block_signals();
real_alarm_handler(sig, sc); real_alarm_handler(sc);
set_signals(enabled); set_signals(enabled);
} }
void timer_init(void) void timer_init(void)
{ {
set_handler(SIGVTALRM, (__sighandler_t) alarm_handler, set_handler(SIGVTALRM, (__sighandler_t) alarm_handler,
SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGWINCH, SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGWINCH, -1);
SIGALRM, -1);
set_handler(SIGALRM, (__sighandler_t) alarm_handler,
SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGWINCH,
SIGALRM, -1);
} }
void set_sigstack(void *sig_stack, int size) void set_sigstack(void *sig_stack, int size)
@ -267,11 +256,8 @@ void unblock_signals(void)
if (save_pending & SIGIO_MASK) if (save_pending & SIGIO_MASK)
sig_handler_common_skas(SIGIO, NULL); sig_handler_common_skas(SIGIO, NULL);
if (save_pending & SIGALRM_MASK)
real_alarm_handler(SIGALRM, NULL);
if (save_pending & SIGVTALRM_MASK) if (save_pending & SIGVTALRM_MASK)
real_alarm_handler(SIGVTALRM, NULL); real_alarm_handler(NULL);
} }
} }

View File

@ -222,7 +222,6 @@ static int userspace_tramp(void *stack)
sigemptyset(&sa.sa_mask); sigemptyset(&sa.sa_mask);
sigaddset(&sa.sa_mask, SIGIO); sigaddset(&sa.sa_mask, SIGIO);
sigaddset(&sa.sa_mask, SIGWINCH); sigaddset(&sa.sa_mask, SIGWINCH);
sigaddset(&sa.sa_mask, SIGALRM);
sigaddset(&sa.sa_mask, SIGVTALRM); sigaddset(&sa.sa_mask, SIGVTALRM);
sigaddset(&sa.sa_mask, SIGUSR1); sigaddset(&sa.sa_mask, SIGUSR1);
sa.sa_flags = SA_ONSTACK; sa.sa_flags = SA_ONSTACK;
@ -539,8 +538,7 @@ int start_idle_thread(void *stack, jmp_buf *switch_buf)
int n; int n;
set_handler(SIGWINCH, (__sighandler_t) sig_handler, set_handler(SIGWINCH, (__sighandler_t) sig_handler,
SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGALRM, SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGVTALRM, -1);
SIGVTALRM, -1);
/* /*
* Can't use UML_SETJMP or UML_LONGJMP here because they save * Can't use UML_SETJMP or UML_LONGJMP here because they save

View File

@ -58,9 +58,8 @@ void sig_handler_common_skas(int sig, void *sc_ptr)
handler = sig_info[sig]; handler = sig_info[sig];
/* unblock SIGALRM, SIGVTALRM, SIGIO if sig isn't IRQ signal */ /* unblock SIGVTALRM, SIGIO if sig isn't IRQ signal */
if (sig != SIGIO && sig != SIGWINCH && if ((sig != SIGIO) && (sig != SIGWINCH) && (sig != SIGVTALRM))
sig != SIGVTALRM && sig != SIGALRM)
unblock_signals(); unblock_signals();
handler(sig, r); handler(sig, r);

View File

@ -20,5 +20,4 @@ void os_fill_handlinfo(struct kern_handlers h)
sig_info[SIGSEGV] = h.page_fault; sig_info[SIGSEGV] = h.page_fault;
sig_info[SIGIO] = h.sigio_handler; sig_info[SIGIO] = h.sigio_handler;
sig_info[SIGVTALRM] = h.timer_handler; sig_info[SIGVTALRM] = h.timer_handler;
sig_info[SIGALRM] = h.timer_handler;
} }