linux/arch
Aaro Koskinen 7fccfc00c0 [ARM] 5450/1: Flush only the needed range when unmapping a VMA
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: Aaro Koskinen <Aaro.Koskinen@nokia.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2009-04-15 10:01:02 +01:00
..
alpha Merge branch 'tracing-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-04-05 11:04:19 -07:00
arm [ARM] 5450/1: Flush only the needed range when unmapping a VMA 2009-04-15 10:01:02 +01:00
avr32 dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
blackfin tty: Blackin CTS/RTS 2009-04-07 08:44:05 -07:00
cris tty: Use the generic RS485 ioctl on CRIS 2009-04-07 08:44:05 -07:00
frv FRV: Move to arch/frv/include/asm/ 2009-04-10 01:48:06 +01:00
h8300 Merge branch 'tracing-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-04-05 11:04:19 -07:00
ia64 Replace all DMA_nBIT_MASK macro with DMA_BIT_MASK(n) 2009-04-13 15:04:33 -07:00
m32r Simplify copy_thread() 2009-04-02 19:04:51 -07:00
m68k Merge branch 'tracing-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-04-05 11:04:19 -07:00
m68knommu Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu 2009-04-03 09:44:58 -07:00
microblaze microblaze: remove duplicated #include's 2009-04-14 11:09:15 +02:00
mips Merge branch 'next' into for-linus 2009-04-08 00:00:33 -07:00
mn10300 Separate out the proc- and unit-specific header directories from the general 2009-04-10 14:33:48 +01:00
parisc Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6 2009-04-03 09:52:04 -07:00
powerpc parport_pc: Fix build failure drivers/parport/parport_pc.c for powerpc 2009-04-14 08:48:50 -07:00
s390 mutex: have non-spinning mutexes on s390 by default 2009-04-09 19:28:24 +02:00
sh sh: Add in PCI bus for DMA API debugging. 2009-04-14 15:23:40 +09:00
sparc parport: Fix various uses of parport_pc 2009-04-14 08:48:50 -07:00
um Merge branch 'tracing-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-04-05 11:04:19 -07:00
x86 x86 microcode: revert some work_on_cpu 2009-04-14 11:45:59 -07:00
xtensa Merge branch 'tracing-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-04-05 11:04:19 -07:00
.gitignore
Kconfig mutex: have non-spinning mutexes on s390 by default 2009-04-09 19:28:24 +02:00