summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_ktrace.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_ktrace.c')
-rw-r--r--sys/kern/kern_ktrace.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c
index a37ad22..9b97944 100644
--- a/sys/kern/kern_ktrace.c
+++ b/sys/kern/kern_ktrace.c
@@ -78,6 +78,9 @@ ktrgetheader(type)
return (kth);
}
+/*
+ * MPSAFE
+ */
void
ktrsyscall(vp, code, narg, args)
struct vnode *vp;
@@ -92,6 +95,7 @@ ktrsyscall(vp, code, narg, args)
register_t *argp;
int i;
+ mtx_lock(&Giant);
p->p_traceflag |= KTRFAC_ACTIVE;
kth = ktrgetheader(KTR_SYSCALL);
MALLOC(ktp, struct ktr_syscall *, len, M_KTRACE, M_WAITOK);
@@ -106,8 +110,12 @@ ktrsyscall(vp, code, narg, args)
FREE(ktp, M_KTRACE);
FREE(kth, M_KTRACE);
p->p_traceflag &= ~KTRFAC_ACTIVE;
+ mtx_unlock(&Giant);
}
+/*
+ * MPSAFE
+ */
void
ktrsysret(vp, code, error, retval)
struct vnode *vp;
@@ -118,6 +126,7 @@ ktrsysret(vp, code, error, retval)
struct ktr_sysret ktp;
struct proc *p = curproc; /* XXX */
+ mtx_lock(&Giant);
p->p_traceflag |= KTRFAC_ACTIVE;
kth = ktrgetheader(KTR_SYSRET);
ktp.ktr_code = code;
@@ -130,6 +139,7 @@ ktrsysret(vp, code, error, retval)
ktrwrite(vp, kth, NULL);
FREE(kth, M_KTRACE);
p->p_traceflag &= ~KTRFAC_ACTIVE;
+ mtx_unlock(&Giant);
}
void
OpenPOWER on IntegriCloud