Skip to content
  • Pavel Dovgalyuk's avatar
    icount: decouple warp calls · e76d1798
    Pavel Dovgalyuk authored
    
    
    qemu_clock_warp function is called to update virtual clock when CPU
    is sleeping. This function includes replay checkpoint to make execution
    deterministic in icount mode.
    Record/replay module flushes async event queue at checkpoints.
    Some of the events (e.g., block devices operations) include interaction
    with hardware. E.g., APIC polled by block devices sets one of IRQ flags.
    Flag to be set depends on currently executed thread (CPU or iothread).
    Therefore in replay mode we have to process the checkpoints in the same thread
    as they were recorded.
    qemu_clock_warp function (and its checkpoint) may be called from different
    thread. This patch decouples two different execution cases of this function:
    call when CPU is sleeping from iothread and call from cpu thread to update
    virtual clock.
    First task is performed by qemu_start_warp_timer function. It sets warp
    timer event to the moment of nearest pending virtual timer.
    Second function (qemu_account_warp_timer) is called from cpu thread
    before execution of the code. It advances virtual clock by adding the length
    of period while CPU was sleeping.
    
    Signed-off-by: default avatarPavel Dovgalyuk <pavel.dovgaluk@ispras.ru>
    Message-Id: <20160310115609.4812.44986.stgit@PASHA-ISP>
    [Update docs. - Paolo]
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    e76d1798