[PATCH 4/4] Do not call flush_cache_user_range with mmap_sem held

Catalin Marinas catalin.marinas at arm.com
Tue Dec 14 13:18:38 EST 2010


On 14 December 2010 04:57, John Stultz <john.stultz at linaro.org> wrote:
> From: Dima Zavin <dima at android.com>
>
> We can't be holding the mmap_sem while calling flush_cache_user_range
> because the flush can fault. If we fault on a user address, the
> page fault handler will try to take mmap_sem again. Since both places
> acquire the read lock, most of the time it succeeds. However, if another
> thread tries to acquire the write lock on the mmap_sem (e.g. mmap) in
> between the call to flush_cache_user_range and the fault, the down_read
> in do_page_fault will deadlock.
>
> Also, since we really can't be holding the mmap_sem while calling
> flush_cache_user_range AND vma is actually unused by the flush itself,
> get rid of vma as an argument.
>
> CC: Nicolas Pitre <nicolas.pitre at linaro.org>
> CC: Russell King <linux at arm.linux.org.uk>
> Signed-off-by: Dima Zavin <dima at android.com>
> Signed-off-by: John Stultz <john.stultz at linaro.org>



More information about the linux-arm-kernel mailing list