> On 23 May 2017, at 15:04, Peltonen, Janne (Nokia - FI/Espoo) 
> <[email protected]> wrote:
> 
> 
>> -----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);
>> }


Good catch, will fix.

-Matias

Reply via email to