All of lore.kernel.org
 help / color / mirror / Atom feed
From: NIIBE Yutaka <gniibe@fsij.org>
To: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: linux-parisc@vger.kernel.org,
	pkg-gauche-devel@lists.alioth.debian.org, 561203@bugs.debian.org
Subject: Re: threads and fork on machine with VIPT-WB cache
Date: Mon, 05 Apr 2010 09:39:09 +0900	[thread overview]
Message-ID: <4BB9312D.6030409@fsij.org> (raw)
In-Reply-To: <1270210927.2899.27.camel@mulgrave.site>

Thanks a lot for the discussion.

James Bottomley wrote:
> So your theory is that the data the kernel sees doing the page copy can
> be stale because of dirty cache lines in userspace (which is certainly
> possible in the ordinary way)?

Yes.

> By design that shouldn't happen: the idea behind COW breaking is
> that before it breaks, the page is read only ... this means that
> processes can have clean cache copies of it, but never dirty cache
> copies (because writes are forbidden).

That must be design, I agree.

To keep this condition (no dirty cache for COW page), we need to flush
cache before ptep_set_wrprotect.  That's my point.

Please look at the code path:
   (kernel/fork.c)
   do_fork -> copy_process -> copy_mm -> dup_mm -> dup_mmap ->
   (mm/memory.c)
   copy_page_range -> copy_p*d_range -> copy_one_pte -> ptep_set_wrprotect

The function flush_cache_dup_mm is called from dup_mmap, that's enough
for a case of a process with single thread.

I think that:
We need to flush cache before ptep_set_wrprotect for a process with
multiple threads.  Other threads may change memory after a thread
invokes do_fork and before calling ptep_set_wrprotect.  Specifically,
a process may sleep at pte_alloc function to get a page.
-- 

  reply	other threads:[~2010-04-05  0:39 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <4BA43CE5.4020807@fsij.org>
     [not found] ` <87hbo4ek8l.fsf@thialfi.karme.de>
     [not found]   ` <4BB18B46.2070203@fsij.org>
     [not found]     ` <4BB53D26.60601@fsij.org>
2010-04-02  2:41       ` threads and fork on machine with VIPT-WB cache NIIBE Yutaka
2010-04-02  3:30         ` James Bottomley
2010-04-02  3:48           ` NIIBE Yutaka
2010-04-02  8:05             ` NIIBE Yutaka
2010-04-02 19:35               ` John David Anglin
2010-04-08 21:11                 ` Helge Deller
2010-04-08 21:54                   ` John David Anglin
2010-04-08 22:44                     ` John David Anglin
2010-04-09 14:14                       ` Carlos O'Donell
2010-04-09 15:13                         ` John David Anglin
2010-04-09 15:48                           ` James Bottomley
2010-04-09 16:22                             ` John David Anglin
2010-04-09 16:31                               ` James Bottomley
2010-04-10 20:46                           ` Helge Deller
2010-04-10 21:56                             ` John David Anglin
2010-04-10 22:53                             ` John David Anglin
2010-04-11 18:50                               ` Helge Deller
2010-04-11 22:25                                 ` John David Anglin
2010-04-12 21:02                                   ` Helge Deller
2010-04-12 21:41                                     ` John David Anglin
2010-04-13 11:55                                       ` Helge Deller
2010-04-13 14:03                                         ` John David Anglin
2010-04-15 22:35                                         ` John David Anglin
2010-04-19 16:26                                         ` John David Anglin
2010-04-20 17:59                                           ` Helge Deller
2010-04-20 18:52                                             ` John David Anglin
2010-05-09 12:43                                             ` John David Anglin
2010-05-09 14:14                                               ` Carlos O'Donell
2010-05-10  9:56                                               ` Helge Deller
2010-05-10 14:56                                                 ` John David Anglin
2010-05-10 19:20                                                   ` Helge Deller
2010-05-10 21:07                                                     ` John David Anglin
2010-05-11 16:37                                                       ` John David Anglin
2010-05-11 21:39                                                         ` John David Anglin
2010-05-11 20:44                                                       ` Helge Deller
2010-05-11 20:41                                                     ` Helge Deller
2010-05-11 21:26                                                       ` John David Anglin
2010-05-11 21:41                                                         ` Helge Deller
2010-05-15 21:02                                                           ` John David Anglin
2010-05-16 20:22                                                             ` Helge Deller
2010-05-16 21:38                                                               ` John David Anglin
2010-05-22 17:25                                                               ` John David Anglin
2010-05-23 13:11                                                             ` Carlos O'Donell
2010-05-23 14:43                                                               ` John David Anglin
2010-05-01 18:34                                           ` Thibaut VARENE
2010-05-01 20:17                                             ` John David Anglin
2010-05-02 10:53                                               ` Thibaut VARÈNE
2010-04-11 16:36                           ` [PATCH] Call pagefault_disable/pagefault_enable in kmap_atomic/kunmap_atomic John David Anglin
2010-04-11 17:03                         ` [PATCH] Remove unnecessary macros from entry.S John David Anglin
2010-04-11 17:08                         ` [PATCH] Delete unnecessary nop's in entry.S John David Anglin
2010-04-11 17:12                         ` [PATCH] Avoid interruption in critical region " John David Anglin
2010-04-11 18:24                           ` James Bottomley
2010-04-11 18:45                             ` John David Anglin
2010-04-11 18:53                               ` James Bottomley
2010-04-11 17:26                         ` [PATCH] LWS fixes for syscall.S John David Anglin
2010-06-02 15:33                       ` Bug#561203: threads and fork on machine with VIPT-WB cache Modestas Vainius
2010-06-02 17:16                         ` John David Anglin
2010-06-02 17:56                           ` Bug#561203: " dann frazier
2010-06-03  8:50                             ` Modestas Vainius
2010-06-04  1:03                               ` NIIBE Yutaka
2010-06-04  5:21                                 ` dann frazier
2010-06-04 10:44                                   ` Thibaut VARENE
2010-06-07 17:11                                     ` dann frazier
2010-06-07 18:27                                       ` Thibaut VARÈNE
2010-06-07 23:33                                         ` dann frazier
2010-06-06  1:01                                   ` Modestas Vainius
2010-04-02 12:22             ` James Bottomley
2010-04-05  0:39               ` NIIBE Yutaka [this message]
2010-04-05  2:51                 ` John David Anglin
2010-04-05  2:58                   ` John David Anglin
2010-04-05 16:18                   ` James Bottomley
2010-04-06  4:57                     ` NIIBE Yutaka
2010-04-06 13:37                       ` James Bottomley
2010-04-06 13:44                         ` James Bottomley

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=4BB9312D.6030409@fsij.org \
    --to=gniibe@fsij.org \
    --cc=561203@bugs.debian.org \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=linux-parisc@vger.kernel.org \
    --cc=pkg-gauche-devel@lists.alioth.debian.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.