From: David Gibson <david@gibson.dropbear.id.au>

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 <wli@holomorphy.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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;
 
_