[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v15 02/15] hw/ptimer: Fix counter - 1 returned by pt
From: |
Dmitry Osipenko |
Subject: |
[Qemu-devel] [PATCH v15 02/15] hw/ptimer: Fix counter - 1 returned by ptimer_get_count for the active timer |
Date: |
Thu, 21 Jul 2016 17:31:13 +0300 |
Due to rounding down performed by ptimer_get_count, it returns counter - 1 for
the enabled timer. That's incorrect because counter should decrement only after
period been expired, not before. I.e. if running timer has been loaded with
value X, then timer counter should stay with X until period expired.
Fix this by adding 1 to the counter value.
Signed-off-by: Dmitry Osipenko <address@hidden>
---
hw/core/ptimer.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/hw/core/ptimer.c b/hw/core/ptimer.c
index 9dc2bb0..461b91c 100644
--- a/hw/core/ptimer.c
+++ b/hw/core/ptimer.c
@@ -89,6 +89,7 @@ uint64_t ptimer_get_count(ptimer_state *s)
if (s->enabled) {
int64_t now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
int64_t next = s->next_event;
+ int64_t last = s->last_event;
bool expired = (now - next >= 0);
bool oneshot = (s->enabled == 2);
@@ -97,6 +98,8 @@ uint64_t ptimer_get_count(ptimer_state *s)
/* Prevent timer underflowing if it should already have
triggered. */
counter = 1;
+ } else if (now == last) {
+ counter = s->delta;
} else {
uint64_t rem;
uint64_t div;
@@ -139,7 +142,7 @@ uint64_t ptimer_get_count(ptimer_state *s)
if ((uint32_t)(period_frac << shift))
div += 1;
}
- counter = rem / div;
+ counter = rem / div + 1;
}
} else {
counter = s->delta;
--
2.9.2
- [Qemu-devel] [PATCH v15 00/15] PTimer fixes/features and ARM MPTimer conversion, Dmitry Osipenko, 2016/07/21
- [Qemu-devel] [PATCH v15 01/15] hw/ptimer: Change ptimer_get_count to return "1" for the expired timer, Dmitry Osipenko, 2016/07/21
- [Qemu-devel] [PATCH v15 03/15] hw/ptimer: Actually stop timer in case of error, Dmitry Osipenko, 2016/07/21
- [Qemu-devel] [PATCH v15 02/15] hw/ptimer: Fix counter - 1 returned by ptimer_get_count for the active timer,
Dmitry Osipenko <=
- [Qemu-devel] [PATCH v15 08/15] hw/ptimer: Add "continuous trigger" policy, Dmitry Osipenko, 2016/07/21
- [Qemu-devel] [PATCH v15 05/15] tests: Add ptimer tests, Dmitry Osipenko, 2016/07/21
- [Qemu-devel] [PATCH v15 09/15] tests: ptimer: Add tests for "continuous trigger" policy, Dmitry Osipenko, 2016/07/21
- [Qemu-devel] [PATCH v15 06/15] hw/ptimer: Add "wraparound after one period" policy, Dmitry Osipenko, 2016/07/21
- [Qemu-devel] [PATCH v15 04/15] hw/ptimer: Introduce timer policy feature, Dmitry Osipenko, 2016/07/21
- [Qemu-devel] [PATCH v15 12/15] hw/ptimer: Add "no immediate reload" policy, Dmitry Osipenko, 2016/07/21
- [Qemu-devel] [PATCH v15 13/15] tests: ptimer: Add tests for "no immediate reload" policy, Dmitry Osipenko, 2016/07/21
- [Qemu-devel] [PATCH v15 07/15] tests: ptimer: Add tests for "wraparound after one period" policy, Dmitry Osipenko, 2016/07/21
- [Qemu-devel] [PATCH v15 10/15] hw/ptimer: Add "no immediate trigger" policy, Dmitry Osipenko, 2016/07/21
- [Qemu-devel] [PATCH v15 11/15] tests: ptimer: Add tests for "no immediate trigger" policy, Dmitry Osipenko, 2016/07/21