[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-arm] [PATCH v2 11/21] aspeed/timer: Ensure positive muldiv delta
From: |
Cédric Le Goater |
Subject: |
[Qemu-arm] [PATCH v2 11/21] aspeed/timer: Ensure positive muldiv delta |
Date: |
Tue, 18 Jun 2019 18:53:01 +0200 |
From: Christian Svensson <address@hidden>
If the host decrements the counter register that results in a negative
delta. This is then passed to muldiv64 which only handles unsigned
numbers resulting in bogus results.
This fix ensures the delta being operated on is positive.
Test case: kexec a kernel using aspeed_timer and it will freeze on the
second bootup when the kernel initializes the timer. With this patch
that no longer happens and the timer appears to run OK.
Signed-off-by: Christian Svensson <address@hidden>
Signed-off-by: Cédric Le Goater <address@hidden>
---
hw/timer/aspeed_timer.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/hw/timer/aspeed_timer.c b/hw/timer/aspeed_timer.c
index 6501fa0768e7..1f0f1886fb2a 100644
--- a/hw/timer/aspeed_timer.c
+++ b/hw/timer/aspeed_timer.c
@@ -275,7 +275,11 @@ static void aspeed_timer_set_value(AspeedTimerCtrlState
*s, int timer, int reg,
int64_t delta = (int64_t) value - (int64_t) calculate_ticks(t,
now);
uint32_t rate = calculate_rate(t);
- t->start += muldiv64(delta, NANOSECONDS_PER_SECOND, rate);
+ if (delta >= 0) {
+ t->start += muldiv64(delta, NANOSECONDS_PER_SECOND, rate);
+ } else {
+ t->start -= muldiv64(-delta, NANOSECONDS_PER_SECOND, rate);
+ }
aspeed_timer_mod(t);
}
break;
--
2.21.0
- [Qemu-arm] [PATCH v2 04/21] hw/arm/aspeed: Add RTC to SoC, (continued)
- [Qemu-arm] [PATCH v2 04/21] hw/arm/aspeed: Add RTC to SoC, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 05/21] aspeed: introduce a configurable number of CPU per machine, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 06/21] aspeed: add support for multiple NICs, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 07/21] aspeed/timer: Fix behaviour running Linux, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 08/21] aspeed/timer: Status register contains reload for stopped timer, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 09/21] aspeed/timer: Fix match calculations, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 10/21] aspeed/timer: Provide back-pressure information for short periods, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 11/21] aspeed/timer: Ensure positive muldiv delta,
Cédric Le Goater <=
- [Qemu-arm] [PATCH v2 12/21] aspeed: remove the "ram" link, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 13/21] aspeed: add a RAM memory region container, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 14/21] aspeed/smc: add a 'sdram_base' property, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 15/21] aspeed/smc: add support for DMAs, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 18/21] aspeed/smc: Calculate checksum on normal DMA, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 16/21] aspeed/smc: add DMA calibration settings, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 17/21] aspeed/smc: inject errors in DMA checksum, Cédric Le Goater, 2019/06/18
- [Qemu-arm] [PATCH v2 19/21] aspeed: Add support for the swift-bmc board, Cédric Le Goater, 2019/06/18