target/xtensa: implement RUNSTALL

RUNSTALL signal stalls core execution while it's applied. It is widely
used in multicore configurations to control activity of additional
cores.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
Max Filippov 2016-12-13 18:52:08 -08:00
parent 17ab14acd4
commit bd527a8323
3 changed files with 17 additions and 2 deletions

View file

@ -47,7 +47,7 @@ static bool xtensa_cpu_has_work(CPUState *cs)
{
XtensaCPU *cpu = XTENSA_CPU(cs);
return cpu->env.pending_irq_level;
return !cpu->env.runstall && cpu->env.pending_irq_level;
}
/* CPUClass::reset() */
@ -74,6 +74,7 @@ static void xtensa_cpu_reset(CPUState *s)
env->pending_irq_level = 0;
reset_mmu(env);
s->halted = env->runstall;
}
static ObjectClass *xtensa_cpu_class_by_name(const char *cpu_model)