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 <[email protected]>
---
 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;
-- 
2.1.4

_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to