mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
always qemu_cpu_kick after unhalting a cpu
This ensures env->halt_cond is broadcast, and the loop in qemu_tcg_wait_io_event and qemu_kvm_wait_io_event is exited naturally rather than through a timeout. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
eda48c344f
commit
94ad5b00a3
4 changed files with 13 additions and 4 deletions
10
hw/sun4m.c
10
hw/sun4m.c
|
@ -253,15 +253,21 @@ void cpu_check_irqs(CPUState *env)
|
|||
}
|
||||
}
|
||||
|
||||
static void cpu_kick_irq(CPUState *env)
|
||||
{
|
||||
env->halted = 0;
|
||||
cpu_check_irqs(env);
|
||||
qemu_cpu_kick(env);
|
||||
}
|
||||
|
||||
static void cpu_set_irq(void *opaque, int irq, int level)
|
||||
{
|
||||
CPUState *env = opaque;
|
||||
|
||||
if (level) {
|
||||
trace_sun4m_cpu_set_irq_raise(irq);
|
||||
env->halted = 0;
|
||||
env->pil_in |= 1 << irq;
|
||||
cpu_check_irqs(env);
|
||||
cpu_kick_irq(env);
|
||||
} else {
|
||||
trace_sun4m_cpu_set_irq_lower(irq);
|
||||
env->pil_in &= ~(1 << irq);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue