From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:44392) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UFMVW-0000KU-Vd for qemu-devel@nongnu.org; Tue, 12 Mar 2013 06:33:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UFMV6-0004nr-Tk for qemu-devel@nongnu.org; Tue, 12 Mar 2013 06:32:34 -0400 From: David Gibson Date: Tue, 12 Mar 2013 21:31:37 +1100 Message-Id: <1363084310-4115-36-git-send-email-david@gibson.dropbear.id.au> In-Reply-To: <1363084310-4115-1-git-send-email-david@gibson.dropbear.id.au> References: <1363084310-4115-1-git-send-email-david@gibson.dropbear.id.au> Subject: [Qemu-devel] [PATCH 35/48] mmu-hash32: Don't look up page tables on BAT permission error List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: agraf@suse.de Cc: David Gibson , qemu-ppc@nongnu.org, afaerber@suse.de, qemu-devel@nongnu.org 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 --- target-ppc/mmu-hash32.c | 5 +---- 1 file changed, 1 insertion(+), 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); } } -- 1.7.10.4