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 2AC36A04B5; Fri, 30 Oct 2020 12:33:09 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A833BC908; Fri, 30 Oct 2020 12:31:46 +0100 (CET) Received: from mail-lj1-f196.google.com (mail-lj1-f196.google.com [209.85.208.196]) by dpdk.org (Postfix) with ESMTP id 2BDA3C87A for ; Fri, 30 Oct 2020 12:31:40 +0100 (CET) Received: by mail-lj1-f196.google.com with SMTP id y16so6529475ljk.1 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=O3kwx8ZwmrX/Ge1PCwF3T/f28VTM5AcP9aJL6BmThHwvf/Y7EC1YTP/NAv+YtlKscv GrjrsD3xbAWcLr+sZos69xmXABTcf1djzQpv9XT7S1UnXpvzbh4lVbNAqcsiLbuexM8u 4bh45IvvTB1z5+XFp/JPASlw51oQ1nL7Pt1WXwSnA04SuvDbvodBgefzRhNcBgpc9SVd jMa4s5I7sKzjykfHqY0JoeqMYBFkbGFscg0grhtSZjtYoL5xZ96U0j5TzFbT1q4DSJIS s4YS4y351HrXkr5G4FVASKzdfYCX8p42UJ4d5q8pfJTWctecNxSUm0P7/pXhKMTvnvJu WM2Q== X-Gm-Message-State: AOAM532WSGvqUuPxNF1WvTazFF2jA09Qg67Gpt+k1IjPuUBLSV/kNOv0 xFg+dWsiozQiJCQnb91TrHXxlWMFY5e0AA== 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-dev] [PATCH 4/6] net/ena/base: align IO cq allocation to a 4K 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" 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