Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp3714579imw; Mon, 18 Jul 2022 13:10:05 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vUGwgEW06fykWHBkPTm+Ie7+u43tGf4n0YMc9y0+8zxLCJ2yNczyaLFKkNvEwVOLpG6SOj X-Received: by 2002:a05:6402:189:b0:437:8a8a:d08a with SMTP id r9-20020a056402018900b004378a8ad08amr39102932edv.241.1658175005706; Mon, 18 Jul 2022 13:10:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658175005; cv=none; d=google.com; s=arc-20160816; b=f9yoeL2aSAU+l1RXPrqGaH3bUBI/h5ogfNie+qwu4mmxLRvk0nliruZJYJ588PG8Ne 9Iq2Xuu/f6ZLiIEgU5/rQD4675/OAjYRTGfr2Wy/6XK+yWWE1DunQ2zeSdsMfFPHedcN ufCYZw74l085pkfjBx93vv1wG6Sx4pfNh7nrwf2mkNxirsMkqxeGCFpvwh1Cf6SByRmP SxwMAdBJCb5qvuTdCnwqKGeGzEfmKs9vuDlJl5V1xvOtclSDx0cBOL9i85dH6qryiMlp acdoGYSfClVfR64ftkkdX55xIgbhDFVJSTyHGoCe7nwxb8h4n8FWzRYKEVu33ZscwoLo ORuA== 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=U3bHH+VCApNk0EgSMkQpPIu/hogjL02kkGQOh371JqE=; b=iWSAQyp1VyXeRN3mBSZBp4AdD4AOZFXOjNe6ilTufBwsm69gDFZPPRN3LHd+m0iWeA pns7bGpoRs53Go5r2UVPQBxopCldQFalg0QZJ2pIFZ6kywyPO/MQbDcEKoUM0UNVAOcP K3Q5VkFdJxaohnerHRMkvZ1SXlUJoNl4ZXKa+l+8kPSE3N6iTZYlNnWYHVs735KpAbCU 324JWdpcwz37vUvxPmVLrioCH2UZxprv2X9vlmGIKDCFqUyqXfyQuIMtQhadIExG+uH4 Vo93Vkxy9Ih3mZm3HkkqJCF8a6ZE3JtELXWQKRcY0/fJJm3zmn/Vlyz+RjHPgU9bt/Hk euOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=cgVgCcOu; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dn18-20020a17090794d200b0072ac7db91e6si18145464ejc.610.2022.07.18.13.09.41; Mon, 18 Jul 2022 13:10:05 -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=@gmail.com header.s=20210112 header.b=cgVgCcOu; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236283AbiGRThu (ORCPT + 99 others); Mon, 18 Jul 2022 15:37:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57534 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236216AbiGRThX (ORCPT ); Mon, 18 Jul 2022 15:37:23 -0400 Received: from mail-pl1-x630.google.com (mail-pl1-x630.google.com [IPv6:2607:f8b0:4864:20::630]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0585D30F75 for ; Mon, 18 Jul 2022 12:37:22 -0700 (PDT) Received: by mail-pl1-x630.google.com with SMTP id z1so9967428plb.1 for ; Mon, 18 Jul 2022 12:37:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=U3bHH+VCApNk0EgSMkQpPIu/hogjL02kkGQOh371JqE=; b=cgVgCcOubWJlYQh87ciup80RfrTt14z9y9XheMGRDWpUOcN7tz83N1/LeVdqY4FC8x NjZ299ZmT5ayN+y3qeWtB4AiGGlLv0bTeoa41zMsLcKw7Yvbr8j3tdxbVbn/BCQj5UnM N+DKf8yCPT06zTRIR4vx6LrfvTTsQMm6mDcaVmmqoslMBPkuYDGQM8LAXE49wLZerlr4 O2XHyJrKy3OzAIEITCEW9D6Zdl1GZeNoRYmVFo5+eof3svAuQ9oW9pdkFfi1jwDp+2Kd cmWr6cYwHWT0ai9wmSNVyZ4nkkJV4zU269t4/tA7BL3pdN3OppGjcXUqwL5ga4yr3+rK lK/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=U3bHH+VCApNk0EgSMkQpPIu/hogjL02kkGQOh371JqE=; b=DUF3PtX4kOW5U/7yPOpKXEYLS9Q/RZ50yl6Bxn9H+AA2Ng215CxmHBcUop+9mbQHmB SoEFOwlH+EYCdWvsBcjj7QCAjA/fDqqrOYmU4w0i0dje47kD6U//HuYOMBG8+FXkhRBi 5EwJo8DQpOREMIYst2DIR5aGdcuAvviQAnLNeywMVEaTnXSzm9TyOC/e1VqSh0lTxnka thzC7UxKX3RUKYZVYAClSoFEkKAK/75XY2dKj3wj2ldIf5u1IG24tP4akIF5HPXLBHHC MlRHQlebSXQhOafP68ZjwVPGKhPHXj76pPhSwVQTyPXKYI26bf4+oAq5SkZTSm6gRdK4 pZ0Q== X-Gm-Message-State: AJIora/yOYpL3bO6okyZkjIURP+NnopbhtwLHMNuWDtiy+arZiDhi8YT jnMkyC3Eq0sp1ZyBolEp0sA= X-Received: by 2002:a17:90a:f114:b0:1ef:991f:12e7 with SMTP id cc20-20020a17090af11400b001ef991f12e7mr41584874pjb.199.1658173040943; Mon, 18 Jul 2022 12:37:20 -0700 (PDT) Received: from sc2-haas01-esx0118.eng.vmware.com ([66.170.99.1]) by smtp.gmail.com with ESMTPSA id q6-20020a170902a3c600b0016bc4a6ce28sm9907887plb.98.2022.07.18.12.37.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Jul 2022 12:37:20 -0700 (PDT) From: Nadav Amit X-Google-Original-From: Nadav Amit To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, Andrew Morton , Mike Rapoport , Axel Rasmussen , Nadav Amit , Andrea Arcangeli , Andrew Cooper , Andy Lutomirski , Dave Hansen , David Hildenbrand , Peter Xu , Peter Zijlstra , Thomas Gleixner , Will Deacon , Yu Zhao , Nick Piggin Subject: [RFC PATCH 12/14] x86/tlb: no flush on PTE change from RW->RO when PTE is clean Date: Mon, 18 Jul 2022 05:02:10 -0700 Message-Id: <20220718120212.3180-13-namit@vmware.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220718120212.3180-1-namit@vmware.com> References: <20220718120212.3180-1-namit@vmware.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.5 required=5.0 tests=BAYES_00,DATE_IN_PAST_06_12, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE autolearn=no 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: Nadav Amit On x86 it is possible to skip a TLB flush when a RW entry become RO and the PTE is clean. Add logic to detect this case and skip the flush. Cc: Andrea Arcangeli Cc: Andrew Cooper Cc: Andrew Morton Cc: Andy Lutomirski Cc: Dave Hansen Cc: David Hildenbrand Cc: Peter Xu Cc: Peter Zijlstra Cc: Thomas Gleixner Cc: Will Deacon Cc: Yu Zhao Cc: Nick Piggin Signed-off-by: Nadav Amit --- arch/x86/include/asm/tlbflush.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h index 4f98735ab07a..58c95e36b098 100644 --- a/arch/x86/include/asm/tlbflush.h +++ b/arch/x86/include/asm/tlbflush.h @@ -271,8 +271,9 @@ static inline enum pte_flush_type pte_flags_flush_type(unsigned long oldflags, * dirty/access bit if needed without a fault. */ const pteval_t flush_on_clear = _PAGE_DIRTY | _PAGE_PRESENT | - _PAGE_ACCESSED | _PAGE_RW; + _PAGE_ACCESSED; const pteval_t flush_on_set = _PAGE_NX; + const pteval_t flush_on_special = _PAGE_RW; const pteval_t flush_on_set_relaxed = _PAGE_RW; const pteval_t flush_on_clear_relaxed = _PAGE_NX; const pteval_t software_flags = _PAGE_SOFTW1 | _PAGE_SOFTW2 | @@ -302,6 +303,17 @@ static inline enum pte_flush_type pte_flags_flush_type(unsigned long oldflags, if (diff & oldflags & flush_on_clear) return PTE_FLUSH_STRICT; + /* + * Did any of the 'flush_on_set' flags was set between 'oldflags' and + * 'newflags'? + */ + if (diff & newflags & flush_on_set) + return PTE_FLUSH_STRICT; + + /* On RW->RO, a flush is needed if the old entry is dirty */ + if ((diff & oldflags & _PAGE_RW) && (oldflags & _PAGE_DIRTY)) + return PTE_FLUSH_STRICT; + /* Flush on modified flags. */ if (diff & flush_on_change) return PTE_FLUSH_STRICT; @@ -314,7 +326,7 @@ static inline enum pte_flush_type pte_flags_flush_type(unsigned long oldflags, /* Ensure there are no flags that were left behind */ if (IS_ENABLED(CONFIG_DEBUG_VM) && - (diff & ~(flush_on_clear | flush_on_set | + (diff & ~(flush_on_clear | flush_on_set | flush_on_special | software_flags | flush_on_change))) { VM_WARN_ON_ONCE(1); return PTE_FLUSH_STRICT; -- 2.25.1