/* Get resource from pool. * Return reference count on success, otherwise return error.
*/ int sparx5_pool_get(struct sparx5_pool_entry *pool, int size, u32 *id)
{ struct sparx5_pool_entry *e_itr; int i;
for (i = 0, e_itr = pool; i < size; i++, e_itr++) { if (e_itr->ref_cnt == 0) {
*id = sparx5_pool_idx_to_id(i); return ++e_itr->ref_cnt;
}
}
return -ENOSPC;
}
/* Get resource from pool that matches index. * Return reference count on success, otherwise return error.
*/ int sparx5_pool_get_with_idx(struct sparx5_pool_entry *pool, int size, u32 idx,
u32 *id)
{ struct sparx5_pool_entry *e_itr; int i, ret = -ENOSPC;
for (i = 0, e_itr = pool; i < size; i++, e_itr++) { /* Pool index of first free entry */ if (e_itr->ref_cnt == 0 && ret == -ENOSPC)
ret = i; /* Tc index already in use ? */ if (e_itr->idx == idx && e_itr->ref_cnt > 0) {
ret = i; break;
}
}
/* Did we find a free entry? */ if (ret >= 0) {
*id = sparx5_pool_idx_to_id(ret);
e_itr = (pool + ret);
e_itr->idx = idx; return ++e_itr->ref_cnt;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.