From: David Gibson Here's a patch with at least the most obvious couple of bugs here fixed. Corresponding bugs on sh addressed similarly. Cc: William Lee Irwin III Signed-off-by: Andrew Morton --- arch/sh/mm/hugetlbpage.c | 9 +++++---- arch/sparc64/mm/hugetlbpage.c | 11 ++++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff -puN arch/sh/mm/hugetlbpage.c~hugepage-consolidation-fix arch/sh/mm/hugetlbpage.c --- 25/arch/sh/mm/hugetlbpage.c~hugepage-consolidation-fix 2005-05-03 23:22:48.000000000 -0700 +++ 25-akpm/arch/sh/mm/hugetlbpage.c 2005-05-03 23:22:48.000000000 -0700 @@ -57,13 +57,13 @@ pte_t *huge_pte_offset(struct mm_struct #define mk_pte_huge(entry) do { pte_val(entry) |= _PAGE_SZHUGE; } while (0) static void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, - pte_t entry) + pte_t *ptep, pte_t entry) { - unsigned long i; + int i; for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) { - set_pte_at(mm, addr, page_table, entry); - page_table++; + set_pte_at(mm, addr, ptep, entry); + ptep++; addr += PAGE_SIZE; pte_val(entry) += PAGE_SIZE; } @@ -73,6 +73,7 @@ pte_t huge_ptep_get_and_clear(struct mm_ pte_t *ptep) { pte_t entry; + int i; entry = *ptep; diff -puN arch/sparc64/mm/hugetlbpage.c~hugepage-consolidation-fix arch/sparc64/mm/hugetlbpage.c --- 25/arch/sparc64/mm/hugetlbpage.c~hugepage-consolidation-fix 2005-05-03 23:22:48.000000000 -0700 +++ 25-akpm/arch/sparc64/mm/hugetlbpage.c 2005-05-03 23:22:48.000000000 -0700 @@ -62,14 +62,14 @@ pte_t *huge_pte_offset(struct mm_struct #define mk_pte_huge(entry) do { pte_val(entry) |= _PAGE_SZHUGE; } while (0) -static void set_huge_pte(struct mm_struct *mm, unsigned long addr, - pte_t entry) +static void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, + pte_t *ptep, pte_t entry) { - unsigned long i; + int i; for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) { - set_pte_at(mm, addr, page_table, entry); - page_table++; + set_pte_at(mm, addr, ptep, entry); + ptep++; addr += PAGE_SIZE; pte_val(entry) += PAGE_SIZE; } @@ -78,6 +78,7 @@ static void set_huge_pte(struct mm_struc pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) { pte_t entry; + int i; entry = *ptep; _