From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 17E5D1B49D for ; Fri, 4 Jan 2019 14:27:26 +0100 (CET) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 77B61C058CA9; Fri, 4 Jan 2019 13:27:25 +0000 (UTC) Received: from ktraynor.remote.csb (ovpn-117-13.ams2.redhat.com [10.36.117.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id C376B5C1A1; Fri, 4 Jan 2019 13:27:23 +0000 (UTC) From: Kevin Traynor To: Anatoly Burakov Cc: Tiwei Bie , Maxime Coquelin , dpdk stable Date: Fri, 4 Jan 2019 13:24:17 +0000 Message-Id: <20190104132455.15170-35-ktraynor@redhat.com> In-Reply-To: <20190104132455.15170-1-ktraynor@redhat.com> References: <20190104132455.15170-1-ktraynor@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Fri, 04 Jan 2019 13:27:25 +0000 (UTC) Subject: [dpdk-stable] patch 'mem: check for memfd support in segment fd API' has been queued to LTS release 18.11.1 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: , X-List-Received-Date: Fri, 04 Jan 2019 13:27:26 -0000 Hi, FYI, your patch has been queued to LTS release 18.11.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 01/11/19. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Thanks. Kevin Traynor --- >>From 906d790a95f4358b5b6a3029bbfc157bcedb007a Mon Sep 17 00:00:00 2001 From: Anatoly Burakov Date: Thu, 13 Dec 2018 11:43:16 +0000 Subject: [PATCH] mem: check for memfd support in segment fd API [ upstream commit d75eea314504834d18a94835ad858e3ecd0f8e41 ] If memfd support was not compiled, or hugepage memfd support is not available at runtime, the API will now return proper error code, indicating that this API is unsupported. This changes the API, so document the changes. Fixes: 41dbdb68723b ("mem: add external API to retrieve page fd") Fixes: 3a44687139eb ("mem: allow querying offset into segment fd") Signed-off-by: Anatoly Burakov Acked-by: Tiwei Bie Reviewed-by: Maxime Coquelin --- lib/librte_eal/linuxapp/eal/eal_memalloc.c | 40 +++++++++++++++++----- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_memalloc.c b/lib/librte_eal/linuxapp/eal/eal_memalloc.c index 784939566..a93548b8c 100644 --- a/lib/librte_eal/linuxapp/eal/eal_memalloc.c +++ b/lib/librte_eal/linuxapp/eal/eal_memalloc.c @@ -24,4 +24,8 @@ #include #include +#ifdef F_ADD_SEALS /* if file sealing is supported, so is memfd */ +#include +#define MEMFD_SUPPORTED +#endif #ifdef RTE_EAL_NUMA_AWARE_HUGEPAGES #include @@ -54,6 +58,6 @@ const int anonymous_hugepages_supported = /* - * we don't actually care if memfd itself is supported - we only need to check - * if memfd supports hugetlbfs, as that already implies memfd support. + * we've already checked memfd support at compile-time, but we also need to + * check if we can create hugepage files with memfd. * * also, this is not a constant, because while we may be *compiled* with memfd @@ -64,8 +68,9 @@ const int anonymous_hugepages_supported = static int memfd_create_supported = #ifdef MFD_HUGETLB -#define MEMFD_SUPPORTED 1; +#define RTE_MFD_HUGETLB MFD_HUGETLB #else 0; +#define RTE_MFD_HUGETLB 4U #endif @@ -339,10 +344,10 @@ get_seg_memfd(struct hugepage_info *hi __rte_unused, char segname[250]; /* as per manpage, limit is 249 bytes plus null */ + int flags = RTE_MFD_HUGETLB | pagesz_flags(hi->hugepage_sz); + if (internal_config.single_file_segments) { fd = fd_list[list_idx].memseg_list_fd; if (fd < 0) { - int flags = MFD_HUGETLB | pagesz_flags(hi->hugepage_sz); - snprintf(segname, sizeof(segname), "seg_%i", list_idx); fd = memfd_create(segname, flags); @@ -358,6 +363,4 @@ get_seg_memfd(struct hugepage_info *hi __rte_unused, if (fd < 0) { - int flags = MFD_HUGETLB | pagesz_flags(hi->hugepage_sz); - snprintf(segname, sizeof(segname), "seg_%i-%i", list_idx, seg_idx); @@ -1543,4 +1546,15 @@ eal_memalloc_get_seg_fd(int list_idx, int seg_idx) { int fd; + + if (internal_config.in_memory || internal_config.no_hugetlbfs) { +#ifndef MEMFD_SUPPORTED + /* in in-memory or no-huge mode, we rely on memfd support */ + return -ENOTSUP; +#endif + /* memfd supported, but hugetlbfs memfd may not be */ + if (!internal_config.no_hugetlbfs && !memfd_create_supported) + return -ENOTSUP; + } + if (internal_config.single_file_segments) { fd = fd_list[list_idx].memseg_list_fd; @@ -1566,5 +1580,5 @@ test_memfd_create(void) int flags; - flags = pagesz_flag | MFD_HUGETLB; + flags = pagesz_flag | RTE_MFD_HUGETLB; int fd = memfd_create("test", flags); if (fd < 0) { @@ -1590,4 +1604,14 @@ eal_memalloc_get_seg_fd_offset(int list_idx, int seg_idx, size_t *offset) struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; + if (internal_config.in_memory || internal_config.no_hugetlbfs) { +#ifndef MEMFD_SUPPORTED + /* in in-memory or no-huge mode, we rely on memfd support */ + return -ENOTSUP; +#endif + /* memfd supported, but hugetlbfs memfd may not be */ + if (!internal_config.no_hugetlbfs && !memfd_create_supported) + return -ENOTSUP; + } + /* fd_list not initialized? */ if (fd_list[list_idx].len == 0) -- 2.19.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2019-01-04 13:23:08.281204253 +0000 +++ 0035-mem-check-for-memfd-support-in-segment-fd-API.patch 2019-01-04 13:23:07.000000000 +0000 @@ -1,8 +1,10 @@ -From d75eea314504834d18a94835ad858e3ecd0f8e41 Mon Sep 17 00:00:00 2001 +From 906d790a95f4358b5b6a3029bbfc157bcedb007a Mon Sep 17 00:00:00 2001 From: Anatoly Burakov Date: Thu, 13 Dec 2018 11:43:16 +0000 Subject: [PATCH] mem: check for memfd support in segment fd API +[ upstream commit d75eea314504834d18a94835ad858e3ecd0f8e41 ] + If memfd support was not compiled, or hugepage memfd support is not available at runtime, the API will now return proper error code, indicating that this API is unsupported. This @@ -10,27 +12,14 @@ Fixes: 41dbdb68723b ("mem: add external API to retrieve page fd") Fixes: 3a44687139eb ("mem: allow querying offset into segment fd") -Cc: stable@dpdk.org Signed-off-by: Anatoly Burakov Acked-by: Tiwei Bie Reviewed-by: Maxime Coquelin --- - doc/guides/rel_notes/release_19_02.rst | 2 ++ lib/librte_eal/linuxapp/eal/eal_memalloc.c | 40 +++++++++++++++++----- - 2 files changed, 34 insertions(+), 8 deletions(-) + 1 file changed, 32 insertions(+), 8 deletions(-) -diff --git a/doc/guides/rel_notes/release_19_02.rst b/doc/guides/rel_notes/release_19_02.rst -index 63e84fef7..010cac1d4 100644 ---- a/doc/guides/rel_notes/release_19_02.rst -+++ b/doc/guides/rel_notes/release_19_02.rst -@@ -114,4 +114,6 @@ API Changes - - - On attempt to get segment fd for an externally allocated memory segment -+ - In cases where memfd support would have been required to provide segment -+ fd's (such as in-memory or no-huge mode) - - * pdump: The ``rte_pdump_set_socket_dir()``, the parameter ``path`` of diff --git a/lib/librte_eal/linuxapp/eal/eal_memalloc.c b/lib/librte_eal/linuxapp/eal/eal_memalloc.c index 784939566..a93548b8c 100644 --- a/lib/librte_eal/linuxapp/eal/eal_memalloc.c