Revision 7ae26bd4
b/cpus.c | ||
---|---|---|
70 | 70 |
if (env->stopped || !runstate_is_running()) { |
71 | 71 |
return true; |
72 | 72 |
} |
73 |
if (!env->halted || qemu_cpu_has_work(env) || kvm_irqchip_in_kernel()) { |
|
73 |
if (!env->halted || qemu_cpu_has_work(env) || |
|
74 |
kvm_async_interrupts_enabled()) { |
|
74 | 75 |
return false; |
75 | 76 |
} |
76 | 77 |
return true; |
b/kvm-all.c | ||
---|---|---|
100 | 100 |
|
101 | 101 |
KVMState *kvm_state; |
102 | 102 |
bool kvm_kernel_irqchip; |
103 |
bool kvm_async_interrupts_allowed; |
|
103 | 104 |
|
104 | 105 |
static const KVMCapabilityInfo kvm_required_capabilites[] = { |
105 | 106 |
KVM_CAP_INFO(USER_MEMORY), |
... | ... | |
857 | 858 |
struct kvm_irq_level event; |
858 | 859 |
int ret; |
859 | 860 |
|
860 |
assert(kvm_irqchip_in_kernel());
|
|
861 |
assert(kvm_async_interrupts_enabled());
|
|
861 | 862 |
|
862 | 863 |
event.level = level; |
863 | 864 |
event.irq = irq; |
... | ... | |
1201 | 1202 |
s->irqchip_inject_ioctl = KVM_IRQ_LINE_STATUS; |
1202 | 1203 |
} |
1203 | 1204 |
kvm_kernel_irqchip = true; |
1205 |
/* If we have an in-kernel IRQ chip then we must have asynchronous |
|
1206 |
* interrupt delivery (though the reverse is not necessarily true) |
|
1207 |
*/ |
|
1208 |
kvm_async_interrupts_allowed = true; |
|
1204 | 1209 |
|
1205 | 1210 |
kvm_init_irq_routing(s); |
1206 | 1211 |
|
b/kvm-stub.c | ||
---|---|---|
19 | 19 |
|
20 | 20 |
KVMState *kvm_state; |
21 | 21 |
bool kvm_kernel_irqchip; |
22 |
bool kvm_async_interrupts_allowed; |
|
22 | 23 |
|
23 | 24 |
int kvm_init_vcpu(CPUArchState *env) |
24 | 25 |
{ |
b/kvm.h | ||
---|---|---|
24 | 24 |
|
25 | 25 |
extern int kvm_allowed; |
26 | 26 |
extern bool kvm_kernel_irqchip; |
27 |
extern bool kvm_async_interrupts_allowed; |
|
27 | 28 |
|
28 | 29 |
#if defined CONFIG_KVM || !defined NEED_CPU_H |
29 | 30 |
#define kvm_enabled() (kvm_allowed) |
30 | 31 |
#define kvm_irqchip_in_kernel() (kvm_kernel_irqchip) |
32 |
|
|
33 |
/** |
|
34 |
* kvm_async_interrupts_enabled: |
|
35 |
* |
|
36 |
* Returns: true if we can deliver interrupts to KVM |
|
37 |
* asynchronously (ie by ioctl from any thread at any time) |
|
38 |
* rather than having to do interrupt delivery synchronously |
|
39 |
* (where the vcpu must be stopped at a suitable point first). |
|
40 |
*/ |
|
41 |
#define kvm_async_interrupts_enabled() (kvm_async_interrupts_allowed) |
|
42 |
|
|
31 | 43 |
#else |
32 | 44 |
#define kvm_enabled() (0) |
33 | 45 |
#define kvm_irqchip_in_kernel() (false) |
46 |
#define kvm_async_interrupts_enabled() (false) |
|
34 | 47 |
#endif |
35 | 48 |
|
36 | 49 |
struct kvm_run; |
Also available in: Unified diff