From: Ilya Leoshkevich Date: Thu, 16 Oct 2025 17:58:30 +0000 (+0200) Subject: target/s390x: Fix missing interrupts for small CKC values X-Git-Tag: v10.2.0-rc1~25^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=df7e9243d540ee130f044f975af8de33c45f5299;p=thirdparty%2Fqemu.git target/s390x: Fix missing interrupts for small CKC values Suppose TOD clock value is 0x1111111111111111 and clock-comparator value is 0, in which case clock-comparator interruption should occur immediately. With the current code, tod2time(env->ckc - td->base.low) ends up being a very large number, so this interruption never happens. Fix by firing the timer immediately if env->ckc < td->base.low. Cc: qemu-stable@nongnu.org Reviewed-by: Thomas Huth Signed-off-by: Ilya Leoshkevich Message-ID: <20251016175954.41153-2-iii@linux.ibm.com> Signed-off-by: Thomas Huth --- diff --git a/target/s390x/tcg/misc_helper.c b/target/s390x/tcg/misc_helper.c index 6d9d601d29..215b5b9d93 100644 --- a/target/s390x/tcg/misc_helper.c +++ b/target/s390x/tcg/misc_helper.c @@ -199,11 +199,15 @@ static void update_ckc_timer(CPUS390XState *env) return; } - /* difference between origins */ - time = env->ckc - td->base.low; + if (env->ckc < td->base.low) { + time = 0; + } else { + /* difference between origins */ + time = env->ckc - td->base.low; - /* nanoseconds */ - time = tod2time(time); + /* nanoseconds */ + time = tod2time(time); + } timer_mod(env->tod_timer, time); }