Re: [PATCH v7 1/4] spinlock: A new lockref structure for locklessupdate of refcount

From: Ingo Molnar
Date: Thu Aug 29 2013 - 03:00:25 EST



* Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> wrote:

> On Wed, 2013-08-28 at 18:40 -0700, Linus Torvalds wrote:
> > Just FYI: I've merged two preparatory patches in my tree for the whole
> > lockref thing. Instead of applying your four patches as-is during the
> > merge window, I ended up writing two patches that introduce the
> > concept and use it in the dentry code *without* introducing any of the
> > new semantics yet.
> >
> > Waiman, I attributed the patches to you, even if they don't actually
> > look much like any of the patches you sent out. And because I was
> > trying very hard to make sure that no actual semantics changed, my
> > version doesn't have the dget_parent() lockless update code, for
> > example. I literally just did a search-and-replace of "->d_count" with
> > "->d_lockref.count" and then I fixed up a few things by hand (undid
> > one replacement in a comment, and used the helper functions where they
> > were semantically identical).
> >
> > You don't have to rewrite your patches if you don't want to, I'm
> > planning on cherry-picking the actual code changes during the merge
> > window.
>
> I've somewhat lost track of this, will I need some arch support for
> powerpc ?

Lockrefs are combiend spinlock+count objects that fit into a
MESI-cacheline and can be accessed via the cmpxchg8b() primitives and
allow smart combined operations on the count field without necessarily
taking the lock.

So if an architecture meets the assumptions of the generic lockref code
(spinlock + an u32 fits in an aligned cacheline, has the cmpxchgb8b()
primitive, lockdep is off, etc.) then it needs no changes.

You won't see these arch requirements from Linus's current patches yet,
but the followup changes that actually add the optimization should make
this clear.

Thanks,

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/