lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 17 Sep 2019 07:24:27 -0400 From: Jianyong Wu <jianyong.wu@....com> To: netdev@...r.kernel.org, pbonzini@...hat.com, sean.j.christopherson@...el.com, maz@...nel.org, richardcochran@...il.com, Mark.Rutland@....com, Will.Deacon@....com, suzuki.poulose@....com Cc: linux-kernel@...r.kernel.org, Steve.Capper@....com, Kaly.Xin@....com, justin.he@....com, jianyong.wu@....com, nd@....com, linux-arm-kernel@...ts.infradead.org Subject: [PATCH 3/6] Timer: expose monotonic clock and counter value A number of PTP drivers (such as ptp-kvm) are assuming what the current clock source is, which could lead to interesting effects on systems where the clocksource can change depending on external events. For this purpose, add a new API that retrives both the current monotonic clock as well as its counter value. Signed-off-by: Marc Zyngier <maz@...nel.org> Signed-off-by: Jianyong Wu <jianyong.wu@....com> --- include/linux/timekeeping.h | 3 +++ kernel/time/timekeeping.c | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h index a8ab0f143ac4..a5389adaa8bc 100644 --- a/include/linux/timekeeping.h +++ b/include/linux/timekeeping.h @@ -247,6 +247,9 @@ extern int get_device_system_crosststamp( struct system_time_snapshot *history, struct system_device_crosststamp *xtstamp); +/* Obtain current monotonic clock and its counter value */ +extern void get_current_counterval(struct system_counterval_t *sc); + /* * Simultaneously snapshot realtime and monotonic raw clocks */ diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 44b726bab4bd..07a0969625b1 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -1098,6 +1098,19 @@ static bool cycle_between(u64 before, u64 test, u64 after) return false; } +/** + * get_current_counterval - Snapshot the current clocksource and counter value + * @sc: Pointer to a struct containing the current clocksource and its value + */ +void get_current_counterval(struct system_counterval_t *sc) +{ + struct timekeeper *tk = &tk_core.timekeeper; + + sc->cs = READ_ONCE(tk->tkr_mono.clock); + sc->cycles = sc->cs->read(sc->cs); +} +EXPORT_SYMBOL_GPL(get_current_counterval); + /** * get_device_system_crosststamp - Synchronously capture system/device timestamp * @get_time_fn: Callback to get simultaneous device time and -- 2.17.1
Powered by blists - more mailing lists