Subject: Re: [PATCH 2/5] hugetlb: add phys addr to struct huge_bootmem_page

From: Benjamin Herrenschmidt <[email-masked]>
Date: Wed, 29 Jun 2011 07:39:26 +1000

On Tue, 2011-06-28 at 14:54 -0500, Becky Bruce wrote:
>  struct page *alloc_huge_page_node(struct hstate *h, int nid);
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 6402458..2db81ea 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -1105,8 +1105,14 @@ static void __init
> gather_bootmem_prealloc(void)
>         struct huge_bootmem_page *m;
>  
>         list_for_each_entry(m, &huge_boot_pages, list) {
> -               struct page *page = virt_to_page(m);
>                 struct hstate *h = m->hstate;
> +#ifdef CONFIG_HIGHMEM
> +               struct page *page = pfn_to_page(m->phys >>
> PAGE_SHIFT);
> +               free_bootmem_late((unsigned long)m,
> +                                 sizeof(struct huge_bootmem_page));
> +#else
> +               struct page *page = virt_to_page(m);
> +#endif
>                 __ClearPageReserved(page);

Why do you add free_bootmem_late() in the highmem case and not the
normal case ?

Cheers,
Ben.