aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2013-03-12 00:31:37 +0000
committerAlexander Graf <agraf@suse.de>2013-03-22 15:28:51 +0100
commit59acbe28552eb7bd7be75b22b3f3de93d7d40556 (patch)
tree0a02037091bf3c8a6412bc006318103c5a7d93ed
parent145e52f31826045d8cccf5b840dc77d21a696651 (diff)
mmu-hash32: Don't look up page tables on BAT permission error
BEHAVIOUR CHANGE Currently, on any failure translating an address with BATs, we proceed to normal segment and page table translation. That's incorrect if the BAT error was due to permissions, rather than not finding a matching BAT. We've gotten away with it because a guest would not usually put translations for the same address in both BATs and page table. Nonetheless this patch corrects the logic, only doing page table lookup if no BAT is found. A matching BAT with bad permissions will now correctly trigger an exception. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Alexander Graf <agraf@suse.de>
-rw-r--r--target-ppc/mmu-hash32.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/target-ppc/mmu-hash32.c b/target-ppc/mmu-hash32.c
index d4d91dd6e2..348809244d 100644
--- a/target-ppc/mmu-hash32.c
+++ b/target-ppc/mmu-hash32.c
@@ -400,10 +400,7 @@ static int ppc_hash32_translate(CPUPPCState *env, struct mmu_ctx_hash32 *ctx,
if (env->nb_BATs != 0) {
ctx->raddr = ppc_hash32_bat_lookup(env, eaddr, rwx, &ctx->prot);
if (ctx->raddr != -1) {
- ret = ppc_hash32_check_prot(ctx->prot, rwx);
- if (ret == 0) {
- return 0;
- }
+ return ppc_hash32_check_prot(ctx->prot, rwx);
}
}