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 5F42AA0524 for ; Fri, 5 Feb 2021 12:39:50 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 56836188A6F; Fri, 5 Feb 2021 12:39:50 +0100 (CET) Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by mails.dpdk.org (Postfix) with ESMTP id D486B188A6F for ; Fri, 5 Feb 2021 12:39:49 +0100 (CET) Received: by mail-wr1-f52.google.com with SMTP id z6so7287989wrq.10 for ; Fri, 05 Feb 2021 03:39:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uTOyVwF0XWJLKEbBew3SIuuw9cE4UdexTx1pCOVcNjs=; b=b4YMZ4feiSjz+VZ+SxzydF5FgafSBd0OJjNmVDpWhjOjTCaLTOykkgf7gMiSuPGtX1 oSU86lplPxpODK6HKeJW4G9ku42J7F0/N89rE2mSVZJiyx2SwNQBPd0s6GxSOUcx3gRa VW9xbE3DmvVf4fgINWelLB5T7vdTX6rG02Y6tXcH7ouVNxDXHpoZjI8XlIyBM5mzvLAa DpSfbVMd+BxEqmIr5XpmIj9c//1+m+kaVPYNTwNpsZRlcrFkgO0JMnXmLrzxDbsksmkV s+yHPYX8gvSs1SHBjR1+YAwaPiiOTmpzcQnrGR2fIlKux79bIPVXt3PF/esI2choi2KR gLoQ== 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=uTOyVwF0XWJLKEbBew3SIuuw9cE4UdexTx1pCOVcNjs=; b=XsV8dxaipR4oM7yiRFiwITjuCDi+VY/RfF7Xb/J3mr9qzuuoUAjHjAN/BvB9MvIre3 XiCy3bARfsP0VQ2t75nTM/XRra/G4/Vb7AeEKJRf81Gkyj0zvxL2a5GsRuZ7YQgbi3aT IKXWAb8E4R9JaLXA0tdZR1ju1xbf7SUZCz6j9cvaY5QmVFpzDPiVy5XyHYZot8xgvMV/ iLh7d36MgPgL8dleb0o0A/sQ7kknebzecKjMObDKROpqq3L2eH4cb+oNrCwby1UDjgzs JK54DNVaik1OWrtKHOmxZ7kH6y0jCH1oUApJVg6Qt0oIaiikNFYrRn3Jzm5/g+JJgOW9 tv9w== X-Gm-Message-State: AOAM532sVa6QS55oh7pSQH0k073H+J+WDRaN9zrv02oXJf5DQ4fZcLO/ micAYIE/J5aJRMv0diVPBes= X-Google-Smtp-Source: ABdhPJzhaDkZsF580mNMCy7e4OfgSdPgvb8a3P2z4463/XRKVlM3WURuAojZ01aihll9ALK8pVynnQ== X-Received: by 2002:a5d:6cb4:: with SMTP id a20mr4613814wra.192.1612525189667; Fri, 05 Feb 2021 03:39:49 -0800 (PST) Received: from localhost ([88.98.246.218]) by smtp.gmail.com with ESMTPSA id m6sm8025568wmq.13.2021.02.05.03.39.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Feb 2021 03:39:49 -0800 (PST) From: luca.boccassi@gmail.com To: Igor Chauskin Cc: Michal Krawczyk , dpdk stable Date: Fri, 5 Feb 2021 11:19:18 +0000 Message-Id: <20210205111920.1272063-272-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210205111920.1272063-1-luca.boccassi@gmail.com> References: <20210205111920.1272063-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'net/ena: prevent double doorbell' has been queued to stable release 20.11.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to stable release 20.11.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 02/07/21. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/0eedd3ea60fd71e7235eafb2bd676966c054ea10 Thanks. Luca Boccassi --- >From 0eedd3ea60fd71e7235eafb2bd676966c054ea10 Mon Sep 17 00:00:00 2001 From: Igor Chauskin Date: Tue, 26 Jan 2021 19:32:26 +0100 Subject: [PATCH] net/ena: prevent double doorbell [ upstream commit 1d973d8f4c149523a15c1c0813f204bb89d4e588 ] 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. Fixes: c7519ea5eb8d ("net/ena: call additional doorbells if needed") 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.29.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2021-02-05 11:18:41.185024559 +0000 +++ 0272-net-ena-prevent-double-doorbell.patch 2021-02-05 11:18:29.358701621 +0000 @@ -1 +1 @@ -From 1d973d8f4c149523a15c1c0813f204bb89d4e588 Mon Sep 17 00:00:00 2001 +From 0eedd3ea60fd71e7235eafb2bd676966c054ea10 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 1d973d8f4c149523a15c1c0813f204bb89d4e588 ] + @@ -13 +14,0 @@ -Cc: stable@dpdk.org @@ -23 +24 @@ -index 8a937d7f27..7acbf5e305 100644 +index 4083568d5d..8baec80040 100644