From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <adrien.mazarguil@6wind.com>
Received: from mail-wi0-f170.google.com (mail-wi0-f170.google.com
 [209.85.212.170]) by dpdk.org (Postfix) with ESMTP id 739139224
 for <dev@dpdk.org>; Mon,  5 Oct 2015 19:55:13 +0200 (CEST)
Received: by wiclk2 with SMTP id lk2so126006444wic.1
 for <dev@dpdk.org>; Mon, 05 Oct 2015 10:55:13 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=HUcOQWJhuovCXlukKew7FtQOuoBki4eVKGauJW718uo=;
 b=XzwVEAa8mFNBlK+IbxCB0H44RJAPm+9TGdstSb2Kd+AXTiTJr/GSzQh6DrGSjdD0wN
 AqPS+8vSUSib2fLkQJUtODpY/0sHA+PZolhJhbpXFpx5m1s+PpEj7epDzUqktlAM8StQ
 mKr41kNLohMsZunNT8Ucks2XoTI/aHn6LVkfXorX2vj36nvI6Gc01azcRBcy2TwM+jHm
 GBcYcBWSNJBWiL/C6x+4D0IBJu/LW6dQ3JeZGGwjnTY8hKIZGdr+NOfuUpr9KtjPlIPJ
 2eu6IZ8u6DMcg1WpCz5nFQfv7CtJHgSJKHuH171p2vwwWaP7lFMEkzDLD5qqZGG2TBCR
 ZyYg==
X-Gm-Message-State: ALoCoQlKBokt4GvHlFLJoYxhjKORxlMxprxdeDwk1krNX1V9JUiMj+UVNxoeQutmclliT0I4EKZx
X-Received: by 10.180.19.68 with SMTP id c4mr13635219wie.50.1444067713337;
 Mon, 05 Oct 2015 10:55:13 -0700 (PDT)
Received: from 6wind.com (guy78-3-82-239-227-177.fbx.proxad.net.
 [82.239.227.177])
 by smtp.gmail.com with ESMTPSA id ex17sm15785533wid.23.2015.10.05.10.55.12
 (version=TLSv1.2 cipher=RC4-SHA bits=128/128);
 Mon, 05 Oct 2015 10:55:12 -0700 (PDT)
From: Adrien Mazarguil <adrien.mazarguil@6wind.com>
To: dev@dpdk.org
Date: Mon,  5 Oct 2015 19:54:36 +0200
Message-Id: <1444067692-29645-2-git-send-email-adrien.mazarguil@6wind.com>
X-Mailer: git-send-email 2.1.0
In-Reply-To: <1444067692-29645-1-git-send-email-adrien.mazarguil@6wind.com>
References: <1444067692-29645-1-git-send-email-adrien.mazarguil@6wind.com>
Subject: [dpdk-dev] [PATCH 01/17] mlx5: use fast Verbs interface for
	scattered RX operation
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <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: Mon, 05 Oct 2015 17:55:13 -0000

This commit updates mlx5_rx_burst_sp() to use the fast verbs interface for
posting RX buffers just like mlx5_rx_burst(). Doing so avoids a loop in
libmlx5 and an indirect function call through libibverbs.

Note: recv_sg_list() is not implemented in the QP burst API, this commit is
only to prepare transition to the WQ-based API.

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
---
 drivers/net/mlx5/mlx5_rxtx.c | 33 ++++++++++-----------------------
 1 file changed, 10 insertions(+), 23 deletions(-)

diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c
index 668aff0..8db4f3f 100644
--- a/drivers/net/mlx5/mlx5_rxtx.c
+++ b/drivers/net/mlx5/mlx5_rxtx.c
@@ -600,9 +600,6 @@ mlx5_rx_burst_sp(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
 	struct rxq_elt_sp (*elts)[rxq->elts_n] = rxq->elts.sp;
 	const unsigned int elts_n = rxq->elts_n;
 	unsigned int elts_head = rxq->elts_head;
-	struct ibv_recv_wr head;
-	struct ibv_recv_wr **next = &head.next;
-	struct ibv_recv_wr *bad_wr;
 	unsigned int i;
 	unsigned int pkts_ret = 0;
 	int ret;
@@ -660,9 +657,6 @@ mlx5_rx_burst_sp(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
 				/* Increment dropped packets counter. */
 				++rxq->stats.idropped;
 #endif
-				/* Link completed WRs together for repost. */
-				*next = wr;
-				next = &wr->next;
 				goto repost;
 			}
 			ret = wc.byte_len;
@@ -671,9 +665,6 @@ mlx5_rx_burst_sp(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
 			break;
 		len = ret;
 		pkt_buf_len = len;
-		/* Link completed WRs together for repost. */
-		*next = wr;
-		next = &wr->next;
 		/*
 		 * Replace spent segments with new ones, concatenate and
 		 * return them as pkt_buf.
@@ -770,26 +761,22 @@ mlx5_rx_burst_sp(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
 		rxq->stats.ibytes += pkt_buf_len;
 #endif
 repost:
+		ret = rxq->if_qp->recv_sg_list(rxq->qp,
+					       elt->sges,
+					       RTE_DIM(elt->sges));
+		if (unlikely(ret)) {
+			/* Inability to repost WRs is fatal. */
+			DEBUG("%p: recv_sg_list(): failed (ret=%d)",
+			      (void *)rxq->priv,
+			      ret);
+			abort();
+		}
 		if (++elts_head >= elts_n)
 			elts_head = 0;
 		continue;
 	}
 	if (unlikely(i == 0))
 		return 0;
-	*next = NULL;
-	/* Repost WRs. */
-#ifdef DEBUG_RECV
-	DEBUG("%p: reposting %d WRs", (void *)rxq, i);
-#endif
-	ret = ibv_post_recv(rxq->qp, head.next, &bad_wr);
-	if (unlikely(ret)) {
-		/* Inability to repost WRs is fatal. */
-		DEBUG("%p: ibv_post_recv(): failed for WR %p: %s",
-		      (void *)rxq->priv,
-		      (void *)bad_wr,
-		      strerror(ret));
-		abort();
-	}
 	rxq->elts_head = elts_head;
 #ifdef MLX5_PMD_SOFT_COUNTERS
 	/* Increment packets counter. */
-- 
2.1.0