On 10/30/2015 14:14, Bill Fischofer wrote:
Thanks. I believe it should still be merged as it's much more
reliable than before, and the CUnit test is more thorough, which is
how we found the base problem. If there are still issues they should
be addressed as another bug item.
For now CI pass for master. I guess if I will include that patches to
master test will start failing.
Maxim.
On Fri, Oct 30, 2015 at 2:53 AM, Maxim Uvarov <[email protected]
<mailto:[email protected]>> wrote:
Bill,
I merged but looks like it was not tested enough. Usually it
passes, but in some cases it fails:
1. scheduler.c:577 - bctx->sequence == seq
2. scheduler.c:577 - bctx->sequence == seq
I can reproduce issue with that script:
while true; do ./test/validation/scheduler/scheduler_main 2>&1
|grep FAIL; done
Test: scheduler_test_mq_mt_prio_o ...FAILED
Test: scheduler_test_mq_mt_prio_o ...FAILED
Test: scheduler_test_multi_mq_mt_prio_o ...FAILED
Test: scheduler_test_mq_mt_prio_o ...FAILED
Test: scheduler_test_mq_mt_prio_o ...FAILED
Test: scheduler_test_multi_mq_mt_prio_o ...FAILED
Test: scheduler_test_multi_mq_mt_prio_o ...FAILED
Test: scheduler_test_multi_mq_mt_prio_o ...FAILED
Test: scheduler_test_mq_mt_prio_o ...FAILED
Maxim.
On 10/30/2015 10:14, Maxim Uvarov wrote:
Merged to api-next.
Will merge to master soon.
Maxim.
On 10/29/2015 05:32, Bill Fischofer wrote:
During odp_schedule_release_ordered() processing in order
elements
on a reorder queue should be processed even if they are
marked sustain
since no further elements with the current order will be
enqueued.
This fixes Bug https://bugs.linaro.org/show_bug.cgi?id=1824
Signed-off-by: Bill Fischofer <[email protected]
<mailto:[email protected]>>
---
platform/linux-generic/include/odp_queue_internal.h | 5 +++--
platform/linux-generic/odp_queue.c | 18 +++++++++++-------
2 files changed, 14 insertions(+), 9 deletions(-)
diff --git
a/platform/linux-generic/include/odp_queue_internal.h
b/platform/linux-generic/include/odp_queue_internal.h
index c322e6a..6322948 100644
--- a/platform/linux-generic/include/odp_queue_internal.h
+++ b/platform/linux-generic/include/odp_queue_internal.h
@@ -291,7 +291,8 @@ static inline int
reorder_deq(queue_entry_t *queue,
static inline void reorder_complete(queue_entry_t
*origin_qe,
odp_buffer_hdr_t **reorder_buf_return,
odp_buffer_hdr_t **placeholder_buf,
- int placeholder_append)
+ int placeholder_append,
+ int order_released)
{
odp_buffer_hdr_t *reorder_buf =
origin_qe->s.reorder_head;
odp_buffer_hdr_t *next_buf;
@@ -311,7 +312,7 @@ static inline void
reorder_complete(queue_entry_t *origin_qe,
reorder_buf = next_buf;
order_release(origin_qe, 1);
- } else if (reorder_buf->flags.sustain) {
+ } else if (!order_released &&
reorder_buf->flags.sustain) {
reorder_buf = next_buf;
} else {
*reorder_buf_return = origin_qe->s.reorder_head;
diff --git a/platform/linux-generic/odp_queue.c
b/platform/linux-generic/odp_queue.c
index a7022cf..a27af0b 100644
--- a/platform/linux-generic/odp_queue.c
+++ b/platform/linux-generic/odp_queue.c
@@ -478,7 +478,8 @@ int queue_enq(queue_entry_t *queue,
odp_buffer_hdr_t *buf_hdr, int sustain)
* other queues, appending placeholder bufs as
needed.
*/
UNLOCK(&queue->s.lock);
- reorder_complete(origin_qe, &reorder_buf,
&placeholder_buf, 1);
+ reorder_complete(origin_qe, &reorder_buf,
&placeholder_buf,
+ 1, 0);
UNLOCK(&origin_qe->s.lock);
if (reorder_buf)
@@ -844,7 +845,7 @@ int queue_pktout_enq(queue_entry_t
*queue, odp_buffer_hdr_t *buf_hdr,
order_release(origin_qe, release_count +
placeholder_count);
/* Now handle sends to other queues that are ready
to go */
- reorder_complete(origin_qe, &reorder_buf,
&placeholder_buf, 1);
+ reorder_complete(origin_qe, &reorder_buf,
&placeholder_buf, 1, 0);
/* We're fully done with the origin_qe at last */
UNLOCK(&origin_qe->s.lock);
@@ -921,13 +922,16 @@ int release_order(queue_entry_t
*origin_qe, uint64_t order,
if (order <= origin_qe->s.order_out) {
order_release(origin_qe, 1);
- /* Check if this release allows us to unblock
waiters.
- * At the point of this call, the reorder list
may contain
- * zero or more placeholders that need to be
freed, followed
- * by zero or one complete reorder buffer chain.
+ /* Check if this release allows us to unblock
waiters. At the
+ * point of this call, the reorder list may
contain zero or
+ * more placeholders that need to be freed,
followed by zero
+ * or one complete reorder buffer chain. Note
that since we
+ * are releasing order, we know no further enqs
for this order
+ * can occur, so ignore the sustain bit to clear
out our
+ * element(s) on the reorder queue
*/
reorder_complete(origin_qe, &reorder_buf,
- &placeholder_buf_hdr, 0);
+ &placeholder_buf_hdr, 0, 1);
/* Now safe to unlock */
UNLOCK(&origin_qe->s.lock);
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp