From patchwork Tue Nov 15 19:17:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pawan Gupta X-Patchwork-Id: 20515 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp2903857wru; Tue, 15 Nov 2022 11:25:48 -0800 (PST) X-Google-Smtp-Source: AA0mqf54EDAGttTa+/TSbstZtTchUCbmQ+cbf+ArAjw11iYfCvC8dQtdha6Rgz6VmbcS+UlrhHcV X-Received: by 2002:a17:906:5053:b0:7ad:f5a9:ece3 with SMTP id e19-20020a170906505300b007adf5a9ece3mr15383083ejk.635.1668540347908; Tue, 15 Nov 2022 11:25:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668540347; cv=none; d=google.com; s=arc-20160816; b=n5Afk1akP/NO2GbXV0IHase1Jj9lmrDxGahSUQQO5RRQ/5GFh/5krqFG537Fim9A+y XOg9rLNLa50ae3spvRFrWF0DBi0dfvICG7uAr4KmvlnEZqGARpP4Dl3HIWs4/kY/iaL5 cqDuZUKvTL293efenMd5F3LItJNMEarQhA0TW9sb9r2e3ohvlPYce5EwzD9o5nGACv6/ 3T+OqBSFq8szhpt/Xdqt0/vySiniqL1QxbiYo6eyq+R5+KoBzdRKHV7rphw3i8wpDPVu uV8gsCYMWL1GobiEx0osrzG5Ii6JxTwTVwsNOd6zN8CeXEOU3mLNs+FNzlTwxdvdtrNt 78rA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Ai+y2C+8FY85QYrIshFzPOa7btzfVx4F7ryDUKrVHVk=; b=ZzqepeAiTUED+CHSqygd9b4bwx0bLBmbXTi1LSxcnFsQ6zneDpf20OfQ77b/Do3Ubu bMPImpPQVseXMNl+HZReKpfnT6D2S2R5ofpt8k8XGasPGnVEs9fLybI20+NqeoyKpBWa 2E8o1f5rDMtxQubmqJBLtfyVbLpr1p0ggIJbeJlTm5vp8G2ALp8yRKQMQxCNGs64OeIc 3U5OCbYBmWILqYqlBJOqFubqznR/dJcCuF4+1QYFggSy9GRBAwjEdrBp2x0e9EAwVWDf 6aGlC9pKPaJD0x/Z7SeeIV0tPlQ4yYPpvbTVpHV/nO/eUz4nx5/EDwGN/QKwPTl8BnxH kJHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=CYaZ6UKP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ht14-20020a170907608e00b007acd09f5067si12628358ejc.417.2022.11.15.11.25.23; Tue, 15 Nov 2022 11:25:47 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=CYaZ6UKP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230331AbiKOTRY (ORCPT + 99 others); Tue, 15 Nov 2022 14:17:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230087AbiKOTRQ (ORCPT ); Tue, 15 Nov 2022 14:17:16 -0500 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E480F120AA; Tue, 15 Nov 2022 11:17:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1668539835; x=1700075835; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=E6Fr5EqSLsNUebM1iEN8hkFtHJmRiv4orK6AmUjJIB0=; b=CYaZ6UKPRC38g6LU6OC08kDf16FpIP3FMJaK0aUe0Ebwuvo+cv0jLVyZ cIuhY76LzsBxCxBeKYi6Jg9IPWLDCBVvYcdB77sDJUEyM6shDoIJKpDwz 3LcGrWHLfwGok7bU/UAA6boJeBMg3uMl2WsOSS1id0u4oZPKXkSiDqOUe suY8UHw/cJ7ps/tlFlUoTPvfYxKrztoi+7zS+du/SgUAAaR7OuDbnrcSk XLo79of7y5WHOWck17enqrcEM1E3J26QlUVNTZQFBq9B0arkdCRvdI2LP kxiIDIUcSM93BJfktahbwZvMRzLhf/xo7m72mZ+SmVBFspmmlEMZQnQ7W Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10532"; a="312349973" X-IronPort-AV: E=Sophos;i="5.96,166,1665471600"; d="scan'208";a="312349973" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Nov 2022 11:17:15 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10532"; a="616872698" X-IronPort-AV: E=Sophos;i="5.96,166,1665471600"; d="scan'208";a="616872698" Received: from slmckinn-mobl.amr.corp.intel.com (HELO guptapa-desk.intel.com) ([10.255.231.2]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Nov 2022 11:17:14 -0800 From: Pawan Gupta To: Andrew Cooper , thomas.lendacky@amd.com, "H. Peter Anvin" , hdegoede@redhat.com, Ingo Molnar , "Rafael J. Wysocki" , Thomas Gleixner , x86@kernel.org, Pavel Machek , Dave Hansen , David.Kaplan@amd.com, Borislav Petkov Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Daniel Sneddon , antonio.gomez.iglesias@linux.intel.com Subject: [PATCH v3 1/2] x86/tsx: Add feature bit for TSX control MSR support Date: Tue, 15 Nov 2022 11:17:05 -0800 Message-Id: X-Mailer: git-send-email 2.37.3 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_HI,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749591363839337606?= X-GMAIL-MSGID: =?utf-8?q?1749591363839337606?= Support for TSX control MSR is enumerated in MSR_IA32_ARCH_CAPABILITIES. This is different from how other CPU features are enumerated i.e. via CPUID. Currently a call to tsx_ctrl_is_supported() is required for enumerating the feature. In the absence of feature bit for TSX control, any code that relies on checking feature bits directly will not work. In preparation for adding a feature bit check in MSR save/restore during suspend/resume, set a new feature bit X86_FEATURE_TSX_CTRL when MSR_IA32_TSX_CTRL is present. Also make tsx_ctrl_is_supported() use the new feature bit to avoid any overhead of reading the MSR. Suggested-by: Andrew Cooper Signed-off-by: Pawan Gupta Reviewed-by: Dave Hansen --- arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/kernel/cpu/tsx.c | 30 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h index b71f4f2ecdd5..3cda06ebe046 100644 --- a/arch/x86/include/asm/cpufeatures.h +++ b/arch/x86/include/asm/cpufeatures.h @@ -304,6 +304,7 @@ #define X86_FEATURE_UNRET (11*32+15) /* "" AMD BTB untrain return */ #define X86_FEATURE_USE_IBPB_FW (11*32+16) /* "" Use IBPB during runtime firmware calls */ #define X86_FEATURE_RSB_VMEXIT_LITE (11*32+17) /* "" Fill RSB on VM exit when EIBRS is enabled */ +#define X86_FEATURE_MSR_TSX_CTRL (11*32+18) /* "" MSR IA32_TSX_CTRL (Intel) implemented */ /* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */ #define X86_FEATURE_AVX_VNNI (12*32+ 4) /* AVX VNNI instructions */ diff --git a/arch/x86/kernel/cpu/tsx.c b/arch/x86/kernel/cpu/tsx.c index ec7bbac3a9f2..9fe488dbed15 100644 --- a/arch/x86/kernel/cpu/tsx.c +++ b/arch/x86/kernel/cpu/tsx.c @@ -60,20 +60,7 @@ static void tsx_enable(void) static bool tsx_ctrl_is_supported(void) { - u64 ia32_cap = x86_read_arch_cap_msr(); - - /* - * TSX is controlled via MSR_IA32_TSX_CTRL. However, support for this - * MSR is enumerated by ARCH_CAP_TSX_MSR bit in MSR_IA32_ARCH_CAPABILITIES. - * - * TSX control (aka MSR_IA32_TSX_CTRL) is only available after a - * microcode update on CPUs that have their MSR_IA32_ARCH_CAPABILITIES - * bit MDS_NO=1. CPUs with MDS_NO=0 are not planned to get - * MSR_IA32_TSX_CTRL support even after a microcode update. Thus, - * tsx= cmdline requests will do nothing on CPUs without - * MSR_IA32_TSX_CTRL support. - */ - return !!(ia32_cap & ARCH_CAP_TSX_CTRL_MSR); + return cpu_feature_enabled(X86_FEATURE_MSR_TSX_CTRL); } static enum tsx_ctrl_states x86_get_tsx_auto_mode(void) @@ -191,7 +178,20 @@ void __init tsx_init(void) return; } - if (!tsx_ctrl_is_supported()) { + /* + * TSX is controlled via MSR_IA32_TSX_CTRL. However, support for this + * MSR is enumerated by ARCH_CAP_TSX_MSR bit in MSR_IA32_ARCH_CAPABILITIES. + * + * TSX control (aka MSR_IA32_TSX_CTRL) is only available after a + * microcode update on CPUs that have their MSR_IA32_ARCH_CAPABILITIES + * bit MDS_NO=1. CPUs with MDS_NO=0 are not planned to get + * MSR_IA32_TSX_CTRL support even after a microcode update. Thus, + * tsx= cmdline requests will do nothing on CPUs without + * MSR_IA32_TSX_CTRL support. + */ + if (x86_read_arch_cap_msr() & ARCH_CAP_TSX_CTRL_MSR) { + setup_force_cpu_cap(X86_FEATURE_MSR_TSX_CTRL); + } else { tsx_ctrl_state = TSX_CTRL_NOT_SUPPORTED; return; } From patchwork Tue Nov 15 19:17:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pawan Gupta X-Patchwork-Id: 20514 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp2903325wru; Tue, 15 Nov 2022 11:24:13 -0800 (PST) X-Google-Smtp-Source: AA0mqf62YFP+JntrqER0mgq2jNECDF3Vx0xE9mrRLEifhwlZVs7SG6ZKnqfSV6HC4INEvgXHjq+V X-Received: by 2002:a05:6402:b50:b0:459:2b41:3922 with SMTP id bx16-20020a0564020b5000b004592b413922mr15973934edb.160.1668540252929; Tue, 15 Nov 2022 11:24:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668540252; cv=none; d=google.com; s=arc-20160816; b=r1NTb4uRvLN9FNaW4Ixa7GRzKhtFh/mhg1tt35pOCSyekPI+IWiiF5X1hPaavslJDM EgzMw4RU/YBbFRrKqAf/fkB1Wm25pZhhjqvE42aJtLfKIvNksvHWvSrkK2godkD388Iz RFbDehEu7ERbD6QVGF2Zm08ySoPyGwFIkIdr7lhEY0MwNRLF+neCwLiZkm6D9q0tIBqL HEdJDydmdg9m8oPL7wwUovzWTlBEB6BkPSH1/yzhT0ErgESalCm8PKPR78N5LCU6YTS6 jgVDHc3FflXJ7vHXF7iNBXMAqeUpDtDQBPRIiW3HLujOA0oCTQUx02JWtnaYnmuGUSw6 f7LA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=SmkoVgJy1qNOFL48huQShMhS/NyhKnwbz0sXSlytyO4=; b=zApcBetFFQOR9vKmmwbg/so6xzP8YXB5k0otz7AZEUFc+y/aU8Bsy0miycFdmOwcm0 gCMExRwaxajNMV3j5znA9y5aN45EkHN2lbO3XZdh0Fv8xhIH4TcUYA9A0diynmYo38uS u/DTaA076GnRwjhE5/bhfUdWjmHYiubGMAeq/bVVIxxeT9fTSD3n9TjeG4X+rdKv/M40 j09pGU2mclnATg4BB9OWn+qJzdefTEHzsLVS5IVqGdlnMMAz5p97Gcf7ynVHzurwuwTV CrGU3RItgMQK8SD6OIoJAh+64ohajOWBWmecfrqp0MyeGWpPEOzkFMzQ0PwIqrdYfg+J ijBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Lkp3BmlR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dc26-20020a170906c7da00b0077b6ecac099si9034794ejb.287.2022.11.15.11.23.48; Tue, 15 Nov 2022 11:24:12 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Lkp3BmlR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230440AbiKOTR2 (ORCPT + 99 others); Tue, 15 Nov 2022 14:17:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230216AbiKOTRR (ORCPT ); Tue, 15 Nov 2022 14:17:17 -0500 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1B2FF12606; Tue, 15 Nov 2022 11:17:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1668539836; x=1700075836; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=DHaRmLRkLBJINbjYiux9rmh9GmvZL3p2PYtSTdCo3wo=; b=Lkp3BmlRKujXFarp1j5wtaz6RJS4Ro27raRlu4ChbpTP72CJvFom+VAZ th0eJHmjkU1WDsGtZB7Ntg8LSBxExUehXC8HPRQHWbWc2OMrj+/KQZdKt Mnw9/sdSV0NWybAxlfqUxLzwdc0EnRzcUZkQO1a+D8Q1eUErODvkmBx22 LtxbcgQ/GxdW4ZxJrH79nCwqec9PcFBq6SfHYQVmzQ8OEC/BZ/bigpVEk j06wKoQncWhfR9qkJlIOf0nvzLw3h1Xl/Wfa4JcwwqjvRCgY99tjP6Abk U4InfinkAADRITr09J0alI6s23fFGWwZ6LlgFBgvpsg1UGo8HYl/MPww6 g==; X-IronPort-AV: E=McAfee;i="6500,9779,10532"; a="312349974" X-IronPort-AV: E=Sophos;i="5.96,166,1665471600"; d="scan'208";a="312349974" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Nov 2022 11:17:15 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10532"; a="616872701" X-IronPort-AV: E=Sophos;i="5.96,166,1665471600"; d="scan'208";a="616872701" Received: from slmckinn-mobl.amr.corp.intel.com (HELO guptapa-desk.intel.com) ([10.255.231.2]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Nov 2022 11:17:15 -0800 From: Pawan Gupta To: Andrew Cooper , thomas.lendacky@amd.com, "H. Peter Anvin" , hdegoede@redhat.com, Ingo Molnar , "Rafael J. Wysocki" , Thomas Gleixner , x86@kernel.org, Pavel Machek , Dave Hansen , David.Kaplan@amd.com, Borislav Petkov Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Daniel Sneddon , antonio.gomez.iglesias@linux.intel.com Subject: [PATCH v3 2/2] x86/pm: Add enumeration check before spec MSRs save/restore setup Date: Tue, 15 Nov 2022 11:17:06 -0800 Message-Id: X-Mailer: git-send-email 2.37.3 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_HI,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749591264149330149?= X-GMAIL-MSGID: =?utf-8?q?1749591264149330149?= pm_save_spec_msr() keeps a list of all the MSRs which _might_ need to be saved and restored at hibernate and resume. However, it has zero awareness of CPU support for these MSRs. It mostly works by unconditionally attempting to manipulate these MSRs and relying on rdmsrl_safe() being able to handle a #GP on CPUs where the support is unavailable. However, it's possible for reads (RDMSR) to be supported for a given MSR while writes (WRMSR) are not. In this case, msr_build_context() sees a successful read (RDMSR) and marks the MSR as 'valid'. Then, later, a write (WRMSR) fails, producing a nasty (but harmless) error message. This causes restore_processor_state() to try and restore it, but writing this MSR is not allowed on the Intel Atom N2600 leading to: unchecked MSR access error: WRMSR to 0x122 (tried to write 0x0000000000000002) \ at rIP: 0xffffffff8b07a574 (native_write_msr+0x4/0x20) Call Trace: restore_processor_state x86_acpi_suspend_lowlevel acpi_suspend_enter suspend_devices_and_enter pm_suspend.cold state_store kernfs_fop_write_iter vfs_write ksys_write do_syscall_64 ? do_syscall_64 ? up_read ? lock_is_held_type ? asm_exc_page_fault ? lockdep_hardirqs_on entry_SYSCALL_64_after_hwframe To fix this, add the corresponding X86_FEATURE bit for each MSR. Avoid trying to manipulate the MSR when the feature bit is clear. This required adding a X86_FEATURE bit for MSRs that do not have one already, but it's a small price to pay. Fixes: 73924ec4d560 ("x86/pm: Save the MSR validity status at context setup") Reported-by: Hans de Goede Signed-off-by: Pawan Gupta Cc: stable@kernel.org Acked-by: Rafael J. Wysocki Reviewed-by: Dave Hansen --- arch/x86/power/cpu.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c index 4cd39f304e20..11a7e28f8985 100644 --- a/arch/x86/power/cpu.c +++ b/arch/x86/power/cpu.c @@ -511,18 +511,27 @@ static int pm_cpu_check(const struct x86_cpu_id *c) return ret; } +struct msr_enumeration { + u32 msr_no; + u32 feature; +}; + static void pm_save_spec_msr(void) { - u32 spec_msr_id[] = { - MSR_IA32_SPEC_CTRL, - MSR_IA32_TSX_CTRL, - MSR_TSX_FORCE_ABORT, - MSR_IA32_MCU_OPT_CTRL, - MSR_AMD64_LS_CFG, - MSR_AMD64_DE_CFG, + struct msr_enumeration msr_enum[] = { + {MSR_IA32_SPEC_CTRL, X86_FEATURE_MSR_SPEC_CTRL}, + {MSR_IA32_TSX_CTRL, X86_FEATURE_MSR_TSX_CTRL}, + {MSR_TSX_FORCE_ABORT, X86_FEATURE_TSX_FORCE_ABORT}, + {MSR_IA32_MCU_OPT_CTRL, X86_FEATURE_SRBDS_CTRL}, + {MSR_AMD64_LS_CFG, X86_FEATURE_LS_CFG_SSBD}, + {MSR_AMD64_DE_CFG, X86_FEATURE_LFENCE_RDTSC}, }; + int i; - msr_build_context(spec_msr_id, ARRAY_SIZE(spec_msr_id)); + for (i = 0; i < ARRAY_SIZE(msr_enum); i++) { + if (boot_cpu_has(msr_enum[i].feature)) + msr_build_context(&msr_enum[i].msr_no, 1); + } } static int pm_check_save_msr(void)