Received: by 10.213.65.68 with SMTP id h4csp785509imn; Fri, 6 Apr 2018 08:53:59 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+yls/34F26kXnxWLYEeQxbrnWLzV8UwSgYxI9LyMRdvlKIDod/aLCbJrp2+pjNLQxZ0qva X-Received: by 10.98.72.74 with SMTP id v71mr20633867pfa.241.1523030039889; Fri, 06 Apr 2018 08:53:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523030039; cv=none; d=google.com; s=arc-20160816; b=zZZA8sOXtgcLpZ+5Il+5+lmc5D/XZZ+LLYXT9NIL0MvFXQSzerFH/wuxZIM9gLdkHL qsuJ6ve7LIZnuN+e26mUcd5cb42fU6ycGRFtDnU3V/r2B61Qz1ZvRwTUXXHMeR3EJ1l0 ZETAs7clfiOhkbYiqnczljBBPr3wAYPcMwaE09n+RU3eHqcuANnoTcYcdF+3SwYP26nb d3lhIiC/IzlKzi/S0SqRV/94rYe8rKk8OjulhYxYh0NAfQHVPhB66vMNXzzvkLStza0+ OQU9/2EkqFZuZqLEkRbdIZOMqMpUI038fdQXh9GP0dlMitjF0XMqkd70J2RMAdURMn+V o0+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature:arc-authentication-results; bh=YVj10BeKWNIh0iDU+CneVDqV3IsttIiXuXIg4PfFrZ4=; b=tytBeIbPzu/rjfV60lZtYwc9N5zHMQ4UmZc8Psh2XlHcksVcJ8qXYDn4c5ElBhxxlc SXCVixph04SgQccDBqMpA+a2WFhtUc3g/8AYY4h+JkD5aMn+FR+IGaW3BgC3kx3EflVO MaZtHttY+ghHKoWB+kkJxJhqd18OKH46hCwbP4Oo7F9GRcmdj1kDftXsr+EbZm/mhWsy YCFZvauRtk3/sfJBep5jAgibnpfZmWeylSfAi7az1GeNMqEpZcqz3O0PqFFdbdLA97TS CfUaej5K/RDhC+m2Hm28Qy4L8pxRCcS9C+NkwTPuQcaqCQ1yvX98MBUR/cGvnZso2Ohr gJQQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=nUj59bnN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a24si4559651pff.256.2018.04.06.08.53.22; Fri, 06 Apr 2018 08:53:59 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=nUj59bnN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752121AbeDFPt4 (ORCPT + 99 others); Fri, 6 Apr 2018 11:49:56 -0400 Received: from mail-wm0-f51.google.com ([74.125.82.51]:38650 "EHLO mail-wm0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751488AbeDFPty (ORCPT ); Fri, 6 Apr 2018 11:49:54 -0400 Received: by mail-wm0-f51.google.com with SMTP id i3so4162123wmf.3 for ; Fri, 06 Apr 2018 08:49:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=YVj10BeKWNIh0iDU+CneVDqV3IsttIiXuXIg4PfFrZ4=; b=nUj59bnNR/e51NKOu/htyENbfsN77mpg+4OBPcVgwyJZz1yFw4A2BeuOd/o4qXBQzp mA6dKuQp6W2Fka42hD/YyhcBy7VJmShcw5ku86Ge25HVMcIVh51027dcGcDtNEr7P8uA af3k0f5U2daJniJQZv/ondXai3lNJwvC0s8TI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=YVj10BeKWNIh0iDU+CneVDqV3IsttIiXuXIg4PfFrZ4=; b=kL2LY9p6LlkDec4VZ+aVx83JI4P2J1y532n5TT6dr9OH14ZAFxjWBHq4aMJCjZg1Y/ 2Ug+qTG9pWc5EJwaLl61jFVvCiOBvX4exYqdWkljd8FLS6JhPrrgdLnWKGq9qp4n9g+J EkM3nEu29PLt7IfPN4FHtbJswGy8kfp0h34zxkYkTVHs+miBytEBByov5w8IteFsQrYg Bd0f1dUvHXyisnvXxpYlpQV/QMUxg893C93vHdV3JEB6src3WN9N+NN3F2buqWcKGvAx 7dN7r0/90LFrRyJBAmMPr+G9279NVE1lL/qYv3DuAl9s6mO8LfS4a+ol1FkeMngCSKNQ eNog== X-Gm-Message-State: ALQs6tBvScwisVxkjsXMAvKSpzMf0ZW5lE2ombIAPFaj/u5MexVIshei /pFGobJH3NCyZFBERm7s+8YGzg== X-Received: by 10.28.152.6 with SMTP id a6mr13826079wme.119.1523029793744; Fri, 06 Apr 2018 08:49:53 -0700 (PDT) Received: from andrea ([213.209.242.222]) by smtp.gmail.com with ESMTPSA id m190sm12771231wmb.6.2018.04.06.08.49.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Apr 2018 08:49:52 -0700 (PDT) Date: Fri, 6 Apr 2018 17:49:44 +0200 From: Andrea Parri To: Will Deacon Cc: Peter Zijlstra , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, mingo@kernel.org, boqun.feng@gmail.com, paulmck@linux.vnet.ibm.com, catalin.marinas@arm.com, Waiman Long Subject: Re: [PATCH 10/10] locking/qspinlock: Elide back-to-back RELEASE operations with smp_wmb() Message-ID: <20180406154944.GA14488@andrea> References: <1522947547-24081-1-git-send-email-will.deacon@arm.com> <1522947547-24081-11-git-send-email-will.deacon@arm.com> <20180405172808.GG4082@hirez.programming.kicks-ass.net> <20180406113436.GC27619@arm.com> <20180406130512.GA6631@andrea> <20180406152744.GE10528@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180406152744.GE10528@arm.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Apr 06, 2018 at 04:27:45PM +0100, Will Deacon wrote: > Hi Andrea, > > On Fri, Apr 06, 2018 at 03:05:12PM +0200, Andrea Parri wrote: > > On Fri, Apr 06, 2018 at 12:34:36PM +0100, Will Deacon wrote: > > > I could say something like: > > > > > > "Pairs with dependency ordering from both xchg_tail and explicit > > > dereferences of node->next" > > > > > > but it's a bit cryptic :( > > > > Agreed. ;) It might be helpful to instead include a snippet to highlight > > the interested memory accesses/dependencies; IIUC, > > > > /* > > * Pairs with dependency ordering from both xchg_tail and explicit/? > > * dereferences of node->next: > > * > > * CPU0 > > * > > * /* get node0, encode node0 in tail */ > > * pv_init_node(node0); > > * ((struct pv_node *)node0)->cpu = smp_processor_id(); > > * ((struct pv_node *)node0)->state = vcpu_running; > > I'd probably ignore the PV case here and just focus on the native init > of count/locked/next. > > > * smp_wmb(); > > * old = xchg_tail(lock, tail); > > * > > * CPU1: > > * > > * /* get node1, encode tail from node1 */ > > * old = xchg_tail(lock, tail); // = tail corresponding to node0 > > * // head an addr. dependency > > * /* decode old in prev */ > > * pv_wait_node(node1, prev); > > Similarly here -- the dependency is through decode_tail. > > > * READ ((struct pv_node *)prev)->cpu // addr. dependent read > > * READ ((struct pv_node *)prev)->state // addr. dependend read > > * > > * [More details for the case "following our own ->next pointer" you > > * mentioned dabove.] > > */ > > > > CPU1 would also have: > > > > WRITE_ONCE(prev->next, node1); // addr. dependent write > > > > but I'm not sure how this pairs: does this belong to the the second > > case above? can you elaborate on that? > > This is dependent on the result of decode_tail, so it's still the first > case. The second case is when we queued into an empty tail but somebody > later queued behind us, so we don't find them until we're claiming the > lock: > > if (!next) > next = smp_cond_load_relaxed(&node->next, (VAL)); > > arch_mcs_spin_unlock_contended(&next->locked); > > here, this is all straightforward address dependencies rather than the > arithmetic in decode_tail. Got it. Thanks! Andrea > > Will