> -----Original Message----- > From: Jan Beulich [mailto:jbeul...@suse.com] > Sent: 06 March 2019 14:38 > To: Paul Durrant <paul.durr...@citrix.com> > Cc: Julien Grall <julien.gr...@arm.com>; Andrew Cooper > <andrew.coop...@citrix.com>; George Dunlap > <george.dun...@citrix.com>; Ian Jackson <ian.jack...@citrix.com>; Roger Pau > Monne > <roger....@citrix.com>; Wei Liu <wei.l...@citrix.com>; Stefano Stabellini > <sstabell...@kernel.org>; > xen-devel <xen-devel@lists.xenproject.org>; Konrad Rzeszutek Wilk > <konrad.w...@oracle.com>; Tim > (Xen.org) <t...@xen.org> > Subject: RE: [PATCH v3 8/9] viridian: add implementation of synthetic timers > > >>> On 06.03.19 at 14:09, <paul.durr...@citrix.com> wrote: > >> From: Paul Durrant > >> Sent: 06 March 2019 13:06 > >> > >> > From: Jan Beulich [mailto:jbeul...@suse.com] > >> > Sent: 06 March 2019 12:57 > >> > Subject: RE: [PATCH v3 8/9] viridian: add implementation of synthetic > >> > timers > >> > > >> > >>> On 06.03.19 at 12:23, <paul.durr...@citrix.com> wrote: > >> > >> From: Jan Beulich [mailto:jbeul...@suse.com] > >> > >> Sent: 25 February 2019 14:54 > >> > >> > >> > >> >>> On 31.01.19 at 11:47, <paul.durr...@citrix.com> wrote: > >> > >> > +{ > >> > >> > + const struct viridian_page *rt = > >> > >> > &d->arch.hvm.viridian->reference_tsc; > >> > >> > + HV_REFERENCE_TSC_PAGE *p = rt->ptr; > >> > >> > + uint32_t start, end; > >> > >> > + __int128_t tsc; > >> > >> > + __int128_t scale; > >> > >> > >> > >> I don't think you need both of them be 128 bits wide. I also don't > >> > >> see why either would want to be of a signed type. > >> > > > >> > > The spec says (as in the comment below): > >> > > > >> > > "The partition reference time is computed by the following formula: > >> > > > >> > > ReferenceTime = ((VirtualTsc * TscScale) >> 64) + TscOffset > >> > > > >> > > The multiplication is a 64 bit multiplication, which results in a 128 > >> > > bit > >> > > number which is then shifted 64 times to the right to obtain the high > >> > > 64 > >> > > bits.TscScale" > >> > > >> > Well, yes, you want a 128-bit result. But for that you don't need to > >> > multiply 128-bit quantities. See e.g. our own scale_delta() or > >> > hvm_scale_tsc(). > >> > >> Testing showed that by not casting first things were broken. I assumed > >> this was because the result > of > >> the multiplication was being truncated to 64-bits before assignment, but I > >> can check the generated > >> code. I'll also have a look at the examples you cite. > > > > Both those examples do the multiplication by inline asm (presumably to avoid > > truncation). Is that what you'd prefer? > > That would imo be best, not the least because of making us independent > of possible issues with 128-bit arithmetic on older compilers. >
Ok, I think I have figured out the necessary runes so I'll do that. Paul > Jan > _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel