[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190717074435.GU3419@hirez.programming.kicks-ass.net>
Date: Wed, 17 Jul 2019 09:44:35 +0200
From: Peter Zijlstra <peterz@...radead.org>
To: Waiman Long <longman@...hat.com>
Cc: Alex Kogan <alex.kogan@...cle.com>, linux@...linux.org.uk,
mingo@...hat.com, will.deacon@....com, arnd@...db.de,
linux-arch@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-kernel@...r.kernel.org, tglx@...utronix.de, bp@...en8.de,
hpa@...or.com, x86@...nel.org, guohanjun@...wei.com,
jglauber@...vell.com, steven.sistare@...cle.com,
daniel.m.jordan@...cle.com, dave.dice@...cle.com,
rahul.x.yadav@...cle.com
Subject: Re: [PATCH v3 3/5] locking/qspinlock: Introduce CNA into the slow
path of qspinlock
On Tue, Jul 16, 2019 at 10:16:29PM -0400, Waiman Long wrote:
> A simple graphic to illustrate those queues will help too, for example
Very much yes!
> /*
> * MCS lock holder
> * ===============
> * mcs_node
> * +--------+ +----+ +----+
> * | next | ---> |next| -> ... |next| -> NULL [Main queue]
> * | locked | -+ +----+ +----+
> * +--------+ |
> * | +----+ +----+
> * +-> |next| -> ... |next| -> X [Secondary queue]
> * cna_node +----+ +----+
> * +--------* ^
> * | tail | ----------------------+
> * +--------*
Almost; IIUC that cna_node is the same as the one from locked, so you
end up with something like:
> * mcs_node
> * +--------+ +----+ +----+
> * | next | ---> |next| -> ... |next| -> NULL [Main queue]
> * | locked | -+ +----+ +----+
> * +--------+ |
> * | +---------+ +----+
> * +-> |mcs::next| -> ... |next| -> NULL [Secondary queue]
> * |cna::tail| -+ +----+
> * +---------+ | ^
> * +--------+
> *
> * N.B. locked = 1 if secondary queue is absent.
> */
Powered by blists - more mailing lists