On 7/11/25 11:23, Luc Michel wrote:
Add the register_time_change_notifier method to the RISCVCPUTimeSrcIf
interface. This method allows the time source user to register a
notifier on tick counter asynchronous modification (i.e., a modification
that is not due to the monotonic nature of the counter). This can happen
if the time source counter is writable, which is the case of the `time'
register of the ACLINT.
Use this mechanism in time_helper.c to recompute the sstc timers
deadlines.
Signed-off-by: Luc Michel <[email protected]>
---
target/riscv/cpu-qom.h | 7 +++++++
target/riscv/cpu.h | 1 +
target/riscv/time_helper.h | 11 +++++++++++
target/riscv/time_helper.c | 13 +++++++++++++
4 files changed, 32 insertions(+)
diff --git a/target/riscv/time_helper.h b/target/riscv/time_helper.h
index b51fdd96570..074b516f4ad 100644
--- a/target/riscv/time_helper.h
+++ b/target/riscv/time_helper.h
@@ -42,6 +42,17 @@ static inline uint32_t
riscv_cpu_time_src_get_tick_freq(RISCVCPUTimeSrcIf *src)
g_assert(rctsc->get_tick_freq != NULL);
return rctsc->get_tick_freq(src);
}
+static inline void
+riscv_cpu_time_src_register_time_change_notifier(RISCVCPUTimeSrcIf *src,
+ Notifier *notifier)
+{
+ RISCVCPUTimeSrcIfClass *rctsc = RISCV_CPU_TIME_SRC_IF_GET_CLASS(src);
+
+ if (rctsc->register_time_change_notifier) {
+ rctsc->register_time_change_notifier(src, notifier);
+ }
What about some trace event to help developers? I.e.:
if (!rctsc->register_time_change_notifier) {
trace_riscv_cpu_time_src_register_time_change_without_notifier();
return;
}
rctsc->register_time_change_notifier(src, notifier);
+}
Anyhow:
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>