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

Function rte_mempool_populate_anon

dpdk/lib/mempool/rte_mempool.c:661–712  ·  view source on GitHub ↗

populate the mempool with an anonymous mapping */

Source from the content-addressed store, hash-verified

659
660/* populate the mempool with an anonymous mapping */
661int
662rte_mempool_populate_anon(struct rte_mempool *mp)
663{
664 ssize_t size;
665 int ret;
666 char *addr;
667
668 /* mempool is already populated, error */
669 if ((!STAILQ_EMPTY(&mp->mem_list)) || mp->nb_mem_chunks != 0) {
670 rte_errno = EINVAL;
671 return 0;
672 }
673
674 ret = mempool_ops_alloc_once(mp);
675 if (ret < 0) {
676 rte_errno = -ret;
677 return 0;
678 }
679
680 size = get_anon_size(mp);
681 if (size < 0) {
682 rte_errno = -size;
683 return 0;
684 }
685
686 /* get chunk of virtually continuous memory */
687 addr = rte_mem_map(NULL, size, RTE_PROT_READ | RTE_PROT_WRITE,
688 RTE_MAP_SHARED | RTE_MAP_ANONYMOUS, -1, 0);
689 if (addr == NULL)
690 return 0;
691 /* can't use MMAP_LOCKED, it does not exist on BSD */
692 if (rte_mem_lock(addr, size) < 0) {
693 rte_mem_unmap(addr, size);
694 return 0;
695 }
696
697 ret = rte_mempool_populate_virt(mp, addr, size, rte_mem_page_size(),
698 rte_mempool_memchunk_anon_free, addr);
699 if (ret == 0) /* should not happen */
700 ret = -ENOBUFS;
701 if (ret < 0) {
702 rte_errno = -ret;
703 goto fail;
704 }
705
706 rte_mempool_trace_populate_anon(mp);
707 return mp->populated_size;
708
709 fail:
710 rte_mempool_free_memchunks(mp);
711 return 0;
712}
713
714/* free a mempool */
715void

Callers 2

test_mempoolFunction · 0.85
mbuf_pool_createFunction · 0.85

Calls 8

mempool_ops_alloc_onceFunction · 0.85
get_anon_sizeFunction · 0.85
rte_mem_mapFunction · 0.50
rte_mem_lockFunction · 0.50
rte_mem_unmapFunction · 0.50
rte_mem_page_sizeFunction · 0.50

Tested by 2

test_mempoolFunction · 0.68
mbuf_pool_createFunction · 0.68