Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Jun 2002 13:24:08 -0700 (PDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 12455 for review
Message-ID:  <200206062024.g56KO8w23719@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://people.freebsd.org/~peter/p4db/chv.cgi?CH=12455

Change 12455 by jhb@jhb_laptop on 2002/06/06 13:23:48

	Change the all locks list from a STAILQ to a TAILQ.  This bloats
	struct lock_object by another pointer (though all of lock_object
	should be conditional on LOCK_DEBUG anyways) in exchange for
	an O(1) TAILQ_REMOVE() in witness_destroy() (called for every
	mtx_destroy() and sx_destroy()) instead of an O(n) STAILQ_REMOVE.
	
	Suggested by: iedowse

Affected files ...

... //depot/projects/smpng/sys/kern/subr_witness.c#53 edit
... //depot/projects/smpng/sys/sys/_lock.h#8 edit

Differences ...

==== //depot/projects/smpng/sys/kern/subr_witness.c#53 (text+ko) ====

@@ -241,14 +241,14 @@
 /*
  * List of all locks in the system.
  */
-STAILQ_HEAD(, lock_object) all_locks = STAILQ_HEAD_INITIALIZER(all_locks);
+TAILQ_HEAD(, lock_object) all_locks = TAILQ_HEAD_INITIALIZER(all_locks);
 
 static struct mtx all_mtx = {
 	{ &lock_class_mtx_sleep,	/* mtx_object.lo_class */
 	  "All locks list",		/* mtx_object.lo_name */
 	  "All locks list",		/* mtx_object.lo_type */
 	  LO_INITIALIZED,		/* mtx_object.lo_flags */
-	  { NULL },			/* mtx_object.lo_list */
+	  { NULL, NULL },		/* mtx_object.lo_list */
 	  NULL },			/* mtx_object.lo_witness */
 	MTX_UNOWNED, 0,			/* mtx_lock, mtx_recurse */
 	TAILQ_HEAD_INITIALIZER(all_mtx.mtx_blocked),
@@ -285,7 +285,7 @@
 	mtx_assert(&Giant, MA_NOTOWNED);
 
 	CTR1(KTR_WITNESS, "%s: initializing witness", __func__);
-	STAILQ_INSERT_HEAD(&all_locks, &all_mtx.mtx_object, lo_list);
+	TAILQ_INSERT_HEAD(&all_locks, &all_mtx.mtx_object, lo_list);
 	mtx_init(&w_mtx, "witness lock", NULL, MTX_SPIN | MTX_QUIET |
 	    MTX_NOWITNESS);
 	for (i = 0; i < WITNESS_COUNT; i++)
@@ -313,7 +313,7 @@
 
 	/* Iterate through all locks and add them to witness. */
 	mtx_lock(&all_mtx);
-	STAILQ_FOREACH(lock, &all_locks, lo_list) {
+	TAILQ_FOREACH(lock, &all_locks, lo_list) {
 		if (lock->lo_flags & LO_WITNESS)
 			lock->lo_witness = enroll(lock->lo_type,
 			    lock->lo_class);
@@ -352,7 +352,7 @@
 		    class->lc_name, lock->lo_name);
 
 	mtx_lock(&all_mtx);
-	STAILQ_INSERT_TAIL(&all_locks, lock, lo_list);
+	TAILQ_INSERT_TAIL(&all_locks, lock, lo_list);
 	lock->lo_flags |= LO_INITIALIZED;
 	lock_cur_cnt++;
 	if (lock_cur_cnt > lock_max_cnt)
@@ -390,7 +390,7 @@
 
 	mtx_lock(&all_mtx);
 	lock_cur_cnt--;
-	STAILQ_REMOVE(&all_locks, lock, lock_object, lo_list);
+	TAILQ_REMOVE(&all_locks, lock, lo_list);
 	lock->lo_flags &= ~LO_INITIALIZED;
 	mtx_unlock(&all_mtx);
 }

==== //depot/projects/smpng/sys/sys/_lock.h#8 (text+ko) ====

@@ -36,7 +36,7 @@
 	const	char *lo_name;		/* Individual lock name. */
 	const	char *lo_type;		/* General lock type. */
 	u_int	lo_flags;
-	STAILQ_ENTRY(lock_object) lo_list; /* List of all locks in system. */
+	TAILQ_ENTRY(lock_object) lo_list; /* List of all locks in system. */
 	struct	witness *lo_witness;
 };
 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe p4-projects" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200206062024.g56KO8w23719>