From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from netronome.com (host-79-78-33-110.static.as9105.net [79.78.33.110]) by dpdk.org (Postfix) with ESMTP id D60ACF94 for ; Wed, 31 Oct 2018 18:29:31 +0100 (CET) Received: from netronome.com (localhost [127.0.0.1]) by netronome.com (8.15.2/8.15.2/Debian-10) with ESMTP id w9VHTVWg011945 for ; Wed, 31 Oct 2018 17:29:31 GMT Received: (from root@localhost) by netronome.com (8.15.2/8.15.2/Submit) id w9VHTVgu011944 for dev@dpdk.org; Wed, 31 Oct 2018 17:29:31 GMT From: Alejandro Lucero To: dev@dpdk.org Date: Wed, 31 Oct 2018 17:29:24 +0000 Message-Id: <20181031172931.11894-1-alejandro.lucero@netronome.com> X-Mailer: git-send-email 2.17.1 Subject: [dpdk-dev] [PATCH 0/7] fix DMA mask check 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: , X-List-Received-Date: Wed, 31 Oct 2018 17:29:32 -0000 A patchset sent introducing DMA mask checks has several critical issues precluding apps to execute. The patchset was reviewed and finally accepted after three versions. Obviously it did not go through the proper testing what can be explained, at least from my side, due to the big changes to the memory initialization code these last months. It turns out the patchset did work with legacy memory and I'm afraid that was mainly my testing. This patchset should solve the main problems reported: - deadlock duriing initialization - segmentation fault with secondary processes For solving the deadlock, a new API is introduced: rte_mem_check_dma_mask_safe/unsafe making the previous rte_mem_check_dma_mask the one those new functions end calling. A boolean param is used for calling rte_memseg_walk thread safe or thread unsafe. This second option is needed for avoiding the deadlock. For the secondary processes problem, the call to check the dma mask is avoided from code being executed before the memory initialization. Instead, a new API function, rte_mem_set_dma_mask is introduced, which will be used in those cases. The dma mask check is done once the memory initialization is completed. This last change implies the IOVA mode can not be set depending on IOMMU hardware limitations, and it is assumed IOVA VA is possible. If the dma mask check reports a problem after memory initilization, the error message includes now advice for trying with --iova-mode option set to pa. The patchet also includes the dma mask check for legacy memory and the no hugepage option. Finally, all the DMA mask API has been updated for using the same prefix than other EAL memory code. An initial version of this patchset has been tested by Intel DPDK Validation team and it seems it solves all the problems reported. This final patchset has the same functionality with minor changes. I have successfully tested the patchset with my limited testbench. Alejandro Lucero (7): mem: fix call to DMA mask check mem: use proper prefix mem: add function for setting DMA mask bus/pci: avoid call to DMA mask check mem: modify error message for DMA mask check mem: add safe and unsafe versions for checking DMA mask eal/mem: use DMA mask check for legacy memory doc/guides/rel_notes/release_18_11.rst | 2 +- drivers/bus/pci/linux/pci.c | 11 ++++++- drivers/net/nfp/nfp_net.c | 2 +- lib/librte_eal/common/eal_common_memory.c | 36 +++++++++++++++++--- lib/librte_eal/common/include/rte_memory.h | 37 +++++++++++++++++++-- lib/librte_eal/common/malloc_heap.c | 38 ++++++++++++++++++---- lib/librte_eal/linuxapp/eal/eal_memory.c | 17 ++++++++++ lib/librte_eal/rte_eal_version.map | 4 ++- 8 files changed, 131 insertions(+), 16 deletions(-) -- 2.17.1