Page MenuHomeFreeBSD

D16921.id47349.diff
No OneTemporary

D16921.id47349.diff

Index: sys/cddl/dev/fbt/fbt.h
===================================================================
--- sys/cddl/dev/fbt/fbt.h
+++ sys/cddl/dev/fbt/fbt.h
@@ -46,6 +46,7 @@
modctl_t *fbtp_ctl;
int fbtp_loadcnt;
int fbtp_symindx;
+ long fbtp_enabled;
struct fbt_probe *fbtp_next;
} fbt_probe_t;
Index: sys/cddl/dev/fbt/fbt.c
===================================================================
--- sys/cddl/dev/fbt/fbt.c
+++ sys/cddl/dev/fbt/fbt.c
@@ -56,6 +56,7 @@
#include <sys/sysproto.h>
#include <sys/uio.h>
#include <sys/unistd.h>
+#include <machine/atomic.h>
#include <machine/stdarg.h>
#include <sys/dtrace.h>
@@ -265,8 +266,11 @@
return;
}
- for (; fbt != NULL; fbt = fbt->fbtp_next)
+ for (; fbt != NULL; fbt = fbt->fbtp_next) {
+ fbt->fbtp_enabled++;
+ atomic_thread_fence_acq();
fbt_patch_tracepoint(fbt, fbt->fbtp_patchval);
+ }
}
static void
@@ -281,8 +285,12 @@
if ((ctl->loadcnt != fbt->fbtp_loadcnt))
return;
- for (; fbt != NULL; fbt = fbt->fbtp_next)
+ for (; fbt != NULL; fbt = fbt->fbtp_next) {
fbt_patch_tracepoint(fbt, fbt->fbtp_savedval);
+ dtrace_sync();
+ atomic_store_rel_long(&fbt->fbtp_enabled,
+ fbt->fbtp_enabled - 1);
+ }
}
static void
Index: sys/cddl/dev/fbt/x86/fbt_isa.c
===================================================================
--- sys/cddl/dev/fbt/x86/fbt_isa.c
+++ sys/cddl/dev/fbt/x86/fbt_isa.c
@@ -78,7 +78,8 @@
cpu = &solaris_cpu[curcpu];
fbt = fbt_probetab[FBT_ADDR2NDX(addr)];
for (; fbt != NULL; fbt = fbt->fbtp_hashnext) {
- if ((uintptr_t)fbt->fbtp_patchpoint == addr) {
+ if ((uintptr_t)fbt->fbtp_patchpoint == addr &&
+ fbt->fbtp_enabled > 0) {
if (fbt->fbtp_roffset == 0) {
#ifdef __amd64__
/* fbt->fbtp_rval == DTRACE_INVOP_PUSHQ_RBP */

File Metadata

Mime Type
text/plain
Expires
Mon, Nov 24, 10:45 AM (1 h, 56 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26057687
Default Alt Text
D16921.id47349.diff (1 KB)

Event Timeline