MCPcopy Create free account
hub / github.com/F-Stack/f-stack / bucket_enqueue_single

Function bucket_enqueue_single

dpdk/drivers/mempool/bucket/rte_mempool_bucket.c:101–137  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

99}
100
101static int
102bucket_enqueue_single(struct bucket_data *bd, void *obj)
103{
104 int rc = 0;
105 uintptr_t addr = (uintptr_t)obj;
106 struct bucket_header *hdr;
107 unsigned int lcore_id = rte_lcore_id();
108
109 addr &= bd->bucket_page_mask;
110 hdr = (struct bucket_header *)addr;
111
112 if (likely(hdr->lcore_id == lcore_id)) {
113 if (hdr->fill_cnt < bd->obj_per_bucket - 1) {
114 hdr->fill_cnt++;
115 } else {
116 hdr->fill_cnt = 0;
117 /* Stack is big enough to put all buckets */
118 bucket_stack_push(bd->buckets[lcore_id], hdr);
119 }
120 } else if (hdr->lcore_id != LCORE_ID_ANY) {
121 struct rte_ring *adopt_ring =
122 bd->adoption_buffer_rings[hdr->lcore_id];
123
124 rc = rte_ring_enqueue(adopt_ring, obj);
125 /* Ring is big enough to put all objects */
126 RTE_ASSERT(rc == 0);
127 } else if (hdr->fill_cnt < bd->obj_per_bucket - 1) {
128 hdr->fill_cnt++;
129 } else {
130 hdr->fill_cnt = 0;
131 rc = rte_ring_enqueue(bd->shared_bucket_ring, hdr);
132 /* Ring is big enough to put all buckets */
133 RTE_ASSERT(rc == 0);
134 }
135
136 return rc;
137}
138
139static int
140bucket_enqueue(struct rte_mempool *mp, void * const *obj_table,

Callers 2

bucket_enqueueFunction · 0.85
bucket_adopt_orphansFunction · 0.85

Calls 3

rte_lcore_idFunction · 0.85
bucket_stack_pushFunction · 0.85
rte_ring_enqueueFunction · 0.85

Tested by

no test coverage detected