diff options
author | Matias Elo <matias.elo@nokia.com> | 2023-09-27 15:21:26 +0300 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2023-10-20 22:53:40 +0300 |
commit | 319bb59816b54f0b8e8291c7687aff6366a0f2a4 (patch) | |
tree | e12d565a502dad91009c6f56d1b1ccde87a6e1d6 | |
parent | 978e1f6480c0cb66eddcd234dbc7d729fd97308e (diff) |
linux-gen: queue: implement odp_queue_destroy_multi() function
Implement new odp_queue_destroy_multi() function for destroying multiple
queues with a single call.
Signed-off-by: Matias Elo <matias.elo@nokia.com>
Reviewed-by: Petri Savolainen <petri.savolainen@nokia.com>
-rw-r--r-- | platform/linux-generic/include/odp/api/plat/queue_inline_types.h | 1 | ||||
-rw-r--r-- | platform/linux-generic/odp_queue_basic.c | 18 | ||||
-rw-r--r-- | platform/linux-generic/odp_queue_if.c | 5 | ||||
-rw-r--r-- | platform/linux-generic/odp_queue_scalable.c | 18 |
4 files changed, 42 insertions, 0 deletions
diff --git a/platform/linux-generic/include/odp/api/plat/queue_inline_types.h b/platform/linux-generic/include/odp/api/plat/queue_inline_types.h index 9ad037e4d..593942072 100644 --- a/platform/linux-generic/include/odp/api/plat/queue_inline_types.h +++ b/platform/linux-generic/include/odp/api/plat/queue_inline_types.h @@ -38,6 +38,7 @@ typedef struct { odp_bool_t share_param, odp_queue_t queue[], int num); int (*queue_destroy)(odp_queue_t queue); + int (*queue_destroy_multi)(odp_queue_t queue[], int num); odp_queue_t (*queue_lookup)(const char *name); int (*queue_capability)(odp_queue_capability_t *capa); int (*queue_context_set)(odp_queue_t queue, void *context, diff --git a/platform/linux-generic/odp_queue_basic.c b/platform/linux-generic/odp_queue_basic.c index 70f05be0e..f9700742c 100644 --- a/platform/linux-generic/odp_queue_basic.c +++ b/platform/linux-generic/odp_queue_basic.c @@ -463,6 +463,23 @@ static int queue_destroy(odp_queue_t handle) return 0; } +static int queue_destroy_multi(odp_queue_t handle[], int num) +{ + int i; + + _ODP_ASSERT(handle != NULL); + _ODP_ASSERT(num > 0); + + for (i = 0; i < num; i++) { + int ret = queue_destroy(handle[i]); + + if (ret) + return (i == 0) ? ret : i; + } + + return i; +} + static int queue_context_set(odp_queue_t handle, void *context, uint32_t len ODP_UNUSED) { @@ -1246,6 +1263,7 @@ _odp_queue_api_fn_t _odp_queue_basic_api = { .queue_create = queue_create, .queue_create_multi = queue_create_multi, .queue_destroy = queue_destroy, + .queue_destroy_multi = queue_destroy_multi, .queue_lookup = queue_lookup, .queue_capability = queue_capability, .queue_context_set = queue_context_set, diff --git a/platform/linux-generic/odp_queue_if.c b/platform/linux-generic/odp_queue_if.c index fc08fdca8..cc6594afd 100644 --- a/platform/linux-generic/odp_queue_if.c +++ b/platform/linux-generic/odp_queue_if.c @@ -49,6 +49,11 @@ int odp_queue_destroy(odp_queue_t queue) return _odp_queue_api->queue_destroy(queue); } +int odp_queue_destroy_multi(odp_queue_t queue[], int num) +{ + return _odp_queue_api->queue_destroy_multi(queue, num); +} + odp_queue_t odp_queue_lookup(const char *name) { return _odp_queue_api->queue_lookup(name); diff --git a/platform/linux-generic/odp_queue_scalable.c b/platform/linux-generic/odp_queue_scalable.c index 1c7e8f91e..c7040dd3c 100644 --- a/platform/linux-generic/odp_queue_scalable.c +++ b/platform/linux-generic/odp_queue_scalable.c @@ -499,6 +499,23 @@ static int queue_destroy(odp_queue_t handle) return 0; } +static int queue_destroy_multi(odp_queue_t handle[], int num) +{ + int i; + + _ODP_ASSERT(handle != NULL); + _ODP_ASSERT(num > 0); + + for (i = 0; i < num; i++) { + int ret = queue_destroy(handle[i]); + + if (ret) + return (i == 0) ? ret : i; + } + + return i; +} + static int queue_context_set(odp_queue_t handle, void *context, uint32_t len ODP_UNUSED) { @@ -1162,6 +1179,7 @@ _odp_queue_api_fn_t _odp_queue_scalable_api = { .queue_create = queue_create, .queue_create_multi = queue_create_multi, .queue_destroy = queue_destroy, + .queue_destroy_multi = queue_destroy_multi, .queue_lookup = queue_lookup, .queue_capability = queue_capability, .queue_context_set = queue_context_set, |