diff options
author | Matias Elo <matias.elo@nokia.com> | 2018-12-04 13:51:43 +0200 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2018-12-13 12:30:19 +0300 |
commit | ac56bfe0914da970062c4665971906e30227dcec (patch) | |
tree | 25300e53e21cf7491f43ac8543cd58d50e2774a6 | |
parent | 58ed28e2469265aa10b1de3375258d209859d026 (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.c | 20 | ||||
-rw-r--r-- | platform/linux-dpdk/odp_schedule_if.c | 15 |
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(); |