From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 320B9468E6;
	Fri, 13 Jun 2025 04:12:13 +0200 (CEST)
Received: from mails.dpdk.org (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id ABE5142E6A;
	Fri, 13 Jun 2025 04:11:53 +0200 (CEST)
Received: from AS8PR03CU001.outbound.protection.outlook.com
 (mail-westeuropeazon11012002.outbound.protection.outlook.com [52.101.71.2])
 by mails.dpdk.org (Postfix) with ESMTP id 9FC7342E67
 for <dev@dpdk.org>; Fri, 13 Jun 2025 04:11:51 +0200 (CEST)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=Tqih+YaZt6AAXQBUe3Ktd86OPJdb2DHjQ5R2jxD9xr68UhBWbBPkSEL4xhHARmwxGO7YjeUh2BTrm+0vN+HqCZjyFXZLel8Dun8yMhuzOUhEG9zwZPDPXl18FdMV1ejBKMVoK9TXukyshlbaot82O+sYrGczxNZsjyEXB2JChpocnmqjT194ONik4QnIaq5S7bS8bjAvPyoor/a7bttJcdZAyRcX90VZB8pfQ48yKXuJLeFkwB25sZHLrUpIxWOeg/ieCpmndgFtN7r3gDSUbsyIVLE81/0wawYsm56R15NpbXIPlovhCEwPLpYpor4AeGfdxHAIBStz3wsCMjqDcg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; 
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=xhbfsn9nCZ2Vkm2EjCnZRBDP2EBIlAElSJtgXdlnnSk=;
 b=en/u+T2Z1sU40drG5xBYE0n939HY+0L3K5aXSJTFSlrn+9AZj05Ebt06DWT208jJ34qUBcQlpcYd9Uh7XekCkHk4S64lZOO2Q+MgT+KKXtaYcpZzZEf5gLgbhT8cWrKZssKPkrejRCRJvlVUVSKcpLjhTuPgz7LYRwW+FYg2dW7/DztHX6pvZCJApfmAfBKxW5sN7nP5rixj0ChU+JsaZHpihg8VI8hG9DDAqm4GUvoOv/CYk2sHNtsu7Eu1JHLEel/qg0RJD7Qj24jA3+yzyK2gU8zcZv8EFocSVmvndASGYEC/dtLsbjnbQQtM+UZRWAp6wzZwOwfUzOfx5R552Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass
 header.d=nxp.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; 
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=xhbfsn9nCZ2Vkm2EjCnZRBDP2EBIlAElSJtgXdlnnSk=;
 b=Ae51oKKUAvVoAwXZpuqVr99rGaKLuRrjf4GhvIthyW4l6fhCp5wnffkKi0VDiBNjYqQb0zs1PONJ6uL6x/uf+waD9t6FQ5ktMJ8oAwX2lrtqfp2EbZ2ZPZA9iCiNV+tYHkUN35olf0VCWWR9eu94dD04jMWSBgPgf0Wa+W+T1BkxhFpcEpUrmamd0bhCxGUr4xigm1fKfdhRL6HhMyDL3EnONNYalzvPUC4Rq6f/lcXY72zLL/18eL2yoWPZPF0qcKVJcnteyiaJ8mbSxnPTfAW0ZgaY2ERtmWsYEASLxJZkV6hRl2sP0bCK/bJEFTH30Q5VId+UdLVOCXEdYsT3wA==
Authentication-Results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=nxp.com;
Received: from AS8PR04MB8198.eurprd04.prod.outlook.com (2603:10a6:20b:3b0::14)
 by DB8PR04MB6907.eurprd04.prod.outlook.com (2603:10a6:10:119::10)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.23; Fri, 13 Jun
 2025 02:11:50 +0000
Received: from AS8PR04MB8198.eurprd04.prod.outlook.com
 ([fe80::2e32:1a4a:7d29:195]) by AS8PR04MB8198.eurprd04.prod.outlook.com
 ([fe80::2e32:1a4a:7d29:195%4]) with mapi id 15.20.8835.018; Fri, 13 Jun 2025
 02:11:50 +0000
From: Gagandeep Singh <g.singh@nxp.com>
To: dev@dpdk.org, Hemant Agrawal <hemant.agrawal@nxp.com>,
 Sachin Saxena <sachin.saxena@nxp.com>
Cc: Jun Yang <jun.yang@nxp.com>
Subject: [PATCH v5 04/11] mempool/dpaa2: use unified VA to IOVA conversion
Date: Fri, 13 Jun 2025 07:41:18 +0530
Message-Id: <20250613021125.790614-5-g.singh@nxp.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20250613021125.790614-1-g.singh@nxp.com>
References: <20250611105149.655144-1-g.singh@nxp.com>
 <20250613021125.790614-1-g.singh@nxp.com>
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-ClientProxiedBy: SG2PR03CA0124.apcprd03.prod.outlook.com
 (2603:1096:4:91::28) To AS8PR04MB8198.eurprd04.prod.outlook.com
 (2603:10a6:20b:3b0::14)
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: AS8PR04MB8198:EE_|DB8PR04MB6907:EE_
X-MS-Office365-Filtering-Correlation-Id: a8bee7b0-441a-4101-1cc7-08ddaa1fa86c
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
 ARA:13230040|376014|52116014|366016|1800799024|38350700014; 
X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?2dggmYYuYRK06WNYneAZ6dVD9gBLRajdCEJoHDPk6VjaP5GXwotMVQyr3Ox2?=
 =?us-ascii?Q?ChFL5Kea0Gd3Nnqsq35L2KK3K0LF744qu8+Wuu1pWOVVKVJptUxsfxLq9OoC?=
 =?us-ascii?Q?U264ZRzWBVJz+a5Ok7mSXI99Y9qIBVGtYay7c9cnUjW8Xv8huvleY0PfUcI1?=
 =?us-ascii?Q?F0T/zjfBljsI1IKQoNdUBF0r5YRsHYXQvP2dXFi7XIX00duXjHl9KGMJleVq?=
 =?us-ascii?Q?7+7De1cQ2OzWf9BG/ThF7H2Ger8U6XJzloIBq6ISs0GXDuwdZUTQ3nXLBotx?=
 =?us-ascii?Q?emnjc+Y/mqzKjWlBWO6OxorFtsEAV2/fjJ11+cWsb/RPW7zTBYr9zZgi6qI8?=
 =?us-ascii?Q?VMFXcqZSa5jxAOOue1ILTL0ISpZozPLLexN218Nw/HVkDKL1ra5in0zA7TWa?=
 =?us-ascii?Q?+gWFCCe9HPCWL82RKdyaz9XkcvdHUtVPYMMI3P9aqG3g2W4zjMoep8fG4oTr?=
 =?us-ascii?Q?s5blDZXFYrfYE9Yb5yMDjWW4Kmv4odNLhZWxYVwCdrJ7mQN5JCB57qruAvQ/?=
 =?us-ascii?Q?Galchw9r0SkmL/EfUkLK2SGA3msxzE2ldLH1h3wYy3ejbRy5YydvpON+JB0R?=
 =?us-ascii?Q?vxbGoENe9O0SMnOFMuNFIpr7Bn+sbkHQ6+bddYceNNVpiCuedPXaUgy23kj5?=
 =?us-ascii?Q?u8wVgacbdhAjqrKQS/87h/AF0GT7uuLuPg12fflGH2o+PxnlOv9kZHnFpHtU?=
 =?us-ascii?Q?9wUyIXxbXri+oRcUa4mX3isCWLDPsQmc0CcyT9W1OgcNj1vjIi+a55/l1Ipl?=
 =?us-ascii?Q?4iFczuP5IJs6m7zqAOCTkGYxO+eL9Ql7pPEFuLWwH6KjUvIh1D34e76QSaMK?=
 =?us-ascii?Q?o0XzIVhO5nZnCIVxlwH4i7bf5l6lXFqVQTZa3oHmzFrq8E4MKqj8XAxPa+MJ?=
 =?us-ascii?Q?Xich0dNf+z7Hu9Rn2ddaUm41B7bQD3Xkke+tyclFfl/AYWaI/hj1U9QP6SDP?=
 =?us-ascii?Q?0vRZSFO426XPMDr7NOqc7e8lDy7rBo87lAWk3Q/IEEfP0ssy0d5qDGuSsdMn?=
 =?us-ascii?Q?LSJyqTkc7s8L1SlbJ3AB9Bh+QwWgLL0tBPyK15mcAH2EFEWTYYb1ly2Iw/xh?=
 =?us-ascii?Q?3jLhM3NzIfklQ4+bjnLASvw/M+5gqZqeyc7HLzTLZAFa/lp78lPCD69bKP00?=
 =?us-ascii?Q?Icqxn00RIkKy2YF+Q7geWcHVpkdm7wCuWc1TGWLeONKhQ7tzmqacNxPbVDXH?=
 =?us-ascii?Q?GQ5fInS9M/W7Jp87J+FKUmjzIkwIJ8qmayk72+JwbH6VaKh7Zc3c/JXcTWF0?=
 =?us-ascii?Q?LREWSSV5Oq8Ibg/ekIL04Tqu2+EBCT5zKJJRLr5Pg+xQNOoN4vAkr5wDVBLO?=
 =?us-ascii?Q?gi/iJbcJY0EXtvEfrYP3GNbxHtpsB7YV8KszEaz5dybbBoaXN4PvSL6katKw?=
 =?us-ascii?Q?KkPr7jRGCS3LTclex3w0HGTIlfR2sm7bmJRSiDOF/yQeQe5bLTkwpGgO4Pwd?=
 =?us-ascii?Q?CUjhng5jlEEQf6tguoCtgtgmBHCqMF8GYKk+atELBiL7YtpqIq3PAQ=3D=3D?=
X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
 IPV:NLI; SFV:NSPM; H:AS8PR04MB8198.eurprd04.prod.outlook.com; PTR:; CAT:NONE;
 SFS:(13230040)(376014)(52116014)(366016)(1800799024)(38350700014); DIR:OUT;
 SFP:1101; 
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?uI6+OjSkbhfAFFtMnpHx4LPE38Pq5kbeDtSR7wmmfr/TvYu2OdVUXu1ggmP0?=
 =?us-ascii?Q?6BNJeb2YM5WsQT72VD+TL75src3H+4j1ceXKccNx82Uqa9XKaNqUId5EyzsZ?=
 =?us-ascii?Q?pr28g6nXWjwjqn0dwqcke8rhaainF6c98/Xfh8C5F7yEflvK0Isiif3gxKff?=
 =?us-ascii?Q?rSYsSFGYs/mj0dTgcN/RBRf2il00UOtP3V3roKpa/mVdVnOMQsWNuxFp7Q/b?=
 =?us-ascii?Q?jidLl7IvqQx63J9PEQyNu9ffJ/YutNRC9NmYAceTikeNR3CF2GXLaTA99E6X?=
 =?us-ascii?Q?6C2x0feOiI/hO2V0wA121c4wsHpSxaY8MaWKnall89LZcRIIhp5xumPmpx4O?=
 =?us-ascii?Q?tUxQvwIOccJPI/13ldHcJ5zxKQ8h7VIB1AetmX80ikVMcqQUqDOntgoTz3fj?=
 =?us-ascii?Q?r3gZEkOCn/5/SHEkZrQ0UhDNmQ37K2sXUbCU/cM2OST4TyHw0izQP6aslNPA?=
 =?us-ascii?Q?iHD0o31rLqVaEJI8uXxHHM7TIJV/zgq6G/I2y0J1MBwSZOLRnpjZSqbLa3v1?=
 =?us-ascii?Q?ggq8+E8Pnpzept7AMNRcA80pteLKAAH3pg6McjaVpVh163L3yippw7zJ0PSh?=
 =?us-ascii?Q?rXeujvRzh0nP5/NG+Y/vONCORZZ4Myp5ztt+A64CzpQP+BY47o7VYO46tSdX?=
 =?us-ascii?Q?613e45EHCQQbLw9b2Tj8niK94VxwR0QnLT/H6vuxg0/gi7RhOqz5xyRd2R+Q?=
 =?us-ascii?Q?RGqmVqfarD9IdpKyuowaNVY3+Ge9oxcu8EfB2cc/M0JThHrsIVbuodSowB6J?=
 =?us-ascii?Q?52jUZiZpnmDqfXwWn5RR0uDGyO563Q9d7gMQImlwAcjHHR6IDMYowBQkUPCn?=
 =?us-ascii?Q?9bS++PdGHPWfMDzjEA3CQxJeyGVs4WpRvx+jFz2jff2nFiCepZcsPlkdqBH7?=
 =?us-ascii?Q?DPbIzVzjqidQhlJ/P7bsRiNRMW7tQn7RIeT473DUqItkpmCl6WesM9YWCNfA?=
 =?us-ascii?Q?uvp2RVTKWivd6MJ5wmmJtcmbbXgBH+cE4+wVyGk6aE1dzeH+Bc24VIxhXmA1?=
 =?us-ascii?Q?v9+2C8md94tka051YXMEOO0WgbYTdV6DSQgBU2vsuifiYuOrz4LGZhb1FOPo?=
 =?us-ascii?Q?EioRD3joJPUSHbYE9R7B8Y86aESukKXkrJcN/WwpWSDgmaItDCs5S9IJCvek?=
 =?us-ascii?Q?bqGMh82Hhtl/rSYIhQXMniNoTjnH3t8zKmEvvJf95k/nM7gxDSvU7E+i2/Is?=
 =?us-ascii?Q?Hwb2dYrpLlxb7KThpyyYLBMH/o0NR80qU7byXV64HqClvxDTBfThIFI0UmjF?=
 =?us-ascii?Q?F9ZGT8XrGj+XiPRSWku+Bz2vVAi96PATnYe8h/CbzTMUJ8Iop3ZDEEmtNgRv?=
 =?us-ascii?Q?uUa6Ag9OSgPI0AYoZ2mQp+Er6vf3XGywBnDNAMIvuTJe+a9v94emunEuiPN8?=
 =?us-ascii?Q?bpcvdTer8nE1WmYFyZRxJAjUTeC5epr3b4f4fZrPzMbAMF/eqEwflCMS/lUD?=
 =?us-ascii?Q?nEaKQgQ8WHKJV/MhufPLvRbo4HZKmuPjSp4uRHggpuG1x7pG+IuBUrygZyYU?=
 =?us-ascii?Q?FMFdDGJr2IoYfMP7BD7f5EWj0tzP5KNPQyReNdY18cd0aN6pzGln19W2yPWa?=
 =?us-ascii?Q?gIIgaDHGzAX2mqqj9gI=3D?=
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a8bee7b0-441a-4101-1cc7-08ddaa1fa86c
X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8198.eurprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2025 02:11:50.6825 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: NEWU7KLp9Fdt98qFj76b7405Ff2/z3oYJKhnkQSNyYK+0naIq2KSqygrOMexSFX8
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB6907
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

From: Jun Yang <jun.yang@nxp.com>

Use DPAA2_VADDR_TO_IOVA to convert va to iova for both VA and PA modes.

Signed-off-by: Jun Yang <jun.yang@nxp.com>
---
 drivers/mempool/dpaa2/dpaa2_hw_mempool.c | 222 +++++++++++++++--------
 1 file changed, 142 insertions(+), 80 deletions(-)

diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c
index 0ba40e751e..45a8f04256 100644
--- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c
+++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c
@@ -242,26 +242,47 @@ rte_hw_mbuf_free_pool(struct rte_mempool *mp)
 	dpaa2_free_dpbp_dev(dpbp_node);
 }
 
-static void
-rte_dpaa2_mbuf_release(struct rte_mempool *pool __rte_unused,
-			void * const *obj_table,
-			uint32_t bpid,
-			uint32_t meta_data_size,
-			int count)
+static inline int
+dpaa2_bman_multi_release(uint64_t *bufs, int num,
+	struct qbman_swp *swp,
+	const struct qbman_release_desc *releasedesc)
+{
+	int retry_count = 0, ret;
+
+release_again:
+	ret = qbman_swp_release(swp, releasedesc, bufs, num);
+	if (unlikely(ret == -EBUSY)) {
+		retry_count++;
+		if (retry_count <= DPAA2_MAX_TX_RETRY_COUNT)
+			goto release_again;
+
+		DPAA2_MEMPOOL_ERR("bman release retry exceeded, low fbpr?");
+		return ret;
+	}
+	if (unlikely(ret)) {
+		DPAA2_MEMPOOL_ERR("bman release failed(err=%d)", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+static int
+dpaa2_mbuf_release(void * const *obj_table, uint32_t bpid,
+	uint32_t meta_data_size, int count)
 {
 	struct qbman_release_desc releasedesc;
 	struct qbman_swp *swp;
 	int ret;
-	int i, n, retry_count;
+	int i, n;
 	uint64_t bufs[DPAA2_MBUF_MAX_ACQ_REL];
 
 	if (unlikely(!DPAA2_PER_LCORE_DPIO)) {
 		ret = dpaa2_affine_qbman_swp();
-		if (ret != 0) {
-			DPAA2_MEMPOOL_ERR(
-				"Failed to allocate IO portal, tid: %d",
-				rte_gettid());
-			return;
+		if (ret) {
+			DPAA2_MEMPOOL_ERR("affine portal err: %d, tid: %d",
+				ret, rte_gettid());
+			return -EIO;
 		}
 	}
 	swp = DPAA2_PER_LCORE_PORTAL;
@@ -277,51 +298,62 @@ rte_dpaa2_mbuf_release(struct rte_mempool *pool __rte_unused,
 		goto aligned;
 
 	/* convert mbuf to buffers for the remainder */
-	for (i = 0; i < n ; i++) {
-#ifdef RTE_LIBRTE_DPAA2_USE_PHYS_IOVA
-		bufs[i] = (uint64_t)rte_mempool_virt2iova(obj_table[i])
-				+ meta_data_size;
-#else
-		bufs[i] = (uint64_t)obj_table[i] + meta_data_size;
-#endif
+	if (likely(rte_eal_iova_mode() == RTE_IOVA_VA)) {
+		for (i = 0; i < n ; i++) {
+			bufs[i] = DPAA2_VAMODE_VADDR_TO_IOVA(obj_table[i]) +
+				meta_data_size;
+		}
+	} else {
+		for (i = 0; i < n ; i++) {
+			bufs[i] = DPAA2_PAMODE_VADDR_TO_IOVA(obj_table[i]) +
+				meta_data_size;
+		}
 	}
 
 	/* feed them to bman */
-	retry_count = 0;
-	while ((ret = qbman_swp_release(swp, &releasedesc, bufs, n)) ==
-			-EBUSY) {
-		retry_count++;
-		if (retry_count > DPAA2_MAX_TX_RETRY_COUNT) {
-			DPAA2_MEMPOOL_ERR("bman release retry exceeded, low fbpr?");
-			return;
-		}
-	}
+	ret = dpaa2_bman_multi_release(bufs, n, swp, &releasedesc);
+	if (unlikely(ret))
+		return 0;
 
 aligned:
 	/* if there are more buffers to free */
+	if (unlikely(rte_eal_iova_mode() != RTE_IOVA_VA))
+		goto iova_pa_release;
+
 	while (n < count) {
 		/* convert mbuf to buffers */
 		for (i = 0; i < DPAA2_MBUF_MAX_ACQ_REL; i++) {
-#ifdef RTE_LIBRTE_DPAA2_USE_PHYS_IOVA
-			bufs[i] = (uint64_t)
-				  rte_mempool_virt2iova(obj_table[n + i])
-				  + meta_data_size;
-#else
-			bufs[i] = (uint64_t)obj_table[n + i] + meta_data_size;
-#endif
+			bufs[i] = DPAA2_VAMODE_VADDR_TO_IOVA(obj_table[n + i]) +
+				meta_data_size;
 		}
 
-		retry_count = 0;
-		while ((ret = qbman_swp_release(swp, &releasedesc, bufs,
-					DPAA2_MBUF_MAX_ACQ_REL)) == -EBUSY) {
-			retry_count++;
-			if (retry_count > DPAA2_MAX_TX_RETRY_COUNT) {
-				DPAA2_MEMPOOL_ERR("bman release retry exceeded, low fbpr?");
-				return;
-			}
+		ret = dpaa2_bman_multi_release(bufs,
+				DPAA2_MBUF_MAX_ACQ_REL, swp, &releasedesc);
+		if (unlikely(ret))
+			return n;
+
+		n += DPAA2_MBUF_MAX_ACQ_REL;
+	}
+
+	return count;
+
+iova_pa_release:
+	while (n < count) {
+		/* convert mbuf to buffers */
+		for (i = 0; i < DPAA2_MBUF_MAX_ACQ_REL; i++) {
+			bufs[i] = DPAA2_PAMODE_VADDR_TO_IOVA(obj_table[n + i]) +
+				meta_data_size;
 		}
+
+		ret = dpaa2_bman_multi_release(bufs,
+				DPAA2_MBUF_MAX_ACQ_REL, swp, &releasedesc);
+		if (unlikely(ret))
+			return n;
+
 		n += DPAA2_MBUF_MAX_ACQ_REL;
 	}
+
+	return count;
 }
 
 RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa2_bpid_info_init)
@@ -389,7 +421,7 @@ rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool,
 #endif
 	struct qbman_swp *swp;
 	uint16_t bpid;
-	size_t bufs[DPAA2_MBUF_MAX_ACQ_REL];
+	uint64_t bufs[DPAA2_MBUF_MAX_ACQ_REL];
 	int i, ret;
 	unsigned int n = 0;
 	struct dpaa2_bp_info *bp_info;
@@ -405,56 +437,79 @@ rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool,
 
 	if (unlikely(!DPAA2_PER_LCORE_DPIO)) {
 		ret = dpaa2_affine_qbman_swp();
-		if (ret != 0) {
-			DPAA2_MEMPOOL_ERR(
-				"Failed to allocate IO portal, tid: %d",
-				rte_gettid());
+		if (ret) {
+			DPAA2_MEMPOOL_ERR("affine portal err: %d, tid: %d",
+				ret, rte_gettid());
 			return ret;
 		}
 	}
 	swp = DPAA2_PER_LCORE_PORTAL;
 
+	if (unlikely(rte_eal_iova_mode() != RTE_IOVA_VA))
+		goto iova_pa_acquire;
+
 	while (n < count) {
 		/* Acquire is all-or-nothing, so we drain in 7s,
 		 * then the remainder.
 		 */
-		if ((count - n) > DPAA2_MBUF_MAX_ACQ_REL) {
-			ret = qbman_swp_acquire(swp, bpid, (void *)bufs,
-						DPAA2_MBUF_MAX_ACQ_REL);
-		} else {
-			ret = qbman_swp_acquire(swp, bpid, (void *)bufs,
-						count - n);
+		ret = qbman_swp_acquire(swp, bpid, bufs,
+			(count - n) > DPAA2_MBUF_MAX_ACQ_REL ?
+			DPAA2_MBUF_MAX_ACQ_REL : (count - n));
+		if (unlikely(ret <= 0))
+			goto acquire_failed;
+
+		/* assigning mbuf from the acquired objects */
+		for (i = 0; i < ret; i++) {
+			DPAA2_VAMODE_MODIFY_IOVA_TO_VADDR(bufs[i],
+				size_t);
+			obj_table[n] = (void *)(uintptr_t)(bufs[i] -
+				bp_info->meta_data_size);
+			n++;
 		}
-		/* In case of less than requested number of buffers available
-		 * in pool, qbman_swp_acquire returns 0
+	}
+	goto acquire_success;
+
+iova_pa_acquire:
+
+	while (n < count) {
+		/* Acquire is all-or-nothing, so we drain in 7s,
+		 * then the remainder.
 		 */
-		if (ret <= 0) {
-			DPAA2_MEMPOOL_DP_DEBUG(
-				"Buffer acquire failed with err code: %d", ret);
-			/* The API expect the exact number of requested bufs */
-			/* Releasing all buffers allocated */
-			rte_dpaa2_mbuf_release(pool, obj_table, bpid,
-					   bp_info->meta_data_size, n);
-			return -ENOBUFS;
-		}
+		ret = qbman_swp_acquire(swp, bpid, bufs,
+			(count - n) > DPAA2_MBUF_MAX_ACQ_REL ?
+			DPAA2_MBUF_MAX_ACQ_REL : (count - n));
+		if (unlikely(ret <= 0))
+			goto acquire_failed;
+
 		/* assigning mbuf from the acquired objects */
-		for (i = 0; (i < ret) && bufs[i]; i++) {
-			DPAA2_MODIFY_IOVA_TO_VADDR(bufs[i], size_t);
-			obj_table[n] = (struct rte_mbuf *)
-				       (bufs[i] - bp_info->meta_data_size);
-			DPAA2_MEMPOOL_DP_DEBUG(
-				   "Acquired %p address %p from BMAN\n",
-				   (void *)bufs[i], (void *)obj_table[n]);
+		for (i = 0; i < ret; i++) {
+			DPAA2_PAMODE_MODIFY_IOVA_TO_VADDR(bufs[i],
+				size_t);
+			obj_table[n] = (void *)(uintptr_t)(bufs[i] -
+				bp_info->meta_data_size);
 			n++;
 		}
 	}
 
+acquire_success:
 #ifdef RTE_LIBRTE_DPAA2_DEBUG_DRIVER
 	alloc += n;
-	DPAA2_MEMPOOL_DP_DEBUG("Total = %d , req = %d done = %d\n",
-			       alloc, count, n);
+	DPAA2_MEMPOOL_DP_DEBUG("Total = %d , req = %d done = %d",
+		alloc, count, n);
 #endif
 	return 0;
+
+acquire_failed:
+	DPAA2_MEMPOOL_DP_DEBUG("Buffer acquire err: %d", ret);
+	/* The API expect the exact number of requested bufs */
+	/* Releasing all buffers allocated */
+	ret = dpaa2_mbuf_release(obj_table, bpid,
+			bp_info->meta_data_size, n);
+	if (ret != (int)n) {
+		DPAA2_MEMPOOL_ERR("%s: expect to free %d!= %d",
+			__func__, n, ret);
+	}
+	return -ENOBUFS;
 }
 
 static int
@@ -462,14 +517,21 @@ rte_hw_mbuf_free_bulk(struct rte_mempool *pool,
 		  void * const *obj_table, unsigned int n)
 {
 	struct dpaa2_bp_info *bp_info;
+	int ret;
 
 	bp_info = mempool_to_bpinfo(pool);
 	if (!(bp_info->bp_list)) {
 		DPAA2_MEMPOOL_ERR("DPAA2 buffer pool not configured");
 		return -ENOENT;
 	}
-	rte_dpaa2_mbuf_release(pool, obj_table, bp_info->bpid,
-			   bp_info->meta_data_size, n);
+	ret = dpaa2_mbuf_release(obj_table, bp_info->bpid,
+			bp_info->meta_data_size, n);
+	if (unlikely(ret != (int)n)) {
+		DPAA2_MEMPOOL_ERR("%s: expect to free %d!= %d",
+			__func__, n, ret);
+
+		return -EIO;
+	}
 
 	return 0;
 }
@@ -515,6 +577,7 @@ dpaa2_populate(struct rte_mempool *mp, unsigned int max_objs,
 	      rte_mempool_populate_obj_cb_t *obj_cb, void *obj_cb_arg)
 {
 	struct rte_memseg_list *msl;
+	int ret;
 	/* The memsegment list exists incase the memory is not external.
 	 * So, DMA-Map is required only when memory is provided by user,
 	 * i.e. External.
@@ -523,11 +586,10 @@ dpaa2_populate(struct rte_mempool *mp, unsigned int max_objs,
 
 	if (!msl) {
 		DPAA2_MEMPOOL_DEBUG("Memsegment is External.");
-		rte_fslmc_vfio_mem_dmamap((size_t)vaddr,
-				(size_t)paddr, (size_t)len);
+		ret = rte_fslmc_vfio_mem_dmamap((size_t)vaddr, paddr, len);
+		if (ret)
+			return ret;
 	}
-	/* Insert entry into the PA->VA Table */
-	dpaax_iova_table_update(paddr, vaddr, len);
 
 	return rte_mempool_op_populate_helper(mp, 0, max_objs, vaddr, paddr,
 					       len, obj_cb, obj_cb_arg);
-- 
2.25.1