From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 499AEA05D3 for ; Thu, 23 May 2019 10:20:10 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C29511B9FA; Thu, 23 May 2019 10:17:38 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id AB3B21B9B3 for ; Thu, 23 May 2019 10:17:11 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x4N89evB019037; Thu, 23 May 2019 01:17:10 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0818; bh=jiWT5QHScUCKPMSg/Psb/s+4xwac8obAKtGqZlCFPls=; b=H92lvQZdLLRNayWvbKfGk13COEpzn/qGJ9CEJ7EjTMTrYuvo2elaAWy3ERDh9neq5i4Q EJ+C4iQSpqX0m/8QJt8frpsRIbSCBrChY1J57b2T/vinGm2KjuSw9OL5WQQVoCd84gUr 1TAwGMZsdmrCQ+mU9p90kunZWYY50UG68lhMAF11cBP5S0Gfe1qxfZdXJ7QgEe0XKzMR 4KHklWjlRi1IsFneqO6CQRMK8Z6frOYhPUCxrZugxH+3WD3qoJyQtFN7CnoqhoOwGT+F lvwO8/Nvb7LCMNGKgF08fTQEE00krg+ZaohlqP7lXV0jfCTzwx69+EQ3/l9/R4PdRqGg wA== Received: from sc-exch02.marvell.com ([199.233.58.182]) by mx0b-0016f401.pphosted.com with ESMTP id 2smnwk0sfp-13 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 23 May 2019 01:17:10 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Thu, 23 May 2019 01:16:14 -0700 Received: from maili.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1367.3 via Frontend Transport; Thu, 23 May 2019 01:16:14 -0700 Received: from jerin-lab.marvell.com (unknown [10.28.34.14]) by maili.marvell.com (Postfix) with ESMTP id 6B0A93F7048; Thu, 23 May 2019 01:16:13 -0700 (PDT) From: To: CC: , Jerin Jacob , Olivier Matz , Pavan Nikhilesh Date: Thu, 23 May 2019 13:43:36 +0530 Message-ID: <20190523081339.56348-25-jerinj@marvell.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190523081339.56348-1-jerinj@marvell.com> References: <20190523081339.56348-1-jerinj@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-05-23_08:, , signatures=0 Subject: [dpdk-dev] [PATCH v1 24/27] mempool/octeontx2: add fast path mempool ops 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Jerin Jacob Add enqueue and dequeue mempool fastpath operations. Cc: Olivier Matz Signed-off-by: Jerin Jacob Signed-off-by: Pavan Nikhilesh --- drivers/mempool/octeontx2/otx2_mempool_ops.c | 57 ++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/drivers/mempool/octeontx2/otx2_mempool_ops.c b/drivers/mempool/octeontx2/otx2_mempool_ops.c index 966b7d7f1..c59bd73c0 100644 --- a/drivers/mempool/octeontx2/otx2_mempool_ops.c +++ b/drivers/mempool/octeontx2/otx2_mempool_ops.c @@ -7,6 +7,61 @@ #include "otx2_mempool.h" +static int __hot +otx2_npa_enq(struct rte_mempool *mp, void * const *obj_table, unsigned int n) +{ + unsigned int index; const uint64_t aura_handle = mp->pool_id; + const uint64_t reg = npa_lf_aura_handle_to_aura(aura_handle); + const uint64_t addr = npa_lf_aura_handle_to_base(aura_handle) + + NPA_LF_AURA_OP_FREE0; + + for (index = 0; index < n; index++) + otx2_store_pair((uint64_t)obj_table[index], reg, addr); + + return 0; +} + +static __rte_noinline int +npa_lf_aura_op_alloc_one(const int64_t wdata, int64_t * const addr, + void **obj_table, uint8_t i) +{ + uint8_t retry = 4; + + do { + obj_table[i] = (void *)otx2_atomic64_add_nosync(wdata, addr); + if (obj_table[i] != NULL) + return 0; + + } while (retry--); + + return -ENOENT; +} + +static inline int __hot +otx2_npa_deq(struct rte_mempool *mp, void **obj_table, unsigned int n) +{ + const int64_t wdata = npa_lf_aura_handle_to_aura(mp->pool_id); + unsigned int index; + uint64_t obj; + + int64_t * const addr = (int64_t * const) + (npa_lf_aura_handle_to_base(mp->pool_id) + + NPA_LF_AURA_OP_ALLOCX(0)); + for (index = 0; index < n; index++, obj_table++) { + obj = npa_lf_aura_op_alloc_one(wdata, addr, obj_table, 0); + if (obj == 0) { + for (; index > 0; index--) { + obj_table--; + otx2_npa_enq(mp, obj_table, 1); + } + return -ENOENT; + } + *obj_table = (void *)obj; + } + + return 0; +} + static unsigned int otx2_npa_get_count(const struct rte_mempool *mp) { @@ -404,9 +459,11 @@ static struct rte_mempool_ops otx2_npa_ops = { .name = "octeontx2_npa", .alloc = otx2_npa_alloc, .free = otx2_npa_free, + .enqueue = otx2_npa_enq, .get_count = otx2_npa_get_count, .calc_mem_size = otx2_npa_calc_mem_size, .populate = otx2_npa_populate, + .dequeue = otx2_npa_deq, }; MEMPOOL_REGISTER_OPS(otx2_npa_ops); -- 2.21.0