aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/os-Linux/signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/um/os-Linux/signal.c')
-rw-r--r--arch/um/os-Linux/signal.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/arch/um/os-Linux/signal.c b/arch/um/os-Linux/signal.c
index 49c113b576b7..1c5267ec13b0 100644
--- a/arch/um/os-Linux/signal.c
+++ b/arch/um/os-Linux/signal.c
@@ -59,17 +59,11 @@ static void real_alarm_handler(int sig, struct sigcontext *sc)
59{ 59{
60 struct uml_pt_regs regs; 60 struct uml_pt_regs regs;
61 61
62 if (sig == SIGALRM)
63 switch_timers(0);
64
65 if (sc != NULL) 62 if (sc != NULL)
66 copy_sc(&regs, sc); 63 copy_sc(&regs, sc);
67 regs.is_user = 0; 64 regs.is_user = 0;
68 unblock_signals(); 65 unblock_signals();
69 timer_handler(sig, &regs); 66 timer_handler(sig, &regs);
70
71 if (sig == SIGALRM)
72 switch_timers(1);
73} 67}
74 68
75void alarm_handler(int sig, struct sigcontext *sc) 69void alarm_handler(int sig, struct sigcontext *sc)
@@ -116,6 +110,7 @@ void (*handlers[_NSIG])(int sig, struct sigcontext *sc);
116void handle_signal(int sig, struct sigcontext *sc) 110void handle_signal(int sig, struct sigcontext *sc)
117{ 111{
118 unsigned long pending = 1UL << sig; 112 unsigned long pending = 1UL << sig;
113 int timer = switch_timers(0);
119 114
120 do { 115 do {
121 int nested, bail; 116 int nested, bail;
@@ -152,6 +147,8 @@ void handle_signal(int sig, struct sigcontext *sc)
152 if (!nested) 147 if (!nested)
153 pending = from_irq_stack(nested); 148 pending = from_irq_stack(nested);
154 } while (pending); 149 } while (pending);
150
151 switch_timers(timer);
155} 152}
156 153
157extern void hard_handler(int sig); 154extern void hard_handler(int sig);