From ef7861b1fdb7e0ff689a175eca2cc81e1f8d1cfc Mon Sep 17 00:00:00 2001 From: Bill Fischofer Date: Thu, 3 Sep 2015 10:16:34 -0500 Subject: linux-generic: schedule: correct scheduling for ordered queues Ordered queues must be rescheduled before caching context locally to avoid contaminating the scheduler poll queues with false ordering info. Signed-off-by: Bill Fischofer Reviewed-and-Tested-by: Maxim Uvarov Signed-off-by: Maxim Uvarov --- platform/linux-generic/odp_schedule.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/platform/linux-generic/odp_schedule.c b/platform/linux-generic/odp_schedule.c index d2543ad..a88ba4d 100644 --- a/platform/linux-generic/odp_schedule.c +++ b/platform/linux-generic/odp_schedule.c @@ -544,14 +544,16 @@ static int schedule(odp_queue_t *out_queue, odp_event_t out_ev[], ret = copy_events(out_ev, max_num); if (queue_is_ordered(qe)) { + /* Continue scheduling ordered queues */ + if (odp_queue_enq(pri_q, ev)) + ODP_ABORT("schedule failed\n"); + /* Cache order info about this event */ sched_local.origin_qe = qe; sched_local.order = sched_local.buf_hdr[0]->order; sched_local.sync = sched_local.buf_hdr[0]->sync; sched_local.enq_called = 0; - if (odp_queue_enq(pri_q, ev)) - ODP_ABORT("schedule failed\n"); } else if (queue_is_atomic(qe)) { /* Hold queue during atomic access */ sched_local.pri_queue = pri_q; -- cgit v1.2.3