From: Linus Torvalds <torvalds@linux-foundation.org>
To: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
David Miller <davem@davemloft.net>,
mingo@elte.hu, linux-kernel@vger.kernel.org,
akpm@linux-foundation.org
Subject: Re: [PATCH] lockdep: lock_set_subclass - reset a held lock's subclass
Date: Fri, 1 Aug 2008 12:24:43 -0700 (PDT) [thread overview]
Message-ID: <alpine.LFD.1.10.0808011216360.3277@nehalem.linux-foundation.org> (raw)
In-Reply-To: <48935FA4.5010804@goop.org>
On Fri, 1 Aug 2008, Jeremy Fitzhardinge wrote:
>
> I have a function traversing a pagetable in vaddr order (low to high), taking
> pte locks as it builds up batches of pte page updates. When the batch is
> issued, it releases all the locks, and won't end up holding more than ~16 at a
> time.
Hmm.
With hashed locks, that is _not_ safe in general. Now, it may well be safe
in your case, so I'm not going to say you have a bug, but even if you do
them in vaddr order, the thing is, we don't guarantee that the _locks_ are
ordered in virtual address order.
Right now, I think the pte locks are either a single one per mm (in which
case I assume you don't take any lock at all), or it's a lock that is
embedded in the pmd page iirc.
What if you have pmd sharing through some shared area being mapped at two
different processes at different addresses? Yeah, I don't think we share
pmd's at all (except if you use hugetables and for the kernel), but it's
one of those things where subtle changes in how the pte lock allocation
could cause problems.
Eg, I could easily see somebody doing the pte lock as a hash over not just
the address, but the "struct mm" pointer too. At which point different
parts of the address space might even share the PTE lock, and you'd get
deadlocks even without any ABBA behavior, just because the pte lock might
be A B C A or something inside the same process.
Linus
next prev parent reply other threads:[~2008-08-01 19:25 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-31 21:43 [git pull] scheduler fixes Ingo Molnar
2008-07-31 22:04 ` David Miller
2008-07-31 22:26 ` Ingo Molnar
2008-07-31 22:55 ` David Miller
2008-08-01 8:11 ` David Miller
2008-08-01 9:01 ` Ingo Molnar
2008-08-01 9:13 ` David Miller
2008-08-01 11:08 ` [PATCH] lockdep: lock_set_subclass - reset a held lock's subclass Peter Zijlstra
2008-08-01 18:06 ` Jeremy Fitzhardinge
2008-08-01 18:14 ` Linus Torvalds
2008-08-01 19:10 ` Jeremy Fitzhardinge
2008-08-01 19:24 ` Linus Torvalds [this message]
2008-08-01 20:08 ` Jeremy Fitzhardinge
2008-08-01 19:59 ` Hugh Dickins
2008-08-01 20:22 ` Jeremy Fitzhardinge
2008-08-01 20:33 ` Hugh Dickins
2008-08-01 23:20 ` David Miller
2008-08-01 23:26 ` Linus Torvalds
2008-08-01 20:49 ` Peter Zijlstra
2008-08-01 11:08 ` [PATCH] lockdep: re-annotate scheduler runqueues Peter Zijlstra
2008-08-01 17:04 ` Linus Torvalds
2008-08-02 8:34 ` 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=alpine.LFD.1.10.0808011216360.3277@nehalem.linux-foundation.org \
--to=torvalds@linux-foundation.org \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=davem@davemloft.net \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/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;
as well as URLs for NNTP newsgroup(s).