[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[qemu-s390x] [PULL 04/15] s390x/tcg: avoid overflows in time2tod/tod2tim
From: |
Cornelia Huck |
Subject: |
[qemu-s390x] [PULL 04/15] s390x/tcg: avoid overflows in time2tod/tod2time |
Date: |
Mon, 2 Jul 2018 13:17:26 +0200 |
From: David Hildenbrand <address@hidden>
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>
Message-Id: <address@hidden>
Signed-off-by: Cornelia Huck <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.14.4
- [qemu-s390x] [PULL 00/15] s390x patches for 3.0, Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 01/15] s390/ipl: fix ipl with -no-reboot, Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 02/15] loader: Check access size when calling rom_ptr() to avoid crashes, Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 03/15] s390x/cpumodel: default enable bpb and ppa15 for z196 and later, Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 04/15] s390x/tcg: avoid overflows in time2tod/tod2time,
Cornelia Huck <=
- [qemu-s390x] [PULL 05/15] s390x/kvm: pass values instead of pointers to kvm_s390_set_clock_*(), Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 07/15] s390x/tcg: drop tod_basetime, Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 09/15] s390x/tcg: SET CLOCK COMPARATOR can clear CKC interrupts, Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 08/15] s390x/tcg: properly implement the TOD, Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 06/15] s390x/tod: factor out TOD into separate device, Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 11/15] s390x/tcg: rearm the CKC timer during migration, Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 13/15] s390x/kvm: legacy_s390_alloc() only supports one allocation, Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 10/15] s390x/tcg: implement SET CLOCK, Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 12/15] s390x/tcg: fix CPU hotplug with single-threaded TCG, Cornelia Huck, 2018/07/02
- [qemu-s390x] [PULL 14/15] s390x/kvm: indicate alignment in legacy_s390_alloc(), Cornelia Huck, 2018/07/02