Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tests/timer_api: Fix absolute timeout logic
The test_timeout_abs case had baked in similar mistakes to the off-by-one in the absolute timer implementation. FOR THE RECORD: If you have an absolute timeout expiration set for a tick value "N", and the current time returned by k_uptime_ticks() is "T", then the time returned (at the same moment) by any of the *_remaining_ticks() APIs must ALWAYS AND FOREVER BE EXACTLY "N - T" (also: "N - T > 0" always, until the moment the kernel ISR hands off control to the first timeout handler expiring at that tick). The tick math is exact. No slop is needed on any systems, no matter whether their clocks divide by milliseconds or not. The only gotcha is that we need to be sure that the calls don't interleave with a real time tick advance, which we do here with a simple retry loop. But, about slop... This patch also includes a related fix for the test_sleep_abs(). On an intel_adsp (which has 50 kHz ticks, a comparatively slow idle resume and interrupt entry, and even has two CPUs to mess with latency measurements) I would occasionally see the k_sleep() take more than a tick to wake up from the interrupt handler until the return to application code. Add some real time slop there (just 100us) to handle systems like this. Fixes #32572 Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
- Loading branch information