From: Andrea Arcangeli <andrea@qumranet.com>
To: Christoph Lameter <clameter@sgi.com>
Cc: Hugh Dickins <hugh@veritas.com>, Robin Holt <holt@sgi.com>,
Avi Kivity <avi@qumranet.com>, Izik Eidus <izike@qumranet.com>,
kvm-devel@lists.sourceforge.net,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
general@lists.openfabrics.org,
Steve Wise <swise@opengridcomputing.com>,
Roland Dreier <rdreier@cisco.com>,
Kanoj Sarcar <kanojsarcar@yahoo.com>,
steiner@sgi.com, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, daniel.blueman@quadrics.com,
Nick Piggin <npiggin@suse.de>
Subject: Re: [patch 1/9] EMM Notifier: The notifier calls
Date: Wed, 2 Apr 2008 23:53:34 +0200 [thread overview]
Message-ID: <20080402215334.GT19189@duo.random> (raw)
In-Reply-To: <Pine.LNX.4.64.0804021048460.27214@schroedinger.engr.sgi.com>
On Wed, Apr 02, 2008 at 10:59:50AM -0700, Christoph Lameter wrote:
> Did I see #v10? Could you start a new subject when you post please? Do
> not respond to some old message otherwise the threading will be wrong.
I wasn't clear enough, #v10 was in the works... I was thinking about
the last two issues before posting it.
> How exactly does the GRU corrupt memory?
Jack added synchronize_rcu, I assume for a reason.
>
> > Another less obviously safe approach is to allow the register
> > method to succeed only when mm_users=1 and the task is single
> > threaded. This way if all the places where the mmu notifers aren't
> > invoked on the mm not by the current task, are only doing
> > invalidates after/before zapping ptes, if the istantiation of new
> > ptes is single threaded too, we shouldn't worry if we miss an
> > invalidate for a pte that is zero and doesn't point to any physical
> > page. In the places where current->mm != mm I'm using
> > invalidate_page 99% of the time, and that only follows the
> > ptep_clear_flush. The problem are the range_begin that will happen
> > before zapping the pte in places where current->mm !=
> > mm. Unfortunately in my incremental patch where I move all
> > invalidate_page outside of the PT lock to prepare for allowing
> > sleeping inside the mmu notifiers, I used range_begin/end in places
> > like try_to_unmap_cluster where current->mm != mm. In general
> > this solution looks more fragile than the seqlock.
>
> Hmmm... Okay that is one solution that would just require a BUG_ON in the
> registration methods.
Perhaps you didn't notice that this solution can't work if you call
range_begin/end not in the "current" context and try_to_unmap_cluster
does exactly that for both my patchset and yours. Missing an _end is
ok, missing a _begin is never ok.
> Well doesnt the requirement of just one execution thread also deal with
> that issue?
Yes, except again it can't work for try_to_unmap_cluster.
This solution is only applicable to #v10 if I fix try_to_unmap_cluster
to only call invalidate_page (relaying on the fact the VM holds a pin
and a lock on any page that is being mmu-notifier-invalidated).
You can't use the single threaded approach to solve either 1 or 2,
because your _begin call is called anywhere and that's where you call
the secondary-tlb flush and it's fatal to miss it.
invalidate_page is called always after, so it enforced the tlb flush
to be called _after_ and so it's inherently safe.
WARNING: multiple messages have this Message-ID (diff)
From: Andrea Arcangeli <andrea@qumranet.com>
To: Christoph Lameter <clameter@sgi.com>
Cc: Nick Piggin <npiggin@suse.de>,
steiner@sgi.com, Peter Zijlstra <a.p.zijlstra@chello.nl>,
linux-mm@kvack.org, Izik Eidus <izike@qumranet.com>,
Kanoj Sarcar <kanojsarcar@yahoo.com>,
Roland Dreier <rdreier@cisco.com>,
linux-kernel@vger.kernel.org, Avi Kivity <avi@qumranet.com>,
kvm-devel@lists.sourceforge.net, daniel.blueman@quadrics.com,
Robin Holt <holt@sgi.com>,
general@lists.openfabrics.org, Hugh Dickins <hugh@veritas.com>
Subject: [ofa-general] Re: [patch 1/9] EMM Notifier: The notifier calls
Date: Wed, 2 Apr 2008 23:53:34 +0200 [thread overview]
Message-ID: <20080402215334.GT19189@duo.random> (raw)
In-Reply-To: <Pine.LNX.4.64.0804021048460.27214@schroedinger.engr.sgi.com>
On Wed, Apr 02, 2008 at 10:59:50AM -0700, Christoph Lameter wrote:
> Did I see #v10? Could you start a new subject when you post please? Do
> not respond to some old message otherwise the threading will be wrong.
I wasn't clear enough, #v10 was in the works... I was thinking about
the last two issues before posting it.
> How exactly does the GRU corrupt memory?
Jack added synchronize_rcu, I assume for a reason.
>
> > Another less obviously safe approach is to allow the register
> > method to succeed only when mm_users=1 and the task is single
> > threaded. This way if all the places where the mmu notifers aren't
> > invoked on the mm not by the current task, are only doing
> > invalidates after/before zapping ptes, if the istantiation of new
> > ptes is single threaded too, we shouldn't worry if we miss an
> > invalidate for a pte that is zero and doesn't point to any physical
> > page. In the places where current->mm != mm I'm using
> > invalidate_page 99% of the time, and that only follows the
> > ptep_clear_flush. The problem are the range_begin that will happen
> > before zapping the pte in places where current->mm !=
> > mm. Unfortunately in my incremental patch where I move all
> > invalidate_page outside of the PT lock to prepare for allowing
> > sleeping inside the mmu notifiers, I used range_begin/end in places
> > like try_to_unmap_cluster where current->mm != mm. In general
> > this solution looks more fragile than the seqlock.
>
> Hmmm... Okay that is one solution that would just require a BUG_ON in the
> registration methods.
Perhaps you didn't notice that this solution can't work if you call
range_begin/end not in the "current" context and try_to_unmap_cluster
does exactly that for both my patchset and yours. Missing an _end is
ok, missing a _begin is never ok.
> Well doesnt the requirement of just one execution thread also deal with
> that issue?
Yes, except again it can't work for try_to_unmap_cluster.
This solution is only applicable to #v10 if I fix try_to_unmap_cluster
to only call invalidate_page (relaying on the fact the VM holds a pin
and a lock on any page that is being mmu-notifier-invalidated).
You can't use the single threaded approach to solve either 1 or 2,
because your _begin call is called anywhere and that's where you call
the secondary-tlb flush and it's fatal to miss it.
invalidate_page is called always after, so it enforced the tlb flush
to be called _after_ and so it's inherently safe.
next prev parent reply other threads:[~2008-04-02 21:55 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-01 20:55 [patch 0/9] [RFC] EMM Notifier V2 Christoph Lameter
2008-04-01 20:55 ` [ofa-general] " Christoph Lameter
2008-04-01 20:55 ` [patch 1/9] EMM Notifier: The notifier calls Christoph Lameter
2008-04-01 20:55 ` Christoph Lameter
2008-04-01 21:14 ` Peter Zijlstra
2008-04-01 21:38 ` Paul E. McKenney
2008-04-02 17:44 ` Christoph Lameter
2008-04-02 18:43 ` EMM: Fix rcu handling and spelling Christoph Lameter
2008-04-02 19:02 ` Paul E. McKenney
2008-04-02 6:49 ` [patch 1/9] EMM Notifier: The notifier calls Andrea Arcangeli
2008-04-02 6:49 ` [ofa-general] " Andrea Arcangeli
2008-04-02 10:59 ` Robin Holt
2008-04-02 10:59 ` [ofa-general] " Robin Holt
2008-04-02 11:16 ` Andrea Arcangeli
2008-04-02 11:16 ` Andrea Arcangeli
2008-04-02 14:26 ` Robin Holt
2008-04-02 17:59 ` Christoph Lameter
2008-04-02 17:59 ` [ofa-general] " Christoph Lameter
2008-04-02 19:03 ` EMM: Fixup return value handling of emm_notify() Christoph Lameter
2008-04-02 19:03 ` [ofa-general] " Christoph Lameter
2008-04-02 21:25 ` Andrea Arcangeli
2008-04-02 21:25 ` [ofa-general] " Andrea Arcangeli
2008-04-02 21:33 ` Christoph Lameter
2008-04-02 21:33 ` [ofa-general] " Christoph Lameter
2008-04-03 10:40 ` Peter Zijlstra
2008-04-03 10:40 ` [ofa-general] " Peter Zijlstra
2008-04-03 15:00 ` Andrea Arcangeli
2008-04-03 15:00 ` [ofa-general] " Andrea Arcangeli
2008-04-03 19:14 ` Christoph Lameter
2008-04-03 19:14 ` [ofa-general] " Christoph Lameter
2008-04-02 21:05 ` EMM: Require single threadedness for registration Christoph Lameter
2008-04-02 21:05 ` [ofa-general] " Christoph Lameter
2008-04-02 22:01 ` Andrea Arcangeli
2008-04-02 22:01 ` [ofa-general] " Andrea Arcangeli
2008-04-02 22:06 ` Christoph Lameter
2008-04-02 22:06 ` [ofa-general] " Christoph Lameter
2008-04-02 22:17 ` Andrea Arcangeli
2008-04-02 22:17 ` [ofa-general] " Andrea Arcangeli
2008-04-02 22:41 ` Christoph Lameter
2008-04-02 22:41 ` [ofa-general] " Christoph Lameter
2008-04-03 1:24 ` EMM: disable other notifiers before register and unregister Christoph Lameter
2008-04-03 1:24 ` Christoph Lameter
2008-04-03 10:40 ` Peter Zijlstra
2008-04-03 10:40 ` [ofa-general] " Peter Zijlstra
2008-04-03 15:29 ` Andrea Arcangeli
2008-04-03 19:20 ` Christoph Lameter
2008-04-03 19:20 ` [ofa-general] " Christoph Lameter
2008-04-03 20:23 ` Christoph Lameter
2008-04-04 12:30 ` Andrea Arcangeli
2008-04-04 12:30 ` Andrea Arcangeli
2008-04-04 20:20 ` [PATCH] mmu notifier #v11 Andrea Arcangeli
2008-04-04 20:20 ` [ofa-general] " Andrea Arcangeli
2008-04-04 22:06 ` Christoph Lameter
2008-04-05 0:23 ` Andrea Arcangeli
2008-04-05 0:23 ` [ofa-general] " Andrea Arcangeli
2008-04-07 5:45 ` Christoph Lameter
2008-04-07 5:45 ` Christoph Lameter
2008-04-07 6:02 ` Andrea Arcangeli
2008-04-07 6:02 ` [ofa-general] " Andrea Arcangeli
2008-04-02 21:53 ` Andrea Arcangeli [this message]
2008-04-02 21:53 ` [ofa-general] Re: [patch 1/9] EMM Notifier: The notifier calls Andrea Arcangeli
2008-04-02 21:54 ` Christoph Lameter
2008-04-02 21:54 ` [ofa-general] " Christoph Lameter
2008-04-02 22:09 ` Andrea Arcangeli
2008-04-02 22:09 ` [ofa-general] " Andrea Arcangeli
2008-04-02 23:04 ` Christoph Lameter
2008-04-02 23:04 ` [ofa-general] " Christoph Lameter
2008-04-01 20:55 ` [patch 2/9] Move tlb flushing into free_pgtables Christoph Lameter
2008-04-01 20:55 ` [ofa-general] " Christoph Lameter
2008-04-01 20:55 ` [patch 3/9] Convert i_mmap_lock to i_mmap_sem Christoph Lameter
2008-04-01 20:55 ` [ofa-general] " Christoph Lameter
2008-04-01 20:55 ` [patch 4/9] Remove tlb pointer from the parameters of unmap vmas Christoph Lameter
2008-04-01 20:55 ` Christoph Lameter
2008-04-01 20:55 ` [patch 5/9] Convert anon_vma lock to rw_sem and refcount Christoph Lameter
2008-04-01 20:55 ` Christoph Lameter
2008-04-02 17:50 ` Andrea Arcangeli
2008-04-02 17:50 ` Andrea Arcangeli
2008-04-02 18:15 ` Christoph Lameter
2008-04-02 18:15 ` Christoph Lameter
2008-04-02 21:56 ` Andrea Arcangeli
2008-04-02 21:56 ` [ofa-general] " Andrea Arcangeli
2008-04-02 21:56 ` Christoph Lameter
2008-04-02 21:56 ` [ofa-general] " Christoph Lameter
2008-04-02 22:12 ` Andrea Arcangeli
2008-04-02 22:12 ` [ofa-general] " Andrea Arcangeli
2008-04-01 20:55 ` [patch 6/9] This patch exports zap_page_range as it is needed by XPMEM Christoph Lameter
2008-04-01 20:55 ` Christoph Lameter
2008-04-01 20:55 ` [patch 7/9] Locking rules for taking multiple mmap_sem locks Christoph Lameter
2008-04-01 20:55 ` Christoph Lameter
2008-04-01 20:55 ` [patch 8/9] XPMEM: The device driver Christoph Lameter
2008-04-01 20:55 ` Christoph Lameter
2008-04-01 20:55 ` [patch 9/9] XPMEM: Simple example Christoph Lameter
2008-04-01 20:55 ` Christoph Lameter
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=20080402215334.GT19189@duo.random \
--to=andrea@qumranet.com \
--cc=a.p.zijlstra@chello.nl \
--cc=avi@qumranet.com \
--cc=clameter@sgi.com \
--cc=daniel.blueman@quadrics.com \
--cc=general@lists.openfabrics.org \
--cc=holt@sgi.com \
--cc=hugh@veritas.com \
--cc=izike@qumranet.com \
--cc=kanojsarcar@yahoo.com \
--cc=kvm-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=npiggin@suse.de \
--cc=rdreier@cisco.com \
--cc=steiner@sgi.com \
--cc=swise@opengridcomputing.com \
/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.