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 A999FE77188 for ; Fri, 10 Jan 2025 06:38:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0D1808D0002; Fri, 10 Jan 2025 01:38:54 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 082078D0001; Fri, 10 Jan 2025 01:38:54 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E8B058D0002; Fri, 10 Jan 2025 01:38:53 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id CC8B68D0001 for ; Fri, 10 Jan 2025 01:38:53 -0500 (EST) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 70EAB1A0839 for ; Fri, 10 Jan 2025 06:38:53 +0000 (UTC) X-FDA: 82990589346.05.26A8277 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf20.hostedemail.com (Postfix) with ESMTP id B18401C0015 for ; Fri, 10 Jan 2025 06:38:51 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=none; dmarc=temperror reason="SPF/DKIM temp error" header.from=arm.com (policy=temperror); spf=temperror (imf20.hostedemail.com: error in processing during lookup of dev.jain@arm.com: DNS error) smtp.mailfrom=dev.jain@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1736491131; 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; bh=JyGh2yQKNpOPelonw9kD3KzVKEdVLVFm74BQEqclI+0=; b=P1uOT82lFHVY/RPtoh83ZJsalI04TwC9Y3zMWKKeNALzmC+IzxFUf6DiBhf8fqiMlqu+cq 1O/WAuiRv1IJbhFEHy4d+245yyqJGhwjMbLwIETEyC4dMA2Qex8iQ2CgocxYy69awqg1nT cuylzyg+0Ub3tHwqDjtix1mEwVkSJos= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=none; dmarc=temperror reason="SPF/DKIM temp error" header.from=arm.com (policy=temperror); spf=temperror (imf20.hostedemail.com: error in processing during lookup of dev.jain@arm.com: DNS error) smtp.mailfrom=dev.jain@arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1736491131; a=rsa-sha256; cv=none; b=pL1idl4Hq/7yzGSiLG5oTx9N/DAaWLsaVRJ8guHZApkU06R0OehpzFpSmV+49F4gMXAcKA ytYHvUAN6eRGqd9GPNsepAXMi/Q6ogTbTt9eEJdA5lxNIiW0YQOKQyYMFUN2p9GqZcbLBx Awn27j+EIb7NWb2nahotnKXASEGHbbI= Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3C4561477; Thu, 9 Jan 2025 22:39:19 -0800 (PST) Received: from [10.162.42.21] (K4MQJ0H1H2.blr.arm.com [10.162.42.21]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 16B353F673; Thu, 9 Jan 2025 22:38:38 -0800 (PST) Message-ID: <042059ee-e0c0-4182-bafd-851655c1ad4f@arm.com> Date: Fri, 10 Jan 2025 12:08:35 +0530 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC 07/11] khugepaged: generalize __collapse_huge_page_* for mTHP support To: Nico Pache , linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: ryan.roberts@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com, cl@gentwo.org, vbabka@suse.cz, mhocko@suse.com, apopple@nvidia.com, dave.hansen@linux.intel.com, will@kernel.org, baohua@kernel.org, jack@suse.cz, srivatsa@csail.mit.edu, haowenchao22@gmail.com, hughd@google.com, aneesh.kumar@kernel.org, yang@os.amperecomputing.com, peterx@redhat.com, ioworker0@gmail.com, wangkefeng.wang@huawei.com, ziy@nvidia.com, jglisse@google.com, surenb@google.com, vishal.moola@gmail.com, zokeefe@google.com, zhengqi.arch@bytedance.com, jhubbard@nvidia.com, 21cnbao@gmail.com, willy@infradead.org, kirill.shutemov@linux.intel.com, david@redhat.com, aarcange@redhat.com, raquini@redhat.com, sunnanyong@huawei.com, usamaarif642@gmail.com, audra@redhat.com, akpm@linux-foundation.org References: <20250108233128.14484-1-npache@redhat.com> <20250108233128.14484-8-npache@redhat.com> Content-Language: en-US From: Dev Jain In-Reply-To: <20250108233128.14484-8-npache@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: B18401C0015 X-Stat-Signature: rr6757m3izf99gqhge8ag1ubbbpbmaje X-Rspam-User: X-Rspamd-Server: rspam11 X-HE-Tag: 1736491131-881235 X-HE-Meta: U2FsdGVkX19cbBpl/TLPWfXmAcYd/fb6viZnpb22RVv5OyOWJXH0JhMGNWYAlPxZpwf26uNSd4gVrRWd8f3/39x8wy4pm68Z20OfCY05rcZBrxmOxQpER+3WIXjBWGa5pYGLR2eBALUJuiF1G8EVRSq++D0bc08acxSYQGGs6oKtZdorAsOmD/3OJVF/MzJ6m5CP94+mAHOI6aegUp1lv3NnrM+7IosvH4WQgEieNiiSvG4wmB3kwwxT4EuCcwzm62BhvD7RLXl0X1MQv38rmj6nU9rB+rIfP/ai4FtI0hrCfEDdszgu3Gk029cRJstv6mvm2+w4u6nFZmvTGK+PaqoV7EbD7nqZ1d2EybIsFZdl9SNV/TJUEVIFClOXB+gisulfCOmEYiiIBV1TgUlyGhH/Bhlrmw77qOQkwgNJB68Qqo6S3T0eORnnYiZarqNMCgCZ3Kgjf+cQfpTdrc6Yas0GEhu8N5XdcyW95/c+wbriyIhosrWH6wVvw2UVt2LAq/+3U3C4TxWeB5ScWHrzmh7qtbCt6PCGOlHgfucIXHljncJE/A+Cvx3wkjSA8MRqxTL22ivDjLApvAQkjXFhbdgtGcp8hLZxIlIImGVXVOFYpxEcIXn6AVqlrO9QTOYuk10MAzI8c47BwXiT+giTnYX9FPfez/dy4Do9I8fhWoJ3tbRNqEsiJlrs/5Sr+kiu4xzm+kSgJOsm/rpR8Lt3223U1+erw1Wgks4pVxDJY461vpo5fuXElbsmz+nu+mKd6lGq4EhhQRU4pg5DB7eH4TnwwCbKj/ZET9Hc6Pkukbzbz9RM+JUYPZ9TGrvC8SUytcT+TfFuTB8ouIAog1ckRq+dTbtC7bUNCttVGKrcR6S03a3OSBznFkS66v7yCk1ajgPISJGfigl5EchTsLfW4CDV8BgJfAy/6LNqSpB0Uw0VVLbzghUE5QS7HFt6nHzQFLg8bZcM7Nz829vkPzB yJVyDVVi x4O/7iWALIv8n6sA3agWH3HmGJAGiJnMX1EmuWO9QK4VKTlb3nFk9NMe9QB8dI7JJNtz8hKj0Uf7XddS2AMo7BYZg1LC41AOnoH08G+9J1R/6PXqRpbRI3FRhSI6X1+MQRbU8jdOFwKMD2NURlg+aQlTP629+5GjAVLFAchTZw5M+giIgpt6ulPTanDjD3yQV37D+mBO0TKkF9MwQs1MCHj8CMu3VRz718KP03OqPmQr0TaYl6mfWWuTN7kDsiloVTcKzVMY+oetCK8GHWEuqlDg4RGbYzkfEQTZOFr33slTvGO83SVBQEPsDIA== 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: On 09/01/25 5:01 am, Nico Pache wrote: > generalize the order of the __collapse_huge_page_* functions > to support future mTHP collapse. > > No functional changes in this patch. > > Signed-off-by: Nico Pache > --- > mm/khugepaged.c | 36 +++++++++++++++++++----------------- > 1 file changed, 19 insertions(+), 17 deletions(-) > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > index 6daf3a943a1a..9eb161b04ee4 100644 > --- a/mm/khugepaged.c > +++ b/mm/khugepaged.c > @@ -565,7 +565,8 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, > unsigned long address, > pte_t *pte, > struct collapse_control *cc, > - struct list_head *compound_pagelist) > + struct list_head *compound_pagelist, > + u8 order) > { > struct page *page = NULL; > struct folio *folio = NULL; > @@ -573,7 +574,7 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, > int none_or_zero = 0, shared = 0, result = SCAN_FAIL, referenced = 0; > bool writable = false; > > - for (_pte = pte; _pte < pte + HPAGE_PMD_NR; > + for (_pte = pte; _pte < pte + (1 << order); > _pte++, address += PAGE_SIZE) { > pte_t pteval = ptep_get(_pte); > if (pte_none(pteval) || (pte_present(pteval) && > @@ -711,14 +712,15 @@ static void __collapse_huge_page_copy_succeeded(pte_t *pte, > struct vm_area_struct *vma, > unsigned long address, > spinlock_t *ptl, > - struct list_head *compound_pagelist) > + struct list_head *compound_pagelist, > + u8 order) > { > struct folio *src, *tmp; > pte_t *_pte; > pte_t pteval; > > - for (_pte = pte; _pte < pte + HPAGE_PMD_NR; > - _pte++, address += PAGE_SIZE) { > + for (_pte = pte; _pte < pte + (1 << order); > + _pte++, address += PAGE_SIZE) { > pteval = ptep_get(_pte); > if (pte_none(pteval) || is_zero_pfn(pte_pfn(pteval))) { > add_mm_counter(vma->vm_mm, MM_ANONPAGES, 1); > @@ -764,7 +766,8 @@ static void __collapse_huge_page_copy_failed(pte_t *pte, > pmd_t *pmd, > pmd_t orig_pmd, > struct vm_area_struct *vma, > - struct list_head *compound_pagelist) > + struct list_head *compound_pagelist, > + u8 order) > { > spinlock_t *pmd_ptl; > > @@ -781,7 +784,7 @@ static void __collapse_huge_page_copy_failed(pte_t *pte, > * Release both raw and compound pages isolated > * in __collapse_huge_page_isolate. > */ > - release_pte_pages(pte, pte + HPAGE_PMD_NR, compound_pagelist); > + release_pte_pages(pte, pte + (1 << order), compound_pagelist); > } > > /* > @@ -802,7 +805,7 @@ static void __collapse_huge_page_copy_failed(pte_t *pte, > static int __collapse_huge_page_copy(pte_t *pte, struct folio *folio, > pmd_t *pmd, pmd_t orig_pmd, struct vm_area_struct *vma, > unsigned long address, spinlock_t *ptl, > - struct list_head *compound_pagelist) > + struct list_head *compound_pagelist, u8 order) > { > unsigned int i; > int result = SCAN_SUCCEED; > @@ -810,7 +813,7 @@ static int __collapse_huge_page_copy(pte_t *pte, struct folio *folio, > /* > * Copying pages' contents is subject to memory poison at any iteration. > */ > - for (i = 0; i < HPAGE_PMD_NR; i++) { > + for (i = 0; i < (1 << order); i++) { > pte_t pteval = ptep_get(pte + i); > struct page *page = folio_page(folio, i); > unsigned long src_addr = address + i * PAGE_SIZE; > @@ -829,10 +832,10 @@ static int __collapse_huge_page_copy(pte_t *pte, struct folio *folio, > > if (likely(result == SCAN_SUCCEED)) > __collapse_huge_page_copy_succeeded(pte, vma, address, ptl, > - compound_pagelist); > + compound_pagelist, order); > else > __collapse_huge_page_copy_failed(pte, pmd, orig_pmd, vma, > - compound_pagelist); > + compound_pagelist, order); > > return result; > } > @@ -996,11 +999,11 @@ static int check_pmd_still_valid(struct mm_struct *mm, > static int __collapse_huge_page_swapin(struct mm_struct *mm, > struct vm_area_struct *vma, > unsigned long haddr, pmd_t *pmd, > - int referenced) > + int referenced, u8 order) > { I had dropped 'h' from haddr because the address won't be huge-aligned after mTHP support. > int swapped_in = 0; > vm_fault_t ret = 0; > - unsigned long address, end = haddr + (HPAGE_PMD_NR * PAGE_SIZE); > + unsigned long address, end = haddr + ((1 << order) * PAGE_SIZE); Better to write PAGE_SIZE << order, as Matthew had noted in my patch :)