Emilio G. Cota <c...@braap.org> writes:
> From: Paolo Bonzini <pbonz...@redhat.com> > > Reviewed-by: Richard Henderson <richard.hender...@linaro.org> > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > Signed-off-by: Emilio G. Cota <c...@braap.org> Reviewed-by: Alex Bennée <alex.ben...@linaro.org> > --- > target/i386/hax-all.c | 4 ++-- > target/i386/hvf/x86hvf.c | 8 ++++---- > target/i386/kvm.c | 14 +++++++------- > target/i386/seg_helper.c | 13 ++++++------- > target/i386/svm_helper.c | 2 +- > target/i386/whpx-all.c | 10 +++++----- > 6 files changed, 25 insertions(+), 26 deletions(-) > > diff --git a/target/i386/hax-all.c b/target/i386/hax-all.c > index f095c527e3..8b53a9708f 100644 > --- a/target/i386/hax-all.c > +++ b/target/i386/hax-all.c > @@ -433,7 +433,7 @@ static int hax_vcpu_interrupt(CPUArchState *env) > irq = cpu_get_pic_interrupt(env); > if (irq >= 0) { > hax_inject_interrupt(env, irq); > - cpu->interrupt_request &= ~CPU_INTERRUPT_HARD; > + cpu_reset_interrupt(cpu, CPU_INTERRUPT_HARD); > } > } > > @@ -483,7 +483,7 @@ static int hax_vcpu_hax_exec(CPUArchState *env) > cpu_halted_set(cpu, 0); > > if (cpu->interrupt_request & CPU_INTERRUPT_POLL) { > - cpu->interrupt_request &= ~CPU_INTERRUPT_POLL; > + cpu_reset_interrupt(cpu, CPU_INTERRUPT_POLL); > apic_poll_irq(x86_cpu->apic_state); > } > > diff --git a/target/i386/hvf/x86hvf.c b/target/i386/hvf/x86hvf.c > index 163bbed23f..e8b13ed534 100644 > --- a/target/i386/hvf/x86hvf.c > +++ b/target/i386/hvf/x86hvf.c > @@ -402,7 +402,7 @@ bool hvf_inject_interrupts(CPUState *cpu_state) > > if (cpu_state->interrupt_request & CPU_INTERRUPT_NMI) { > if (!(env->hflags2 & HF2_NMI_MASK) && !(info & VMCS_INTR_VALID)) { > - cpu_state->interrupt_request &= ~CPU_INTERRUPT_NMI; > + cpu_reset_interrupt(cpu_state, CPU_INTERRUPT_NMI); > info = VMCS_INTR_VALID | VMCS_INTR_T_NMI | NMI_VEC; > wvmcs(cpu_state->hvf_fd, VMCS_ENTRY_INTR_INFO, info); > } else { > @@ -414,7 +414,7 @@ bool hvf_inject_interrupts(CPUState *cpu_state) > (cpu_state->interrupt_request & CPU_INTERRUPT_HARD) && > (EFLAGS(env) & IF_MASK) && !(info & VMCS_INTR_VALID)) { > int line = cpu_get_pic_interrupt(&x86cpu->env); > - cpu_state->interrupt_request &= ~CPU_INTERRUPT_HARD; > + cpu_reset_interrupt(cpu_state, CPU_INTERRUPT_HARD); > if (line >= 0) { > wvmcs(cpu_state->hvf_fd, VMCS_ENTRY_INTR_INFO, line | > VMCS_INTR_VALID | VMCS_INTR_T_HWINTR); > @@ -440,7 +440,7 @@ int hvf_process_events(CPUState *cpu_state) > } > > if (cpu_state->interrupt_request & CPU_INTERRUPT_POLL) { > - cpu_state->interrupt_request &= ~CPU_INTERRUPT_POLL; > + cpu_reset_interrupt(cpu_state, CPU_INTERRUPT_POLL); > apic_poll_irq(cpu->apic_state); > } > if (((cpu_state->interrupt_request & CPU_INTERRUPT_HARD) && > @@ -453,7 +453,7 @@ int hvf_process_events(CPUState *cpu_state) > do_cpu_sipi(cpu); > } > if (cpu_state->interrupt_request & CPU_INTERRUPT_TPR) { > - cpu_state->interrupt_request &= ~CPU_INTERRUPT_TPR; > + cpu_reset_interrupt(cpu_state, CPU_INTERRUPT_TPR); > hvf_cpu_synchronize_state(cpu_state); > apic_handle_tpr_access_report(cpu->apic_state, env->eip, > env->tpr_access_type); > diff --git a/target/i386/kvm.c b/target/i386/kvm.c > index d593818cd5..effaf87f01 100644 > --- a/target/i386/kvm.c > +++ b/target/i386/kvm.c > @@ -2709,7 +2709,7 @@ static int kvm_put_vcpu_events(X86CPU *cpu, int level) > */ > events.smi.pending = cs->interrupt_request & CPU_INTERRUPT_SMI; > events.smi.latched_init = cs->interrupt_request & > CPU_INTERRUPT_INIT; > - cs->interrupt_request &= ~(CPU_INTERRUPT_INIT | > CPU_INTERRUPT_SMI); > + cpu_reset_interrupt(cs, CPU_INTERRUPT_INIT | CPU_INTERRUPT_SMI); > } else { > /* Keep these in cs->interrupt_request. */ > events.smi.pending = 0; > @@ -3005,7 +3005,7 @@ void kvm_arch_pre_run(CPUState *cpu, struct kvm_run > *run) > if (cpu->interrupt_request & (CPU_INTERRUPT_NMI | CPU_INTERRUPT_SMI)) { > if (cpu->interrupt_request & CPU_INTERRUPT_NMI) { > qemu_mutex_lock_iothread(); > - cpu->interrupt_request &= ~CPU_INTERRUPT_NMI; > + cpu_reset_interrupt(cpu, CPU_INTERRUPT_NMI); > qemu_mutex_unlock_iothread(); > DPRINTF("injected NMI\n"); > ret = kvm_vcpu_ioctl(cpu, KVM_NMI); > @@ -3016,7 +3016,7 @@ void kvm_arch_pre_run(CPUState *cpu, struct kvm_run > *run) > } > if (cpu->interrupt_request & CPU_INTERRUPT_SMI) { > qemu_mutex_lock_iothread(); > - cpu->interrupt_request &= ~CPU_INTERRUPT_SMI; > + cpu_reset_interrupt(cpu, CPU_INTERRUPT_SMI); > qemu_mutex_unlock_iothread(); > DPRINTF("injected SMI\n"); > ret = kvm_vcpu_ioctl(cpu, KVM_SMI); > @@ -3052,7 +3052,7 @@ void kvm_arch_pre_run(CPUState *cpu, struct kvm_run > *run) > (env->eflags & IF_MASK)) { > int irq; > > - cpu->interrupt_request &= ~CPU_INTERRUPT_HARD; > + cpu_reset_interrupt(cpu, CPU_INTERRUPT_HARD); > irq = cpu_get_pic_interrupt(env); > if (irq >= 0) { > struct kvm_interrupt intr; > @@ -3123,7 +3123,7 @@ int kvm_arch_process_async_events(CPUState *cs) > /* We must not raise CPU_INTERRUPT_MCE if it's not supported. */ > assert(env->mcg_cap); > > - cs->interrupt_request &= ~CPU_INTERRUPT_MCE; > + cpu_reset_interrupt(cs, CPU_INTERRUPT_MCE); > > kvm_cpu_synchronize_state(cs); > > @@ -3153,7 +3153,7 @@ int kvm_arch_process_async_events(CPUState *cs) > } > > if (cs->interrupt_request & CPU_INTERRUPT_POLL) { > - cs->interrupt_request &= ~CPU_INTERRUPT_POLL; > + cpu_reset_interrupt(cs, CPU_INTERRUPT_POLL); > apic_poll_irq(cpu->apic_state); > } > if (((cs->interrupt_request & CPU_INTERRUPT_HARD) && > @@ -3166,7 +3166,7 @@ int kvm_arch_process_async_events(CPUState *cs) > do_cpu_sipi(cpu); > } > if (cs->interrupt_request & CPU_INTERRUPT_TPR) { > - cs->interrupt_request &= ~CPU_INTERRUPT_TPR; > + cpu_reset_interrupt(cs, CPU_INTERRUPT_TPR); > kvm_cpu_synchronize_state(cs); > apic_handle_tpr_access_report(cpu->apic_state, env->eip, > env->tpr_access_type); > diff --git a/target/i386/seg_helper.c b/target/i386/seg_helper.c > index 33714bc6e1..ac5497de79 100644 > --- a/target/i386/seg_helper.c > +++ b/target/i386/seg_helper.c > @@ -1332,7 +1332,7 @@ bool x86_cpu_exec_interrupt(CPUState *cs, int > interrupt_request) > switch (interrupt_request) { > #if !defined(CONFIG_USER_ONLY) > case CPU_INTERRUPT_POLL: > - cs->interrupt_request &= ~CPU_INTERRUPT_POLL; > + cpu_reset_interrupt(cs, CPU_INTERRUPT_POLL); > apic_poll_irq(cpu->apic_state); > break; > #endif > @@ -1341,23 +1341,22 @@ bool x86_cpu_exec_interrupt(CPUState *cs, int > interrupt_request) > break; > case CPU_INTERRUPT_SMI: > cpu_svm_check_intercept_param(env, SVM_EXIT_SMI, 0, 0); > - cs->interrupt_request &= ~CPU_INTERRUPT_SMI; > + cpu_reset_interrupt(cs, CPU_INTERRUPT_SMI); > do_smm_enter(cpu); > break; > case CPU_INTERRUPT_NMI: > cpu_svm_check_intercept_param(env, SVM_EXIT_NMI, 0, 0); > - cs->interrupt_request &= ~CPU_INTERRUPT_NMI; > + cpu_reset_interrupt(cs, CPU_INTERRUPT_NMI); > env->hflags2 |= HF2_NMI_MASK; > do_interrupt_x86_hardirq(env, EXCP02_NMI, 1); > break; > case CPU_INTERRUPT_MCE: > - cs->interrupt_request &= ~CPU_INTERRUPT_MCE; > + cpu_reset_interrupt(cs, CPU_INTERRUPT_MCE); > do_interrupt_x86_hardirq(env, EXCP12_MCHK, 0); > break; > case CPU_INTERRUPT_HARD: > cpu_svm_check_intercept_param(env, SVM_EXIT_INTR, 0, 0); > - cs->interrupt_request &= ~(CPU_INTERRUPT_HARD | > - CPU_INTERRUPT_VIRQ); > + cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD | CPU_INTERRUPT_VIRQ); > intno = cpu_get_pic_interrupt(env); > qemu_log_mask(CPU_LOG_TB_IN_ASM, > "Servicing hardware INT=0x%02x\n", intno); > @@ -1372,7 +1371,7 @@ bool x86_cpu_exec_interrupt(CPUState *cs, int > interrupt_request) > qemu_log_mask(CPU_LOG_TB_IN_ASM, > "Servicing virtual hardware INT=0x%02x\n", intno); > do_interrupt_x86_hardirq(env, intno, 1); > - cs->interrupt_request &= ~CPU_INTERRUPT_VIRQ; > + cpu_reset_interrupt(cs, CPU_INTERRUPT_VIRQ); > break; > #endif > } > diff --git a/target/i386/svm_helper.c b/target/i386/svm_helper.c > index 9fd22a883b..a6d33e55d8 100644 > --- a/target/i386/svm_helper.c > +++ b/target/i386/svm_helper.c > @@ -700,7 +700,7 @@ void do_vmexit(CPUX86State *env, uint32_t exit_code, > uint64_t exit_info_1) > env->hflags &= ~HF_GUEST_MASK; > env->intercept = 0; > env->intercept_exceptions = 0; > - cs->interrupt_request &= ~CPU_INTERRUPT_VIRQ; > + cpu_reset_interrupt(cs, CPU_INTERRUPT_VIRQ); > env->tsc_offset = 0; > > env->gdt.base = x86_ldq_phys(cs, env->vm_hsave + offsetof(struct vmcb, > diff --git a/target/i386/whpx-all.c b/target/i386/whpx-all.c > index b9c79ccd99..9673bdc219 100644 > --- a/target/i386/whpx-all.c > +++ b/target/i386/whpx-all.c > @@ -728,14 +728,14 @@ static void whpx_vcpu_pre_run(CPUState *cpu) > if (!vcpu->interruption_pending && > cpu->interrupt_request & (CPU_INTERRUPT_NMI | CPU_INTERRUPT_SMI)) { > if (cpu->interrupt_request & CPU_INTERRUPT_NMI) { > - cpu->interrupt_request &= ~CPU_INTERRUPT_NMI; > + cpu_reset_interrupt(cpu, CPU_INTERRUPT_NMI); > vcpu->interruptable = false; > new_int.InterruptionType = WHvX64PendingNmi; > new_int.InterruptionPending = 1; > new_int.InterruptionVector = 2; > } > if (cpu->interrupt_request & CPU_INTERRUPT_SMI) { > - cpu->interrupt_request &= ~CPU_INTERRUPT_SMI; > + cpu_reset_interrupt(cpu, CPU_INTERRUPT_SMI); > } > } > > @@ -758,7 +758,7 @@ static void whpx_vcpu_pre_run(CPUState *cpu) > vcpu->interruptable && (env->eflags & IF_MASK)) { > assert(!new_int.InterruptionPending); > if (cpu->interrupt_request & CPU_INTERRUPT_HARD) { > - cpu->interrupt_request &= ~CPU_INTERRUPT_HARD; > + cpu_reset_interrupt(cpu, CPU_INTERRUPT_HARD); > irq = cpu_get_pic_interrupt(env); > if (irq >= 0) { > new_int.InterruptionType = WHvX64PendingInterrupt; > @@ -850,7 +850,7 @@ static void whpx_vcpu_process_async_events(CPUState *cpu) > } > > if (cpu->interrupt_request & CPU_INTERRUPT_POLL) { > - cpu->interrupt_request &= ~CPU_INTERRUPT_POLL; > + cpu_reset_interrupt(cpu, CPU_INTERRUPT_POLL); > apic_poll_irq(x86_cpu->apic_state); > } > > @@ -868,7 +868,7 @@ static void whpx_vcpu_process_async_events(CPUState *cpu) > } > > if (cpu->interrupt_request & CPU_INTERRUPT_TPR) { > - cpu->interrupt_request &= ~CPU_INTERRUPT_TPR; > + cpu_reset_interrupt(cpu, CPU_INTERRUPT_TPR); > if (!cpu->vcpu_dirty) { > whpx_get_registers(cpu); > } -- Alex Bennée