[SPARC64]: Align address in huge_pte_alloc().
authorDavid S. Miller <davem@davemloft.net>
Fri, 31 Mar 2006 08:36:25 +0000 (00:36 -0800)
committerDavid S. Miller <davem@sunset.davemloft.net>
Sat, 1 Apr 2006 07:03:36 +0000 (23:03 -0800)
We are about to fill in all HPAGE_SIZE's worth
of PAGE_SIZE ptes, so we have to give the first
pte in that set else we scribble over random memory
when we fill in the ptes.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc64/mm/hugetlbpage.c

index 074620d413d4733db87aca5f0ce6f09be09a080e..fbbbebbad8a49219674c119551f07a85b594bd9e 100644 (file)
@@ -198,6 +198,13 @@ pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr)
        pmd_t *pmd;
        pte_t *pte = NULL;
 
+       /* We must align the address, because our caller will run
+        * set_huge_pte_at() on whatever we return, which writes out
+        * all of the sub-ptes for the hugepage range.  So we have
+        * to give it the first such sub-pte.
+        */
+       addr &= HPAGE_MASK;
+
        pgd = pgd_offset(mm, addr);
        pud = pud_alloc(mm, pgd, addr);
        if (pud) {