| From c58958413f96f44a978421745d69a64b9192433a Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 3 Jul 2025 13:50:27 +0200 |
| Subject: s390/stp: Remove udelay from stp_sync_clock() |
| |
| From: Sven Schnelle <svens@linux.ibm.com> |
| |
| [ Upstream commit b367017cdac21781a74eff4e208d3d38e1f38d3f ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/s390/kernel/time.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c |
| index 6b7b6d5e3632..add2862e835b 100644 |
| --- a/arch/s390/kernel/time.c |
| +++ b/arch/s390/kernel/time.c |
| @@ -574,7 +574,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. */ |
| -- |
| 2.39.5 |
| |