51static ENV_LOCAL
struct {
54} _core_id_iter = {.idx = -1, .src_core_mask = NULL};
63 return odp_atomic_load_u32(&
em_shm->core_map.current_core_count);
100 uint32_t current_core_count;
101 odp_atomic_u32_t *src_core_count;
108 _core_id_iter.idx = -1;
122 src_core_mask = &core_map->rwlocked.
logic_mask;
125 odp_rwlock_read_lock(&core_map->
rwlock);
126 current_core_count = odp_atomic_load_u32(src_core_count);
128 odp_rwlock_read_unlock(&core_map->
rwlock);
131 *num = current_core_count;
133 if (current_core_count == 0) {
134 _core_id_iter.idx = -1;
139 _core_id_iter.src_core_mask = src_core_mask;
141 return _core_id_iter.idx;
147 const em_core_mask_t *src_core_mask = _core_id_iter.src_core_mask;
150 if (unlikely(_core_id_iter.idx < 0))
153 odp_rwlock_read_lock(&core_map->
rwlock);
155 odp_rwlock_read_unlock(&core_map->
rwlock);
158 if (unlikely(_core_id_iter.idx < 0)) {
159 _core_id_iter.idx = -1;
163 return _core_id_iter.idx;
170 uint32_t current_core_count;
171 odp_atomic_u32_t *src_core_count;
174 if (unlikely(!core_mask ||
191 src_core_mask = &core_map->rwlocked.
logic_mask;
194 odp_rwlock_read_lock(&core_map->
rwlock);
195 current_core_count = odp_atomic_load_u32(src_core_count);
197 odp_rwlock_read_unlock(&core_map->
rwlock);
199 return current_core_count;
ENV_LOCAL em_locm_t em_locm
int em_core_mask_first(const em_core_mask_t *mask)
void em_core_mask_copy(em_core_mask_t *dst, const em_core_mask_t *src)
int em_core_mask_next(const em_core_mask_t *mask, int idx)
void em_core_mask_zero(em_core_mask_t *mask)
int em_core_id_next(void)
uint32_t em_core_ids_available(em_core_type_t core_type, em_core_mask_t *core_mask)
int em_core_id_first(em_core_type_t core_type, uint32_t *num)
em_core_type_t em_core_type(void)
uint32_t em_core_count(void)
uint32_t em_core_count_max(void)
uint32_t em_core_type_count(em_core_type_t core_type)
odp_atomic_u32_t external_thread_count
odp_atomic_u32_t current_core_count
odp_atomic_u32_t worker_core_count
em_core_mask_t logic_mask
odp_atomic_u32_t control_core_count
em_core_mask_t worker_mask
em_core_mask_t control_mask
em_conf_local_t conf_local