summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2019-07-29 23:47:04 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2019-07-29 23:52:37 +0900
commit77372afbe06d60c8700c5466824396c72e312cb1 (patch)
treeddfa2868295772c34aa031d4263016723a7b29dd
parent57894dc98977dbe33734d5b7319bd7a89ce809d1 (diff)
downloadsystemd-77372afbe06d60c8700c5466824396c72e312cb1.tar.gz
time-util: introduce jiffies_to_usec()
-rw-r--r--src/basic/time-util.c16
-rw-r--r--src/basic/time-util.h3
2 files changed, 15 insertions, 4 deletions
diff --git a/src/basic/time-util.c b/src/basic/time-util.c
index 434159f41c..e13361463b 100644
--- a/src/basic/time-util.c
+++ b/src/basic/time-util.c
@@ -1414,8 +1414,8 @@ struct tm *localtime_or_gmtime_r(const time_t *t, struct tm *tm, bool utc) {
return utc ? gmtime_r(t, tm) : localtime_r(t, tm);
}
-unsigned long usec_to_jiffies(usec_t u) {
- static thread_local unsigned long hz = 0;
+static uint32_t sysconf_clock_ticks_cached(void) {
+ static thread_local uint32_t hz = 0;
long r;
if (hz == 0) {
@@ -1425,7 +1425,17 @@ unsigned long usec_to_jiffies(usec_t u) {
hz = r;
}
- return DIV_ROUND_UP(u , USEC_PER_SEC / hz);
+ return hz;
+}
+
+uint32_t usec_to_jiffies(usec_t u) {
+ uint32_t hz = sysconf_clock_ticks_cached();
+ return DIV_ROUND_UP(u, USEC_PER_SEC / hz);
+}
+
+usec_t jiffies_to_usec(uint32_t j) {
+ uint32_t hz = sysconf_clock_ticks_cached();
+ return DIV_ROUND_UP(j * USEC_PER_SEC, hz);
}
usec_t usec_shift_clock(usec_t x, clockid_t from, clockid_t to) {
diff --git a/src/basic/time-util.h b/src/basic/time-util.h
index e3a529d970..4c371257e3 100644
--- a/src/basic/time-util.h
+++ b/src/basic/time-util.h
@@ -136,7 +136,8 @@ int get_timezone(char **timezone);
time_t mktime_or_timegm(struct tm *tm, bool utc);
struct tm *localtime_or_gmtime_r(const time_t *t, struct tm *tm, bool utc);
-unsigned long usec_to_jiffies(usec_t usec);
+uint32_t usec_to_jiffies(usec_t usec);
+usec_t jiffies_to_usec(uint32_t jiffies);
bool in_utc_timezone(void);