From patchwork Tue Jan 7 04:48:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 11320399 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E97F6930 for ; Tue, 7 Jan 2020 04:59:20 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id BC6BE2075A for ; Tue, 7 Jan 2020 04:59:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="kUb+6iyk" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BC6BE2075A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:42188 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iogxZ-0003i4-FG for patchwork-qemu-devel@patchwork.kernel.org; Mon, 06 Jan 2020 23:59:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44234) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iognO-0005Ox-7i for qemu-devel@nongnu.org; Mon, 06 Jan 2020 23:48:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iognM-0004hw-T4 for qemu-devel@nongnu.org; Mon, 06 Jan 2020 23:48:46 -0500 Received: from bilbo.ozlabs.org ([203.11.71.1]:39747 helo=ozlabs.org) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iognM-0004dV-H4; Mon, 06 Jan 2020 23:48:44 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 47sKdY25Hbz9sRs; Tue, 7 Jan 2020 15:48:32 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1578372513; bh=4HhSMl0Es+rg1RXiqlkZW6iMgJYBDjPW1np9fGChUSE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kUb+6iykEcVAHgjueI61Ab9O4tZt1v2CitFwt0npqz5RTaO9nIyhHUoPUbIZUkuYT IL9aR7rJQmuHrfABmov6XlG0ItjzSLhZz9jl4674S6XSlvQb68CJfMbl2V+SJWxOcA UTNN2W68DcVnGVbRaxsboqfDDHFzNShxqc7GizGc= From: David Gibson To: qemu-devel@nongnu.org, groug@kaod.org, philmd@redhat.com, clg@kaod.org Subject: [PATCH v2 10/10] target/ppc: Only calculate RMLS derived RMA limit on demand Date: Tue, 7 Jan 2020 15:48:27 +1100 Message-Id: <20200107044827.471355-11-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200107044827.471355-1-david@gibson.dropbear.id.au> References: <20200107044827.471355-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, aik@ozlabs.ru, Mark Cave-Ayland , qemu-ppc@nongnu.org, paulus@samba.org, David Gibson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" When the LPCR is written, we update the env->rmls field with the RMA limit it implies. Simplify things by just calculating the value directly from the LPCR value when we need it. It's possible this is a little slower, but it's unlikely to be significant, since this is only for real mode accesses in a translation configuration that's not used very often, and the whole thing is behind the qemu TLB anyway. Therefore, keeping the number of state variables down and not having to worry about making sure it's always in sync seems the better option. Signed-off-by: David Gibson Reviewed-by: Cédric Le Goater --- target/ppc/cpu.h | 1 - target/ppc/mmu-hash64.c | 8 +++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index 2de9e2fa2b..2a79b97bd8 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -1075,7 +1075,6 @@ struct CPUPPCState { uint64_t insns_flags2; #if defined(TARGET_PPC64) ppc_slb_t vrma_slb; - target_ulong rmls; #endif int error_code; diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c index e6f24be93e..170a78bd2e 100644 --- a/target/ppc/mmu-hash64.c +++ b/target/ppc/mmu-hash64.c @@ -842,8 +842,10 @@ int ppc_hash64_handle_mmu_fault(PowerPCCPU *cpu, vaddr eaddr, goto skip_slb_search; } else { + target_ulong limit = rmls_limit(cpu); + /* Emulated old-style RMO mode, bounds check against RMLS */ - if (raddr >= env->rmls) { + if (raddr >= limit) { if (rwx == 2) { ppc_hash64_set_isi(cs, SRR1_PROTFAULT); } else { @@ -1005,8 +1007,9 @@ hwaddr ppc_hash64_get_phys_page_debug(PowerPCCPU *cpu, target_ulong addr) return -1; } } else { + target_ulong limit = rmls_limit(cpu); /* Emulated old-style RMO mode, bounds check against RMLS */ - if (raddr >= env->rmls) { + if (raddr >= limit) { return -1; } return raddr | env->spr[SPR_RMOR]; @@ -1096,7 +1099,6 @@ void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val) CPUPPCState *env = &cpu->env; env->spr[SPR_LPCR] = val & pcc->lpcr_mask; - env->rmls = rmls_limit(cpu); ppc_hash64_update_vrma(cpu); }