aboutsummaryrefslogtreecommitdiff
path: root/cpus.c
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2012-07-26 15:35:11 +0100
committerAvi Kivity <avi@redhat.com>2012-08-09 16:16:53 +0300
commit7ae26bd484a50810f8d29cb5399bc48108e50bec (patch)
tree46d0b974dd680e89c13fcc47f3c73e40dffc71d1 /cpus.c
parent08312a63b77df45ad056d2e8d9e2cbe8f683a23c (diff)
downloadqemu-7ae26bd484a50810f8d29cb5399bc48108e50bec.zip
qemu-7ae26bd484a50810f8d29cb5399bc48108e50bec.tar.gz
qemu-7ae26bd484a50810f8d29cb5399bc48108e50bec.tar.bz2
kvm: Decouple 'async interrupt delivery' from 'kernel irqchip'
On x86 userspace delivers interrupts to the kernel asynchronously (and therefore VCPU idle management is done in the kernel) if and only if there is an in-kernel irqchip. On other architectures this isn't necessarily true (they may always send interrupts asynchronously), so define a new kvm_async_interrupts_enabled() function instead of misusing kvm_irqchip_in_kernel(). Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'cpus.c')
-rw-r--r--cpus.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/cpus.c b/cpus.c
index 3de2e27..e476a3c 100644
--- a/cpus.c
+++ b/cpus.c
@@ -70,7 +70,8 @@ static bool cpu_thread_is_idle(CPUArchState *env)
if (env->stopped || !runstate_is_running()) {
return true;
}
- if (!env->halted || qemu_cpu_has_work(env) || kvm_irqchip_in_kernel()) {
+ if (!env->halted || qemu_cpu_has_work(env) ||
+ kvm_async_interrupts_enabled()) {
return false;
}
return true;