Re: cache alias in mmap + write

From: anfei
Date: Wed Jan 20 2010 - 04:52:56 EST


On Wed, Jan 20, 2010 at 06:10:11PM +0900, KOSAKI Motohiro wrote:
> Hello,
>
> > diff --git a/mm/filemap.c b/mm/filemap.c
> > index 96ac6b0..07056fb 100644
> > --- a/mm/filemap.c
> > +++ b/mm/filemap.c
> > @@ -2196,6 +2196,9 @@ again:
> > if (unlikely(status))
> > break;
> >
> > + if (mapping_writably_mapped(mapping))
> > + flush_dcache_page(page);
> > +
> > pagefault_disable();
> > copied = iov_iter_copy_from_user_atomic(page, i, offset, bytes);
> > pagefault_enable();
>
> I'm not sure ARM cache coherency model. but I guess correct patch is here.
>
> + if (mapping_writably_mapped(mapping))
> + flush_dcache_page(page);
> +
> pagefault_disable();
> copied = iov_iter_copy_from_user_atomic(page, i, offset, bytes);
> pagefault_enable();
> - flush_dcache_page(page);
>
>
> Why do we need to call flush_dcache_page() twice?
>
The latter flush_dcache_page is used to flush the kernel changes
(iov_iter_copy_from_user_atomic), which makes the userspace to see the
write, and the one I added is used to flush the userspace changes.
And I think it's better to split this function into two:
flush_dcache_user_page(page);
kmap_atomic(page);
write to page;
kunmap_atomic(page);
flush_dcache_kern_page(page);
But currently there is no such API.
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/