DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Li, WenjieX A" <wenjiex.a.li@intel.com>
To: Alejandro Lucero <alejandro.lucero@netronome.com>,
	"dev@dpdk.org" <dev@dpdk.org>
Cc: "Yigit, Ferruh" <ferruh.yigit@intel.com>,
	"Lin, Xueqin" <xueqin.lin@intel.com>,
	"Burakov, Anatoly" <anatoly.burakov@intel.com>,
	"Li, WenjieX A" <wenjiex.a.li@intel.com>
Subject: Re: [dpdk-dev] [PATCH v2 5/7] mem: modify error message for DMA mask	check
Date: Mon, 5 Nov 2018 10:01:02 +0000	[thread overview]
Message-ID: <8688172CD5C0B74590FAE19D9579F94B535FDD90@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <20181101195330.19464-6-alejandro.lucero@netronome.com>

1. With GCC32, testpmd could not startup without '--iova-mode pa'.
./i686-native-linuxapp-gcc/app/testpmd -c f -n 4 -- -i
The output is:
EAL: Detected 16 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Some devices want iova as va but pa will be used because.. EAL: few device bound to UIO
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: wrong dma mask size 48 (Max: 31)
EAL: alloc_pages_on_heap(): couldn't allocate memory due to IOVA exceeding limits of current DMA mask
error allocating rte services array
EAL: FATAL: rte_service_init() failed
EAL: rte_service_init() failed
PANIC in main():
Cannot init EAL
5: [./i686-native-linuxapp-gcc/app/testpmd(+0x95fda) [0x56606fda]]
4: [/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf6) [0xf74d1276]]
3: [./i686-native-linuxapp-gcc/app/testpmd(main+0xf21) [0x565fcee1]]
2: [./i686-native-linuxapp-gcc/app/testpmd(__rte_panic+0x3d) [0x565edc68]]
1: [./i686-native-linuxapp-gcc/app/testpmd(rte_dump_stack+0x33) [0x5675f333]]
Aborted

2. With '--iova-mode pa', testpmd could startup.
3. With GCC64, there is no such issue.
Thanks!


-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Alejandro Lucero
Sent: Friday, November 2, 2018 3:53 AM
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH v2 5/7] mem: modify error message for DMA mask check

If DMA mask checks shows mapped memory out of the supported range specified by the DMA mask, nothing can be done but return an error an report the error. This can imply the app not being executed at all or precluding dynamic memory allocation once the app is running.
In any case, we can advice the user to force IOVA as PA if currently IOVA being VA and user being root.

Signed-off-by: Alejandro Lucero <alejandro.lucero@netronome.com>
Tested-by: Li, WenjieX A <wenjiex.a.li@intel.com>
---
 lib/librte_eal/common/malloc_heap.c | 41 +++++++++++++++++++++++++----
 1 file changed, 36 insertions(+), 5 deletions(-)

diff --git a/lib/librte_eal/common/malloc_heap.c b/lib/librte_eal/common/malloc_heap.c
index 4997c5ef5..c2c112aa6 100644
--- a/lib/librte_eal/common/malloc_heap.c
+++ b/lib/librte_eal/common/malloc_heap.c
@@ -321,13 +321,44 @@ alloc_pages_on_heap(struct malloc_heap *heap, uint64_t pg_sz, size_t elt_size,
 		goto fail;
 	}
 
-	if (mcfg->dma_maskbits) {
-		if (rte_mem_check_dma_mask(mcfg->dma_maskbits)) {
+	/*
+	 * Once we have all the memseg lists configured, if there is a dma mask
+	 * set, check iova addresses are not out of range. Otherwise the device
+	 * setting the dma mask could have problems with the mapped memory.
+	 *
+	 * There are two situations when this can happen:
+	 *	1) memory initialization
+	 *	2) dynamic memory allocation
+	 *
+	 * For 1), an error when checking dma mask implies app can not be
+	 * executed. For 2) implies the new memory can not be added.
+	 */
+	if (mcfg->dma_maskbits &&
+	    rte_mem_check_dma_mask(mcfg->dma_maskbits)) {
+		/*
+		 * Currently this can only happen if IOMMU is enabled
+		 * and the address width supported by the IOMMU hw is
+		 * not enough for using the memory mapped IOVAs.
+		 *
+		 * If IOVA is VA, advice to try with '--iova-mode pa'
+		 * which could solve some situations when IOVA VA is not
+		 * really needed.
+		 */
+		RTE_LOG(ERR, EAL,
+			"%s(): couldn't allocate memory due to IOVA exceeding limits of current DMA mask\n",
+			__func__);
+
+		/*
+		 * If IOVA is VA and it is possible to run with IOVA PA,
+		 * because user is root, give and advice for solving the
+		 * problem.
+		 */
+		if ((rte_eal_iova_mode() == RTE_IOVA_VA) &&
+		     rte_eal_using_phys_addrs())
 			RTE_LOG(ERR, EAL,
-				"%s(): couldn't allocate memory due to DMA mask\n",
+				"%s(): Please try initializing EAL with --iova-mode=pa 
+parameter\n",
 				__func__);
-			goto fail;
-		}
+		goto fail;
 	}
 
 	/* add newly minted memsegs to malloc heap */
--
2.17.1

  reply	other threads:[~2018-11-05 10:01 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-01 19:53 [dpdk-dev] [PATCH v2 0/7] fix " Alejandro Lucero
2018-11-01 19:53 ` [dpdk-dev] [PATCH v2 1/7] mem: fix call to " Alejandro Lucero
2018-11-01 19:53 ` [dpdk-dev] [PATCH v2 2/7] mem: use proper prefix Alejandro Lucero
2018-11-01 19:53 ` [dpdk-dev] [PATCH v2 3/7] mem: add function for setting DMA mask Alejandro Lucero
2018-11-01 19:53 ` [dpdk-dev] [PATCH v2 4/7] bus/pci: avoid call to DMA mask check Alejandro Lucero
2018-11-01 19:53 ` [dpdk-dev] [PATCH v2 5/7] mem: modify error message for " Alejandro Lucero
2018-11-05 10:01   ` Li, WenjieX A [this message]
2018-11-05 10:13     ` Alejandro Lucero
2018-11-05 15:12       ` Burakov, Anatoly
2018-11-05 15:33         ` Alejandro Lucero
2018-11-05 16:34           ` Burakov, Anatoly
2018-11-06  9:32             ` Alejandro Lucero
2018-11-06 10:31               ` Burakov, Anatoly
2018-11-06 10:37                 ` Alejandro Lucero
2018-11-06 10:48                   ` Burakov, Anatoly
2018-11-06 12:55                     ` Alejandro Lucero
2018-11-01 19:53 ` [dpdk-dev] [PATCH v2 6/7] eal/mem: use DMA mask check for legacy memory Alejandro Lucero
2018-11-01 19:53 ` [dpdk-dev] [PATCH v2 7/7] mem: add thread unsafe version for checking DMA mask Alejandro Lucero
2018-11-02 18:38 ` [dpdk-dev] [PATCH v2 0/7] fix DMA mask check Ferruh Yigit
2018-11-05  0:03   ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8688172CD5C0B74590FAE19D9579F94B535FDD90@SHSMSX103.ccr.corp.intel.com \
    --to=wenjiex.a.li@intel.com \
    --cc=alejandro.lucero@netronome.com \
    --cc=anatoly.burakov@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=xueqin.lin@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).