|
@@ -702,6 +702,23 @@ ktime_t ktime_get(void)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(ktime_get);
|
|
|
|
|
|
+u32 ktime_get_resolution_ns(void)
|
|
|
+{
|
|
|
+ struct timekeeper *tk = &tk_core.timekeeper;
|
|
|
+ unsigned int seq;
|
|
|
+ u32 nsecs;
|
|
|
+
|
|
|
+ WARN_ON(timekeeping_suspended);
|
|
|
+
|
|
|
+ do {
|
|
|
+ seq = read_seqcount_begin(&tk_core.seq);
|
|
|
+ nsecs = tk->tkr_mono.mult >> tk->tkr_mono.shift;
|
|
|
+ } while (read_seqcount_retry(&tk_core.seq, seq));
|
|
|
+
|
|
|
+ return nsecs;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(ktime_get_resolution_ns);
|
|
|
+
|
|
|
static ktime_t *offsets[TK_OFFS_MAX] = {
|
|
|
[TK_OFFS_REAL] = &tk_core.timekeeper.offs_real,
|
|
|
[TK_OFFS_BOOT] = &tk_core.timekeeper.offs_boot,
|