From patchwork Fri Apr 7 10:48:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 23320 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 75F165398; Fri, 7 Apr 2017 12:41:23 +0200 (CEST) Received: from mail-lf0-f53.google.com (mail-lf0-f53.google.com [209.85.215.53]) by dpdk.org (Postfix) with ESMTP id 11EB4376F for ; Fri, 7 Apr 2017 12:41:17 +0200 (CEST) Received: by mail-lf0-f53.google.com with SMTP id h125so39997912lfe.0 for ; Fri, 07 Apr 2017 03:41:17 -0700 (PDT) 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; bh=VlD/oeWFSYqkuBhn4lesCXocjLkdGSXDnD4Hj6NSk8w=; b=Ue6GMzlNtIPrbcbWBJdnEbtEctUxOSiD04bLGSxny50GCSz7IrUpwtICB+magdKX1H WMSqz+g/kxi7oNBdZsYDPLAbFAn05GCjs+Hv/PPRiiqpPRmAD/gdQjuiiwRwGfrNTg4j WkkIRfyWaYG3XQlkR9ePel27jo6558+8aSAsS24+cGUYwiN1T275MTbhGlutLx0v0Zon oerPazf0PPp7kWjGdB6hciyF7fKi6em/oeIRtCKhasoOK0dvH4qbG5wTHbIbfOD4gGDn u1sl8TIgKBncWiqoevnY75MeVyg8GWGTP1/X/dmaVlrhO5b8LcMCPhPwrgvsOj76ZlS7 4Uyg== 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; bh=VlD/oeWFSYqkuBhn4lesCXocjLkdGSXDnD4Hj6NSk8w=; b=J54uDJCSaz39sdKeHt9Qb7IzGv3vaztdfsKZrfkkTPa5b5sR8aqrnYkgXOuScWCRHf gJ9yCqKZeMRjgNR3thRY+FHw7LwSnafziODGK9JFStNYWOBder36VSgrjrymarLdCWUq AO6Wfr1defnDOeiSjaEOtSf2dJ3VBcO+sImsSaEimk/dIPuuxE6MdMRHkHT6zQQvLdJq VWi0uDhriZDYknhIXLczEC1A+RWq0M+XNCrOWs6w+PsTJwLmxXtg/Ve5NuZw0IkecEqM 08QAIufoCG2/UJp+ZNCkxYZPdqBcgZHHtlwVkdW8idkXQ8ESLSFuEg+aBE3JhnUdp0Xi Zv1g== X-Gm-Message-State: AFeK/H39ZWXNZHeCw0F89t0KtCbQ3Y+TyVE4+r/nXTJFAgmEoSnnsJeZZ5VUNJk8ZQ8mZg== X-Received: by 10.46.69.198 with SMTP id s189mr11247091lja.63.1491561675736; Fri, 07 Apr 2017 03:41:15 -0700 (PDT) Received: from enkidu.local (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id g3sm873290lfe.34.2017.04.07.03.41.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 07 Apr 2017 03:41:15 -0700 (PDT) From: Marcin Wojtas To: dev@dpdk.org Cc: jan.medala@outlook.com, jpalider@gmail.com, netanel@amazon.com, evgenys@amazon.com, matua@amazon.com, gtzalik@amazon.com, mw@semihalf.com, mk@semihalf.com Date: Fri, 7 Apr 2017 12:48:56 +0200 Message-Id: <1491562138-2178-3-git-send-email-mw@semihalf.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1491562138-2178-1-git-send-email-mw@semihalf.com> References: <1491562138-2178-1-git-send-email-mw@semihalf.com> Subject: [dpdk-dev] [PATCH 2/4] net/ena: fix delayed cleanup of Rx descriptors 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: Michal Krawczyk On RX path, after receiving bunch of packets, variable tracking available descriptors in HW queue was not updated. To fix this issue, additional variable was added which is storing number of depleted descriptors updated by number of descriptors used in this cycle. Finally whole number is substracted by one to do not refill all descriptors what is required by the driver. Fixes: 1daff5260ff8 ("net/ena: use unmasked head and tail") Signed-off-by: Michal Krawczyk --- drivers/net/ena/ena_ethdev.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 2345bab..d875a2b 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1144,7 +1144,7 @@ static int ena_populate_rx_queue(struct ena_ring *rxq, unsigned int count) return 0; in_use = rxq->next_to_use - rxq->next_to_clean; - ena_assert_msg(((in_use + count) <= ring_size), "bad ring state"); + ena_assert_msg(((in_use + count) < ring_size), "bad ring state"); count = RTE_MIN(count, (uint16_t)(ring_size - (next_to_use & ring_mask))); @@ -1504,7 +1504,7 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, unsigned int ring_size = rx_ring->ring_size; unsigned int ring_mask = ring_size - 1; uint16_t next_to_clean = rx_ring->next_to_clean; - uint16_t desc_in_use = 0; + uint16_t desc_in_use, desc_to_refill; unsigned int recv_idx = 0; struct rte_mbuf *mbuf = NULL; struct rte_mbuf *mbuf_head = NULL; @@ -1575,12 +1575,13 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, recv_idx++; } - /* Burst refill to save doorbells, memory barriers, const interval */ - if (ring_size - desc_in_use > ENA_RING_DESCS_RATIO(ring_size)) - ena_populate_rx_queue(rx_ring, ring_size - desc_in_use); - rx_ring->next_to_clean = next_to_clean; + desc_to_refill = ring_size - desc_in_use + completed - 1; + /* Burst refill to save doorbells, memory barriers, const interval */ + if (desc_to_refill > ENA_RING_DESCS_RATIO(ring_size)) + ena_populate_rx_queue(rx_ring, desc_to_refill); + return recv_idx; }