diff mbox

[2/7] linux-generic: schedule: correct scheduling for ordered queues

Message ID 1441238841-25105-3-git-send-email-bill.fischofer@linaro.org
State Superseded
Headers show

Commit Message

Bill Fischofer Sept. 3, 2015, 12:07 a.m. UTC
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 <bill.fischofer@linaro.org>
---
 platform/linux-generic/odp_schedule.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
diff mbox

Patch

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;