From 525670756a566b3efa88eeae53755a770f0c14fe Mon Sep 17 00:00:00 2001 From: Anatoly Burakov Date: Thu, 13 Dec 2018 11:43:15 +0000 Subject: [PATCH] mem: fix segment fd API error code for external segment Segment fd API does not support getting segment fd's from externally allocated memory, so return proper error code on any attempts to do so. This changes API behavior, so document the change as well. Fixes: 5282bb1c3695 ("mem: allow memseg lists to be marked as external") 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 | 5 +++++ lib/librte_eal/common/eal_common_memory.c | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/doc/guides/rel_notes/release_19_02.rst b/doc/guides/rel_notes/release_19_02.rst index c1fa8843e2..63e84fef78 100644 --- a/doc/guides/rel_notes/release_19_02.rst +++ b/doc/guides/rel_notes/release_19_02.rst @@ -109,6 +109,11 @@ API Changes Also, make sure to start the actual text at the margin. ========================================================= +* eal: Segment fd API on Linux now sets error code to ``ENOTSUP`` in more cases + where segment fd API is not expected to be supported: + + - On attempt to get segment fd for an externally allocated memory segment + * pdump: The ``rte_pdump_set_socket_dir()``, the parameter ``path`` of ``rte_pdump_init()`` and enum ``rte_pdump_socktype`` were deprecated since 18.05 and are removed in this release. diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c index 051159f803..c9da69b164 100644 --- a/lib/librte_eal/common/eal_common_memory.c +++ b/lib/librte_eal/common/eal_common_memory.c @@ -705,6 +705,12 @@ rte_memseg_get_fd_thread_unsafe(const struct rte_memseg *ms) return -1; } + /* segment fd API is not supported for external segments */ + if (msl->external) { + rte_errno = ENOTSUP; + return -1; + } + ret = eal_memalloc_get_seg_fd(msl_idx, seg_idx); if (ret < 0) { rte_errno = -ret; @@ -755,6 +761,12 @@ rte_memseg_get_fd_offset_thread_unsafe(const struct rte_memseg *ms, return -1; } + /* segment fd API is not supported for external segments */ + if (msl->external) { + rte_errno = ENOTSUP; + return -1; + } + ret = eal_memalloc_get_seg_fd_offset(msl_idx, seg_idx, offset); if (ret < 0) { rte_errno = -ret; -- 2.20.1