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>