aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm/pabort-v7.S
diff options
context:
space:
mode:
authorMika Westerberg <mika.westerberg@iki.fi>2010-10-28 06:45:22 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2010-10-28 08:53:47 -0400
commit4e54d93d3c9846ba1c2644ad06463dafa690d1b7 (patch)
tree7d692f758a87fdc7d97caa3432542d08075eb427 /arch/arm/mm/pabort-v7.S
parent4e929d2bcf13eeaa9636448c55690b383a910391 (diff)
ARM: 6464/2: fix spinlock recursion in adjust_pte()
When running following code in a machine which has VIVT caches and USE_SPLIT_PTLOCKS is not defined: fd = open("/etc/passwd", O_RDONLY); addr = mmap(NULL, 4096, PROT_READ, MAP_SHARED, fd, 0); addr2 = mmap(NULL, 4096, PROT_READ, MAP_SHARED, fd, 0); v = *((int *)addr); we will hang in spinlock recursion in the page fault handler: BUG: spinlock recursion on CPU#0, mmap_test/717 lock: c5e295d8, .magic: dead4ead, .owner: mmap_test/717, .owner_cpu: 0 [<c0026604>] (unwind_backtrace+0x0/0xec) [<c014ee48>] (do_raw_spin_lock+0x40/0x140) [<c0027f68>] (update_mmu_cache+0x208/0x250) [<c0079db4>] (__do_fault+0x320/0x3ec) [<c007af7c>] (handle_mm_fault+0x2f0/0x6d8) [<c0027834>] (do_page_fault+0xdc/0x1cc) [<c00202d0>] (do_DataAbort+0x34/0x94) This comes from the fact that when USE_SPLIT_PTLOCKS is not defined, the only lock protecting the page tables is mm->page_table_lock which is already locked before update_mmu_cache() is called. Signed-off-by: Mika Westerberg <mika.westerberg@iki.fi> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mm/pabort-v7.S')
0 files changed, 0 insertions, 0 deletions