From mboxrd@z Thu Jan 1 00:00:00 1970 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 046A5C71157 for ; Tue, 17 Jun 2025 15:44:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B635F6B009E; Tue, 17 Jun 2025 11:44:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B13E56B009F; Tue, 17 Jun 2025 11:44:02 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9B6BC6B00A0; Tue, 17 Jun 2025 11:44:02 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 817426B009E for ; Tue, 17 Jun 2025 11:44:02 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 5EFFD100AF8 for ; Tue, 17 Jun 2025 15:44:02 +0000 (UTC) X-FDA: 83565313524.06.AD9C568 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf13.hostedemail.com (Postfix) with ESMTP id 255C62000B for ; Tue, 17 Jun 2025 15:43:59 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=ge+u05aE; spf=pass (imf13.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750175040; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=5t+2oURhuR4fay2j7MSZreHj5RBEUrxIhgwh9uqVL44=; b=TCMIRkTT91kriltqQ/HqBxmG8vW3cjpdMOzfoD/TVSYG931lQg+nPO+smlPyxdja24JEzp PaswTh9e9G6tEqnZMa1AeqEbBFwsCR2BO2dg3/YvjvWgYuoBHmdfcty8hQ36wiqRtmYiCL npUiBJz/C+1dfA5d9VRPH/02aYo1ei0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750175040; a=rsa-sha256; cv=none; b=1i9nJu1YPpKFeMxoRoWBMK/RxIT9jPdVsHJIw6PG/DTJyEEHJ0x8US3kcK9vm6AwJZHd5a 6sZoH0+c8HMIkBjB+JW+5KEsthtD7S9mA8pnkx7ayIvLLNwozj4LF7lfZFrUBVj6y8p7QV aaOMgyBe9YoOCeZoUmjUMKlVgPJMyd8= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=ge+u05aE; spf=pass (imf13.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1750175039; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5t+2oURhuR4fay2j7MSZreHj5RBEUrxIhgwh9uqVL44=; b=ge+u05aEKnt/3Q3DT2dh4uwx2D6lWN+qi9wL6LxVCrqdzBFSekQ7LqMwyK+y7OS35ba/As ludh1BCopkSkZyp/yiq+LZpx664YN4X4C9DSz2xkYT1533l7lv9sc+G/ZpdNzus3p4AM0s H566XlCSdaFb+dEzbpiN/+8HRe0JJE0= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-271-dsvWnwtZPq2iB59bHF8PSg-1; Tue, 17 Jun 2025 11:43:58 -0400 X-MC-Unique: dsvWnwtZPq2iB59bHF8PSg-1 X-Mimecast-MFC-AGG-ID: dsvWnwtZPq2iB59bHF8PSg_1750175037 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-453080e4741so48148085e9.0 for ; Tue, 17 Jun 2025 08:43:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750175037; x=1750779837; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5t+2oURhuR4fay2j7MSZreHj5RBEUrxIhgwh9uqVL44=; b=hhVaC9gp7DK/JAn9oR7wRDov9L1pW9uZI3edL7SE+7JopshYsMtitBXz/B+XOiU1uj 7lGJpu3lTK28wzExbT8ixOqDOYAzdGYLY2TklZPwWsiMfFJkC7lz8zraGmTKB5YXN1ez mNOUcpY0jSbhGoqMsWDRIZ6Bxjt5aGWqUyFB85MOpICzQ3sA4ON9IV4unJcTMv55o88x zexVQC2O0sxFuvthEYZEU4NMtljL2q6E3eNaG0lUEp2w8MLMChMXeEPUn3ANj83ZjLGP YfsrJeB35qPOMG19AXpg6pqzfgg9bG+vysQCe/LcpIchycrfLCn+hpMjt98iPFWyD7vX YpMw== X-Forwarded-Encrypted: i=1; AJvYcCXDWULflpxCZm8/Lsl+aY1G26ZAvjTVy4dTcneuc4qToNXUyygdfI3fNeJCF6+pWcbroqaiOSOIeQ==@kvack.org X-Gm-Message-State: AOJu0Yz5cuJatMucGA7SjOaOM1nLfCYVgad5sMehzmcAEwBEV2Stuld3 pQVkYoHiIxoFr1Zprj94ykeZTU9Kcl3fBxJT+5jz+OzZ6lowFya2ePTW55o+XUpbYLu3dv6H2b4 bxrNfILRSqeQNeTeo+IHre2zwpxv0NtLDDMv5tPdXQn0f8dk4WLo5 X-Gm-Gg: ASbGncvgIhRMjEUkm7y2kgtMsqx1dOxdK3gs8G0A/r4wdaND/kX5G0Hy3REi/bxm8kA RAowgAaYdZ9OB4TJ1ABT8/wyAm3A7Jp3/rJRgEM7rpQ29ZCSC1zODohBMgIfc3DY8kkyIzV5KCl czTeOvxkdlWpA28oI/38YI/aNZdiavYeZK2OaWaMXGAgN63HATQfqyzypVydavCe26hPv+vqTvr 8eVhIhX4/55LGBCdF6usZ6lL/TUevqXub3TWfmcZteMz5H9YFmyiWy1tOZ+coixlakRJW0Yn4dO j6jtGzYJaA/HjFqaS8UTRkK4ffMn36mBlB9IXQW5CzHnBx2fJw== X-Received: by 2002:a05:600c:8509:b0:441:b19c:96fe with SMTP id 5b1f17b1804b1-4533caa3d54mr172176535e9.10.1750175037027; Tue, 17 Jun 2025 08:43:57 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEKe6joB8XUUUHr9L6o0Yf1elMxRlblx8Zso9tX4QaAEAaXQGULg7L379TE9a6MvFpj5CfDTQ== X-Received: by 2002:a05:600c:8509:b0:441:b19c:96fe with SMTP id 5b1f17b1804b1-4533caa3d54mr172175925e9.10.1750175036588; Tue, 17 Jun 2025 08:43:56 -0700 (PDT) Received: from localhost (p57a1a266.dip0.t-ipconnect.de. [87.161.162.102]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-4534226aa44sm108387495e9.13.2025.06.17.08.43.55 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 17 Jun 2025 08:43:56 -0700 (PDT) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, nvdimm@lists.linux.dev, David Hildenbrand , Andrew Morton , Juergen Gross , Stefano Stabellini , Oleksandr Tyshchenko , Dan Williams , Alistair Popple , Matthew Wilcox , Jan Kara , Alexander Viro , Christian Brauner , Zi Yan , Baolin Wang , Lorenzo Stoakes , "Liam R. Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato Subject: [PATCH RFC 04/14] mm/huge_memory: move more common code into insert_pmd() Date: Tue, 17 Jun 2025 17:43:35 +0200 Message-ID: <20250617154345.2494405-5-david@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250617154345.2494405-1-david@redhat.com> References: <20250617154345.2494405-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: WFtc6DMOEbRc91JXnxBMq1TvhfJjszwqp3VLd2wEeUk_1750175037 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 255C62000B X-Stat-Signature: 9ksa54gosbx7187ywsg6n3i9qsxy1pnf X-Rspam-User: X-HE-Tag: 1750175039-535641 X-HE-Meta: U2FsdGVkX1+7+/j2Y4CEMLdxyfP3PhOd2CEafFgdGuDqKgmQ8BYGdU0EB/DktFg3tF/ID7MHgZZUVZNRfnXLkW1i5idgb8yJ6RuYvayc/uD+/eslGut3aSYIUdIwqiPnM3aPUBCd0qryUD9FgQHYluAjs2AsozeFeC0UTEs4ZCWGPrvpJPT4fhQ7qgQHm26060A8WEyUT8crF1xQrQ6XNKCekvIfPW0Q/pbhoGQ85Mp8jwUIg7iGTeuQLEIgRA8xe/Iw1r1h1ROsodBuUGzF5Auv/8l2cd3Wp3dpSZBuaqL/iTSuJ0vBdBsebcg64mivtXgcweZT/6a2BdUvTczdUqWOs9X0MSLPk+wJ6ESRjQmEy5nOqe/22m4S7ABBJw+ir3V5YMc/gsHmDDAWDnTmY1yziO+EM6eeZs1yucJTmDk7cJtd3a4T2c919JIbKEXQm1hNeg2V4oO06x7mMySExE7Fg3j9FImAKWX7hGlZBzLHe2T3ccItiYXwCR6R/eUtlHBvCmmv4u6oyA9b6mHMgS6LbqU8FjerraPd/6wrIHOUZsldFWM8uvW4xmGCwz+T5Izg6EojBIgU5em8iRKlCOfbMbHjR+quR7FHLT2XiyMkdOVi3Wicr74uEeKurtybjjiHt3MQ/60KWIXRX8S2BVX/pBVO9depJ9gEkhiaJ0sB5iCLNFaFeQavGT7a8bo2BC3yOctJfpyvJMbV3N7zKBUhD3Wf10hzEiKC0IbFb3unjnOQEgDTSPPtGEjBFn3r4H8w60iDvnzZUTY8LJBrdsURlxnkC+qwLIXVxRaqe6HkCGPotB+yP3HDaJzvhIaLot/T7DCLROpHEQ5uH/ifsOJz62sFjcitBN/yL42xBcNjzCH8M9JV23JapicsvtXAe3kTDm/Q92vq8rpFRUL4odFGvMQMRS1+4vnZkHRNIIlHXI0J41IxcZm+2hH/ri04K1WYVGPKpbfrE4ssetS m0Qii4ho 9tTN2dRsk8qR5RgVaKW6yySq9xM7NnemXAyFUrTbpDuVRQvoEE4lsdfnLPhVEdxdKYnlIgbg9D2xGqNkTcnHF0pCbX8bqCKQMbasWon7Z/Jj5M7kD16Cn2i3UXiTdKnma20WkKmkbxmqyjCTFlSCq2d9q/dq2m8XjdPmS+iNQtxHo8WgiEKKhn9yz9WLdtj9AXhjG+A7QVsu8jdZxJUnia8+YUwz892CYvSv4rXQMQkSNeiCU3ob1oYgB4tl+/iPlaUey8z67VNtDJjOqk9N+PQ7tGLvWtv4uUa99ftuwHYvfuSXzKSUA71ih0sOs4qu8srtHtQhz1thPYzIagJhuENO6UrjZuR53l2Nini/TtosVmwCswkXooIMmiWhIXzh/UUBJ8MwPHxyoOmQDOF8CZqSLfJuTFrYdq1VQFqdB73YjZzaQ7IC69muD0qywJVEcCzELFfjxWEZIdMVM22J1nP2Suexmy5ZHcfpvHoaTWbsGusNVGI9giUtx5MRhobQuitv36y26U21m6r28eGe67xaucOKtGLQouy6ophh+QKcBLRRh5Iw5teMr/A== 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: Let's clean it all further up. Signed-off-by: David Hildenbrand --- mm/huge_memory.c | 72 ++++++++++++++++-------------------------------- 1 file changed, 24 insertions(+), 48 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index e52360df87d15..a85e0cd455109 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -1379,15 +1379,25 @@ struct folio_or_pfn { bool is_folio; }; -static int insert_pmd(struct vm_area_struct *vma, unsigned long addr, +static vm_fault_t insert_pmd(struct vm_area_struct *vma, unsigned long addr, pmd_t *pmd, struct folio_or_pfn fop, pgprot_t prot, - bool write, pgtable_t pgtable) + bool write) { struct mm_struct *mm = vma->vm_mm; + pgtable_t pgtable = NULL; + spinlock_t *ptl; pmd_t entry; - lockdep_assert_held(pmd_lockptr(mm, pmd)); + if (addr < vma->vm_start || addr >= vma->vm_end) + return VM_FAULT_SIGBUS; + if (arch_needs_pgtable_deposit()) { + pgtable = pte_alloc_one(vma->vm_mm); + if (!pgtable) + return VM_FAULT_OOM; + } + + ptl = pmd_lock(mm, pmd); if (!pmd_none(*pmd)) { const unsigned long pfn = fop.is_folio ? folio_pfn(fop.folio) : fop.pfn; @@ -1395,15 +1405,14 @@ static int insert_pmd(struct vm_area_struct *vma, unsigned long addr, if (write && pmd_present(*pmd)) { if (pmd_pfn(*pmd) != pfn) { WARN_ON_ONCE(!is_huge_zero_pmd(*pmd)); - return -EEXIST; + goto out_unlock; } entry = pmd_mkyoung(*pmd); entry = maybe_pmd_mkwrite(pmd_mkdirty(entry), vma); if (pmdp_set_access_flags(vma, addr, pmd, entry, 1)) update_mmu_cache_pmd(vma, addr, pmd); } - - return -EEXIST; + goto out_unlock; } if (fop.is_folio) { @@ -1424,11 +1433,17 @@ static int insert_pmd(struct vm_area_struct *vma, unsigned long addr, if (pgtable) { pgtable_trans_huge_deposit(mm, pmd, pgtable); mm_inc_nr_ptes(mm); + pgtable = NULL; } set_pmd_at(mm, addr, pmd, entry); update_mmu_cache_pmd(vma, addr, pmd); - return 0; + +out_unlock: + spin_unlock(ptl); + if (pgtable) + pte_free(mm, pgtable); + return VM_FAULT_NOPAGE; } /** @@ -1450,9 +1465,6 @@ vm_fault_t vmf_insert_pfn_pmd(struct vm_fault *vmf, unsigned long pfn, struct folio_or_pfn fop = { .pfn = pfn, }; - pgtable_t pgtable = NULL; - spinlock_t *ptl; - int error; /* * If we had pmd_special, we could avoid all these restrictions, @@ -1464,25 +1476,9 @@ vm_fault_t vmf_insert_pfn_pmd(struct vm_fault *vmf, unsigned long pfn, (VM_PFNMAP|VM_MIXEDMAP)); BUG_ON((vma->vm_flags & VM_PFNMAP) && is_cow_mapping(vma->vm_flags)); - if (addr < vma->vm_start || addr >= vma->vm_end) - return VM_FAULT_SIGBUS; - - if (arch_needs_pgtable_deposit()) { - pgtable = pte_alloc_one(vma->vm_mm); - if (!pgtable) - return VM_FAULT_OOM; - } - pfnmap_setup_cachemode_pfn(pfn, &pgprot); - ptl = pmd_lock(vma->vm_mm, vmf->pmd); - error = insert_pmd(vma, addr, vmf->pmd, fop, pgprot, write, - pgtable); - spin_unlock(ptl); - if (error && pgtable) - pte_free(vma->vm_mm, pgtable); - - return VM_FAULT_NOPAGE; + return insert_pmd(vma, addr, vmf->pmd, fop, pgprot, write); } EXPORT_SYMBOL_GPL(vmf_insert_pfn_pmd); @@ -1491,35 +1487,15 @@ vm_fault_t vmf_insert_folio_pmd(struct vm_fault *vmf, struct folio *folio, { struct vm_area_struct *vma = vmf->vma; unsigned long addr = vmf->address & PMD_MASK; - struct mm_struct *mm = vma->vm_mm; struct folio_or_pfn fop = { .folio = folio, .is_folio = true, }; - spinlock_t *ptl; - pgtable_t pgtable = NULL; - int error; - - if (addr < vma->vm_start || addr >= vma->vm_end) - return VM_FAULT_SIGBUS; if (WARN_ON_ONCE(folio_order(folio) != PMD_ORDER)) return VM_FAULT_SIGBUS; - if (arch_needs_pgtable_deposit()) { - pgtable = pte_alloc_one(vma->vm_mm); - if (!pgtable) - return VM_FAULT_OOM; - } - - ptl = pmd_lock(mm, vmf->pmd); - error = insert_pmd(vma, addr, vmf->pmd, fop, vma->vm_page_prot, - write, pgtable); - spin_unlock(ptl); - if (error && pgtable) - pte_free(mm, pgtable); - - return VM_FAULT_NOPAGE; + return insert_pmd(vma, addr, vmf->pmd, fop, vma->vm_page_prot, write); } EXPORT_SYMBOL_GPL(vmf_insert_folio_pmd); -- 2.49.0