[lkml]   [2021]   [Feb]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
Subject[tip: timers/urgent] ntp: Use freezable workqueue for RTC synchronization
The following commit has been merged into the timers/urgent branch of tip:

Commit-ID: 24c242ec7abb3d21fa0b1da6bb251521dc1717b5
Author: Geert Uytterhoeven <>
AuthorDate: Mon, 25 Jan 2021 15:30:39 +01:00
Committer: Thomas Gleixner <>
CommitterDate: Fri, 05 Feb 2021 18:03:13 +01:00

ntp: Use freezable workqueue for RTC synchronization

The bug fixed by commit e3fab2f3de081e98 ("ntp: Fix RTC synchronization on
32-bit platforms") revealed an underlying issue: RTC synchronization may
happen anytime, even while the system is partially suspended.

On systems where the RTC is connected to an I2C bus, the I2C bus controller
may already or still be suspended, triggering a WARNING during suspend or
resume from s2ram:

WARNING: CPU: 0 PID: 124 at drivers/i2c/i2c-core.h:54 __i2c_transfer+0x634/0x680
i2c i2c-6: Transfer while suspended
Workqueue: events_power_efficient sync_hw_clock

Fix this race condition by using the freezable instead of the normal
power-efficient workqueue.

Signed-off-by: Geert Uytterhoeven <>
Signed-off-by: Thomas Gleixner <>
Acked-by: Rafael J. Wysocki <>

kernel/time/ntp.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
index 87389b9..5247afd 100644
--- a/kernel/time/ntp.c
+++ b/kernel/time/ntp.c
@@ -502,7 +502,7 @@ static struct hrtimer sync_hrtimer;

static enum hrtimer_restart sync_timer_callback(struct hrtimer *timer)
- queue_work(system_power_efficient_wq, &sync_work);
+ queue_work(system_freezable_power_efficient_wq, &sync_work);

@@ -668,7 +668,7 @@ void ntp_notify_cmos_timer(void)
* just a pointless work scheduled.
if (ntp_synced() && !hrtimer_is_queued(&sync_hrtimer))
- queue_work(system_power_efficient_wq, &sync_work);
+ queue_work(system_freezable_power_efficient_wq, &sync_work);

static void __init ntp_init_cmos_sync(void)
 \ /
  Last update: 2021-02-05 18:18    [W:0.093 / U:0.960 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site