[v3,1/5] mem: fix error code for segment fd API for external segs
Checks
Commit Message
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 <anatoly.burakov@intel.com>
Acked-by: Tiwei Bie <tiwei.bie@intel.com>
---
Notes:
The API is experimental, no deprecation notice needed.
doc/guides/rel_notes/release_19_02.rst | 6 ++++++
lib/librte_eal/common/eal_common_memory.c | 12 ++++++++++++
2 files changed, 18 insertions(+)
Comments
On 12/13/18 12:43 PM, Anatoly Burakov wrote:
> 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 <anatoly.burakov@intel.com>
> Acked-by: Tiwei Bie <tiwei.bie@intel.com>
> ---
>
> Notes:
> The API is experimental, no deprecation notice needed.
>
> doc/guides/rel_notes/release_19_02.rst | 6 ++++++
> lib/librte_eal/common/eal_common_memory.c | 12 ++++++++++++
> 2 files changed, 18 insertions(+)
>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
@@ -84,6 +84,12 @@ API Changes
=========================================================
+* 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
+
+
ABI Changes
-----------
@@ -704,6 +704,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;
@@ -754,6 +760,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;