+ return bplc.count;
+}
+
+static int
+bucket_init_per_lcore(unsigned int lcore_id, void *arg)
+{
+ char rg_name[RTE_RING_NAMESIZE];
+ struct bucket_data *bd = arg;
+ struct rte_mempool *mp;
+ int rg_flags;
+ int rc;
+
+ mp = bd->pool;
+ bd->buckets[lcore_id] = bucket_stack_create(mp,
+ mp->size / bd->obj_per_bucket);
+ if (bd->buckets[lcore_id] == NULL)
+ goto error;
+
+ rc = snprintf(rg_name, sizeof(rg_name), RTE_MEMPOOL_MZ_FORMAT ".a%u",
+ mp->name, lcore_id);
+ if (rc < 0 || rc >= (int)sizeof(rg_name))
+ goto error;
+
+ rg_flags = RING_F_SC_DEQ;
+ if (mp->flags & RTE_MEMPOOL_F_SP_PUT)
+ rg_flags |= RING_F_SP_ENQ;
+ bd->adoption_buffer_rings[lcore_id] = rte_ring_create(rg_name,
+ rte_align32pow2(mp->size + 1), mp->socket_id, rg_flags);
+ if (bd->adoption_buffer_rings[lcore_id] == NULL)
+ goto error;
+
+ return 0;
+error:
+ rte_free(bd->buckets[lcore_id]);
+ bd->buckets[lcore_id] = NULL;
+ return -1;
+}
+
+static void
+bucket_uninit_per_lcore(unsigned int lcore_id, void *arg)
+{
+ struct bucket_data *bd = arg;
+
+ rte_ring_free(bd->adoption_buffer_rings[lcore_id]);
+ bd->adoption_buffer_rings[lcore_id] = NULL;
+ rte_free(bd->buckets[lcore_id]);
+ bd->buckets[lcore_id] = NULL;