Revision 0af691d7
b/kvm-all.c | ||
---|---|---|
593 | 593 |
int ret; |
594 | 594 |
int i; |
595 | 595 |
|
596 |
if (smp_cpus > 1) { |
|
597 |
fprintf(stderr, "No SMP KVM support, use '-smp 1'\n"); |
|
598 |
return -EINVAL; |
|
599 |
} |
|
600 |
|
|
601 | 596 |
s = qemu_mallocz(sizeof(KVMState)); |
602 | 597 |
|
603 | 598 |
#ifdef KVM_CAP_SET_GUEST_DEBUG |
... | ... | |
840 | 835 |
} |
841 | 836 |
#endif |
842 | 837 |
|
838 |
if (kvm_arch_process_irqchip_events(env)) { |
|
839 |
ret = 0; |
|
840 |
break; |
|
841 |
} |
|
842 |
|
|
843 | 843 |
if (env->kvm_vcpu_dirty) { |
844 | 844 |
kvm_arch_put_registers(env, KVM_PUT_RUNTIME_STATE); |
845 | 845 |
env->kvm_vcpu_dirty = 0; |
b/kvm.h | ||
---|---|---|
90 | 90 |
|
91 | 91 |
int kvm_arch_pre_run(CPUState *env, struct kvm_run *run); |
92 | 92 |
|
93 |
int kvm_arch_process_irqchip_events(CPUState *env); |
|
94 |
|
|
93 | 95 |
int kvm_arch_get_registers(CPUState *env); |
94 | 96 |
|
95 | 97 |
/* state subset only touched by the VCPU itself during runtime */ |
b/target-i386/kvm.c | ||
---|---|---|
1073 | 1073 |
return 0; |
1074 | 1074 |
} |
1075 | 1075 |
|
1076 |
int kvm_arch_process_irqchip_events(CPUState *env) |
|
1077 |
{ |
|
1078 |
if (env->interrupt_request & CPU_INTERRUPT_INIT) { |
|
1079 |
kvm_cpu_synchronize_state(env); |
|
1080 |
do_cpu_init(env); |
|
1081 |
env->exception_index = EXCP_HALTED; |
|
1082 |
} |
|
1083 |
|
|
1084 |
if (env->interrupt_request & CPU_INTERRUPT_SIPI) { |
|
1085 |
kvm_cpu_synchronize_state(env); |
|
1086 |
do_cpu_sipi(env); |
|
1087 |
} |
|
1088 |
|
|
1089 |
return env->halted; |
|
1090 |
} |
|
1091 |
|
|
1076 | 1092 |
static int kvm_handle_halt(CPUState *env) |
1077 | 1093 |
{ |
1078 | 1094 |
if (!((env->interrupt_request & CPU_INTERRUPT_HARD) && |
b/target-ppc/kvm.c | ||
---|---|---|
224 | 224 |
return 0; |
225 | 225 |
} |
226 | 226 |
|
227 |
int kvm_arch_process_irqchip_events(CPUState *env) |
|
228 |
{ |
|
229 |
return 0; |
|
230 |
} |
|
231 |
|
|
227 | 232 |
static int kvmppc_handle_halt(CPUState *env) |
228 | 233 |
{ |
229 | 234 |
if (!(env->interrupt_request & CPU_INTERRUPT_HARD) && (msr_ee)) { |
b/target-s390x/kvm.c | ||
---|---|---|
175 | 175 |
return 0; |
176 | 176 |
} |
177 | 177 |
|
178 |
int kvm_arch_process_irqchip_events(CPUState *env) |
|
179 |
{ |
|
180 |
return 0; |
|
181 |
} |
|
182 |
|
|
178 | 183 |
static void kvm_s390_interrupt_internal(CPUState *env, int type, uint32_t parm, |
179 | 184 |
uint64_t parm64, int vm) |
180 | 185 |
{ |
Also available in: Unified diff