Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/lib Add RUMPSP_RAISE: the kernel sends a signal to the client.
details: https://anonhg.NetBSD.org/src/rev/faa0c5a6a138
branches: trunk
changeset: 760859:faa0c5a6a138
user: pooka <pooka%NetBSD.org@localhost>
date: Fri Jan 14 13:12:14 2011 +0000
description:
Add RUMPSP_RAISE: the kernel sends a signal to the client.
diffstat:
lib/librumpclient/rumpclient.c | 11 ++++++++++-
lib/librumpuser/rumpuser_sp.c | 35 +++++++++++++++++++++++++++++++++--
lib/librumpuser/sp_common.c | 7 +++++--
3 files changed, 48 insertions(+), 5 deletions(-)
diffs (129 lines):
diff -r f4d4533b105b -r faa0c5a6a138 lib/librumpclient/rumpclient.c
--- a/lib/librumpclient/rumpclient.c Fri Jan 14 13:11:08 2011 +0000
+++ b/lib/librumpclient/rumpclient.c Fri Jan 14 13:12:14 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpclient.c,v 1.15 2011/01/10 19:49:43 pooka Exp $ */
+/* $NetBSD: rumpclient.c,v 1.16 2011/01/14 13:12:15 pooka Exp $ */
/*
* Copyright (c) 2010, 2011 Antti Kantee. All Rights Reserved.
@@ -343,6 +343,7 @@
handlereq(struct spclient *spc)
{
struct rsp_copydata *copydata;
+ struct rsp_hdr *rhdr = &spc->spc_hdr;
void *mapaddr;
size_t maplen;
int reqtype = spc->spc_hdr.rsp_type;
@@ -378,6 +379,14 @@
DPRINTF(("rump_sp handlereq: anonmmap: %p\n", mapaddr));
send_anonmmap_resp(spc, spc->spc_hdr.rsp_reqno, mapaddr);
break;
+ case RUMPSP_RAISE:
+ DPRINTF(("rump_sp handlereq: raise sig %d\n", rhdr->rsp_signo));
+ raise(rhdr->rsp_signo);
+ /*
+ * We most likely have signals blocked, but the signal
+ * will be handled soon enough when we return.
+ */
+ break;
default:
printf("PANIC: INVALID TYPE %d\n", reqtype);
abort();
diff -r f4d4533b105b -r faa0c5a6a138 lib/librumpuser/rumpuser_sp.c
--- a/lib/librumpuser/rumpuser_sp.c Fri Jan 14 13:11:08 2011 +0000
+++ b/lib/librumpuser/rumpuser_sp.c Fri Jan 14 13:12:14 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpuser_sp.c,v 1.35 2011/01/12 12:52:16 pooka Exp $ */
+/* $NetBSD: rumpuser_sp.c,v 1.36 2011/01/14 13:12:14 pooka Exp $ */
/*
* Copyright (c) 2010, 2011 Antti Kantee. All Rights Reserved.
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: rumpuser_sp.c,v 1.35 2011/01/12 12:52:16 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_sp.c,v 1.36 2011/01/14 13:12:14 pooka Exp $");
#include <sys/types.h>
#include <sys/atomic.h>
@@ -411,6 +411,24 @@
return rv;
}
+static int
+send_raise_req(struct spclient *spc, int signo)
+{
+ struct rsp_hdr rhdr;
+ int rv;
+
+ rhdr.rsp_len = sizeof(rhdr);
+ rhdr.rsp_class = RUMPSP_REQ;
+ rhdr.rsp_type = RUMPSP_RAISE;
+ rhdr.rsp_signo = signo;
+
+ sendlock(spc);
+ rv = dosend(spc, &rhdr, sizeof(rhdr));
+ sendunlock(spc);
+
+ return rv;
+}
+
static void
spcref(struct spclient *spc)
{
@@ -718,6 +736,19 @@
return 0;
}
+int
+rumpuser_sp_raise(void *arg, int signo)
+{
+ struct spclient *spc = arg;
+ int rv, nlocks;
+
+ rumpuser__kunlock(0, &nlocks, NULL);
+ rv = send_raise_req(spc, signo);
+ rumpuser__klock(nlocks, NULL);
+
+ return rv;
+}
+
/*
*
* Startup routines and mainloop for server.
diff -r f4d4533b105b -r faa0c5a6a138 lib/librumpuser/sp_common.c
--- a/lib/librumpuser/sp_common.c Fri Jan 14 13:11:08 2011 +0000
+++ b/lib/librumpuser/sp_common.c Fri Jan 14 13:12:14 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: sp_common.c,v 1.23 2011/01/10 19:49:43 pooka Exp $ */
+/* $NetBSD: sp_common.c,v 1.24 2011/01/14 13:12:14 pooka Exp $ */
/*
* Copyright (c) 2010, 2011 Antti Kantee. All Rights Reserved.
@@ -88,7 +88,8 @@
RUMPSP_COPYIN, RUMPSP_COPYINSTR,
RUMPSP_COPYOUT, RUMPSP_COPYOUTSTR,
RUMPSP_ANONMMAP,
- RUMPSP_PREFORK };
+ RUMPSP_PREFORK,
+ RUMPSP_RAISE };
enum { HANDSHAKE_GUEST, HANDSHAKE_AUTH, HANDSHAKE_FORK };
@@ -107,12 +108,14 @@
uint32_t sysnum;
uint32_t error;
uint32_t handshake;
+ uint32_t signo;
} u;
};
#define HDRSZ sizeof(struct rsp_hdr)
#define rsp_sysnum u.sysnum
#define rsp_error u.error
#define rsp_handshake u.handshake
+#define rsp_signo u.signo
#define MAXBANNER 96
Home |
Main Index |
Thread Index |
Old Index