1. 02 4月, 2015 4 次提交
    • P
      timer: Allocate per-cpu tvec_base's statically · b337a938
      Peter Zijlstra 提交于
      Memory for the 'tvec_base' array is allocated separately for the boot CPU (statically)
      and non-boot CPUs (dynamically).
      
      The reason is because __TIMER_INITIALIZER() needs to set ->base to a
      valid pointer (because we've made NULL special, hint: lock_timer_base())
      and we cannot get a compile time pointer to per-cpu entries because we
      don't know where we'll map the section, even for the boot cpu.
      
      This can be simplified a bit by statically allocating per-cpu memory.
      The only disadvantage is that memory for one of the structures will stay
      unused, i.e. for the boot CPU, which uses boot_tvec_bases.
      
      This will also guarantee that tvec_base is cacheline aligned. Even
      though tvec_base has ____cacheline_aligned stuck on, kzalloc_node() does
      not actually respect that (but guarantees a minimum u64 alignment).
      Signed-off-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: NViresh Kumar <viresh.kumar@linaro.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/17cdf560f2727f687ab159707d0aa591f8a2f82d.1427814611.git.viresh.kumar@linaro.orgSigned-off-by: NIngo Molnar <mingo@kernel.org>
      b337a938
    • P
      clockevents: Fix cpu_down() race for hrtimer based broadcasting · 345527b1
      Preeti U Murthy 提交于
      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: NThomas Gleixner <tglx@linutronix.de>
      Tested-by: NNicolas Pitre <nico@linaro.org>
      Signed-off-by: NPreeti 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: NIngo Molnar <mingo@kernel.org>
      345527b1
    • I
      clockevents: Clean up clockchips.h · 9eed56e8
      Ingo Molnar 提交于
      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: NIngo Molnar <mingo@kernel.org>
      9eed56e8
    • I
      tick: Further simplify tick-internal.h · 3ae7a939
      Ingo Molnar 提交于
      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: NIngo Molnar <mingo@kernel.org>
      3ae7a939
  2. 01 4月, 2015 9 次提交
  3. 31 3月, 2015 11 次提交
  4. 30 3月, 2015 7 次提交
  5. 29 3月, 2015 9 次提交