From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3996DA0353; Mon, 4 Nov 2019 07:32:44 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 016DB5B3E; Mon, 4 Nov 2019 07:32:44 +0100 (CET) Received: from huawei.com (szxga01-in.huawei.com [45.249.212.187]) by dpdk.org (Postfix) with ESMTP id 8159858C4 for ; Mon, 4 Nov 2019 07:32:42 +0100 (CET) Received: from DGGEMM401-HUB.china.huawei.com (unknown [172.30.72.54]) by Forcepoint Email with ESMTP id A659DD63E88DE03DBB8D for ; Mon, 4 Nov 2019 14:32:41 +0800 (CST) Received: from DGGEMM533-MBX.china.huawei.com ([169.254.5.114]) by DGGEMM401-HUB.china.huawei.com ([10.3.20.209]) with mapi id 14.03.0439.000; Mon, 4 Nov 2019 14:32:32 +0800 From: "Wangyu (Turing Solution Development Dep)" To: "dev@dpdk.org" CC: "ferruh.yigit@intel.com" , Linuxarm , "humin (Q)" , "Liyuan (Larry)" , dengxiaofeng Thread-Topic: [PATCH] lib/eal: resolve address conflicts Thread-Index: AQHVkVG6zpN/AWusK0anBjsF9/Npx6d6kHMQ Date: Mon, 4 Nov 2019 06:32:31 +0000 Message-ID: <78A93308629D474AA53B84C5879E84D24B0FF9AB@DGGEMM533-MBX.china.huawei.com> References: <1572680282-89785-1-git-send-email-dengxiaofeng@huawei.com> In-Reply-To: <1572680282-89785-1-git-send-email-dengxiaofeng@huawei.com> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.57.112.122] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-CFilter-Loop: Reflected Subject: [dpdk-dev] [PATCH] lib/eal: resolve address conflicts X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Resolve address conflicts on 64K pagesize without base_virtaddr, which caus= e new address conflicts in eal_get_virtual_area(). Signed-off-by: Beard-627 Acked-by: Eric wang Acked-by: Wei Hu Acked-by: Min Hu --- lib/librte_eal/linux/eal/eal.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/librte_eal/linux/eal/eal.c b/lib/librte_eal/linux/eal/eal.= c index 946222c..c15d406 100644 --- a/lib/librte_eal/linux/eal/eal.c +++ b/lib/librte_eal/linux/eal/eal.c @@ -360,6 +360,28 @@ enum rte_iova_mode return -1; } =20 + if ((getpagesize() =3D=3D RTE_PGSIZE_64K) && + (internal_config.base_virtaddr =3D=3D 0)) { + + munmap(rte_mem_cfg_addr, sizeof(*rte_config.mem_config)); + rte_mem_cfg_addr =3D (void *)RTE_PTR_ALIGN_CEIL( + (uintptr_t)rte_mem_cfg_addr, (size_t)RTE_PGSIZE_16M); + rte_mem_cfg_addr =3D (void *)RTE_ALIGN_FLOOR( + (uintptr_t)rte_mem_cfg_addr - + sizeof(*rte_config.mem_config), sysconf(_SC_PAGE_SIZE)); + + rte_mem_cfg_addr =3D 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 =3D=3D MAP_FAILED) { + close(mem_cfg_fd); + mem_cfg_fd =3D -1; + RTE_LOG(ERR, EAL, "Cannot mmap memory for rte_config\n"); + return -1; + } + } + memcpy(rte_mem_cfg_addr, &early_mem_config, sizeof(early_mem_config)); rte_config.mem_config =3D rte_mem_cfg_addr; =20 -- 1.8.3.1