From: Russell King <rmk@arm.linux.org.uk>
To: James Bottomley <James.Bottomley@steeleye.com>
Cc: Lennert Buytenhek <buytenh@wantstofly.org>,
linux-arch@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
davej@codemonkey.org.uk
Subject: Re: [CFT] read+shared mmap write+read data corruption
Date: Mon, 28 May 2007 16:04:33 +0100 [thread overview]
Message-ID: <20070528150432.GA5737@flint.arm.linux.org.uk> (raw)
In-Reply-To: <1180361875.3689.3.camel@mulgrave.il.steeleye.com>
On Mon, May 28, 2007 at 09:17:55AM -0500, James Bottomley wrote:
> On Mon, 2007-05-28 at 11:05 +0100, Russell King wrote:
> > On Sun, May 27, 2007 at 07:00:31PM -0500, James Bottomley wrote:
> > > Ok, output on parisc is:
> > >
> > > jejb@ioz:~$ ./a.out
> > > firstfirstfirst
> > > firstfirstfirst
> > > secondsecondsec
> > >
> > > Which is correct. It remains correct even if I drop the msync().
> >
> > With Lennert's new program, I get mostly:
> >
> > firstfirstfirst
> > firstfirstfirst
> > firstfirstfirst
> >
> > but occasionally:
> >
> > firstfirstfirst
> > firstfirstfirst
> > secondsecondsec
> >
> > However, if I open code the memcpy() in the MAPREAD to copy one word
> > at a time, then I reliably get the "secondsecondsec" line. But if I
> > convert the memcpy() in MAPWRITE in the same way, I'm back to mostly
> > getting the failure with the occasional success. Utterly confused.
> >
> > Unless someone's got a theory, I'm stumped.
>
> I think you're not flushing correctly in munmap() ... but I'm not sure
> the linux API actually requires this.
We do an unconditional cache flush over the user virtual addresses in
the mapping before we tear down the page table entries.
sys_munmap -> do_munmap -> unmap_region -> unmap_vmas -> unmap_page_range
-> tlb_start_vma
Although the call to flush_cache_range() in tlb_start_vma() is conditional,
it is conditional on !tlb->fullmm, and the call to tlb_gather_mmu() in
unmap_region() sets this to zero.
Adding additional expensive cache flushing into tlb_start_vma() is going
to be, well, disgusting. Performance? What's that? Oh, something we
used to have in 1995.
Having an additional bit which is set on page cache pages to indicate
that they need flushing would be far more preferable. PG_arch_1 won't
work because we already use this for delaying flush_dcache_page(). We
need PG_arch_2.
--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of:
next prev parent reply other threads:[~2007-05-28 15:04 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-27 10:49 [CFT] read+shared mmap write+read data corruption Russell King
2007-05-27 14:16 ` James Bottomley
2007-05-27 22:25 ` Lennert Buytenhek
2007-05-27 23:06 ` David Miller
2007-05-27 23:05 ` David Miller
2007-05-28 0:31 ` James Bottomley
2007-05-28 12:44 ` Lennert Buytenhek
2007-05-29 5:35 ` David Miller
2007-05-29 9:12 ` Russell King
2007-05-29 10:26 ` David Miller
2007-05-27 22:24 ` Lennert Buytenhek
2007-05-28 0:00 ` James Bottomley
2007-05-28 10:05 ` Russell King
2007-05-28 14:17 ` James Bottomley
2007-05-28 14:39 ` Lennert Buytenhek
2007-05-29 3:06 ` James Bottomley
2007-05-29 3:15 ` Lennert Buytenhek
2007-05-29 14:32 ` James Bottomley
2007-05-29 17:13 ` Russell King
2007-05-29 5:58 ` David Miller
2007-05-28 15:04 ` Russell King [this message]
2007-05-29 15:42 ` Lennert Buytenhek
2007-05-28 12:33 ` Lennert Buytenhek
2007-05-28 14:22 ` James Bottomley
2007-05-28 12:38 ` Lennert Buytenhek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070528150432.GA5737@flint.arm.linux.org.uk \
--to=rmk@arm.linux.org.uk \
--cc=James.Bottomley@steeleye.com \
--cc=akpm@linux-foundation.org \
--cc=buytenh@wantstofly.org \
--cc=davej@codemonkey.org.uk \
--cc=linux-arch@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.