extern struct marker __start___markers[] __attribute__((visibility("hidden")));
extern struct marker __stop___markers[] __attribute__((visibility("hidden")));
-extern struct marker_addr __start___marker_addr[] __attribute__((visibility("hidden")));
-extern struct marker_addr __stop___marker_addr[] __attribute__((visibility("hidden")));
/* Set to 1 to enable marker debug output */
static const int marker_debug;
*/
}
+/*
+ * is_marker_enabled - Check if a marker is enabled
+ * @channel: channel name
+ * @name: marker name
+ *
+ * Returns 1 if the marker is enabled, 0 if disabled.
+ */
+int is_marker_enabled(const char *channel, const char *name)
+{
+ struct marker_entry *entry;
+
+ mutex_lock(&markers_mutex);
+ entry = get_marker(channel, name);
+ mutex_unlock(&markers_mutex);
+
+ return entry && !!entry->refcount;
+}
+
/**
* marker_update_probe_range - Update a probe range
* @begin: beginning of the range
}
}
-int marker_register_lib(struct marker *markers_start, struct marker_addr *marker_addr_start, int markers_count)
+int marker_register_lib(struct marker *markers_start, int markers_count)
{
struct lib *pl;
struct marker_addr *addr;
pl = (struct lib *) malloc(sizeof(struct lib));
pl->markers_start = markers_start;
- pl->markers_addr_start = marker_addr_start;
pl->markers_count = markers_count;
- lock_markers();
- for(addr = marker_addr_start; addr < marker_addr_start + markers_count; addr++)
- addr->marker->location = addr->addr;
- unlock_markers();
-
/* FIXME: maybe protect this with its own mutex? */
lock_markers();
list_add(&pl->list, &libs);
void __attribute__((constructor)) init_markers(void)
{
if(!initialized) {
- marker_register_lib(__start___markers, __start___marker_addr, (((long)__stop___markers)-((long)__start___markers))/sizeof(struct marker));
+ marker_register_lib(__start___markers, (((long)__stop___markers)-((long)__start___markers))/sizeof(struct marker));
//DBG("markers_start: %p, markers_stop: %p\n", __start___markers, __stop___markers);
initialized = 1;
}