Code Review
/
kvmfornfv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git]
/
kernel
/
arch
/
um
/
os-Linux
/
signal.c
diff --git
a/kernel/arch/um/os-Linux/signal.c
b/kernel/arch/um/os-Linux/signal.c
index
7b605e4
..
c211153
100644
(file)
--- a/
kernel/arch/um/os-Linux/signal.c
+++ b/
kernel/arch/um/os-Linux/signal.c
@@
-1,4
+1,6
@@
/*
/*
+ * Copyright (C) 2015 Anton Ivanov (aivanov@{brocade.com,kot-begemot.co.uk})
+ * Copyright (C) 2015 Thomas Meyer (thomas@m3y3r.de)
* Copyright (C) 2004 PathScale, Inc
* Copyright (C) 2004 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
* Licensed under the GPL
* Copyright (C) 2004 PathScale, Inc
* Copyright (C) 2004 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
* Licensed under the GPL
@@
-13,7
+15,6
@@
#include <kern_util.h>
#include <os.h>
#include <sysdep/mcontext.h>
#include <kern_util.h>
#include <os.h>
#include <sysdep/mcontext.h>
-#include "internal.h"
void (*sig_info[NSIG])(int, struct siginfo *, struct uml_pt_regs *) = {
[SIGTRAP] = relay_signal,
void (*sig_info[NSIG])(int, struct siginfo *, struct uml_pt_regs *) = {
[SIGTRAP] = relay_signal,
@@
-23,7
+24,8
@@
void (*sig_info[NSIG])(int, struct siginfo *, struct uml_pt_regs *) = {
[SIGBUS] = bus_handler,
[SIGSEGV] = segv_handler,
[SIGIO] = sigio_handler,
[SIGBUS] = bus_handler,
[SIGSEGV] = segv_handler,
[SIGIO] = sigio_handler,
- [SIGVTALRM] = timer_handler };
+ [SIGALRM] = timer_handler
+};
static void sig_handler_common(int sig, struct siginfo *si, mcontext_t *mc)
{
static void sig_handler_common(int sig, struct siginfo *si, mcontext_t *mc)
{
@@
-38,7
+40,7
@@
static void sig_handler_common(int sig, struct siginfo *si, mcontext_t *mc)
}
/* enable signals if sig isn't IRQ signal */
}
/* enable signals if sig isn't IRQ signal */
- if ((sig != SIGIO) && (sig != SIGWINCH) && (sig != SIG
VT
ALRM))
+ if ((sig != SIGIO) && (sig != SIGWINCH) && (sig != SIGALRM))
unblock_signals();
(*sig_info[sig])(sig, si, &r);
unblock_signals();
(*sig_info[sig])(sig, si, &r);
@@
-55,8
+57,8
@@
static void sig_handler_common(int sig, struct siginfo *si, mcontext_t *mc)
#define SIGIO_BIT 0
#define SIGIO_MASK (1 << SIGIO_BIT)
#define SIGIO_BIT 0
#define SIGIO_MASK (1 << SIGIO_BIT)
-#define SIG
VT
ALRM_BIT 1
-#define SIG
VTALRM_MASK (1 << SIGVT
ALRM_BIT)
+#define SIGALRM_BIT 1
+#define SIG
ALRM_MASK (1 << SIG
ALRM_BIT)
static int signals_enabled;
static unsigned int signals_pending;
static int signals_enabled;
static unsigned int signals_pending;
@@
-78,43
+80,47
@@
void sig_handler(int sig, struct siginfo *si, mcontext_t *mc)
set_signals(enabled);
}
set_signals(enabled);
}
-static void real_alarm_handler(mcontext_t *mc)
+static void
timer_
real_alarm_handler(mcontext_t *mc)
{
struct uml_pt_regs regs;
if (mc != NULL)
get_regs_from_mc(®s, mc);
{
struct uml_pt_regs regs;
if (mc != NULL)
get_regs_from_mc(®s, mc);
- regs.is_user = 0;
- unblock_signals();
- timer_handler(SIGVTALRM, NULL, ®s);
+ timer_handler(SIGALRM, NULL, ®s);
}
}
-void alarm_handler(int sig, struct siginfo *unused_si, mcontext_t *mc)
+void
timer_
alarm_handler(int sig, struct siginfo *unused_si, mcontext_t *mc)
{
int enabled;
enabled = signals_enabled;
if (!signals_enabled) {
{
int enabled;
enabled = signals_enabled;
if (!signals_enabled) {
- signals_pending |= SIG
VT
ALRM_MASK;
+ signals_pending |= SIGALRM_MASK;
return;
}
block_signals();
return;
}
block_signals();
- real_alarm_handler(mc);
+
timer_
real_alarm_handler(mc);
set_signals(enabled);
}
set_signals(enabled);
}
-void timer_init(void)
+void deliver_alarm(void) {
+ timer_alarm_handler(SIGALRM, NULL, NULL);
+}
+
+void timer_set_signal_handler(void)
{
{
- set_handler(SIG
VT
ALRM);
+ set_handler(SIGALRM);
}
void set_sigstack(void *sig_stack, int size)
{
}
void set_sigstack(void *sig_stack, int size)
{
- stack_t stack = ((stack_t) { .ss_flags = 0,
- .ss_sp = (__ptr_t) sig_stack,
- .ss_size = size - sizeof(void *) });
+ stack_t stack = {
+ .ss_flags = 0,
+ .ss_sp = sig_stack,
+ .ss_size = size - sizeof(void *)
+ };
if (sigaltstack(&stack, NULL) != 0)
panic("enabling signal stack failed, errno = %d\n", errno);
if (sigaltstack(&stack, NULL) != 0)
panic("enabling signal stack failed, errno = %d\n", errno);
@@
-129,10
+135,9
@@
static void (*handlers[_NSIG])(int sig, struct siginfo *si, mcontext_t *mc) = {
[SIGIO] = sig_handler,
[SIGWINCH] = sig_handler,
[SIGIO] = sig_handler,
[SIGWINCH] = sig_handler,
- [SIG
VTALRM] =
alarm_handler
+ [SIG
ALRM] = timer_
alarm_handler
};
};
-
static void hard_handler(int sig, siginfo_t *si, void *p)
{
struct ucontext *uc = p;
static void hard_handler(int sig, siginfo_t *si, void *p)
{
struct ucontext *uc = p;
@@
-186,9
+191,9
@@
void set_handler(int sig)
/* block irq ones */
sigemptyset(&action.sa_mask);
/* block irq ones */
sigemptyset(&action.sa_mask);
- sigaddset(&action.sa_mask, SIGVTALRM);
sigaddset(&action.sa_mask, SIGIO);
sigaddset(&action.sa_mask, SIGWINCH);
sigaddset(&action.sa_mask, SIGIO);
sigaddset(&action.sa_mask, SIGWINCH);
+ sigaddset(&action.sa_mask, SIGALRM);
if (sig == SIGSEGV)
flags |= SA_NODEFER;
if (sig == SIGSEGV)
flags |= SA_NODEFER;
@@
-281,8
+286,8
@@
void unblock_signals(void)
if (save_pending & SIGIO_MASK)
sig_handler_common(SIGIO, NULL, NULL);
if (save_pending & SIGIO_MASK)
sig_handler_common(SIGIO, NULL, NULL);
- if (save_pending & SIG
VT
ALRM_MASK)
- real_alarm_handler(NULL);
+ if (save_pending & SIGALRM_MASK)
+
timer_
real_alarm_handler(NULL);
}
}
}
}