On Tue, Nov 10, 2020 at 9:52 PM Oscar Salvador <osalvador@xxxxxxx> wrote: > > On Tue, Nov 10, 2020 at 06:47:08PM +0800, Muchun Song wrote: > > > That only refers to gigantic pages, right? > > > > Yeah, now it only refers to gigantic pages. Originally, I also wanted to merge > > vmemmap PTE to PMD for normal 2MB HugeTLB pages. So I introduced > > those macros(e.g. freed_vmemmap_hpage). For 2MB HugeTLB pages, I > > haven't found an elegant solution. Hopefully, when you or someone have > > read all of the patch series, we can come up with an elegant solution to > > merge PTE. > > Well, it is quite a lot of "tricky" code, so it takes some time. > > > > > > > +static void free_huge_page_vmemmap(struct hstate *h, struct page *head) > > > > > > +{ > > > > > > + pmd_t *pmd; > > > > > > + spinlock_t *ptl; > > > > > > + LIST_HEAD(free_pages); > > > > > > + > > > > > > + if (!free_vmemmap_pages_per_hpage(h)) > > > > > > + return; > > > > > > + > > > > > > + pmd = vmemmap_to_pmd(head); > > > > > > + ptl = vmemmap_pmd_lock(pmd); > > I forgot about this one. > You might want to check whether vmemmap_to_pmd returns NULL or not. > If it does means that something went wrong anyways, but still we should handle > such case (and print a fat warning or something like that). Yeah, maybe add a BUG_ON or WARN_ON. Do you think which one would be more suitable? > > > -- > Oscar Salvador > SUSE L3 -- Yours, Muchun