usr/src/uts/common/os/logsubr.c
changeset 850 504be1e0fe28
parent 809 13021e0f2271
child 1259 8e7e69328588
--- a/usr/src/uts/common/os/logsubr.c	Fri Nov 04 22:44:23 2005 -0800
+++ b/usr/src/uts/common/os/logsubr.c	Sun Nov 06 10:46:57 2005 -0800
@@ -20,7 +20,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -59,8 +59,7 @@
 static stdata_t log_fakestr;
 static id_space_t *log_minorspace;
 static log_t log_backlog;
-static struct kmem_cache *log_cons_cache;	/* log_t cache */
-static vmem_t *log_cons_minor_arena; 		/* Arena for device minors */
+static log_t log_conslog;
 
 static queue_t *log_recentq;
 static queue_t *log_freeq;
@@ -83,8 +82,6 @@
 	"local4",	"local5",	"local6",	"local7",
 	"unknown"
 };
-static int log_cons_constructor(void *, void *, int);
-static void log_cons_destructor(void *, void *);
 
 /*
  * Get exclusive access to the logging system; this includes all minor
@@ -237,15 +234,11 @@
 	log_backlog.log_zoneid = GLOBAL_ZONEID;
 	log_backlog.log_minor = LOG_BACKLOG;
 
-	/* Allocate integer space for conslog's minor numbers */
-	log_cons_minor_arena = vmem_create("log_cons_minor", (void *)1,
-	    LOG_NUMCONS, 1, NULL, NULL, NULL, 0,
-	    VM_SLEEP | VMC_IDENTIFIER);
-
-	/* Allocate kmem cache for conslog's log structures */
-	log_cons_cache = kmem_cache_create("log_cons_cache",
-	    sizeof (struct log), 0, log_cons_constructor, log_cons_destructor,
-	    NULL, NULL, NULL, 0);
+	/*
+	 * Initialize conslog structure.
+	 */
+	log_conslog.log_zoneid = GLOBAL_ZONEID;
+	log_conslog.log_minor = LOG_CONSMIN;
 
 	/*
 	 * Let the logging begin.
@@ -265,10 +258,10 @@
 }
 
 /*
- * Allocate a log device corresponding to supplied device type.
- * Both devices are clonable. /dev/log devices are allocated per zone.
- * /dev/conslog devices are allocated from kmem cache, with minor numbers
- * supplied from a vmem arena.
+ * Allocate a log device corresponding to supplied device type.  All
+ * processes within a given zone that open /dev/conslog share the same
+ * device; processes opening /dev/log get distinct devices (if
+ * available).
  */
 log_t *
 log_alloc(minor_t type)
@@ -277,45 +270,26 @@
 	log_zone_t *lzp;
 	log_t *lp;
 	int i;
-	minor_t minor;
 
 	if (type == LOG_CONSMIN) {
+		/* return the dedicated /dev/conslog device */
+		return (&log_conslog);
+	}
 
-		/*
-		 * Return a write-only /dev/conslog device.
-		 * No point allocating log_t until there's a free minor number.
-		 */
-		minor = (minor_t)(uintptr_t)
-		    vmem_alloc(log_cons_minor_arena, 1, VM_SLEEP);
-		lp = kmem_cache_alloc(log_cons_cache, KM_SLEEP);
-		lp->log_minor = minor;
-		return (lp);
-	} else {
-		ASSERT(type == LOG_LOGMIN);
+	ASSERT(type == LOG_LOGMIN);
 
-		lzp = zone_getspecific(log_zone_key, zptr);
-		ASSERT(lzp != NULL);
+	lzp = zone_getspecific(log_zone_key, zptr);
+	ASSERT(lzp != NULL);
 
-		/* search for an available /dev/log device for the zone */
-		for (i = LOG_LOGMINIDX; i <= LOG_LOGMAXIDX; i++) {
-			lp = &lzp->lz_clones[i];
-			if (lp->log_inuse == 0)
-				break;
-		}
-		if (i > LOG_LOGMAXIDX)
-			lp = NULL;
-		lp->log_major = LOG_LOGMIN;
-		return (lp);
+	/* search for an available /dev/log device for the zone */
+	for (i = LOG_LOGMINIDX; i <= LOG_LOGMAXIDX; i++) {
+		lp = &lzp->lz_clones[i];
+		if (lp->log_inuse == 0)
+			break;
 	}
-}
-
-void
-log_free(log_t *lp)
-{
-	/* Return minor number to the pool */
-	vmem_free(log_cons_minor_arena, (void *)(uintptr_t)lp->log_minor, 1);
-	/* Return log to the cache */
-	kmem_cache_free(log_cons_cache, lp);
+	if (i > LOG_LOGMAXIDX)
+		lp = NULL;
+	return (lp);
 }
 
 /*
@@ -421,6 +395,7 @@
 		lzp = zone_getspecific(log_zone_key, zptr);
 	}
 	ASSERT(lzp != NULL);
+
 	for (i = LOG_LOGMAXIDX; i >= LOG_LOGMINIDX; i--) {
 		lp = &lzp->lz_clones[i];
 		if (zoneid == GLOBAL_ZONEID && (lp->log_flags & SL_CONSOLE))
@@ -737,24 +712,3 @@
 		}
 	} while ((qlast = q) != qfirst);
 }
-
-/* ARGSUSED */
-static int
-log_cons_constructor(void *buf, void *cdrarg, int kmflags)
-{
-	struct log *lp = buf;
-	lp->log_zoneid = GLOBAL_ZONEID;
-	lp->log_major = LOG_CONSMIN;
-	lp->log_data = NULL;
-	return (0);
-}
-
-/* ARGSUSED */
-static void
-log_cons_destructor(void *buf, void *cdrarg)
-{
-	struct log *lp = buf;
-	ASSERT(lp->log_zoneid == GLOBAL_ZONEID);
-	ASSERT(lp->log_major == LOG_CONSMIN);
-	ASSERT(lp->log_data == NULL);
-}