From 03437f2dc83e0047817bf140be6a7475f5257e63 Mon Sep 17 00:00:00 2001 From: Fady Bader Date: Thu, 18 Jun 2020 09:55:21 +0300 Subject: [PATCH] timer: move from common to Unix directory EAL common timer doesn't compile under Windows. Compilation log: error LNK2019: unresolved external symbol nanosleep referenced in function rte_delay_us_sleep error LNK2019: unresolved external symbol get_tsc_freq referenced in function set_tsc_freq error LNK2019: unresolved external symbol sleep referenced in function set_tsc_freq The reason was that some functions called POSIX functions. The solution was to move POSIX dependent functions from common to Unix. Signed-off-by: Fady Bader Reviewed-by: Tal Shnaiderman Acked-by: Ranjit Menon --- lib/librte_eal/common/eal_common_timer.c | 22 ------------------ lib/librte_eal/freebsd/Makefile | 1 + lib/librte_eal/linux/Makefile | 1 + lib/librte_eal/unix/eal_unix_timer.c | 29 ++++++++++++++++++++++++ lib/librte_eal/unix/meson.build | 1 + 5 files changed, 32 insertions(+), 22 deletions(-) create mode 100644 lib/librte_eal/unix/eal_unix_timer.c diff --git a/lib/librte_eal/common/eal_common_timer.c b/lib/librte_eal/common/eal_common_timer.c index fa9ee1b224..71e0bd035a 100644 --- a/lib/librte_eal/common/eal_common_timer.c +++ b/lib/librte_eal/common/eal_common_timer.c @@ -35,28 +35,6 @@ rte_delay_us_block(unsigned int us) rte_pause(); } -void -rte_delay_us_sleep(unsigned int us) -{ - struct timespec wait[2]; - int ind = 0; - - wait[0].tv_sec = 0; - if (us >= US_PER_S) { - wait[0].tv_sec = us / US_PER_S; - us -= wait[0].tv_sec * US_PER_S; - } - wait[0].tv_nsec = 1000 * us; - - while (nanosleep(&wait[ind], &wait[1 - ind]) && errno == EINTR) { - /* - * Sleep was interrupted. Flip the index, so the 'remainder' - * will become the 'request' for a next call. - */ - ind = 1 - ind; - } -} - uint64_t rte_get_tsc_hz(void) { diff --git a/lib/librte_eal/freebsd/Makefile b/lib/librte_eal/freebsd/Makefile index 2374ba0b7d..d18c00eeae 100644 --- a/lib/librte_eal/freebsd/Makefile +++ b/lib/librte_eal/freebsd/Makefile @@ -78,6 +78,7 @@ SRCS-$(CONFIG_RTE_EXEC_ENV_FREEBSD) += rte_reciprocal.c # from unix dir SRCS-$(CONFIG_RTE_EXEC_ENV_FREEBSD) += eal_file.c SRCS-$(CONFIG_RTE_EXEC_ENV_FREEBSD) += eal_unix_memory.c +SRCS-$(CONFIG_RTE_EXEC_ENV_FREEBSD) += eal_unix_timer.c # from arch dir SRCS-$(CONFIG_RTE_EXEC_ENV_FREEBSD) += rte_cpuflags.c diff --git a/lib/librte_eal/linux/Makefile b/lib/librte_eal/linux/Makefile index 07ce643bae..5d97073ed2 100644 --- a/lib/librte_eal/linux/Makefile +++ b/lib/librte_eal/linux/Makefile @@ -86,6 +86,7 @@ SRCS-$(CONFIG_RTE_EXEC_ENV_LINUX) += rte_reciprocal.c # from unix dir SRCS-$(CONFIG_RTE_EXEC_ENV_LINUX) += eal_file.c SRCS-$(CONFIG_RTE_EXEC_ENV_LINUX) += eal_unix_memory.c +SRCS-$(CONFIG_RTE_EXEC_ENV_LINUX) += eal_unix_timer.c # from arch dir SRCS-$(CONFIG_RTE_EXEC_ENV_LINUX) += rte_cpuflags.c diff --git a/lib/librte_eal/unix/eal_unix_timer.c b/lib/librte_eal/unix/eal_unix_timer.c new file mode 100644 index 0000000000..cc50159104 --- /dev/null +++ b/lib/librte_eal/unix/eal_unix_timer.c @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2020 Mellanox Technologies, Ltd + */ + +#include + +#include + +void +rte_delay_us_sleep(unsigned int us) +{ + struct timespec wait[2]; + int ind = 0; + + wait[0].tv_sec = 0; + if (us >= US_PER_S) { + wait[0].tv_sec = us / US_PER_S; + us -= wait[0].tv_sec * US_PER_S; + } + wait[0].tv_nsec = 1000 * us; + + while (nanosleep(&wait[ind], &wait[1 - ind]) && errno == EINTR) { + /* + * Sleep was interrupted. Flip the index, so the 'remainder' + * will become the 'request' for a next call. + */ + ind = 1 - ind; + } +} diff --git a/lib/librte_eal/unix/meson.build b/lib/librte_eal/unix/meson.build index e733910a1a..d3af6b6fe2 100644 --- a/lib/librte_eal/unix/meson.build +++ b/lib/librte_eal/unix/meson.build @@ -4,4 +4,5 @@ sources += files( 'eal_file.c', 'eal_unix_memory.c', + 'eal_unix_timer.c', ) -- 2.20.1