From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50282) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUbXL-00022L-7Y for qemu-devel@nongnu.org; Mon, 31 Mar 2014 08:42:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WUbXE-0003U7-VU for qemu-devel@nongnu.org; Mon, 31 Mar 2014 08:41:59 -0400 Message-ID: <5339628F.2020006@suse.de> Date: Mon, 31 Mar 2014 14:41:51 +0200 From: Alexander Graf MIME-Version: 1.0 References: <1396011112-23559-1-git-send-email-aik@ozlabs.ru> <1396011112-23559-5-git-send-email-aik@ozlabs.ru> In-Reply-To: <1396011112-23559-5-git-send-email-aik@ozlabs.ru> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 4/5] target-ppc: Implement nmi() callback List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexey Kardashevskiy Cc: Paolo Bonzini , qemu-ppc@nongnu.org, qemu-devel@nongnu.org, Thomas Huth On 03/28/2014 01:51 PM, Alexey Kardashevskiy wrote: > Signed-off-by: Alexey Kardashevskiy > --- > target-ppc/cpu-qom.h | 1 + > target-ppc/excp_helper.c | 2 +- > target-ppc/translate_init.c | 18 ++++++++++++++++++ > 3 files changed, 20 insertions(+), 1 deletion(-) > > diff --git a/target-ppc/cpu-qom.h b/target-ppc/cpu-qom.h > index 47dc8e6..b522664 100644 > --- a/target-ppc/cpu-qom.h > +++ b/target-ppc/cpu-qom.h > @@ -106,6 +106,7 @@ static inline PowerPCCPU *ppc_env_get_cpu(CPUPPCState *env) > PowerPCCPUClass *ppc_cpu_class_by_pvr(uint32_t pvr); > PowerPCCPUClass *ppc_cpu_class_by_pvr_mask(uint32_t pvr); > > +void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp); > void ppc_cpu_do_interrupt(CPUState *cpu); > void ppc_cpu_dump_state(CPUState *cpu, FILE *f, fprintf_function cpu_fprintf, > int flags); > diff --git a/target-ppc/excp_helper.c b/target-ppc/excp_helper.c > index 19bc6b6..e19a5f5 100644 > --- a/target-ppc/excp_helper.c > +++ b/target-ppc/excp_helper.c > @@ -68,7 +68,7 @@ static inline void dump_syscall(CPUPPCState *env) > /* Note that this function should be greatly optimized > * when called with a constant excp, from ppc_hw_interrupt > */ > -static inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp) > +void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp) > { > CPUState *cs = CPU(cpu); > CPUPPCState *env = &cpu->env; > diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c > index d07e186..faa9f21 100644 > --- a/target-ppc/translate_init.c > +++ b/target-ppc/translate_init.c > @@ -8455,6 +8455,23 @@ static void ppc_cpu_reset(CPUState *s) > tlb_flush(s, 1); > } > > +static void ppc_cpu_do_nmi(void *arg) > +{ > + CPUState *cs = arg; > + PowerPCCPU *cpu = POWERPC_CPU(cs); > + CPUPPCState *env = &cpu->env; > + > + cpu_synchronize_state(cs); > + powerpc_excp(cpu, env->excp_model, POWERPC_EXCP_RESET); I'd prefer to keep powerpc_excp internal to excp_helper.c. Can't you just export a do_nmi function from excp_helper.c instead? Alex > +} > + > +static int ppc_cpu_nmi(CPUState *cs) > +{ > + async_run_on_cpu(cs, ppc_cpu_do_nmi, cs); > + > + return 0; > +} > + > static void ppc_cpu_initfn(Object *obj) > { > CPUState *cs = CPU(obj); > @@ -8516,6 +8533,7 @@ static void ppc_cpu_class_init(ObjectClass *oc, void *data) > > pcc->parent_reset = cc->reset; > cc->reset = ppc_cpu_reset; > + cc->nmi = ppc_cpu_nmi; > > cc->class_by_name = ppc_cpu_class_by_name; > cc->has_work = ppc_cpu_has_work;