linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Michel Lespinasse <walken@google.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	linux-mm <linux-mm@kvack.org>,
	 LKML <linux-kernel@vger.kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	 Laurent Dufour <ldufour@linux.ibm.com>,
	Vlastimil Babka <vbabka@suse.cz>,
	 Liam Howlett <Liam.Howlett@oracle.com>,
	Jerome Glisse <jglisse@redhat.com>,
	 Davidlohr Bueso <dave@stgolabs.net>,
	David Rientjes <rientjes@google.com>,
	Hugh Dickins <hughd@google.com>,  Ying Han <yinghan@google.com>
Subject: Re: [PATCH 5/8] mmap locking API: convert nested write lock sites
Date: Thu, 26 Mar 2020 05:56:43 -0700	[thread overview]
Message-ID: <CANN689F_wVcLddAfcvZ+CvqW-JxF4=7an_B5WLRKjYcf31DkAg@mail.gmail.com> (raw)
In-Reply-To: <20200326120931.GF22483@bombadil.infradead.org>

On Thu, Mar 26, 2020 at 5:09 AM Matthew Wilcox <willy@infradead.org> wrote:
> On Thu, Mar 26, 2020 at 12:02:33AM -0700, Michel Lespinasse wrote:
> > @@ -47,9 +48,9 @@ static inline void activate_mm(struct mm_struct *old, struct mm_struct *new)
> >        * when the new ->mm is used for the first time.
> >        */
> >       __switch_mm(&new->context.id);
> > -     down_write_nested(&new->mmap_sem, 1);
> > +     mmap_write_lock_nested(new, 1);
> >       uml_setup_stubs(new);
> > -     mmap_write_unlock(new);
> > +     mmap_write_unlock_nested(new);
>
> This is a bit of an oddity.  We don't usually have an unlock_nested()
> variant (a quick grep finds only something complicated in reiserfs).
> That's because it's legitimate to release locks in a different order from
> the one they were acquired in (eg lock A, lock B, unlock A, unlock B), and
> it's not clear whether "nested" would follow the lock (ie unlock_nested B)
> or whether it would follow the code (ie unlock_nested A).
>
> Does your future API require knowing the nested nature at the unlock
> point?  And if so, does it require it for A or B in the above scenario?
> And how does it mix with lock A or B being of a different type (eg a
> plain mutex or a spinlock)?

I'll admit it's a bit unusual.

In MM we have only two uses nested mmap locks (as you can see in this
patch), and they both release locks in the opposite order as they
acquire them. We could probably follow this pattern if additional use
cases end up being needed.

In my range locking patchset, nested locks need to pass an explicit
lock range. Also when implementing mmap_sem locking latencies, it can
be convenient to ignore the nested locks under the assumption that
their hold interval is contained within the outer lock's hold
interval.

-- 
Michel "Walken" Lespinasse
A program is never fully debugged until the last user dies.


  reply	other threads:[~2020-03-26 12:56 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-26  7:02 [PATCH 0/8] Add a new mmap locking API wrapping mmap_sem calls Michel Lespinasse
2020-03-26  7:02 ` [PATCH 1/8] mmap locking API: initial implementation as rwsem wrappers Michel Lespinasse
2020-03-26 17:56   ` Jason Gunthorpe
2020-03-26 18:06     ` Matthew Wilcox
2020-03-26 18:09       ` Matthew Wilcox
2020-03-26 22:09         ` Michel Lespinasse
2020-03-26  7:02 ` [PATCH 2/8] MMU notifier: use the new mmap locking API Michel Lespinasse
2020-03-26  7:02 ` [PATCH 3/8] mmap locking API: use coccinelle to convert mmap_sem rwsem call sites Michel Lespinasse
2020-03-27  0:01   ` kbuild test robot
2020-03-27  0:40   ` kbuild test robot
2020-03-26  7:02 ` [PATCH 4/8] mmap locking API: convert mmap_sem call sites missed by coccinelle Michel Lespinasse
2020-03-26 23:13   ` kbuild test robot
2020-03-26 23:27   ` kbuild test robot
2020-03-26  7:02 ` [PATCH 5/8] mmap locking API: convert nested write lock sites Michel Lespinasse
2020-03-26 12:09   ` Matthew Wilcox
2020-03-26 12:56     ` Michel Lespinasse [this message]
2020-03-26  7:02 ` [PATCH 6/8] mmap locking API: add mmap_read_release() and mmap_read_unlock_non_owner() Michel Lespinasse
2020-03-26  7:02 ` [PATCH 7/8] mmap locking API: add MMAP_LOCK_INITIALIZER Michel Lespinasse
2020-04-06  9:46   ` Laurent Dufour
2020-04-06 13:04     ` Michel Lespinasse
2020-03-26  7:02 ` [PATCH 8/8] mmap locking API: rename mmap_sem to mmap_lock Michel Lespinasse
2020-04-06 12:45   ` Laurent Dufour
2020-04-06 13:17     ` Michel Lespinasse
2020-04-06 16:03     ` Davidlohr Bueso
2020-03-26  7:13 ` [PATCH 0/8] Add a new mmap locking API wrapping mmap_sem calls Michel Lespinasse

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='CANN689F_wVcLddAfcvZ+CvqW-JxF4=7an_B5WLRKjYcf31DkAg@mail.gmail.com' \
    --to=walken@google.com \
    --cc=Liam.Howlett@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=dave@stgolabs.net \
    --cc=hughd@google.com \
    --cc=jglisse@redhat.com \
    --cc=ldufour@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=peterz@infradead.org \
    --cc=rientjes@google.com \
    --cc=vbabka@suse.cz \
    --cc=willy@infradead.org \
    --cc=yinghan@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox