diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2013-03-12 00:31:37 +0000 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2013-03-22 15:28:51 +0100 |
commit | 59acbe28552eb7bd7be75b22b3f3de93d7d40556 (patch) | |
tree | 0a02037091bf3c8a6412bc006318103c5a7d93ed /target-ppc/mmu-hash32.c | |
parent | 145e52f31826045d8cccf5b840dc77d21a696651 (diff) | |
download | hqemu-59acbe28552eb7bd7be75b22b3f3de93d7d40556.zip hqemu-59acbe28552eb7bd7be75b22b3f3de93d7d40556.tar.gz |
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>
Diffstat (limited to 'target-ppc/mmu-hash32.c')
-rw-r--r-- | target-ppc/mmu-hash32.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/target-ppc/mmu-hash32.c b/target-ppc/mmu-hash32.c index d4d91dd..3488092 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); } } |