]> git.baikalelectronics.ru Git - kernel.git/commit
[S390] etr: fix clock synchronization race
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 27 Jul 2010 17:29:38 +0000 (19:29 +0200)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Tue, 27 Jul 2010 17:29:42 +0000 (19:29 +0200)
commit5bd87244571860e703365c5b1af936033be9832a
tree4a9a1cbad368c1f6c2c79e334c68f8ca04721b98
parent81a06aab17eedd2c1925f7de3813934e582c1f0b
[S390] etr: fix clock synchronization race

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: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/time.c