*/
if (kdi_dtrace_set(KDI_DTSET_DTRACE_ACTIVATE) != 0) {
dtrace_opens--;
- mutex_unlock(&cpu_lock);
mutex_unlock(&dtrace_lock);
+ mutex_unlock(&cpu_lock);
return -EBUSY;
}
#endif
probe = dtrace_probe_lookup_id(desc.dtargd_id);
if (probe == NULL) {
- mutex_unlock(&dtrace_lock);
-// mutex_unlock(&module_mutex); /* FIXME */
mutex_unlock(&dtrace_provider_lock);
+// mutex_unlock(&module_mutex); /* FIXME */
+ mutex_unlock(&dtrace_lock);
return -EINVAL;
}
* The DTrace module is loaded (obviously) but not attached;
* we don't have any work to do.
*/
- mutex_unlock(&dtrace_provider_lock);
- /* FIXME: mutex_unlock(&mod_lock); */
mutex_unlock(&dtrace_lock);
+ /* FIXME: mutex_unlock(&mod_lock); */
+ mutex_unlock(&dtrace_provider_lock);
return;
}
for (probe = first = dtrace_hash_lookup(dtrace_bymod, &template);
probe != NULL; probe = probe->dtpr_nextmod) {
if (probe->dtpr_ecb != NULL) {
- mutex_unlock(&dtrace_provider_lock);
- /* FIXME: mutex_unlock(&mod_lock); */
mutex_unlock(&dtrace_lock);
+ /* FIXME: mutex_unlock(&mod_lock); */
+ mutex_unlock(&dtrace_provider_lock);
/*
* This shouldn't _actually_ be possible -- we're
dtrace_provider_id_t id;
int rc = 0;
- mutex_lock(&cpu_lock);
- mutex_lock(&dtrace_provider_lock);
- mutex_lock(&dtrace_lock);
-
- rc = dtrace_probe_init();
- if (rc) {
- pr_err("Failed to initialize DTrace core\n");
-
- mutex_unlock(&cpu_lock);
- mutex_unlock(&dtrace_provider_lock);
- mutex_unlock(&dtrace_lock);
-
- return rc;
- }
-
/*
* Register the device for the DTrace core.
*/
pr_err("%s: Can't register misc device %d\n",
dtrace_dev.name, dtrace_dev.minor);
- mutex_unlock(&cpu_lock);
- mutex_unlock(&dtrace_provider_lock);
- mutex_unlock(&dtrace_lock);
-
return rc;
}
pr_err("%s: Can't register misc device %d\n",
helper_dev.name, helper_dev.minor);
- mutex_unlock(&cpu_lock);
- mutex_unlock(&dtrace_provider_lock);
- mutex_unlock(&dtrace_lock);
-
return rc;
}
ctf_forceload();
+ mutex_lock(&cpu_lock);
+ mutex_lock(&dtrace_provider_lock);
+ mutex_lock(&dtrace_lock);
+
+ rc = dtrace_probe_init();
+ if (rc) {
+ pr_err("Failed to initialize DTrace core\n");
+
+ mutex_unlock(&dtrace_lock);
+ mutex_unlock(&dtrace_provider_lock);
+ mutex_unlock(&cpu_lock);
+
+ return rc;
+ }
+
dtrace_modload = dtrace_module_loaded;
dtrace_modunload = dtrace_module_unloaded;
dtrace_helpers_cleanup = dtrace_helpers_destroy;
NULL, "ERROR", 0, NULL);
dtrace_anon_property();
- mutex_unlock(&cpu_lock);
/*
* If DTrace helper tracing is enabled, we need to allocate a trace
* the first provider causing the core to be loaded.
*/
#endif
- mutex_unlock(&dtrace_provider_lock);
mutex_unlock(&dtrace_lock);
+ mutex_unlock(&dtrace_provider_lock);
+ mutex_unlock(&cpu_lock);
return 0;
}
dtrace_byname = NULL;
kmem_cache_destroy(dtrace_state_cachep);
- misc_deregister(&helper_dev);
- misc_deregister(&dtrace_dev);
mutex_unlock(&dtrace_lock);
mutex_unlock(&dtrace_provider_lock);
+
+ misc_deregister(&helper_dev);
+ misc_deregister(&dtrace_dev);
}
int err;
dtrace_aggid_t aggid;
- ASSERT(MUTEX_HELD(&dtrace_lock));
ASSERT(MUTEX_HELD(&cpu_lock));
+ ASSERT(MUTEX_HELD(&dtrace_lock));
state = kzalloc(sizeof (dtrace_state_t), GFP_KERNEL);
if (state == NULL)
* that gets used as meaning 'none'.
*/
again:
- mutex_unlock(&cpu_lock);
mutex_unlock(&dtrace_lock);
+ mutex_unlock(&cpu_lock);
idr_pre_get(&state->dts_agg_idr, __GFP_NOFAIL);
- mutex_lock(&dtrace_lock);
mutex_lock(&cpu_lock);
+ mutex_lock(&dtrace_lock);
err = idr_get_new(&state->dts_agg_idr, NULL, &aggid);
if (err == -EAGAIN)
#endif
#ifdef CONFIG_DT_DEBUG_MUTEX
-# define _mutex_lock(x) mutex_lock(x)
-# define _mutex_unlock(x) mutex_unlock(x)
+# define real_mutex_lock(x) mutex_lock(x)
+# define real_mutex_unlock(x) mutex_unlock(x)
# define mutex_lock(x) do { \
printk(KERN_DEBUG \
"mutex_lock(%s) at %s::%d " \
- "for %p(PID %d)\n", \
+ " for %p (PID %d)\n", \
__stringify(x), \
__FILE__, __LINE__, current, \
current ? current->pid : -1); \
- _mutex_lock(x); \
+ real_mutex_lock(x); \
} while (0)
# define mutex_unlock(x) do { \
printk(KERN_DEBUG \
"mutex_unlock(%s) at %s::%d" \
- "for %p(PID %d)\n", \
+ " for %p (PID %d)\n", \
__stringify(x), \
__FILE__, __LINE__, current, \
current ? current->pid : -1); \
- _mutex_unlock(x); \
+ real_mutex_unlock(x); \
} while (0)
#endif