Received: by 2002:a05:6a10:6e98:0:0:0:0 with SMTP id ie24csp5414759pxb; Wed, 9 Jun 2021 14:17:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxA18sQ43IAt+1oe5GwhU8ADL10zjHSaRV5orxpb2MCYMnD/GdlNLzvwoEM4epZ+oFzT/mM X-Received: by 2002:aa7:dd14:: with SMTP id i20mr1370671edv.110.1623273450846; Wed, 09 Jun 2021 14:17:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623273450; cv=none; d=google.com; s=arc-20160816; b=cvqJGFetB7r7hFkby9+LQF4xNeZkL6wtMxRVLtpqeJNpv7x5ZQsDvCAi839BixjA+p EA4N+eH/hYkN4oqQlsaQHOs/OzEI3mvg62uuTzhZJUleFiPZXMpDCbAhisZwRvPpwydR qUOtUT7iUCr/yHVwIOd/jduzuCSyoLAtMn73ovKHgk7Wfa+gaaIe94kggl1Z9kG1bo1B tTqZLKTYFHkq8z22NSCPCxIFx9gtcspeskBg0z6cQyA/q9hIwgUpBmMnx7kcLnfVyMrs Ffi1RtFR/aKJ8nc7QwKZKrWIieHdoAmVCXpL/iOGmNLgUdI9FPxNxOYMLoTgolAwalFW Sr7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:ironport-sdr :ironport-sdr; bh=wYUIS5rlc/cBgjfQmgRrGU2Vyfyc0BycnhLDZvjE3XQ=; b=p/Xuioz95Wvv/437PorH/5IY5+bZ8SxRC0h/5Rr38KjsU/CSuyTmQq7c2IbvoS9+Le Tz6mdWGhgbZKkTihUM/h+d2HR/UhCvj9zh8UmBMKvCKxRGWqBSA1n4sUl/cUV7KugXCY E0Vnqd5bIENKTBIrwyuyPoy9iRkmE5R4gHzzdt6ukQfbP3koagxe09+mkG+CT+ZU8kex lrkhGr9Gw+/vbla8CBniQo2IDdRrKKWC723jM+YJ2C/pofZ9URYbDHShnwxijRa2MKLp MRFWnXXbs7SDUYGMclW8clja6Ku5hkAt5PUlCjo/Jl8+9o3wPiC/8W6C9BVhgy6I+R5w UVjQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o15si656660eju.373.2021.06.09.14.17.06; Wed, 09 Jun 2021 14:17:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229990AbhFIVP2 (ORCPT + 99 others); Wed, 9 Jun 2021 17:15:28 -0400 Received: from mga12.intel.com ([192.55.52.136]:46130 "EHLO mga12.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229638AbhFIVP1 (ORCPT ); Wed, 9 Jun 2021 17:15:27 -0400 IronPort-SDR: gRcu5mJDhvP/krO+tB2G7HhhQg2rdUWtY0dmUhqCfzKvKiGcxGZk24uOQC18GtrWh167lzbih/ 6YI4NWQniQmA== X-IronPort-AV: E=McAfee;i="6200,9189,10010"; a="184860023" X-IronPort-AV: E=Sophos;i="5.83,261,1616482800"; d="scan'208";a="184860023" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jun 2021 14:13:30 -0700 IronPort-SDR: Sn9mVQgbacN+vtbB9+W1hgdFA79e0GPdGVYeBryEc/URi6IU489p1K4oLDj52BLOzwzzG0F4J3 TLdLhwlqsdqA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,261,1616482800"; d="scan'208";a="552807840" Received: from gupta-dev2.jf.intel.com (HELO gupta-dev2.localdomain) ([10.54.74.119]) by fmsmga001.fm.intel.com with ESMTP; 09 Jun 2021 14:13:29 -0700 Date: Wed, 9 Jun 2021 14:13:38 -0700 From: Pawan Gupta To: Thomas Gleixner , Borislav Petkov Cc: Jonathan Corbet , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , x86@kernel.org, "H. Peter Anvin" , "Paul E. McKenney" , Randy Dunlap , Andrew Morton , "Maciej W. Rozycki" , Viresh Kumar , Vlastimil Babka , Tony Luck , Paolo Bonzini , Sean Christopherson , Kyung Min Park , Fenghua Yu , Ricardo Neri , Tom Lendacky , Juergen Gross , Krish Sadhukhan , Kan Liang , Joerg Roedel , Victor Ding , Srinivas Pandruvada , Pawan Gupta , Brijesh Singh , Dave Hansen , Mike Rapoport , Anthony Steinhauser , Anand K Mistry , Andi Kleen , Miguel Ojeda , Nick Desaulniers , Joe Perches , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Subject: [PATCH 3/4] x86/tsx: Clear CPUID bits when TSX always force aborts Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As a result of TSX deprecation some processors always aborts TSX transactions by default. When TSX feature cannot be used it is better to hide it. Clear CPUID.RTM and CPUID.HLE bits when TSX transactions always aborts. Signed-off-by: Pawan Gupta Reviewed-by: Andi Kleen Reviewed-by: Tony Luck Tested-by: Neelima Krishnan --- arch/x86/kernel/cpu/cpu.h | 2 ++- arch/x86/kernel/cpu/intel.c | 4 +++- arch/x86/kernel/cpu/tsx.c | 41 ++++++++++++++++++++++++++++++++++---- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/cpu/cpu.h b/arch/x86/kernel/cpu/cpu.h index 67944128876d..95521302630d 100644 --- a/arch/x86/kernel/cpu/cpu.h +++ b/arch/x86/kernel/cpu/cpu.h @@ -48,6 +48,7 @@ extern const struct cpu_dev *const __x86_cpu_dev_start[], enum tsx_ctrl_states { TSX_CTRL_ENABLE, TSX_CTRL_DISABLE, + TSX_CTRL_RTM_ALWAYS_ABORT, TSX_CTRL_NOT_SUPPORTED, }; @@ -56,6 +57,7 @@ extern __ro_after_init enum tsx_ctrl_states tsx_ctrl_state; extern void __init tsx_init(void); extern void tsx_enable(void); extern void tsx_disable(void); +extern void tsx_clear_cpuid(void); #else static inline void tsx_init(void) { } #endif /* CONFIG_CPU_SUP_INTEL */ diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index 8adffc17fa8b..861e919eba9a 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c @@ -717,8 +717,10 @@ static void init_intel(struct cpuinfo_x86 *c) if (tsx_ctrl_state == TSX_CTRL_ENABLE) tsx_enable(); - if (tsx_ctrl_state == TSX_CTRL_DISABLE) + else if (tsx_ctrl_state == TSX_CTRL_DISABLE) tsx_disable(); + else if (tsx_ctrl_state == TSX_CTRL_RTM_ALWAYS_ABORT) + tsx_clear_cpuid(); split_lock_init(); bus_lock_init(); diff --git a/arch/x86/kernel/cpu/tsx.c b/arch/x86/kernel/cpu/tsx.c index e2ad30e474f8..5ed99811504c 100644 --- a/arch/x86/kernel/cpu/tsx.c +++ b/arch/x86/kernel/cpu/tsx.c @@ -2,7 +2,7 @@ /* * Intel Transactional Synchronization Extensions (TSX) control. * - * Copyright (C) 2019 Intel Corporation + * Copyright (C) 2019-2021 Intel Corporation * * Author: * Pawan Gupta @@ -84,14 +84,27 @@ static enum tsx_ctrl_states x86_get_tsx_auto_mode(void) return TSX_CTRL_ENABLE; } +void tsx_clear_cpuid(void) +{ + u64 msr; + + /* + * MSR_TFA_TSX_CPUID_CLEAR bit is only present when both CPUID bits + * RTM_ALWAYS_ABORT and TSX_FORCE_ABORT are enumerated. + */ + if (boot_cpu_has(X86_FEATURE_RTM_ALWAYS_ABORT) && + boot_cpu_has(X86_FEATURE_TSX_FORCE_ABORT)) { + rdmsrl(MSR_TSX_FORCE_ABORT, msr); + msr |= MSR_TFA_TSX_CPUID_CLEAR; + wrmsrl(MSR_TSX_FORCE_ABORT, msr); + } +} + void __init tsx_init(void) { char arg[5] = {}; int ret; - if (!tsx_ctrl_is_supported()) - return; - ret = cmdline_find_option(boot_command_line, "tsx", arg, sizeof(arg)); if (ret >= 0) { if (!strcmp(arg, "on")) { @@ -114,6 +127,26 @@ void __init tsx_init(void) tsx_ctrl_state = TSX_CTRL_ENABLE; } + /* + * Hardware will always abort a TSX transaction if both CPUID bits + * RTM_ALWAYS_ABORT and TSX_FORCE_ABORT are enumerated. In this case it + * is better not to enumerate CPUID.RTM and CPUID.HLE bits. Clear them + * here. + */ + if (boot_cpu_has(X86_FEATURE_RTM_ALWAYS_ABORT) && + boot_cpu_has(X86_FEATURE_TSX_FORCE_ABORT)) { + tsx_ctrl_state = TSX_CTRL_RTM_ALWAYS_ABORT; + tsx_clear_cpuid(); + setup_clear_cpu_cap(X86_FEATURE_RTM); + setup_clear_cpu_cap(X86_FEATURE_HLE); + return; + } + + if (!tsx_ctrl_is_supported()) { + tsx_ctrl_state = TSX_CTRL_NOT_SUPPORTED; + return; + } + if (tsx_ctrl_state == TSX_CTRL_DISABLE) { tsx_disable(); -- git-series 0.9.1