> -----Original Message-----
> From: lng-odp [mailto:[email protected]] On Behalf Of Matias
> Elo
> Sent: Monday, May 22, 2017 12:39 PM
> To: [email protected]
> Subject: [lng-odp] [PATCH] linux-gen: sched: fix ordered enqueue to pktout
> queue
>
> Make sure packet order is maintained if enqueueing packets from an ordered
> queue.
>
> Fixes https://bugs.linaro.org/show_bug.cgi?id=3002
>
> Signed-off-by: Matias Elo <[email protected]>
> ---
> platform/linux-generic/odp_packet_io.c | 8 ++++++++
> platform/linux-generic/odp_queue.c | 1 +
> platform/linux-generic/odp_schedule.c | 5 ++++-
> platform/linux-generic/odp_schedule_iquery.c | 5 ++++-
> 4 files changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-
> generic/odp_packet_io.c
> index 98460a5..7e45c63 100644
> --- a/platform/linux-generic/odp_packet_io.c
> +++ b/platform/linux-generic/odp_packet_io.c
> @@ -586,6 +586,10 @@ int pktout_enqueue(queue_entry_t *qentry,
> odp_buffer_hdr_t *buf_hdr)
> int len = 1;
> int nbr;
>
> + if (sched_fn->ord_enq_multi(qentry->s.index, (void **)buf_hdr, len,
> + &nbr))
> + return nbr;
> +
The return value is not right here. If the ord_enq_multi() returns 1,
the packet was successfully enqueued and odp_queue_enq() should return 0,
not 1.
After this patch the default scheduler always returns 0 in this case so
the branch is never taken and the bug is not exposed.
> nbr = odp_pktout_send(qentry->s.pktout, &pkt, len);
> return (nbr == len ? 0 : -1);
> }
Janne