1. 03 Apr, 2008 3 commits
    • Benjamin Herrenschmidt's avatar
      [POWERPC] Fix deadlock with mmu_hash_lock in hash_page_sync · b991f05f
      Benjamin Herrenschmidt authored
      hash_page_sync() takes and releases the low level mmu hash
      lock in order to sync with other processors disposing of page
      tables.  Because that lock can be needed to service hash misses
      triggered by interrupt handlers, taking it must be done with
      interrupts off.  However, hash_page_sync() appears to be called
      with interrupts enabled, thus causing occasional deadlocks.
      
      We fix it by making sure hash_page_sync() masks interrupts while
      holding the lock.
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
      b991f05f
    • Benjamin Herrenschmidt's avatar
      [POWERPC] Fix iSeries hard irq enabling regression · ff3da2e0
      Benjamin Herrenschmidt authored
      A subtle bug sneaked into iSeries recently.  On this platform, we must
      not normally clear MSR:EE (the hardware external interrupt enable)
      except for short periods of time.  Taking an interrupt while
      soft-disabled doesn't cause us to clear it for example.
      
      The iSeries kernel expects to mostly run with MSR:EE enabled at all
      times except in a few exception entry/exit code paths.  Thus
      local_irq_enable() doesn't check if it needs to hard-enable as it
      expects this to be unnecessary on iSeries.
      
      However, hard_irq_disable() _does_ cause MSR:EE to be cleared,
      including on iSeries.  A call to it was recently added to the
      context switch code, thus causing interrupts to become disabled
      for a long periods of time, causing the iSeries watchdog to kick
      in under some circumstances and other nasty things.
      
      This patch fixes it by making local_irq_enable() properly re-enable
      MSR:EE on iSeries.  It basically removes a return statement here
      to make iSeries use the same code path as everybody else.  That does
      mean that we might occasionally get spurious decrementer interrupts
      but I don't think that matters.
      
      Another option would have been to make hard_irq_disable() a nop
      on iSeries but I didn't like it much, in case we have good reasons
      to hard-disable.
      
      Part of the patch is fixes to make sure the hard_enabled PACA field
      is properly set on iSeries as it used not to be before, since it
      was mostly unused.
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
      ff3da2e0
    • Laurent Pinchart's avatar
      [POWERPC] Fix CPM2 SCC1 clock initialization. · 025306f3
      Laurent Pinchart authored
      A missing break statement in a switch caused cpm2_clk_setup() to initialize
      SCC2 instead of SCC1.
      Signed-off-by: default avatarLaurent Pinchart <laurentp@cse-semaphore.com>
      Signed-off-by: default avatarKumar Gala <galak@kernel.crashing.org>
      025306f3
  2. 31 Mar, 2008 5 commits
  3. 30 Mar, 2008 30 commits
  4. 29 Mar, 2008 2 commits