public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Nick Piggin <nickpiggin@yahoo.com.au>
To: Linus Torvalds <torvalds@osdl.org>
Cc: David Miller <davem@davemloft.net>,
	ralf@linux-mips.org, Andrew Morton <akpm@osdl.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	anemo@mba.ocn.ne.jp, linux-arch@vger.kernel.org,
	Martin Schwidefsky <schwidefsky@de.ibm.com>
Subject: Re: [PATCH 1/3] Fix COW D-cache aliasing on fork
Date: Sat, 21 Oct 2006 03:37:40 +1000	[thread overview]
Message-ID: <45390964.3080108@yahoo.com.au> (raw)
In-Reply-To: <Pine.LNX.4.64.0610201004520.3962@g5.osdl.org>

Linus Torvalds wrote:
> 
> On Sat, 21 Oct 2006, Nick Piggin wrote:
> 
>>>So maybe the COW D$ aliasing patch-series is just the right thing to do. Not
>>>worry about D$ at _all_ when doing the actual fork, and only worry about it
>>>on an actual COW event. Hmm?
>>
>>Well if we have the calls in there, we should at least make them work
>>right for the architectures there now. At the moment the flush_cache_mm
>>before the copy_page_range wouldn't seem to do anything if you can still
>>have threads dirty the cache again through existing TLB entries.
>>
>>I don't think that flushing on COW is exactly right though, because dirty
>>data can remain invisible if you're only doing reads (no write, no flush).
> 
> 
> You're right. A virtually indexed cache needs the flush _before_ we return 
> from the fork into a new process (since otherwise the dirty data won't be 
> visible in the new virtual address space).
> 
> So you've convinced me. Flushing at COW time _cannot_ be right, because it 
> by definition means that there has been a time when the new process didn't 
> see the dirty data in the case of a virtual index. And in the case of a 
> physical index it cannot matter.
> 
> So I think the right thing to do is to forget about the COW D$ series 
> (which probably _hides_ most of the problems in practice, so it "works" 
> that way) and instead go with Ralf's last patch that just moves the 
> flush_cache_mm() to after the TLB flush.

So long as we don't move around the mmap semaphores, I'm OK with that
patch...

> We do need to have all the architecture people (especially S390, which has 
> been very strange in this regard in the past) check that it's ok. The 
> _mappings_ are still valid, so S390 should be able to do the write-back, 
> but there may be architectures that would want to do the flush _both_ 
> before and after (for performance reasons - if writing out dirty data 
> requires a TLB lookup, doing most fo the writeback before is probably a 
> better thing, and then we can do a _second_ writeback after the flush to 
> close the race with some other thread dirtying the pages before the TLB 
> was marked read-only).

Yes, that's my theory too. Probably the thing to aim for is replacing
that API with a new single call to flush caches and tlbs, and the
arch can do what best suits.

But for now, to get it actually *working*, moving the flush_cache_mm
seems like the first step.

> I added linux-arch and Martin Schwidefsky (s390) to the Cc:.
> 
> Guys, in case you missed the earlier discussion: there's a suggested patch 
> by Ralf Baechle on linux-kernel (but it does just the "flush after" 
> version, not the "perhaps we need it both before and after" thing I 
> theorise about above). Message-ID: 20061020160538.GB18649@linux-mips.org.

As I mentioned there, we probably want to to check that other places
which flush caches before invalidating TLBs (eg. most of the kernel) is
OK in the presence of concurrent writes to valid TLBs from other threads.

-- 
SUSE Labs, Novell Inc.
Send instant messages to your online friends http://au.messenger.yahoo.com 

  reply	other threads:[~2006-10-20 17:37 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-10-19 16:35 [PATCH 1/3] Fix COW D-cache aliasing on fork Ralf Baechle
2006-10-19 16:35 ` [PATCH 2/3] Pass vma argument to copy_user_highpage() Ralf Baechle
2006-10-19 16:35 ` [PATCH 3/3] MIPS: Fix COW D-cache aliasing on fork Ralf Baechle
2006-10-22  2:32   ` Ralf Baechle
2006-10-19 17:46 ` [PATCH 1/3] " Nick Piggin
2006-10-19 18:13   ` Ralf Baechle
2006-10-19 18:48     ` Nick Piggin
2006-10-19 22:59     ` David Miller
2006-10-20 14:39       ` Nick Piggin
2006-10-20 15:49         ` Linus Torvalds
2006-10-20 15:57           ` Nick Piggin
2006-10-20 16:36             ` Linus Torvalds
2006-10-20 16:47               ` Nick Piggin
2006-10-20 17:16                 ` Linus Torvalds
2006-10-20 17:37                   ` Nick Piggin [this message]
2006-10-21  0:46                 ` Ralf Baechle
2006-10-20 19:36           ` David Miller
2006-10-20 19:54             ` Linus Torvalds
2006-10-20 19:58               ` David Miller
2006-10-20 20:10                 ` Linus Torvalds
2006-10-20 20:59                   ` Russell King
2006-10-20 21:06                     ` David Miller
2006-10-20 21:17                       ` Russell King
2006-10-20 21:30                         ` David Miller
2006-10-20 21:12                     ` Linus Torvalds
2006-10-20 21:28                       ` Russell King
2006-10-20 21:41                       ` Ralf Baechle
2006-10-21 16:28                         ` Atsushi Nemoto
2006-10-20 21:49                   ` Ralf Baechle
2006-10-20 22:02                     ` Linus Torvalds
2006-10-20 22:22                       ` David Miller
2006-10-20 22:51                         ` Ralf Baechle
2006-10-20 23:28                           ` Linus Torvalds
2006-10-21  0:06                             ` Ralf Baechle
2006-10-21  0:38                               ` Linus Torvalds
2006-10-21  1:29                                 ` Paul Mackerras
2006-10-21  2:11                                 ` David Miller
2006-10-21  2:37                                   ` Linus Torvalds
2006-10-21  2:46                                     ` David Miller
2006-10-21 18:27                                     ` Ralf Baechle
2006-10-22  1:34                                     ` Ralf Baechle
2006-12-02  9:49                                 ` Russell King
2006-10-23  8:50                   ` Martin Schwidefsky
2006-10-20 16:05         ` Ralf Baechle
2006-10-20 16:30           ` Nick Piggin
2006-10-20 19:23         ` David Miller

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=45390964.3080108@yahoo.com.au \
    --to=nickpiggin@yahoo.com.au \
    --cc=akpm@osdl.org \
    --cc=anemo@mba.ocn.ne.jp \
    --cc=davem@davemloft.net \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ralf@linux-mips.org \
    --cc=schwidefsky@de.ibm.com \
    --cc=torvalds@osdl.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox