summaryrefslogtreecommitdiffstats
path: root/cpus.c
diff options
context:
space:
mode:
authorPeter Maydell2018-04-10 16:18:58 +0200
committerPeter Maydell2018-04-10 16:18:58 +0200
commitf41ee66df0ceef0002644d08a61a6a929674898d (patch)
tree879731a4ccd2a0a276489e615257825d94e37770 /cpus.c
parentMerge remote-tracking branch 'remotes/kraxel/tags/ui-20180410-pull-request' i... (diff)
parentfpu: Fix rounding mode for floatN_to_uintM_round_to_zero (diff)
downloadqemu-f41ee66df0ceef0002644d08a61a6a929674898d.tar.gz
qemu-f41ee66df0ceef0002644d08a61a6a929674898d.tar.xz
qemu-f41ee66df0ceef0002644d08a61a6a929674898d.zip
Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20180410' into staging
target-arm queue: * fpu: Fix rounding mode for floatN_to_uintM_round_to_zero * tcg: Fix guest state corruption when running 64-bit Arm guests on a 32-bit host (especially when using icount) * linux-user/signal.c: Ensure AArch64 signal frame isn't too small * cpus.c: ensure running CPU recalculates icount deadlines on timer expiry * target/arm: Report unsupported MPU region sizes more clearly * hw/arm/fsl-imx: Fix introspection problem with fsl-imx6 and fsl-imx7 * hw/arm/allwinner-a10: Do not use nd_table in instance_init function * hw/sd/bcm2835_sdhost: Don't raise spurious interrupts * hw/sd/bcm2835_sdhost: Add tracepoints * target-arm: Check undefined opcodes for SWP in A32 decoder * hw/arm/integratorcp: Don't do things that could be fatal in the instance_init * hw/arm: Allow manually specified /psci node # gpg: Signature made Tue 10 Apr 2018 13:16:12 BST # gpg: using RSA key 3C2525ED14360CDE # gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>" # gpg: aka "Peter Maydell <pmaydell@gmail.com>" # gpg: aka "Peter Maydell <pmaydell@chiark.greenend.org.uk>" # Primary key fingerprint: E1A5 C593 CD41 9DE2 8E83 15CF 3C25 25ED 1436 0CDE * remotes/pmaydell/tags/pull-target-arm-20180410: fpu: Fix rounding mode for floatN_to_uintM_round_to_zero tcg: Introduce tcg_set_insn_start_param linux-user/signal.c: Ensure AArch64 signal frame isn't too small cpus.c: ensure running CPU recalculates icount deadlines on timer expiry target/arm: Report unsupported MPU region sizes more clearly hw/arm/fsl-imx: Fix introspection problem with fsl-imx6 and fsl-imx7 hw/arm/allwinner-a10: Do not use nd_table in instance_init function hw/sd/bcm2835_sdhost: Don't raise spurious interrupts hw/sd/bcm2835_sdhost: Add tracepoints target-arm: Check undefined opcodes for SWP in A32 decoder hw/arm/integratorcp: Don't do things that could be fatal in the instance_init hw/arm: Allow manually specified /psci node Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'cpus.c')
-rw-r--r--cpus.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/cpus.c b/cpus.c
index 2e6701795b..38eba8bff3 100644
--- a/cpus.c
+++ b/cpus.c
@@ -892,11 +892,19 @@ void qemu_timer_notify_cb(void *opaque, QEMUClockType type)
return;
}
- if (!qemu_in_vcpu_thread() && first_cpu) {
+ if (qemu_in_vcpu_thread()) {
+ /* A CPU is currently running; kick it back out to the
+ * tcg_cpu_exec() loop so it will recalculate its
+ * icount deadline immediately.
+ */
+ qemu_cpu_kick(current_cpu);
+ } else if (first_cpu) {
/* qemu_cpu_kick is not enough to kick a halted CPU out of
* qemu_tcg_wait_io_event. async_run_on_cpu, instead,
* causes cpu_thread_is_idle to return false. This way,
* handle_icount_deadline can run.
+ * If we have no CPUs at all for some reason, we don't
+ * need to do anything.
*/
async_run_on_cpu(first_cpu, do_nothing, RUN_ON_CPU_NULL);
}