Module Name: src Committed By: pooka Date: Mon Nov 9 19:00:52 UTC 2009
Modified Files: src/sys/rump/librump/rumpkern: threads.c Log Message: set LP_INTR for KTHREAD_INTR To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/rump/librump/rumpkern/threads.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/rump/librump/rumpkern/threads.c diff -u src/sys/rump/librump/rumpkern/threads.c:1.1 src/sys/rump/librump/rumpkern/threads.c:1.2 --- src/sys/rump/librump/rumpkern/threads.c:1.1 Wed Nov 4 19:17:53 2009 +++ src/sys/rump/librump/rumpkern/threads.c Mon Nov 9 19:00:52 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: threads.c,v 1.1 2009/11/04 19:17:53 pooka Exp $ */ +/* $NetBSD: threads.c,v 1.2 2009/11/09 19:00:52 pooka Exp $ */ /* * Copyright (c) 2007-2009 Antti Kantee. All Rights Reserved. @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: threads.c,v 1.1 2009/11/04 19:17:53 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: threads.c,v 1.2 2009/11/09 19:00:52 pooka Exp $"); #include <sys/param.h> #include <sys/kmem.h> @@ -52,16 +52,18 @@ threadbouncer(void *arg) { struct kthdesc *k = arg; + struct lwp *l = k->mylwp; void (*f)(void *); void *thrarg; /* schedule ourselves first */ f = k->f; thrarg = k->arg; - rumpuser_set_curlwp(k->mylwp); + rumpuser_free(k); + + rumpuser_set_curlwp(l); rump_schedule(); - kmem_free(k, sizeof(struct kthdesc)); if ((curlwp->l_pflag & LP_MPSAFE) == 0) KERNEL_LOCK(1, NULL); @@ -125,12 +127,14 @@ if (ci != NULL) panic("%s: bounded threads not supported", __func__); - k = kmem_alloc(sizeof(struct kthdesc), KM_SLEEP); + k = rumpuser_malloc(sizeof(struct kthdesc), 0); k->f = func; k->arg = arg; k->mylwp = l = rump_lwp_alloc(0, rump_nextlid()); if (flags & KTHREAD_MPSAFE) l->l_pflag |= LP_MPSAFE; + if (flags & KTHREAD_INTR) + l->l_pflag |= LP_INTR; rv = rumpuser_thread_create(threadbouncer, k, thrname); if (rv) return rv;