]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
s390/stp: Remove udelay from stp_sync_clock()
authorSven Schnelle <svens@linux.ibm.com>
Thu, 3 Jul 2025 11:50:27 +0000 (13:50 +0200)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Thu, 10 Jul 2025 12:42:10 +0000 (14:42 +0200)
When an stp sync check is handled on a system with multiple
cpus each cpu gets a machine check but only the first one
actually handles the sync operation. All other CPUs spin
waiting for the first one to finish with a short udelay().
But udelay can't be used here as the first CPU modifies tod_clock_base
before performing the sync op. During this timeframe
get_tod_clock_monotonic() might return a non-monotonic time.

The time spent waiting should be very short and udelay is a busy loop
anyways, therefore simply remove the udelay.

Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/kernel/time.c

index fed17d407a444209cdc074282de8d5ab2fff3e23..cb7ed55e24d206a9da1b70f93e6d8152f75693b6 100644 (file)
@@ -580,7 +580,7 @@ static int stp_sync_clock(void *data)
                atomic_dec(&sync->cpus);
                /* Wait for in_sync to be set. */
                while (READ_ONCE(sync->in_sync) == 0)
-                       __udelay(1);
+                       ;
        }
        if (sync->in_sync != 1)
                /* Didn't work. Clear per-cpu in sync bit again. */