DPDK17.02 ring 管理2 – common_ring_alloc 与 common_ring_free
1、common_ring_alloc 函数
common_ring_alloc 函数为指定 mempool 分配一个 ring。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | static int common_ring_alloc(struct rte_mempool *mp) { int rg_flags = 0, ret; char rg_name[RTE_RING_NAMESIZE]; struct rte_ring *r; /* MP_<mp_name> */ ret = snprintf(rg_name, sizeof(rg_name), RTE_MEMPOOL_MZ_FORMAT, mp->name); if (ret < 0 || ret >= (int)sizeof(rg_name)) { rte_errno = ENAMETOOLONG; return -rte_errno; } /* ring 标记,是否是单生产者或单消费者 */ if (mp->flags & MEMPOOL_F_SP_PUT) rg_flags |= RING_F_SP_ENQ; if (mp->flags & MEMPOOL_F_SC_GET) rg_flags |= RING_F_SC_DEQ; /* 分配用来保存对象的 ring。 * 如果当前是次进程或存在其他问题,ring函数会返回对应的错误。 * 因此这里没有对其进行检查 */ r = rte_ring_create(rg_name, rte_align32pow2(mp->size + 1), mp->socket_id, rg_flags); if (r == NULL) return -rte_errno; mp->pool_data = r; /* mempool 与 ring 关联 */ return 0; } |
2、common_ring_free() 函数
该函数直接释放指定mp对应的ring结构
1 2 3 4 | static void common_ring_free(struct rte_mempool *mp) { rte_ring_free(mp->pool_data); } |
————————————————————
原创文章,转载请注明: 转载自孙希栋的博客
本文链接地址: 《DPDK17.02 ring 管理2 – common_ring_alloc 与 common_ring_free》