Received: by 2002:a05:7412:a9a2:b0:e2:908c:2ebd with SMTP id o34csp1403369rdh; Fri, 27 Oct 2023 13:12:37 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE6pi+k9a7mp1g35WufjqhbSF0yTV3NCD0xhNlnSk1FnovhJ+Ccq5PNIYk6QndNpCCUL+rj X-Received: by 2002:a25:d816:0:b0:da0:5e86:32f8 with SMTP id p22-20020a25d816000000b00da05e8632f8mr3021327ybg.4.1698437557603; Fri, 27 Oct 2023 13:12:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698437557; cv=none; d=google.com; s=arc-20160816; b=bzILuTujO7AOIaePeCeJqP7iwd6eQeEQY0sr/OpMgYWPfTzcvaP2ilGBH897j2Eat9 n8vRdQ5pvxvITyoYeaVQoe7SCPeFfIR4T8ahqbthRmcP73XwGNCvrXesmGVSQfHOHSJy QhzVwRSN0VBiXrv4bLyTfVF0uO+DluxxMMl2AdgZWX+UC7b0bUrsPFOPv8GW37FDwHF0 VpUzkZtrrXz4GxZ91CAWfti0qKJ4oLJL6Ij7bGoFxH7XuJAtOBE9yTfG2SslxNytAsSm pYCNuDB7AQEpjfYQYxV9UEombr/7y3zLf2EyLKLGH+3V1gPfW5+0yeKwrI18mo3rn5rA 1Fsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:autocrypt :from:references:cc:to:content-language:subject:user-agent :mime-version:date:message-id:dkim-signature; bh=UT66AtEbFuFaCPachJpnnyd+N+BrYg8Ildytb7ua6CI=; fh=6bg8ZOretGFMvzO2nV1wRD16ufWpdL/+vpMeoZHa6D0=; b=I/xAUz++/tMV4s+nkFN9UsL/FzJ2oiXYJteVyDUHBeOhFq2KlrpPjpscEQ6QPTqrAA OW/VYQh+2YoQR5jUQsbn0Sd2ynuoGvIjrupLnIumYcvwlqy/LfNlCyP6iF88BCHxHWsp j7Mr8kM7V2ZMuQPQ31rVMmkjukNEW2Qiam36Aza4OSTI0swsf6sOfL5RCQvtFhnspdWN 3dCQC+glQ4JSbhsymch9hYGCDJWj7Td8zKQG3AF+Jm8AWOAe8bHnA6jKsuwQwbP/MLue zNrIV1ecWLTYBuOXIWgK+zIUOR4sOZeQCuGPv+94e4Ya/9R1u3j55PK3CZ9tmPlvmu1p e15Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=RZdIJTMh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id r65-20020a254444000000b00d9bc6346797si3627635yba.692.2023.10.27.13.12.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 13:12:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=RZdIJTMh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 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 (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 9C3D583E8FEA; Fri, 27 Oct 2023 13:12:34 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232578AbjJ0UM2 (ORCPT + 99 others); Fri, 27 Oct 2023 16:12:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53032 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230451AbjJ0UM1 (ORCPT ); Fri, 27 Oct 2023 16:12:27 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 11310E5 for ; Fri, 27 Oct 2023 13:12:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1698437545; x=1729973545; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=+StNUvMt2MbRGlfFkrMTi4YqqZDHYxl6hV6BoaalDBY=; b=RZdIJTMhiiV1YEIo/gt7hLhUQom1EJk34JHmUMVLf/ZDxP7MX0PHIgR3 YM8MTs3c8dMCvpj2hONzNxlP0vwhitekuDhGBxFzQKfDcGXRSPC7gWmkI tmtQlCvwTlhl+CP30p0cBW7700c+rCgURTzmZwuFEgGplb+0LokQn3zb7 RLzwoD6paukm7HFg0QQF+IVcokPHwX/DdZuomM3315VYG86QzX8kbU/NM WQz0qgjDx5BFbhU1yJ4EZoNLCJQCPoYQ9vud/qfnBO/NvbFHWNSXGwE/o PWAhnXHm3+WHt2Jxc1Q2v6/pzoj3muPRaoZYxcbCMNLcFNMPN17+arEGi Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10876"; a="390707575" X-IronPort-AV: E=Sophos;i="6.03,257,1694761200"; d="scan'208";a="390707575" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Oct 2023 13:12:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10876"; a="794684805" X-IronPort-AV: E=Sophos;i="6.03,257,1694761200"; d="scan'208";a="794684805" Received: from hannahwo-mobl1.amr.corp.intel.com (HELO [10.209.35.60]) ([10.209.35.60]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Oct 2023 13:12:23 -0700 Message-ID: <3d1a8f13-be8e-42a4-93f7-0ae59b7f0505@intel.com> Date: Fri, 27 Oct 2023 13:12:23 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2] x86/entry: Avoid redundant CR3 write on paranoid returns Content-Language: en-US To: Brendan Jackman , luto@kernel.org, tglx@linutronix.de Cc: mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, linux-kernel@vger.kernel.org, laijs@linux.alibaba.com, yosryahmed@google.com, reijiw@google.com, oweisse@google.com, peterz@infradead.org References: <20230920150443.1789000-1-jackmanb@google.com> From: Dave Hansen Autocrypt: addr=dave.hansen@intel.com; keydata= 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 In-Reply-To: <20230920150443.1789000-1-jackmanb@google.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Fri, 27 Oct 2023 13:12:34 -0700 (PDT) On 9/20/23 08:04, Brendan Jackman wrote: > From: Lai Jiangshan > > This path gets used called from: > > 1. #NMI return. > 2. paranoid_exit (i.e. #MCE, #VC, #DB and #DF return) > > Contrary to the implication in commit 21e94459110252 ("x86/mm: Optimize > RESTORE_CR3"), we never modify CR3 in any of these exceptions, except > for switching from user to kernel pagetables under PTI. That means that > most of the time when returning from an exception that interrupted the > kernel no CR3 restore is necessary. Writing CR3 is expensive on some > machines, so this commit avoids redundant writes. Please avoid "we's" in changelogs. One thing that I think is key to this patch, but which is muddled up in that changelog: RESTORE_CR3 is *ONLY* used when returning to the kernel. It must handle user CR3 values because the kernel can run in the entry/exit code with user CR3 values. That means that restoring user CR3 values is important functionally but is actually rare in practice. That's _not_ obvious from just glancing at RESTORE_CR3 call sites or reading your changelog. It also makes it obvious why this patch is worth it: it optimizes the overwhelmingly common case. > I said "most of the time" because we might have interrupted the kernel > entry before the user->kernel CR3 switch or the exit after the > kernel->user switch. In the former case skipping the restore might > actually be be fine, but definitely not the latter. So we do still need > to check the saved CR3 and restore it if it's a user CR3. > > To reflect the new behaviour RESTORE_CR3 is given a longer name, and a > comment that was describing its behaviour at the call site is removed. > We can also simplify the code around the SET_NOFLUSH_BIT invocation > as we no longer need to branch to it from above. Also, I don't feel _that_ strongly about the naming, but I'd kinda rather it be: PARANOID_RESTORE_CR3 That would at least label it explicitly for these paranoid exit cases. Sure, this _can_ get used in other contexts theoretically, but it's really only suitable for the two paranoid exit paths. It also avoids confusion about whether the "USER" refers to the context or the CR3 value. I would probably also give this CR3 function a declared purpose: /* Restore CR3 from a kernel context. May restore a user CR3 value. */