• Martin Schwidefsky's avatar
    [S390] etr: fix clock synchronization race · 33fea794
    Martin Schwidefsky authored
    The etr events switch-to-local and sync-check disable the synchronous clock
    and schedule a work queue that tries to get the clock back into sync.
    If another switch-to-local or sync-check event occurs while the work queue
    function etr_work_fn still runs the eacr.es bit and the clock_sync_word can
    become inconsistent because check_sync_clock only uses the clock_sync_word
    to determine if the clock is in sync or not. The second pass of the
    etr_work_fn will reset the eacr.es bit but will leave the clock_sync_word
    intact. Fix this race by moving the reset of the eacr.es bit into the
    switch-to-local and sync-check functions and by checking the eacr.es bit
    as well to decide if the clock needs to be synced.
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    33fea794
time.c 45.7 KB