From patchwork Fri Feb 21 14:30:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13985605 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id BD5F0C021B3 for ; Fri, 21 Feb 2025 14:31:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4A1CD280010; Fri, 21 Feb 2025 09:31:10 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 4275628000A; Fri, 21 Feb 2025 09:31:10 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2A17828000D; Fri, 21 Feb 2025 09:31:10 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 01106280004 for ; Fri, 21 Feb 2025 09:31:09 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id AE1B91C8096 for ; Fri, 21 Feb 2025 14:31:09 +0000 (UTC) X-FDA: 83144189058.30.E03DD31 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf18.hostedemail.com (Postfix) with ESMTP id A822C1C000C for ; Fri, 21 Feb 2025 14:31:07 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=ZnB1aSDQ; spf=none (imf18.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740148268; a=rsa-sha256; cv=none; b=KocvWX+ch1XJvKJ56HuBLNM3vDHZgh/uo16jRYUnNA74FDkMQQ+7/+o5vMJdfc5R5/CajH NWG5kLvmYlUTKYPraia6anYhq6WXP9+Fwvqz9eLwFEpbY595voIXHGdqr5Cwdm5Llg322L 9xdu73z/+r4JaI9nhiO40OPOmAvrr30= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=ZnB1aSDQ; spf=none (imf18.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740148268; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=XKMSbfhgd9tyFb22pi+cXpiXpj+uKvA7iB0i1tzsnfw=; b=SlWsQu6WuWCD/6sGTcNym4GJ6uKwG2xLsL1/aP35RbD7dwtTXNGxLpc9wzvTnRVjUWyQIq 4wy07UoUUqrBRxgrkBIpynHohXRhPtmQkPZ8/+ZXMrd58cm5wwyIdKggPtHaRKQU27PzyI /scJgRojEknRHEtUWteWk+MD96iM0NA= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=XKMSbfhgd9tyFb22pi+cXpiXpj+uKvA7iB0i1tzsnfw=; b=ZnB1aSDQ7lz9CwkFOiiDt/UFUh R0pN0AEcQbpca6QBXLKdttBqBpfCfyajGkqEuSClG51pfLqWl1mPDDkPytPV7eyU/TCZFdKO97Lc6 Ia3INzlHnxepnsXLkACLa13yE/7rwD8MbUezUpM4+HpAMY+mq/TN9pF0UPRNDM51VZ9jtMYjFn44U ciG5G+70OMqSc1WgYOLhvgCdXEMk2Nj7IZwK4D6LiIz5tURNX7eTgsR5zjhEsjwUA26OBJKePLj93 u84M0JUdUneIcVK6wwDtJTUUIvIomybhaIejLQNKpJc9rbdhpTm/g7Qlovtzdw1rZxNREtmfv8FCr IFRXJryg==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tlU3W-0000000DzWJ-1dVm; Fri, 21 Feb 2025 14:31:06 +0000 From: "Matthew Wilcox (Oracle)" To: linux-mm@kvack.org Cc: "Matthew Wilcox (Oracle)" , linux-arch@vger.kernel.org Subject: [PATCH 1/4] hugetlb: Simplify make_huge_pte() Date: Fri, 21 Feb 2025 14:30:58 +0000 Message-ID: <20250221143104.3334444-2-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250221143104.3334444-1-willy@infradead.org> References: <20250221143104.3334444-1-willy@infradead.org> MIME-Version: 1.0 X-Stat-Signature: 84u5mnp1hpyiqoatg7thti84xrsi3puj X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: A822C1C000C X-Rspam-User: X-HE-Tag: 1740148267-90507 X-HE-Meta: U2FsdGVkX18vNnhPcR9cm8OJ3bxuav6Hcw5jG7q6jLyiDYcRmQnnB0Q1WfPLim1nypdQfkiyJvmQDNh3X/GUAocetnXpn1df3s6n/TVwmRi7Ud+ikd6hWZgTdno/qv6wJaXr8I2fb4Ebe+QenBoXjYsL0f4gpSxk4BeYmhjJn9xQFoQgeDAT2loHkvhWyNluGt5V9FwDGfKpopUlUEBsCdBUB4hmmjStS8qymaCSshYTpLE9CuXqL9khD9+Wxvr9Typllr6gAfRji8u+ILaPK06Fj9vMsZB0NDmHruRUZGziYwrzpMMwHyDKXpqCBQbQbUWlcRs4xWNdoW8NRfwqbG1114LrNkqjq4xMU37g2WDyckbtOaRGSz1XBCetCGuQBsZdXllX9UUIFzPm0hgWJxtMstPrNhp0Hu0NJZWo3bKl2TRCz8VoFURIPrES3rqIhdvcrMGBgheNYdrpcBh9x8KH6FRxt4nMi2Mv/4OzoFSQ3+Nj6HKMqdFKwhFQcA8XyTG9CFt9Zp+wcW0bLHydRFnAnQ/Ym1OIGbf+c6La6UoIFxXOnl8InXBiZPCN4sq/3mCwiFArlSnq+KboMBO3xj8t8F331K+wKeSh6Z8RnqlDdahPM/Z4YMoBfKU6oojj2coEgXeHNQo0CDbvSozdbiMeXeH1TlpElCZKCys3HyVm659fLMKVQrTtaZ+kL5qFIXy1L5CNwV3PZokJV3Utq2wR6LLgYeIfElFvMRKtChmS5eowCB6/jMt/ZJ1qxfrxJW7T94SofHIdeDTQ7i6vDXXu0auaCGjq97gkBULKn1onuzkPH9uzT3/p8Vt4ZvjY5fFNfiOs6uUYOI4EV5/pZS3108Oi+k5F0N9xpneWhx99hMj7fkM9YwOEl9VW0H6dBpvpEJO3qPz4UJKn2YytBxlR8MB95MoPwArZmYzosm/WUzbxHcZEPGp0D3IjXNz2BnqgtvLoc7YUudIFqKa OFpTut+y dqKmh42NyJnOp1eSD9hVteiQ1dlK8tgDwHs3+Z47tzgJyyjy8YPJb2Kw+pr/Wv4LDSe+jXBLYdGYOmIt6xQB7aSUt+p7z6/rhgi3Ue/f2ZYxGE3uNJsECjEDtlCFf9lea0bACwKfSojSHZjRcJ4/kn48xAYtKfLEnp0kNFCXPngxl/yN7y3nvtSr+W/vfb4gLCEyyOFD2UkB2drWgLoDoU0MsDIjIMxk2a+09eRbV4LJgxAWwEVXspslnz5YXfzAEWHMLuEnkbEvYY/hFtWrxgtEatSQ8fqAxYM/l X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: mk_huge_pte() is a bad API. Despite its name, it creates a normal PTE which is later transformed into a huge PTE by arch_make_huge_pte(). So replace the page argument with a folio argument and call folio_mk_pte() instead. Then, because we now know this is a regular PTE rather than a huge one, use pte_mkdirty() instead of huge_pte_mkdirty() (and similar functions). Signed-off-by: Matthew Wilcox (Oracle) --- mm/hugetlb.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 163190e89ea1..1ea42dd01012 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -5162,18 +5162,16 @@ const struct vm_operations_struct hugetlb_vm_ops = { .pagesize = hugetlb_vm_op_pagesize, }; -static pte_t make_huge_pte(struct vm_area_struct *vma, struct page *page, +static pte_t make_huge_pte(struct vm_area_struct *vma, struct folio *folio, bool try_mkwrite) { - pte_t entry; + pte_t entry = folio_mk_pte(folio, vma->vm_page_prot); unsigned int shift = huge_page_shift(hstate_vma(vma)); if (try_mkwrite && (vma->vm_flags & VM_WRITE)) { - entry = huge_pte_mkwrite(huge_pte_mkdirty(mk_huge_pte(page, - vma->vm_page_prot))); + entry = pte_mkwrite_novma(pte_mkdirty(entry)); } else { - entry = huge_pte_wrprotect(mk_huge_pte(page, - vma->vm_page_prot)); + entry = pte_wrprotect(entry); } entry = pte_mkyoung(entry); entry = arch_make_huge_pte(entry, shift, vma->vm_flags); @@ -5228,7 +5226,7 @@ static void hugetlb_install_folio(struct vm_area_struct *vma, pte_t *ptep, unsigned long addr, struct folio *new_folio, pte_t old, unsigned long sz) { - pte_t newpte = make_huge_pte(vma, &new_folio->page, true); + pte_t newpte = make_huge_pte(vma, new_folio, true); __folio_mark_uptodate(new_folio); hugetlb_add_new_anon_rmap(new_folio, vma, addr); @@ -5978,7 +5976,7 @@ static vm_fault_t hugetlb_wp(struct folio *pagecache_folio, spin_lock(vmf->ptl); vmf->pte = hugetlb_walk(vma, vmf->address, huge_page_size(h)); if (likely(vmf->pte && pte_same(huge_ptep_get(mm, vmf->address, vmf->pte), pte))) { - pte_t newpte = make_huge_pte(vma, &new_folio->page, !unshare); + pte_t newpte = make_huge_pte(vma, new_folio, !unshare); /* Break COW or unshare */ huge_ptep_clear_flush(vma, vmf->address, vmf->pte); @@ -6258,7 +6256,7 @@ static vm_fault_t hugetlb_no_page(struct address_space *mapping, hugetlb_add_new_anon_rmap(folio, vma, vmf->address); else hugetlb_add_file_rmap(folio); - new_pte = make_huge_pte(vma, &folio->page, vma->vm_flags & VM_SHARED); + new_pte = make_huge_pte(vma, folio, vma->vm_flags & VM_SHARED); /* * If this pte was previously wr-protected, keep it wr-protected even * if populated. @@ -6743,7 +6741,7 @@ int hugetlb_mfill_atomic_pte(pte_t *dst_pte, * For either: (1) CONTINUE on a non-shared VMA, or (2) UFFDIO_COPY * with wp flag set, don't set pte write bit. */ - _dst_pte = make_huge_pte(dst_vma, &folio->page, + _dst_pte = make_huge_pte(dst_vma, folio, !wp_enabled && !(is_continue && !vm_shared)); /* * Always mark UFFDIO_COPY page dirty; note that this may not be