From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f43.google.com (mail-wm0-f43.google.com [74.125.82.43]) by dpdk.org (Postfix) with ESMTP id 16E11201 for ; Fri, 6 Jan 2017 09:48:30 +0100 (CET) Received: by mail-wm0-f43.google.com with SMTP id k184so19714027wme.1 for ; Fri, 06 Jan 2017 00:48:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=8K7RJitM7bdKDKmAcLXgmIsNy0/xmEDCNRAqG8WQyD0=; b=Q4rHvSQQ07UEuC0iAOmj+FOZWjW+tIbOBGFgrAlj4cBXxGjjO3fHRY2F/3DHC0Ndq0 Uq/eodA8OzvDA5dKYf4pWCQLGFNeSXkkO0hyby8EHFlsRy31oJ/Z/FaJh3Av8MX9uXa6 egR9xHk6B3y7KpQlR88wI2aKHeZ+UiKhuRYglCxghK+kiZt7EsNiLSYLA+4pvVHPZHuZ rS0kjJ5Om9Zcv+6QApsDjcEvZ97Io5dIcZj4XS3z0jMRjtB8YspnRlicEdAO9qdHEB29 MhSXksnSaT1kxMzU4IV2EsdqhclYkQ+lquI7Sr4oZDzdxNhVMuM5MFILMjy2Aw+qc3yF x8aQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=8K7RJitM7bdKDKmAcLXgmIsNy0/xmEDCNRAqG8WQyD0=; b=meIe00pgZgUtPvpmI8VXhEaqYl91aQ9YuFhnJ6X+ohn3KW7T0GqdSRy7RGdRlfv0KD KLL0j4BsmMpSc3ty/Y1iRQZnNQIErDhH0FAwzC3HHqsT27v6pvaIVltxt1C+/SfEnXN8 GmcjqiT8vof0WXtMN+JveAmqYtA57G7Q6HV6Lpk+atfTsTheuZalyF8u6i6rPN1CO60y mdqSFTEQqeL1nT7YMAJySbgEv/LGQo69ImoY0c36zYVQmoya0CxYrougQHkN4/4Wk5qc 0JBcpVfMkOgNaU61L33lwwfsu6lXbppEX6B+f1TqBUlXe1Qj6gcNPwLpYBt8cuOpaMOl KDtg== X-Gm-Message-State: AIkVDXKWtT1glMzXjgV+N0/sg2LQSG+7OdYH7/rA/MPu/lOBCg1UlmpEGuEKaqs1HRq+uiLR X-Received: by 10.28.214.133 with SMTP id n127mr2897634wmg.28.1483692510525; Fri, 06 Jan 2017 00:48:30 -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 uz7sm13021217wjc.11.2017.01.06.00.48.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 06 Jan 2017 00:48:29 -0800 (PST) From: Nelio Laranjeiro To: stable@dpdk.org Cc: =?UTF-8?q?N=C3=A9lio=20Laranjeiro?= , Adrien Mazarguil Date: Fri, 6 Jan 2017 09:48:07 +0100 Message-Id: X-Mailer: git-send-email 2.1.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] [PATCH] net/mlx5: fix Tx doorbell X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jan 2017 08:48:31 -0000 From: NĂ©lio Laranjeiro [ backported from upstream commit 8cfdff62b00eccb59506c79e439a6a5aba03901c ] 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 --- drivers/net/mlx5/mlx5_rxtx.c | 27 ++++++++++++++------------- drivers/net/mlx5/mlx5_rxtx.h | 2 -- drivers/net/mlx5/mlx5_txq.c | 2 -- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index 79f7fa9..8088ed6 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -69,6 +69,10 @@ #include "mlx5_defs.h" #include "mlx5_prm.h" +static inline void +mlx5_tx_dbrec(struct txq *txq, volatile union mlx5_wqe *wqe) + __attribute__((always_inline)); + #ifndef NDEBUG /** @@ -394,23 +398,20 @@ use_dseg: * * @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 union 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(); - rte_mov16(dst, (uint8_t *)data); - txq->bf_offset ^= txq->bf_buf_size; + *dst = *src; } /** @@ -586,7 +587,7 @@ skip_segs: txq->stats.opackets += i; #endif /* Ring QP doorbell. */ - mlx5_tx_dbrec(txq); + mlx5_tx_dbrec(txq, (volatile union mlx5_wqe *)wqe); txq->elts_head = elts_head; return i; } @@ -793,7 +794,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; } @@ -1058,7 +1059,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 05779ef..1db1cc2 100644 --- a/drivers/net/mlx5/mlx5_rxtx.h +++ b/drivers/net/mlx5/mlx5_rxtx.h @@ -247,8 +247,6 @@ struct txq { uint16_t cqe_n; /* Number of CQ elements. */ uint16_t wqe_ci; /* Consumer index for work queue. */ uint16_t wqe_n; /* Number of WQ elements. */ - uint16_t bf_offset; /* Blueflame offset. */ - uint16_t bf_buf_size; /* Blueflame size. */ 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 e4510ef..579cf9e 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 = 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 = qp->gen_data.bf->buf_size; tmpl->txq.cq_db = cq->dbrec; tmpl->txq.cqes = (volatile struct mlx5_cqe (*)[]) -- 2.1.4