From: Jun Sun <jsun@junsun.net>
To: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Cc: linux-mips@linux-mips.org, ralf@linux-mips.org
Subject: Re: dcache aliasing problem on fork
Date: Fri, 4 Feb 2005 09:44:10 -0800 [thread overview]
Message-ID: <20050204174410.GC30430@gw.junsun.net> (raw)
In-Reply-To: <20050204.183813.132760959.nemoto@toshiba-tops.co.jp>
On Fri, Feb 04, 2005 at 06:38:13PM +0900, Atsushi Nemoto wrote:
> There is a dcache aliasing problem on preempt kernel (or SMP kernel,
> perhaps) when a multi-threaded program calls fork().
>
> 1. Now there is a process containing two thread (T1 and T2). The
> thread T1 call fork(). dup_mmap() function called on T1 context.
>
> static inline int dup_mmap(struct mm_struct * mm, struct mm_struct * oldmm)
> {
> ...
> flush_cache_mm(current->mm);
> /* A */
> ...
> (write-protect all Copy-On-Write pages)
> ...
> /* B */
> flush_tlb_mm(current->mm);
> ...
> }
>
> 2. When preemption happens between A and B (or on SMP kernel), the
> thread T2 can run and modify data on COW pages without page fault
> (modified data will stay in cache).
>
> 3. Some time after fork() completed, the thread T2 may cause page
> fault by write-protect on COW pages .
>
> 4. Then data of the COW page will be copied to newly allocated
> physical page (copy_cow_page()). It reads data via kernel mapping.
> The kernel mapping can have different 'color' with user space
> mapping of the thread T2 (dcache aliasing). Therefore
> copy_cow_page() will copy stale data. Then the modified data in
> cache will be lost.
>
>
> How should we fix this problem? Any idea?
>
It seems to me a naive solution is to introduce a spinlock to make all
three operation automic. you flush tlb first and make relavent tlb fault
handling sync with this spinlock as well.
At in theory it should fix the problem, but the spinlock might be held
for too long this dup_mmap().
BTW, is this problem real or hypothetic?
Jun
next prev parent reply other threads:[~2005-02-04 17:44 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-04 9:38 dcache aliasing problem on fork Atsushi Nemoto
2005-02-04 17:44 ` Jun Sun [this message]
2005-02-05 12:06 ` Atsushi Nemoto
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=20050204174410.GC30430@gw.junsun.net \
--to=jsun@junsun.net \
--cc=anemo@mba.ocn.ne.jp \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.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