57#pragma GCC visibility push(default)
75#pragma GCC visibility pop
93send_chaining(em_event_t event, em_queue_t chaining_queue)
95 const unsigned int num_outq =
em_shm->event_chaining.num_output_queues;
104 em_queue_t output_queue;
108 idx = ((uint32_t)iq.device_id + (uint32_t)iq.queue_id) % num_outq;
109 output_queue =
em_shm->event_chaining.output_queues[idx];
110 output_q_elem = queue_elem_get(output_queue);
114 "Invalid output queue:%" PRI_QUEUE "", output_queue);
116 return send_output(event, output_q_elem);
125send_chaining_multi(
const em_event_t events[],
const int num,
126 em_queue_t chaining_queue)
128 const unsigned int num_outq =
em_shm->event_chaining.num_output_queues;
137 em_queue_t output_queue;
141 idx = ((uint32_t)iq.device_id + (uint32_t)iq.queue_id) % num_outq;
142 output_queue =
em_shm->event_chaining.output_queues[idx];
143 output_q_elem = queue_elem_get(output_queue);
147 "Invalid output queue:%" PRI_QUEUE "", output_queue);
151 return send_output_multi(events, num, output_q_elem);
160send_chaining_egrp(em_event_t event,
event_hdr_t *
const ev_hdr,
161 em_queue_t chaining_queue,
165 return send_chaining(event, chaining_queue);
168 uint32_t save_egrp_gen;
171 save_current_evgrp(&save_egrp_elem, &save_egrp_gen);
176 event_group_set_local(ev_hdr->
egrp, ev_hdr->
egrp_gen, 1);
178 em_status_t stat = send_chaining(event, chaining_queue);
181 if (current_egrp_elem)
182 event_group_count_decrement(1, current_egrp_elem);
183 restore_current_evgrp(save_egrp_elem, save_egrp_gen);
194send_chaining_egrp_multi(
const em_event_t events[],
event_hdr_t *
const ev_hdrs[],
195 const int num, em_queue_t chaining_queue,
199 return send_chaining_multi(events, num, chaining_queue);
202 uint32_t save_egrp_gen;
205 save_current_evgrp(&save_egrp_elem, &save_egrp_gen);
213 event_group_set_local(ev_hdrs[0]->egrp, ev_hdrs[0]->egrp_gen, num);
215 int num_sent = send_chaining_multi(events, num, chaining_queue);
218 if (current_egrp_elem)
219 event_group_count_decrement(num, current_egrp_elem);
220 restore_current_evgrp(save_egrp_elem, save_egrp_gen);
em_status_t chaining_init(event_chaining_t *event_chaining)
em_status_t event_send_device(em_event_t event, em_queue_t queue)
em_status_t chaining_term(const event_chaining_t *event_chaining)
int event_send_device_multi(const em_event_t events[], int num, em_queue_t queue)
#define INTERNAL_ERROR(error, escope, fmt,...)
#define RETURN_ERROR_IF(cond, error, escope, fmt,...)
ENV_LOCAL em_locm_t em_locm
@ EM_SCHED_CONTEXT_TYPE_ORDERED
em_sched_context_type_t sched_context_type
event_group_elem_t * egrp_elem
em_locm_current_t current