From e7e827a0d2c3f8f1e852a436d91fb867e9d4f98f Mon Sep 17 00:00:00 2001 From: Andrew Jackson Date: Thu, 7 Jul 2022 06:01:03 +0100 Subject: [PATCH] kernel: Use mask rather than boolean to update events Although there is nothing wrong with the existing code, it doesn't permit individual bits to be set (or cleared). This makes further changes slightly awkward. Use a mask to restrict the bits set in an event. Signed-off-by: Andrew Jackson --- include/zephyr/tracing/tracing.h | 8 ++++---- kernel/events.c | 16 +++++++--------- subsys/tracing/ctf/tracing_ctf.h | 4 ++-- subsys/tracing/test/tracing_test.h | 8 ++++---- subsys/tracing/user/tracing_user.h | 4 ++-- 5 files changed, 19 insertions(+), 21 deletions(-) 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)