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
 

Reply via email to