Received: by 2002:a5d:9c59:0:0:0:0:0 with SMTP id 25csp2178307iof; Tue, 7 Jun 2022 22:18:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw0FUAIjDVjt0AJHYQgRSpw8CcCOiay4zBn8oK385C/IhtzlB8ftkSJWXDWebzCh4Hl0Prl X-Received: by 2002:aa7:93a5:0:b0:51b:e0f8:97a6 with SMTP id x5-20020aa793a5000000b0051be0f897a6mr25575293pff.44.1654665539367; Tue, 07 Jun 2022 22:18:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654665539; cv=none; d=google.com; s=arc-20160816; b=wM36K+lrCsmocfUO7kXLdSt3iFqb2vKyCWLuCn/xU3bobx4keEvrKXK6+C8BeM+dYU gk2+KRQ6mwZIhuCgRX2zVbN8nK9hqW8y+YU2SPQkBV+CZ8fVVM1zN+pg3qyDpJoqCkfG Bkf70cYZFDPZ42Jmta3PkuvCsf/DDC6y2otKvVG3R3Vpr2snu3o7SX9gnZTXHZTpJ8YM boGbQAiocBOoIXA4nw+RO7VZ0sZDo14X6HXaAUAGJt9HTcfEl12qUsx4P9phB3IhQ4Jd Wf8Y7Xdi+oU6CBAsHnyeZh8f6zOCX11bvXIvSnZYvtoAr1ncmY7MrN7ImOqBxiFqaudU Ra8A== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=jdwUAkPybh634ejosPiIlEFfpi1PT9UP0Yg9pZ2zHm8=; b=j41y1BDYNBfkVKEpr7WvOqIGTHd+jVg7WYDSGa5Sf9B7IL4YSR4CcOf4gFU2CKVx9n RLlaWP9PS56WXSnaYv5bO5oKDWKCeNfOSolcZWiu2HQlF0q2+yrsoYVGS/TpzXuj1PFu 34umY/4VOAMQqsrbfkQw1iPjeyBiBjaYRQ8TGrpA2v+ZDeeM7/8k4ZIL45UUOKTndvLv ATBhUeY9CaEqabJ2Ce3FLmow9aSOlv0MimxpP8Iwls53Gbztk82NAq2zS+vttWE559w7 DSXtp1otu+bJX47Fw3nSgKVcwhh/n8EfRZrZnOBaX3Io5qxzMo65CD2GuYvDGZuTLIyE r1aA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=VYqku34j; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id em18-20020a17090b015200b001dcddce9c40si27222196pjb.143.2022.06.07.22.18.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 22:18:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=VYqku34j; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 7AAE924707A; Tue, 7 Jun 2022 21:48:04 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1384066AbiFGWKR (ORCPT + 99 others); Tue, 7 Jun 2022 18:10:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34216 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377938AbiFGVGm (ORCPT ); Tue, 7 Jun 2022 17:06:42 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7B9A7212C84; Tue, 7 Jun 2022 11:50:42 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id C71F7612F2; Tue, 7 Jun 2022 18:50:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CE02EC385A2; Tue, 7 Jun 2022 18:50:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1654627841; bh=RsqfcE3Vlaza98kvhQkeITROjqKHS5OvbTROZhct/dA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VYqku34jBQP5pBFBA9T1woAMofXqvRhM65yMqZEDUKrJTp6xvOjT9C0F5p+5q6vGc f9PV4JDDDWuIfpFd1NR9e1auuumFbX1356lbhnmMZQKQQDux7jLejhQsvNVJmPs3FH T5TPQzm+YpN3cTvpnDFgxpQ4xgJjHoHVjQOEb3nE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Kirill A. Shutemov" , Dave Hansen , Dan Williams , Thomas Gleixner , Sasha Levin Subject: [PATCH 5.18 072/879] ACPICA: Avoid cache flush inside virtual machines Date: Tue, 7 Jun 2022 18:53:10 +0200 Message-Id: <20220607165004.781286229@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220607165002.659942637@linuxfoundation.org> References: <20220607165002.659942637@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable 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 From: Kirill A. Shutemov [ Upstream commit e2efb6359e620521d1e13f69b2257de8ceaa9475 ] While running inside virtual machine, the kernel can bypass cache flushing. Changing sleep state in a virtual machine doesn't affect the host system sleep state and cannot lead to data loss. Before entering sleep states, the ACPI code flushes caches to prevent data loss using the WBINVD instruction. This mechanism is required on bare metal. But, any use WBINVD inside of a guest is worthless. Changing sleep state in a virtual machine doesn't affect the host system sleep state and cannot lead to data loss, so most hypervisors simply ignore it. Despite this, the ACPI code calls WBINVD unconditionally anyway. It's useless, but also normally harmless. In TDX guests, though, WBINVD stops being harmless; it triggers a virtualization exception (#VE). If the ACPI cache-flushing WBINVD were left in place, TDX guests would need handling to recover from the exception. Avoid using WBINVD whenever running under a hypervisor. This both removes the useless WBINVDs and saves TDX from implementing WBINVD handling. Signed-off-by: Kirill A. Shutemov Signed-off-by: Dave Hansen Reviewed-by: Dave Hansen Reviewed-by: Dan Williams Reviewed-by: Thomas Gleixner Link: https://lkml.kernel.org/r/20220405232939.73860-30-kirill.shutemov@linux.intel.com Signed-off-by: Sasha Levin --- arch/x86/include/asm/acenv.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/acenv.h b/arch/x86/include/asm/acenv.h index 9aff97f0de7f..d937c55e717e 100644 --- a/arch/x86/include/asm/acenv.h +++ b/arch/x86/include/asm/acenv.h @@ -13,7 +13,19 @@ /* Asm macros */ -#define ACPI_FLUSH_CPU_CACHE() wbinvd() +/* + * ACPI_FLUSH_CPU_CACHE() flushes caches on entering sleep states. + * It is required to prevent data loss. + * + * While running inside virtual machine, the kernel can bypass cache flushing. + * Changing sleep state in a virtual machine doesn't affect the host system + * sleep state and cannot lead to data loss. + */ +#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); -- 2.35.1