Fix count calculation when counter limit set to 0 (Robert Reif)
authorblueswir1 <blueswir1@c046a42c-6fe2-441c-8c8c-71466251a162>
Wed, 19 Dec 2007 17:58:24 +0000 (17:58 +0000)
committerblueswir1 <blueswir1@c046a42c-6fe2-441c-8c8c-71466251a162>
Wed, 19 Dec 2007 17:58:24 +0000 (17:58 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3840 c046a42c-6fe2-441c-8c8c-71466251a162

hw/slavio_timer.c

index f98647f..e854358 100644 (file)
@@ -97,9 +97,14 @@ static int slavio_timer_is_user(SLAVIO_TIMERState *s)
 // Convert from ptimer countdown units
 static void slavio_timer_get_out(SLAVIO_TIMERState *s)
 {
-    uint64_t count;
+    uint64_t count, limit;
 
-    count = s->limit - PERIODS_TO_LIMIT(ptimer_get_count(s->timer));
+    if (s->limit == 0) /* free-run processor or system counter */
+        limit = TIMER_MAX_COUNT32;
+    else
+        limit = s->limit;
+
+    count = limit - PERIODS_TO_LIMIT(ptimer_get_count(s->timer));
     DPRINTF("get_out: limit %" PRIx64 " count %x%08x\n", s->limit,
             s->counthigh, s->count);
     s->count = count & TIMER_COUNT_MASK32;