On Fri, Aug 29, 2025 at 10:18 AM Paolo Bonzini <pbonz...@redhat.com> wrote:
>
> On 8/26/25 10:47, Igor Mammedov wrote:
> > While overhead might be issue, it's better to have correcteness 1st.
> > (that's why blanket tree wide change to make sure we don't miss places that
> > set/test interrupts).
>
> Looking more at it, I found at least one place that sets interrupts
> without bql:
>
>      if (ctl_has_irq(env)) {
>          cpu_set_interrupt(cs, CPU_INTERRUPT_VIRQ);
>      }
>
> I'm going to squash this in:

Rethinking about it - this can be a separate patch that also affects
cpu_reset_interrupt(), as well as all cases where
cpu_reset_interrupt() is open coded.

Paolo

> diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
> index 1dee9d4c76e..5c3397fe108 100644
> --- a/include/hw/core/cpu.h
> +++ b/include/hw/core/cpu.h
> @@ -959,12 +959,13 @@ static inline bool cpu_test_interrupt(CPUState *cpu, 
> int mask)
>    * @cpu: The CPU to set pending interrupt(s) on.
>    * @mask: The interrupts to set.
>    *
> - * Sets interrupts in @mask as pending on @cpu.
> + * Sets interrupts in @mask as pending on @cpu.  Unlike @cpu_interrupt,
> + * this does not kick the vCPU.
>    */
>   static inline void cpu_set_interrupt(CPUState *cpu, int mask)
>   {
> -    qatomic_store_release(&cpu->interrupt_request,
> -        cpu->interrupt_request | mask);
> +    /* Pairs with cpu_test_interrupt(). */
> +    qatomic_or(&cpu->interrupt_request, mask);
>   }
>
>   /**
>


Reply via email to