Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer fixes from Thomas Gleixner: "Viresh unearthed the following three hickups in the timer/timekeeping code: - Negated check for the result of a clock event selection - A missing early exit in the jiffies update path which causes update_wall_time to be called for nothing causing lock contention and wasted cycles in the timer interrupt - Checking a variable in the NOHZ code enable code for true which can only be set by that very code after the check succeeds. That results in a rock solid runtime disablement of that feature" * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: tick-sched: Check tick_nohz_enabled in tick_nohz_switch_to_nohz() tick-sched: Don't call update_wall_time() when delta is lesser than tick_period tick-common: Fix wrong check in tick_check_replacement()
This commit is contained in:
@@ -276,7 +276,7 @@ static bool tick_check_preferred(struct clock_event_device *curdev,
|
|||||||
bool tick_check_replacement(struct clock_event_device *curdev,
|
bool tick_check_replacement(struct clock_event_device *curdev,
|
||||||
struct clock_event_device *newdev)
|
struct clock_event_device *newdev)
|
||||||
{
|
{
|
||||||
if (tick_check_percpu(curdev, newdev, smp_processor_id()))
|
if (!tick_check_percpu(curdev, newdev, smp_processor_id()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return tick_check_preferred(curdev, newdev);
|
return tick_check_preferred(curdev, newdev);
|
||||||
|
@@ -84,6 +84,9 @@ static void tick_do_update_jiffies64(ktime_t now)
|
|||||||
|
|
||||||
/* Keep the tick_next_period variable up to date */
|
/* Keep the tick_next_period variable up to date */
|
||||||
tick_next_period = ktime_add(last_jiffies_update, tick_period);
|
tick_next_period = ktime_add(last_jiffies_update, tick_period);
|
||||||
|
} else {
|
||||||
|
write_sequnlock(&jiffies_lock);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
write_sequnlock(&jiffies_lock);
|
write_sequnlock(&jiffies_lock);
|
||||||
update_wall_time();
|
update_wall_time();
|
||||||
@@ -967,7 +970,7 @@ static void tick_nohz_switch_to_nohz(void)
|
|||||||
struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
|
struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
|
||||||
ktime_t next;
|
ktime_t next;
|
||||||
|
|
||||||
if (!tick_nohz_active)
|
if (!tick_nohz_enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
|
Reference in New Issue
Block a user