]> git.hungrycats.org Git - linux/commitdiff
[PATCH] ppc64: Fix up iseries updatepp, from Ben Herrenschmidt
authorAndrew Morton <akpm@osdl.org>
Thu, 5 Feb 2004 05:18:53 +0000 (21:18 -0800)
committerLinus Torvalds <torvalds@home.osdl.org>
Thu, 5 Feb 2004 05:18:53 +0000 (21:18 -0800)
From: anton@samba.org

Fix up iseries updatepp, from Ben Herrenschmidt

arch/ppc64/kernel/iSeries_htab.c

index e04e3d8b0fde616faf69c1857670728ebd16f40b..05e41ee263c2d9e0fd87dcbc48286d6c384f026b 100644 (file)
@@ -109,6 +109,12 @@ static long iSeries_hpte_remove(unsigned long hpte_group)
        return -1;
 }
 
+/*
+ * The HyperVisor expects the "flags" argument in this form:
+ *     bits  0..59 : reserved
+ *     bit      60 : N
+ *     bits 61..63 : PP2,PP1,PP0
+ */
 static long iSeries_hpte_updatepp(unsigned long slot, unsigned long newpp,
                                  unsigned long va, int large, int local)
 {
@@ -117,7 +123,7 @@ static long iSeries_hpte_updatepp(unsigned long slot, unsigned long newpp,
 
        HvCallHpt_get(&hpte, slot);
        if ((hpte.dw0.dw0.avpn == avpn) && (hpte.dw0.dw0.v)) {
-               HvCallHpt_setPp(slot, newpp);
+               HvCallHpt_setPp(slot, (newpp & 0x3) | ((newpp & 0x4) << 1));
                return 0;
        }
        return -1;