diff --git a/repos/os/include/timer_session/connection.h b/repos/os/include/timer_session/connection.h index 7a6535029e..a0a6fb1f3b 100644 --- a/repos/os/include/timer_session/connection.h +++ b/repos/os/include/timer_session/connection.h @@ -192,6 +192,7 @@ class Timer::Connection : public Genode::Connection, enum { MAX_INTERPOLATION_QUALITY = 3 }; enum { MAX_REMOTE_TIME_LATENCY_US = 500 }; enum { MAX_REMOTE_TIME_TRIALS = 5 }; + enum { NR_OF_INITIAL_CALIBRATIONS = 3 * MAX_INTERPOLATION_QUALITY }; enum { MIN_FACTOR_LOG2 = 8 }; Genode::Io_signal_handler _signal_handler; diff --git a/repos/os/src/lib/timeout/timer_connection.cc b/repos/os/src/lib/timeout/timer_connection.cc index 6cdb03b014..3d2395fddb 100644 --- a/repos/os/src/lib/timeout/timer_connection.cc +++ b/repos/os/src/lib/timeout/timer_connection.cc @@ -119,6 +119,11 @@ void Timer::Connection::_enable_modern_mode() _mode = MODERN; _sigh(_signal_handler); _scheduler._enable(); + + /* do initial calibration burst to make interpolation available earlier */ + for (unsigned i = 0; i < NR_OF_INITIAL_CALIBRATIONS; i++) { + _update_real_time(); + } }