From patchwork Mon Mar 6 16:34:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juergen Gross X-Patchwork-Id: 64954 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1951924wrd; Mon, 6 Mar 2023 08:57:58 -0800 (PST) X-Google-Smtp-Source: AK7set+MQJQiiCg+UVa2K8GluJUJ4lEoinpgRW1k3vN8nDcEnlpZ1/Pmhmr1p0cvjvugzH683Gch X-Received: by 2002:a17:90b:4d85:b0:235:b712:4180 with SMTP id oj5-20020a17090b4d8500b00235b7124180mr10590333pjb.24.1678121877779; Mon, 06 Mar 2023 08:57:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678121877; cv=none; d=google.com; s=arc-20160816; b=wnnyvY7hlN3QOj9IcBMPYfmVdbB94ZRDVqXpEkWjJzopy4SisviB36cWs73QZRBs2U DWTAASG6vRxuvOzepRWC6zvyENCCJxSIymTggw6fhfRwvRnIXc6it6xxFlZkL+oAQ9xj 7bbfNbbnNtvGsJ3uvGf7hPDNBBgM8VmM44LF36216xBpi4FJKLnOVE27LN0Bw+/DGLL5 xUORUR8bvsR+Ex6XJCUy6W+GfaiIlUmZF4Pow4X07PlDxo2kg3ByYv407o7uzryn3TmB xCTohJdyJjM5lQW0pKfuYjaqGOcFBQkolMpFGScLLqxf48Ie12rZ9uFft98AgciEpoXG u06g== 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=/LnG+vviZFEmSplserK7lU8lrYy0Xhh7tv0XqJyR/Mo=; b=FdkgaPvATgPdgF/aHEwuMZWlFlCPQa7jHSnCA7M5GMRtIa1pP2wG3EWS7j0mTem0GJ r2MUlf/8Kpct0UvzAOpWdiGmrErOGUgSROVOZrvxEhim7mSMIgEJ8QjDt1gUOK/YvRF0 qHcNQEG91u54miAaMQI0jbs12FP72eJ6G+ReW6lL81nE59VdWr5jwrOokMX4lSuIXjho jOgJE/xMGP41Dg7XCqMOI8YQjjTG5pYhwNlxqf0OXQUbPldgF5InyKKnK+WFt5HF2Sy+ TdBXguylHbEm04pysOMUhjsgAqYEfMBSSTRAh2W0xrzZXPXQr9ORe+9RmuEhZFL1u6+s nE7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.com header.s=susede1 header.b=Pm4dbuFy; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o15-20020a17090a678f00b00237155f2303si9487416pjj.136.2023.03.06.08.57.44; Mon, 06 Mar 2023 08:57:57 -0800 (PST) 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=@suse.com header.s=susede1 header.b=Pm4dbuFy; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=suse.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229832AbjCFQh2 (ORCPT + 99 others); Mon, 6 Mar 2023 11:37:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48374 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230143AbjCFQgi (ORCPT ); Mon, 6 Mar 2023 11:36:38 -0500 Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 900D338B63 for ; Mon, 6 Mar 2023 08:36:12 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id E23B821E68; Mon, 6 Mar 2023 16:35:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1678120535; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/LnG+vviZFEmSplserK7lU8lrYy0Xhh7tv0XqJyR/Mo=; b=Pm4dbuFymyP28hC2S3dLLk5s9QEZCS4aQqKi80Fq1IBNB73YMwhWSuGo+/wrxAErADN/cN Kd+hgwoDljLDUWPLLH/Jng0pv8Fb9RyuangVMAuXAj+66tjANMk/zn/Fp/AjDR8u37KI0r +wVBlz4hM0ZY7RoAeJWXjixSGWZkKOo= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 9544F13A66; Mon, 6 Mar 2023 16:35:35 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id 7o0UI1cWBmS/UwAAMHmgww (envelope-from ); Mon, 06 Mar 2023 16:35:35 +0000 From: Juergen Gross To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: Juergen Gross , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , Linus Torvalds Subject: [PATCH v4 12/12] x86/mm: only check uniform after calling mtrr_type_lookup() Date: Mon, 6 Mar 2023 17:34:25 +0100 Message-Id: <20230306163425.8324-13-jgross@suse.com> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230306163425.8324-1-jgross@suse.com> References: <20230306163425.8324-1-jgross@suse.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759638326108756217?= X-GMAIL-MSGID: =?utf-8?q?1759638326108756217?= Today pud_set_huge() and pmd_set_huge() test for the MTRR type to be WB or INVALID after calling mtrr_type_lookup(). Those tests can be dropped, as the only reason to not use a large mapping would be uniform being 0. Any MTRR type can be accepted as long as it applies to the whole memory range covered by the mapping, as the alternative would only be to map the same region with smaller pages instead, using the same PAT type as for the large mapping. Suggested-by: Linus Torvalds Signed-off-by: Juergen Gross --- V3: - adapt comment for pud_set_huge() --- arch/x86/mm/pgtable.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index e4f499eb0f29..15a8009a4480 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -702,14 +702,8 @@ void p4d_clear_huge(p4d_t *p4d) * pud_set_huge - setup kernel PUD mapping * * MTRRs can override PAT memory types with 4KiB granularity. Therefore, this - * function sets up a huge page only if any of the following conditions are met: - * - * - MTRRs are disabled, or - * - * - MTRRs are enabled and the range is completely covered by a single MTRR, or - * - * - MTRRs are enabled and the corresponding MTRR memory type is WB, which - * has no effect on the requested PAT memory type. + * function sets up a huge page only if the complete range has the same MTRR + * caching mode. * * Callers should try to decrease page size (1GB -> 2MB -> 4K) if the bigger * page mapping attempt fails. @@ -718,11 +712,10 @@ void p4d_clear_huge(p4d_t *p4d) */ int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot) { - u8 mtrr, uniform; + u8 uniform; - mtrr = mtrr_type_lookup(addr, addr + PUD_SIZE, &uniform); - if ((mtrr != MTRR_TYPE_INVALID) && (!uniform) && - (mtrr != MTRR_TYPE_WRBACK)) + mtrr_type_lookup(addr, addr + PUD_SIZE, &uniform); + if (!uniform) return 0; /* Bail out if we are we on a populated non-leaf entry: */ @@ -745,11 +738,10 @@ int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot) */ int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot) { - u8 mtrr, uniform; + u8 uniform; - mtrr = mtrr_type_lookup(addr, addr + PMD_SIZE, &uniform); - if ((mtrr != MTRR_TYPE_INVALID) && (!uniform) && - (mtrr != MTRR_TYPE_WRBACK)) { + mtrr_type_lookup(addr, addr + PMD_SIZE, &uniform); + if (!uniform) { pr_warn_once("%s: Cannot satisfy [mem %#010llx-%#010llx] with a huge-page mapping due to MTRR override.\n", __func__, addr, addr + PMD_SIZE); return 0;