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 <andrew.jackson@amd.com>
This commit is contained in:
Andrew Jackson 2022-07-07 06:01:03 +01:00 committed by Anas Nashif
commit e7e827a0d2
5 changed files with 19 additions and 21 deletions

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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) \

View file

@ -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)