]> git.proxmox.com Git - qemu.git/commitdiff
exynos4210/mct: Avoid infinite loop on non incremental timers
authorJean-Christophe DUBOIS <jcd@tribudubois.net>
Mon, 3 Dec 2012 12:55:57 +0000 (12:55 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Tue, 11 Dec 2012 12:54:47 +0000 (12:54 +0000)
Check for a 0 "distance" value to avoid infinite loop when the
expired FCR timer was not programed with auto-increment.

With this change the behavior is coherent with the same type
of code in the exynos4210_gfrc_restart() function in the same
file.

Linux seems to mostly use this timer with auto-increment
which explain why it is not a problem most of the time.

However other OS might have a problem with this if they
don't use the auto-increment feature.

Signed-off-by: Jean-Christophe DUBOIS <jcd@tribudubois.net>
Reviewed-by: Evgeny Voevodin <e.voevodin@samsung.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
hw/exynos4210_mct.c

index e79cd6ac01319bba1f6ca6a04f94ed970bd10dcc..37dbda92df0cb42bbdd52119efa537a3f1868963 100644 (file)
@@ -568,7 +568,7 @@ static void exynos4210_gfrc_event(void *opaque)
     /* Reload FRC to reach nearest comparator */
     s->g_timer.curr_comp = exynos4210_gcomp_find(s);
     distance = exynos4210_gcomp_get_distance(s, s->g_timer.curr_comp);
-    if (distance > MCT_GT_COUNTER_STEP) {
+    if (distance > MCT_GT_COUNTER_STEP || !distance) {
         distance = MCT_GT_COUNTER_STEP;
     }
     exynos4210_gfrc_set_count(&s->g_timer, distance);