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