Subject: [PATCH] ARM: Do not call flush_cache_user_range with mmap_sem held

From: [email-masked] (Dirk Behme)
Date: Mon, 09 Apr 2012 07:58:26 +0200

On 17.11.2011 12:25, Catalin Marinas wrote:
> On Thu, Nov 17, 2011 at 11:03:39AM +0000, Russell King - ARM Linux wrote:
>> On Thu, Nov 17, 2011 at 10:59:36AM +0000, Catalin Marinas wrote:
>>> On Thu, Nov 17, 2011 at 10:42:46AM +0000, Russell King - ARM Linux wrote:
>>>> On Thu, Nov 17, 2011 at 10:22:05AM +0000, Catalin Marinas wrote:
>>>>> BTW, we could even go a step further an remove the vma checks entirely,
>>>>> just use access_ok() since __cpuc_coherent_user_range() can handle
>>>>> unmapped ranges properly (though it may introduce some latency if some
>>>>> user app passes a 3G range but we can change the fixup code to abort the
>>>>> operation when it gets a fault that can't be fixed up).
>>>>
>>>> So, do you think that it is acceptable to be able to pass into this from
>>>> userspace the arguments '0', '~0', '0' and have the kernel spin over the
>>>> entire 4G space, including IO space on any of the supported architectures.
>>>
>>> We have access_ok() to check for user only space.
>>>
>>>> Note that pre-ARMv6 CPUs will spin over that range in 32-byte steps
>>>> whether or not there's a page present.
>>>
>>> You are right, the pre-v6 hardware would not trigger a fault. So if we
>>> don't want another #ifdef in this function, we just keep the vma checks
>>> for all architecture versions.
>>>
>>> But I consider that the original patch is still valid.
>>
>> You thinks it's safe to walk the vma list with no locks held?
>
> No, I don't, but the patch only releases the semaphore when calling the
> cache flushing function. The vmas are walked with the semaphore held.
>
> Please read the patch I posted properly.

In an other thread

http://lists.arm.linux.org.uk/lurker/message/20120406.033509.ca9fe8cf.en.html

it seems that we have an additional user where this patch fixed an issue.

So would it be possible to talk about this patch, again?

Many thanks

Dirk