From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Zhu Subject: [PATCH 1/2] eal/ppc: fix mmap for memory initialization Date: Thu, 6 Apr 2017 15:36:09 +0530 Message-ID: <1491473170-25160-2-git-send-email-chaozhu@linux.vnet.ibm.com> References: <1491473170-25160-1-git-send-email-chaozhu@linux.vnet.ibm.com> Cc: Gowrishankar , sergio.gonzalez.monroy@intel.com, david.marchand@6wind.com To: dev@dpdk.org Return-path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by dpdk.org (Postfix) with ESMTP id 6602D1DB1 for ; Thu, 6 Apr 2017 12:06:16 +0200 (CEST) Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.20/8.16.0.20) with SMTP id v369whdg097845 for ; Thu, 6 Apr 2017 06:06:15 -0400 Received: from e28smtp06.in.ibm.com (e28smtp06.in.ibm.com [125.16.236.6]) by mx0a-001b2d01.pphosted.com with ESMTP id 29nfmgnc7r-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Thu, 06 Apr 2017 06:06:15 -0400 Received: from localhost by e28smtp06.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 6 Apr 2017 15:36:12 +0530 Received: from d28av07.in.ibm.com (d28av07.in.ibm.com [9.184.220.146]) by d28relay01.in.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v36A6Bue10158196 for ; Thu, 6 Apr 2017 15:36:11 +0530 Received: from d28av07.in.ibm.com (localhost [127.0.0.1]) by d28av07.in.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id v36A6AqL022054 for ; Thu, 6 Apr 2017 15:36:10 +0530 In-Reply-To: <1491473170-25160-1-git-send-email-chaozhu@linux.vnet.ibm.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On IBM POWER platform, when mapping /dev/zero file to hugepage memory space, mmap will not respect the requested address hint. This will cause the memory initilization for the second process fails. This patch adds the required mmap flags to make it work. Beside this, users need to set the nr_overcommit_hugepages to expand the VA range. When doing the initilization, users need to set both nr_hugepages and nr_overcommit_hugepages to the same value, like 64, 128, etc. Signed-off-by: Chao Zhu --- lib/librte_eal/linuxapp/eal/eal_memory.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c index a956bb2..e06186b 100644 --- a/lib/librte_eal/linuxapp/eal/eal_memory.c +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c @@ -313,7 +313,11 @@ int rte_xen_dom0_supported(void) } do { addr = mmap(addr, +#ifndef RTE_ARCH_PPC_64 (*size) + hugepage_sz, PROT_READ, MAP_PRIVATE, fd, 0); +#else + (*size) + hugepage_sz, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, fd, 0); +#endif if (addr == MAP_FAILED) *size -= hugepage_sz; } while (addr == MAP_FAILED && *size > 0); @@ -1330,7 +1334,11 @@ static int huge_wrap_sigsetjmp(void) * use mmap to get identical addresses as the primary process. */ base_addr = mmap(mcfg->memseg[s].addr, mcfg->memseg[s].len, +#ifndef RTE_ARCH_PPC_64 PROT_READ, MAP_PRIVATE, fd_zero, 0); +#else + PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, fd_zero, 0); +#endif if (base_addr == MAP_FAILED || base_addr != mcfg->memseg[s].addr) { max_seg = s; -- 1.8.3.1