timer: move from common to Unix directory
authorFady Bader <fady@mellanox.com>
Thu, 18 Jun 2020 06:55:21 +0000 (09:55 +0300)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 23 Jun 2020 16:33:20 +0000 (18:33 +0200)
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 <fady@mellanox.com>
Reviewed-by: Tal Shnaiderman <talshn@mellanox.com>
Acked-by: Ranjit Menon <ranjit.menon@intel.com>
lib/librte_eal/common/eal_common_timer.c
lib/librte_eal/freebsd/Makefile
lib/librte_eal/linux/Makefile
lib/librte_eal/unix/eal_unix_timer.c [new file with mode: 0644]
lib/librte_eal/unix/meson.build

index fa9ee1b..71e0bd0 100644 (file)
@@ -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)
 {
index 2374ba0..d18c00e 100644 (file)
@@ -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
index 07ce643..5d97073 100644 (file)
@@ -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 (file)
index 0000000..cc50159
--- /dev/null
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2020 Mellanox Technologies, Ltd
+ */
+
+#include <time.h>
+
+#include <rte_cycles.h>
+
+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;
+       }
+}
index e733910..d3af6b6 100644 (file)
@@ -4,4 +4,5 @@
 sources += files(
        'eal_file.c',
        'eal_unix_memory.c',
+       'eal_unix_timer.c',
 )