Date: Sun, 27 Jan 2008 21:45:28 GMT From: John Birrell <jb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 134244 for review Message-ID: <200801272145.m0RLjSqd053790@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=134244 Change 134244 by jb@jb_freebsd1 on 2008/01/27 21:45:22 It seems I need an sx lock to be able to check if it locked. It's an internal lock here, so the lock consistency is determined by the code in this file only. Specify SX_NOWITNESS to avoid the bogis LOR reports that WITNESS outputs when internal locks like this are obtained when there are various other locks already obtained. This lock has no bearing on the order that other locks are obtained. Affected files ... .. //depot/projects/dtrace/src/sys/kern/kern_sdt.c#8 edit Differences ... ==== //depot/projects/dtrace/src/sys/kern/kern_sdt.c#8 (text+ko) ==== @@ -39,8 +39,8 @@ #include <sys/kernel.h> #include <sys/linker.h> #include <sys/lock.h> -#include <sys/mutex.h> #include <sys/proc.h> +#include <sys/sx.h> #include <sys/sdt.h> /* @@ -51,8 +51,7 @@ /* * Mutex to serialise access to the SDT provider list. */ -static struct mtx sdt_mtx; -MTX_SYSINIT(&sdt_mtx, "Statically Defined Tracing", NULL, MTX_DEF); +static struct sx sdt_sx; /* * Hook for the DTrace probe function. The 'sdt' provider will set this @@ -80,13 +79,13 @@ { struct sdt_provider *prov = arg; - mtx_lock(&sdt_mtx); + sx_xlock(&sdt_sx); TAILQ_INSERT_TAIL(&sdt_provider_list, prov, prov_entry); TAILQ_INIT(&prov->probe_list); - mtx_unlock(&sdt_mtx); + sx_xunlock(&sdt_sx); } /* @@ -97,11 +96,11 @@ { struct sdt_provider *prov = arg; - mtx_lock(&sdt_mtx); + sx_xlock(&sdt_sx); TAILQ_REMOVE(&sdt_provider_list, prov, prov_entry); - mtx_unlock(&sdt_mtx); + sx_xunlock(&sdt_sx); } /* @@ -121,7 +120,7 @@ return; } - mtx_lock(&sdt_mtx); + sx_xlock(&sdt_sx); TAILQ_INSERT_TAIL(&probe->prov->probe_list, probe, probe_entry); @@ -129,7 +128,7 @@ probe->state = SDT_INIT; - mtx_unlock(&sdt_mtx); + sx_xunlock(&sdt_sx); } /* @@ -140,14 +139,14 @@ { struct sdt_probe *probe = arg; - mtx_lock(&sdt_mtx); + sx_xlock(&sdt_sx); if (probe->state == SDT_INIT) { TAILQ_REMOVE(&probe->prov->probe_list, probe, probe_entry); probe->state = SDT_UNINIT; } - mtx_unlock(&sdt_mtx); + sx_xunlock(&sdt_sx); } /* @@ -158,13 +157,13 @@ { struct sdt_argtype *argtype = arg; - mtx_lock(&sdt_mtx); + sx_xlock(&sdt_sx); TAILQ_INSERT_TAIL(&argtype->probe->argtype_list, argtype, argtype_entry); argtype->probe->n_args++; - mtx_unlock(&sdt_mtx); + sx_xunlock(&sdt_sx); } /* @@ -175,17 +174,17 @@ { struct sdt_argtype *argtype = arg; - mtx_lock(&sdt_mtx); + sx_xlock(&sdt_sx); TAILQ_REMOVE(&argtype->probe->argtype_list, argtype, argtype_entry); - mtx_unlock(&sdt_mtx); + sx_xunlock(&sdt_sx); } static void sdt_init(void *arg) { - sx_init(&sdt_mtx, "Statically Defined Tracing"); + sx_init_flags(&sdt_sx, "Statically Defined Tracing", SX_NOWITNESS); TAILQ_INIT(&sdt_provider_list); } @@ -195,7 +194,7 @@ static void sdt_uninit(void *arg) { - sx_destroy(&sdt_mtx); + sx_destroy(&sdt_sx); } SYSUNINIT(sdt, SI_SUB_KDTRACE, SI_ORDER_FIRST, sdt_uninit, NULL); @@ -209,14 +208,14 @@ int error = 0; struct sdt_provider *prov; - mtx_lock(&sdt_mtx); + sx_xlock(&sdt_sx); TAILQ_FOREACH(prov, &sdt_provider_list, prov_entry) { if ((error = callback_func(prov, arg)) != 0) break; } - mtx_unlock(&sdt_mtx); + sx_xunlock(&sdt_sx); return (error); } @@ -232,9 +231,9 @@ int locked; struct sdt_probe *probe; - locked = mtx_locked(&sdt_mtx); + locked = sx_xlocked(&sdt_sx); if (!locked) - mtx_lock(&sdt_mtx); + sx_xlock(&sdt_sx); TAILQ_FOREACH(probe, &prov->probe_list, probe_entry) { if ((error = callback_func(probe, arg)) != 0) @@ -242,7 +241,7 @@ } if (!locked) - mtx_unlock(&sdt_mtx); + sx_xunlock(&sdt_sx); return (error); } @@ -258,9 +257,9 @@ int locked; struct sdt_argtype *argtype; - locked = mtx_locked(&sdt_mtx); + locked = sx_xlocked(&sdt_sx); if (!locked) - mtx_lock(&sdt_mtx); + sx_xlock(&sdt_sx); TAILQ_FOREACH(argtype, &probe->argtype_list, argtype_entry) { if ((error = callback_func(argtype, arg)) != 0) @@ -268,7 +267,7 @@ } if (!locked) - mtx_unlock(&sdt_mtx); + sx_xunlock(&sdt_sx); return (error); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200801272145.m0RLjSqd053790>