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 6628BA051A for ; Fri, 17 Jan 2020 15:34:37 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 420582B9E; Fri, 17 Jan 2020 15:34:37 +0100 (CET) Received: from proxy.6wind.com (host.76.145.23.62.rev.coltfrance.com [62.23.145.76]) by dpdk.org (Postfix) with ESMTP id CC65C235; Fri, 17 Jan 2020 15:34:33 +0100 (CET) Received: from glumotte.dev.6wind.com. (unknown [10.16.0.195]) by proxy.6wind.com (Postfix) with ESMTP id A0B2A36DCD9; Fri, 17 Jan 2020 15:34:33 +0100 (CET) From: Olivier Matz To: dev@dpdk.org Cc: Andrew Rybchenko , stable@dpdk.org Date: Fri, 17 Jan 2020 15:34:29 +0100 Message-Id: <20200117143429.10120-1-olivier.matz@6wind.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] [PATCH] mempool: fix anonymous populate 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" The documentation says that a negative errno is returned on error, but in most places that's not the case. Fix the documentation and the exceptions in code. The second one (return from populate_virt) also fixes a memory leak. Note that testpmd was using the function correctly. Fixes: aa10457eb4c2 ("mempool: make mempool populate and free api public") Fixes: 6780f72fb82f ("mempool: populate with anonymous memory") Fixes: 66e7ba0bad4c ("mempool: ensure mempool is initialized before populating") Cc: stable@dpdk.org Signed-off-by: Olivier Matz --- lib/librte_mempool/rte_mempool.c | 10 +++++++--- lib/librte_mempool/rte_mempool.h | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c index 78d8eb941..f8d453d21 100644 --- a/lib/librte_mempool/rte_mempool.c +++ b/lib/librte_mempool/rte_mempool.c @@ -645,8 +645,10 @@ rte_mempool_populate_anon(struct rte_mempool *mp) } ret = mempool_ops_alloc_once(mp); - if (ret != 0) - return ret; + if (ret < 0) { + rte_errno = -ret; + return 0; + } size = get_anon_size(mp); if (size < 0) { @@ -670,8 +672,10 @@ rte_mempool_populate_anon(struct rte_mempool *mp) ret = rte_mempool_populate_virt(mp, addr, size, getpagesize(), rte_mempool_memchunk_anon_free, addr); - if (ret == 0) + if (ret < 0) { + rte_errno = -ret; goto fail; + } return mp->populated_size; diff --git a/lib/librte_mempool/rte_mempool.h b/lib/librte_mempool/rte_mempool.h index f81152af9..0a1dc6059 100644 --- a/lib/librte_mempool/rte_mempool.h +++ b/lib/librte_mempool/rte_mempool.h @@ -1167,8 +1167,8 @@ int rte_mempool_populate_default(struct rte_mempool *mp); * A pointer to the mempool structure. * @return * The number of objects added on success. - * On error, the chunk is not added in the memory list of the - * mempool and a negative errno is returned. + * On error, 0 is returned, rte_errno is set, and the chunk is not added in + * the memory list of the mempool. */ int rte_mempool_populate_anon(struct rte_mempool *mp); -- 2.20.1