X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_eal%2Ffreebsd%2Feal%2Feal.c;h=c7e12642058ccad08779e6c47b4c986090001492;hb=8f29a60764515b18257180cd2276bcbb949ec0f7;hp=f86e9aa3182b795d59340004ddfe62a7c8bd9397;hpb=c345c7d1acf43b4d30e1ecdd5a8cd3402234a6aa;p=dpdk.git diff --git a/lib/librte_eal/freebsd/eal/eal.c b/lib/librte_eal/freebsd/eal/eal.c index f86e9aa318..c7e1264205 100644 --- a/lib/librte_eal/freebsd/eal/eal.c +++ b/lib/librte_eal/freebsd/eal/eal.c @@ -226,6 +226,14 @@ rte_eal_config_create(void) if (internal_config.no_shconf) return 0; + /* map the config before base address so that we don't waste a page */ + if (internal_config.base_virtaddr != 0) + rte_mem_cfg_addr = (void *) + RTE_ALIGN_FLOOR(internal_config.base_virtaddr - + sizeof(struct rte_mem_config), sysconf(_SC_PAGE_SIZE)); + else + rte_mem_cfg_addr = NULL; + if (mem_cfg_fd < 0){ mem_cfg_fd = open(pathname, O_RDWR | O_CREAT, 0600); if (mem_cfg_fd < 0) { @@ -253,8 +261,9 @@ rte_eal_config_create(void) return -1; } - rte_mem_cfg_addr = mmap(NULL, sizeof(*rte_config.mem_config), - PROT_READ | PROT_WRITE, MAP_SHARED, mem_cfg_fd, 0); + rte_mem_cfg_addr = mmap(rte_mem_cfg_addr, + sizeof(*rte_config.mem_config), PROT_READ | PROT_WRITE, + MAP_SHARED, mem_cfg_fd, 0); if (rte_mem_cfg_addr == MAP_FAILED){ RTE_LOG(ERR, EAL, "Cannot mmap memory for rte_config\n"); @@ -332,15 +341,17 @@ rte_eal_config_reattach(void) close(mem_cfg_fd); mem_cfg_fd = -1; - if (mem_config == MAP_FAILED) { + if (mem_config == MAP_FAILED || mem_config != rte_mem_cfg_addr) { + if (mem_config != MAP_FAILED) { + /* errno is stale, don't use */ + RTE_LOG(ERR, EAL, "Cannot mmap memory for rte_config at [%p], got [%p]" + " - please use '--base-virtaddr' option\n", + rte_mem_cfg_addr, mem_config); + munmap(mem_config, sizeof(struct rte_mem_config)); + return -1; + } RTE_LOG(ERR, EAL, "Cannot mmap memory for rte_config! error %i (%s)\n", - errno, strerror(errno)); - return -1; - } else if (mem_config != rte_mem_cfg_addr) { - /* errno is stale, don't use */ - RTE_LOG(ERR, EAL, "Cannot mmap memory for rte_config at [%p], got [%p]\n", - rte_mem_cfg_addr, mem_config); - munmap(mem_config, sizeof(struct rte_mem_config)); + errno, strerror(errno)); return -1; }