PERFORCE change 162793 for review
Scott Long
scottl at FreeBSD.org
Tue May 26 17:39:36 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=162793
Change 162793 by scottl at scottl-y1 on 2009/05/26 17:38:49
Start locking access to the devclasses global list.
Affected files ...
.. //depot/projects/scottl-camlock/src/sys/kern/subr_bus.c#20 edit
Differences ...
==== //depot/projects/scottl-camlock/src/sys/kern/subr_bus.c#20 (text+ko) ====
@@ -764,6 +764,8 @@
static devclass_list_t devclasses = TAILQ_HEAD_INITIALIZER(devclasses);
+static struct mtx devclasses_mtx;
+MTX_SYSINIT(devclasses, &devclasses_mtx, "devclass global mtx", MTX_DEF);
/**
* @internal
@@ -781,11 +783,13 @@
* @param create non-zero to create a devclass
*/
static devclass_t
-devclass_find_internal(const char *classname, const char *parentname,
- int create)
+devclass_find_internal_locked(const char *classname, const char *parentname,
+ int create)
{
devclass_t dc;
+ mtx_assert(&devclasses_mtx, MA_OWNED);
+
PDEBUG(("looking for %s", classname));
if (!classname)
return (NULL);
@@ -820,13 +824,26 @@
*/
if (parentname && dc && !dc->parent &&
strcmp(classname, parentname) != 0) {
- dc->parent = devclass_find_internal(parentname, NULL, TRUE);
+ dc->parent = devclass_find_internal_locked(parentname, NULL,
+ TRUE);
dc->parent->flags |= DC_HAS_CHILDREN;
}
return (dc);
}
+static devclass_t
+devclass_find_internal(const char *classname, const char *parentname,
+ int create)
+{
+ devclass_t dc;
+
+ mtx_lock(&devclasses_mtx);
+ dc = devclass_find_internal_locked(classname, parentname, create);
+ mtx_unlock(&devclasses_mtx);
+ return (dc);
+}
+
/**
* @brief Create a device class
*
More information about the p4-projects
mailing list