From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37068) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZwJHo-0000Eo-HO for qemu-devel@nongnu.org; Tue, 10 Nov 2015 19:29:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZwJHn-0003pQ-Mt for qemu-devel@nongnu.org; Tue, 10 Nov 2015 19:29:16 -0500 From: Benjamin Herrenschmidt Date: Wed, 11 Nov 2015 11:27:22 +1100 Message-Id: <1447201710-10229-10-git-send-email-benh@kernel.crashing.org> In-Reply-To: <1447201710-10229-1-git-send-email-benh@kernel.crashing.org> References: <1447201710-10229-1-git-send-email-benh@kernel.crashing.org> Subject: [Qemu-devel] [PATCH 09/77] ppc: Fix do_rfi() for rfi emulation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-ppc@nongnu.org Cc: qemu-devel@nongnu.org XXX This patch needs double checking... It fixed 32-bit userspace but I'm not sure it's right. I wonder whether msr_is_64bit() should be applied to env->msr, not msr, but I need to double check the architecture. Signed-off-by: Benjamin Herrenschmidt --- target-ppc/excp_helper.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target-ppc/excp_helper.c b/target-ppc/excp_helper.c index c1d6605..00fae60 100644 --- a/target-ppc/excp_helper.c +++ b/target-ppc/excp_helper.c @@ -878,13 +878,13 @@ static inline void do_rfi(CPUPPCState *env, target_ulong nip, target_ulong msr, CPUState *cs = CPU(ppc_env_get_cpu(env)); #if defined(TARGET_PPC64) + msr = msr & msrm; if (msr_is_64bit(env, msr)) { nip = (uint64_t)nip; - msr &= (uint64_t)msrm; } else { nip = (uint32_t)nip; - msr = (uint32_t)(msr & msrm); if (keep_msrh) { + msr &= 0xffffffff; msr |= env->msr & ~((uint64_t)0xFFFFFFFF); } } -- 2.5.0