Module Name: src Committed By: pooka Date: Fri Jan 14 13:12:15 UTC 2011
Modified Files: src/lib/librumpclient: rumpclient.c src/lib/librumpuser: rumpuser_sp.c sp_common.c Log Message: Add RUMPSP_RAISE: the kernel sends a signal to the client. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/lib/librumpclient/rumpclient.c cvs rdiff -u -r1.35 -r1.36 src/lib/librumpuser/rumpuser_sp.c cvs rdiff -u -r1.23 -r1.24 src/lib/librumpuser/sp_common.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/librumpclient/rumpclient.c diff -u src/lib/librumpclient/rumpclient.c:1.15 src/lib/librumpclient/rumpclient.c:1.16 --- src/lib/librumpclient/rumpclient.c:1.15 Mon Jan 10 19:49:43 2011 +++ src/lib/librumpclient/rumpclient.c Fri Jan 14 13:12:15 2011 @@ -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(); Index: src/lib/librumpuser/rumpuser_sp.c diff -u src/lib/librumpuser/rumpuser_sp.c:1.35 src/lib/librumpuser/rumpuser_sp.c:1.36 --- src/lib/librumpuser/rumpuser_sp.c:1.35 Wed Jan 12 12:52:16 2011 +++ src/lib/librumpuser/rumpuser_sp.c Fri Jan 14 13:12:14 2011 @@ -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. Index: src/lib/librumpuser/sp_common.c diff -u src/lib/librumpuser/sp_common.c:1.23 src/lib/librumpuser/sp_common.c:1.24 --- src/lib/librumpuser/sp_common.c:1.23 Mon Jan 10 19:49:43 2011 +++ src/lib/librumpuser/sp_common.c Fri Jan 14 13:12:14 2011 @@ -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