• A
    cputlb: atomically update tlb fields used by tlb_reset_dirty · b0706b71
    Alex Bennée 提交于
    The main use case for tlb_reset_dirty is to set the TLB_NOTDIRTY flags
    in TLB entries to force the slow-path on writes. This is used to mark
    page ranges containing code which has been translated so it can be
    invalidated if written to. To do this safely we need to ensure the TLB
    entries in question for all vCPUs are updated before we attempt to run
    the code otherwise a race could be introduced.
    
    To achieve this we atomically set the flag in tlb_reset_dirty_range and
    take care when setting it when the TLB entry is filled.
    
    On 32 bit systems attempting to emulate 64 bit guests we don't even
    bother as we might not have the atomic primitives available. MTTCG is
    disabled in this case and can't be forced on. The copy_tlb_helper
    function helps keep the atomic semantics in one place to avoid
    confusion.
    
    The dirty helper function is made static as it isn't used outside of
    cputlb.
    Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
    Reviewed-by: NRichard Henderson <rth@twiddle.net>
    b0706b71
cputlb.h 960 字节