X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fia64%2Fmm%2Fhugetlbpage.c;fp=arch%2Fia64%2Fmm%2Fhugetlbpage.c;h=2d13889d0a9915da645b074ecbef1f8a0b56d116;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=eee5c1cfbe3223c1376c4d0a9239d4def44be824;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c index eee5c1cfb..2d13889d0 100644 --- a/arch/ia64/mm/hugetlbpage.c +++ b/arch/ia64/mm/hugetlbpage.c @@ -8,6 +8,7 @@ * Feb, 2004: dynamic hugetlb page size via boot parameter */ +#include #include #include #include @@ -67,10 +68,9 @@ huge_pte_offset (struct mm_struct *mm, unsigned long addr) #define mk_pte_huge(entry) { pte_val(entry) |= _PAGE_P; } /* - * Don't actually need to do any preparation, but need to make sure - * the address is in the right region. + * This function checks for proper alignment of input addr and len parameters. */ -int prepare_hugepage_range(unsigned long addr, unsigned long len) +int is_aligned_hugepage_range(unsigned long addr, unsigned long len) { if (len & ~HPAGE_MASK) return -EINVAL; @@ -112,7 +112,8 @@ void hugetlb_free_pgd_range(struct mmu_gather **tlb, unsigned long floor, unsigned long ceiling) { /* - * This is called to free hugetlb page tables. + * This is called only when is_hugepage_only_range(addr,), + * and it follows that is_hugepage_only_range(end,) also. * * The offset of these addresses from the base of the hugetlb * region must be scaled down by HPAGE_SIZE/PAGE_SIZE so that @@ -124,9 +125,9 @@ void hugetlb_free_pgd_range(struct mmu_gather **tlb, addr = htlbpage_to_page(addr); end = htlbpage_to_page(end); - if (REGION_NUMBER(floor) == RGN_HPAGE) + if (is_hugepage_only_range(tlb->mm, floor, HPAGE_SIZE)) floor = htlbpage_to_page(floor); - if (REGION_NUMBER(ceiling) == RGN_HPAGE) + if (is_hugepage_only_range(tlb->mm, ceiling, HPAGE_SIZE)) ceiling = htlbpage_to_page(ceiling); free_pgd_range(tlb, addr, end, floor, ceiling);