From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf0-f50.google.com (mail-lf0-f50.google.com [209.85.215.50]) by dpdk.org (Postfix) with ESMTP id 4F0D22C0B for ; Mon, 10 Apr 2017 16:20:13 +0200 (CEST) Received: by mail-lf0-f50.google.com with SMTP id s141so35970156lfe.3 for ; Mon, 10 Apr 2017 07:20:13 -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=mzjf/eE1zvU0wYKNJXrG11d6r/8AF+vdrAnrtPTkCjc=; b=uvdksCYRYY/Ta1F222NPSyXZoUlXcNEXK3DVEOWemvJrFTUZrRlN+f/KkB3C2jeHtP KkoEkoWqJN3iqZUcig985En6k2qcuFxlJDzAVPRs6g5BFlpdR2Doxh5TIEb0smPVBIYR 0wkgao+PzgRDO5R9j56ttkuFHDLuKn7C89Q5w2iLaE7DIC9SUCVC5whkJV4j8NgE0hmQ AEGtRQhLPIUfPZYz7AnQp3UXvQ2V98Ol7L/xopaKzEcF8spCueIBf382VnvDf03Fh0t0 DnvZv8cngDMRGqkGGVZf2Qmx+ukiXVK4KlktOr3T8n0bb7/ADeT+1XC95Jy5+DlNerol a/GQ== 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=mzjf/eE1zvU0wYKNJXrG11d6r/8AF+vdrAnrtPTkCjc=; b=jAXP46TFq0VGBosZraGKDf3QvR6mbS3QtIOhKYfsCf45qb+gI3hqniN14RR+ZcwaE2 1SjrJmLtIglaN8mKaounG/G4IsLpDX2iWVCDae20SYprW2/lpTSh+Ert2g8D+xHCQkBa FEVX+ulkiLETI6oUpi9f1n6yT0CpNDmgMEZ0plQxQGUM0AshLaWxvqq9/S8EsbRraidm +iA/zQOW3YxaDCnJoHV0tWHhs8A4zZwxVTs++uVbwbm448DZyxTG9sPfk37xTmwj7Hcu gMe+v1tWbtxxGKJ6YVp7+OtVe8WqbG68r0CNAdpRS5k/cR6a9NTiPEQ4ge+FSiMW25P2 WtUA== X-Gm-Message-State: AN3rC/5GaG4duhubvA/q8x7KylgK/klkF2yht8NfyptwuDdJkICcJh/xn5lWxk5XCuu69A== X-Received: by 10.25.15.73 with SMTP id e70mr585309lfi.117.1491834012614; Mon, 10 Apr 2017 07:20:12 -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 n82sm2918528lje.12.2017.04.10.07.20.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 10 Apr 2017 07:20:11 -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, igorch@amazon.com, mw@semihalf.com, mk@semihalf.com Date: Mon, 10 Apr 2017 16:28:08 +0200 Message-Id: <1491834491-13944-2-git-send-email-mw@semihalf.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1491834491-13944-1-git-send-email-mw@semihalf.com> References: <1491834491-13944-1-git-send-email-mw@semihalf.com> Subject: [dpdk-dev] [PATCH v2 1/4] net/ena: fix incorrect Rx descriptors allocation 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: , X-List-Received-Date: Mon, 10 Apr 2017 14:20:14 -0000 From: Michal Krawczyk When application tried to allocate 1024 descriptors, device was not initializing properly. This patch solves it by avoiding allocation of all descriptors in the ring in one attempt. At least one descriptor must remain unused in the HW ring. Fixes: 1173fca25af9 ("ena: add polling-mode driver") Signed-off-by: Michal Krawczyk --- drivers/net/ena/ena_ethdev.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index b5e6db6..90cf2ad 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -919,7 +919,7 @@ static int ena_start(struct rte_eth_dev *dev) static int ena_queue_restart(struct ena_ring *ring) { - int rc; + int rc, bufs_num; ena_assert_msg(ring->configured == 1, "Trying to restart unconfigured queue\n"); @@ -930,8 +930,9 @@ static int ena_queue_restart(struct ena_ring *ring) if (ring->type == ENA_RING_TYPE_TX) return 0; - rc = ena_populate_rx_queue(ring, ring->ring_size); - if ((unsigned int)rc != ring->ring_size) { + bufs_num = ring->ring_size - 1; + rc = ena_populate_rx_queue(ring, bufs_num); + if (rc != bufs_num) { PMD_INIT_LOG(ERR, "Failed to populate rx ring !"); return (-1); } @@ -1143,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))); @@ -1574,6 +1575,7 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, recv_idx++; } + desc_in_use += 1; /* 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); -- 1.8.3.1