Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp560543iog; Mon, 13 Jun 2022 08:09:40 -0700 (PDT) X-Google-Smtp-Source: AGRyM1shPG/jrSd9So1XTJi576bJJbVy1ezVRVFHHgQKTbgVI5oh/UPGoTtXNsCTrKi4osFTgAUB X-Received: by 2002:a17:90a:740e:b0:1e2:a631:87e6 with SMTP id a14-20020a17090a740e00b001e2a63187e6mr250870pjg.115.1655132979916; Mon, 13 Jun 2022 08:09:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655132979; cv=none; d=google.com; s=arc-20160816; b=LBxleOCJ+xKZnA3aHdVHEVzRzSSKt7GB0TAHhQvBGnJ80a48raNLHaY/nCdV6IXpCG KROgxZaPjHjWku+UpNUAQ85F6i6OgpNkM6AeHKlYLSWbqgIj+xDaVaQuWkl6kW61gUBR HDvkElxZHBBBaBhsvuRDxdVqBo8LJ3AZx1raPSh84My8K57XurXVY5W9eG6veaoLMXGa oyc0d17yptAJ3hKPAI2NdwLbWJVYvokR+aUqXJOJHERsbVYShHzxPqcnI9AIkpiojmEE hjOvG/yO5YD5t0+HXICWl+EnrFUjz26mH8FthkF82mpKVWhuDNmvppSb2BbsctgfLmq3 2h1w== 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=Wm8rAysOxVM0amcYHkXg7YEx2qEhMtiDkg/iDfp9OmNbFP0fBjW1A7kzfHiFgYfRHn hs7m9izCWm59UMH6MNgpMpIBGNmFRcjDEX6kn8RLRtuOmXogl6KMczJXz+avB4pC79WE 9RF0fRkCHp+rMS+KyiFvhTGX88JJ8NzMDX/4Zj5YOi5+uN7MK7F6rd4A7B421JCRuaBJ fR9azfGmjGgURFMJy2rOrFvk42OAe9SnEry4PfJRCpAxT/FXQORIRA2cmbI+jqe4MHd6 jd3tss3HcsWbLYBmACn61dZgS8U8Fa8gFw5TYeSdJTeNwrg9kPTQMoJfYYmdVdPfAUfG hPDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=maJAPzDK; 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=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s10-20020a17090b070a00b001e839b85f69si8656575pjz.47.2022.06.13.08.09.27; Mon, 13 Jun 2022 08:09:39 -0700 (PDT) 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=@linuxfoundation.org header.s=korg header.b=maJAPzDK; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350006AbiFMK6e (ORCPT + 99 others); Mon, 13 Jun 2022 06:58:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44318 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350059AbiFMKyk (ORCPT ); Mon, 13 Jun 2022 06:54:40 -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 69D0824967; Mon, 13 Jun 2022 03:28:50 -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 0A85C60AE6; Mon, 13 Jun 2022 10:28:50 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 19800C34114; Mon, 13 Jun 2022 10:28:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1655116129; bh=RsqfcE3Vlaza98kvhQkeITROjqKHS5OvbTROZhct/dA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=maJAPzDKJzmBKeADritdlYGWqyzSB+of0v9/Jkl7BufSFItQc52jAqjYsQ2zL2+L5 GqLS7kB/lkaBNv4B3IabHOL7jifsYMbY5/nbkp+hVSZehBFr/Hhcivvocw2K9g0W7M kp71mx6w7Sq9iHuwe/en4g5J6jVfNKTX5bZnNCFA= 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.4 019/411] ACPICA: Avoid cache flush inside virtual machines Date: Mon, 13 Jun 2022 12:04:52 +0200 Message-Id: <20220613094929.077452334@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220613094928.482772422@linuxfoundation.org> References: <20220613094928.482772422@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=-8.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE 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 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