[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <011afa85-285d-4b26-9fac-e957f0812ebf@arm.com>
Date: Tue, 17 Dec 2024 17:14:31 +0000
From: Ryan Roberts <ryan.roberts@....com>
To: Dev Jain <dev.jain@....com>, Matthew Wilcox <willy@...radead.org>,
g@...per.infradead.org
Cc: akpm@...ux-foundation.org, david@...hat.com,
kirill.shutemov@...ux.intel.com, anshuman.khandual@....com,
catalin.marinas@....com, cl@...two.org, vbabka@...e.cz, mhocko@...e.com,
apopple@...dia.com, dave.hansen@...ux.intel.com, will@...nel.org,
baohua@...nel.org, jack@...e.cz, srivatsa@...il.mit.edu,
haowenchao22@...il.com, hughd@...gle.com, aneesh.kumar@...nel.org,
yang@...amperecomputing.com, peterx@...hat.com, ioworker0@...il.com,
wangkefeng.wang@...wei.com, ziy@...dia.com, jglisse@...gle.com,
surenb@...gle.com, vishal.moola@...il.com, zokeefe@...gle.com,
zhengqi.arch@...edance.com, jhubbard@...dia.com, 21cnbao@...il.com,
linux-mm@...ck.org, linux-kernel@...r.kernel.org
Subject: Re: [RFC PATCH 05/12] khugepaged: Generalize
__collapse_huge_page_isolate()
On 17/12/2024 06:41, Dev Jain wrote:
>
> On 17/12/24 10:02 am, Matthew Wilcox wrote:
>> On Mon, Dec 16, 2024 at 10:20:58PM +0530, Dev Jain wrote:
>>> {
>>> - struct page *page = NULL;
>>> - struct folio *folio = NULL;
>>> - pte_t *_pte;
>>> + unsigned int max_ptes_shared = khugepaged_max_ptes_shared >>
>>> (HPAGE_PMD_ORDER - order);
>>> + unsigned int max_ptes_none = khugepaged_max_ptes_none >>
>>> (HPAGE_PMD_ORDER - order);
>>> int none_or_zero = 0, shared = 0, result = SCAN_FAIL, referenced = 0;
>>> + struct folio *folio = NULL;
>>> + struct page *page = NULL;
>> why are you moving variables around unnecessarily?
>
> In a previous work, I moved code around and David noted to arrange the declarations
> in reverse Xmas tree order. I guess (?) that was not spoiling git history, so if
> this feels like that, I will revert.
>
>>
>>> bool writable = false;
>>> + pte_t *_pte;
>>> - for (_pte = pte; _pte < pte + HPAGE_PMD_NR;
>>> +
>>> + for (_pte = pte; _pte < pte + (1UL << order);
>> spurious blank line
>
> My bad
>
>>
>>
>> also you might first want to finish off the page->folio conversion in
>> this function first; we have a vm_normal_folio() now.
>
> I did not add any code before we derive the folio...I'm sorry, I don't get what
> you mean...
>
I think Matthew is suggesting helping out with the folio to page conversion work
while you are working on this function. I think it would amount to a patch that
does something like this:
----8<-----
diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index ffc4d5aef991..d94e05754140 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -568,7 +568,6 @@ static int __collapse_huge_page_isolate(struct
vm_area_struct *vma,
unsigned int max_ptes_none = khugepaged_max_ptes_none >>
(HPAGE_PMD_ORDER - order);
int none_or_zero = 0, shared = 0, result = SCAN_FAIL, referenced = 0;
struct folio *folio = NULL;
- struct page *page = NULL;
bool writable = false;
pte_t *_pte;
@@ -597,13 +596,12 @@ static int __collapse_huge_page_isolate(struct
vm_area_struct *vma,
result = SCAN_PTE_UFFD_WP;
goto out;
}
- page = vm_normal_page(vma, address, pteval);
- if (unlikely(!page) || unlikely(is_zone_device_page(page))) {
+ folio = vm_normal_folio(vma, address, pteval);
+ if (unlikely(!folio) || unlikely(folio_is_zone_device(folio))) {
result = SCAN_PAGE_NULL;
goto out;
}
- folio = page_folio(page);
VM_BUG_ON_FOLIO(!folio_test_anon(folio), folio);
if (order !=HPAGE_PMD_ORDER && folio_order(folio) >= order) {
----8<-----
Powered by blists - more mailing lists