1. 05 1月, 2011 13 次提交
  2. 01 12月, 2010 1 次提交
    • H
      [S390] nohz/s390: fix arch_needs_cpu() return value on offline cpus · 39881215
      Heiko Carstens 提交于
      This fixes the same problem as described in the patch "nohz: fix
      printk_needs_cpu() return value on offline cpus" for the arch_needs_cpu()
      primitive:
      
      arch_needs_cpu() may return 1 if called on offline cpus. When a cpu gets
      offlined it schedules the idle process which, before killing its own cpu,
      will call tick_nohz_stop_sched_tick().
      That function in turn will call arch_needs_cpu() in order to check if the
      local tick can be disabled. On offline cpus this function should naturally
      return 0 since regardless if the tick gets disabled or not the cpu will be
      dead short after. That is besides the fact that __cpu_disable() should already
      have made sure that no interrupts on the offlined cpu will be delivered anyway.
      
      In this case it prevents tick_nohz_stop_sched_tick() to call
      select_nohz_load_balancer(). No idea if that really is a problem. However what
      made me debug this is that on 2.6.32 the function get_nohz_load_balancer() is
      used within __mod_timer() to select a cpu on which a timer gets enqueued.
      If arch_needs_cpu() returns 1 then the nohz_load_balancer cpu doesn't get
      updated when a cpu gets offlined. It may contain the cpu number of an offline
      cpu. In turn timers get enqueued on an offline cpu and not very surprisingly
      they never expire and cause system hangs.
      
      This has been observed 2.6.32 kernels. On current kernels __mod_timer() uses
      get_nohz_timer_target() which doesn't have that problem. However there might
      be other problems because of the too early exit tick_nohz_stop_sched_tick()
      in case a cpu goes offline.
      
      This specific bug was indrocuded with 3c5d92a0 "nohz: Introduce
      arch_needs_cpu".
      
      In this case a cpu hotplug notifier is used to fix the issue in order to keep
      the normal/fast path small. All we need to do is to clear the condition that
      makes arch_needs_cpu() return 1 since it is just a performance improvement
      which is supposed to keep the local tick running for a short period if a cpu
      goes idle. Nothing special needs to be done except for clearing the condition.
      
      Cc: stable@kernel.org
      Acked-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      39881215
  3. 25 11月, 2010 1 次提交
    • H
      [S390] nmi: fix clock comparator revalidation · e8129c64
      Heiko Carstens 提交于
      On each machine check all registers are revalidated. The save area for
      the clock comparator however only contains the upper most seven bytes
      of the former contents, if valid.
      Therefore the machine check handler uses a store clock instruction to
      get the current time and writes that to the clock comparator register
      which in turn will generate an immediate timer interrupt.
      However within the lowcore the expected time of the next timer
      interrupt is stored. If the interrupt happens before that time the
      handler won't be called. In turn the clock comparator won't be
      reprogrammed and therefore the interrupt condition stays pending which
      causes an interrupt loop until the expected time is reached.
      
      On NOHZ machines this can result in unresponsive machines since the
      time of the next expected interrupted can be a couple of days in the
      future.
      
      To fix this just revalidate the clock comparator register with the
      expected value.
      In addition the special handling for udelay must be changed as well.
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      e8129c64
  4. 18 11月, 2010 1 次提交
  5. 10 11月, 2010 4 次提交
  6. 29 10月, 2010 11 次提交
  7. 28 10月, 2010 2 次提交
  8. 27 10月, 2010 1 次提交
  9. 25 10月, 2010 6 次提交