From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752854AbcANJII (ORCPT ); Thu, 14 Jan 2016 04:08:08 -0500 Received: from terminus.zytor.com ([198.137.202.10]:40241 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751180AbcANJH6 (ORCPT ); Thu, 14 Jan 2016 04:07:58 -0500 Date: Thu, 14 Jan 2016 01:07:03 -0800 From: tip-bot for Andy Lutomirski Message-ID: Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, agraf@suse.de, pbonzini@redhat.com, mtosatti@redhat.com, mingo@kernel.org, peterz@infradead.org, bp@alien8.de, luto@amacapital.net, rkrcmar@redhat.com, luto@kernel.org, torvalds@linux-foundation.org, tglx@linutronix.de, dvlasenk@redhat.com, brgerst@gmail.com Reply-To: peterz@infradead.org, bp@alien8.de, mingo@kernel.org, mtosatti@redhat.com, brgerst@gmail.com, tglx@linutronix.de, dvlasenk@redhat.com, torvalds@linux-foundation.org, luto@amacapital.net, luto@kernel.org, rkrcmar@redhat.com, linux-kernel@vger.kernel.org, hpa@zytor.com, agraf@suse.de, pbonzini@redhat.com In-Reply-To: <755dcedb17269e1d7ce12a9a713dea303835137e.1451949191.git.luto@kernel.org> References: <755dcedb17269e1d7ce12a9a713dea303835137e.1451949191.git.luto@kernel.org> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/urgent] x86/vdso/pvclock: Protect STABLE check with the seqcount Git-Commit-ID: 78fd8c7288e0a4bba3ad1d69caf9396a6b69cb00 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 78fd8c7288e0a4bba3ad1d69caf9396a6b69cb00 Gitweb: http://git.kernel.org/tip/78fd8c7288e0a4bba3ad1d69caf9396a6b69cb00 Author: Andy Lutomirski AuthorDate: Mon, 4 Jan 2016 15:14:28 -0800 Committer: Ingo Molnar CommitDate: Wed, 13 Jan 2016 11:46:29 +0100 x86/vdso/pvclock: Protect STABLE check with the seqcount If the clock becomes unstable while we're reading it, we need to bail. We can do this by simply moving the check into the seqcount loop. Reported-by: Marcelo Tosatti Signed-off-by: Andy Lutomirski Cc: Alexander Graf Cc: Andy Lutomirski Cc: Borislav Petkov Cc: Brian Gerst Cc: Denys Vlasenko Cc: H. Peter Anvin Cc: Linus Torvalds Cc: Paolo Bonzini Cc: Peter Zijlstra Cc: Radim Krcmar Cc: Thomas Gleixner Link: http://lkml.kernel.org/r/755dcedb17269e1d7ce12a9a713dea303835137e.1451949191.git.luto@kernel.org Signed-off-by: Ingo Molnar --- arch/x86/entry/vdso/vclock_gettime.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/arch/x86/entry/vdso/vclock_gettime.c b/arch/x86/entry/vdso/vclock_gettime.c index 8602f06..1a50e09 100644 --- a/arch/x86/entry/vdso/vclock_gettime.c +++ b/arch/x86/entry/vdso/vclock_gettime.c @@ -126,23 +126,23 @@ static notrace cycle_t vread_pvclock(int *mode) * * On Xen, we don't appear to have that guarantee, but Xen still * supplies a valid seqlock using the version field. - + * * We only do pvclock vdso timing at all if * PVCLOCK_TSC_STABLE_BIT is set, and we interpret that bit to * mean that all vCPUs have matching pvti and that the TSC is * synced, so we can just look at vCPU 0's pvti. */ - if (unlikely(!(pvti->flags & PVCLOCK_TSC_STABLE_BIT))) { - *mode = VCLOCK_NONE; - return 0; - } - do { version = pvti->version; smp_rmb(); + if (unlikely(!(pvti->flags & PVCLOCK_TSC_STABLE_BIT))) { + *mode = VCLOCK_NONE; + return 0; + } + tsc = rdtsc_ordered(); pvti_tsc_to_system_mul = pvti->tsc_to_system_mul; pvti_tsc_shift = pvti->tsc_shift;