summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/dtrace/dtrace.c
diff options
context:
space:
mode:
authorBryan Cantrill <bryan@joyent.com>2015-09-27 17:50:09 +0000
committerRobert Mustacchi <rm@joyent.com>2015-10-06 14:53:29 -0700
commit7bd3c1d12d0c764e1517c3aca62c634409356764 (patch)
tree3ce3a96cd2c2bb04d98be9191d8faebf0c33f380 /usr/src/uts/common/dtrace/dtrace.c
parent29d55245572a5e53ba8b3d529926453d493fd1e3 (diff)
downloadillumos-joyent-7bd3c1d12d0c764e1517c3aca62c634409356764.tar.gz
6271 dtrace caused excessive fork time
Reviewed by: Adam Leventhal <ahl@delphix.com> Reviewed by: Dan McDonald <danmcd@omniti.com> Reviewed by: Richard Lowe <richlowe@richlowe.net> Approved by: Gordon Ross <gwr@nexenta.com>
Diffstat (limited to 'usr/src/uts/common/dtrace/dtrace.c')
-rw-r--r--usr/src/uts/common/dtrace/dtrace.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/usr/src/uts/common/dtrace/dtrace.c b/usr/src/uts/common/dtrace/dtrace.c
index f2c3fec010..533ce81ab4 100644
--- a/usr/src/uts/common/dtrace/dtrace.c
+++ b/usr/src/uts/common/dtrace/dtrace.c
@@ -14809,8 +14809,8 @@ dtrace_helper_provider_add(dof_helper_t *dofhp, int gen)
* Check to make sure this isn't a duplicate.
*/
for (i = 0; i < help->dthps_nprovs; i++) {
- if (dofhp->dofhp_dof ==
- help->dthps_provs[i]->dthp_prov.dofhp_dof)
+ if (dofhp->dofhp_addr ==
+ help->dthps_provs[i]->dthp_prov.dofhp_addr)
return (EALREADY);
}
@@ -15162,7 +15162,14 @@ dtrace_helper_slurp(dof_hdr_t *dof, dof_helper_t *dhp)
dtrace_enabling_destroy(enab);
if (dhp != NULL && nprovs > 0) {
+ /*
+ * Now that this is in-kernel, we change the sense of the
+ * members: dofhp_dof denotes the in-kernel copy of the DOF
+ * and dofhp_addr denotes the address at user-level.
+ */
+ dhp->dofhp_addr = dhp->dofhp_dof;
dhp->dofhp_dof = (uint64_t)(uintptr_t)dof;
+
if (dtrace_helper_provider_add(dhp, gen) == 0) {
mutex_exit(&dtrace_lock);
dtrace_helper_provider_register(curproc, help, dhp);