From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4853E42A0A; Wed, 26 Apr 2023 21:30:54 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D47A142D33; Wed, 26 Apr 2023 21:30:10 +0200 (CEST) Received: from EX-PRD-EDGE01.vmware.com (EX-PRD-EDGE01.vmware.com [208.91.3.33]) by mails.dpdk.org (Postfix) with ESMTP id 9E8FA42D17 for ; Wed, 26 Apr 2023 21:04:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=s1024; d=vmware.com; h=from:to:cc:subject:date:message-id:in-reply-to:mime-version: content-type; bh=7Qp9gpCa7+IRbcrytySuRMSJQVWMKDOipHc3Nx3mocs=; b=wWAegXcm5dwSbqFAoH2XHbhmv139tL3D6gGeEqJfs2veOSG5emj4HHjAgtZC3L w0h1p9lNPhrq0H0uVjLr44XNGiCES0+0ot/q7xAv3uVOKH8HsgnMER8yhfQDKh M9M6a4Q1NfrodbmnYQyj2uwAZJ2BMn52iwTwed0jM7ifk/Y= Received: from sc9-mailhost2.vmware.com (10.113.161.72) by EX-PRD-EDGE01.vmware.com (10.188.245.6) with Microsoft SMTP Server id 15.1.2375.34; Wed, 26 Apr 2023 12:04:31 -0700 Received: from htb-1n-eng-dhcp122.eng.vmware.com (unknown [10.20.114.216]) by sc9-mailhost2.vmware.com (Postfix) with ESMTP id 446CF201EF; Wed, 26 Apr 2023 12:04:34 -0700 (PDT) Received: by htb-1n-eng-dhcp122.eng.vmware.com (Postfix, from userid 0) id 31CE8A83B6; Wed, 26 Apr 2023 12:04:34 -0700 (PDT) From: Ronak Doshi To: Jochen Behrens CC: , Ronak Doshi Subject: [PATCH v2 next 6/7] net/vmxnet3: avoid updating rxprod register frequently Date: Wed, 26 Apr 2023 12:04:13 -0700 Message-ID: <20230426190415.28239-7-doshir@vmware.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20230426190415.28239-1-doshir@vmware.com> References: <20230426190415.28239-1-doshir@vmware.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: None (EX-PRD-EDGE01.vmware.com: doshir@vmware.com does not designate permitted sender hosts) X-Mailman-Approved-At: Wed, 26 Apr 2023 21:30:01 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org When UPT is enabled, the driver updates rxprod register to let the device know that it has processed the received packets and new buffers are available. However, updating it too frequently can lead to reduced performance. This patch adds code to avoid updating the register frequently. Signed-off-by: Ronak Doshi Acked-by: Jochen Behrens --- drivers/net/vmxnet3/vmxnet3_rxtx.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c index 7bbae4177e..39ad0726cb 100644 --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c @@ -1007,7 +1007,8 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) /* It's time to renew descriptors */ vmxnet3_renew_desc(rxq, ring_idx, newm); - if (unlikely(rxq->shared->ctrl.updateRxProd)) { + if (unlikely(rxq->shared->ctrl.updateRxProd && + (rxq->cmd_ring[ring_idx].next2fill & 0xf) == 0)) { VMXNET3_WRITE_BAR0_REG(hw, hw->rx_prod_offset[ring_idx] + (rxq->queue_id * VMXNET3_REG_ALIGN), rxq->cmd_ring[ring_idx].next2fill); @@ -1027,18 +1028,21 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) if (unlikely(nb_rxd == 0)) { uint32_t avail; + uint32_t posted = 0; for (ring_idx = 0; ring_idx < VMXNET3_RX_CMDRING_SIZE; ring_idx++) { avail = vmxnet3_cmd_ring_desc_avail(&rxq->cmd_ring[ring_idx]); if (unlikely(avail > 0)) { /* try to alloc new buf and renew descriptors */ - vmxnet3_post_rx_bufs(rxq, ring_idx); + if (vmxnet3_post_rx_bufs(rxq, ring_idx) > 0) + posted |= (1 << ring_idx); } } if (unlikely(rxq->shared->ctrl.updateRxProd)) { for (ring_idx = 0; ring_idx < VMXNET3_RX_CMDRING_SIZE; ring_idx++) { - VMXNET3_WRITE_BAR0_REG(hw, hw->rx_prod_offset[ring_idx] + - (rxq->queue_id * VMXNET3_REG_ALIGN), - rxq->cmd_ring[ring_idx].next2fill); + if (posted & (1 << ring_idx)) + VMXNET3_WRITE_BAR0_REG(hw, hw->rx_prod_offset[ring_idx] + + (rxq->queue_id * VMXNET3_REG_ALIGN), + rxq->cmd_ring[ring_idx].next2fill); } } } -- 2.11.0