From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id 33EE05B32 for ; Mon, 5 Nov 2018 11:01:06 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Nov 2018 02:01:05 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,467,1534834800"; d="scan'208";a="83420178" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga007.fm.intel.com with ESMTP; 05 Nov 2018 02:01:05 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 5 Nov 2018 02:01:05 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.161]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.102]) with mapi id 14.03.0415.000; Mon, 5 Nov 2018 18:01:03 +0800 From: "Li, WenjieX A" To: Alejandro Lucero , "dev@dpdk.org" CC: "Yigit, Ferruh" , "Lin, Xueqin" , "Burakov, Anatoly" , "Li, WenjieX A" Thread-Topic: [dpdk-dev] [PATCH v2 5/7] mem: modify error message for DMA mask check Thread-Index: AQHUchyz76PPRnMiF0u929qbjPmusKVA9LcA Date: Mon, 5 Nov 2018 10:01:02 +0000 Message-ID: <8688172CD5C0B74590FAE19D9579F94B535FDD90@SHSMSX103.ccr.corp.intel.com> References: <20181101195330.19464-1-alejandro.lucero@netronome.com> <20181101195330.19464-6-alejandro.lucero@netronome.com> In-Reply-To: <20181101195330.19464-6-alejandro.lucero@netronome.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2 5/7] mem: modify error message for 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: Mon, 05 Nov 2018 10:01:07 -0000 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 de= vice 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 c= heck 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 err= or. 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 b= eing VA and user being root. Signed-off-by: Alejandro Lucero Tested-by: Li, WenjieX A --- 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/ma= lloc_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; } =20 - 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() =3D=3D 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=3Dpa=20 +parameter\n", __func__); - goto fail; - } + goto fail; } =20 /* add newly minted memsegs to malloc heap */ -- 2.17.1