|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86/HPET: don't arbitrarily cap delta in reprogram_hpet_evt_channel()
commit 5eedd1fa1dbdbda9304824955582ca38464dd911
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Thu Jan 22 14:14:02 2026 +0100
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Jan 22 16:06:22 2026 +0100
x86/HPET: don't arbitrarily cap delta in reprogram_hpet_evt_channel()
There's no reason to set an arbitrary upper bound of 10 seconds. We can
simply set the comparator such that it'll take a whole cycle through all
32-bit values until the next interrupt would be raised. (For an extremely
fast-running HPET [400 MHz and up] 10 seconds would also be too long.)
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
xen/arch/x86/hpet.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/xen/arch/x86/hpet.c b/xen/arch/x86/hpet.c
index 722a69ab13..1ea8ae4574 100644
--- a/xen/arch/x86/hpet.c
+++ b/xen/arch/x86/hpet.c
@@ -23,7 +23,6 @@
#include <asm/irq-vectors.h>
#include <asm/msi.h>
-#define MAX_DELTA_NS MILLISECS(10*1000)
#define MIN_DELTA_NS MICROSECS(20)
#define HPET_EVT_USED_BIT 0
@@ -164,10 +163,15 @@ static int reprogram_hpet_evt_channel(
ASSERT(expire != STIME_MAX);
- delta = min_t(int64_t, delta, MAX_DELTA_NS);
delta = max_t(int64_t, delta, MIN_DELTA_NS);
delta = ns2ticks(delta, ch->shift, ch->mult);
+ if ( delta > UINT32_MAX )
+ {
+ hpet_write32(hpet_read32(HPET_COUNTER), HPET_Tn_CMP(ch->idx));
+ return 0;
+ }
+
do {
ret = hpet_next_event(delta, ch->idx);
delta += delta;
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |