qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v1 10/16] target-arm: Break out exception maskin


From: Edgar E. Iglesias
Subject: Re: [Qemu-devel] [PATCH v1 10/16] target-arm: Break out exception masking to a separate func
Date: Wed, 4 Jun 2014 08:55:16 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

On Tue, Jun 03, 2014 at 11:32:59AM +0100, Alex Bennée wrote:
> 
> Edgar E. Iglesias writes:
> 
> > From: "Edgar E. Iglesias" <address@hidden>
> >
> > Signed-off-by: Edgar E. Iglesias <address@hidden>
> > ---
> >  cpu-exec.c       |  5 ++---
> >  target-arm/cpu.h | 16 ++++++++++++++++
> >  2 files changed, 18 insertions(+), 3 deletions(-)
> >
> > diff --git a/cpu-exec.c b/cpu-exec.c
> > index 38e5f02..a579ffc 100644
> > --- a/cpu-exec.c
> > +++ b/cpu-exec.c
> > @@ -478,7 +478,7 @@ int cpu_exec(CPUArchState *env)
> >                      }
> >  #elif defined(TARGET_ARM)
> >                      if (interrupt_request & CPU_INTERRUPT_FIQ
> > -                        && !(env->daif & PSTATE_F)) {
> > +                        && arm_excp_unmasked(cpu, EXCP_FIQ)) {
> >                          cpu->exception_index = EXCP_FIQ;
> >                          cc->do_interrupt(cpu);
> >                          next_tb = 0;
> > @@ -493,8 +493,7 @@ int cpu_exec(CPUArchState *env)
> >                         We avoid this by disabling interrupts when
> >                         pc contains a magic address.  */
> >                      if (interrupt_request & CPU_INTERRUPT_HARD
> > -                        && ((IS_M(env) && env->regs[15] < 0xfffffff0)
> > -                            || !(env->daif & PSTATE_I))) {
> > +                        && arm_excp_unmasked(cpu, EXCP_IRQ)) {
> >                          cpu->exception_index = EXCP_IRQ;
> >                          cc->do_interrupt(cpu);
> >                          next_tb = 0;
> > diff --git a/target-arm/cpu.h b/target-arm/cpu.h
> > index 5c74adc..9eddcc1 100644
> > --- a/target-arm/cpu.h
> > +++ b/target-arm/cpu.h
> > @@ -1130,6 +1130,22 @@ bool write_cpustate_to_list(ARMCPU *cpu);
> >  #  define TARGET_VIRT_ADDR_SPACE_BITS 32
> >  #endif
> >  
> > +static inline bool arm_excp_unmasked(CPUState *cs, unsigned int excp_idx)
> > +{
> > +    CPUARMState *env = cs->env_ptr;
> > +
> > +    switch (excp_idx) {
> > +    case EXCP_FIQ:
> > +        return !(env->daif & PSTATE_F);
> > +    case EXCP_IRQ:
> > +        return ((IS_M(env) && env->regs[15] < 0xfffffff0)
> > +                            || !(env->daif & PSTATE_I));
> > +    default:
> > +        assert(0);
> 
> g_assert_not_reached() is clearer about the intent here.

Sounds good, will change it.

Thanks,
Edgar


> 
> > +        break;
> > +    }
> > +}
> > +
> >  static inline CPUARMState *cpu_init(const char *cpu_model)
> >  {
> >      ARMCPU *cpu = cpu_arm_init(cpu_model);
> 
> -- 
> Alex Bennée



reply via email to

[Prev in Thread] Current Thread [Next in Thread]