aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Khoronzhuk <ivan.khoronzhuk@linaro.org>2015-09-17 11:31:31 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2015-09-22 21:22:59 +0300
commitd79849da2e1588f9cdd86460f80da1a50c60bf0d (patch)
tree37e03a4a70056567a403def9fd303e66a9095b8e
parent33762eb822f0bac5b09e34a5fb7571d262ad9a7e (diff)
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 into account ticks overflow. Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> Reviewed-by: Petri Savolainen <petri.savolainen@nokia.com> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
-rw-r--r--test/performance/odp_pktio_perf.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/test/performance/odp_pktio_perf.c b/test/performance/odp_pktio_perf.c
index ac32b15..9bd0c11 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(burst_gap_cycles, cur_cycles);
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)