When rebasing RVKMS against my hrtimer additions, which themselves were
rebased against Fujita's recent work for introducing Instant/Delta, I
needed to reintroduce the ability to perform some of the arithmetic that
rvkms uses for vblank emulation - so, this commit introduces such
arithmetic.
Example usage:
https://gitlab.freedesktop.org/lyudess/linux/-/blob/rvkms-slim/drivers/gpu/drm/rvkms/crtc.rs?ref_type=heads#L167
Previous versions:
Version 1: https://lkml.org/lkml/2025/7/24/1400
Version 2: https://lkml.org/lkml/2025/8/7/950
Lyude Paul (2):
rust: time: Implement Add<Delta>/Sub<Delta> for Instant
rust: time: Implement basic arithmetic operations for Delta
rust/kernel/time.rs | 141 +++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 140 insertions(+), 1 deletion(-)
Changelog:
rust: time: Implement Add<Delta>/Sub<Delta> for Instant
V2:
* Change behavior in ops::{Add,Sub}<Delta> so that we panic on overflows
under the same conditions that arithmetic operations in rust would panic
by default.
V3:
* Don't forget to update the commit message this time!
rust: time: Implement basic arithmetic operations for Delta
V2:
* Don't forget to make sure that we inline all of these
* Drop ops::Rem and ops::RemAssign implementations for Delta, replace with
Delta::rem_nanos() instead. It turns out that there's actually no way to
perform i64 % i64 on 32 bit platforms in the kernel at the moment, the
closest that we have is div_s64_rem() which only allows a 32 bit divisor.
* Actually use the kernel arithmetic helpers for division/remainders so
that this code works on both 32 and 64 bit platforms.
V3:
* Change the output type for Div to i64, drop DivAssign
* Change Mul/MulAssign to accept i64, not another Delta
* Fix parameter name in rem_nanos (ns -> dividend)
base-commit: c17b750b3ad9f45f2b6f7e6f7f4679844244f0b9
--
2.50.0