[PATCH V1] ARM: mm: lazy cache flushing on non-mapped pages
Will Deacon
will.deacon at arm.com
Thu May 30 11:40:47 EDT 2013
On Wed, May 29, 2013 at 03:56:56PM +0100, Ming Lei wrote:
> Currently flush_dcache_page() thinks pages as non-mapped if
> mapping_mapped(mapping) return false. This approach is very
> coase:
> - mmap on part of file may cause all pages backed on
> the file being thought as mmaped
>
> - file-backed pages aren't mapped into user space actually
> if the memory mmaped on the file isn't accessed
>
> This patch uses page_mapped() to decide if the page has been
> mapped.
[...]
> diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c
> index 0d473cc..008af99 100644
> --- a/arch/arm/mm/flush.c
> +++ b/arch/arm/mm/flush.c
> @@ -286,8 +286,8 @@ void flush_dcache_page(struct page *page)
>
> mapping = page_mapping(page);
>
> - if (!cache_ops_need_broadcast() &&
> - mapping && !mapping_mapped(mapping))
> + if (!cache_ops_need_broadcast() && mapping &&
> + (!mapping_mapped(mapping) || !page_mapped(page)))
> clear_bit(PG_dcache_clean, &page->flags);
> else {
> __flush_dcache_page(mapping, page);
Does the page_mapped test make the mapping_mapped test redundant? It sounds
strange if it's possible to get a non-zero mapcount for a page when its
address space isn't mapped.
Will
More information about the linux-arm-kernel
mailing list