|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 09/11] hvm/hpet: comparator can only change when master clock is enabled.
>>> On 17.04.14 at 19:43, <dslutz@xxxxxxxxxxx> wrote:
> This is based on software-developers-hpet-spec-1-0a.pdf saying:
>
> When the main counter value matches the value in the timer's
> comparator register, an interrupt can be generated. The hardware
> will then automatically increase the value in the compare register
> by the last value written to that register.
>
> When the overall enable is off (the main count is halted), none of
> the compare registers should change.
>
> The code lines:
>
> elapsed = hpet_read_maincounter(h, guest_time) +
> period - 1 - comparator;
> comparator += (elapsed / period) * period;
>
> are what matter here. They will always adjust comparator to be no
> more then one period away.
>
> Using some numbers to help show the issue:
>
> hpet_read_maincounter(h, guest_time) = 67752
> period = 62500
> comparator = 255252 == 67752 + 3 * 62500
>
> comparator : 255252
> elapsed : -125001
> elapsed/period : -2
> comparator_delta : -125000
> new comparator : 130252
>
> Signed-off-by: Don Slutz <dslutz@xxxxxxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
> ---
> v3:
> Better commit message.
>
> xen/arch/x86/hvm/hpet.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/xen/arch/x86/hvm/hpet.c b/xen/arch/x86/hvm/hpet.c
> index e24bc46..6aa6e9b 100644
> --- a/xen/arch/x86/hvm/hpet.c
> +++ b/xen/arch/x86/hvm/hpet.c
> @@ -92,7 +92,7 @@ static uint64_t hpet_get_comparator(HPETState *h, unsigned
> int tn,
> int64_t elapsed;
>
> comparator = h->hpet.comparator64[tn];
> - if ( timer_is_periodic(h, tn) )
> + if ( hpet_enabled(h) && timer_is_periodic(h, tn) )
> {
> /* update comparator by number of periods elapsed since last update
> */
> int64_t period = h->hpet.period[tn];
> --
> 1.8.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |