aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAurelien Jarno <aurelien@aurel32.net>2015-05-18 23:42:26 +0200
committerAlexander Graf <agraf@suse.de>2015-06-05 01:37:57 +0200
commitc941f07485e56e4b2653048e166b720428307acb (patch)
treee10112765deda556107d0fc7d5defcffd96b472f
parent9cb32c442e11d16b747fa07e29dd29b5d8227b57 (diff)
target-s390x: simplify SCKC helper
The clock comparator and the QEMU timer work the same way, triggering at a given time, they just differ by the origin and the scale. It is therefore possible to go from one to another without using the current clock value. This spares two calls to qemu_clock_get_ns, which probably return slightly different values, possibly reducing the accuracy. Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> Signed-off-by: Alexander Graf <agraf@suse.de>
-rw-r--r--target-s390x/misc_helper.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/target-s390x/misc_helper.c b/target-s390x/misc_helper.c
index 230bafdba2..120807f20b 100644
--- a/target-s390x/misc_helper.c
+++ b/target-s390x/misc_helper.c
@@ -291,12 +291,13 @@ void HELPER(sckc)(CPUS390XState *env, uint64_t time)
return;
}
- /* difference between now and then */
- time -= clock_value(env);
+ /* difference between origins */
+ time -= env->tod_offset;
+
/* nanoseconds */
time = tod2time(time);
- timer_mod(env->tod_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + time);
+ timer_mod(env->tod_timer, env->tod_basetime + time);
}
/* Store Clock Comparator */