From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9455AA04A2; Fri, 22 May 2020 19:26:36 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B34231DA0C; Fri, 22 May 2020 19:26:27 +0200 (CEST) Received: from relay.smtp.broadcom.com (unknown [192.19.232.149]) by dpdk.org (Postfix) with ESMTP id B80121D9FF for ; Fri, 22 May 2020 19:26:24 +0200 (CEST) Received: from dhcp-10-123-153-22.dhcp.broadcom.net (bgccx-dev-host-lnx2.bec.broadcom.net [10.123.153.22]) by relay.smtp.broadcom.com (Postfix) with ESMTP id E25B01BFEFD; Fri, 22 May 2020 10:26:18 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com E25B01BFEFD DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1590168379; bh=gN1BUQ3xkB/XBSNCpt54sXhoSgE1rpD0Ut34yP0K6QU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YEWJFOnqgtyeKxPs4adqoGkEuEY5/TdR6xgcftcMurYzURRO1vw7Nfb2NNA6WvrAA 89AX9sYfsjPu34rHy2GhdIKL9tajrCHQoaCVXSnRd+IU0mDQoVuqczPhLEI1rWxSTm 0ZQoczc7qHlgtsxAyPvKzPlauN7owVMT2odwT7YM= From: Kalesh A P To: dev@dpdk.org Cc: ferruh.yigit@intel.com, ajit.khaparde@broadcom.com Date: Fri, 22 May 2020 23:12:09 +0530 Message-Id: <20200522174209.19402-3-kalesh-anakkur.purayil@broadcom.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20200522174209.19402-1-kalesh-anakkur.purayil@broadcom.com> References: <20200522173254.18643-2-kalesh-anakkur.purayil@broadcom.com> <20200522174209.19402-1-kalesh-anakkur.purayil@broadcom.com> Subject: [dpdk-dev] [PATCH v2 2/2] net/bnxt: performance fix for Arm 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: Rahul Gupta Eliminate unnecessary rte_smp_wmb() before writing to request/completion doorbells. Use rte_cio_wmb() memory barrier instead of rte_io_wmb() before writing to tx/rx request queue doorbells and use rte_compiler_barrier() before writing to tx/rx completion queue doorbells. Fixes: 4af9d0c72941 ("net/bnxt: cleanup NQ doorbell") Fixes: f8168ca0e690 ("net/bnxt: support thor controller") Cc: stable@dpdk.org Signed-off-by: Rahul Gupta Signed-off-by: Kalesh AP Reviewed-by: Ajit Kumar Khaparde Reviewed-by: Lance Richardson --- drivers/net/bnxt/bnxt_cpr.h | 6 +++--- drivers/net/bnxt/bnxt_ring.h | 24 +++++++++++++----------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/drivers/net/bnxt/bnxt_cpr.h b/drivers/net/bnxt/bnxt_cpr.h index c288078..cccd6cd 100644 --- a/drivers/net/bnxt/bnxt_cpr.h +++ b/drivers/net/bnxt/bnxt_cpr.h @@ -64,9 +64,9 @@ struct bnxt_db_info; (cons)); \ } while (0) #define B_CP_DIS_DB(cpr, raw_cons) \ - rte_write32((DB_CP_FLAGS | \ - RING_CMP(((cpr)->cp_ring_struct), raw_cons)), \ - ((cpr)->cp_db.doorbell)) + rte_write32_relaxed((DB_CP_FLAGS | \ + RING_CMP(((cpr)->cp_ring_struct), raw_cons)), \ + ((cpr)->cp_db.doorbell)) #define B_CP_DB(cpr, raw_cons, ring_mask) \ rte_write32((DB_CP_FLAGS | \ diff --git a/drivers/net/bnxt/bnxt_ring.h b/drivers/net/bnxt/bnxt_ring.h index 48a39d7..9913aed 100644 --- a/drivers/net/bnxt/bnxt_ring.h +++ b/drivers/net/bnxt/bnxt_ring.h @@ -82,10 +82,12 @@ void bnxt_free_rxtx_nq_ring(struct bnxt *bp); static inline void bnxt_db_write(struct bnxt_db_info *db, uint32_t idx) { + rte_cio_wmb(); + if (db->db_64) rte_write64_relaxed(db->db_key64 | idx, db->doorbell); else - rte_write32(db->db_key32 | idx, db->doorbell); + rte_write32_relaxed(db->db_key32 | idx, db->doorbell); } /* Ring an NQ doorbell and disable interrupts for the ring. */ @@ -94,10 +96,10 @@ static inline void bnxt_db_nq(struct bnxt_cp_ring_info *cpr) if (unlikely(!cpr->cp_db.db_64)) return; - rte_smp_wmb(); - rte_write64(cpr->cp_db.db_key64 | DBR_TYPE_NQ | - RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons), - cpr->cp_db.doorbell); + rte_cio_wmb(); + rte_write64_relaxed(cpr->cp_db.db_key64 | DBR_TYPE_NQ | + RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons), + cpr->cp_db.doorbell); } /* Ring an NQ doorbell and enable interrupts for the ring. */ @@ -106,10 +108,10 @@ static inline void bnxt_db_nq_arm(struct bnxt_cp_ring_info *cpr) if (unlikely(!cpr->cp_db.db_64)) return; - rte_smp_wmb(); - rte_write64(cpr->cp_db.db_key64 | DBR_TYPE_NQ_ARM | - RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons), - cpr->cp_db.doorbell); + rte_cio_wmb(); + rte_write64_relaxed(cpr->cp_db.db_key64 | DBR_TYPE_NQ_ARM | + RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons), + cpr->cp_db.doorbell); } static inline void bnxt_db_cq(struct bnxt_cp_ring_info *cpr) @@ -117,9 +119,9 @@ static inline void bnxt_db_cq(struct bnxt_cp_ring_info *cpr) struct bnxt_db_info *db = &cpr->cp_db; uint32_t idx = RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons); - rte_smp_wmb(); + rte_compiler_barrier(); if (db->db_64) - rte_write64(db->db_key64 | idx, db->doorbell); + rte_write64_relaxed(db->db_key64 | idx, db->doorbell); else B_CP_DIS_DB(cpr, cpr->cp_raw_cons); } -- 2.10.1