pussuw commented on a change in pull request #5782: URL: https://github.com/apache/incubator-nuttx/pull/5782#discussion_r837265005
########## File path: arch/risc-v/src/common/supervisor/riscv_sbi.c ########## @@ -41,7 +47,11 @@ void riscv_sbi_ack_timer(void) { +#ifdef CONFIG_NUTTSBI + riscv_mcall_ack_timer(); Review comment: As you already mentioned, this acking of the timer is not used in the RISC-V SBI spec. but my analysis of the spec is that the timer is unusable as is anyway. The format of sbi_set_timer(absolute_time) is not safe to use, as S-mode does not know the timer's value, so it cannot calculate a new mtimecmp value in absolute time that is > mtime anyway. Setting a new mtimecmp value will very likely result in either two things: - Immediate interrupt, because mtime > mtimecmp. As I said, the IRQ is a level detect, so whenever mtime > mtimecmp, an interrupt will fire. Other compare match implementations use level detect, so when time == cmpvalue, an interrupt is triggered exactly once. - Interrupt will fire much later than expected, or perhaps even never, as mtimecmp > mtime. The counter is 64-bit so mtimecmp can become so outrageously large compared to mtime, that the interrupt will never fire (the sun will explode before). -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org