Commit ab096a75 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

tcg: synchronize cpu->exit_request and cpu->tcg_exit_req accesses

parent b0a46fa7
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -507,8 +507,12 @@ int cpu_exec(CPUState *cpu)
                         * loop. Whatever requested the exit will also
                         * have set something else (eg exit_request or
                         * interrupt_request) which we will handle
                         * next time around the loop.
                         * next time around the loop.  But we need to
                         * ensure the tcg_exit_req read in generated code
                         * comes before the next read of cpu->exit_request
                         * or cpu->interrupt_request.
                         */
                        smp_rmb();
                        next_tb = 0;
                        break;
                    case TB_EXIT_ICOUNT_EXPIRED:
+2 −0
Original line number Diff line number Diff line
@@ -114,6 +114,8 @@ void cpu_reset_interrupt(CPUState *cpu, int mask)
void cpu_exit(CPUState *cpu)
{
    cpu->exit_request = 1;
    /* Ensure cpu_exec will see the exit request after TCG has exited.  */
    smp_wmb();
    cpu->tcg_exit_req = 1;
}