|
@@ -521,9 +521,6 @@ hrtimer_force_reprogram(struct hrtimer_cpu_base *cpu_base, int skip_equal)
|
|
{
|
|
{
|
|
ktime_t expires_next;
|
|
ktime_t expires_next;
|
|
|
|
|
|
- if (!__hrtimer_hres_active(cpu_base))
|
|
|
|
- return;
|
|
|
|
-
|
|
|
|
expires_next = __hrtimer_get_next_event(cpu_base);
|
|
expires_next = __hrtimer_get_next_event(cpu_base);
|
|
|
|
|
|
if (skip_equal && expires_next == cpu_base->expires_next)
|
|
if (skip_equal && expires_next == cpu_base->expires_next)
|
|
@@ -532,6 +529,9 @@ hrtimer_force_reprogram(struct hrtimer_cpu_base *cpu_base, int skip_equal)
|
|
cpu_base->expires_next = expires_next;
|
|
cpu_base->expires_next = expires_next;
|
|
|
|
|
|
/*
|
|
/*
|
|
|
|
+ * If hres is not active, hardware does not have to be
|
|
|
|
+ * reprogrammed yet.
|
|
|
|
+ *
|
|
* If a hang was detected in the last timer interrupt then we
|
|
* If a hang was detected in the last timer interrupt then we
|
|
* leave the hang delay active in the hardware. We want the
|
|
* leave the hang delay active in the hardware. We want the
|
|
* system to make progress. That also prevents the following
|
|
* system to make progress. That also prevents the following
|
|
@@ -545,7 +545,7 @@ hrtimer_force_reprogram(struct hrtimer_cpu_base *cpu_base, int skip_equal)
|
|
* set. So we'd effectivly block all timers until the T2 event
|
|
* set. So we'd effectivly block all timers until the T2 event
|
|
* fires.
|
|
* fires.
|
|
*/
|
|
*/
|
|
- if (cpu_base->hang_detected)
|
|
|
|
|
|
+ if (!__hrtimer_hres_active(cpu_base) || cpu_base->hang_detected)
|
|
return;
|
|
return;
|
|
|
|
|
|
tick_program_event(cpu_base->expires_next, 1);
|
|
tick_program_event(cpu_base->expires_next, 1);
|
|
@@ -844,7 +844,6 @@ static void __remove_hrtimer(struct hrtimer *timer,
|
|
if (!timerqueue_del(&base->active, &timer->node))
|
|
if (!timerqueue_del(&base->active, &timer->node))
|
|
cpu_base->active_bases &= ~(1 << base->index);
|
|
cpu_base->active_bases &= ~(1 << base->index);
|
|
|
|
|
|
-#ifdef CONFIG_HIGH_RES_TIMERS
|
|
|
|
/*
|
|
/*
|
|
* Note: If reprogram is false we do not update
|
|
* Note: If reprogram is false we do not update
|
|
* cpu_base->next_timer. This happens when we remove the first
|
|
* cpu_base->next_timer. This happens when we remove the first
|
|
@@ -855,7 +854,6 @@ static void __remove_hrtimer(struct hrtimer *timer,
|
|
*/
|
|
*/
|
|
if (reprogram && timer == cpu_base->next_timer)
|
|
if (reprogram && timer == cpu_base->next_timer)
|
|
hrtimer_force_reprogram(cpu_base, 1);
|
|
hrtimer_force_reprogram(cpu_base, 1);
|
|
-#endif
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|