mirror of
https://github.com/xen-project/xen.git
synced 2026-10-30 03:00:05 +01:00
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@suse.com> Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
This commit is contained in:
1 parent
5ec93b2f19
commit
5eedd1fa1d
1 file changed
+6
-2
+6
-2
@@ -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;
|
||||
|
||||