[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[qemu-s390x] [PATCH v4 1/9] s390x/tcg: avoid overflows in time2tod/tod2t
From: |
David Hildenbrand |
Subject: |
[qemu-s390x] [PATCH v4 1/9] s390x/tcg: avoid overflows in time2tod/tod2time |
Date: |
Wed, 27 Jun 2018 15:44:02 +0200 |
Big values for the TOD/ns clock can result in some overflows that can be
avoided. Not all overflows can be handled however, as the conversion either
multiplies by 4.096 or divided by 4.096.
Apply the trick used in the Linux kernel in arch/s390/include/asm/timex.h
for tod_to_ns() and use the same trick also for the conversion in the
other direction.
Reviewed-by: Thomas Huth <address@hidden>
Signed-off-by: David Hildenbrand <address@hidden>
---
target/s390x/internal.h | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/target/s390x/internal.h b/target/s390x/internal.h
index e392a02d12..6cf63340bf 100644
--- a/target/s390x/internal.h
+++ b/target/s390x/internal.h
@@ -243,13 +243,14 @@ enum cc_op {
/* Converts ns to s390's clock format */
static inline uint64_t time2tod(uint64_t ns)
{
- return (ns << 9) / 125;
+ return (ns << 9) / 125 + (((ns & 0xff10000000000000ull) / 125) << 9);
+
}
/* Converts s390's clock format to ns */
static inline uint64_t tod2time(uint64_t t)
{
- return (t * 125) >> 9;
+ return ((t >> 9) * 125) + (((t & 0x1ff) * 125) >> 9);
}
static inline hwaddr decode_basedisp_s(CPUS390XState *env, uint32_t ipb,
--
2.17.1
- [qemu-s390x] [PATCH v4 0/9] s390x: TOD refactoring + TCG CPU hotplug support, David Hildenbrand, 2018/06/27
- [qemu-s390x] [PATCH v4 2/9] s390x/kvm: pass values instead of pointers to kvm_s390_set_clock_*(), David Hildenbrand, 2018/06/27
- [qemu-s390x] [PATCH v4 1/9] s390x/tcg: avoid overflows in time2tod/tod2time,
David Hildenbrand <=
- [qemu-s390x] [PATCH v4 4/9] s390x/tcg: drop tod_basetime, David Hildenbrand, 2018/06/27
- [qemu-s390x] [PATCH v4 6/9] s390x/tcg: SET CLOCK COMPARATOR can clear CKC interrupts, David Hildenbrand, 2018/06/27
- [qemu-s390x] [PATCH v4 9/9] s390x/tcg: fix CPU hotplug with single-threaded TCG, David Hildenbrand, 2018/06/27
- [qemu-s390x] [PATCH v4 7/9] s390x/tcg: implement SET CLOCK, David Hildenbrand, 2018/06/27
- [qemu-s390x] [PATCH v4 8/9] s390x/tcg: rearm the CKC timer during migration, David Hildenbrand, 2018/06/27
- [qemu-s390x] [PATCH v4 5/9] s390x/tcg: properly implement the TOD, David Hildenbrand, 2018/06/27
- [qemu-s390x] [PATCH v4 3/9] s390x/tod: factor out TOD into separate device, David Hildenbrand, 2018/06/27
- Re: [qemu-s390x] [PATCH v4 0/9] s390x: TOD refactoring + TCG CPU hotplug support, Cornelia Huck, 2018/06/27