From patchwork Wed Mar 6 03:44:23 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 225297 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 1C5E22C045C for ; Wed, 6 Mar 2013 15:24:20 +1100 (EST) Received: from localhost ([::1]:53974 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UD5Rr-0004q0-IS for incoming@patchwork.ozlabs.org; Tue, 05 Mar 2013 22:55:23 -0500 Received: from eggs.gnu.org ([208.118.235.92]:51620) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UD5IG-0004EM-2Z for qemu-devel@nongnu.org; Tue, 05 Mar 2013 22:46:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UD5Hi-0007uo-Md for qemu-devel@nongnu.org; Tue, 05 Mar 2013 22:45:27 -0500 Received: from ozlabs.org ([2402:b800:7003:1:1::1]:57170) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UD5Hi-0007o0-7o; Tue, 05 Mar 2013 22:44:54 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id B4AA92C03A1; Wed, 6 Mar 2013 14:44:43 +1100 (EST) From: David Gibson To: agraf@suse.de Date: Wed, 6 Mar 2013 14:44:23 +1100 Message-Id: <1362541473-4365-36-git-send-email-david@gibson.dropbear.id.au> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1362541473-4365-1-git-send-email-david@gibson.dropbear.id.au> References: <1362541473-4365-1-git-send-email-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2402:b800:7003:1:1::1 Cc: David Gibson , qemu-ppc@nongnu.org, afaerber@suse.de, qemu-devel@nongnu.org Subject: [Qemu-devel] [PATCH 35/45] mmu-hash32: Don't look up page tables on BAT permission error X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@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); } }