RE: Hugetlb demanding paging for -mm tree

Chen, Kenneth W
2004-08-09T18:19:04Z

William Lee Irwin III wrote on Friday, August 06, 2004 2:08 PM
> On Fri, Aug 06, 2004 at 01:55:38PM -0700, Chen, Kenneth W wrote:
> > diff -Nurp linux-2.6.7/mm/hugetlb.c linux-2.6.7.hugetlb/mm/hugetlb.c
> > --- linux-2.6.7/mm/hugetlb.c 2004-08-06 11:44:59.000000000 -0700
> > +++ linux-2.6.7.hugetlb/mm/hugetlb.c 2004-08-06 13:15:24.000000000 -0700
> > @@ -276,9 +276,10 @@ retry:
> > }
> >
> > spin_lock(&mm->page_table_lock);
> > - if (pte_none(*pte))
> > + if (pte_none(*pte)) {
> > set_huge_pte(mm, vma, page, pte, vma->vm_flags & VM_WRITE);
> > - else
> > + update_mmu_cache(vma, addr, *pte);
> > + } else
> > put_page(page);
> > out:
> > spin_unlock(&mm->page_table_lock);
>
> update_mmu_cache() does not appear to check the size of the translation
> to be established in many architectures. e.g. on arch/ia64/ it does
> flush_icache_range(addr, addr + PAGE_SIZE) unconditionally, and only
> sets PG_arch_1 on a single struct page. Similar comments apply to
> sparc64 and ppc64; I didn't check any others.

I suppose this is fixable in update_mmu_cache() where it can check the
type of pte and do appropriate sizing and other things. ia64 would have
to check the address instead of looking at the pte.