[v4,1/2] timer: move from common to Unix directory

Message ID 20200506120109.9856-2-fady@mellanox.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series eal timer split and implementation for Windows |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail apply issues

Commit Message

Fady Bader May 6, 2020, 12:01 p.m. UTC
  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>
---
 lib/librte_eal/common/eal_common_timer.c | 22 ----------------------
 lib/librte_eal/unix/eal_timer.c          | 29 +++++++++++++++++++++++++++++
 lib/librte_eal/unix/meson.build          |  1 +
 3 files changed, 30 insertions(+), 22 deletions(-)
 create mode 100644 lib/librte_eal/unix/eal_timer.c
  

Comments

Dmitry Kozlyuk May 6, 2020, 7:49 p.m. UTC | #1
On 2020-05-06 15:01 GMT+0300 Fady Bader wrote:
[snip]
> diff --git a/lib/librte_eal/unix/meson.build b/lib/librte_eal/unix/meson.build
> index 5734f26ad..d13e66663 100644
> --- a/lib/librte_eal/unix/meson.build
> +++ b/lib/librte_eal/unix/meson.build
> @@ -4,4 +4,5 @@
>  sources += files(
>  	'eal_unix.c',
>  	'eal_unix_memory.c',
> +	'eal_timer.c',
>  )
> -- 
> 2.16.1.windows.4
> 

I suggest creating unix/ directory by this patch to break dependency on
memory management series, because its review will clearly take longer. I'd
better rebase MM series after this one will get merged.
  

Patch

diff --git a/lib/librte_eal/common/eal_common_timer.c b/lib/librte_eal/common/eal_common_timer.c
index fa9ee1b22..71e0bd035 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/unix/eal_timer.c b/lib/librte_eal/unix/eal_timer.c
new file mode 100644
index 000000000..dc3a7925f
--- /dev/null
+++ b/lib/librte_eal/unix/eal_timer.c
@@ -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;
+	}
+}
+
diff --git a/lib/librte_eal/unix/meson.build b/lib/librte_eal/unix/meson.build
index 5734f26ad..d13e66663 100644
--- a/lib/librte_eal/unix/meson.build
+++ b/lib/librte_eal/unix/meson.build
@@ -4,4 +4,5 @@ 
 sources += files(
 	'eal_unix.c',
 	'eal_unix_memory.c',
+	'eal_timer.c',
 )