Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 May 2007 17:27:46 GMT
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 119919 for review
Message-ID:  <200705161727.l4GHRkTC042247@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=119919

Change 119919 by jhb@jhb_mutex on 2007/05/16 17:27:39

	Retire uz_lock and just use uz_keg->uk_lock, it's still a single
	pointer deref but makes 'uma_zone' smaller.  Also, cleanup the
	macros to init/teardown some for the locking being a keg lock
	rather than a zone lock.

Affected files ...

.. //depot/projects/smpng/sys/vm/uma_core.c#70 edit
.. //depot/projects/smpng/sys/vm/uma_int.h#31 edit

Differences ...

==== //depot/projects/smpng/sys/vm/uma_core.c#70 (text+ko) ====

@@ -1247,14 +1247,9 @@
 	}
 
 	/*
-	 * Initialize keg's lock (shared among zones) through
-	 * Master zone
+	 * Initialize keg's lock (shared among zones).
 	 */
-	zone->uz_lock = &keg->uk_lock;
-	if (arg->flags & UMA_ZONE_MTXCLASS)
-		ZONE_LOCK_INIT(zone, 1);
-	else
-		ZONE_LOCK_INIT(zone, 0);
+	KEG_LOCK_INIT(keg, zone->uz_name, arg->flags & UMA_ZONE_MTXCLASS);
 
 	/*
 	 * If we're putting the slab header in the actual page we need to
@@ -1349,7 +1344,6 @@
 		zone->uz_keg = keg;
 		zone->uz_init = arg->uminit;
 		zone->uz_fini = arg->fini;
-		zone->uz_lock = &keg->uk_lock;
 		mtx_lock(&uma_mtx);
 		ZONE_LOCK(zone);
 		keg->uk_flags |= UMA_ZONE_SECONDARY;
@@ -1382,7 +1376,6 @@
 			return (error);
 	}
 	keg = zone->uz_keg;
-	zone->uz_lock = &keg->uk_lock;
 
 	/*
 	 * Some internal zones don't have room allocated for the per cpu
@@ -1416,18 +1409,18 @@
 	uma_keg_t keg;
 
 	keg = (uma_keg_t)arg;
-	mtx_lock(&keg->uk_lock);
+	KEG_LOCK(keg);
 	if (keg->uk_free != 0) {
 		printf("Freed UMA keg was not empty (%d items). "
 		    " Lost %d pages of memory.\n",
 		    keg->uk_free, keg->uk_pages);
 	}
-	mtx_unlock(&keg->uk_lock);
+	KEG_UNLOCK(keg);
 
 	if (keg->uk_flags & UMA_ZONE_HASH)
 		hash_free(&keg->uk_hash);
 
-	mtx_destroy(&keg->uk_lock);
+	KEG_LOCK_FINI(keg);
 }
 
 /*

==== //depot/projects/smpng/sys/vm/uma_int.h#31 (text+ko) ====

@@ -331,19 +331,21 @@
 
 /* Lock Macros */
 
-#define	ZONE_LOCK_INIT(z, lc)					\
+#define	KEG_LOCK_INIT(k, name, lc)				\
 	do {							\
 		if ((lc))					\
-			mtx_init((z)->uz_lock, (z)->uz_name,	\
-			    (z)->uz_name, MTX_DEF | MTX_DUPOK);	\
+			mtx_init(&(k)->uk_lock, (name),		\
+			    NULL, MTX_DEF | MTX_DUPOK);		\
 		else						\
-			mtx_init((z)->uz_lock, (z)->uz_name,	\
+			mtx_init(&(k)->uk_lock, (name),		\
 			    "UMA zone", MTX_DEF | MTX_DUPOK);	\
 	} while (0)
-	    
-#define	ZONE_LOCK_FINI(z)	mtx_destroy((z)->uz_lock)
-#define	ZONE_LOCK(z)	mtx_lock((z)->uz_lock)
-#define ZONE_UNLOCK(z)	mtx_unlock((z)->uz_lock)
+#define	KEG_LOCK_FINI(k)	mtx_destroy(&(k)->uk_lock)
+#define	KEG_LOCK(k)	mtx_lock(&(k)->uk_lock)
+#define	KEG_UNLOCK(k)	mtx_unlock(&(k)->uk_lock)
+
+#define	ZONE_LOCK(z)	mtx_lock(&(z)->uz_keg->uk_lock)
+#define ZONE_UNLOCK(z)	mtx_unlock(&(z)->uz_keg->uk_lock)
 
 /*
  * Find a slab within a hash table.  This is used for OFFPAGE zones to lookup



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