|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 11/11] hvm/hpet: handle 1st period special
At 16:19 -0400 on 01 May (1398957542), Don Slutz wrote:
> On 05/01/14 06:31, Tim Deegan wrote:
> > Couldn't it be fixed more simply by detecting comparator values in the
> > past in hpet_get_comparator()?
>
> This statement only works using 64-bit arithmetic for the main counter never
> 63
> changing by more then 2 . (Which is a boundary case that should not
> happen in my life time.)
>
>
> Without patch #11 (this patch) and without patch #8 (Use signed divide...)
> and adding:
>
>
> commit 8c450bed530b13c3f3d18b9dafb3d1b1d69ac1f2
> Author: Don Slutz <dslutz@xxxxxxxxxxx>
> Date: Thu May 1 14:02:47 2014 -0400
>
> hvm/hpet: Detect comparator values in the past
>
> Signed-off-by: Don Slutz <dslutz@xxxxxxxxxxx>
>
> diff --git a/xen/arch/x86/hvm/hpet.c b/xen/arch/x86/hvm/hpet.c
> index 4e4da20..d93dd69 100644
> --- a/xen/arch/x86/hvm/hpet.c
> +++ b/xen/arch/x86/hvm/hpet.c
> @@ -98,10 +98,12 @@ static uint64_t hpet_get_comparator(HPETState *h,
> unsigned int tn,
> uint64_t period = h->hpet.period[tn];
> if (period)
> {
> - elapsed = hpet_read_maincounter(h, guest_time) +
> - period - comparator;
> - comparator += (elapsed / period) * period;
> - h->hpet.comparator64[tn] = comparator;
> + elapsed = hpet_read_maincounter(h, guest_time) - comparator;
> + if ( (int64_t)elapsed >= 0 )
> + {
> + comparator += ((elapsed + period) / period) * period;
> + h->hpet.comparator64[tn] = comparator;
> + }
> }
> }
>
>
>
> Which I think was what you mean.
>
> It looks to be "ok" (ignoring the boundary case). So should
> I send it as v4?
Yes, that looks good. You can add
Acked-by: Tim Deegan <tim@xxxxxxx>
to it too.
Cheers,
Tim.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |