diff options
-rw-r--r-- | example/generator/odp_generator.c | 16 | ||||
-rw-r--r-- | example/timer/odp_timer_test.c | 10 | ||||
-rw-r--r-- | include/odp/api/time.h | 77 | ||||
-rw-r--r-- | platform/linux-generic/Makefile.am | 1 | ||||
-rw-r--r-- | platform/linux-generic/include/odp/plat/time_types.h | 36 | ||||
-rw-r--r-- | platform/linux-generic/include/odp/time.h | 1 | ||||
-rw-r--r-- | platform/linux-generic/odp_schedule.c | 16 | ||||
-rw-r--r-- | platform/linux-generic/odp_time.c | 62 | ||||
-rw-r--r-- | platform/linux-generic/odp_timer.c | 4 | ||||
-rw-r--r-- | test/performance/odp_l2fwd.c | 2 | ||||
-rw-r--r-- | test/performance/odp_pktio_perf.c | 55 | ||||
-rw-r--r-- | test/validation/classification/odp_classification_test_pmr.c | 20 | ||||
-rw-r--r-- | test/validation/classification/odp_classification_tests.c | 14 | ||||
-rw-r--r-- | test/validation/pktio/pktio.c | 34 | ||||
-rw-r--r-- | test/validation/scheduler/scheduler.c | 5 | ||||
-rw-r--r-- | test/validation/time/time.c | 27 | ||||
-rw-r--r-- | test/validation/timer/timer.c | 14 |
17 files changed, 263 insertions, 131 deletions
diff --git a/example/generator/odp_generator.c b/example/generator/odp_generator.c index 546569e19..952741f39 100644 --- a/example/generator/odp_generator.c +++ b/example/generator/odp_generator.c @@ -586,7 +586,7 @@ static void *gen_recv_thread(void *arg) */ static void print_global_stats(int num_workers) { - uint64_t start, wait, diff; + odp_time_t start, wait, diff; uint64_t pkts, pkts_prev = 0, pps, maximum_pps = 0; int verbose_interval = 20; odp_thrmask_t thrd_mask; @@ -594,8 +594,8 @@ static void print_global_stats(int num_workers) while (odp_thrmask_worker(&thrd_mask) < num_workers) continue; - wait = odp_time_ns_to_cycles(verbose_interval * ODP_TIME_SEC); - start = odp_time_cycles(); + wait = odp_time_local_from_ns(verbose_interval * ODP_TIME_SEC_IN_NS); + start = odp_time_local(); while (odp_thrmask_worker(&thrd_mask) == num_workers) { if (args->appl.number != -1 && @@ -604,11 +604,11 @@ static void print_global_stats(int num_workers) break; } - diff = odp_time_diff_cycles(start, odp_time_cycles()); - if (diff < wait) + diff = odp_time_diff(start, odp_time_local()); + if (odp_time_cmp(wait, diff) > 0) continue; - start = odp_time_cycles(); + start = odp_time_local(); if (args->appl.mode == APPL_MODE_RCV) { pkts = odp_atomic_load_u64(&counters.udp); @@ -730,9 +730,9 @@ int main(int argc, char *argv[]) odp_pool_print(pool); /* Create timer pool */ - tparams.res_ns = 1 * ODP_TIME_MSEC; + tparams.res_ns = 1 * ODP_TIME_MSEC_IN_NS; tparams.min_tmo = 0; - tparams.max_tmo = 10000 * ODP_TIME_SEC; + tparams.max_tmo = 10000 * ODP_TIME_SEC_IN_NS; tparams.num_timers = num_workers; /* One timer per worker */ tparams.priv = 0; /* Shared */ tparams.clk_src = ODP_CLOCK_CPU; diff --git a/example/timer/odp_timer_test.c b/example/timer/odp_timer_test.c index 94619e481..5b2f73a50 100644 --- a/example/timer/odp_timer_test.c +++ b/example/timer/odp_timer_test.c @@ -95,7 +95,7 @@ static void test_abs_timeouts(int thr, test_globals_t *gbls) queue = odp_queue_lookup("timer_queue"); - period_ns = gbls->args.period_us*ODP_TIME_USEC; + period_ns = gbls->args.period_us * ODP_TIME_USEC_IN_NS; period = odp_timer_ns_to_tick(gbls->tp, period_ns); EXAMPLE_DBG(" [%i] period %"PRIu64" ticks, %"PRIu64" ns\n", thr, @@ -408,9 +408,9 @@ int main(int argc, char *argv[]) return -1; } - tparams.res_ns = gbls->args.resolution_us*ODP_TIME_USEC; - tparams.min_tmo = gbls->args.min_us*ODP_TIME_USEC; - tparams.max_tmo = gbls->args.max_us*ODP_TIME_USEC; + tparams.res_ns = gbls->args.resolution_us * ODP_TIME_USEC_IN_NS; + tparams.min_tmo = gbls->args.min_us * ODP_TIME_USEC_IN_NS; + tparams.max_tmo = gbls->args.max_us * ODP_TIME_USEC_IN_NS; tparams.num_timers = num_workers; /* One timer per worker */ tparams.priv = 0; /* Shared */ tparams.clk_src = ODP_CLOCK_CPU; @@ -455,7 +455,7 @@ int main(int argc, char *argv[]) printf(" %12" PRIu64 " ticks -> %12" PRIu64 " ns\n", tick, odp_timer_tick_to_ns(gbls->tp, tick)); - for (ns = 1; ns <= 100*ODP_TIME_SEC; ns *= 10) { + for (ns = 1; ns <= 100 * ODP_TIME_SEC_IN_NS; ns *= 10) { tick = odp_timer_ns_to_tick(gbls->tp, ns); printf(" %12" PRIu64 " ns -> %12" PRIu64 " ticks\n", ns, diff --git a/include/odp/api/time.h b/include/odp/api/time.h index b0072fcd3..f119733a8 100644 --- a/include/odp/api/time.h +++ b/include/odp/api/time.h @@ -24,18 +24,32 @@ extern "C" { */ /* Time in nanoseconds */ -#define ODP_TIME_USEC 1000ULL /**< Microsecond in nsec */ -#define ODP_TIME_MSEC 1000000ULL /**< Millisecond in nsec */ -#define ODP_TIME_SEC 1000000000ULL /**< Second in nsec */ +#define ODP_TIME_USEC_IN_NS 1000ULL /**< Microsecond in nsec */ +#define ODP_TIME_MSEC_IN_NS 1000000ULL /**< Millisecond in nsec */ +#define ODP_TIME_SEC_IN_NS 1000000000ULL /**< Second in nsec */ +/** + * @typedef odp_time_t + * ODP time stamp. Time stamp can represent a time stamp from local or global + * time source. A local time stamp must not be shared between threads. API calls + * work correctly only when all time stamps for input are from the same time + * source. + */ /** - * Current time in CPU cycles - * - * @return Current time in CPU cycles + * @def ODP_TIME_NULL + * Zero time stamp */ -uint64_t odp_time_cycles(void); +/** + * Current local time + * + * Returns current local time stamp value. The local time source provides high + * resolution time. + * + * @return Local time stamp. + */ +odp_time_t odp_time_local(void); /** * Time difference @@ -43,29 +57,60 @@ uint64_t odp_time_cycles(void); * @param t1 First time stamp * @param t2 Second time stamp * - * @return Difference of time stamps in CPU cycles + * @return Difference of time stamps */ -uint64_t odp_time_diff_cycles(uint64_t t1, uint64_t t2); +odp_time_t odp_time_diff(odp_time_t t1, odp_time_t t2); +/** + * Time sum + * + * @param t1 Time stamp + * @param t2 Time stamp + * + * @return Sum of time stamps + */ +odp_time_t odp_time_sum(odp_time_t t1, odp_time_t t2); /** - * Convert CPU cycles to nanoseconds + * Convert time to nanoseconds * - * @param cycles Time in CPU cycles + * @param time Time * * @return Time in nanoseconds */ -uint64_t odp_time_cycles_to_ns(uint64_t cycles); +uint64_t odp_time_to_ns(odp_time_t time); +/** + * Convert nanoseconds to local time + * + * @param ns Time in nanoseconds + * + * @return Local time stamp + */ +odp_time_t odp_time_local_from_ns(uint64_t ns); + +/** + * Compare two times + * + * @param t2 Second time + * @param t1 First time + * + * @retval <0 if t2 < t1, >0 if t1 = t2, 1 if t2 > t1 + */ +int odp_time_cmp(odp_time_t t2, odp_time_t t1); /** - * Convert nanoseconds to CPU cycles + * Get printable value for an odp_time_t + * + * @param time time to be printed * - * @param ns Time in nanoseconds + * @return uint64_t value that can be used to print/display this time * - * @return Time in CPU cycles + * @note This routine is intended to be used for diagnostic purposes + * to enable applications to generate a printable value that represents + * an odp_time_t time. */ -uint64_t odp_time_ns_to_cycles(uint64_t ns); +uint64_t odp_time_to_u64(odp_time_t time); /** * @} diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index 610e04d9e..70bd8fe85 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -70,6 +70,7 @@ odpplatinclude_HEADERS = \ $(srcdir)/include/odp/plat/strong_types.h \ $(srcdir)/include/odp/plat/thrmask_types.h \ $(srcdir)/include/odp/plat/ticketlock_types.h \ + $(srcdir)/include/odp/plat/time_types.h \ $(srcdir)/include/odp/plat/timer_types.h \ $(srcdir)/include/odp/plat/version_types.h diff --git a/platform/linux-generic/include/odp/plat/time_types.h b/platform/linux-generic/include/odp/plat/time_types.h new file mode 100644 index 000000000..9ba1508c7 --- /dev/null +++ b/platform/linux-generic/include/odp/plat/time_types.h @@ -0,0 +1,36 @@ +/* Copyright (c) 2015, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * ODP time service + */ + +#ifndef ODP_TIME_TYPES_H_ +#define ODP_TIME_TYPES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup odp_time + * @{ + **/ + +typedef uint64_t odp_time_t; + +#define ODP_TIME_NULL ((odp_time_t)0) + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-generic/include/odp/time.h b/platform/linux-generic/include/odp/time.h index 3a3960b02..44e0d0d25 100644 --- a/platform/linux-generic/include/odp/time.h +++ b/platform/linux-generic/include/odp/time.h @@ -21,6 +21,7 @@ extern "C" { +#include <odp/plat/time_types.h> #include <odp/api/time.h> #ifdef __cplusplus diff --git a/platform/linux-generic/odp_schedule.c b/platform/linux-generic/odp_schedule.c index 5982f85a4..2a0e2c653 100644 --- a/platform/linux-generic/odp_schedule.c +++ b/platform/linux-generic/odp_schedule.c @@ -586,10 +586,10 @@ static int schedule_loop(odp_queue_t *out_queue, uint64_t wait, odp_event_t out_ev[], unsigned int max_num, unsigned int max_deq) { - uint64_t start_cycle, cycle, diff; + odp_time_t start_time, time, diff; int ret; - start_cycle = 0; + start_time = ODP_TIME_NULL; while (1) { ret = schedule(out_queue, out_ev, max_num, max_deq); @@ -603,15 +603,15 @@ static int schedule_loop(odp_queue_t *out_queue, uint64_t wait, if (wait == ODP_SCHED_NO_WAIT) break; - if (start_cycle == 0) { - start_cycle = odp_time_cycles(); + if (!odp_time_cmp(ODP_TIME_NULL, start_time)) { + start_time = odp_time_local(); continue; } - cycle = odp_time_cycles(); - diff = odp_time_diff_cycles(start_cycle, cycle); + time = odp_time_local(); + diff = odp_time_diff(start_time, time); - if (wait < diff) + if (odp_time_cmp(wait, diff) < 0) break; } @@ -652,7 +652,7 @@ void odp_schedule_resume(void) uint64_t odp_schedule_wait_time(uint64_t ns) { - return odp_time_ns_to_cycles(ns); + return odp_time_to_u64(odp_time_local_from_ns(ns)); } diff --git a/platform/linux-generic/odp_time.c b/platform/linux-generic/odp_time.c index 74f802b83..a1494d76c 100644 --- a/platform/linux-generic/odp_time.c +++ b/platform/linux-generic/odp_time.c @@ -14,33 +14,73 @@ #define GIGA 1000000000 -uint64_t odp_time_cycles(void) +static inline +uint64_t time_to_tick(odp_time_t time) { - return odp_cpu_cycles(); + return (uint64_t)time; } -uint64_t odp_time_diff_cycles(uint64_t t1, uint64_t t2) +static inline +odp_time_t tick_to_time(uint64_t tick) { - return _odp_cpu_cycles_diff(t1, t2); + return (odp_time_t)tick; } -uint64_t odp_time_cycles_to_ns(uint64_t cycles) +odp_time_t odp_time_local(void) +{ + return tick_to_time(odp_cpu_cycles()); +} + +odp_time_t odp_time_diff(odp_time_t t1, odp_time_t t2) +{ + return tick_to_time(_odp_cpu_cycles_diff(t1, t2)); +} + +uint64_t odp_time_to_ns(odp_time_t time) { uint64_t hz = odp_sys_cpu_hz(); + uint64_t tick = time_to_tick(time); - if (cycles > (UINT64_MAX / GIGA)) - return (cycles/hz)*GIGA; + if (tick > (UINT64_MAX / GIGA)) + return (tick / hz) * GIGA; - return (cycles*GIGA)/hz; + return (tick * GIGA) / hz; } -uint64_t odp_time_ns_to_cycles(uint64_t ns) +odp_time_t odp_time_local_from_ns(uint64_t ns) { uint64_t hz = odp_sys_cpu_hz(); if (ns > (UINT64_MAX / hz)) - return (ns/GIGA)*hz; + return tick_to_time((ns / GIGA) * hz); + + return tick_to_time((ns * hz) / GIGA); +} + +int odp_time_cmp(odp_time_t t2, odp_time_t t1) +{ + uint64_t tick1 = time_to_tick(t1); + uint64_t tick2 = time_to_tick(t2); - return (ns*hz)/GIGA; + if (tick1 < tick2) + return 1; + + if (tick1 > tick2) + return -1; + + return 0; +} + +odp_time_t odp_time_sum(odp_time_t t1, odp_time_t t2) +{ + uint64_t tick1 = time_to_tick(t1); + uint64_t tick2 = time_to_tick(t2); + + return tick_to_time(tick1 + tick2); +} + +uint64_t odp_time_to_u64(odp_time_t hdl) +{ + return time_to_tick(hdl); } diff --git a/platform/linux-generic/odp_timer.c b/platform/linux-generic/odp_timer.c index e8f026744..bb32aa676 100644 --- a/platform/linux-generic/odp_timer.c +++ b/platform/linux-generic/odp_timer.c @@ -672,8 +672,8 @@ static void itimer_init(odp_timer_pool *tp) strerror(errno)); res = tp->param.res_ns; - sec = res / ODP_TIME_SEC; - nsec = res - sec * ODP_TIME_SEC; + sec = res / ODP_TIME_SEC_IN_NS; + nsec = res - sec * ODP_TIME_SEC_IN_NS; ispec.it_interval.tv_sec = (time_t)sec; ispec.it_interval.tv_nsec = (long)nsec; diff --git a/test/performance/odp_l2fwd.c b/test/performance/odp_l2fwd.c index f415ba39f..3941c50f6 100644 --- a/test/performance/odp_l2fwd.c +++ b/test/performance/odp_l2fwd.c @@ -157,7 +157,7 @@ static void *pktio_queue_thread(void *arg) printf("[%02i] QUEUE mode\n", thr); odp_barrier_wait(&barrier); - wait = odp_schedule_wait_time(ODP_TIME_MSEC * 100); + wait = odp_schedule_wait_time(ODP_TIME_MSEC_IN_NS * 100); /* Loop packets */ while (!exit_threads) { diff --git a/test/performance/odp_pktio_perf.c b/test/performance/odp_pktio_perf.c index ae5b4c0b2..2d64b40d0 100644 --- a/test/performance/odp_pktio_perf.c +++ b/test/performance/odp_pktio_perf.c @@ -50,7 +50,7 @@ /* Amount of time to wait, in nanoseconds, between the transmitter(s) * completing and the receiver(s) being shutdown. Any packets not * received by this time will be assumed to have been lost. */ -#define SHUTDOWN_DELAY_NS (ODP_TIME_MSEC*100) +#define SHUTDOWN_DELAY_NS (ODP_TIME_MSEC_IN_NS * 100) #define VPRINT(fmt, ...) \ do { \ @@ -106,7 +106,7 @@ struct tx_stats_s { uint64_t tx_cnt; /* Packets transmitted */ uint64_t alloc_failures;/* Packet allocation failures */ uint64_t enq_failures; /* Enqueue failures */ - uint64_t idle_cycles; /* Idle cycle count in TX loop */ + odp_time_t idle_cycles; /* Idle cycle count in TX loop */ }; typedef union tx_stats_u { @@ -305,12 +305,12 @@ static void *run_thread_tx(void *arg) int thr_id; odp_queue_t outq; pkt_tx_stats_t *stats; - uint64_t burst_start_cycles, start_cycles, cur_cycles, send_duration; - uint64_t burst_gap_cycles; + odp_time_t start_cycles, cur_cycles, send_duration; + odp_time_t burst_start_cycles, burst_gap_cycles; uint32_t batch_len; int unsent_pkts = 0; odp_event_t tx_event[BATCH_LEN_MAX]; - uint64_t idle_start = 0; + odp_time_t idle_start = ODP_TIME_NULL; thread_args_t *targs = arg; @@ -328,30 +328,34 @@ static void *run_thread_tx(void *arg) if (outq == ODP_QUEUE_INVALID) LOG_ABORT("Failed to get output queue for thread %d\n", thr_id); - burst_gap_cycles = odp_time_ns_to_cycles( - ODP_TIME_SEC / (targs->pps / targs->batch_len)); - send_duration = odp_time_ns_to_cycles(targs->duration * ODP_TIME_SEC); + burst_gap_cycles = odp_time_local_from_ns( + ODP_TIME_SEC_IN_NS / (targs->pps / targs->batch_len)); + send_duration = + odp_time_local_from_ns(targs->duration * ODP_TIME_SEC_IN_NS); odp_barrier_wait(&globals->tx_barrier); - cur_cycles = odp_time_cycles(); + cur_cycles = odp_time_local(); start_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) { + burst_start_cycles = odp_time_diff(burst_gap_cycles, cur_cycles); + while (odp_time_diff(start_cycles, cur_cycles) < send_duration) { unsigned alloc_cnt = 0, tx_cnt; - if (odp_time_diff_cycles(burst_start_cycles, cur_cycles) + if (odp_time_diff(burst_start_cycles, cur_cycles) < burst_gap_cycles) { - cur_cycles = odp_time_cycles(); - if (idle_start == 0) + cur_cycles = odp_time_local(); + if (!odp_time_cmp(idle_start, ODP_TIME_NULL)) idle_start = cur_cycles; continue; } - if (idle_start) { - stats->s.idle_cycles += odp_time_diff_cycles( - idle_start, cur_cycles); - idle_start = 0; + if (odp_time_cmp(idle_start, ODP_TIME_NULL)) { + odp_time_t diff = odp_time_diff(idle_start, cur_cycles); + + stats->s.idle_cycles = + odp_time_sum(diff, stats->s.idle_cycles); + + idle_start = ODP_TIME_NULL; } burst_start_cycles += burst_gap_cycles; @@ -365,14 +369,15 @@ static void *run_thread_tx(void *arg) stats->s.enq_failures += unsent_pkts; stats->s.tx_cnt += tx_cnt; - cur_cycles = odp_time_cycles(); + cur_cycles = odp_time_local(); } VPRINT(" %02d: TxPkts %-8"PRIu64" EnqFail %-6"PRIu64 " AllocFail %-6"PRIu64" Idle %"PRIu64"ms\n", thr_id, stats->s.tx_cnt, stats->s.enq_failures, stats->s.alloc_failures, - odp_time_cycles_to_ns(stats->s.idle_cycles)/1000/1000); + odp_time_to_ns(stats->s.idle_cycles) / + (uint64_t)ODP_TIME_MSEC_IN_NS); return NULL; } @@ -591,13 +596,13 @@ static int setup_txrx_masks(odp_cpumask_t *thd_mask_tx, */ static void busy_loop_ns(uint64_t wait_ns) { - uint64_t diff; - uint64_t start_time = odp_time_cycles(); - uint64_t wait = odp_time_ns_to_cycles(wait_ns); + odp_time_t diff; + odp_time_t start_time = odp_time_local(); + odp_time_t wait = odp_time_local_from_ns(wait_ns); do { - diff = odp_time_diff_cycles(start_time, odp_time_cycles()); - } while (diff < wait); + diff = odp_time_diff(start_time, odp_time_local()); + } while (odp_time_cmp(wait, diff) > 0); } /* diff --git a/test/validation/classification/odp_classification_test_pmr.c b/test/validation/classification/odp_classification_test_pmr.c index 73ba6f5d5..3f49d4c34 100644 --- a/test/validation/classification/odp_classification_test_pmr.c +++ b/test/validation/classification/odp_classification_test_pmr.c @@ -168,7 +168,7 @@ static void classification_test_pmr_term_tcp_dport(void) enqueue_pktio_interface(pkt, pktio); - pkt = receive_packet(&retqueue, ODP_TIME_SEC); + pkt = receive_packet(&retqueue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(retqueue == queue); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); @@ -185,7 +185,7 @@ static void classification_test_pmr_term_tcp_dport(void) enqueue_pktio_interface(pkt, pktio); - pkt = receive_packet(&retqueue, ODP_TIME_SEC); + pkt = receive_packet(&retqueue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); CU_ASSERT(retqueue == defqueue); @@ -255,7 +255,7 @@ static void classification_test_pmr_term_tcp_sport(void) enqueue_pktio_interface(pkt, pktio); - pkt = receive_packet(&retqueue, ODP_TIME_SEC); + pkt = receive_packet(&retqueue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); CU_ASSERT(retqueue == queue); @@ -270,7 +270,7 @@ static void classification_test_pmr_term_tcp_sport(void) enqueue_pktio_interface(pkt, pktio); - pkt = receive_packet(&retqueue, ODP_TIME_SEC); + pkt = receive_packet(&retqueue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); CU_ASSERT(retqueue == defqueue); @@ -340,7 +340,7 @@ static void classification_test_pmr_term_udp_dport(void) enqueue_pktio_interface(pkt, pktio); - pkt = receive_packet(&retqueue, ODP_TIME_SEC); + pkt = receive_packet(&retqueue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); CU_ASSERT(retqueue == queue); @@ -356,7 +356,7 @@ static void classification_test_pmr_term_udp_dport(void) enqueue_pktio_interface(pkt, pktio); - pkt = receive_packet(&retqueue, ODP_TIME_SEC); + pkt = receive_packet(&retqueue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); CU_ASSERT(retqueue == defqueue); @@ -426,7 +426,7 @@ static void classification_test_pmr_term_udp_sport(void) enqueue_pktio_interface(pkt, pktio); - pkt = receive_packet(&retqueue, ODP_TIME_SEC); + pkt = receive_packet(&retqueue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); CU_ASSERT(retqueue == queue); @@ -441,7 +441,7 @@ static void classification_test_pmr_term_udp_sport(void) enqueue_pktio_interface(pkt, pktio); - pkt = receive_packet(&retqueue, ODP_TIME_SEC); + pkt = receive_packet(&retqueue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); CU_ASSERT(retqueue == defqueue); @@ -507,7 +507,7 @@ static void classification_test_pmr_term_ipproto(void) enqueue_pktio_interface(pkt, pktio); - pkt = receive_packet(&retqueue, ODP_TIME_SEC); + pkt = receive_packet(&retqueue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); CU_ASSERT(retqueue == queue); @@ -520,7 +520,7 @@ static void classification_test_pmr_term_ipproto(void) enqueue_pktio_interface(pkt, pktio); - pkt = receive_packet(&retqueue, ODP_TIME_SEC); + pkt = receive_packet(&retqueue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); CU_ASSERT(retqueue == defqueue); diff --git a/test/validation/classification/odp_classification_tests.c b/test/validation/classification/odp_classification_tests.c index 823e30fec..3944d9456 100644 --- a/test/validation/classification/odp_classification_tests.c +++ b/test/validation/classification/odp_classification_tests.c @@ -225,7 +225,7 @@ void test_cls_pmr_chain(void) enqueue_pktio_interface(pkt, pktio_loop); - pkt = receive_packet(&queue, ODP_TIME_SEC); + pkt = receive_packet(&queue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(queue == queue_list[CLS_PMR_CHAIN_DST]); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); @@ -242,7 +242,7 @@ void test_cls_pmr_chain(void) ip->chksum = odph_ipv4_csum_update(pkt); enqueue_pktio_interface(pkt, pktio_loop); - pkt = receive_packet(&queue, ODP_TIME_SEC); + pkt = receive_packet(&queue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(queue == queue_list[CLS_PMR_CHAIN_SRC]); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); @@ -289,7 +289,7 @@ void test_pktio_default_cos(void) enqueue_pktio_interface(pkt, pktio_loop); - pkt = receive_packet(&queue, ODP_TIME_SEC); + pkt = receive_packet(&queue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); /* Default packet should be received in default queue */ CU_ASSERT(queue == queue_list[CLS_DEFAULT]); @@ -341,7 +341,7 @@ void test_pktio_error_cos(void) ip->chksum = 0; enqueue_pktio_interface(pkt, pktio_loop); - pkt = receive_packet(&queue, ODP_TIME_SEC); + pkt = receive_packet(&queue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); /* Error packet should be received in error queue */ CU_ASSERT(queue == queue_list[CLS_ERROR]); @@ -436,7 +436,7 @@ void test_cos_with_l2_priority(void) vlan = (odph_vlanhdr_t *)(ðhdr->type); vlan->tci = odp_cpu_to_be_16(i << 13); enqueue_pktio_interface(pkt, pktio_loop); - pkt = receive_packet(&queue, ODP_TIME_SEC); + pkt = receive_packet(&queue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(queue == queue_list[CLS_L2_QOS_0 + i]); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); @@ -501,7 +501,7 @@ void test_pmr_cos(void) udp = (odph_udphdr_t *)odp_packet_l4_ptr(pkt, NULL); udp->src_port = odp_cpu_to_be_16(CLS_PMR_SPORT); enqueue_pktio_interface(pkt, pktio_loop); - pkt = receive_packet(&queue, ODP_TIME_SEC); + pkt = receive_packet(&queue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(queue == queue_list[CLS_PMR]); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); @@ -585,7 +585,7 @@ void test_pktio_pmr_match_set_cos(void) udp = (odph_udphdr_t *)odp_packet_l4_ptr(pkt, NULL); udp->src_port = odp_cpu_to_be_16(CLS_PMR_SET_SPORT); enqueue_pktio_interface(pkt, pktio_loop); - pkt = receive_packet(&queue, ODP_TIME_SEC); + pkt = receive_packet(&queue, ODP_TIME_SEC_IN_NS); CU_ASSERT(pkt != ODP_PACKET_INVALID); CU_ASSERT(queue == queue_list[CLS_PMR_SET]); CU_ASSERT(seqno == cls_pkt_get_seq(pkt)); diff --git a/test/validation/pktio/pktio.c b/test/validation/pktio/pktio.c index 41106b00a..0a9ef37ea 100644 --- a/test/validation/pktio/pktio.c +++ b/test/validation/pktio/pktio.c @@ -332,18 +332,18 @@ static int destroy_inq(odp_pktio_t pktio) static odp_event_t queue_deq_wait_time(odp_queue_t queue, uint64_t ns) { - uint64_t start, now, diff; + odp_time_t start, now, diff; odp_event_t ev; - start = odp_time_cycles(); + start = odp_time_local(); do { ev = odp_queue_deq(queue); if (ev != ODP_EVENT_INVALID) return ev; - now = odp_time_cycles(); - diff = odp_time_diff_cycles(start, now); - } while (odp_time_cycles_to_ns(diff) < ns); + now = odp_time_local(); + diff = odp_time_diff(start, now); + } while (odp_time_to_ns(diff) < ns); return ODP_EVENT_INVALID; } @@ -351,12 +351,12 @@ static odp_event_t queue_deq_wait_time(odp_queue_t queue, uint64_t ns) static odp_packet_t wait_for_packet(pktio_info_t *pktio_rx, uint32_t seq, uint64_t ns) { - uint64_t start, now, diff; + odp_time_t start, now, diff; odp_event_t ev; odp_packet_t pkt; uint64_t wait; - start = odp_time_cycles(); + start = odp_time_local(); wait = odp_schedule_wait_time(ns); do { @@ -385,9 +385,9 @@ static odp_packet_t wait_for_packet(pktio_info_t *pktio_rx, odp_packet_free(pkt); } - now = odp_time_cycles(); - diff = odp_time_diff_cycles(start, now); - } while (odp_time_cycles_to_ns(diff) < ns); + now = odp_time_local(); + diff = odp_time_diff(start, now); + } while (odp_time_to_ns(diff) < ns); CU_FAIL("failed to receive transmitted packet"); @@ -446,7 +446,8 @@ static void pktio_txrx_multi(pktio_info_t *pktio_a, pktio_info_t *pktio_b, /* and wait for them to arrive back */ for (i = 0; i < num_pkts; ++i) { - rx_pkt = wait_for_packet(pktio_b, tx_seq[i], ODP_TIME_SEC); + rx_pkt = wait_for_packet(pktio_b, tx_seq[i], + ODP_TIME_SEC_IN_NS); if (rx_pkt == ODP_PACKET_INVALID) break; @@ -623,7 +624,7 @@ void pktio_test_inq_remdef(void) CU_ASSERT(inq != ODP_QUEUE_INVALID); CU_ASSERT(odp_pktio_inq_remdef(pktio) == 0); - wait = odp_schedule_wait_time(ODP_TIME_MSEC); + wait = odp_schedule_wait_time(ODP_TIME_MSEC_IN_NS); for (i = 0; i < 100; i++) { ev = odp_schedule(NULL, wait); if (ev != ODP_EVENT_INVALID) { @@ -699,7 +700,7 @@ static void pktio_test_start_stop(void) odp_event_t ev; int i, pkts, ret, alloc = 0; odp_queue_t outq; - uint64_t wait = odp_schedule_wait_time(ODP_TIME_MSEC); + uint64_t wait = odp_schedule_wait_time(ODP_TIME_MSEC_IN_NS); for (i = 0; i < num_ifaces; i++) { pktio[i] = create_pktio(i, ODP_PKTIN_MODE_SCHED); @@ -914,8 +915,8 @@ static void pktio_test_send_failure(void) info_rx.in_mode = ODP_PKTIN_MODE_RECV; for (i = 0; i < ret; ++i) { - pkt_tbl[i] = wait_for_packet(&info_rx, - pkt_seq[i], ODP_TIME_SEC); + pkt_tbl[i] = wait_for_packet(&info_rx, pkt_seq[i], + ODP_TIME_SEC_IN_NS); if (pkt_tbl[i] == ODP_PACKET_INVALID) break; } @@ -946,7 +947,8 @@ static void pktio_test_send_failure(void) for (; i < TX_BATCH_LEN; ++i) { pkt_tbl[i] = wait_for_packet(&info_rx, - pkt_seq[i], ODP_TIME_SEC); + pkt_seq[i], + ODP_TIME_SEC_IN_NS); if (pkt_tbl[i] == ODP_PACKET_INVALID) break; } diff --git a/test/validation/scheduler/scheduler.c b/test/validation/scheduler/scheduler.c index 2bd180ce9..1e1a848f5 100644 --- a/test/validation/scheduler/scheduler.c +++ b/test/validation/scheduler/scheduler.c @@ -718,10 +718,11 @@ static void *schedule_common_(void *arg) CU_ASSERT(from != ODP_QUEUE_INVALID); if (locked) { int cnt; - uint64_t cycles = 0; + odp_time_t cycles = ODP_TIME_NULL; /* Do some work here to keep the thread busy */ for (cnt = 0; cnt < 1000; cnt++) - cycles += odp_time_cycles(); + cycles = odp_time_sum(cycles, + odp_time_local()); odp_spinlock_unlock(&globals->atomic_lock); } diff --git a/test/validation/time/time.c b/test/validation/time/time.c index 41db0e954..231f50ed1 100644 --- a/test/validation/time/time.c +++ b/test/validation/time/time.c @@ -16,43 +16,44 @@ void time_test_odp_cycles_diff(void) { /* volatile to stop optimization of busy loop */ volatile int count = 0; - uint64_t diff, cycles1, cycles2; + odp_time_t diff, cycles1, cycles2; - cycles1 = odp_time_cycles(); + cycles1 = odp_time_local(); while (count < BUSY_LOOP_CNT) { count++; }; - cycles2 = odp_time_cycles(); - CU_ASSERT(cycles2 > cycles1); + cycles2 = odp_time_local(); + CU_ASSERT((odp_time_cmp(cycles2, cycles1) > 0)); - diff = odp_time_diff_cycles(cycles1, cycles2); - CU_ASSERT(diff > 0); + diff = odp_time_diff(cycles1, cycles2); + CU_ASSERT(odp_time_cmp(diff, ODP_TIME_NULL) > 0); } /* check that a negative cycles difference gives a reasonable result */ void time_test_odp_cycles_negative_diff(void) { - uint64_t diff, cycles1, cycles2; + odp_time_t diff, cycles1, cycles2; cycles1 = 10; cycles2 = 5; - diff = odp_time_diff_cycles(cycles1, cycles2); - CU_ASSERT(diff > 0); + diff = odp_time_diff(cycles1, cycles2); + CU_ASSERT(odp_time_cmp(diff, ODP_TIME_NULL) > 0); } /* check that related conversions come back to the same value */ void time_test_odp_time_conversion(void) { - uint64_t ns1, ns2, cycles; + uint64_t ns1, ns2; + odp_time_t cycles; uint64_t upper_limit, lower_limit; ns1 = 100; - cycles = odp_time_ns_to_cycles(ns1); - CU_ASSERT(cycles > 0); + cycles = odp_time_local_from_ns(ns1); + CU_ASSERT(odp_time_cmp(cycles, ODP_TIME_NULL) > 0); - ns2 = odp_time_cycles_to_ns(cycles); + ns2 = odp_time_to_ns(cycles); /* need to check within arithmetic tolerance that the same * value in ns is returned after conversions */ diff --git a/test/validation/timer/timer.c b/test/validation/timer/timer.c index 645dc5882..dda5e4ceb 100644 --- a/test/validation/timer/timer.c +++ b/test/validation/timer/timer.c @@ -145,9 +145,9 @@ void timer_test_odp_timer_cancel(void) if (pool == ODP_POOL_INVALID) CU_FAIL_FATAL("Timeout pool create failed"); - tparam.res_ns = 100 * ODP_TIME_MSEC; - tparam.min_tmo = 1 * ODP_TIME_SEC; - tparam.max_tmo = 10 * ODP_TIME_SEC; + tparam.res_ns = 100 * ODP_TIME_MSEC_IN_NS; + tparam.min_tmo = 1 * ODP_TIME_SEC_IN_NS; + tparam.max_tmo = 10 * ODP_TIME_SEC_IN_NS; tparam.num_timers = 1; tparam.priv = 0; tparam.clk_src = ODP_CLOCK_CPU; @@ -171,7 +171,7 @@ void timer_test_odp_timer_cancel(void) if (ev == ODP_EVENT_INVALID) CU_FAIL_FATAL("Failed to allocate timeout"); - tick = odp_timer_ns_to_tick(tp, 2 * ODP_TIME_SEC); + tick = odp_timer_ns_to_tick(tp, 2 * ODP_TIME_SEC_IN_NS); rc = odp_timer_set_rel(tim, tick, &ev); if (rc != ODP_TIMER_SUCCESS) @@ -457,9 +457,9 @@ void timer_test_odp_timer_all(void) CU_FAIL_FATAL("Timeout pool create failed"); #define NAME "timer_pool" -#define RES (10 * ODP_TIME_MSEC / 3) -#define MIN (10 * ODP_TIME_MSEC / 3) -#define MAX (1000000 * ODP_TIME_MSEC) +#define RES (10 * ODP_TIME_MSEC_IN_NS / 3) +#define MIN (10 * ODP_TIME_MSEC_IN_NS / 3) +#define MAX (1000000 * ODP_TIME_MSEC_IN_NS) /* Create a timer pool */ tparam.res_ns = RES; tparam.min_tmo = MIN; |