1. 15 Apr, 2009 3 commits
    • Aaro Koskinen's avatar
      [ARM] 5450/1: Flush only the needed range when unmapping a VMA · 7fccfc00
      Aaro Koskinen authored
      When unmapping N pages (e.g. shared memory) the amount of TLB flushes
      done can be (N*PAGE_SIZE/ZAP_BLOCK_SIZE)*N although it should be N at
      maximum. With PREEMPT kernel ZAP_BLOCK_SIZE is 8 pages, so there is a
      noticeable performance penalty when unmapping a large VMA and the system
      is spending its time in flush_tlb_range().
      
      The problem is that tlb_end_vma() is always flushing the full VMA
      range. The subrange that needs to be flushed can be calculated by
      tlb_remove_tlb_entry(). This approach was suggested by Hugh Dickins,
      and is also used by other arches.
      
      The speed increase is roughly 3x for 8M mappings and for larger mappings
      even more.
      Signed-off-by: default avatarAaro Koskinen <Aaro.Koskinen@nokia.com>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      7fccfc00
    • Mark Brown's avatar
      [ARM] 5449/1: S3C: Use disable_irq_nosync() to fix boot lockups · 41609ff4
      Mark Brown authored
      With 2.6.30-rc1 on SMDK6410 I experience a soft lockup on bootup when
      the Samsung serial driver attempts to disable the transmit interrupt
      from within the transmit interrupt handler: it calls disable_irq()
      which locks up due to attempting to synchronise with the running handler.
      Fix this by using disable_irq_nosync().
      
      Also make the same change in the recieve path.
      
      Backtrace:
      
      [<c002a914>] (__irq_svc+0x34/0x80) from [<c00696c0>] (synchr)
      [<c00696c0>] (synchronize_irq+0xc/0xcc) from [<c018d434>] (s)
      [<c018d434>] (s3c24xx_serial_stop_tx+0x1c/0x3c) from [<c018d)
      [<c018d54c>] (s3c24xx_serial_tx_chars+0xf8/0x104) from [<c00)
      [<c0068bcc>] (handle_IRQ_event+0x74/0x118) from [<c006ab04>])
      [<c006ab04>] (handle_level_irq+0x100/0x118) from [<c00349c4>)
      [<c00349c4>] (s3c_irq_demux_uart+0x94/0xc4) from [<c002a050>)
      [<c002a050>] (_text+0x50/0x6c) from [<c002a914>] (__irq_svc+)
      Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
      Acked-by: default avatarBen Dooks <ben-linux@fluff.org>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      41609ff4
    • Russell King's avatar
  2. 14 Apr, 2009 29 commits
  3. 13 Apr, 2009 8 commits