From patchwork Fri Dec 9 13:27:58 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?N=C3=A9lio_Laranjeiro?= X-Patchwork-Id: 17783 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 9A5BF3989; Fri, 9 Dec 2016 14:28:21 +0100 (CET) Received: from mail-wm0-f44.google.com (mail-wm0-f44.google.com [74.125.82.44]) by dpdk.org (Postfix) with ESMTP id 81473388F for ; Fri, 9 Dec 2016 14:28:19 +0100 (CET) Received: by mail-wm0-f44.google.com with SMTP id f82so27307517wmf.1 for ; Fri, 09 Dec 2016 05:28:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id; bh=av+OS+EPRI3ZE2M9SIOEyS4Sz5q7z04QMmGcBPQIiOc=; b=ue0wVKwx134/op+rOFkSK3Dev0GwFdauH0n3LA2oNp8IcxLe+//ebbe9Vp9eEgTeLm PsB74dwNg8SKpniSntxZ1J2QhvHSfCYbexNqiVREL6LKMRTyKJoTQl4wwCstMmaAtWz3 fmMOlgWqYj3upgEF40oImZ2/X4QwhLRgZFr9lMinCIikVv7o9SgMbJmqtKZCZJQuexXo QEZmA+TCjn8dw9PetHyp3FDCmi1/sAe/dpoevfQ35l6KFQzKzkcmRwAPdHPNDB4R0md4 ReDIQsh9v1EnG5CwhxcTqm8SesGYIQSal7oUolTsUyyW82rlu3PToOqF8BwmyXmIwWz4 iDAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=av+OS+EPRI3ZE2M9SIOEyS4Sz5q7z04QMmGcBPQIiOc=; b=Ya8VQQ7qecLd5r81Up/FXLcPH3S5/D4ATv2xe1HJ/9DbL9dj25M8B9mPYZvg59FGgf PwA8Q8DLw7iI3pqaahzQgjTou2gY/q2R4Oxgp63S83U3GHKv7pAL9bT4+wkojepXsfDo B79uSfCFturipmy7uFb6iwbAkUyU615RJD6XrkYG4ZY2/4WK0tA0cDSUIvwLeSounNgl 1VqANT5fZcI6I0V+un/+Wb7GrezgZDOco08AbsGLvsF6F7JLUx5Ki5oUBxtitaI3VRwF rzwM/n7aNOB1itMbAHbjhMbqsizJ+BIB4KtXISbLtf6JQ+O7elV+G8mmgcC8ApFikTfT kwiA== X-Gm-Message-State: AKaTC02ZpAA1CPej893RN8rFfCkwFtW5Zqo548CC6n/9glt363X0wxKtTJAz6WHgBSHCJT+r X-Received: by 10.28.12.84 with SMTP id 81mr7108143wmm.51.1481290098979; Fri, 09 Dec 2016 05:28:18 -0800 (PST) Received: from ping.vm.6wind.com (guy78-3-82-239-227-177.fbx.proxad.net. [82.239.227.177]) by smtp.gmail.com with ESMTPSA id js10sm42316470wjb.19.2016.12.09.05.28.18 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 09 Dec 2016 05:28:18 -0800 (PST) From: Nelio Laranjeiro To: dev@dpdk.org Date: Fri, 9 Dec 2016 14:27:58 +0100 Message-Id: <1481290078-4530-1-git-send-email-nelio.laranjeiro@6wind.com> X-Mailer: git-send-email 2.1.4 Subject: [dpdk-dev] [PATCH] net/mlx5: fix Tx doorbell 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" Too much data is uselessly written to the Tx doorbell. Fixes: 1d88ba171942 ("net/mlx5: refactor Tx data path") Signed-off-by: Nelio Laranjeiro Acked-by: Adrien Mazarguil Signed-off-by: Nelio Laranjeiro Acked-by: Adrien Mazarguil Signed-off-by: Nelio Laranjeiro Acked-by: Adrien Mazarguil --- This patch should be applied on top of [1] or [2]. [1] http://dpdk.org/ml/archives/dev/2016-November/050716.html [2] http://dpdk.org/dev/patchwork/patch/17254/ --- drivers/net/mlx5/mlx5_rxtx.c | 26 ++++++++++++-------------- drivers/net/mlx5/mlx5_rxtx.h | 2 -- drivers/net/mlx5/mlx5_txq.c | 2 -- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index 22b22ac..029d872 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -82,7 +82,8 @@ txq_mp2mr(struct txq *txq, struct rte_mempool *mp) __attribute__((always_inline)); static inline void -mlx5_tx_dbrec(struct txq *txq) __attribute__((always_inline)); +mlx5_tx_dbrec(struct txq *txq, volatile struct mlx5_wqe *wqe) + __attribute__((always_inline)); static inline uint32_t rxq_cq_to_pkt_type(volatile struct mlx5_cqe *cqe) @@ -326,23 +327,20 @@ txq_mp2mr(struct txq *txq, struct rte_mempool *mp) * * @param txq * Pointer to TX queue structure. + * @param wqe + * Pointer to the last WQE posted in the NIC. */ static inline void -mlx5_tx_dbrec(struct txq *txq) +mlx5_tx_dbrec(struct txq *txq, volatile struct mlx5_wqe *wqe) { - uint8_t *dst = (uint8_t *)((uintptr_t)txq->bf_reg + txq->bf_offset); - uint32_t data[4] = { - htonl((txq->wqe_ci << 8) | MLX5_OPCODE_SEND), - htonl(txq->qp_num_8s), - 0, - 0, - }; + uint64_t *dst = (uint64_t *)((uintptr_t)txq->bf_reg); + volatile uint64_t *src = ((volatile uint64_t *)wqe); + rte_wmb(); *txq->qp_db = htonl(txq->wqe_ci); /* Ensure ordering between DB record and BF copy. */ rte_wmb(); - memcpy(dst, (uint8_t *)data, 16); - txq->bf_offset ^= (1 << txq->bf_buf_size); + *dst = *src; } /** @@ -609,7 +607,7 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) txq->stats.opackets += i; #endif /* Ring QP doorbell. */ - mlx5_tx_dbrec(txq); + mlx5_tx_dbrec(txq, (volatile struct mlx5_wqe *)wqe); txq->elts_head = elts_head; return i; } @@ -816,7 +814,7 @@ mlx5_tx_burst_mpw(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) /* Ring QP doorbell. */ if (mpw.state == MLX5_MPW_STATE_OPENED) mlx5_mpw_close(txq, &mpw); - mlx5_tx_dbrec(txq); + mlx5_tx_dbrec(txq, mpw.wqe); txq->elts_head = elts_head; return i; } @@ -1084,7 +1082,7 @@ mlx5_tx_burst_mpw_inline(void *dpdk_txq, struct rte_mbuf **pkts, mlx5_mpw_inline_close(txq, &mpw); else if (mpw.state == MLX5_MPW_STATE_OPENED) mlx5_mpw_close(txq, &mpw); - mlx5_tx_dbrec(txq); + mlx5_tx_dbrec(txq, mpw.wqe); txq->elts_head = elts_head; return i; } diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h index 6dcd35d..e244c48 100644 --- a/drivers/net/mlx5/mlx5_rxtx.h +++ b/drivers/net/mlx5/mlx5_rxtx.h @@ -251,8 +251,6 @@ struct txq { uint16_t elts_n:4; /* (*elts)[] length (in log2). */ uint16_t cqe_n:4; /* Number of CQ elements (in log2). */ uint16_t wqe_n:4; /* Number of of WQ elements (in log2). */ - uint16_t bf_buf_size:4; /* Log2 Blueflame size. */ - uint16_t bf_offset; /* Blueflame offset. */ uint16_t max_inline; /* Multiple of RTE_CACHE_LINE_SIZE to inline. */ uint32_t qp_num_8s; /* QP number shifted by 8. */ volatile struct mlx5_cqe (*cqes)[]; /* Completion queue. */ diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c index f4c6682..ad39ddc 100644 --- a/drivers/net/mlx5/mlx5_txq.c +++ b/drivers/net/mlx5/mlx5_txq.c @@ -220,8 +220,6 @@ txq_setup(struct txq_ctrl *tmpl, struct txq_ctrl *txq_ctrl) tmpl->txq.wqe_n = log2above(qp->sq.wqe_cnt); tmpl->txq.qp_db = &qp->gen_data.db[MLX5_SND_DBR]; tmpl->txq.bf_reg = qp->gen_data.bf->reg; - tmpl->txq.bf_offset = qp->gen_data.bf->offset; - tmpl->txq.bf_buf_size = log2above(qp->gen_data.bf->buf_size); tmpl->txq.cq_db = cq->dbrec; tmpl->txq.cqes = (volatile struct mlx5_cqe (*)[])