linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V1 0/1] tick: broadcast-hrtimer: Fix a race in bc_set_next
@ 2019-09-18 14:41 Balasubramani Vivekanandan
  2019-09-18 14:41 ` [PATCH V1 1/1] " Balasubramani Vivekanandan
                   ` (2 more replies)
  0 siblings, 3 replies; 16+ messages in thread
From: Balasubramani Vivekanandan @ 2019-09-18 14:41 UTC (permalink / raw)
  To: fweisbec, tglx, mingo; +Cc: balasubramani_vivekanandan, erosca, linux-kernel

I was investigating a rcu stall warning on ARM64 Renesas Rcar3
platform. On analysis I found that rcu stall warning was because the
rcu_preempt kthread was starved of cpu time. rcu_preempt was blocked in
the function schedule_timeout() and never woken up. On further
investigation I found that local timer interrupts were not happening on
the cpu where the rcu_preempt kthread was blocked. So the rcu_preempt
was not woken up after timeout.
I continued my analysis to debug why the timer failed on the cpu. I
found that when cpu goes through idle state cycle, the timer failure
happens. When the cpu enters the idle state it subscribes to the tick
broadcast clock and shutsdown the local timer. Then on exit from idle
state the local timer is programmed to fire interrupts. But I found that
the during the error scenario, cpu fails to program the local timer on
exit from idle state. The below code in
__tick_broadcast_oneshot_control() is where the idle code exit path goes
through and fails to program the timer hardware

now = ktime_get();
if (dev->next_event <= now) {
	cpumask_set_cpu(cpu, tick_broadcast_force_mask);
		goto out;
}

The value in next_event will be earlier than current time because the
tick broadcast clock did not wake up the cpu on its subcribed
timeout. Later when the cpu is woken up due to some other event this
condition will arise. After the cpu woken up, any further timeout
requests by any task on the cpu might fail to program the timer
hardware because the value in next_event will be earlier than the
current time.
Then I focussed on why the tick broadcast clock failed to wake up the
cpu. I noticed a race condition in the hrtimer based tick broadcast
clock. The race condition results in a condition where the tick
broadcast hrtimer is never restarted. I have created a patch to fix the
race condition. Please review 

Balasubramani Vivekanandan (1):
  tick: broadcast-hrtimer: Fix a race in bc_set_next

 kernel/time/tick-broadcast-hrtimer.c | 58 ++++++++++++++++++++++------
 kernel/time/tick-broadcast.c         |  2 +
 2 files changed, 48 insertions(+), 12 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2019-09-27 12:48 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-18 14:41 [PATCH V1 0/1] tick: broadcast-hrtimer: Fix a race in bc_set_next Balasubramani Vivekanandan
2019-09-18 14:41 ` [PATCH V1 1/1] " Balasubramani Vivekanandan
2019-09-23 19:51   ` Thomas Gleixner
2019-09-24 17:14     ` Eugeniu Rosca
2019-09-25 11:55     ` [PATCH V2 " Balasubramani Vivekanandan
2019-09-25 11:55       ` Balasubramani Vivekanandan
2019-09-25 13:32       ` Balasubramani Vivekanandan
2019-09-25 14:20       ` Balasubramani Vivekanandan
2019-09-25 14:20         ` Balasubramani Vivekanandan
2019-09-26 10:01           ` Thomas Gleixner
2019-09-26 13:51             ` [PATCH V3 " Balasubramani Vivekanandan
2019-09-26 13:51               ` Balasubramani Vivekanandan
2019-09-26 15:43                 ` Eugeniu Rosca
2019-09-27 12:48                 ` [tip: timers/core] " tip-bot2 for Balasubramani Vivekanandan
2019-09-20 10:39 ` [PATCH V1 0/1] " Eugeniu Rosca
2019-09-20 10:58 ` Eugeniu Rosca

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).