From: Jan Beulich <jbeulich@suse.com>
To: Wei Liu <wl@xen.org>
Cc: "Wei Liu" <liuwe@microsoft.com>, "Paul Durrant" <paul@xen.org>,
"Andrew Cooper" <andrew.cooper3@citrix.com>,
"Michael Kelley" <mikelley@microsoft.com>,
"Xen Development List" <xen-devel@lists.xenproject.org>,
"Roger Pau Monné" <roger.pau@citrix.com>
Subject: Re: [Xen-devel] [PATCH for-next 7/7] x86: implement Hyper-V clock source
Date: Wed, 18 Dec 2019 13:51:54 +0100 [thread overview]
Message-ID: <9305cf4e-e105-e560-a493-bc499c516182@suse.com> (raw)
In-Reply-To: <20191218123856.mskxir5onsmvql27@debian>
On 18.12.2019 13:38, Wei Liu wrote:
> On Tue, Dec 10, 2019 at 05:59:04PM +0100, Jan Beulich wrote:
>> On 25.10.2019 11:16, Wei Liu wrote:
>>> +static inline uint64_t read_hyperv_timer(void)
>>> +{
>>> + uint64_t scale, offset, ret, tsc;
>>> + uint32_t seq;
>>> + struct ms_hyperv_tsc_page *tsc_page = &hyperv_tsc_page;
>>> +
>>> + do {
>>> + seq = tsc_page->tsc_sequence;
>>> +
>>> + /* Seq 0 is special. It means the TSC enlightenment is not
>>> + * available at the moment. The reference time can only be
>>> + * obtained from the Reference Counter MSR.
>>> + */
>>> + if ( seq == 0 )
>>> + {
>>> + rdmsrl(HV_X64_MSR_TIME_REF_COUNT, ret);
>>> + return ret;
>>> + }
>>> +
>>> + smp_rmb();
>>> +
>>> + tsc = rdtsc_ordered();
>>
>> This already includes at least a read fence.
>
> OK. rdtsc() should be enough here.
Are you sure? My comment was rather towards the dropping of smp_rmb()
(maybe replacing by a comment).
>>> + scale = tsc_page->tsc_scale;
>>> + offset = tsc_page->tsc_offset;
>>> +
>>> + smp_rmb();
>>> +
>>> + } while (tsc_page->tsc_sequence != seq);
>>> +
>>> + /* x86 has ARCH_SUPPORTS_INT128 */
>>> + ret = (uint64_t)(((__uint128_t)tsc * scale) >> 64) + offset;
>>
>> The final cast isn't really needed, is it? As to the multiplication
>> - are you sure all compilers in all cases will avoid falling back
>> to a library call here? In other similar places I think we use
>> inline assembly instead.
>
> What library call? A function in libgcc (or clang's equivalence)?
> ISTR libgcc is always linked, but I could be wrong here.
No, the hypervisor (at least the x86 one) doesn't link libgcc afaik.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2019-12-18 12:51 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-25 9:16 [Xen-devel] [PATCH for-next 0/7] Implement Hyper-V reference TSC based clock source Wei Liu
2019-10-25 9:16 ` [Xen-devel] [PATCH for-next 1/7] x86: import hyperv-tlfs.h from Linux Wei Liu
2019-12-10 15:33 ` Jan Beulich
2019-12-10 15:37 ` Durrant, Paul
2019-12-10 15:43 ` Jan Beulich
2019-12-11 11:14 ` Wei Liu
2019-12-11 11:22 ` Durrant, Paul
2019-12-11 11:28 ` Wei Liu
2019-10-25 9:16 ` [Xen-devel] [PATCH for-next 2/7] x86: fix up hyperv-tlfs.h Wei Liu
2019-12-10 15:35 ` Jan Beulich
2019-12-11 11:42 ` Wei Liu
2019-10-25 9:16 ` [Xen-devel] [PATCH for-next 3/7] x86/hyperv: extract more information from Hyper-V Wei Liu
2019-12-10 16:10 ` Jan Beulich
2019-10-25 9:16 ` [Xen-devel] [PATCH for-next 4/7] x86: add a comment regarding the location of hypervisor_probe Wei Liu
2019-12-10 16:15 ` Jan Beulich
2019-10-25 9:16 ` [Xen-devel] [PATCH for-next 5/7] x86: use running_on_hypervisor to gate hypervisor_setup Wei Liu
2019-12-10 16:17 ` Jan Beulich
2019-12-11 11:34 ` Wei Liu
2019-10-25 9:16 ` [Xen-devel] [PATCH for-next 6/7] x86/hyperv: provide hyperv_guest variable Wei Liu
2019-12-10 16:39 ` Jan Beulich
2019-10-25 9:16 ` [Xen-devel] [PATCH for-next 7/7] x86: implement Hyper-V clock source Wei Liu
2019-12-10 16:59 ` Jan Beulich
2019-12-18 12:38 ` Wei Liu
2019-12-18 12:51 ` Jan Beulich [this message]
2019-12-18 12:56 ` Andrew Cooper
2019-12-18 12:59 ` Wei Liu
2019-12-18 13:28 ` Jan Beulich
2019-12-18 13:18 ` Wei Liu
2019-12-18 13:24 ` Jan Beulich
2019-12-18 13:47 ` Wei Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9305cf4e-e105-e560-a493-bc499c516182@suse.com \
--to=jbeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=liuwe@microsoft.com \
--cc=mikelley@microsoft.com \
--cc=paul@xen.org \
--cc=roger.pau@citrix.com \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.