> -----Original Message-----
> From: lng-odp [mailto:[email protected]] On Behalf Of
> EXT Ivan Khoronzhuk
> Sent: Friday, September 11, 2015 1:05 PM
> To: [email protected]
> Subject: [lng-odp] [PATCH v2 5/5] performance: odp_pktio_perf: fix
> potential overflow for burst_gap
> 
> The direct comparing of "cur_cycles" and "next_tx_cycles" is not
> valid, as "next_tx_cycles" can be overflowed and comparison will
> give wrong result. So use odp_time_diff_cycles() for that, as it
> takes in account ticks overflow.
> 
> Signed-off-by: Ivan Khoronzhuk <[email protected]>
> ---
>  test/performance/odp_pktio_perf.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/test/performance/odp_pktio_perf.c
> b/test/performance/odp_pktio_perf.c
> index ac32b15..85ef2bc 100644
> --- a/test/performance/odp_pktio_perf.c
> +++ b/test/performance/odp_pktio_perf.c
> @@ -303,7 +303,7 @@ static void *run_thread_tx(void *arg)
>       int thr_id;
>       odp_queue_t outq;
>       pkt_tx_stats_t *stats;
> -     uint64_t next_tx_cycles, start_cycles, cur_cycles, send_duration;
> +     uint64_t burst_start_cycles, start_cycles, cur_cycles,
> send_duration;
>       uint64_t burst_gap_cycles;
>       uint32_t batch_len;
>       int unsent_pkts = 0;
> @@ -334,11 +334,12 @@ static void *run_thread_tx(void *arg)
> 
>       cur_cycles     = odp_time_cycles();
>       start_cycles   = cur_cycles;
> -     next_tx_cycles = cur_cycles;
> +     burst_start_cycles = odp_time_diff_cycles(cur_cycles,
> burst_gap_cycles);

Shouldn't this be:

burst_start_cycles = cur_cycles + burst_gap_cycles;

,which works as long as cycle count wraps at UINT64_MAX. Maybe we need a cpu.h 
API for summing two values with correct wrapping.


-Petri





>       while (odp_time_diff_cycles(start_cycles, cur_cycles) <
> send_duration) {
>               unsigned alloc_cnt = 0, tx_cnt;
> 
> -             if (cur_cycles < next_tx_cycles) {
> +             if (odp_time_diff_cycles(burst_start_cycles, cur_cycles)
> +                                                     < burst_gap_cycles) {
>                       cur_cycles = odp_time_cycles();
>                       if (idle_start == 0)
>                               idle_start = cur_cycles;
> @@ -351,7 +352,7 @@ static void *run_thread_tx(void *arg)
>                       idle_start = 0;
>               }
> 
> -             next_tx_cycles += burst_gap_cycles;
> +             burst_start_cycles += burst_gap_cycles;
> 
>               alloc_cnt = alloc_packets(tx_event, batch_len -
> unsent_pkts);
>               if (alloc_cnt != batch_len)
> --
> 1.9.1
> 
> _______________________________________________
> lng-odp mailing list
> [email protected]
> https://lists.linaro.org/mailman/listinfo/lng-odp
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to