• P
    memory: fix race between TCG and accesses to dirty bitmap · 9458a9a1
    Paolo Bonzini 提交于
    There is a race between TCG and accesses to the dirty log:
    
          vCPU thread                  reader thread
          -----------------------      -----------------------
          TLB check -> slow path
            notdirty_mem_write
              write to RAM
              set dirty flag
                                       clear dirty flag
          TLB check -> fast path
                                       read memory
            write to RAM
    
    Fortunately, in order to fix it, no change is required to the
    vCPU thread.  However, the reader thread must delay the read after
    the vCPU thread has finished the write.  This can be approximated
    conservatively by run_on_cpu, which waits for the end of the current
    translation block.
    
    A similar technique is used by KVM, which has to do a synchronous TLB
    flush after doing a test-and-clear of the dirty-page flags.
    Reported-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    9458a9a1
exec.c 125.3 KB