diff mbox series

[v8,3/7] mm,hugetlb: Drop clearing of flag from prep_new_huge_page

Message ID 20210415103544.6791-4-osalvador@suse.de (mailing list archive)
State New, archived
Headers show
Series Make alloc_contig_range handle Hugetlb pages | expand

Commit Message

Oscar Salvador April 15, 2021, 10:35 a.m. UTC
Pages allocated after boot get its private field cleared by means
of post_alloc_hook().
Pages allocated during boot, that is directly from the memblock allocator,
get cleared by paging_init()->..->memmap_init_zone->..->__init_single_page()
before any memblock allocation.

Based on this ground, let us remove the clearing of the flag from
prep_new_huge_page() as it is not needed.

Signed-off-by: Oscar Salvador <osalvador@suse.de>
---
 mm/hugetlb.c | 1 -
 1 file changed, 1 deletion(-)

Comments

Michal Hocko April 15, 2021, 11:41 a.m. UTC | #1
On Thu 15-04-21 12:35:40, Oscar Salvador wrote:
> Pages allocated after boot get its private field cleared by means
> of post_alloc_hook().

You surely meant to say s@boot@page/cma allocator@ here

> Pages allocated during boot, that is directly from the memblock allocator,
> get cleared by paging_init()->..->memmap_init_zone->..->__init_single_page()
> before any memblock allocation.
> 
> Based on this ground, let us remove the clearing of the flag from
> prep_new_huge_page() as it is not needed.

I would also mention that this is a leftover from 6c0371490140
("hugetlb: convert PageHugeFreed to HPageFreed flag"). Previously the
explicit clearing was necessary because compound allocations do not get
this initialization (see prep_compound_page).

> Signed-off-by: Oscar Salvador <osalvador@suse.de>

with that
Acked-by: Michal Hocko <mhocko@suse.com>

> ---
>  mm/hugetlb.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 54d81d5947ed..2cb9fa79cbaa 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -1493,7 +1493,6 @@ static void prep_new_huge_page(struct hstate *h, struct page *page, int nid)
>  	spin_lock_irq(&hugetlb_lock);
>  	h->nr_huge_pages++;
>  	h->nr_huge_pages_node[nid]++;
> -	ClearHPageFreed(page);
>  	spin_unlock_irq(&hugetlb_lock);
>  }
>  
> -- 
> 2.16.3
David Hildenbrand April 15, 2021, 12:41 p.m. UTC | #2
On 15.04.21 13:41, Michal Hocko wrote:
> On Thu 15-04-21 12:35:40, Oscar Salvador wrote:
>> Pages allocated after boot get its private field cleared by means
>> of post_alloc_hook().
> 
> You surely meant to say s@boot@page/cma allocator@ here

I think this also includes allocating gigantic pages via 
alloc_contig_pages() directly. post_alloc_hook() covers both.

> 
>> Pages allocated during boot, that is directly from the memblock allocator,
>> get cleared by paging_init()->..->memmap_init_zone->..->__init_single_page()
>> before any memblock allocation.
>>
>> Based on this ground, let us remove the clearing of the flag from
>> prep_new_huge_page() as it is not needed.
> 
> I would also mention that this is a leftover from 6c0371490140
> ("hugetlb: convert PageHugeFreed to HPageFreed flag"). Previously the
> explicit clearing was necessary because compound allocations do not get
> this initialization (see prep_compound_page).
> 
>> Signed-off-by: Oscar Salvador <osalvador@suse.de>
> 
> with that
> Acked-by: Michal Hocko <mhocko@suse.com>
> 

Reviewed-by: David Hildenbrand <david@redhat.com>
Mike Kravetz April 15, 2021, 6:50 p.m. UTC | #3
On 4/15/21 3:35 AM, Oscar Salvador wrote:
> Pages allocated after boot get its private field cleared by means
> of post_alloc_hook().
> Pages allocated during boot, that is directly from the memblock allocator,
> get cleared by paging_init()->..->memmap_init_zone->..->__init_single_page()
> before any memblock allocation.
> 
> Based on this ground, let us remove the clearing of the flag from
> prep_new_huge_page() as it is not needed.
> 
> Signed-off-by: Oscar Salvador <osalvador@suse.de>

The comment "allocated after boot" made sense to me, but I can see where
Michal's suggestion was coming from (list the allocators that do the
clearing).

Also, listing this as a left over would be a good idea.

Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
diff mbox series

Patch

diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 54d81d5947ed..2cb9fa79cbaa 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -1493,7 +1493,6 @@  static void prep_new_huge_page(struct hstate *h, struct page *page, int nid)
 	spin_lock_irq(&hugetlb_lock);
 	h->nr_huge_pages++;
 	h->nr_huge_pages_node[nid]++;
-	ClearHPageFreed(page);
 	spin_unlock_irq(&hugetlb_lock);
 }