Received: by 2002:a05:6a10:6e98:0:0:0:0 with SMTP id ie24csp5416025pxb; Wed, 9 Jun 2021 14:19:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwOqLlpt2vA2Rk238CUL6E+kHIRg1voQVHP6VXUjYozqT9hWew9FRui43W02kDTeoVz/F9E X-Received: by 2002:aa7:da94:: with SMTP id q20mr1334437eds.310.1623273553999; Wed, 09 Jun 2021 14:19:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623273553; cv=none; d=google.com; s=arc-20160816; b=P8Lc2zdg/h40uh1T6ZBWM5P6D9e8p6qKFSabhfB0W1Xaw9WeP7bIZEFdRgSZitx+iv DOkSUm1do+uCQydGP0CgNy4kerfo3NO6ZUZpBWaJd7LyBNizUyswIVS0tQ86SvI5a6yT D44HATTwkiNH8H9PB6Jsp7Q4O8WhothszpkMYxLIEi9cnsUVR9mSxjVm8JG3qe8tAKn4 J/s1FD9XGBjguU0tDIJbhH8zxGv40wI2+quDR7mNFopKV0xNYIqvlXS0fgKKrNZCbAFH UakiuSjqlvXinL9oVLhD6+/l4FvZsy/A4bYHfS9UwAvUilDGOz+1pCZqyPIF6KGuSUqD QscQ== 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=2b6/x9ryXDc82SccyfGkRQpgXe8dIfmxUgQ0xILg8bI=; b=stvboWJD4mn1mKUwC6svjCI/NGiVOZglOvKGAuw8LWkL9TMr8LkjNqvqnio8TVB7BG BM9atled0IgxIE3pzmoZitnXhq1Sjdb7oxSWaBJ+cPOqhDV/O5JsXc/sUROeRjzKspG7 g3/NW5BkcK4BBQ3h6lktoYFQ5UtI0fItXslauKc5Q62jAgu/pleYRKZ4Mmogh341cC3h A+e7Ib5ymi3dD2TFk4yGFu8HtMZuXEd2SKFOrHoRamyqiB7emm0eQPsWEfP5ZDqtpJmR eJS2J7Q6zPv118daTI2ishPNENUfAbcJ7pjs3PmNgfbbkr+7/rxrnbK4EpIbZTwm06fJ kWfQ== 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 bm18si563575edb.404.2021.06.09.14.18.49; Wed, 09 Jun 2021 14:19:13 -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 S229689AbhFIVQl (ORCPT + 99 others); Wed, 9 Jun 2021 17:16:41 -0400 Received: from mga18.intel.com ([134.134.136.126]:18164 "EHLO mga18.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229557AbhFIVQj (ORCPT ); Wed, 9 Jun 2021 17:16:39 -0400 IronPort-SDR: KNTH3tA3sG1BRZK4qTCz6AENS9qBl4DFppFyPfTVujIDb1qkt2nCsROKA3NoUOM5y915a4a0/m TOmCkGtdpa1Q== X-IronPort-AV: E=McAfee;i="6200,9189,10010"; a="192486163" X-IronPort-AV: E=Sophos;i="5.83,261,1616482800"; d="scan'208";a="192486163" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jun 2021 14:14:32 -0700 IronPort-SDR: gmFssmlB2tZNL9dXdqT7llGbuE6WngKEc1A3weq4eg6wzWnWvfiFluDnNIn61swDt4V7g6dTFn xRWhh2datkZg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,261,1616482800"; d="scan'208";a="552808082" 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:14:30 -0700 Date: Wed, 9 Jun 2021 14:14:39 -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 4/4] x86/tsx: Add cmdline tsx=fake to not clear CPUID bits RTM and HLE 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 On CPUs that deprecated TSX, clearing the enumeration bits CPUID.RTM and CPUID.HLE may not be desirable in some corner cases. Like a saved guest would refuse to resume if it was saved before the microcode update that deprecated TSX. Add a cmdline option "tsx=fake" to not clear CPUID bits even when the hardware always aborts TSX transactions. Suggested-by: Tony Luck Suggested-by: Andi Kleen Signed-off-by: Pawan Gupta Reviewed-by: Andi Kleen Reviewed-by: Tony Luck Tested-by: Neelima Krishnan --- Documentation/admin-guide/kernel-parameters.txt | 3 +++ arch/x86/kernel/cpu/bugs.c | 5 +++-- arch/x86/kernel/cpu/cpu.h | 1 + arch/x86/kernel/cpu/tsx.c | 7 +++++-- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index cb89dbdedc46..ced9e5596163 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -5693,6 +5693,9 @@ auto - Disable TSX if X86_BUG_TAA is present, otherwise enable TSX on the system. + fake - Do not clear the CPUID bits RTM and HLE even + when hardware always aborts TSX transactions. + Not specifying this option is equivalent to tsx=off. See Documentation/admin-guide/hw-vuln/tsx_async_abort.rst diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c index d41b70fe4918..46fcc392a339 100644 --- a/arch/x86/kernel/cpu/bugs.c +++ b/arch/x86/kernel/cpu/bugs.c @@ -316,8 +316,9 @@ static void __init taa_select_mitigation(void) return; } - /* TSX previously disabled by tsx=off */ - if (!boot_cpu_has(X86_FEATURE_RTM)) { + /* TSX previously disabled by tsx=off or by microcode */ + if (!boot_cpu_has(X86_FEATURE_RTM) || + boot_cpu_has(X86_FEATURE_RTM_ALWAYS_ABORT)) { taa_mitigation = TAA_MITIGATION_TSX_DISABLED; goto out; } diff --git a/arch/x86/kernel/cpu/cpu.h b/arch/x86/kernel/cpu/cpu.h index 95521302630d..84a479866c4b 100644 --- a/arch/x86/kernel/cpu/cpu.h +++ b/arch/x86/kernel/cpu/cpu.h @@ -49,6 +49,7 @@ enum tsx_ctrl_states { TSX_CTRL_ENABLE, TSX_CTRL_DISABLE, TSX_CTRL_RTM_ALWAYS_ABORT, + TSX_CTRL_FAKE, TSX_CTRL_NOT_SUPPORTED, }; diff --git a/arch/x86/kernel/cpu/tsx.c b/arch/x86/kernel/cpu/tsx.c index 5ed99811504c..2f8e50584297 100644 --- a/arch/x86/kernel/cpu/tsx.c +++ b/arch/x86/kernel/cpu/tsx.c @@ -113,6 +113,8 @@ void __init tsx_init(void) tsx_ctrl_state = TSX_CTRL_DISABLE; } else if (!strcmp(arg, "auto")) { tsx_ctrl_state = x86_get_tsx_auto_mode(); + } else if (!strcmp(arg, "fake")) { + tsx_ctrl_state = TSX_CTRL_FAKE; } else { tsx_ctrl_state = TSX_CTRL_DISABLE; pr_err("invalid option, defaulting to off\n"); @@ -131,9 +133,10 @@ void __init tsx_init(void) * 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. + * here, except when user requested not to clear via cmdline tsx=fake. */ - if (boot_cpu_has(X86_FEATURE_RTM_ALWAYS_ABORT) && + if (tsx_ctrl_state != TSX_CTRL_FAKE && + 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(); -- git-series 0.9.1