From: anton@samba.org Fix up iseries updatepp, from Ben Herrenschmidt --- arch/ppc64/kernel/iSeries_htab.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletion(-) diff -puN arch/ppc64/kernel/iSeries_htab.c~ppc64-iseries-updatepp arch/ppc64/kernel/iSeries_htab.c --- 25/arch/ppc64/kernel/iSeries_htab.c~ppc64-iseries-updatepp 2004-02-04 00:11:51.000000000 -0800 +++ 25-akpm/arch/ppc64/kernel/iSeries_htab.c 2004-02-04 00:11:51.000000000 -0800 @@ -109,6 +109,12 @@ static long iSeries_hpte_remove(unsigned 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(unsign 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; _