Module Name:    src
Committed By:   pooka
Date:           Mon Apr 12 22:15:32 UTC 2010

Modified Files:
        src/sys/conf: files
        src/sys/kern: kern_lwp.c
        src/sys/sys: lwp.h
Added Files:
        src/sys/kern: subr_lwp_specificdata.c

Log Message:
Separate lwp specificdata data structure management from lwp cpu/vm
management.

No functional change.

(specificdata routines went from kern_lwp.c to subr_lwp_specificdata.c)


To generate a diff of this commit:
cvs rdiff -u -r1.985 -r1.986 src/sys/conf/files
cvs rdiff -u -r1.143 -r1.144 src/sys/kern/kern_lwp.c
cvs rdiff -u -r0 -r1.1 src/sys/kern/subr_lwp_specificdata.c
cvs rdiff -u -r1.129 -r1.130 src/sys/sys/lwp.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/conf/files
diff -u src/sys/conf/files:1.985 src/sys/conf/files:1.986
--- src/sys/conf/files:1.985	Fri Apr  9 10:09:49 2010
+++ src/sys/conf/files	Mon Apr 12 22:15:32 2010
@@ -1,4 +1,4 @@
-#	$NetBSD: files,v 1.985 2010/04/09 10:09:49 nonaka Exp $
+#	$NetBSD: files,v 1.986 2010/04/12 22:15:32 pooka Exp $
 #	@(#)files.newconf	7.5 (Berkeley) 5/10/93
 
 version 	20090313
@@ -1510,6 +1510,7 @@
 file	kern/subr_kobj_vfs.c
 file	kern/subr_lockdebug.c
 file	kern/subr_log.c
+file	kern/subr_lwp_specificdata.c
 file	kern/subr_once.c
 file	kern/subr_optstr.c
 file	kern/subr_percpu.c

Index: src/sys/kern/kern_lwp.c
diff -u src/sys/kern/kern_lwp.c:1.143 src/sys/kern/kern_lwp.c:1.144
--- src/sys/kern/kern_lwp.c:1.143	Fri Apr  9 11:47:17 2010
+++ src/sys/kern/kern_lwp.c	Mon Apr 12 22:15:31 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_lwp.c,v 1.143 2010/04/09 11:47:17 njoly Exp $	*/
+/*	$NetBSD: kern_lwp.c,v 1.144 2010/04/12 22:15:31 pooka Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2006, 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -209,7 +209,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_lwp.c,v 1.143 2010/04/09 11:47:17 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_lwp.c,v 1.144 2010/04/12 22:15:31 pooka Exp $");
 
 #include "opt_ddb.h"
 #include "opt_lockdebug.h"
@@ -247,7 +247,6 @@
 struct pool lwp_uc_pool;
 
 static pool_cache_t lwp_cache;
-static specificdata_domain_t lwp_specificdata_domain;
 
 /* DTrace proc provider probes */
 SDT_PROBE_DEFINE(proc,,,lwp_create,
@@ -269,8 +268,7 @@
 
 	pool_init(&lwp_uc_pool, sizeof(ucontext_t), 0, 0, 0, "lwpucpl",
 	    &pool_allocator_nointr, IPL_NONE);
-	lwp_specificdata_domain = specificdata_domain_create();
-	KASSERT(lwp_specificdata_domain != NULL);
+	lwpinit_specificdata();
 	lwp_sys_init();
 	lwp_cache = pool_cache_init(sizeof(lwp_t), MIN_LWP_ALIGNMENT, 0, 0,
 	    "lwppl", NULL, IPL_NONE, NULL, NULL, NULL);
@@ -829,7 +827,7 @@
 	fd_free();
 
 	/* Delete the specificdata while it's still safe to sleep. */
-	specificdata_fini(lwp_specificdata_domain, &l->l_specdataref);
+	lwp_finispecific(l)
 
 	/*
 	 * Release our cached credentials.
@@ -1513,91 +1511,6 @@
 }
 
 /*
- * lwp_specific_key_create --
- *	Create a key for subsystem lwp-specific data.
- */
-int
-lwp_specific_key_create(specificdata_key_t *keyp, specificdata_dtor_t dtor)
-{
-
-	return (specificdata_key_create(lwp_specificdata_domain, keyp, dtor));
-}
-
-/*
- * lwp_specific_key_delete --
- *	Delete a key for subsystem lwp-specific data.
- */
-void
-lwp_specific_key_delete(specificdata_key_t key)
-{
-
-	specificdata_key_delete(lwp_specificdata_domain, key);
-}
-
-/*
- * lwp_initspecific --
- *	Initialize an LWP's specificdata container.
- */
-void
-lwp_initspecific(struct lwp *l)
-{
-	int error;
-
-	error = specificdata_init(lwp_specificdata_domain, &l->l_specdataref);
-	KASSERT(error == 0);
-}
-
-/*
- * lwp_finispecific --
- *	Finalize an LWP's specificdata container.
- */
-void
-lwp_finispecific(struct lwp *l)
-{
-
-	specificdata_fini(lwp_specificdata_domain, &l->l_specdataref);
-}
-
-/*
- * lwp_getspecific --
- *	Return lwp-specific data corresponding to the specified key.
- *
- *	Note: LWP specific data is NOT INTERLOCKED.  An LWP should access
- *	only its OWN SPECIFIC DATA.  If it is necessary to access another
- *	LWP's specifc data, care must be taken to ensure that doing so
- *	would not cause internal data structure inconsistency (i.e. caller
- *	can guarantee that the target LWP is not inside an lwp_getspecific()
- *	or lwp_setspecific() call).
- */
-void *
-lwp_getspecific(specificdata_key_t key)
-{
-
-	return (specificdata_getspecific_unlocked(lwp_specificdata_domain,
-						  &curlwp->l_specdataref, key));
-}
-
-void *
-_lwp_getspecific_by_lwp(struct lwp *l, specificdata_key_t key)
-{
-
-	return (specificdata_getspecific_unlocked(lwp_specificdata_domain,
-						  &l->l_specdataref, key));
-}
-
-/*
- * lwp_setspecific --
- *	Set lwp-specific data corresponding to the specified key.
- */
-void
-lwp_setspecific(specificdata_key_t key, void *data)
-{
-
-	specificdata_setspecific(lwp_specificdata_domain,
-				 &curlwp->l_specdataref, key, data);
-}
-
-/*
  * Allocate a new lwpctl structure for a user LWP.
  */
 int

Index: src/sys/sys/lwp.h
diff -u src/sys/sys/lwp.h:1.129 src/sys/sys/lwp.h:1.130
--- src/sys/sys/lwp.h:1.129	Tue Apr  6 13:50:22 2010
+++ src/sys/sys/lwp.h	Mon Apr 12 22:15:31 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: lwp.h,v 1.129 2010/04/06 13:50:22 christos Exp $	*/
+/*	$NetBSD: lwp.h,v 1.130 2010/04/12 22:15:31 pooka Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2006, 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -327,6 +327,7 @@
 void	lwp_unsleep(lwp_t *, bool);
 uint64_t lwp_pctr(void);
 
+void	lwpinit_specificdata(void);
 int	lwp_specific_key_create(specificdata_key_t *, specificdata_dtor_t);
 void	lwp_specific_key_delete(specificdata_key_t);
 void 	lwp_initspecific(lwp_t *);

Added files:

Index: src/sys/kern/subr_lwp_specificdata.c
diff -u /dev/null src/sys/kern/subr_lwp_specificdata.c:1.1
--- /dev/null	Mon Apr 12 22:15:32 2010
+++ src/sys/kern/subr_lwp_specificdata.c	Mon Apr 12 22:15:31 2010
@@ -0,0 +1,131 @@
+/*	$NetBSD: subr_lwp_specificdata.c,v 1.1 2010/04/12 22:15:31 pooka Exp $	*/
+
+/*-
+ * Copyright (c) 2006 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define _LWP_API_PRIVATE
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: subr_lwp_specificdata.c,v 1.1 2010/04/12 22:15:31 pooka Exp $");
+
+#include <sys/param.h>
+#include <sys/lwp.h>
+#include <sys/specificdata.h>
+
+static specificdata_domain_t lwp_specificdata_domain;
+
+void
+lwpinit_specificdata()
+{
+
+	lwp_specificdata_domain = specificdata_domain_create();
+	KASSERT(lwp_specificdata_domain != NULL);
+}
+
+/*
+ * lwp_specific_key_create --
+ *	Create a key for subsystem lwp-specific data.
+ */
+int
+lwp_specific_key_create(specificdata_key_t *keyp, specificdata_dtor_t dtor)
+{
+
+	return (specificdata_key_create(lwp_specificdata_domain, keyp, dtor));
+}
+
+/*
+ * lwp_specific_key_delete --
+ *	Delete a key for subsystem lwp-specific data.
+ */
+void
+lwp_specific_key_delete(specificdata_key_t key)
+{
+
+	specificdata_key_delete(lwp_specificdata_domain, key);
+}
+
+/*
+ * lwp_initspecific --
+ *	Initialize an LWP's specificdata container.
+ */
+void
+lwp_initspecific(struct lwp *l)
+{
+	int error;
+
+	error = specificdata_init(lwp_specificdata_domain, &l->l_specdataref);
+	KASSERT(error == 0);
+}
+
+/*
+ * lwp_finispecific --
+ *	Finalize an LWP's specificdata container.
+ */
+void
+lwp_finispecific(struct lwp *l)
+{
+
+	specificdata_fini(lwp_specificdata_domain, &l->l_specdataref);
+}
+
+/*
+ * lwp_getspecific --
+ *	Return lwp-specific data corresponding to the specified key.
+ *
+ *	Note: LWP specific data is NOT INTERLOCKED.  An LWP should access
+ *	only its OWN SPECIFIC DATA.  If it is necessary to access another
+ *	LWP's specifc data, care must be taken to ensure that doing so
+ *	would not cause internal data structure inconsistency (i.e. caller
+ *	can guarantee that the target LWP is not inside an lwp_getspecific()
+ *	or lwp_setspecific() call).
+ */
+void *
+lwp_getspecific(specificdata_key_t key)
+{
+
+	return (specificdata_getspecific_unlocked(lwp_specificdata_domain,
+						  &curlwp->l_specdataref, key));
+}
+
+void *
+_lwp_getspecific_by_lwp(struct lwp *l, specificdata_key_t key)
+{
+
+	return (specificdata_getspecific_unlocked(lwp_specificdata_domain,
+						  &l->l_specdataref, key));
+}
+
+/*
+ * lwp_setspecific --
+ *	Set lwp-specific data corresponding to the specified key.
+ */
+void
+lwp_setspecific(specificdata_key_t key, void *data)
+{
+
+	specificdata_setspecific(lwp_specificdata_domain,
+				 &curlwp->l_specdataref, key, data);
+}

Reply via email to