aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-06-29 13:27:19 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-06-29 13:27:19 -0400
commita75930c6332f39bfe05059259e13cdee54933f9f (patch)
treee92a45d119cf8a8f7694669169c93971be9f5bbe /kernel
parent82d0b80ad6346cee3200b7c7bb1fc975481b7703 (diff)
parentea8deb8dfa6b0e8d1b3d1051585706739b46656c (diff)
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer fix from Thomas Gleixner: "Correct an ordering issue in the tick broadcast code. I really wish we'd get compensation for pain and suffering for each line of code we write to work around dysfunctional timer hardware." * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: tick: Fix tick_broadcast_pending_mask not cleared
Diffstat (limited to 'kernel')
-rw-r--r--kernel/time/tick-broadcast.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c
index b4c245580b79..20d6fba70652 100644
--- a/kernel/time/tick-broadcast.c
+++ b/kernel/time/tick-broadcast.c
@@ -599,8 +599,6 @@ void tick_broadcast_oneshot_control(unsigned long reason)
599 } else { 599 } else {
600 if (cpumask_test_and_clear_cpu(cpu, tick_broadcast_oneshot_mask)) { 600 if (cpumask_test_and_clear_cpu(cpu, tick_broadcast_oneshot_mask)) {
601 clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT); 601 clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT);
602 if (dev->next_event.tv64 == KTIME_MAX)
603 goto out;
604 /* 602 /*
605 * The cpu which was handling the broadcast 603 * The cpu which was handling the broadcast
606 * timer marked this cpu in the broadcast 604 * timer marked this cpu in the broadcast
@@ -615,6 +613,11 @@ void tick_broadcast_oneshot_control(unsigned long reason)
615 goto out; 613 goto out;
616 614
617 /* 615 /*
616 * Bail out if there is no next event.
617 */
618 if (dev->next_event.tv64 == KTIME_MAX)
619 goto out;
620 /*
618 * If the pending bit is not set, then we are 621 * If the pending bit is not set, then we are
619 * either the CPU handling the broadcast 622 * either the CPU handling the broadcast
620 * interrupt or we got woken by something else. 623 * interrupt or we got woken by something else.