etnaviv: drm: Don't miscalculate timeout
authorGuido Günther <agx@sigxcpu.org>
Wed, 22 Jan 2020 10:43:11 +0000 (11:43 +0100)
committerMarge Bot <eric+marge@anholt.net>
Wed, 22 Jan 2020 13:22:47 +0000 (13:22 +0000)
The current code overflows (s * 1000000000) for s >= 5 but that is
e.g. used in etna_bo_cpu_prep.

Signed-off-by: Guido Günther <agx@sigxcpu.org>
Reviewed-by: Jonathan Marek <jonathan@marek.ca>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3509>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3509>

src/etnaviv/drm/etnaviv_priv.h

index 2ab0e473ea919cfeb978c00edc43b5c8acc370be..8ceb6c3c4313b310fe50b3128f0c1bb01715ec4f 100644 (file)
@@ -204,10 +204,9 @@ struct etna_perfmon_signal
 static inline void get_abs_timeout(struct drm_etnaviv_timespec *tv, uint64_t ns)
 {
        struct timespec t;
 static inline void get_abs_timeout(struct drm_etnaviv_timespec *tv, uint64_t ns)
 {
        struct timespec t;
-       uint32_t s = ns / 1000000000;
        clock_gettime(CLOCK_MONOTONIC, &t);
        clock_gettime(CLOCK_MONOTONIC, &t);
-       tv->tv_sec = t.tv_sec + s;
-       tv->tv_nsec = t.tv_nsec + ns - (s * 1000000000);
+       tv->tv_sec = t.tv_sec + ns / 1000000000;
+       tv->tv_nsec = t.tv_nsec + ns % 1000000000;
 }
 
 #if HAVE_VALGRIND
 }
 
 #if HAVE_VALGRIND