diff --git a/include/zephyr/tracing/tracing.h b/include/zephyr/tracing/tracing.h index 8719413fcd9..e564f23d3a2 100644 --- a/include/zephyr/tracing/tracing.h +++ b/include/zephyr/tracing/tracing.h @@ -1870,17 +1870,17 @@ * @brief Trace posting of an Event call entry * @param event Event object * @param events Set of posted events - * @param accumulate True if events accumulate, false otherwise + * @param events_mask Mask to apply against posted events */ -#define sys_port_trace_k_event_post_enter(event, events, accumulate) +#define sys_port_trace_k_event_post_enter(event, events, events_mask) /** * @brief Trace posting of an Event call exit * @param event Event object * @param events Set of posted events - * @param accumulate True if events accumulate, false otherwise + * @param events_mask Mask to apply against posted events */ -#define sys_port_trace_k_event_post_exit(event, events, accumulate) +#define sys_port_trace_k_event_post_exit(event, events, events_mask) /** * @brief Trace waiting of an Event call entry diff --git a/kernel/events.c b/kernel/events.c index 13182b39bf4..259d1b8ada8 100644 --- a/kernel/events.c +++ b/kernel/events.c @@ -85,7 +85,7 @@ static bool are_wait_conditions_met(uint32_t desired, uint32_t current, } static void k_event_post_internal(struct k_event *event, uint32_t events, - bool accumulate) + uint32_t events_mask) { k_spinlock_key_t key; struct k_thread *thread; @@ -95,12 +95,10 @@ static void k_event_post_internal(struct k_event *event, uint32_t events, key = k_spin_lock(&event->lock); SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_event, post, event, events, - accumulate); - - if (accumulate) { - events |= event->events; - } + events_mask); + events = (event->events & ~events_mask) | + (events & events_mask); event->events = events; /* @@ -145,12 +143,12 @@ static void k_event_post_internal(struct k_event *event, uint32_t events, z_reschedule(&event->lock, key); SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_event, post, event, events, - accumulate); + events_mask); } void z_impl_k_event_post(struct k_event *event, uint32_t events) { - k_event_post_internal(event, events, true); + k_event_post_internal(event, events, events); } #ifdef CONFIG_USERSPACE @@ -164,7 +162,7 @@ void z_vrfy_k_event_post(struct k_event *event, uint32_t events) void z_impl_k_event_set(struct k_event *event, uint32_t events) { - k_event_post_internal(event, events, false); + k_event_post_internal(event, events, ~0); } #ifdef CONFIG_USERSPACE diff --git a/subsys/tracing/ctf/tracing_ctf.h b/subsys/tracing/ctf/tracing_ctf.h index 0dd229990d8..a27181249f3 100644 --- a/subsys/tracing/ctf/tracing_ctf.h +++ b/subsys/tracing/ctf/tracing_ctf.h @@ -314,8 +314,8 @@ extern "C" { #define sys_port_trace_k_timer_status_sync_exit(timer, result) #define sys_port_trace_k_event_init(event) -#define sys_port_trace_k_event_post_enter(event, events, accumulate) -#define sys_port_trace_k_event_post_exit(event, events, accumulate) +#define sys_port_trace_k_event_post_enter(event, events, events_mask) +#define sys_port_trace_k_event_post_exit(event, events, events_mask) #define sys_port_trace_k_event_wait_enter(event, events, options, timeout) #define sys_port_trace_k_event_wait_blocking(event, events, options, timeout) #define sys_port_trace_k_event_wait_exit(event, events, ret) diff --git a/subsys/tracing/test/tracing_test.h b/subsys/tracing/test/tracing_test.h index cdc6e5472d0..7e49bd9bbaa 100644 --- a/subsys/tracing/test/tracing_test.h +++ b/subsys/tracing/test/tracing_test.h @@ -421,10 +421,10 @@ sys_trace_k_timer_status_sync_exit(timer, result) #define sys_port_trace_k_event_init(event) sys_trace_k_event_init(event) -#define sys_port_trace_k_event_post_enter(event, events, accumulate) \ - sys_trace_k_event_post_enter(event, events, accumulate) -#define sys_port_trace_k_event_post_exit(event, events, accumulate) \ - sys_trace_k_event_post_exit(event, events, accumulate) +#define sys_port_trace_k_event_post_enter(event, events, events_mask) \ + sys_trace_k_event_post_enter(event, events, events_mask) +#define sys_port_trace_k_event_post_exit(event, events, events_mask) \ + sys_trace_k_event_post_exit(event, events, events_mask) #define sys_port_trace_k_event_wait_enter(event, events, options, timeout) \ sys_trace_k_event_wait_enter(event, events, options, timeout) #define sys_port_trace_k_event_wait_blocking(event, events, options, timeout) \ diff --git a/subsys/tracing/user/tracing_user.h b/subsys/tracing/user/tracing_user.h index 8e0a0f8d30f..df2b96357b1 100644 --- a/subsys/tracing/user/tracing_user.h +++ b/subsys/tracing/user/tracing_user.h @@ -316,8 +316,8 @@ void sys_trace_idle(void); #define sys_port_trace_k_timer_status_sync_exit(timer, result) #define sys_port_trace_k_event_init(event) -#define sys_port_trace_k_event_post_enter(event, events, accumulate) -#define sys_port_trace_k_event_post_exit(event, events, accumulate) +#define sys_port_trace_k_event_post_enter(event, events, events_mask) +#define sys_port_trace_k_event_post_exit(event, events, events_mask) #define sys_port_trace_k_event_wait_enter(event, events, options, timeout) #define sys_port_trace_k_event_wait_blocking(event, events, options, timeout) #define sys_port_trace_k_event_wait_exit(event, events, ret)