Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 31 Dec 2007 04:25:46 GMT
From:      John Birrell <jb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 132147 for review
Message-ID:  <200712310425.lBV4Pkus058929@repoman.freebsd.org>

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

Change 132147 by jb@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
 	}



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