aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2018-12-04 13:51:43 +0200
committerMaxim Uvarov <maxim.uvarov@linaro.org>2018-12-13 12:30:19 +0300
commitac56bfe0914da970062c4665971906e30227dcec (patch)
tree25300e53e21cf7491f43ac8543cd58d50e2774a6
parent58ed28e2469265aa10b1de3375258d209859d026 (diff)
Port ec1695108 "linux-gen: sched: implement min/max/default prio functions"
Signed-off-by: Matias Elo <matias.elo@nokia.com> Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
-rw-r--r--platform/linux-dpdk/odp_queue_basic.c20
-rw-r--r--platform/linux-dpdk/odp_schedule_if.c15
2 files changed, 29 insertions, 6 deletions
diff --git a/platform/linux-dpdk/odp_queue_basic.c b/platform/linux-dpdk/odp_queue_basic.c
index 6abf26b29..fec032ef0 100644
--- a/platform/linux-dpdk/odp_queue_basic.c
+++ b/platform/linux-dpdk/odp_queue_basic.c
@@ -252,21 +252,31 @@ static odp_queue_t queue_create(const char *name,
uint32_t i;
queue_entry_t *queue;
void *queue_lf;
- odp_queue_t handle = ODP_QUEUE_INVALID;
- odp_queue_type_t type = ODP_QUEUE_TYPE_PLAIN;
+ odp_queue_type_t type;
odp_queue_param_t default_param;
+ odp_queue_t handle = ODP_QUEUE_INVALID;
if (param == NULL) {
odp_queue_param_init(&default_param);
param = &default_param;
}
+ type = param->type;
+
+ if (type == ODP_QUEUE_TYPE_SCHED) {
+ if (param->sched.prio < odp_schedule_min_prio() ||
+ param->sched.prio > odp_schedule_max_prio()) {
+ ODP_ERR("Bad queue priority: %i\n", param->sched.prio);
+ return ODP_QUEUE_INVALID;
+ }
+ }
+
if (param->nonblocking == ODP_BLOCKING) {
if (param->size > queue_glb->config.max_queue_size)
return ODP_QUEUE_INVALID;
} else if (param->nonblocking == ODP_NONBLOCKING_LF) {
/* Only plain type lock-free queues supported */
- if (param->type != ODP_QUEUE_TYPE_PLAIN)
+ if (type != ODP_QUEUE_TYPE_PLAIN)
return ODP_QUEUE_INVALID;
if (param->size > queue_glb->queue_lf_size)
return ODP_QUEUE_INVALID;
@@ -309,8 +319,6 @@ static odp_queue_t queue_create(const char *name,
queue->s.orig_dequeue_multi = lf_fn->deq_multi;
}
- type = queue->s.type;
-
if (type == ODP_QUEUE_TYPE_SCHED)
queue->s.status = QUEUE_STATUS_NOTSCHED;
else
@@ -565,7 +573,7 @@ static void queue_param_init(odp_queue_param_t *params)
params->enq_mode = ODP_QUEUE_OP_MT;
params->deq_mode = ODP_QUEUE_OP_MT;
params->nonblocking = ODP_BLOCKING;
- params->sched.prio = ODP_SCHED_PRIO_DEFAULT;
+ params->sched.prio = odp_schedule_default_prio();
params->sched.sync = ODP_SCHED_SYNC_PARALLEL;
params->sched.group = ODP_SCHED_GROUP_ALL;
}
diff --git a/platform/linux-dpdk/odp_schedule_if.c b/platform/linux-dpdk/odp_schedule_if.c
index 744723bf9..f402a9faa 100644
--- a/platform/linux-dpdk/odp_schedule_if.c
+++ b/platform/linux-dpdk/odp_schedule_if.c
@@ -63,6 +63,21 @@ void odp_schedule_prefetch(int num)
return sched_api->schedule_prefetch(num);
}
+int odp_schedule_min_prio(void)
+{
+ return sched_api->schedule_min_prio();
+}
+
+int odp_schedule_max_prio(void)
+{
+ return sched_api->schedule_max_prio();
+}
+
+int odp_schedule_default_prio(void)
+{
+ return sched_api->schedule_default_prio();
+}
+
int odp_schedule_num_prio(void)
{
return sched_api->schedule_num_prio();