@@ -225,16 +225,6 @@ void kvm_arch_pre_run(CPUState *env, struct kvm_run *run)
}
}
-int kvm_arch_has_work(CPUState *env)
-{
- if (((env->interrupt_request & CPU_INTERRUPT_HARD) &&
- (env->eflags & IF_MASK)) ||
- (env->interrupt_request & CPU_INTERRUPT_NMI)) {
- return 1;
- }
- return 0;
-}
-
int kvm_arch_try_push_interrupts(void *opaque)
{
CPUState *env = cpu_single_env;
@@ -331,42 +321,3 @@ int kvm_arch_init_irq_routing(void)
return 0;
}
-
-void kvm_arch_process_irqchip_events(CPUState *env)
-{
- if (env->interrupt_request & CPU_INTERRUPT_INIT) {
- kvm_cpu_synchronize_state(env);
- do_cpu_init(env);
- }
- if (env->interrupt_request & CPU_INTERRUPT_SIPI) {
- kvm_cpu_synchronize_state(env);
- do_cpu_sipi(env);
- }
-}
-
-int kvm_arch_process_async_events(CPUState *env)
-{
- if (env->interrupt_request & CPU_INTERRUPT_MCE) {
- /* We must not raise CPU_INTERRUPT_MCE if it's not supported. */
- assert(env->mcg_cap);
-
- env->interrupt_request &= ~CPU_INTERRUPT_MCE;
-
- kvm_cpu_synchronize_state(env);
-
- if (env->exception_injected == EXCP08_DBLE) {
- /* this means triple fault */
- qemu_system_reset_request();
- env->exit_request = 1;
- return 0;
- }
- env->exception_injected = EXCP12_MCHK;
- env->has_error_code = 0;
-
- env->halted = 0;
- if (kvm_irqchip_in_kernel() && env->mp_state == KVM_MP_STATE_HALTED) {
- env->mp_state = KVM_MP_STATE_RUNNABLE;
- }
- }
- return 0;
-}
@@ -1032,23 +1032,12 @@ static void qemu_kvm_system_reset(void)
resume_all_threads();
}
-static void process_irqchip_events(CPUState *env)
-{
- kvm_arch_process_irqchip_events(env);
- if (kvm_arch_has_work(env))
- env->halted = 0;
-}
-
static int kvm_main_loop_cpu(CPUState *env)
{
while (1) {
int run_cpu = !kvm_cpu_is_stopped(env);
if (run_cpu) {
- kvm_arch_process_async_events(env);
- if (!kvm_irqchip_in_kernel()) {
- process_irqchip_events(env);
- run_cpu = !env->halted;
- }
+ run_cpu = !kvm_arch_process_async_events(env);
}
if (run_cpu) {
kvm_cpu_exec(env);
@@ -314,8 +314,6 @@ void kvm_hpet_disable_kpit(void);
void on_vcpu(CPUState *env, void (*func)(void *data), void *data);
void kvm_update_interrupt_request(CPUState *env);
-int kvm_arch_has_work(CPUState *env);
-void kvm_arch_process_irqchip_events(CPUState *env);
int kvm_arch_try_push_interrupts(void *opaque);
void kvm_arch_push_nmi(void);
int kvm_set_boot_cpu_id(KVMState *s, uint32_t id);
@@ -1636,7 +1636,6 @@ void kvm_arch_post_run(CPUState *env, struct kvm_run *run)
cpu_set_apic_base(env->apic_state, run->apic_base);
}
-#ifdef OBSOLETE_KVM_IMPL
int kvm_arch_process_async_events(CPUState *env)
{
if (env->interrupt_request & CPU_INTERRUPT_MCE) {
@@ -1682,7 +1681,6 @@ int kvm_arch_process_async_events(CPUState *env)
return env->halted;
}
-#endif
static int kvm_handle_halt(CPUState *env)
{
Upstream's kvm_arch_process_async_events is now identical to qemu-kvm's combination of kvm_arch_process_async_events and process_irqchip_events. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> --- qemu-kvm-x86.c | 49 ------------------------------------------------- qemu-kvm.c | 13 +------------ qemu-kvm.h | 2 -- target-i386/kvm.c | 2 -- 4 files changed, 1 insertions(+), 65 deletions(-)