PERFORCE change 133641 for review
John Birrell
jb at FreeBSD.org
Fri Jan 18 22:35:20 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=133641
Change 133641 by jb at 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 */
More information about the p4-projects
mailing list