[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v4 33/71] i386: use cpu_reset_interrupt
From: |
Alex Bennée |
Subject: |
Re: [Qemu-devel] [RFC v4 33/71] i386: use cpu_reset_interrupt |
Date: |
Wed, 31 Oct 2018 16:34:35 +0000 |
User-agent: |
mu4e 1.1.0; emacs 26.1.50 |
Emilio G. Cota <address@hidden> writes:
> From: Paolo Bonzini <address@hidden>
>
> Reviewed-by: Richard Henderson <address@hidden>
> Signed-off-by: Paolo Bonzini <address@hidden>
> Signed-off-by: Emilio G. Cota <address@hidden>
Reviewed-by: Alex Bennée <address@hidden>
> ---
> 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
- Re: [Qemu-devel] [RFC v4 46/71] lm32: convert to cpu_interrupt_request, (continued)
- [Qemu-devel] [RFC v4 58/71] cpu: call .cpu_has_work with the CPU lock held, Emilio G. Cota, 2018/10/25
- [Qemu-devel] [RFC v4 45/71] hppa: convert to cpu_interrupt_request, Emilio G. Cota, 2018/10/25
- [Qemu-devel] [RFC v4 35/71] openrisc: use cpu_reset_interrupt, Emilio G. Cota, 2018/10/25
- [Qemu-devel] [RFC v4 37/71] i386: convert to cpu_interrupt_request, Emilio G. Cota, 2018/10/25
- [Qemu-devel] [RFC v4 33/71] i386: use cpu_reset_interrupt, Emilio G. Cota, 2018/10/25
- Re: [Qemu-devel] [RFC v4 33/71] i386: use cpu_reset_interrupt,
Alex Bennée <=
- [Qemu-devel] [RFC v4 17/71] ppc: convert to cpu_halted, Emilio G. Cota, 2018/10/25
- [Qemu-devel] [RFC v4 18/71] sh4: convert to cpu_halted, Emilio G. Cota, 2018/10/25
- [Qemu-devel] [RFC v4 32/71] exec: use cpu_reset_interrupt, Emilio G. Cota, 2018/10/25
- [Qemu-devel] [RFC v4 21/71] m68k: convert to cpu_halted, Emilio G. Cota, 2018/10/25