ethdev: document error codes of reset
[dpdk.git] / lib / librte_eal / linuxapp / eal / eal_memory.c
index 647d89c..187d338 100644 (file)
@@ -41,7 +41,6 @@
 #include <stdint.h>
 #include <inttypes.h>
 #include <string.h>
-#include <stdarg.h>
 #include <sys/mman.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -49,7 +48,6 @@
 #include <sys/file.h>
 #include <unistd.h>
 #include <limits.h>
-#include <errno.h>
 #include <sys/ioctl.h>
 #include <sys/time.h>
 #include <signal.h>
 
 #define PFN_MASK_SIZE  8
 
-#ifdef RTE_LIBRTE_XEN_DOM0
-int rte_xen_dom0_supported(void)
-{
-       return internal_config.xen_dom0_support;
-}
-#endif
-
 /**
  * @file
  * Huge page mapping under linux
@@ -108,9 +99,12 @@ test_phys_addrs_available(void)
        uint64_t tmp;
        phys_addr_t physaddr;
 
-       /* For dom0, phys addresses can always be available */
-       if (rte_xen_dom0_supported())
+       if (!rte_eal_has_hugepages()) {
+               RTE_LOG(ERR, EAL,
+                       "Started without hugepages support, physical addresses not available\n");
+               phys_addrs_available = false;
                return;
+       }
 
        physaddr = rte_mem_virt2phy(&tmp);
        if (physaddr == RTE_BAD_PHYS_ADDR) {
@@ -134,28 +128,8 @@ rte_mem_virt2phy(const void *virtaddr)
        int page_size;
        off_t offset;
 
-       /* when using dom0, /proc/self/pagemap always returns 0, check in
-        * dpdk memory by browsing the memsegs */
-       if (rte_xen_dom0_supported()) {
-               struct rte_mem_config *mcfg;
-               struct rte_memseg *memseg;
-               unsigned i;
-
-               mcfg = rte_eal_get_configuration()->mem_config;
-               for (i = 0; i < RTE_MAX_MEMSEG; i++) {
-                       memseg = &mcfg->memseg[i];
-                       if (memseg->addr == NULL)
-                               break;
-                       if (virtaddr > memseg->addr &&
-                                       virtaddr < RTE_PTR_ADD(memseg->addr,
-                                               memseg->len)) {
-                               return memseg->phys_addr +
-                                       RTE_PTR_DIFF(virtaddr, memseg->addr);
-                       }
-               }
-
-               return RTE_BAD_PHYS_ADDR;
-       }
+       if (rte_eal_iova_mode() == RTE_IOVA_VA)
+               return (uintptr_t)virtaddr;
 
        /* Cannot parse /proc/self/pagemap, no need to log errors everywhere */
        if (!phys_addrs_available)
@@ -605,8 +579,8 @@ find_numasocket(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi)
 
        f = fopen("/proc/self/numa_maps", "r");
        if (f == NULL) {
-               RTE_LOG(NOTICE, EAL, "cannot open /proc/self/numa_maps,"
-                               " consider that all memory is in socket_id 0\n");
+               RTE_LOG(NOTICE, EAL, "NUMA support not available"
+                       " consider that all memory is in socket_id 0\n");
                return 0;
        }
 
@@ -711,6 +685,8 @@ create_shared_memory(const char *filename, const size_t mem_size)
        }
        retval = mmap(NULL, mem_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
        close(fd);
+       if (retval == MAP_FAILED)
+               return NULL;
        return retval;
 }
 
@@ -1054,7 +1030,10 @@ rte_eal_hugepage_init(void)
                                        strerror(errno));
                        return -1;
                }
-               mcfg->memseg[0].phys_addr = (phys_addr_t)(uintptr_t)addr;
+               if (rte_eal_iova_mode() == RTE_IOVA_VA)
+                       mcfg->memseg[0].phys_addr = (uintptr_t)addr;
+               else
+                       mcfg->memseg[0].phys_addr = RTE_BAD_PHYS_ADDR;
                mcfg->memseg[0].addr = addr;
                mcfg->memseg[0].hugepage_sz = RTE_PGSIZE_4K;
                mcfg->memseg[0].len = internal_config.memory;
@@ -1062,17 +1041,6 @@ rte_eal_hugepage_init(void)
                return 0;
        }
 
-/* check if app runs on Xen Dom0 */
-       if (internal_config.xen_dom0_support) {
-#ifdef RTE_LIBRTE_XEN_DOM0
-               /* use dom0_mm kernel driver to init memory */
-               if (rte_xen_dom0_memory_init() < 0)
-                       return -1;
-               else
-                       return 0;
-#endif
-       }
-
        /* calculate total number of hugepages available. at this point we haven't
         * yet started sorting them so they all are on socket 0 */
        for (i = 0; i < (int) internal_config.num_hugepage_sizes; i++) {
@@ -1395,17 +1363,6 @@ rte_eal_hugepage_attach(void)
 
        test_phys_addrs_available();
 
-       if (internal_config.xen_dom0_support) {
-#ifdef RTE_LIBRTE_XEN_DOM0
-               if (rte_xen_dom0_memory_attach() < 0) {
-                       RTE_LOG(ERR, EAL, "Failed to attach memory segments of primary "
-                                       "process\n");
-                       return -1;
-               }
-               return 0;
-#endif
-       }
-
        fd_zero = open("/dev/zero", O_RDONLY);
        if (fd_zero < 0) {
                RTE_LOG(ERR, EAL, "Could not open /dev/zero\n");