From: Changqing Li <changqing...@windriver.com> To support Y2038 issue, for 32bit system, -D_TIME_BITS=64 is passed to gcc, struct timespec time->tv_sec is 64bit, but size_t is 32bits, so dpdk will compile failed with error: ../git/lib/ethdev/ethdev_trace.h: In function 'rte_eth_trace_timesync_write_time': ../git/lib/eal/include/rte_common.h:498:55: error: size of unnamed array is negative 498 | #define RTE_BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
Update the trace point function to fix above issue Signed-off-by: Changqing Li <changqing...@windriver.com> --- lib/ethdev/ethdev_trace.h | 57 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/lib/ethdev/ethdev_trace.h b/lib/ethdev/ethdev_trace.h index c65b78590a..20390140dd 100644 --- a/lib/ethdev/ethdev_trace.h +++ b/lib/ethdev/ethdev_trace.h @@ -1116,15 +1116,27 @@ RTE_TRACE_POINT( rte_trace_point_emit_int(ret); ) +#if defined(_TIME_BITS) && _TIME_BITS == 64 RTE_TRACE_POINT( rte_eth_trace_timesync_write_time, RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct timespec *time, int ret), rte_trace_point_emit_u16(port_id); - rte_trace_point_emit_size_t(time->tv_sec); + rte_trace_point_emit_u64(time->tv_sec); rte_trace_point_emit_long(time->tv_nsec); rte_trace_point_emit_int(ret); ) +#else +RTE_TRACE_POINT( + rte_eth_trace_timesync_write_time, + RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct timespec *time, + int ret), + rte_trace_point_emit_u16(port_id); + rte_trace_point_emit_size_t(time->tv_sec); + rte_trace_point_emit_long(time->tv_nsec); + rte_trace_point_emit_int(ret); +) +#endif RTE_TRACE_POINT( rte_eth_trace_read_clock, @@ -2146,38 +2158,75 @@ RTE_TRACE_POINT_FP( ) /* Called in loop in examples/ptpclient */ +#if defined(_TIME_BITS) && _TIME_BITS == 64 RTE_TRACE_POINT_FP( rte_eth_trace_timesync_read_rx_timestamp, RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct timespec *timestamp, uint32_t flags, int ret), rte_trace_point_emit_u16(port_id); - rte_trace_point_emit_size_t(timestamp->tv_sec); + rte_trace_point_emit_u64(timestamp->tv_sec); rte_trace_point_emit_long(timestamp->tv_nsec); rte_trace_point_emit_u32(flags); rte_trace_point_emit_int(ret); ) +#else +RTE_TRACE_POINT_FP( + rte_eth_trace_timesync_read_rx_timestamp, + RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct timespec *timestamp, + uint32_t flags, int ret), + rte_trace_point_emit_u16(port_id); + rte_trace_point_emit_size_t(timestamp->tv_sec); + rte_trace_point_emit_long(timestamp->tv_nsec); + rte_trace_point_emit_u32(flags); + rte_trace_point_emit_int(ret); +) +#endif /* Called in loop in examples/ptpclient */ +#if defined(_TIME_BITS) && _TIME_BITS == 64 RTE_TRACE_POINT_FP( rte_eth_trace_timesync_read_tx_timestamp, RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct timespec *timestamp, int ret), rte_trace_point_emit_u16(port_id); - rte_trace_point_emit_size_t(timestamp->tv_sec); + rte_trace_point_emit_u64(timestamp->tv_sec); rte_trace_point_emit_long(timestamp->tv_nsec); rte_trace_point_emit_int(ret); ) +#else +RTE_TRACE_POINT_FP( + rte_eth_trace_timesync_read_tx_timestamp, + RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct timespec *timestamp, + int ret), + rte_trace_point_emit_u16(port_id); + rte_trace_point_emit_size_t(timestamp->tv_sec); + rte_trace_point_emit_long(timestamp->tv_nsec); + rte_trace_point_emit_int(ret); +) +#endif /* Called in loop in examples/ptpclient */ +#if defined(_TIME_BITS) && _TIME_BITS == 64 RTE_TRACE_POINT_FP( rte_eth_trace_timesync_read_time, RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct timespec *time, int ret), rte_trace_point_emit_u16(port_id); - rte_trace_point_emit_size_t(time->tv_sec); + rte_trace_point_emit_u64(time->tv_sec); rte_trace_point_emit_long(time->tv_nsec); rte_trace_point_emit_int(ret); ) +#else +RTE_TRACE_POINT_FP( + rte_eth_trace_timesync_read_time, + RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct timespec *time, + int ret), + rte_trace_point_emit_u16(port_id); + rte_trace_point_emit_size_t(time->tv_sec); + rte_trace_point_emit_long(time->tv_nsec); + rte_trace_point_emit_int(ret); +) +#endif /* Called in loop in examples/ptpclient */ RTE_TRACE_POINT_FP( -- 2.34.1