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. > */