tick/broadcast: Prevent hrtimer recursion
authorThomas Gleixner <tglx@linutronix.de>
Tue, 7 Jul 2015 12:11:00 +0000 (14:11 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 7 Jul 2015 16:46:47 +0000 (18:46 +0200)
commit8eb231261fdd20768db23863d00ef277de4b0543
tree5e2e4b15ea1d0a8aaee0fa8564bdd099015a958d
parent7c4a976cd55972b68c75a978f171b6db5df4ce66
tick/broadcast: Prevent hrtimer recursion

The hrtimer based broadcast vehicle can cause a hrtimer recursion
which went unnoticed until we changed the hrtimer expiry code to keep
track of the currently running timer.

local_timer_interrupt()
  local_handler()
    hrtimer_interrupt()
      expire_hrtimers()
        broadcast_hrtimer()
  send_ipis()
  local_handler()
    hrtimer_interrupt()
     ....

Solution is simple: Prevent the local handler call from the broadcast
code when the broadcast 'device' is hrtimer based.

[ Split out from a larger combo patch ]

Tested-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Suzuki Poulose <Suzuki.Poulose@arm.com>
Cc: Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com>
Cc: Catalin Marinas <Catalin.Marinas@arm.com>
Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Preeti U Murthy <preeti@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@kernel.org>
Link: http://lkml.kernel.org/r/alpine.DEB.2.11.1507070929360.3916@nanos
kernel/time/tick-broadcast.c