/* * Wait for all schedulers to stop */ static inline void _lthread_schedulers_sync_stop(void) { rte_atomic16_dec(&active_schedulers); rte_atomic16_dec(&num_schedulers); /* wait for schedulers * Note we use sched_yield() rather than pthread_yield() to allow * for the possibility of a pthread wrapper on lthread_yield(), * something that is not possible unless the scheduler is running. */ while (rte_atomic16_read(&active_schedulers) > 0) sched_yield(); }
void dpaa2_free_dpbp_dev(struct dpaa2_dpbp_dev *dpbp) { struct dpaa2_dpbp_dev *dpbp_dev = NULL; /* Match DPBP handle and mark it free */ TAILQ_FOREACH(dpbp_dev, dpbp_dev_list, next) { if (dpbp_dev == dpbp) { rte_atomic16_dec(&dpbp_dev->in_use); return; } } }