[ovs-dev] [PATCH v5 03/10] util: Add high resolution sleep support.
Bhanuprakash Bodireddy
bhanuprakash.bodireddy at intel.com
Fri Sep 15 16:40:23 UTC 2017
This commit introduces xnanosleep() for the threads needing high
resolution sleep timeouts.
Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy at intel.com>
---
lib/timeval.c | 2 +-
lib/timeval.h | 1 +
lib/util.c | 19 +++++++++++++++++++
lib/util.h | 1 +
4 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/lib/timeval.c b/lib/timeval.c
index dd63f03..8190b41 100644
--- a/lib/timeval.c
+++ b/lib/timeval.c
@@ -474,7 +474,7 @@ xclock_gettime(clock_t id, struct timespec *ts)
}
}
-static void
+void
msec_to_timespec(long long int ms, struct timespec *ts)
{
ts->tv_sec = ms / 1000;
diff --git a/lib/timeval.h b/lib/timeval.h
index 7957dad..110745c 100644
--- a/lib/timeval.h
+++ b/lib/timeval.h
@@ -69,6 +69,7 @@ size_t strftime_msec(char *s, size_t max, const char *format,
const struct tm_msec *);
void xgettimeofday(struct timeval *);
void xclock_gettime(clock_t, struct timespec *);
+void msec_to_timespec(long long int , struct timespec *);
int get_cpu_usage(void);
diff --git a/lib/util.c b/lib/util.c
index 36e3731..4ad7eea 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -2197,6 +2197,25 @@ xsleep(unsigned int seconds)
ovsrcu_quiesce_end();
}
+/* High resolution sleep. */
+void
+xnanosleep(uint64_t ms)
+{
+ ovsrcu_quiesce_start();
+#ifdef __linux__
+ int retval;
+ struct timespec ts_sleep;
+ msec_to_timespec(ms, &ts_sleep);
+
+ int error = 0;
+ do {
+ retval = nanosleep(&ts_sleep, NULL);
+ error = retval < 0 ? errno : 0;
+ } while (error == EINTR);
+#endif
+ ovsrcu_quiesce_end();
+}
+
/* Determine whether standard output is a tty or not. This is useful to decide
* whether to use color output or not when --color option for utilities is set
* to `auto`.
diff --git a/lib/util.h b/lib/util.h
index 764e0a0..0449fa1 100644
--- a/lib/util.h
+++ b/lib/util.h
@@ -489,6 +489,7 @@ ovs_u128_and(const ovs_u128 a, const ovs_u128 b)
}
void xsleep(unsigned int seconds);
+void xnanosleep(uint64_t ms);
bool is_stdout_a_tty(void);
--
2.4.11
More information about the dev
mailing list