ARM: make_coherent: fix problems with highpte, part 1
authorRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 18 Dec 2009 16:24:34 +0000 (16:24 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Wed, 20 Jan 2010 13:48:30 +0000 (13:48 +0000)
commit56dd47098abe1fdde598a8d8b7c04d775506f456
tree5eda8a531087c9c068702aa426db8479a77147f8
parentf8a85f1164a33e3eb5b421b137ced793ed53ee33
ARM: make_coherent: fix problems with highpte, part 1

update_mmu_cache() is called with a page table already mapped.  We
call make_coherent(), which then calls adjust_pte() which wants to
map other page tables.  This causes kmap_atomic() to BUG() because
the slot its trying to use is already taken.

Since do_adjust_pte() modifies the page tables, we are also missing
any form of locking, so we're risking corrupting the page tables.

Fix this by using pte_offset_map_nested(), and taking the pte page
table lock around do_adjust_pte().

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/fault-armv.c