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