From: Igor Mammedov <imammedo@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org, peterx@redhat.com, richard.henderson@linaro.org
Subject: Re: [PATCH 06/18] treewide: clear bits of cs->interrupt_request with cpu_reset_interrupt()
Date: Mon, 1 Sep 2025 14:59:44 +0200 [thread overview]
Message-ID: <20250901145944.4e83030f@fedora> (raw)
In-Reply-To: <20250829153115.1590048-2-pbonzini@redhat.com>
On Fri, 29 Aug 2025 17:31:03 +0200
Paolo Bonzini <pbonzini@redhat.com> wrote:
beside nit below
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> accel/tcg/cpu-exec.c | 6 +++---
> hw/core/cpu-system.c | 2 +-
> target/avr/helper.c | 4 ++--
> target/i386/hvf/x86hvf.c | 8 ++++----
> target/i386/kvm/kvm.c | 14 +++++++-------
> target/i386/nvmm/nvmm-all.c | 10 +++++-----
> target/i386/tcg/system/seg_helper.c | 13 ++++++-------
> target/i386/tcg/system/svm_helper.c | 2 +-
> target/i386/whpx/whpx-all.c | 12 ++++++------
> target/openrisc/sys_helper.c | 2 +-
> target/rx/helper.c | 4 ++--
> target/s390x/tcg/excp_helper.c | 2 +-
> 12 files changed, 39 insertions(+), 40 deletions(-)
>
> diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c
> index 8491e5badd1..508d2d2d9e2 100644
> --- a/accel/tcg/cpu-exec.c
> +++ b/accel/tcg/cpu-exec.c
> @@ -784,7 +784,7 @@ static inline bool cpu_handle_interrupt(CPUState *cpu,
> if (unlikely(cpu_test_interrupt(cpu, ~0))) {
> bql_lock();
> if (cpu_test_interrupt(cpu, CPU_INTERRUPT_DEBUG)) {
> - cpu->interrupt_request &= ~CPU_INTERRUPT_DEBUG;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_DEBUG);
> cpu->exception_index = EXCP_DEBUG;
> bql_unlock();
> return true;
> @@ -793,7 +793,7 @@ static inline bool cpu_handle_interrupt(CPUState *cpu,
> /* Do nothing */
> } else if (cpu_test_interrupt(cpu, CPU_INTERRUPT_HALT)) {
> replay_interrupt();
> - cpu->interrupt_request &= ~CPU_INTERRUPT_HALT;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_HALT);
> cpu->halted = 1;
> cpu->exception_index = EXCP_HLT;
> bql_unlock();
> @@ -840,7 +840,7 @@ static inline bool cpu_handle_interrupt(CPUState *cpu,
> }
> }
> if (cpu_test_interrupt(cpu, CPU_INTERRUPT_EXITTB)) {
> - cpu->interrupt_request &= ~CPU_INTERRUPT_EXITTB;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_EXITTB);
> /* ensure that no TB jump will be modified as
> the program flow was changed */
> *last_tb = NULL;
> diff --git a/hw/core/cpu-system.c b/hw/core/cpu-system.c
> index a975405d3a0..09c928c1f92 100644
> --- a/hw/core/cpu-system.c
> +++ b/hw/core/cpu-system.c
> @@ -204,7 +204,7 @@ static int cpu_common_post_load(void *opaque, int version_id)
> * 0x01 was CPU_INTERRUPT_EXIT. This line can be removed when the
> * version_id is increased.
> */
> - cpu->interrupt_request &= ~0x01;
> + cpu_reset_interrupt(cpu, 0x01);
>
> tlb_flush(cpu);
>
> diff --git a/target/avr/helper.c b/target/avr/helper.c
> index b9cd6d5ef27..4b29ab35263 100644
> --- a/target/avr/helper.c
> +++ b/target/avr/helper.c
> @@ -47,7 +47,7 @@ bool avr_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
> cs->exception_index = EXCP_RESET;
> avr_cpu_do_interrupt(cs);
>
> - cs->interrupt_request &= ~CPU_INTERRUPT_RESET;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_RESET);
> return true;
> }
> }
> @@ -59,7 +59,7 @@ bool avr_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
>
> env->intsrc &= env->intsrc - 1; /* clear the interrupt */
> if (!env->intsrc) {
> - cs->interrupt_request &= ~CPU_INTERRUPT_HARD;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
> }
> return true;
> }
> diff --git a/target/i386/hvf/x86hvf.c b/target/i386/hvf/x86hvf.c
> index 9e05e0e5765..a502437c303 100644
> --- a/target/i386/hvf/x86hvf.c
> +++ b/target/i386/hvf/x86hvf.c
> @@ -397,7 +397,7 @@ bool hvf_inject_interrupts(CPUState *cs)
>
> if (cpu_test_interrupt(cs, CPU_INTERRUPT_NMI)) {
> if (!(env->hflags2 & HF2_NMI_MASK) && !(info & VMCS_INTR_VALID)) {
> - cs->interrupt_request &= ~CPU_INTERRUPT_NMI;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_NMI);
> info = VMCS_INTR_VALID | VMCS_INTR_T_NMI | EXCP02_NMI;
> wvmcs(cs->accel->fd, VMCS_ENTRY_INTR_INFO, info);
> } else {
> @@ -409,7 +409,7 @@ bool hvf_inject_interrupts(CPUState *cs)
> cpu_test_interrupt(cs, CPU_INTERRUPT_HARD) &&
> (env->eflags & IF_MASK) && !(info & VMCS_INTR_VALID)) {
> int line = cpu_get_pic_interrupt(env);
> - cs->interrupt_request &= ~CPU_INTERRUPT_HARD;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
> if (line >= 0) {
> wvmcs(cs->accel->fd, VMCS_ENTRY_INTR_INFO, line |
> VMCS_INTR_VALID | VMCS_INTR_T_HWINTR);
> @@ -437,7 +437,7 @@ int hvf_process_events(CPUState *cs)
> }
>
> if (cpu_test_interrupt(cs, CPU_INTERRUPT_POLL)) {
> - cs->interrupt_request &= ~CPU_INTERRUPT_POLL;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_POLL);
> apic_poll_irq(cpu->apic_state);
> }
> if ((cpu_test_interrupt(cs, CPU_INTERRUPT_HARD) &&
> @@ -450,7 +450,7 @@ int hvf_process_events(CPUState *cs)
> do_cpu_sipi(cpu);
> }
> if (cpu_test_interrupt(cs, CPU_INTERRUPT_TPR)) {
> - cs->interrupt_request &= ~CPU_INTERRUPT_TPR;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_TPR);
> cpu_synchronize_state(cs);
> apic_handle_tpr_access_report(cpu->apic_state, env->eip,
> env->tpr_access_type);
> diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
> index 306430a0521..8420c4090ef 100644
> --- a/target/i386/kvm/kvm.c
> +++ b/target/i386/kvm/kvm.c
> @@ -5066,7 +5066,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);
this was called without BQL in kvm_cpu_exec(),
perhaps mention in commit message that beside replacing
open coded interrupt reset commit also fixes potential bug since
cpu_reset_interrupt() would take BQL now. (or make this hunk a separate patch)
not sure but perhaps the same applies to hunk in target/i386/tcg/system/svm_helper.c
> } else {
> /* Keep these in cs->interrupt_request. */
> events.smi.pending = 0;
> @@ -5456,7 +5456,7 @@ void kvm_arch_pre_run(CPUState *cpu, struct kvm_run *run)
> if (cpu_test_interrupt(cpu, CPU_INTERRUPT_NMI | CPU_INTERRUPT_SMI)) {
> if (cpu_test_interrupt(cpu, CPU_INTERRUPT_NMI)) {
> bql_lock();
> - cpu->interrupt_request &= ~CPU_INTERRUPT_NMI;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_NMI);
> bql_unlock();
> DPRINTF("injected NMI\n");
> ret = kvm_vcpu_ioctl(cpu, KVM_NMI);
> @@ -5467,7 +5467,7 @@ void kvm_arch_pre_run(CPUState *cpu, struct kvm_run *run)
> }
> if (cpu_test_interrupt(cpu, CPU_INTERRUPT_SMI)) {
> bql_lock();
> - cpu->interrupt_request &= ~CPU_INTERRUPT_SMI;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_SMI);
> bql_unlock();
> DPRINTF("injected SMI\n");
> ret = kvm_vcpu_ioctl(cpu, KVM_SMI);
> @@ -5502,7 +5502,7 @@ void kvm_arch_pre_run(CPUState *cpu, struct kvm_run *run)
>
> bql_lock();
>
> - 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;
> @@ -5597,7 +5597,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);
>
> @@ -5627,7 +5627,7 @@ int kvm_arch_process_async_events(CPUState *cs)
> }
>
> if (cpu_test_interrupt(cs, CPU_INTERRUPT_POLL)) {
> - cs->interrupt_request &= ~CPU_INTERRUPT_POLL;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_POLL);
> apic_poll_irq(cpu->apic_state);
> }
> if ((cpu_test_interrupt(cs, CPU_INTERRUPT_HARD) &&
> @@ -5640,7 +5640,7 @@ int kvm_arch_process_async_events(CPUState *cs)
> do_cpu_sipi(cpu);
> }
> if (cpu_test_interrupt(cs, 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/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c
> index c1ac74c4f04..e1151b04c6e 100644
> --- a/target/i386/nvmm/nvmm-all.c
> +++ b/target/i386/nvmm/nvmm-all.c
> @@ -419,7 +419,7 @@ nvmm_vcpu_pre_run(CPUState *cpu)
>
> if (!has_event && cpu_test_interrupt(cpu, CPU_INTERRUPT_NMI)) {
> if (nvmm_can_take_nmi(cpu)) {
> - cpu->interrupt_request &= ~CPU_INTERRUPT_NMI;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_NMI);
> event->type = NVMM_VCPU_EVENT_INTR;
> event->vector = 2;
> has_event = true;
> @@ -428,7 +428,7 @@ nvmm_vcpu_pre_run(CPUState *cpu)
>
> if (!has_event && cpu_test_interrupt(cpu, CPU_INTERRUPT_HARD)) {
> if (nvmm_can_take_int(cpu)) {
> - cpu->interrupt_request &= ~CPU_INTERRUPT_HARD;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_HARD);
> event->type = NVMM_VCPU_EVENT_INTR;
> event->vector = cpu_get_pic_interrupt(env);
> has_event = true;
> @@ -437,7 +437,7 @@ nvmm_vcpu_pre_run(CPUState *cpu)
>
> /* Don't want SMIs. */
> if (cpu_test_interrupt(cpu, CPU_INTERRUPT_SMI)) {
> - cpu->interrupt_request &= ~CPU_INTERRUPT_SMI;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_SMI);
> }
>
> if (sync_tpr) {
> @@ -697,7 +697,7 @@ nvmm_vcpu_loop(CPUState *cpu)
> /* set int/nmi windows back to the reset state */
> }
> if (cpu_test_interrupt(cpu, CPU_INTERRUPT_POLL)) {
> - cpu->interrupt_request &= ~CPU_INTERRUPT_POLL;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_POLL);
> apic_poll_irq(x86_cpu->apic_state);
> }
> if ((cpu_test_interrupt(cpu, CPU_INTERRUPT_HARD) &&
> @@ -710,7 +710,7 @@ nvmm_vcpu_loop(CPUState *cpu)
> do_cpu_sipi(x86_cpu);
> }
> if (cpu_test_interrupt(cpu, CPU_INTERRUPT_TPR)) {
> - cpu->interrupt_request &= ~CPU_INTERRUPT_TPR;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_TPR);
> nvmm_cpu_synchronize_state(cpu);
> apic_handle_tpr_access_report(x86_cpu->apic_state, env->eip,
> env->tpr_access_type);
> diff --git a/target/i386/tcg/system/seg_helper.c b/target/i386/tcg/system/seg_helper.c
> index 794a23ddfc4..38072e51d72 100644
> --- a/target/i386/tcg/system/seg_helper.c
> +++ b/target/i386/tcg/system/seg_helper.c
> @@ -178,7 +178,7 @@ bool x86_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
> */
> switch (interrupt_request) {
> case CPU_INTERRUPT_POLL:
> - cs->interrupt_request &= ~CPU_INTERRUPT_POLL;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_POLL);
> apic_poll_irq(cpu->apic_state);
> break;
> case CPU_INTERRUPT_SIPI:
> @@ -186,23 +186,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_INT,
> "Servicing hardware INT=0x%02x\n", intno);
> @@ -215,7 +214,7 @@ bool x86_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
> qemu_log_mask(CPU_LOG_INT,
> "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);
> env->int_ctl &= ~V_IRQ_MASK;
> break;
> }
> diff --git a/target/i386/tcg/system/svm_helper.c b/target/i386/tcg/system/svm_helper.c
> index 3569196bdda..505788b0e26 100644
> --- a/target/i386/tcg/system/svm_helper.c
> +++ b/target/i386/tcg/system/svm_helper.c
> @@ -824,7 +824,7 @@ void do_vmexit(CPUX86State *env)
> env->intercept_exceptions = 0;
>
> /* Clears the V_IRQ and V_INTR_MASKING bits inside the processor. */
> - cs->interrupt_request &= ~CPU_INTERRUPT_VIRQ;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_VIRQ);
> env->int_ctl = 0;
>
> /* Clears the TSC_OFFSET inside the processor. */
> diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c
> index 878cdd1668c..c09a0a64f22 100644
> --- a/target/i386/whpx/whpx-all.c
> +++ b/target/i386/whpx/whpx-all.c
> @@ -1471,14 +1471,14 @@ static void whpx_vcpu_pre_run(CPUState *cpu)
> if (!vcpu->interruption_pending &&
> cpu_test_interrupt(cpu, CPU_INTERRUPT_NMI | CPU_INTERRUPT_SMI)) {
> if (cpu_test_interrupt(cpu, 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_test_interrupt(cpu, CPU_INTERRUPT_SMI)) {
> - cpu->interrupt_request &= ~CPU_INTERRUPT_SMI;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_SMI);
> }
> }
>
> @@ -1502,7 +1502,7 @@ static void whpx_vcpu_pre_run(CPUState *cpu)
> vcpu->interruptable && (env->eflags & IF_MASK)) {
> assert(!new_int.InterruptionPending);
> if (cpu_test_interrupt(cpu, 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;
> @@ -1520,7 +1520,7 @@ static void whpx_vcpu_pre_run(CPUState *cpu)
> }
> } else if (vcpu->ready_for_pic_interrupt &&
> cpu_test_interrupt(cpu, 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) {
> reg_names[reg_count] = WHvRegisterPendingEvent;
> @@ -1607,7 +1607,7 @@ static void whpx_vcpu_process_async_events(CPUState *cpu)
> }
>
> if (cpu_test_interrupt(cpu, CPU_INTERRUPT_POLL)) {
> - cpu->interrupt_request &= ~CPU_INTERRUPT_POLL;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_POLL);
> apic_poll_irq(x86_cpu->apic_state);
> }
>
> @@ -1623,7 +1623,7 @@ static void whpx_vcpu_process_async_events(CPUState *cpu)
> }
>
> if (cpu_test_interrupt(cpu, CPU_INTERRUPT_TPR)) {
> - cpu->interrupt_request &= ~CPU_INTERRUPT_TPR;
> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_TPR);
> whpx_cpu_synchronize_state(cpu);
> apic_handle_tpr_access_report(x86_cpu->apic_state, env->eip,
> env->tpr_access_type);
> diff --git a/target/openrisc/sys_helper.c b/target/openrisc/sys_helper.c
> index d96b41a01c2..b091a9c6685 100644
> --- a/target/openrisc/sys_helper.c
> +++ b/target/openrisc/sys_helper.c
> @@ -196,7 +196,7 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb)
> env->ttmr = (rb & ~TTMR_IP) | ip;
> } else { /* Clear IP bit. */
> env->ttmr = rb & ~TTMR_IP;
> - cs->interrupt_request &= ~CPU_INTERRUPT_TIMER;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_TIMER);
> }
> cpu_openrisc_timer_update(cpu);
> bql_unlock();
> diff --git a/target/rx/helper.c b/target/rx/helper.c
> index ce003af4219..41c9606fd1d 100644
> --- a/target/rx/helper.c
> +++ b/target/rx/helper.c
> @@ -63,7 +63,7 @@ void rx_cpu_do_interrupt(CPUState *cs)
> env->bpsw = save_psw;
> env->pc = env->fintv;
> env->psw_ipl = 15;
> - cs->interrupt_request &= ~CPU_INTERRUPT_FIR;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_FIR);
> qemu_set_irq(env->ack, env->ack_irq);
> qemu_log_mask(CPU_LOG_INT, "fast interrupt raised\n");
> } else if (do_irq & CPU_INTERRUPT_HARD) {
> @@ -73,7 +73,7 @@ void rx_cpu_do_interrupt(CPUState *cs)
> cpu_stl_data(env, env->isp, env->pc);
> env->pc = cpu_ldl_data(env, env->intb + env->ack_irq * 4);
> env->psw_ipl = env->ack_ipl;
> - cs->interrupt_request &= ~CPU_INTERRUPT_HARD;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
> qemu_set_irq(env->ack, env->ack_irq);
> qemu_log_mask(CPU_LOG_INT,
> "interrupt 0x%02x raised\n", env->ack_irq);
> diff --git a/target/s390x/tcg/excp_helper.c b/target/s390x/tcg/excp_helper.c
> index e4c75d0ce01..4c7faeee82b 100644
> --- a/target/s390x/tcg/excp_helper.c
> +++ b/target/s390x/tcg/excp_helper.c
> @@ -559,7 +559,7 @@ try_deliver:
>
> /* we might still have pending interrupts, but not deliverable */
> if (!env->pending_int && !qemu_s390_flic_has_any(flic)) {
> - cs->interrupt_request &= ~CPU_INTERRUPT_HARD;
> + cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
> }
>
> /* WAIT PSW during interrupt injection or STOP interrupt */
next prev parent reply other threads:[~2025-09-01 13:00 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-29 15:28 [PATCH v2 00/18] accel, cpus: clean up cpu->exit_request Paolo Bonzini
2025-08-29 15:28 ` [PATCH 01/18] target/ppc: limit cpu_interrupt_exittb to system emulation Paolo Bonzini
2025-08-29 21:32 ` Richard Henderson
2025-09-01 13:03 ` Igor Mammedov
2025-08-29 15:28 ` [PATCH 02/18] target/sparc: limit cpu_check_irqs " Paolo Bonzini
2025-08-29 21:32 ` Richard Henderson
2025-09-01 11:20 ` Philippe Mathieu-Daudé
2025-08-29 15:28 ` [PATCH 03/18] target/i386: limit a20 " Paolo Bonzini
2025-08-29 21:32 ` Richard Henderson
2025-09-01 7:44 ` Philippe Mathieu-Daudé
2025-09-01 13:05 ` Igor Mammedov
2025-08-29 15:28 ` [PATCH 04/18] target-arm: remove uses of cpu_interrupt() for user-mode emulation Paolo Bonzini
2025-08-29 22:18 ` Richard Henderson
2025-08-29 15:31 ` [PATCH 05/18] user-exec: remove cpu_interrupt() stub Paolo Bonzini
2025-08-29 21:33 ` Richard Henderson
2025-09-01 11:22 ` Philippe Mathieu-Daudé
2025-08-29 15:31 ` [PATCH 06/18] treewide: clear bits of cs->interrupt_request with cpu_reset_interrupt() Paolo Bonzini
2025-08-29 21:34 ` Richard Henderson
2025-09-01 11:23 ` Philippe Mathieu-Daudé
2025-09-01 11:35 ` Philippe Mathieu-Daudé
2025-09-01 12:59 ` Igor Mammedov [this message]
2025-08-29 15:31 ` [PATCH 07/18] cpu-common: use atomic access for interrupt_request Paolo Bonzini
2025-08-29 21:38 ` Richard Henderson
2025-09-01 8:00 ` Philippe Mathieu-Daudé
2025-09-01 13:01 ` Igor Mammedov
2025-08-29 15:31 ` [PATCH 08/18] cpus: document that qemu_cpu_kick() can be used for BQL-less operation Paolo Bonzini
2025-08-29 21:39 ` Richard Henderson
2025-08-29 15:31 ` [PATCH 09/18] accel: use store_release/load_acquire for cross-thread exit_request Paolo Bonzini
2025-09-01 13:13 ` Igor Mammedov
2025-08-29 15:31 ` [PATCH 10/18] accel: use atomic accesses for exit_request Paolo Bonzini
2025-09-01 13:15 ` Igor Mammedov
2025-08-29 15:31 ` [PATCH 11/18] accel/tcg: create a thread-kick function for TCG Paolo Bonzini
2025-08-29 21:41 ` Richard Henderson
2025-09-01 8:03 ` Philippe Mathieu-Daudé
2025-09-01 13:19 ` Igor Mammedov
2025-08-29 15:31 ` [PATCH 12/18] accel/tcg: inline cpu_exit() Paolo Bonzini
2025-08-29 21:41 ` Richard Henderson
2025-09-01 13:21 ` Igor Mammedov
2025-08-29 15:31 ` [PATCH 13/18] cpus: remove TCG-ism from cpu_exit() Paolo Bonzini
2025-09-01 13:22 ` Igor Mammedov
2025-08-29 15:31 ` [PATCH 14/18] cpus: properly kick CPUs out of inner execution loop Paolo Bonzini
2025-08-29 21:56 ` Richard Henderson
2025-08-29 23:05 ` Paolo Bonzini
2025-08-30 3:04 ` Richard Henderson
2025-08-29 15:31 ` [PATCH 15/18] bsd-user, linux-user: introduce qemu_wait_io_event Paolo Bonzini
2025-08-29 22:11 ` Richard Henderson
2025-09-01 11:32 ` Philippe Mathieu-Daudé
2025-08-29 15:31 ` [PATCH 16/18] cpus: clear exit_request in qemu_wait_io_event Paolo Bonzini
2025-08-29 22:11 ` Richard Henderson
2025-08-29 22:19 ` Paolo Bonzini
2025-09-01 13:32 ` Igor Mammedov
2025-08-29 15:31 ` [PATCH 17/18] accel: make all calls to qemu_wait_io_event look the same Paolo Bonzini
2025-08-29 22:16 ` Richard Henderson
2025-09-01 11:29 ` Philippe Mathieu-Daudé
2025-09-01 11:31 ` Philippe Mathieu-Daudé
2025-09-01 13:32 ` Igor Mammedov
2025-08-29 15:31 ` [PATCH 18/18] tcg/user: do not set exit_request gratuitously Paolo Bonzini
2025-09-01 13:33 ` Igor Mammedov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250901145944.4e83030f@fedora \
--to=imammedo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).