aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2020-10-15 16:18:28 +0100
committerPeter Maydell <peter.maydell@linaro.org>2020-10-27 11:15:31 +0000
commit68d59c6d8d85ae176d3cb2cd20a48d6a090ba288 (patch)
treecb227c229c530d515dc61e06db58d84131b8c690 /hw
parentbaabe7d03c0bd57735cff998d2369c1a4f7cfb5c (diff)
downloadqemu-68d59c6d8d85ae176d3cb2cd20a48d6a090ba288.zip
qemu-68d59c6d8d85ae176d3cb2cd20a48d6a090ba288.tar.gz
qemu-68d59c6d8d85ae176d3cb2cd20a48d6a090ba288.tar.bz2
hw/core/ptimer: Support ptimer being disabled by timer callback
In ptimer_reload(), we call the callback function provided by the timer device that is using the ptimer. This callback might disable the ptimer. The code mostly handles this correctly, except that we'll still print the warning about "Timer with delta zero, disabling" if the now-disabled timer happened to be set such that it would fire again immediately if it were enabled (eg because the limit/reload value is zero). Suppress the spurious warning message and the unnecessary repeat-deletion of the underlying timer in this case. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-id: 20201015151829.14656-2-peter.maydell@linaro.org
Diffstat (limited to 'hw')
-rw-r--r--hw/core/ptimer.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/hw/core/ptimer.c b/hw/core/ptimer.c
index c6d2beb..2aa97cb 100644
--- a/hw/core/ptimer.c
+++ b/hw/core/ptimer.c
@@ -117,6 +117,10 @@ static void ptimer_reload(ptimer_state *s, int delta_adjust)
}
if (delta == 0) {
+ if (s->enabled == 0) {
+ /* trigger callback disabled the timer already */
+ return;
+ }
if (!qtest_enabled()) {
fprintf(stderr, "Timer with delta zero, disabling\n");
}