Skip to content

Commit 8d71844

Browse files
committed
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer fixes from Thomas Gleixner: "Two fixes in the timer area: - a long-standing lock inversion due to a printk - suspend-related hrtimer corruption in sched_clock" * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: timer: Fix lock inversion between hrtimer_bases.lock and scheduler locks sched_clock: Avoid corrupting hrtimer tree during suspend
2 parents 3f9c08f + 504d587 commit 8d71844

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

kernel/time/clockevents.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,8 @@ static int clockevents_increase_min_delta(struct clock_event_device *dev)
146146
{
147147
/* Nothing to do if we already reached the limit */
148148
if (dev->min_delta_ns >= MIN_DELTA_LIMIT) {
149-
printk(KERN_WARNING "CE: Reprogramming failure. Giving up\n");
149+
printk_deferred(KERN_WARNING
150+
"CE: Reprogramming failure. Giving up\n");
150151
dev->next_event.tv64 = KTIME_MAX;
151152
return -ETIME;
152153
}
@@ -159,9 +160,10 @@ static int clockevents_increase_min_delta(struct clock_event_device *dev)
159160
if (dev->min_delta_ns > MIN_DELTA_LIMIT)
160161
dev->min_delta_ns = MIN_DELTA_LIMIT;
161162

162-
printk(KERN_WARNING "CE: %s increased min_delta_ns to %llu nsec\n",
163-
dev->name ? dev->name : "?",
164-
(unsigned long long) dev->min_delta_ns);
163+
printk_deferred(KERN_WARNING
164+
"CE: %s increased min_delta_ns to %llu nsec\n",
165+
dev->name ? dev->name : "?",
166+
(unsigned long long) dev->min_delta_ns);
165167
return 0;
166168
}
167169

kernel/time/sched_clock.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,14 +191,16 @@ void __init sched_clock_postinit(void)
191191

192192
static int sched_clock_suspend(void)
193193
{
194-
sched_clock_poll(&sched_clock_timer);
194+
update_sched_clock();
195+
hrtimer_cancel(&sched_clock_timer);
195196
cd.suspended = true;
196197
return 0;
197198
}
198199

199200
static void sched_clock_resume(void)
200201
{
201202
cd.epoch_cyc = read_sched_clock();
203+
hrtimer_start(&sched_clock_timer, cd.wrap_kt, HRTIMER_MODE_REL);
202204
cd.suspended = false;
203205
}
204206

0 commit comments

Comments
 (0)