From 73d87073af8c7158d5fb5032768600b319f8e8bb Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Mon, 31 May 2021 10:12:35 +0200 Subject: [PATCH] vbox5/6: avoid negative timeouts in xhci model Fixes #4184 --- repos/ports/src/virtualbox5/devxhci.cc | 6 +++++- repos/ports/src/virtualbox6/devxhci.cc | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/repos/ports/src/virtualbox5/devxhci.cc b/repos/ports/src/virtualbox5/devxhci.cc index 19b32427ac..6db0c5c0e9 100644 --- a/repos/ports/src/virtualbox5/devxhci.cc +++ b/repos/ports/src/virtualbox5/devxhci.cc @@ -154,7 +154,11 @@ struct Timer_queue : public Qemu::Timer_queue if (TMTimerIsActive(tm_timer)) TMTimerStop(tm_timer); - TMTimerSetNano(tm_timer, min->timeout_abs_ns - TMTimerGetNano(tm_timer)); + uint64_t const now = TMTimerGetNano(tm_timer); + if (min->timeout_abs_ns < now) + TMTimerSetNano(tm_timer, 0); + else + TMTimerSetNano(tm_timer, min->timeout_abs_ns - now); } void _deactivate_timer(void *qtimer) diff --git a/repos/ports/src/virtualbox6/devxhci.cc b/repos/ports/src/virtualbox6/devxhci.cc index 2d1b8d509c..2891be405c 100644 --- a/repos/ports/src/virtualbox6/devxhci.cc +++ b/repos/ports/src/virtualbox6/devxhci.cc @@ -160,7 +160,11 @@ struct Timer_queue : public Qemu::Timer_queue if (TMTimerIsActive(tm_timer)) TMTimerStop(tm_timer); - TMTimerSetNano(tm_timer, min->timeout_abs_ns - TMTimerGetNano(tm_timer)); + uint64_t const now = TMTimerGetNano(tm_timer); + if (min->timeout_abs_ns < now) + TMTimerSetNano(tm_timer, 0); + else + TMTimerSetNano(tm_timer, min->timeout_abs_ns - now); } void _deactivate_timer(void *qtimer)