From: Sven Schnelle Date: Thu, 10 Jul 2025 07:43:40 +0000 (+0200) Subject: s390/sclp: Use monotonic clock in sclp_sync_wait() X-Git-Tag: v6.16.2~349 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cad8c5b7d137c1f8be6203d70c1ac870fcd3afc6;p=thirdparty%2Fkernel%2Fstable.git s390/sclp: Use monotonic clock in sclp_sync_wait() [ Upstream commit 925f0707a67cae0a974c4bd5b718f0263dc56824 ] sclp_sync_wait() should use the monotonic clock for the delay loop. Otherwise the code won't work correctly when the clock is changed. Signed-off-by: Sven Schnelle Reviewed-by: Heiko Carstens Signed-off-by: Alexander Gordeev Signed-off-by: Sasha Levin --- diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c index 840be75e75d41..9a55e2d04e633 100644 --- a/drivers/s390/char/sclp.c +++ b/drivers/s390/char/sclp.c @@ -719,7 +719,7 @@ sclp_sync_wait(void) timeout = 0; if (timer_pending(&sclp_request_timer)) { /* Get timeout TOD value */ - timeout = get_tod_clock_fast() + + timeout = get_tod_clock_monotonic() + sclp_tod_from_jiffies(sclp_request_timer.expires - jiffies); } @@ -739,7 +739,7 @@ sclp_sync_wait(void) /* Loop until driver state indicates finished request */ while (sclp_running_state != sclp_running_state_idle) { /* Check for expired request timer */ - if (get_tod_clock_fast() > timeout && timer_delete(&sclp_request_timer)) + if (get_tod_clock_monotonic() > timeout && timer_delete(&sclp_request_timer)) sclp_request_timer.function(&sclp_request_timer); cpu_relax(); }