From patchwork Fri Nov 19 04:03:30 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuppuswamy Sathyanarayanan X-Patchwork-Id: 12628153 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DE58EC433F5 for ; Fri, 19 Nov 2021 04:03:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B8E8361353 for ; Fri, 19 Nov 2021 04:03:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230428AbhKSEGu (ORCPT ); Thu, 18 Nov 2021 23:06:50 -0500 Received: from mga14.intel.com ([192.55.52.115]:36844 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230385AbhKSEGt (ORCPT ); Thu, 18 Nov 2021 23:06:49 -0500 X-IronPort-AV: E=McAfee;i="6200,9189,10172"; a="234588655" X-IronPort-AV: E=Sophos;i="5.87,246,1631602800"; d="scan'208";a="234588655" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Nov 2021 20:03:48 -0800 X-IronPort-AV: E=Sophos;i="5.87,246,1631602800"; d="scan'208";a="455615417" Received: from jchun-mobl1.gar.corp.intel.com (HELO skuppusw-desk1.amr.corp.intel.com) ([10.255.86.248]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Nov 2021 20:03:47 -0800 From: Kuppuswamy Sathyanarayanan To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "Rafael J . Wysocki" Cc: "H . Peter Anvin" , Tony Luck , Dan Williams , Andi Kleen , Kirill Shutemov , Kuppuswamy Sathyanarayanan , Kuppuswamy Sathyanarayanan , linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org Subject: [PATCH v2] x86: Skip WBINVD instruction for VM guest Date: Thu, 18 Nov 2021 20:03:30 -0800 Message-Id: <20211119040330.4013045-1-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org ACPI mandates that CPU caches be flushed before entering any sleep state. This ensures that the CPU and its caches can be powered down without losing data. ACPI-based VMs have maintained this sleep-state-entry behavior. However, cache flushing for VM sleep state entry is useless. Unlike on bare metal, guest sleep states are not correlated with potential data loss of any kind; the host is responsible for data preservation. In fact, some KVM configurations simply skip the cache flushing instruction (see need_emulate_wbinvd()). Further, on TDX systems, the WBINVD instruction causes an unconditional #VE exception. If this cache flushing remained, it would need extra code in the form of a #VE handler. All use of ACPI_FLUSH_CPU_CACHE() appears to be in sleep-state-related code. This means that the ACPI use of WBINVD is at *best* superfluous. Disable ACPI CPU cache flushing on all X86_FEATURE_HYPERVISOR systems, which includes TDX. Cc: Rafael J. Wysocki Cc: linux-acpi@vger.kernel.org Reviewed-by: Dan Williams Acked-by: Rafael J. Wysocki Signed-off-by: Kuppuswamy Sathyanarayanan --- Changes since v1: * Used cpu_feature_enabled() instead of boot_cpu_has(). arch/x86/include/asm/acenv.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/acenv.h b/arch/x86/include/asm/acenv.h index 9aff97f0de7f..dba05c74bd7e 100644 --- a/arch/x86/include/asm/acenv.h +++ b/arch/x86/include/asm/acenv.h @@ -10,10 +10,15 @@ #define _ASM_X86_ACENV_H #include +#include /* Asm macros */ -#define ACPI_FLUSH_CPU_CACHE() wbinvd() +#define ACPI_FLUSH_CPU_CACHE() \ +do { \ + if (!cpu_feature_enabled(X86_FEATURE_HYPERVISOR)) \ + wbinvd(); \ +} while (0) int __acpi_acquire_global_lock(unsigned int *lock); int __acpi_release_global_lock(unsigned int *lock);