[parisc-linux] Bug in flush_dcache_page?

Matthew Wilcox willy@debian.org
Thu, 1 Nov 2001 03:03:18 +0000


On Wed, Oct 31, 2001 at 08:56:06PM -0500, Carlos O'Donell Jr. wrote:
> > 2. If a page is simultaneously mapped in both user and kernel space, and
> >    user space touches it, either it leaves the page cache or it was mapped
> >    shared.
> 
> Why would a user touch cause the page to leave the cache? 
> (Maybe I'm not reading enough into it...)
> 
> The shared case I can see.

I meant `dirty' rather than `touch'.  If the page is mapped shared, writes
to it are visible to all users.  If it's mapped private, a write does
a copy-on-write.  The page leaves the page cache at this point because its
contents are no longer valuable to anyone except the process.

> > 	if (!page->mapping->i_mmap & !page->mapping->i_mmap_shared) {
> > 		set_bit(PG_dcache_dirty, &page->flags);
> > 	} else {
>
> Any particular reason for the bitwise and?

It's not a sequence point.  So it doesn't have to be test, branch, test,
branch; it can be test, test, branch.  I'm not sure how the compiler does
on this, to be honest.  It's a microoptimisation that's almost certainly
not worth making.

-- 
Revolutions do not require corporate support.