Date: Tue, 26 May 2009 17:39:34 GMT From: Scott Long <scottl@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 162793 for review Message-ID: <200905261739.n4QHdYwm013379@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=162793 Change 162793 by scottl@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 *
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905261739.n4QHdYwm013379>