#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;
{
const struct side_callback *side_cb;
unsigned int rcu_period;
- uint32_t enabled;
+ uintptr_t enabled;
if (side_unlikely(finalized))
return;
{
const struct side_callback *side_cb;
unsigned int rcu_period;
- uint32_t enabled;
+ uintptr_t enabled;
if (side_unlikely(finalized))
return;
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