Re: [PATCH v7 3/7] mm,hugetlb: Clear HPageFreed outside of the lock

From: David Hildenbrand
Date: Wed Apr 14 2021 - 08:02:51 EST


On 14.04.21 13:09, Michal Hocko wrote:
On Wed 14-04-21 12:49:53, Oscar Salvador wrote:
On Wed, Apr 14, 2021 at 12:32:58PM +0200, Michal Hocko wrote:
[...]
I checked, and when we get there in __alloc_bootmem_huge_page, page->private is
still zeroed, so I guess it should be safe to assume that we do not really need
to clear the flag in __prep_new_huge_page() routine?

It would be quite nasty if the struct pages content would be undefined.
Maybe that is possible but then I would rather stick the initialization
into __alloc_bootmem_huge_page.

Yes, but I do not think that is really possible unless I missed something.

Yeah, it should be fine. I was thinking of a alloc, modify struct pages,
free back to the bootmem allocator sequence. But I do not remember ever
seeing sequence like that.

We do have code like that, though.

Take a look at arch/x86/mm/init_64.c:free_pagetable() as one example.

But in general, we assume freeing code (buddy, but also memblock) restores the state of the memmap to the original state it obtained the memmap. So if it's properly initialized when coming from the allocator the first time, it should remain properly initialized when re-entering and re-leaving the allocator.

--
Thanks,

David / dhildenb