1. 14 May, 2012 2 commits
    • Don Zickus's avatar
      x86/reboot: Use NMI to assist in shutting down if IRQ fails · 7d007d21
      Don Zickus authored
      For v3.3, I added code to use the NMI to stop other cpus in the
      panic case.  The idea was to make sure all cpus on the system
      were definitely halted to help serialize the panic path to
      execute the rest of the code on a single cpu.
      
      The main problem it was trying to solve was how to stop a cpu
      that was spinning with its irqs disabled.  A IPI irq would be
      stuck and couldn't get in there, but an NMI could.
      
      Things were great until we had another conversation about some
      pstore changes.  Because some of the backend pstore still uses
      spinlocks to protect the device access, things could get ugly if
      a panic happened and we were stuck spinning on a lock.
      
      Now with the NMI shutting down cpus, we could assume no other
      cpus were running and just bust the spin lock and proceed.
      
      The counter argument was, well if you do that the backend could
      be in a screwed up state and you might not be able to save
      anything as a result. If we could have just given the cpu a
      little more time to finish things, we could have grabbed the
      spin lock cleanly and everything would have been fine.
      
      Well, how do give a cpu a 'little more time' in the panic case?
      For the most part you can't without spinning on the lock and
      even in that case, how long do you spin for?
      
      So instead of making it ugly in the pstore code, just mimic the
      idea that stop_machine had, which is block on an IRQ IPI until
      the remote cpu has re-enabled interrupts and left the critical
      region.  Which is what happens now using REBOOT_IRQ.
      
      Then leave the NMI case for those cpus that are truly stuck
      after a short time.  This leaves the current behaviour alone and
      just handle a corner case.  Most systems should never have to
      enter the NMI code and if they do, print out a message in case
      the NMI itself causes another issue.
      Signed-off-by: default avatarDon Zickus <dzickus@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/1336761675-24296-3-git-send-email-dzickus@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      7d007d21
    • Don Zickus's avatar
      Revert "x86, reboot: Use NMI instead of REBOOT_VECTOR to stop cpus" · 5d2b86d9
      Don Zickus authored
      This reverts commit 3603a251.
      
      Originally I wanted a better hammer to shutdown cpus during
      panic. However, this really steps on the toes of various
      spinlocks in the panic path.  Sometimes it is easier to wait for
      the IRQ to become re-enabled to indictate the cpu left the
      critical region and then shutdown the cpu.
      
      The next patch moves the NMI addition after the IRQ part.  To
      make it easier to see the logic of everything, revert this patch
      and apply the next simpler patch.
      Signed-off-by: default avatarDon Zickus <dzickus@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/1336761675-24296-2-git-send-email-dzickus@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      5d2b86d9
  2. 07 Feb, 2012 3 commits
  3. 04 Feb, 2012 26 commits
  4. 03 Feb, 2012 4 commits
  5. 02 Feb, 2012 5 commits