aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2023-09-27 15:21:26 +0300
committerMatias Elo <matias.elo@nokia.com>2023-10-20 22:53:40 +0300
commit319bb59816b54f0b8e8291c7687aff6366a0f2a4 (patch)
treee12d565a502dad91009c6f56d1b1ccde87a6e1d6
parent978e1f6480c0cb66eddcd234dbc7d729fd97308e (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.h1
-rw-r--r--platform/linux-generic/odp_queue_basic.c18
-rw-r--r--platform/linux-generic/odp_queue_if.c5
-rw-r--r--platform/linux-generic/odp_queue_scalable.c18
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,