Enabled is now uintptr_t
[libside.git] / src / side.c
index 02cef042435616052228b5d98a7359728f77c038..35a50015356031192171a57191b39eed61996c9a 100644 (file)
 #include "list.h"
 
 /* Top 8 bits reserved for kernel tracer use. */
-#define SIDE_EVENT_ENABLED_KERNEL_MASK                 0xFF000000
-#define SIDE_EVENT_ENABLED_KERNEL_USER_EVENT_MASK      0x80000000
+#if SIDE_BITS_PER_LONG == 64
+# define SIDE_EVENT_ENABLED_KERNEL_MASK                        0xFF00000000000000ULL
+# define SIDE_EVENT_ENABLED_KERNEL_USER_EVENT_MASK     0x8000000000000000ULL
+
+/* Allow 2^56 tracer references on an event. */
+# define SIDE_EVENT_ENABLED_USER_MASK                  0x00FFFFFFFFFFFFFFULL
+#else
+# define SIDE_EVENT_ENABLED_KERNEL_MASK                        0xFF000000UL
+# define SIDE_EVENT_ENABLED_KERNEL_USER_EVENT_MASK     0x80000000UL
 
 /* Allow 2^24 tracer references on an event. */
-#define SIDE_EVENT_ENABLED_USER_MASK                   0x00FFFFFF
+# define SIDE_EVENT_ENABLED_USER_MASK                  0x00FFFFFFUL
+#endif
 
 struct side_events_register_handle {
        struct side_list_node node;
@@ -59,7 +67,7 @@ void side_call(const struct side_event_description *desc, const struct side_arg_
 {
        const struct side_callback *side_cb;
        unsigned int rcu_period;
-       uint32_t enabled;
+       uintptr_t enabled;
 
        if (side_unlikely(finalized))
                return;
@@ -88,7 +96,7 @@ void side_call_variadic(const struct side_event_description *desc,
 {
        const struct side_callback *side_cb;
        unsigned int rcu_period;
-       uint32_t enabled;
+       uintptr_t enabled;
 
        if (side_unlikely(finalized))
                return;
@@ -300,14 +308,13 @@ struct side_events_register_handle *side_events_register(struct side_event_descr
 static
 void side_event_remove_callbacks(struct side_event_description *desc)
 {
-       uint32_t nr_cb = *desc->enabled & SIDE_EVENT_ENABLED_USER_MASK;
+       uint32_t nr_cb = desc->nr_callbacks;
        struct side_callback *old_cb;
 
        if (!nr_cb)
                return;
        old_cb = (struct side_callback *) desc->callbacks;
-       if (desc->nr_callbacks)
-               (void) __atomic_add_fetch(desc->enabled, -1, __ATOMIC_RELAXED);
+       (void) __atomic_add_fetch(desc->enabled, -1, __ATOMIC_RELAXED);
        /*
         * Setting the state back to 0 cb and empty callbacks out of
         * caution. This should not matter because instrumentation is
This page took 0.023033 seconds and 4 git commands to generate.