cpu-common: use atomic access for interrupt_request
Writes to interrupt_request used non-atomic accesses, but there are a few cases where the access was not protected by the BQL. Now that there is a full set of helpers, it's easier to guarantee that interrupt_request accesses are fully atomic, so just drop the requirement instead of fixing them. Reviewed-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
602d5ebba2
commit
27e76d0101
3 changed files with 2 additions and 14 deletions
|
|
@ -67,19 +67,9 @@ CPUState *cpu_create(const char *typename)
|
|||
return cpu;
|
||||
}
|
||||
|
||||
/* Resetting the IRQ comes from across the code base so we take the
|
||||
* BQL here if we need to. cpu_interrupt assumes it is held.*/
|
||||
void cpu_reset_interrupt(CPUState *cpu, int mask)
|
||||
{
|
||||
bool need_lock = !bql_locked();
|
||||
|
||||
if (need_lock) {
|
||||
bql_lock();
|
||||
}
|
||||
cpu->interrupt_request &= ~mask;
|
||||
if (need_lock) {
|
||||
bql_unlock();
|
||||
}
|
||||
qatomic_and(&cpu->interrupt_request, ~mask);
|
||||
}
|
||||
|
||||
void cpu_exit(CPUState *cpu)
|
||||
|
|
|
|||
|
|
@ -495,7 +495,6 @@ struct CPUState {
|
|||
bool exit_request;
|
||||
int exclusive_context_count;
|
||||
uint32_t cflags_next_tb;
|
||||
/* updates protected by BQL */
|
||||
uint32_t interrupt_request;
|
||||
int singlestep_enabled;
|
||||
int64_t icount_budget;
|
||||
|
|
|
|||
|
|
@ -257,8 +257,7 @@ int64_t cpus_get_elapsed_ticks(void)
|
|||
void cpu_set_interrupt(CPUState *cpu, int mask)
|
||||
{
|
||||
/* Pairs with cpu_test_interrupt(). */
|
||||
qatomic_store_release(&cpu->interrupt_request,
|
||||
cpu->interrupt_request | mask);
|
||||
qatomic_or(&cpu->interrupt_request, mask);
|
||||
}
|
||||
|
||||
void generic_handle_interrupt(CPUState *cpu, int mask)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue