On 11/27/23 16:46, Muchun Song wrote: > To check a page whether it is self-hosted needs to traverse the page table (e.g. > pmd_off_k()), however, we already have done this in the next calling of > vmemmap_remap_range(). Moving PageVmemmapSelfHosted() check to vmemmap_pmd_entry() > could simplify the code a bit. > > Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx> > --- > mm/hugetlb_vmemmap.c | 70 +++++++++++++++----------------------------- > 1 file changed, 24 insertions(+), 46 deletions(-) > > diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c > index ef14356855d13..ce920ca6c90ee 100644 > --- a/mm/hugetlb_vmemmap.c > +++ b/mm/hugetlb_vmemmap.c > @@ -95,6 +95,7 @@ static int vmemmap_split_pmd(pmd_t *pmd, struct page *head, unsigned long start, > static int vmemmap_pmd_entry(pmd_t *pmd, unsigned long addr, > unsigned long next, struct mm_walk *walk) > { > + int ret = 0; > struct page *head; > struct vmemmap_remap_walk *vmemmap_walk = walk->private; > > @@ -104,9 +105,30 @@ static int vmemmap_pmd_entry(pmd_t *pmd, unsigned long addr, > > spin_lock(&init_mm.page_table_lock); > head = pmd_leaf(*pmd) ? pmd_page(*pmd) : NULL; I was going to ask why you dropped the: if (IS_ENABLED(CONFIG_MEMORY_HOTPLUG)) However, without the extra page table reads it really is not necessary. Reviewed-by: Mike Kravetz <mike.kravetz@xxxxxxxxxx> -- Mike Kravetz