arm_syscall cacheflush breakage on VIPT platforms
Russell King - ARM Linux
linux at arm.linux.org.uk
Mon Sep 28 05:41:40 EDT 2009
On Mon, Sep 28, 2009 at 12:29:19PM +0300, Imre Deak wrote:
> the following test app will cause an unhandled kernel paging request
> on VIPT platforms. The triggering condition is the mmap_sem held by
> thread_func while the main thread performs cache flushing.
> Since the likelihood of this to trigger is relatively low, a patch will
> follow that makes similar bugs more visible.
The problem is that, unlike previous cache architectures, if a page is
not present we now get a data abort during cache maintainence. That
means the cache maintainence instructions used for this call need to
be marked with user fixups, so that the kernel knows how to handle
such an abort.
It is not caused by the holding of mmap_sem. However, do_cache_op()
should hold something to ensure the VMA doesn't disappear beneath it.
More information about the linux-arm-kernel