Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys Separate lwp specificdata data structure management from...
details: https://anonhg.NetBSD.org/src/rev/c80db78f2d25
branches: trunk
changeset: 753860:c80db78f2d25
user: pooka <pooka%NetBSD.org@localhost>
date: Mon Apr 12 22:15:31 2010 +0000
description:
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)
diffstat:
sys/conf/files | 3 +-
sys/kern/kern_lwp.c | 95 +---------------------------
sys/kern/subr_lwp_specificdata.c | 131 +++++++++++++++++++++++++++++++++++++++
sys/sys/lwp.h | 3 +-
4 files changed, 139 insertions(+), 93 deletions(-)
diffs (truncated from 306 to 300 lines):
diff -r 0ce1807c7ab9 -r c80db78f2d25 sys/conf/files
--- a/sys/conf/files Mon Apr 12 21:37:44 2010 +0000
+++ b/sys/conf/files Mon Apr 12 22:15:31 2010 +0000
@@ -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
diff -r 0ce1807c7ab9 -r c80db78f2d25 sys/kern/kern_lwp.c
--- a/sys/kern/kern_lwp.c Mon Apr 12 21:37:44 2010 +0000
+++ b/sys/kern/kern_lwp.c Mon Apr 12 22:15:31 2010 +0000
@@ -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
diff -r 0ce1807c7ab9 -r c80db78f2d25 sys/kern/subr_lwp_specificdata.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/kern/subr_lwp_specificdata.c Mon Apr 12 22:15:31 2010 +0000
@@ -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);
+}
diff -r 0ce1807c7ab9 -r c80db78f2d25 sys/sys/lwp.h
--- a/sys/sys/lwp.h Mon Apr 12 21:37:44 2010 +0000
+++ b/sys/sys/lwp.h Mon Apr 12 22:15:31 2010 +0000
@@ -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);
Home |
Main Index |
Thread Index |
Old Index