1. 02 Apr, 2015 3 commits
    • Preeti U Murthy's avatar
      clockevents: Fix cpu_down() race for hrtimer based broadcasting · 345527b1
      Preeti U Murthy authored
      It was found when doing a hotplug stress test on POWER, that the
      machine either hit softlockups or rcu_sched stall warnings.  The
      issue was traced to commit:
      
        7cba160a ("powernv/cpuidle: Redesign idle states management")
      
      which exposed the cpu_down() race with hrtimer based broadcast mode:
      
        5d1638ac ("tick: Introduce hrtimer based broadcast")
      
      The race is the following:
      
      Assume CPU1 is the CPU which holds the hrtimer broadcasting duty
      before it is taken down.
      
      	CPU0					CPU1
      
      	cpu_down()				take_cpu_down()
      						disable_interrupts()
      
      	cpu_die()
      
      	while (CPU1 != CPU_DEAD) {
      		msleep(100);
      		switch_to_idle();
      		stop_cpu_timer();
      		schedule_broadcast();
      	}
      
      	tick_cleanup_cpu_dead()
      		take_over_broadcast()
      
      So after CPU1 disabled interrupts it cannot handle the broadcast
      hrtimer anymore, so CPU0 will be stuck forever.
      
      Fix this by explicitly taking over broadcast duty before cpu_die().
      
      This is a temporary workaround. What we really want is a callback
      in the clockevent device which allows us to do that from the dying
      CPU by pushing the hrtimer onto a different cpu. That might involve
      an IPI and is definitely more complex than this immediate fix.
      
      Changelog was picked up from:
      
          https://lkml.org/lkml/2015/2/16/213Suggested-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Tested-by: default avatarNicolas Pitre <nico@linaro.org>
      Signed-off-by: default avatarPreeti U. Murthy <preeti@linux.vnet.ibm.com>
      Cc: linuxppc-dev@lists.ozlabs.org
      Cc: mpe@ellerman.id.au
      Cc: nicolas.pitre@linaro.org
      Cc: peterz@infradead.org
      Cc: rjw@rjwysocki.net
      Fixes: http://linuxppc.10917.n7.nabble.com/offlining-cpus-breakage-td88619.html
      Link: http://lkml.kernel.org/r/20150330092410.24979.59887.stgit@preeti.in.ibm.com
      [ Merged it to the latest timer tree, renamed the callback, tidied up the changelog. ]
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      345527b1
    • Ingo Molnar's avatar
      clockevents: Clean up clockchips.h · 9eed56e8
      Ingo Molnar authored
      Do various cleanups on the clockchips.h file:
      
       - indent preprocessor blocks to make it more clear which block we are in,
         this also makes merge resolution easier
      
       - comment larger preprocessor blocks consistently, using the:
      
           #if FOO
           ...
           #else /* !FOO: */
           ...
           #endif /* !FOO */
      
         notation.
      
       - unbreak lines
      
       - etc.
      
      No change in functionality.
      
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      9eed56e8
    • Ingo Molnar's avatar
      tick: Further simplify tick-internal.h · 3ae7a939
      Ingo Molnar authored
      Move the broadcasting related section to the GENERIC_CLOCKEVENTS=y
      section - this also solves build failures on architectures that
      don't use generic clockevents yet.
      
      Also standardize include file style to make it easier to read, and
      use nesting depth aware preprocessor directives to make future merges
      easier.
      
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      3ae7a939
  2. 01 Apr, 2015 9 commits
  3. 31 Mar, 2015 11 commits
  4. 29 Mar, 2015 7 commits
  5. 28 Mar, 2015 9 commits
  6. 27 Mar, 2015 1 commit