Skip to content

Commit

Permalink
Revert "tick/common: Make tick_periodic() check for missing ticks"
Browse files Browse the repository at this point in the history
This reverts commit d441dce due to
boot failures.

Reported-by: Qian Cai <cai@lca.pw>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Waiman Long <longman@redhat.com>
  • Loading branch information
Thomas Gleixner committed Mar 19, 2020
1 parent 2c8bd58 commit 52da479
Showing 1 changed file with 3 additions and 33 deletions.
36 changes: 3 additions & 33 deletions kernel/time/tick-common.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
#include <linux/profile.h>
#include <linux/sched.h>
#include <linux/module.h>
#include <linux/sched/clock.h>
#include <trace/events/power.h>

#include <asm/irq_regs.h>
Expand Down Expand Up @@ -85,41 +84,12 @@ int tick_is_oneshot_available(void)
static void tick_periodic(int cpu)
{
if (tick_do_timer_cpu == cpu) {
/*
* Use running_clock() as reference to check for missing ticks.
*/
static ktime_t last_update;
ktime_t now;
int ticks = 1;

now = ns_to_ktime(running_clock());
write_seqlock(&jiffies_lock);

if (last_update) {
u64 delta = ktime_sub(now, last_update);

/*
* Check for eventually missed ticks
*
* There is likely a persistent delta between
* last_update and tick_next_period. So they are
* updated separately.
*/
if (delta >= 2 * tick_period) {
s64 period = ktime_to_ns(tick_period);

ticks = ktime_divns(delta, period);
}
last_update = ktime_add(last_update,
ticks * tick_period);
} else {
last_update = now;
}

/* Keep track of the next tick event */
tick_next_period = ktime_add(tick_next_period,
ticks * tick_period);
do_timer(ticks);
tick_next_period = ktime_add(tick_next_period, tick_period);

do_timer(1);
write_sequnlock(&jiffies_lock);
update_wall_time();
}
Expand Down

0 comments on commit 52da479

Please sign in to comment.