While rebasing rvkms I noticed that timers I was setting seemed to have pretty random timer values that amounted slightly over 2x the time value I set each time. After a lot of debugging, I finally managed to figure out why: it seems that since we moved to Instant and Delta, we mistakenly began passing the clocksource ID to hrtimer_start_range_ns, when we should be passing the timer mode instead. Presumably, this works fine for simple relative timers - but immediately breaks on other types of timers. So, fix this by passing the ID for the timer mode instead.
Unified · Split
| @@ -398,7 +398,7 @@ pub unsafe trait HasHrTimer<T> { · 397 unmodified lines | |||
| 398 | Self::c_timer_ptr(this).cast_mut(), | 398 | Self::c_timer_ptr(this).cast_mut(), |
| 399 | expires.as_nanos(), | 399 | expires.as_nanos(), |
| 400 | 0, | 400 | 0, |
| 401 | <Self::TimerMode as HrTimerMode>::Clock::ID as u32, | 401 | <Self::TimerMode as HrTimerMode>::C_MODE, |
| 402 | ); | 402 | ); |
| 403 | } | 403 | } |
| 404 | } | 404 | } |