Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 19 Jan 2008 06:35:18 GMT
From:      John Birrell <jb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 133641 for review
Message-ID:  <200801190635.m0J6ZIM3086727@repoman.freebsd.org>

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

Change 133641 by jb@jb_freebsd1 on 2008/01/19 06:34:28

	Remove the vmem references which just allocate a unique ID.
	For now we'll just use an unsigned long value and allocate a higher
	one each time. The first person to allocate more than 4 billion probes
	or aggregations can implement an nice simple resource number
	allocator.

Affected files ...

.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_clone.c#6 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_load.c#27 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_unload.c#23 edit
.. //depot/projects/dtrace/src/sys/cddl/kern/vmem.c#7 delete
.. //depot/projects/dtrace/src/sys/compat/opensolaris/sys/kmem.h#3 edit
.. //depot/projects/dtrace/src/sys/contrib/opensolaris/uts/common/dtrace/dtrace.c#17 edit
.. //depot/projects/dtrace/src/sys/contrib/opensolaris/uts/common/sys/dtrace_impl.h#14 edit
.. //depot/projects/dtrace/src/sys/contrib/opensolaris/uts/common/sys/vmem.h#7 delete

Differences ...

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_clone.c#6 (text+ko) ====

@@ -50,7 +50,7 @@
 		return;
 
 	/* Allocate a unique minor number. */
-	u = (long) vmem_alloc(dtrace_minor, 1, VM_BESTFIT | VM_SLEEP);
+	u = dtrace_minor++;
 
 	/* Clone the device to the new minor number. */
 	if (clone_create(&dtrace_clones, &dtrace_cdevsw, &u, dev, 0) != 0)

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_load.c#27 (text+ko) ====

@@ -92,11 +92,6 @@
 #endif
 	ASSERT(MUTEX_HELD(&cpu_lock));
 
-	dtrace_arena = vmem_create("dtrace", (void *)1, UINT32_MAX, 1,
-	    NULL, NULL, NULL, 0, VM_SLEEP | VMC_IDENTIFIER);
-	dtrace_minor = vmem_create("dtrace_minor", (void *)DTRACEMNRN_CLONE,
-	    UINT32_MAX - DTRACEMNRN_CLONE, 1, NULL, NULL, NULL, 0,
-	    VM_SLEEP | VMC_IDENTIFIER);
 #ifdef DOODAD
 	dtrace_taskq = taskq_create("dtrace_taskq", 1, maxclsyspri,
 	    1, INT_MAX, 0);

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_unload.c#23 (text+ko) ====

@@ -121,8 +121,6 @@
 	dtrace_byname = NULL;
 
 	kmem_cache_destroy(dtrace_state_cache);
-	vmem_destroy(dtrace_minor);
-	vmem_destroy(dtrace_arena);
 
 	if (dtrace_toxrange != NULL) {
 		kmem_free(dtrace_toxrange, 0);

==== //depot/projects/dtrace/src/sys/compat/opensolaris/sys/kmem.h#3 (text+ko) ====

@@ -32,7 +32,6 @@
 #include <sys/param.h>
 #include <sys/proc.h>
 #include <sys/malloc.h>
-#include <sys/vmem.h>
 
 #include <vm/uma.h>
 #include <vm/vm.h>
@@ -54,6 +53,8 @@
 	void		*kc_private;
 } kmem_cache_t;
 
+#define vmem_t	void
+
 void *zfs_kmem_alloc(size_t size, int kmflags);
 void zfs_kmem_free(void *buf, size_t size);
 u_long kmem_size(void);

==== //depot/projects/dtrace/src/sys/contrib/opensolaris/uts/common/dtrace/dtrace.c#17 (text) ====

@@ -116,7 +116,6 @@
 #include <sys/kernel.h>
 #include <sys/malloc.h>
 #include <sys/sysctl.h>
-#include <sys/vmem.h>
 #include <sys/dtrace_bsd.h>
 #include "dtrace_cddl.h"
 #include "dtrace_debug.c"
@@ -192,10 +191,13 @@
 #if defined(sun)
 static dev_info_t	*dtrace_devi;		/* device info */
 #endif
+#if defined(sun)
 static vmem_t		*dtrace_arena;		/* probe ID arena */
 static vmem_t		*dtrace_minor;		/* minor number arena */
-#if defined(sun)
 static taskq_t		*dtrace_taskq;		/* task queue */
+#else
+static u_long		dtrace_arena;		/* Probe ID number.     */
+static u_long		dtrace_minor;		/* Minor device number. */
 #endif
 static dtrace_probe_t	**dtrace_probes;	/* array of all probes */
 static int		dtrace_nprobes;		/* number of probes */
@@ -7164,7 +7166,9 @@
 		kmem_free(probe->dtpr_mod, strlen(probe->dtpr_mod) + 1);
 		kmem_free(probe->dtpr_func, strlen(probe->dtpr_func) + 1);
 		kmem_free(probe->dtpr_name, strlen(probe->dtpr_name) + 1);
+#if defined(sun)
 		vmem_free(dtrace_arena, (void *)(uintptr_t)(probe->dtpr_id), 1);
+#endif
 		kmem_free(probe, sizeof (dtrace_probe_t));
 	}
 
@@ -7279,7 +7283,9 @@
 		kmem_free(probe->dtpr_func, strlen(probe->dtpr_func) + 1);
 		kmem_free(probe->dtpr_name, strlen(probe->dtpr_name) + 1);
 		kmem_free(probe, sizeof (dtrace_probe_t));
+#if defined(sun)
 		vmem_free(dtrace_arena, (void *)((uintptr_t)i + 1), 1);
+#endif
 	}
 
 	mutex_exit(&dtrace_lock);
@@ -7315,8 +7321,12 @@
 		mutex_enter(&dtrace_lock);
 	}
 
+#if defined(sun)
 	id = (dtrace_id_t)(uintptr_t)vmem_alloc(dtrace_arena, 1,
 	    VM_BESTFIT | VM_SLEEP);
+#else
+	id = ++dtrace_arena;
+#endif
 	probe = kmem_zalloc(sizeof (dtrace_probe_t), KM_SLEEP);
 
 	probe->dtpr_id = id;
@@ -9513,8 +9523,12 @@
 	/*
 	 * We need to allocate an id for this aggregation.
 	 */
+#if defined(sun)
 	aggid = (dtrace_aggid_t)(uintptr_t)vmem_alloc(state->dts_aggid_arena, 1,
 	    VM_BESTFIT | VM_SLEEP);
+#else
+	aggid = ++(state->dts_aggid_arena);
+#endif
 
 	if (aggid - 1 >= state->dts_naggregations) {
 		dtrace_aggregation_t **oaggs = state->dts_aggregations;
@@ -9563,7 +9577,9 @@
 	dtrace_aggid_t aggid = agg->dtag_id;
 
 	ASSERT(DTRACEACT_ISAGG(act->dta_kind));
+#if defined(sun)
 	vmem_free(state->dts_aggid_arena, (void *)(uintptr_t)aggid, 1);
+#endif
 
 	ASSERT(state->dts_aggregations[aggid - 1] == agg);
 	state->dts_aggregations[aggid - 1] = NULL;
@@ -12379,10 +12395,10 @@
 	state->dts_epid = DTRACE_EPIDNONE + 1;
 
 	(void) snprintf(c, sizeof (c), "dtrace_aggid_%d", m);
+#if defined(sun)
 	state->dts_aggid_arena = vmem_create(c, (void *)1, UINT32_MAX, 1,
 	    NULL, NULL, NULL, 0, VM_SLEEP | VMC_IDENTIFIER);
 
-#if defined(sun)
 	if (devp != NULL) {
 		major = getemajor(*devp);
 	} else {
@@ -12394,6 +12410,7 @@
 	if (devp != NULL)
 		*devp = state->dts_dev;
 #else
+	state->dts_aggid_arena = 0;
 	state->dts_dev = dev;
 #endif
 
@@ -13183,11 +13200,11 @@
 
 	dtrace_format_destroy(state);
 
+#if defined(sun)
 	if (state->dts_aggid_arena != NULL) {
 		vmem_destroy(state->dts_aggid_arena);
 		state->dts_aggid_arena = NULL;
 	}
-#if defined(sun)
 	ddi_soft_state_free(dtrace_softstate, minor);
 	vmem_free(dtrace_minor, (void *)(uintptr_t)minor, 1);
 #endif

==== //depot/projects/dtrace/src/sys/contrib/opensolaris/uts/common/sys/dtrace_impl.h#14 (text) ====

@@ -1125,7 +1125,11 @@
 	int dts_nspeculations;			/* number of speculations */
 	int dts_naggregations;			/* number of aggregations */
 	dtrace_aggregation_t **dts_aggregations; /* aggregation array */
+#if defined(sun)
 	vmem_t *dts_aggid_arena;		/* arena for aggregation IDs */
+#else
+	u_long dts_aggid_arena;			/* arena for aggregation IDs */
+#endif
 	uint64_t dts_errors;			/* total number of errors */
 	uint32_t dts_speculations_busy;		/* number of spec. busy */
 	uint32_t dts_speculations_unavail;	/* number of spec unavail */



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