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 C4764A052A; Tue, 26 Jan 2021 19:33:32 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 53E0E140F6F; Tue, 26 Jan 2021 19:33:06 +0100 (CET) Received: from mail-lj1-f178.google.com (mail-lj1-f178.google.com [209.85.208.178]) by mails.dpdk.org (Postfix) with ESMTP id 01463140F5C for ; Tue, 26 Jan 2021 19:33:02 +0100 (CET) Received: by mail-lj1-f178.google.com with SMTP id f2so15608499ljp.11 for ; Tue, 26 Jan 2021 10:33:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iAUKnSEG4wzEy9lEZEGtBaDUlAxNZ9xcGjnjAY5dzrw=; b=EXVkcpseNBC3e7YZSkttJjQDdSOYXUN9NyAXMOEv2Yl1AU4RxZUs4GnlwUgqLtKj5I IsXSKkBXMzXroG0XTPg6WFEO5Bcvbk9twDyrS7stQp40dl+izCZ1sxnewEBwhb0D+gXy 5ZkHKfFVwyFl6DBArDIBRvrfLNL89hGrL3LEKs4RyAcp1EqKdMBnt47XgDbfYgPu6baH 70Uo1IMRlxxz+R3YaKMWo/LCcLX/jzOkCczXK9GjLVwXHpJOLBmb7IdulW0S9VNk09TD Z1tHSzMJzT5NTsy4FCYycSni73cCUvVtOYzSa2S+fxVPhOjtG25lghDzgoqIeSM1jcvV XmWw== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=iAUKnSEG4wzEy9lEZEGtBaDUlAxNZ9xcGjnjAY5dzrw=; b=USCR0oaIRyHyv424zIYzEVEd2Q1DpxeRfWDv/G3AMajAXASMw2OtQF2CPZt3ZvU6Gb 5Wd0I5j3PHkRngZsbCFTjJe2rKSr0e+EcG+llZrHsgNKNOWN6YFD0iAF13OlKBirt1WZ icJ46taDTqDgDXPhSvYfJyN2yqysoezISGEO5XapNiQQpqUj+FZKMXaJqfqEgjryO+yb ejw8MVHmwqbChgdfMgHaYrx+9MGsWZt+cIx08w27oFp4kOyRLxXtm9FSbYVWGarZ/Q38 VXZhIXlkgNHWJwhWuunuJIUU264pwzHozVNPptMtpYwmDLWlY+J1u2bpIpytp+IJ0oxs HVPA== X-Gm-Message-State: AOAM533g7LI2mXSTvjBdq5+7Y4xIVCg94iv1YVVEv7Z6SuBBh9axYk6w zG3O8IDhpnXs/DlMLC9ZsW8TROPkH1kw4wxS X-Google-Smtp-Source: ABdhPJye4O+/d3D8GCwlhdccdwjrgsBn7O021rJ26MwdsQKoW32SBy//MFbYNDs7jFI8y9J1zgss8Q== X-Received: by 2002:a2e:8608:: with SMTP id a8mr3543053lji.89.1611685981345; Tue, 26 Jan 2021 10:33:01 -0800 (PST) Received: from mkPC.int.semihalf.com (193-106-246-138.noc.fibertech.net.pl. [193.106.246.138]) by smtp.gmail.com with ESMTPSA id s3sm3351036ljo.41.2021.01.26.10.32.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jan 2021 10:33:00 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: gtzalik@amazon.com, igorch@amazon.com, mw@semihalf.com, Michal Krawczyk Date: Tue, 26 Jan 2021 19:32:26 +0100 Message-Id: <20210126183226.2420903-6-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210126183226.2420903-1-mk@semihalf.com> References: <20210126183226.2420903-1-mk@semihalf.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v2 5/5] net/ena: prevent double doorbell 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 Sender: "dev" From: Igor Chauskin Add per-tx-ring flag for packets that were pushed to HW but await doorbell. That is to prevent a situation when a doorbell is sent due to reaching Tx burst threshold and next send fails (e.g., due to queue full). In such case we shouldn't send another doorbell because there are no actual packets waiting for transmission. Signed-off-by: Igor Chauskin Reviewed-by: Michal Krawczyk --- drivers/net/ena/ena_ethdev.c | 7 +++++-- drivers/net/ena/ena_ethdev.h | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 4083568d5d..8baec80040 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1282,6 +1282,7 @@ static int ena_tx_queue_setup(struct rte_eth_dev *dev, txq->ring_size = nb_desc; txq->size_mask = nb_desc - 1; txq->numa_socket_id = socket_id; + txq->pkts_without_db = false; txq->tx_buffer_info = rte_zmalloc("txq->tx_buffer_info", sizeof(struct ena_tx_buffer) * @@ -2522,6 +2523,7 @@ static int ena_xmit_mbuf(struct ena_ring *tx_ring, struct rte_mbuf *mbuf) tx_ring->id); ena_com_write_sq_doorbell(tx_ring->ena_com_io_sq); tx_ring->tx_stats.doorbells++; + tx_ring->pkts_without_db = false; } /* prepare the packet's descriptors to dma engine */ @@ -2603,7 +2605,7 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, for (sent_idx = 0; sent_idx < nb_pkts; sent_idx++) { if (ena_xmit_mbuf(tx_ring, tx_pkts[sent_idx])) break; - + tx_ring->pkts_without_db = true; rte_prefetch0(tx_pkts[ENA_IDX_ADD_MASKED(sent_idx, 4, tx_ring->size_mask)]); } @@ -2612,10 +2614,11 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, ena_com_free_q_entries(tx_ring->ena_com_io_sq); /* If there are ready packets to be xmitted... */ - if (sent_idx > 0) { + if (likely(tx_ring->pkts_without_db)) { /* ...let HW do its best :-) */ ena_com_write_sq_doorbell(tx_ring->ena_com_io_sq); tx_ring->tx_stats.doorbells++; + tx_ring->pkts_without_db = false; } ena_tx_cleanup(tx_ring); diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h index 7bb74a1d06..ae235897ee 100644 --- a/drivers/net/ena/ena_ethdev.h +++ b/drivers/net/ena/ena_ethdev.h @@ -100,6 +100,10 @@ struct ena_ring { enum ena_ring_type type; enum ena_admin_placement_policy_type tx_mem_queue_type; + + /* Indicate there are Tx packets pushed to the device and wait for db */ + bool pkts_without_db; + /* Holds the empty requests for TX/RX OOO completions */ union { uint16_t *empty_tx_reqs; -- 2.25.1