From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7A578A04B5 for ; Fri, 30 Oct 2020 12:31:53 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 710B9C8FE; Fri, 30 Oct 2020 12:31:46 +0100 (CET) Received: from mail-lj1-f194.google.com (mail-lj1-f194.google.com [209.85.208.194]) by dpdk.org (Postfix) with ESMTP id B2EE8C87A for ; Fri, 30 Oct 2020 12:31:40 +0100 (CET) Received: by mail-lj1-f194.google.com with SMTP id x16so6534141ljh.2 for ; Fri, 30 Oct 2020 04:31:40 -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 :mime-version:content-transfer-encoding; bh=fHElj95NNXNy6jlcj2KWw0f6C12yYHLLYb+TkqqXr+c=; b=XBwOop58BjM9EVG0HxJLH0gL6WkfjcXGPfGaFzGzndEb2dijwo3JD1Xz+0ng5l1Psq DMJynVzOZ/evr6sRitpyhfY209UJ+WaLIvMwkaXpTLeFjNeBdfKrwIOiScSeJz36VYgx yz8I0msstruqsG9mm+I144mCjKSjCHdrnDjILSayot+c1jFcVmJMR2eaz+U+X7ugLX0y dvj0VmGxdFrIkmf32gT8J3dhAvizgIPnkFQHoxyAQzbQmZ+TkO/ELHPQXmTuA3+uDT40 2T1p7EvaBQD0KfoeY+iKc4AbS79pwLeSntwGpXZ2FWcgYj/1QPeCtbNgFoUVTP8YW5oE 7mHA== 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=fHElj95NNXNy6jlcj2KWw0f6C12yYHLLYb+TkqqXr+c=; b=K1NnNlDtAIeWPw4w02gT/L2Z9xAha7nW22E8L2Qd/1hjbkp4pYBF24birjOC5t9ISb RSIfGLyuZP9p2d48kj++cCmRZqdmKAV/C04Ni5qH4KQJg09kZUz+6aR3RC8RgpVHTj4A 4xcHmGnCntgC2x2xC9LGAaOxsXkI0niRGKTF/guLRAo4pwzr3KO/r/l0I3yDPSTuv26F mf8KFUKbTASZuJMDjPa5WsK3fqoPm++SsNJCwnLC59xFY4lIqiqhn7Xwe3JesDLvhiOq XOaTDZEQYK+jaP5U5qz+jO4PqXwS8Hz8El7T/yLzLM2adxU8BKr1EjWlxLd5Izu2E290 YleQ== X-Gm-Message-State: AOAM530oYe4448OzPmfokyMIrFKEyag+rXdv3Fi47xxGrerFt13P747J JgM36aZj6nTrwSXsxfMzv1FOMg== X-Google-Smtp-Source: ABdhPJzoumzEd46g+12hEyfkApBbSxdLS+hpLwAlP0L7j5aleCgZL1Skfrq5wDmlYan5QgMcozmfkQ== X-Received: by 2002:a2e:9d8e:: with SMTP id c14mr776888ljj.392.1604057499363; Fri, 30 Oct 2020 04:31:39 -0700 (PDT) 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 m11sm596965lfa.112.2020.10.30.04.31.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Oct 2020 04:31:38 -0700 (PDT) From: Michal Krawczyk To: dev@dpdk.org Cc: mw@semihalf.com, igorch@amazon.com, gtzalik@amazon.com, Michal Krawczyk , stable@dpdk.org, Ido Segev , Amit Bernstein Date: Fri, 30 Oct 2020 12:31:19 +0100 Message-Id: <20201030113121.1310305-5-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201030113121.1310305-1-mk@semihalf.com> References: <20201030113121.1310305-1-mk@semihalf.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] [PATCH 4/6] net/ena/base: align IO cq allocation to a 4K X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 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" Latest generation HW requires IO completion queue descriptors to be aligned to a 4K in order to achieve the best performance. Because of that, the new allocation macros were added, which allows driver to allocate the memory with specified alignemnt. The previous allocation macros are now wrappers around the macros doing the alignment, with the alignment value equal to cacheline size. Fixes: b68309be44c0 ("net/ena/base: update communication layer for the ENAv2") Cc: stable@dpdk.org Signed-off-by: Ido Segev Signed-off-by: Michal Krawczyk Reviewed-by: Igor Chauskin Reviewed-by: Amit Bernstein --- drivers/net/ena/base/ena_com.c | 26 ++++++++++---------- drivers/net/ena/base/ena_com.h | 2 ++ drivers/net/ena/base/ena_plat_dpdk.h | 36 +++++++++++++++++++++------- 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/drivers/net/ena/base/ena_com.c b/drivers/net/ena/base/ena_com.c index 3686ae05c4..aae68721fb 100644 --- a/drivers/net/ena/base/ena_com.c +++ b/drivers/net/ena/base/ena_com.c @@ -413,19 +413,21 @@ static int ena_com_init_io_cq(struct ena_com_dev *ena_dev, size = io_cq->cdesc_entry_size_in_bytes * io_cq->q_depth; io_cq->bus = ena_dev->bus; - ENA_MEM_ALLOC_COHERENT_NODE(ena_dev->dmadev, - size, - io_cq->cdesc_addr.virt_addr, - io_cq->cdesc_addr.phys_addr, - io_cq->cdesc_addr.mem_handle, - ctx->numa_node, - prev_node); + ENA_MEM_ALLOC_COHERENT_NODE_ALIGNED(ena_dev->dmadev, + size, + io_cq->cdesc_addr.virt_addr, + io_cq->cdesc_addr.phys_addr, + io_cq->cdesc_addr.mem_handle, + ctx->numa_node, + prev_node, + ENA_CDESC_RING_SIZE_ALIGNMENT); if (!io_cq->cdesc_addr.virt_addr) { - ENA_MEM_ALLOC_COHERENT(ena_dev->dmadev, - size, - io_cq->cdesc_addr.virt_addr, - io_cq->cdesc_addr.phys_addr, - io_cq->cdesc_addr.mem_handle); + ENA_MEM_ALLOC_COHERENT_ALIGNED(ena_dev->dmadev, + size, + io_cq->cdesc_addr.virt_addr, + io_cq->cdesc_addr.phys_addr, + io_cq->cdesc_addr.mem_handle, + ENA_CDESC_RING_SIZE_ALIGNMENT); } if (!io_cq->cdesc_addr.virt_addr) { diff --git a/drivers/net/ena/base/ena_com.h b/drivers/net/ena/base/ena_com.h index 8eacaeab0e..64d8f247cb 100644 --- a/drivers/net/ena/base/ena_com.h +++ b/drivers/net/ena/base/ena_com.h @@ -23,6 +23,8 @@ #define ADMIN_CQ_SIZE(depth) ((depth) * sizeof(struct ena_admin_acq_entry)) #define ADMIN_AENQ_SIZE(depth) ((depth) * sizeof(struct ena_admin_aenq_entry)) +#define ENA_CDESC_RING_SIZE_ALIGNMENT (1 << 12) /* 4K */ + /*****************************************************************************/ /*****************************************************************************/ /* ENA adaptive interrupt moderation settings */ diff --git a/drivers/net/ena/base/ena_plat_dpdk.h b/drivers/net/ena/base/ena_plat_dpdk.h index a6782f3732..48c77f0c19 100644 --- a/drivers/net/ena/base/ena_plat_dpdk.h +++ b/drivers/net/ena/base/ena_plat_dpdk.h @@ -172,7 +172,8 @@ do { \ */ extern rte_atomic32_t ena_alloc_cnt; -#define ENA_MEM_ALLOC_COHERENT(dmadev, size, virt, phys, handle) \ +#define ENA_MEM_ALLOC_COHERENT_ALIGNED( \ + dmadev, size, virt, phys, handle, alignment) \ do { \ const struct rte_memzone *mz = NULL; \ ENA_TOUCH(dmadev); ENA_TOUCH(handle); \ @@ -181,9 +182,10 @@ extern rte_atomic32_t ena_alloc_cnt; snprintf(z_name, sizeof(z_name), \ "ena_alloc_%d", \ rte_atomic32_add_return(&ena_alloc_cnt, 1)); \ - mz = rte_memzone_reserve(z_name, size, \ + mz = rte_memzone_reserve_aligned(z_name, size, \ SOCKET_ID_ANY, \ - RTE_MEMZONE_IOVA_CONTIG); \ + RTE_MEMZONE_IOVA_CONTIG, \ + alignment); \ handle = mz; \ } \ if (mz == NULL) { \ @@ -195,13 +197,21 @@ extern rte_atomic32_t ena_alloc_cnt; phys = mz->iova; \ } \ } while (0) +#define ENA_MEM_ALLOC_COHERENT(dmadev, size, virt, phys, handle) \ + ENA_MEM_ALLOC_COHERENT_ALIGNED( \ + dmadev, \ + size, \ + virt, \ + phys, \ + handle, \ + RTE_CACHE_LINE_SIZE) #define ENA_MEM_FREE_COHERENT(dmadev, size, virt, phys, handle) \ ({ ENA_TOUCH(size); ENA_TOUCH(phys); \ ENA_TOUCH(dmadev); \ rte_memzone_free(handle); }) -#define ENA_MEM_ALLOC_COHERENT_NODE( \ - dmadev, size, virt, phys, mem_handle, node, dev_node) \ +#define ENA_MEM_ALLOC_COHERENT_NODE_ALIGNED( \ + dmadev, size, virt, phys, mem_handle, node, dev_node, alignment) \ do { \ const struct rte_memzone *mz = NULL; \ ENA_TOUCH(dmadev); ENA_TOUCH(dev_node); \ @@ -210,8 +220,8 @@ extern rte_atomic32_t ena_alloc_cnt; snprintf(z_name, sizeof(z_name), \ "ena_alloc_%d", \ rte_atomic32_add_return(&ena_alloc_cnt, 1)); \ - mz = rte_memzone_reserve(z_name, size, node, \ - RTE_MEMZONE_IOVA_CONTIG); \ + mz = rte_memzone_reserve_aligned(z_name, size, node, \ + RTE_MEMZONE_IOVA_CONTIG, alignment); \ mem_handle = mz; \ } \ if (mz == NULL) { \ @@ -223,7 +233,17 @@ extern rte_atomic32_t ena_alloc_cnt; phys = mz->iova; \ } \ } while (0) - +#define ENA_MEM_ALLOC_COHERENT_NODE( \ + dmadev, size, virt, phys, mem_handle, node, dev_node) \ + ENA_MEM_ALLOC_COHERENT_NODE_ALIGNED( \ + dmadev, \ + size, \ + virt, \ + phys, \ + mem_handle, \ + node, \ + dev_node, \ + RTE_CACHE_LINE_SIZE) #define ENA_MEM_ALLOC_NODE(dmadev, size, virt, node, dev_node) \ do { \ ENA_TOUCH(dmadev); ENA_TOUCH(dev_node); \ -- 2.25.1