diff options
author | Jean-Christophe DUBOIS <jcd@tribudubois.net> | 2012-12-03 12:55:57 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2012-12-11 12:54:47 +0000 |
commit | 97331270e50f5858c82a0c6d146da81f5b776535 (patch) | |
tree | e6dddc24f783cfe7652293c6469506d29a770b80 /hw/exynos4210_mct.c | |
parent | f47b48fb678581d6ee369cfe26b3513100b7d53e (diff) |
exynos4210/mct: Avoid infinite loop on non incremental timers
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>
Diffstat (limited to 'hw/exynos4210_mct.c')
-rw-r--r-- | hw/exynos4210_mct.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/hw/exynos4210_mct.c b/hw/exynos4210_mct.c index e79cd6ac01..37dbda92df 100644 --- a/hw/exynos4210_mct.c +++ b/hw/exynos4210_mct.c @@ -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); |