From patchwork Sun Apr 1 12:26:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anatoly Burakov X-Patchwork-Id: 36833 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D46335F4F; Sun, 1 Apr 2018 14:26:38 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 061C21D7; Sun, 1 Apr 2018 14:26:35 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Apr 2018 05:26:35 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,391,1517904000"; d="scan'208";a="213045248" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga005.jf.intel.com with ESMTP; 01 Apr 2018 05:26:33 -0700 Received: from sivswdev01.ir.intel.com (sivswdev01.ir.intel.com [10.237.217.45]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id w31CQWOf029393; Sun, 1 Apr 2018 13:26:32 +0100 Received: from sivswdev01.ir.intel.com (localhost [127.0.0.1]) by sivswdev01.ir.intel.com with ESMTP id w31CQW6u002023; Sun, 1 Apr 2018 13:26:32 +0100 Received: (from aburakov@localhost) by sivswdev01.ir.intel.com with LOCAL id w31CQWqt002019; Sun, 1 Apr 2018 13:26:32 +0100 From: Anatoly Burakov To: dev@dpdk.org Cc: thomas@monjalon.net, santosh.shukla@caviumnetworks.com, stable@dpdk.org Date: Sun, 1 Apr 2018 13:26:30 +0100 Message-Id: <4868d2ccaffa1ae0d793fe10623d3e303a514ccf.1522585461.git.anatoly.burakov@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <37c2e329be49799fae8328e4dd93e5c95da3d326.1522585461.git.anatoly.burakov@intel.com> References: <37c2e329be49799fae8328e4dd93e5c95da3d326.1522585461.git.anatoly.burakov@intel.com> In-Reply-To: <37c2e329be49799fae8328e4dd93e5c95da3d326.1522585461.git.anatoly.burakov@intel.com> References: <37c2e329be49799fae8328e4dd93e5c95da3d326.1522585461.git.anatoly.burakov@intel.com> Subject: [dpdk-dev] [PATCH 2/4] eal: do not use physical addresses in IOVA as VA mode 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" We already use VA addresses for IOVA purposes everywhere if we're in RTE_IOVA_VA mode: 1) rte_malloc_virt2phy()/rte_malloc_virt2iova() always return VA addresses 2) Because of 1), memzone's IOVA is set to VA address on reserve 3) Because of 2), mempool's IOVA addresses are set to VA addresses The only place where actual physical addresses are stored is in memsegs at init time, but we're not using them anywhere, and there is no external API to get those addresses (aside from manually iterating through memsegs), nor should anyone care about them in RTE_IOVA_VA mode. So, fix EAL initialization to allocate VA-contiguous segments at the start without regard for physical addresses (as if they weren't available), and use VA to set final IOVA addresses for all pages. Fixes: 62196f4e0941 ("mem: rename address mapping function to IOVA") Cc: thomas@monjalon.net Cc: stable@dpdk.org Signed-off-by: Anatoly Burakov Acked-by: Santosh Shukla --- lib/librte_eal/linuxapp/eal/eal_memory.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c index 38853b7..ecf375b 100644 --- a/lib/librte_eal/linuxapp/eal/eal_memory.c +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c @@ -473,6 +473,9 @@ map_all_hugepages(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi, hugepg_tbl[i].orig_va = virtaddr; } else { + /* rewrite physical addresses in IOVA as VA mode */ + if (rte_eal_iova_mode() == RTE_IOVA_VA) + hugepg_tbl[i].physaddr = (uintptr_t)virtaddr; hugepg_tbl[i].final_va = virtaddr; } @@ -1091,7 +1094,8 @@ rte_eal_hugepage_init(void) continue; } - if (phys_addrs_available) { + if (phys_addrs_available && + rte_eal_iova_mode() != RTE_IOVA_VA) { /* find physical addresses for each hugepage */ if (find_physaddrs(&tmp_hp[hp_offset], hpi) < 0) { RTE_LOG(DEBUG, EAL, "Failed to find phys addr "