[dpdk-dev] [PATCH v2 11/16] Make --no-huge use mmap instead of malloc

Xu, HuilongX huilongx.xu at intel.com
Tue May 27 05:28:01 CEST 2014


This makes it possible to run DPDK without hugepage memory when VFIO

is used, as VFIO uses virtual addresses to set up DMA mappings.



Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com<http://dpdk.org/ml/listinfo/dev>>

Test-by: HuilongX Xu huilongx.xu at intel.com<mailto:huilongx.xu at intel.com>



Compile pass

     >>Compile OS: FC20 x86_64

     >>Kernel version: 3.13.6-200

     >>GCC version: 4.8.2

     >>Server: Crownpass

---

 lib/librte_eal/linuxapp/eal/eal_memory.c |    8 +++++++-

 1 files changed, 7 insertions(+), 1 deletions(-)



diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c

index 5a10a80..3fc0d28 100644

--- a/lib/librte_eal/linuxapp/eal/eal_memory.c

+++ b/lib/librte_eal/linuxapp/eal/eal_memory.c

@@ -1031,7 +1031,13 @@ rte_eal_hugepage_init(void)



        /* hugetlbfs can be disabled */

        if (internal_config.no_hugetlbfs) {

-              addr = malloc(internal_config.memory);

+              addr = mmap(NULL, internal_config.memory, PROT_READ | PROT_WRITE,

+                              MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);

+              if (addr == MAP_FAILED) {

+                      RTE_LOG(ERR, EAL, "%s: mmap() failed: %s\n", __func__,

+                                     strerror(errno));

+                      return -1;

+              }

               mcfg->memseg[0].phys_addr = (phys_addr_t)(uintptr_t)addr;

               mcfg->memseg[0].addr = addr;

               mcfg->memseg[0].len = internal_config.memory;

--

1.7.0.7



More information about the dev mailing list