[parisc-linux] Re: Problems with kernel mmap (failing
tst-mmap-eofsync in glibc on parisc)
Hugh Dickins
hugh@veritas.com
Fri, 22 Aug 2003 20:02:44 +0100 (BST)
On 22 Aug 2003, James Bottomley wrote:
> On Fri, 2003-08-22 at 13:34, Hugh Dickins wrote:
> > Might the problem be in parisc's __flush_dcache_page,
> > which only examines i_mmap_shared?
>
> This is the issue: we do treat them differently.
>
> Semantics differ between privately mapped data (where there's no
> coherency guarantee) and shared data (where there is). Flushing the
> virtual cache is expensive on pa, so we only do it for the i_mmap_shared
> list.
>
> The difficulty is that a mmap of a read only file with MAP_SHARED is
> expecting the shared cache semantics, but gets added to the non shared
> list.
>
> Since flushing the caches is a performance hog, we'd like do be able to
> distinguish the cases where we have to do the flush MAP_SHARED mappings
> from those we don't (MAP_PRIVATE).
The naming "i_mmap_shared" does suggest that once upon a time those
lists were as you'd like; and that at some point it was changed.
Perhaps some arches prefer the coherency guarantee I'm familiar with
in MAP_PRIVATE (yes, when you modify a page yourself, it cows off and
becomes private; but in i386 it's shared up until then), and other
arches (like yours) would prefer to avoid the overhead.
Hugh