From 94450e65371cb152989bf0755d6538acc69dc4e3 Mon Sep 17 00:00:00 2001 From: Mark Poliakov Date: Sun, 5 Dec 2021 21:13:13 +0200 Subject: [PATCH] fix: use u128 for nanos in timer --- kernel/src/arch/aarch64/timer.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kernel/src/arch/aarch64/timer.rs b/kernel/src/arch/aarch64/timer.rs index f88a682..5a27914 100644 --- a/kernel/src/arch/aarch64/timer.rs +++ b/kernel/src/arch/aarch64/timer.rs @@ -50,9 +50,11 @@ impl IntSource for GenericTimer { impl TimestampSource for GenericTimer { fn timestamp(&self) -> Result { - let cnt = CNTPCT_EL0.get() * 1_000_000_000; - let frq = CNTFRQ_EL0.get(); - Ok(Duration::from_nanos(cnt / frq)) + let cnt = (CNTPCT_EL0.get() as u128) * 1_000_000_000u128; + let frq = CNTFRQ_EL0.get() as u128; + let secs = ((cnt / frq) / 1_000_000_000) as u64; + let nanos = ((cnt / frq) % 1_000_000_000) as u32; + Ok(Duration::new(secs, nanos)) } }