From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46467) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wn5aG-0005A0-MT for qemu-devel@nongnu.org; Wed, 21 May 2014 08:25:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Wn5a8-0002Tz-IQ for qemu-devel@nongnu.org; Wed, 21 May 2014 08:25:24 -0400 Message-ID: <537C9B2A.1000702@suse.de> Date: Wed, 21 May 2014 14:25:14 +0200 From: Alexander Graf MIME-Version: 1.0 References: <1400653228-31540-1-git-send-email-aik@ozlabs.ru> <1400653228-31540-10-git-send-email-aik@ozlabs.ru> <537C91A5.9040405@suse.de> <537C9B00.7080304@ozlabs.ru> In-Reply-To: <537C9B00.7080304@ozlabs.ru> Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 9/9] spapr_hcall: Add address-translation-mode-on-interrupt resource in H_SET_MODE List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexey Kardashevskiy , qemu-devel@nongnu.org Cc: Tom Musta , qemu-ppc@nongnu.org On 21.05.14 14:24, Alexey Kardashevskiy wrote: > On 05/21/2014 09:44 PM, Alexander Graf wrote: >> On 21.05.14 08:20, Alexey Kardashevskiy wrote: >>> This adds handling of the RESOURCE_ADDR_TRANS_MODE resource from >>> the H_SET_MODE, for POWER8 (PowerISA 2.07) only. >>> >>> This defines AIL flags for LPCR special register. >>> >>> This changes @excp_prefix according to the mode, takes effect in TCG. >>> >>> This turns support of a new capability PPC2_ISA207S flag for TCG. >>> >>> Signed-off-by: Alexey Kardashevskiy >>> --- >>> hw/ppc/spapr_hcall.c | 47 >>> +++++++++++++++++++++++++++++++++++++++++++++++ >>> include/hw/ppc/spapr.h | 5 +++++ >>> target-ppc/cpu.h | 4 +++- >>> target-ppc/excp_helper.c | 7 +++++-- >>> 4 files changed, 60 insertions(+), 3 deletions(-) >>> >>> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c >>> index 443e2b6..e586c8b 100644 >>> --- a/hw/ppc/spapr_hcall.c >>> +++ b/hw/ppc/spapr_hcall.c >>> @@ -740,6 +740,49 @@ static target_ulong h_set_mode_resouce_le(PowerPCCPU >>> *cpu, >>> return H_UNSUPPORTED_FLAG; >>> } >>> +static target_ulong h_set_mode_resouce_addr_trans_mode(PowerPCCPU *cpu, >>> + target_ulong mflags, >>> + target_ulong value1, >>> + target_ulong value2) >>> +{ >>> + CPUState *cs; >>> + PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu); >>> + target_ulong prefix; >>> + >>> + if (!(pcc->insns_flags2 & PPC2_ISA207S)) { >>> + return H_P2; >>> + } >>> + if (value1) { >>> + return H_P3; >>> + } >>> + if (value2) { >>> + return H_P4; >>> + } >>> + >>> + switch (mflags) { >>> + case H_SET_MODE_ADDR_TRANS_NONE: >>> + prefix = 0; >>> + break; >>> + case H_SET_MODE_ADDR_TRANS_0001_8000: >>> + prefix = 0x18000; >>> + break; >>> + case H_SET_MODE_ADDR_TRANS_C000_0000_0000_4000: >>> + prefix = 0xC000000000004000; >>> + break; >>> + default: >>> + return H_UNSUPPORTED_FLAG; >>> + } >>> + >>> + CPU_FOREACH(cs) { >>> + CPUPPCState *env = &POWERPC_CPU(cpu)->env; >>> + >>> + set_spr(cs, SPR_LPCR, mflags << LPCR_AIL_SH, LPCR_AIL); >>> + env->excp_prefix = prefix; >> I think it makes sense to run this on every vcpu thread individually to >> ensure they all are updated after the hcall has finished. > Sorry, I do not get it. set_spr() calls run_on_cpu(). What is missing? Ah, I missed that part :). That works then. Alex