powerpc/mm: Don't clear _PAGE_COHERENT when _PAGE_SAO is set
authorDave Kleikamp <shaggy@linux.vnet.ibm.com>
Mon, 7 Jul 2008 14:28:55 +0000 (00:28 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 9 Jul 2008 06:30:46 +0000 (16:30 +1000)
The current low level hash code on LPAR configurations clears
_PAGE_COHERENT (M) when either _PAGE_GUARDED (G) or _PAGE_NO_CACHE (I)
is set. This conflicts with _PAGE_SAO which has M, I and W bits sets at
once (normally invalid combo) to indicate the new SAO attribute.

This changes the code to allow that case.

Signed-off-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/platforms/pseries/lpar.c

index 3b4651b..38b5927 100644 (file)
@@ -305,7 +305,8 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group,
        flags = 0;
 
        /* Make pHyp happy */
-       if (rflags & (_PAGE_GUARDED|_PAGE_NO_CACHE))
+       if ((rflags & _PAGE_GUARDED) ||
+           ((rflags & _PAGE_NO_CACHE) & !(rflags & _PAGE_WRITETHRU)))
                hpte_r &= ~_PAGE_COHERENT;
 
        lpar_rc = plpar_pte_enter(flags, hpte_group, hpte_v, hpte_r, &slot);