flush_tlb_range() needs ->page_table_lock when ->mmap_sem is not held
authorAl Viro <[email protected]>
Mon, 5 Mar 2012 06:40:29 +0000 (06:40 +0000)
committerLinus Torvalds <[email protected]>
Mon, 5 Mar 2012 21:51:32 +0000 (13:51 -0800)
commitcd2934a3b3057eb048f8b4fb82e941d24a043207
tree80bb0630c6f4b21fa47114a6226f9ef8aa448bc3
parent835ee7978cb47de94cf70232a694f19295d2993f
flush_tlb_range() needs ->page_table_lock when ->mmap_sem is not held

All other callers already hold either ->mmap_sem (exclusive) or
->page_table_lock.  And we need it because some page table flushing
instanced do work explicitly with ge tables.

See e.g.  arch/powerpc/mm/tlb_hash32.c, flush_tlb_range() and
flush_range() in there.  The same goes for uml, with a lot more
extensive playing with page tables.

Almost all callers are actually fine - flush_tlb_range() may have no
need to bother playing with page tables, but it can do so safely; again,
this caller is the sole exception - everything else either has exclusive
->mmap_sem on the mm in question, or mm->page_table_lock is held.

Signed-off-by: Al Viro <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
mm/hugetlb.c