mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:10 +00:00
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 <thuth@redhat.com> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Message-ID: <20251016175954.41153-2-iii@linux.ibm.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
committed by
Thomas Huth
parent
0281105bc4
commit
df7e9243d5
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user