From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <Santosh.Shukla@cavium.com>
Received: from NAM01-SN1-obe.outbound.protection.outlook.com
 (mail-sn1nam01on0057.outbound.protection.outlook.com [104.47.32.57])
 by dpdk.org (Postfix) with ESMTP id 7528C7CA9
 for <dev@dpdk.org>; Thu, 31 Aug 2017 08:38:16 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;
 bh=lJh3SXNRGbWTdaCy6nWe92CQCDBxjd6x3klpppC215U=;
 b=ScKB3B8kxX0DkHndS59z96c47n9rS2qUDbLst4FmuS9tWOYbhbbpH3z+bkDtRtnJICZkvs4+ie/ga3gX2Y9Pp4CliN4yfraMZxNLgY8h1WSb3wTUYsmS5eY8tUtqMzixn0ku4yuuMl65HpNaSivrHX4PMNkrMDuLWipTNob+vkU=
Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Santosh.Shukla@cavium.com; 
Received: from localhost.localdomain (111.93.218.67) by
 MWHPR07MB3104.namprd07.prod.outlook.com (10.172.95.10) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id
 15.20.13.10; Thu, 31 Aug 2017 06:38:11 +0000
From: Santosh Shukla <santosh.shukla@caviumnetworks.com>
To: dev@dpdk.org,
	olivier.matz@6wind.com
Cc: jerin.jacob@caviumnetworks.com, john.mcnamara@intel.com,
 thomas@monjalon.net, hemant.agrawal@nxp.com,
 Santosh Shukla <santosh.shukla@caviumnetworks.com>
Date: Thu, 31 Aug 2017 12:07:15 +0530
Message-Id: <20170831063719.19273-7-santosh.shukla@caviumnetworks.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20170831063719.19273-1-santosh.shukla@caviumnetworks.com>
References: <20170824132903.32057-1-santosh.shukla@caviumnetworks.com>
 <20170831063719.19273-1-santosh.shukla@caviumnetworks.com>
MIME-Version: 1.0
Content-Type: text/plain
X-Originating-IP: [111.93.218.67]
X-ClientProxiedBy: PN1PR01CA0089.INDPRD01.PROD.OUTLOOK.COM (10.174.144.157) To
 MWHPR07MB3104.namprd07.prod.outlook.com (10.172.95.10)
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a72e9a91-2e25-40f7-9c7c-08d4f03adb5e
X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0;
 RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);
 SRVR:MWHPR07MB3104; 
X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3104;
 3:HB5fdkM0YmYCiIENyaHL5mLrtYvyNsdZIiu2LTKDHHyyKw5bpni6Nf/cu8kWcGmGeBsAWBz2mP22w7jRqG5ngpNIPtvElED7ZnVMAAubIGJHNWUkX9tYvCE1ixxpzNRlj+NOuR0GcnZU9eAW4rHKtGy+IBBfIEfxS27xMQau5Q1aeEWQm50wYcoUT0I7ukL/yJk49VIzcDnIb5ShhOkN5WJEJrRJjBLun4r1O+uRg/ErwdtnoXePIbfRbIvuifSB;
 25:ar23dIf2id0ixe/UFuTZCZSHZsr8x3eVGbiGDiA0MUhqsgetHB4nM4o3alLVrqgKgIHBV5tudAJgsr8aKTIRFGZS+uIi90czsPBS7C/R0FIiF5Nb+EJA9SHRY0COqlVpfWqIiOgxkuEfzQ4ituYt8E9nyPBFsCMvEHrVLOZzl4HFhKbHPOrmHo3J7KsaiZu2Z+/Dt1RNko2OSICvp126nos0wUSG71A4oOt/zkp8Wy+3ReHlPm5zcNv2ZJYxyLd+1nRBm/vIdjjzoyefmt6w4ByD1kHvJTRn98ry664WFwa/Aj0eonUOlZzb386RJQnRtDCGMKGM4YSyRtv+Y6rmiQ==;
 31:Op4e8tBjqWXtvuMvdnJ+fszFiw88Dj4Mm6NAhwJhGi+aXLqxFMStPtMiHGMlF/L7ijD8dQ3S3CifDz8Fkjx5YeI6YwOF1AY5weYUIkc10XmOwmiM37IZmWfKXkwcziUtYXf2ZDvWe6DzCQzyfTIbmPQAdgW76KGxw+Z3QdlBsw3o4SheLDp9wDUvsbpiXw+dxgRQKT+82NEDCXjSUVg7BLI/COgTRnBT0xRdauScCVU=
X-MS-TrafficTypeDiagnostic: MWHPR07MB3104:
X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3104;
 20:/Zs0jFj3hiNytQLn8G5GD3pcvMxYYQ6ZJJ0UCBAQa2tohx8N5SJUXiKhMu5/uGMDpEYHdiJVsMT7MIVazjS5T/DzvL8T0NPBWh6iy/10CNnWC9zsxjKatVX2spQDsA8YTBer17Ku5/uYMaDl84qhhzxHzz9bl1so5gYIy6gBbBMfQk7Z7J16Gym58hKBAAMrXC/rOxW8/Ti2/6ZG5XykrcQyqNT2HqwWtuQseyuEL3XQA3NF63y8Xmo7mB5QHT8Dg4GC5Y/35L+9vSVAtlefyRhEgR+7Id8ADSzdTcMBT+b2G9SHPawczWfMGVidSSmIe69o9uLBpoS7xIiZuVkIcVJGOKwSb7cGRu7I6R0tjR+XjOkXvdX5GCHVD6zZqvXPl2V3KeIoqgaov/UxXbs2vbG8tEYF/6wchuAeznCWLvwWV1a/2oRGd5PlV//AR1qe910fBqOEY5Nb1Li4An/u/7TkWMBhHh+JZo/gZ+Tg9TICvSces4jgatyQ4NJZfD1OEt4zrHWjkR7o/21j02j/qUQ9rBGd6ia7Jqd/jakHKBBwnhQecdmKmEwLVuA4P+K198WInc6bXwqdiMmeHHEW7262ulADo586ffzmmcly9SQ=;
 4:zbnugk8raqXSjjEG94eCj3jC0CBBovFOl4AdO9eYCnZlOTH4WlG/csQmhvk1FHuYAWwo4h+d4ATXrjfFYkRRlT6aWQMOAkZRRCZpVV9J9Z3Hw7z9+RNBSeKZZVRnD+t3aAzWQmYmhE/vxbLFdSFpVEoWoqU0WA2Ajim9vxR9BSUWwoyl0lxIYbmnsJ/4EURXc6tWiLf/RBzTI8fRnerPZzTAtok00LC8ozvh4JBBa0tFYPV/L9rXHMqV4OEOGJo5
X-Exchange-Antispam-Report-Test: UriScan:;
X-Microsoft-Antispam-PRVS: <MWHPR07MB31048FE1D764CB15B599666CEA9D0@MWHPR07MB3104.namprd07.prod.outlook.com>
X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0;
 RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(100000703101)(100105400095)(93006095)(3002001)(6041248)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123562025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);
 SRVR:MWHPR07MB3104; BCL:0; PCL:0;
 RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);
 SRVR:MWHPR07MB3104; 
X-Forefront-PRVS: 04163EF38A
X-Forefront-Antispam-Report: SFV:NSPM;
 SFS:(10009020)(6009001)(6069001)(199003)(189002)(66066001)(6486002)(33646002)(50226002)(47776003)(6506006)(68736007)(36756003)(50986999)(101416001)(4326008)(76176999)(189998001)(25786009)(50466002)(48376002)(7736002)(5003940100001)(6512007)(105586002)(8656003)(478600001)(2906002)(110136004)(107886003)(305945005)(53936002)(8676002)(42186005)(5009440100003)(72206003)(42882006)(2950100002)(1076002)(97736004)(81166006)(81156014)(8936002)(3846002)(6116002)(5660300001)(106356001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR07MB3104; H:localhost.localdomain; FPR:;
 SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; 
Received-SPF: None (protection.outlook.com: cavium.com does not designate
 permitted sender hosts)
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR07MB3104;
 23:FdNvQ78xmEBB5mAkZUQo2QTkS0x9gpVbGNewSG1qx?=
 =?us-ascii?Q?FwY8D9CHQa5kSi5AfwI81S9hEBjI/yFA9uDieKRRXcmBt2XEq3aJx1Q9HuM2?=
 =?us-ascii?Q?wCNdx6CI8cBoratRwNpXE4T7vmoOEEzjwTMJbvVRILb0qJoLxgNcYQSOJiRY?=
 =?us-ascii?Q?K8FqwQMNjkLZLQf8Kc26YLaKPb26YEoqCxvzgYxxf5CkXiJiowAMT5ZtTAcY?=
 =?us-ascii?Q?hS1BRoDzQQe7q92vP/8FCDERSLI1SQs6Ln4r04GctPpneUHfjpljQ10AXfZw?=
 =?us-ascii?Q?Xb2EUIHP0xUVsTkt8wQPPSbZnFI9MUOnmY1vA6riHPqN+Ie7kZc2N/GbWYeM?=
 =?us-ascii?Q?rpCaHcXPeFwHZkDQxto8sLQzIEEpC2OnvmUH3JeYC3J++0T0l65WCEL2irYd?=
 =?us-ascii?Q?7b53DLD1ykbjuUmrrHxhrvG8diNMPYNLQjRP+StnrlUsYyOzzJUl1Brkb/ws?=
 =?us-ascii?Q?uRXTWHp1VFEkkueIESz0YO0+BQ8/FNutzNYrEV048dSs0HssZT0dz+op/Iwy?=
 =?us-ascii?Q?2GcgLJ4hs5JQcACGrqBkb3gM1fV8KApUQgudxiA1qujG4N5dW/Np/qCEvqAV?=
 =?us-ascii?Q?qulUrEQcgiFStawQpDhtATBEN+Jb2hbKaOb6UpsrSqRrg9C8T3Oq9kHDuWUM?=
 =?us-ascii?Q?fqxP+MZQwwLgcxQLWrbN6Egq/OLTN+VfQl/His6WHbAIkeTcXw4OXV30tAOe?=
 =?us-ascii?Q?AEdtxAzsUqAf3hB2gyloK43NtY/wz24XtApbXrsp/y8vQWegoXHuRos7dyJe?=
 =?us-ascii?Q?mfKekcZikY4rDf9wQScKm/AlofurDzzYByVtC5/+B2mtxAg/ecgMS8fDncJ7?=
 =?us-ascii?Q?UnMRDhkJpZQ+iXFXBO3RgPc8v/qV4v1rcOHOtVsYGkxh4zAHvUUBOd5mACTz?=
 =?us-ascii?Q?t3uo3BjWciJWp5BnNBCY7PufS3yM496/ihaEEL2K4Muyf/pd211P7g5Dku1F?=
 =?us-ascii?Q?hGPF4azUzJMf7o1jeyWnFr73CXxuXy5ygjgMAJUCieNFHbCnC5W/6GMchtAH?=
 =?us-ascii?Q?Gj5KYBMgZV2G7nK3AjcqDWJu3bZDcJaq9g7kJ0SC7JX7phEeQTbCMqEhn30Y?=
 =?us-ascii?Q?gl0Ad9VzirxSD1wjrXdTRne62jN1iNbF3jP6VZi6+hPp+wBuzPKsbki0WZ/e?=
 =?us-ascii?Q?cDhWP0uveo=3D?=
X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3104;
 6:oRiL9KzAAXw4eq+laZOsJVGhdJgSFMtw+Lbm4nt3KcZMSPIUqXnGMBE/NKWltD/RF2E0x5dXB40W7405PAds6PVk69wpM+wwraEtaA1lK5sI5qn0FQ0eoOUafBFmtjcZo6jhhV+y4i+HZKCaeZizxKwlbFqUswES2WPaAOofRYC3xwZYx11onN5w6oPgRaEbiyJS0ioCsLg02bBL2A+GQcxI0I0PQCry3wBBBBXT4v8x7FrZI8wgI1+kkSczgserjxjrmfyUS0CTcaemKsNfofy3FgJh1eIGUo1+78mhlvkESoE6G1xmFn369HEwAMW6kVbrFjGpJBSti4RGdZvpnA==;
 5:DbEGnLIO+FID4vclECQjffIq1grtbfYq5xOcNxs0Wva+VZDclT7EaNpO1wgw51/WO8XTjI0Yhj2eBIC+MAPQPBvDAAF2nBeR8cANfDb/K3o+fK35V8YmMLvqGlk4wXFMjipZZiygjXXUSaH0IG7hxA==;
 24:3uPP/ftzUWOOe/497ItTfNBCwz5/fV1vl6NarbniUVDM9BBAi+R4YlI2jt+r3mkSb1K4IvEY1G6AGQ7vi9qTikG2gHSK4bvFZUYUGpmP7qk=;
 7:6dklBAppvjimfCn8iqiwCLH3lkwkV8vRX6/xl0bpMTgj8nSUaumZa6+vvbREWwYfYqOVcPM6Kpms7YJbqa4mhkC4odIzUSdlbZ3TUM3IoKt+j6nDoghIh8Sd0qMHMg4Qa+bSD4rV4tIK8R7ybMMyt44fuv6D4yCdo2IlJdakCSVqhm0fSDkRP6pfhB0Pl3qcDeJjTxLbA7XllpBwlHd9y88WosovvYxBT+xp7TAFy0g=
SpamDiagnosticOutput: 1:99
SpamDiagnosticMetadata: NSPM
X-OriginatorOrg: caviumnetworks.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2017 06:38:11.9012 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR07MB3104
Subject: [dpdk-dev] [PATCH v2 06/10] mempool/octeontx: implement pool enq
	and deq
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Thu, 31 Aug 2017 06:38:17 -0000

Signed-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
v1 --> v2:
- Mask the gpool-id from pool handle and pass pool bar to pool enq
and deq ops.

 drivers/mempool/octeontx/Makefile               | 13 +++++
 drivers/mempool/octeontx/rte_mempool_octeontx.c | 69 ++++++++++++++++++++++++-
 2 files changed, 80 insertions(+), 2 deletions(-)

diff --git a/drivers/mempool/octeontx/Makefile b/drivers/mempool/octeontx/Makefile
index 9c3389608..0b2043842 100644
--- a/drivers/mempool/octeontx/Makefile
+++ b/drivers/mempool/octeontx/Makefile
@@ -53,6 +53,19 @@ LIBABIVER := 1
 SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL) += octeontx_fpavf.c
 SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL) += rte_mempool_octeontx.c
 
+ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
+CFLAGS_rte_mempool_octeontx.o += -fno-prefetch-loop-arrays
+
+ifeq ($(shell test $(GCC_VERSION) -ge 46 && echo 1), 1)
+CFLAGS_rte_mempool_octeontx.o += -Ofast
+else
+CFLAGS_rte_mempool_octeontx.o += -O3 -ffast-math
+endif
+
+else
+CFLAGS_rte_mempool_octeontx.o += -Ofast
+endif
+
 # this lib depends upon:
 DEPDIRS-$(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL) += lib/librte_mbuf
 
diff --git a/drivers/mempool/octeontx/rte_mempool_octeontx.c b/drivers/mempool/octeontx/rte_mempool_octeontx.c
index 6754a78c0..9477469f0 100644
--- a/drivers/mempool/octeontx/rte_mempool_octeontx.c
+++ b/drivers/mempool/octeontx/rte_mempool_octeontx.c
@@ -84,12 +84,77 @@ octeontx_fpavf_free(struct rte_mempool *mp)
 	octeontx_fpa_bufpool_destroy(pool, mp->socket_id);
 }
 
+static __rte_always_inline void *
+octeontx_fpa_bufpool_alloc(uintptr_t handle)
+{
+	return (void *)(uintptr_t)fpavf_read64((void *)(handle +
+						FPA_VF_VHAURA_OP_ALLOC(0)));
+}
+
+static __rte_always_inline void
+octeontx_fpa_bufpool_free(uintptr_t handle, void *buf)
+{
+	uint64_t free_addr = FPA_VF_FREE_ADDRS_S(FPA_VF_VHAURA_OP_FREE(0),
+						 0 /* DWB */, 1 /* FABS */);
+
+	fpavf_write64((uintptr_t)buf, (void *)(uintptr_t)(handle + free_addr));
+}
+
+static int
+octeontx_fpavf_enqueue(struct rte_mempool *mp, void * const *obj_table,
+			unsigned int n)
+{
+	uintptr_t pool;
+	unsigned int index;
+
+	pool = (uintptr_t)mp->pool_id;
+	/* Get pool bar address from handle */
+	pool &= ~(uint64_t)FPA_GPOOL_MASK;
+	for (index = 0; index < n; index++, obj_table++)
+		octeontx_fpa_bufpool_free(pool, *obj_table);
+
+	return 0;
+}
+
+static int
+octeontx_fpavf_dequeue(struct rte_mempool *mp, void **obj_table,
+			unsigned int n)
+{
+	unsigned int index;
+	uintptr_t pool;
+	void *obj;
+
+	pool = (uintptr_t)mp->pool_id;
+	/* Get pool bar address from handle */
+	pool &= ~(uint64_t)FPA_GPOOL_MASK;
+	for (index = 0; index < n; index++, obj_table++) {
+		obj = octeontx_fpa_bufpool_alloc(pool);
+		if (obj == NULL) {
+			/*
+			 * Failed to allocate the requested number of objects
+			 * from the pool. Current pool implementation requires
+			 * completing the entire request or returning error
+			 * otherwise.
+			 * Free already allocated buffers to the pool.
+			 */
+			for (; index > 0; index--) {
+				obj_table--;
+				octeontx_fpa_bufpool_free(pool, *obj_table);
+			}
+			return -ENOMEM;
+		}
+		*obj_table = obj;
+	}
+
+	return 0;
+}
+
 static struct rte_mempool_ops octeontx_fpavf_ops = {
 	.name = "octeontx_fpavf",
 	.alloc = octeontx_fpavf_alloc,
 	.free = octeontx_fpavf_free,
-	.enqueue = NULL,
-	.dequeue = NULL,
+	.enqueue = octeontx_fpavf_enqueue,
+	.dequeue = octeontx_fpavf_dequeue,
 	.get_count = NULL,
 	.get_capabilities = NULL,
 	.update_range = NULL,
-- 
2.11.0