All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Andy Lutomirski <luto@kernel.org>, x86@kernel.org
Cc: Borislav Petkov <bp@suse.de>,
	Peter Zijlstra <peterz@infradead.org>,
	John Stultz <john.stultz@linaro.org>,
	linux-kernel@vger.kernel.org, Len Brown <lenb@kernel.org>,
	Huang Rui <ray.huang@amd.com>,
	Denys Vlasenko <dvlasenk@redhat.com>,
	kvm@vger.kernel.org, Ralf Baechle <ralf@linux-mips.org>,
	Radim Krcmar <rkrcmar@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>
Subject: Re: [PATCH v3 17/18] x86/kvm/tsc: Drop extra barrier and use rdtsc_ordered in kvmclock
Date: Wed, 17 Jun 2015 09:47:08 +0200	[thread overview]
Message-ID: <558125FC.7010007@redhat.com> (raw)
In-Reply-To: <678981cc4761fb38a793c217c9cac42503cf3719.1434501121.git.luto@kernel.org>



On 17/06/2015 02:36, Andy Lutomirski wrote:
> __pvclock_read_cycles had an unnecessary barrier.  Get rid of that
> barrier and clean up the code by just using rdtsc_ordered().
> 
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: Radim Krcmar <rkrcmar@redhat.com>
> Cc: Marcelo Tosatti <mtosatti@redhat.com>
> Cc: kvm@vger.kernel.org
> Signed-off-by: Andy Lutomirski <luto@kernel.org>
> ---
> 
> I'm hoping to get an ack for this to go in through -tip.  (Arguably
> I'm the maintainer of this code given how it's used, but I should
> still ask for an ack.)
> 
> arch/x86/include/asm/pvclock.h | 21 ++++++++++++---------
>  1 file changed, 12 insertions(+), 9 deletions(-)

Can you send a URL to the rest of the series?  I've never even seen v1
or v2 so I have no idea of what this is about.

> diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h
> index 6084bce345fc..cf2329ca4812 100644
> --- a/arch/x86/include/asm/pvclock.h
> +++ b/arch/x86/include/asm/pvclock.h
> @@ -62,7 +62,18 @@ static inline u64 pvclock_scale_delta(u64 delta, u32 mul_frac, int shift)
>  static __always_inline
>  u64 pvclock_get_nsec_offset(const struct pvclock_vcpu_time_info *src)
>  {
> -	u64 delta = rdtsc() - src->tsc_timestamp;
> +	/*
> +	 * Note: emulated platforms which do not advertise SSE2 support
> +	 * break rdtsc_ordered, resulting in kvmclock not using the
> +	 * necessary RDTSC barriers.  Without barriers, it is possible
> +	 * that RDTSC instruction is executed before prior loads,
> +	 * resulting in violation of monotonicity.
> +	 *
> +	 * On an SMP guest without SSE2, it's unclear how anything is
> +	 * supposed to work correctly, though -- memory fences
> +	 * (e.g. smp_mb) are important for more than just timing.
> +	 */

On an SMP guest without SSE2, memory fences are obtained with e.g. "lock
addb $0, (%esp)".

> +	u64 delta = rdtsc_ordered() - src->tsc_timestamp;
>  	return pvclock_scale_delta(delta, src->tsc_to_system_mul,
>  				   src->tsc_shift);
>  }
> @@ -76,17 +87,9 @@ unsigned __pvclock_read_cycles(const struct pvclock_vcpu_time_info *src,
>  	u8 ret_flags;
>  
>  	version = src->version;
> -	/* Note: emulated platforms which do not advertise SSE2 support
> -	 * result in kvmclock not using the necessary RDTSC barriers.
> -	 * Without barriers, it is possible that RDTSC instruction reads from
> -	 * the time stamp counter outside rdtsc_barrier protected section
> -	 * below, resulting in violation of monotonicity.
> -	 */
> -	rdtsc_barrier();
>  	offset = pvclock_get_nsec_offset(src);
>  	ret = src->system_time + offset;
>  	ret_flags = src->flags;
> -	rdtsc_barrier();
>  
>  	*cycles = ret;
>  	*flags = ret_flags;
> 

  reply	other threads:[~2015-06-17  7:47 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-17  0:35 [PATCH v3 00/18] x86/tsc: Clean up rdtsc helpers Andy Lutomirski
2015-06-17  0:35 ` [PATCH v3 01/18] x86/tsc: Inline native_read_tsc and remove __native_read_tsc Andy Lutomirski
2015-06-17  9:26   ` Borislav Petkov
2015-07-06 15:39   ` [tip:x86/asm] x86/asm/tsc: Inline native_read_tsc() and remove __native_read_tsc() tip-bot for Andy Lutomirski
2015-06-17  0:35 ` [PATCH v3 02/18] x86/msr/kvm: Remove vget_cycles() Andy Lutomirski
2015-06-17  9:42   ` Borislav Petkov
2015-06-17 13:34   ` Paolo Bonzini
2015-07-06 15:40   ` [tip:x86/asm] x86/asm/tsc, kvm: " tip-bot for Andy Lutomirski
2015-06-17  0:35 ` [PATCH v3 03/18] x86/tsc/paravirt: Remove the read_tsc and read_tscp paravirt hooks Andy Lutomirski
2015-06-17  9:56   ` Borislav Petkov
2015-06-17  9:56     ` Borislav Petkov
2015-06-19 15:32   ` Borislav Petkov
2015-06-19 15:32     ` Borislav Petkov
2015-06-19 16:14     ` Andy Lutomirski
2015-06-19 16:14       ` Andy Lutomirski
2015-06-19 17:13       ` Borislav Petkov
2015-06-19 17:13         ` Borislav Petkov
2015-07-06 15:40   ` [tip:x86/asm] x86/asm/tsc, x86/paravirt: Remove read_tsc() and read_tscp() " tip-bot for Andy Lutomirski
2015-06-17  0:35 ` [PATCH v3 04/18] x86/tsc: Replace rdtscll with native_read_tsc Andy Lutomirski
2015-06-17 10:03   ` Borislav Petkov
2015-07-06 15:40   ` [tip:x86/asm] x86/asm/tsc: Replace rdtscll() with native_read_tsc () tip-bot for Andy Lutomirski
2015-06-17  0:35 ` [PATCH v3 05/18] x86/tsc: Remove the rdtscp and rdtscpll macros Andy Lutomirski
2015-07-06 15:41   ` [tip:x86/asm] x86/asm/tsc: Remove the rdtscp() and rdtscpll() macros tip-bot for Andy Lutomirski
2015-06-17  0:35 ` [PATCH v3 06/18] x86/tsc: Use the full 64-bit tsc in tsc_delay Andy Lutomirski
2015-07-06 15:41   ` [tip:x86/asm] x86/asm/tsc: Use the full 64-bit TSC in delay_tsc() tip-bot for Andy Lutomirski
2015-06-17  0:35 ` [PATCH v3 07/18] x86/cpu/amd: Use the full 64-bit TSC to detect the 2.6.2 bug Andy Lutomirski
2015-07-06 15:41   ` [tip:x86/asm] x86/asm/tsc, " tip-bot for Andy Lutomirski
2015-06-17  0:35 ` [PATCH v3 08/18] baycom_epp: Replace rdtscl() with native_read_tsc() Andy Lutomirski
2015-06-17  0:49   ` Thomas Sailer
2015-06-20 13:54   ` walter harms
2015-06-20 13:54     ` walter harms
2015-06-20 14:14     ` Thomas Gleixner
2015-06-20 14:14       ` Thomas Gleixner
2015-06-20 14:26       ` Andy Lutomirski
2015-06-20 14:26         ` Andy Lutomirski
2015-06-20 16:30         ` Thomas Gleixner
2015-06-20 16:30           ` Thomas Gleixner
2015-07-06 15:42   ` [tip:x86/asm] x86/asm/tsc, drivers/net/hamradio/baycom_epp: " tip-bot for Andy Lutomirski
2015-06-17  0:35 ` [PATCH v3 09/18] staging/lirc_serial: Remove TSC-based timing Andy Lutomirski
2015-06-17  0:35   ` Andy Lutomirski
2015-07-06 15:42   ` [tip:x86/asm] x86/asm/tsc, " tip-bot for Andy Lutomirski
2015-06-17  0:35 ` [PATCH v3 10/18] input/joystick/analog: Switch from rdtscl() to native_read_tsc() Andy Lutomirski
2015-07-06 15:42   ` [tip:x86/asm] x86/asm/tsc, " tip-bot for Andy Lutomirski
2015-06-17  0:35 ` [PATCH v3 11/18] drivers/input/gameport: Replace rdtscl() with native_read_tsc() Andy Lutomirski
2015-07-06 15:43   ` [tip:x86/asm] x86/asm/tsc, drivers/input/gameport: Replace rdtscl () " tip-bot for Andy Lutomirski
2015-06-17  0:36 ` [PATCH v3 12/18] x86/tsc: Remove rdtscl() Andy Lutomirski
2015-07-06 15:43   ` [tip:x86/asm] x86/asm/tsc: " tip-bot for Andy Lutomirski
2015-06-17  0:36 ` [PATCH v3 13/18] x86/tsc: Rename native_read_tsc() to rdtsc() Andy Lutomirski
2015-06-24 21:38   ` Borislav Petkov
2015-07-06 15:43   ` [tip:x86/asm] x86/asm/tsc: " tip-bot for Andy Lutomirski
2015-06-17  0:36 ` [PATCH v3 14/18] x86: Add rdtsc_ordered() and use it in trivial call sites Andy Lutomirski
2015-07-06 15:44   ` [tip:x86/asm] x86/asm/tsc: " tip-bot for Andy Lutomirski
2015-08-21  7:45   ` [tip:x86/asm] x86/asm/tsc: Add rdtscll() merge helper tip-bot for Ingo Molnar
2015-06-17  0:36 ` [PATCH v3 15/18] x86/tsc: Use rdtsc_ordered() in check_tsc_warp() and drop extra barriers Andy Lutomirski
2015-07-06 15:44   ` [tip:x86/asm] x86/asm/tsc/sync: " tip-bot for Andy Lutomirski
2015-06-17  0:36 ` [PATCH v3 16/18] x86/tsc: In read_tsc, use rdtsc_ordered() instead of get_cycles() Andy Lutomirski
2015-07-06 15:44   ` [tip:x86/asm] x86/asm/tsc: Use rdtsc_ordered() in read_tsc() " tip-bot for Andy Lutomirski
2015-06-17  0:36 ` [PATCH v3 17/18] x86/kvm/tsc: Drop extra barrier and use rdtsc_ordered in kvmclock Andy Lutomirski
2015-06-17  7:47   ` Paolo Bonzini [this message]
2015-06-17 13:31     ` Paolo Bonzini
2015-06-20 21:50     ` Borislav Petkov
2015-06-20 21:50       ` Borislav Petkov
2015-07-06 15:45   ` [tip:x86/asm] x86/asm/tsc, x86/kvm: Drop open-coded barrier and use rdtsc_ordered() " tip-bot for Andy Lutomirski
2015-06-17  0:36 ` [PATCH v3 18/18] x86/tsc: Remove rdtsc_barrier() Andy Lutomirski
2015-07-06 15:45   ` [tip:x86/asm] x86/asm/tsc: " tip-bot for Andy Lutomirski
2015-06-17 11:11 ` [PATCH v3 00/18] x86/tsc: Clean up rdtsc helpers Borislav Petkov
2015-06-17 13:37   ` Paolo Bonzini

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=558125FC.7010007@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=bp@suse.de \
    --cc=dvlasenk@redhat.com \
    --cc=john.stultz@linaro.org \
    --cc=kvm@vger.kernel.org \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=peterz@infradead.org \
    --cc=ralf@linux-mips.org \
    --cc=ray.huang@amd.com \
    --cc=rkrcmar@redhat.com \
    --cc=x86@kernel.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.