openrisc: Only kick cpu on timeout, not on update
authorStafford Horne <shorne@gmail.com>
Sat, 15 Jul 2017 11:57:21 +0000 (20:57 +0900)
committerStafford Horne <shorne@gmail.com>
Fri, 20 Oct 2017 21:37:06 +0000 (06:37 +0900)
Previously we were kicking the cpu on every update.  This caused
problems noticeable in SMP configurations where one CPU got pinned
continuously servicing timer exceptions.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Stafford Horne <shorne@gmail.com>
hw/openrisc/cputimer.c

index 4c5415ff75d0d5038c56e32bcdaf69135f461c70..850f88761c8493e0d9fe807a0152494672dfa7df 100644 (file)
@@ -78,7 +78,6 @@ void cpu_openrisc_timer_update(OpenRISCCPU *cpu)
     }
     next = now + (uint64_t)wait * TIMER_PERIOD;
     timer_mod(cpu->env.timer, next);
-    qemu_cpu_kick(CPU(cpu));
 }
 
 void cpu_openrisc_count_start(OpenRISCCPU *cpu)
@@ -120,6 +119,7 @@ static void openrisc_timer_cb(void *opaque)
     }
 
     cpu_openrisc_timer_update(cpu);
+    qemu_cpu_kick(CPU(cpu));
 }
 
 static const VMStateDescription vmstate_or1k_timer = {