From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752942AbbFYQsU (ORCPT ); Thu, 25 Jun 2015 12:48:20 -0400 Received: from mail.skyhub.de ([78.46.96.112]:38438 "EHLO mail.skyhub.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752086AbbFYQof (ORCPT ); Thu, 25 Jun 2015 12:44:35 -0400 From: Borislav Petkov To: Ingo Molnar Cc: LKML Subject: [PATCH 16/19] x86/tsc: Use rdtsc_ordered() in read_tsc() instead of get_cycles() Date: Thu, 25 Jun 2015 18:44:10 +0200 Message-Id: <1435250653-30182-17-git-send-email-bp@alien8.de> X-Mailer: git-send-email 2.3.5 In-Reply-To: <1435250653-30182-1-git-send-email-bp@alien8.de> References: <1435250653-30182-1-git-send-email-bp@alien8.de> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andy Lutomirski There are two logical changes here. First, this removes a check for cpu_has_tsc. That check is unnecessary, as we don't register the TSC as a clocksource on systems that have no TSC. Second, it adds a barrier, thus preventing observable non-monotonicity. I suspect that the missing barrier was never a problem in practice because system calls themselves were heavy enough barriers to prevent user code from observing time warps due to speculation. (Without the corresponding barrier in the vDSO, however, non-monotonicity is easy to detect.) Signed-off-by: Andy Lutomirski Cc: Denys Vlasenko Cc: Huang Rui Cc: John Stultz Cc: Len Brown Cc: Peter Zijlstra Cc: Ralf Baechle Cc: kvm ML Cc: x86-ml Link: http://lkml.kernel.org/r/c6ff621a053127a65b70f175443578db7a0711be.1434501121.git.luto@kernel.org Signed-off-by: Borislav Petkov --- arch/x86/kernel/tsc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 21d6e04e3e82..451bade0d320 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -961,7 +961,7 @@ static struct clocksource clocksource_tsc; */ static cycle_t read_tsc(struct clocksource *cs) { - return (cycle_t)get_cycles(); + return (cycle_t)rdtsc_ordered(); } /* -- 2.3.5