[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 09/10] hvm/hpet: Prevent master clock equal to comparator while enabled
>>> On 02.05.14 at 22:18, <dslutz@xxxxxxxxxxx> wrote: > Based on the software-developers-hpet-spec-1-0a.pdf, the comparator > for a periodic timer will change to the new value when it matches > the master clock. The current code here uses a very standard > rounding formula of "((x + y - 1) / y) * y". This is wrong because > in this case you need to go to the next comparator value when "x" > equals "y". Not when "x + 1" equals "y". In this case "y" is the > period and "x" is the master clock. > > The code lines: > > elapsed = hpet_read_maincounter(h, guest_time) + > period - 1 - comparator; > comparator += (elapsed / period) * period; > > are what matter here. > > Using some numbers to help show the issue: > > hpet_read_maincounter(h, guest_time) = 130252 > period = 62500 > > comparator : 130252 > elapsed : 62499 > elapsed/period : 0 > comparator_delta : 0 > new comparator : 130252 > > Signed-off-by: Don Slutz <dslutz@xxxxxxxxxxx> Acked-by: Jan Beulich <jbeulich@xxxxxxxx> > --- > 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 f938da9..2a99fed 100644 > --- a/xen/arch/x86/hvm/hpet.c > +++ b/xen/arch/x86/hvm/hpet.c > @@ -99,7 +99,7 @@ static uint64_t hpet_get_comparator(HPETState *h, unsigned > int tn, > if (period) > { > elapsed = hpet_read_maincounter(h, guest_time) + > - period - 1 - comparator; > + period - comparator; > comparator += (elapsed / period) * period; > h->hpet.comparator64[tn] = comparator; > } > -- > 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 |