There are two issues being fixed here: 1) The code currently clamps timeout length so not to overflow the computed cycle difference variable or the sys_clock_announce() argument's range. But this completely fails to take into account the case where two successive timeouts with enough time between them will still overflow the cycle difference and/or the tick count. 2) If a timeout with K_TICKS_FOREVER is provided then the comparator is set with UINT64_MAX which is bogus. Not only this value doesn't make much sense in the context of a running cycle counter, but it also opens the possibility for the same cycle diff and/or ticks overflow as above. Fix both of those by clamping the actual number of cycles to wait for based on the previous report occurrence rather than clamping the timeout ticks. Signed-off-by: Nicolas Pitre <npitre@baylibre.com> |
||
|---|---|---|
| .. | ||
| altera_avalon_timer_hal.c | ||
| ambiq_stimer.c | ||
| apic_timer.c | ||
| apic_tsc.c | ||
| arcv2_timer0.c | ||
| arm_arch_timer.c | ||
| cc13xx_cc26xx_rtc_timer.c | ||
| CMakeLists.txt | ||
| cortex_m_systick.c | ||
| esp32_sys_timer.c | ||
| gecko_burtc_timer.c | ||
| hpet.c | ||
| intel_adsp_timer.c | ||
| ite_it8xxx2_timer.c | ||
| Kconfig | ||
| Kconfig.altera_avalon | ||
| Kconfig.ambiq | ||
| Kconfig.arcv2 | ||
| Kconfig.arm_arch | ||
| Kconfig.cavs | ||
| Kconfig.cc13xx_cc26xx_rtc | ||
| Kconfig.cortex_m_systick | ||
| Kconfig.esp32 | ||
| Kconfig.gecko | ||
| Kconfig.ite_it8xxx2 | ||
| Kconfig.leon_gptimer | ||
| Kconfig.litex | ||
| Kconfig.mchp_xec_rtos | ||
| Kconfig.mcux_gpt | ||
| Kconfig.mcux_lptmr | ||
| Kconfig.mcux_os | ||
| Kconfig.mips_cp0 | ||
| Kconfig.native_posix | ||
| Kconfig.npcx_itim | ||
| Kconfig.nrf_grtc | ||
| Kconfig.nrf_rtc | ||
| Kconfig.nrf_xrtc | ||
| Kconfig.rcar_cmt | ||
| Kconfig.riscv_machine | ||
| Kconfig.rv32m1_lptmr | ||
| Kconfig.sam0_rtc | ||
| Kconfig.smartbond | ||
| Kconfig.stm32_lptim | ||
| Kconfig.x86 | ||
| Kconfig.xlnx_psttc | ||
| Kconfig.xtensa | ||
| leon_gptimer.c | ||
| litex_timer.c | ||
| mchp_xec_rtos_timer.c | ||
| mcux_gpt_timer.c | ||
| mcux_lptmr_timer.c | ||
| mcux_os_timer.c | ||
| mips_cp0_timer.c | ||
| native_posix_timer.c | ||
| npcx_itim_timer.c | ||
| nrf_grtc_timer.c | ||
| nrf_rtc_timer.c | ||
| rcar_cmt_timer.c | ||
| riscv_machine_timer.c | ||
| rv32m1_lptmr_timer.c | ||
| sam0_rtc_timer.c | ||
| smartbond_timer.c | ||
| stm32_lptim_timer.c | ||
| sys_clock_init.c | ||
| xlnx_psttc_timer_priv.h | ||
| xlnx_psttc_timer.c | ||
| xtensa_sys_timer.c | ||