PERFORCE change 132147 for review
John Birrell
jb at FreeBSD.org
Sun Dec 30 20:25:47 PST 2007
http://perforce.freebsd.org/chv.cgi?CH=132147
Change 132147 by jb at jb_freebsd1 on 2007/12/31 04:25:29
Remove the M_DTRACE memory type. Use the one that the kmem in the
opensolaris module uses.
Save the pointer to the allocated DTrace state in dtrace_open().
Check for a couple of NULL pointers when destroying the state because
a premature exit by dtrace(8) can leave those pointers NULL and freeing
them ends in tears.
(The premature exit is another story)
Affected files ...
.. //depot/projects/dtrace/src/sys/contrib/opensolaris/uts/common/dtrace/dtrace.c#7 edit
Differences ...
==== //depot/projects/dtrace/src/sys/contrib/opensolaris/uts/common/dtrace/dtrace.c#7 (text) ====
@@ -261,8 +261,6 @@
static kmutex_t dtrace_meta_lock; /* meta-provider state lock */
#if !defined(sun)
-MALLOC_DEFINE(M_DTRACE, "dtrace", "Dynamic Trace");
-
/* XXX FreeBSD hacks. */
static kmutex_t mod_lock;
@@ -275,7 +273,6 @@
#define NCPU 32
#define SNOCD 0
#define CPU_ON_INTR(_a) 0
-#define M_KMEM M_DTRACE
#define PRIV_EFFECTIVE (1 << 0)
#define PRIV_DTRACE_KERNEL (1 << 1)
@@ -11299,19 +11296,19 @@
freeenv(p_env);
if (len < sizeof (dof_hdr_t)) {
- free(buf, M_DTRACE);
+ kmem_free(buf, 0);
dtrace_dof_error(NULL, "truncated header");
return (NULL);
}
if (len < (loadsz = dof->dofh_loadsz)) {
- free(buf, M_DTRACE);
+ kmem_free(buf, 0);
dtrace_dof_error(NULL, "truncated DOF");
return (NULL);
}
if (loadsz >= dtrace_dof_maxsize) {
- free(buf, M_DTRACE);
+ kmem_free(buf, 0);
dtrace_dof_error(NULL, "oversized DOF");
return (NULL);
}
@@ -12341,7 +12338,7 @@
}
/* Allocate memory for the state. */
- state = malloc(sizeof(dtrace_state_t), M_DTRACE, M_WAITOK | M_ZERO);
+ state = kmem_zalloc(sizeof(dtrace_state_t), KM_SLEEP);
#endif
state->dts_epid = DTRACE_EPIDNONE + 1;
@@ -13121,7 +13118,8 @@
dtrace_dstate_fini(&vstate->dtvs_dynvars);
dtrace_vstate_fini(vstate);
- kmem_free(state->dts_ecbs, state->dts_necbs * sizeof (dtrace_ecb_t *));
+ if (state->dts_ecbs != NULL)
+ kmem_free(state->dts_ecbs, state->dts_necbs * sizeof (dtrace_ecb_t *));
if (state->dts_aggregations != NULL) {
#ifdef DEBUG
@@ -13139,7 +13137,8 @@
for (i = 0; i < nspec; i++)
kmem_free(spec[i].dtsp_buffer, bufsize);
- kmem_free(spec, nspec * sizeof (dtrace_speculation_t));
+ if (spec != NULL)
+ kmem_free(spec, nspec * sizeof (dtrace_speculation_t));
dtrace_format_destroy(state);
@@ -14809,6 +14808,7 @@
state = dtrace_state_create(devp, cred_p);
#else
state = dtrace_state_create(dev);
+ dev->si_drv1 = state;
#endif
mutex_exit(&cpu_lock);
@@ -14872,7 +14872,7 @@
dtrace_state_destroy(state);
#if !defined(sun)
- free(state, M_DTRACE);
+ kmem_free(state, 0);
dev->si_drv1 = NULL;
#endif
}
More information about the p4-projects
mailing list