On Fri, 29 Aug 2025 14:33:57 +0200 Paolo Bonzini <pbonz...@redhat.com> wrote:
> 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. I can take care of replacing open coded cpu_reset_interrupt() cases (I've already looked through them, while answering reviewers questions) > > 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); > > } > > > > /** > > >