summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSuraj Jitindar Singh2017-01-13 07:28:23 +0100
committerDavid Gibson2017-02-01 23:30:07 +0100
commit6925f12f4f02e55c73e738cb9e91e8cda2f23358 (patch)
tree826860c546a274eb5a2efa352444a10b8f1cd5ff
parenttarget/ppc/mmu_hash64: Fix printing unsigned as signed int (diff)
downloadqemu-6925f12f4f02e55c73e738cb9e91e8cda2f23358.tar.gz
qemu-6925f12f4f02e55c73e738cb9e91e8cda2f23358.tar.xz
qemu-6925f12f4f02e55c73e738cb9e91e8cda2f23358.zip
target/ppc/mmu_hash64: Fix incorrect shift value in amr calculation
We are calculating the authority mask register key value wrong. The pte entry contains the key value with the two upper bits and the three lower bits stored separately. We should use these two portions to get a 5 bit value, not or them together which will only give us a 3 bit value. Fix this. Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--target/ppc/mmu-hash64.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/target/ppc/mmu-hash64.h b/target/ppc/mmu-hash64.h
index ab5d347a53..7a0b7fca41 100644
--- a/target/ppc/mmu-hash64.h
+++ b/target/ppc/mmu-hash64.h
@@ -85,7 +85,7 @@ void ppc_hash64_update_rmls(CPUPPCState *env);
#define HPTE64_R_C 0x0000000000000080ULL
#define HPTE64_R_R 0x0000000000000100ULL
#define HPTE64_R_KEY_LO 0x0000000000000e00ULL
-#define HPTE64_R_KEY(x) ((((x) & HPTE64_R_KEY_HI) >> 60) | \
+#define HPTE64_R_KEY(x) ((((x) & HPTE64_R_KEY_HI) >> 57) | \
(((x) & HPTE64_R_KEY_LO) >> 9))
#define HPTE64_V_1TB_SEG 0x4000000000000000ULL