qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PULL 02/13] target/arm: Handle overflow in calculation of next time


From: Michael Tokarev
Subject: Re: [PULL 02/13] target/arm: Handle overflow in calculation of next timer tick
Date: Thu, 14 Dec 2023 11:20:28 +0300
User-agent: Mozilla Thunderbird

27.11.2023 20:08, Peter Maydell:
In commit edac4d8a168 back in 2015 when we added support for
the virtual timer offset CNTVOFF_EL2, we didn't correctly update
the timer-recalculation code that figures out when the timer
interrupt is next going to change state. We got it wrong in
two ways:
  * for the 0->1 transition, we didn't notice that gt->cval + offset
    can overflow a uint64_t
  * for the 1->0 transition, we didn't notice that the transition
    might now happen before the count rolls over, if offset > count

In the former case, we end up trying to set the next interrupt
for a time in the past, which results in QEMU hanging as the
timer fires continuously.

In the latter case, we would fail to update the interrupt
status when we are supposed to.

Fix the calculations in both cases.

The test case is Alex Bennée's from the bug report, and tests
the 0->1 transition overflow case.

Fixes: edac4d8a168 ("target-arm: Add CNTVOFF_EL2")
Cc: qemu-stable@nongnu.org

This change, when applied to 7.2, causes the newly added tests to fail,
eg: https://gitlab.com/qemu-project/qemu/-/pipelines/1103065860
(timeout running plugin-vtimer-with-libbb.so etc).

Any hint what can be wrong there?

Thanks,

/mjt



reply via email to

[Prev in Thread] Current Thread [Next in Thread]