Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp4674590imm; Mon, 14 May 2018 10:59:50 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoDe45U6h5r+M5WcvafrGEfHLa+hndorqQY45ffQ1ibkHKR0nnkIJNT9cIgLGUp0tJXNf7J X-Received: by 2002:a62:6105:: with SMTP id v5-v6mr11475689pfb.197.1526320790893; Mon, 14 May 2018 10:59:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526320790; cv=none; d=google.com; s=arc-20160816; b=wencvOAvpfOJlNN3K/Q4FhEFpgZkwlcE8EhjpCX2Wehq9i4aymPtnLfxKB2JZjLmer VmLvgREW+Z9trxfWvFPQwZiWlBWaaglBM5Glmv475p+qpqwhDK5iA4wRhxsT33grDEXg wWPX05krZNxRJ54IFaRwfj26TNSL62dE27esWJ0yy2sZ7jkBQC97HKm0dmL6AqpV7GqH iQ3JUcMT34vyoXIww7E2OhTeaZJGzJPr47Vq7WoQidv2Z4eagOcVfbmC8oOBMPK+SYhy j8fehmqd+cHjPyoWBr9kqxp6fPhtQD7m/Nls6XETkeW4jKwx3iGd/ITZcX8iKwcykAcd PAAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:user-agent:in-reply-to :content-disposition:mime-version:references:reply-to:subject:cc:to :from:date:arc-authentication-results; bh=pHh590TLlSGsG9TmtHKDUFJGsVzPa44mRGC1Wwsa7/c=; b=rrYxvObNPjcVQmOCv4vg6J26cN5e9KPc13AYFbMcv5mgybkNTT+XVVcMgNIioJ5j/k pPjWWzyxpuz+XEVhaF0HADdXYqs3fR9ppNCMgqWgUdLXqY2f2Eok98MnuGuV1OSqcmQH RFcofRcgrIS/0F2hqy2c10kv2PeoU/P1/5Ham9jaXJ93hIhDXT4NM1BytqsDCDnG2Cz2 fLkTeA9NliluVBEdLq5YJvq5HhuHjxmsrHgsvDS+nSoVmnRVNAiaowQcQ6JYhqY4gW0X jNM0ALTKUhKqul/Oow7kNT3MViit5sbBiGbxOUxg1/nXjZPGNbP4dFE4YOXLcfRwOFZA LhNg== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o185-v6si1197880pga.274.2018.05.14.10.59.36; Mon, 14 May 2018 10:59:50 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752015AbeENR71 (ORCPT + 99 others); Mon, 14 May 2018 13:59:27 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:37448 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750750AbeENR70 (ORCPT ); Mon, 14 May 2018 13:59:26 -0400 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w4EHxPli014241 for ; Mon, 14 May 2018 13:59:25 -0400 Received: from e13.ny.us.ibm.com (e13.ny.us.ibm.com [129.33.205.203]) by mx0a-001b2d01.pphosted.com with ESMTP id 2hydkmvd29-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 14 May 2018 13:59:25 -0400 Received: from localhost by e13.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 14 May 2018 13:59:00 -0400 Received: from b01cxnp22036.gho.pok.ibm.com (9.57.198.26) by e13.ny.us.ibm.com (146.89.104.200) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 14 May 2018 13:58:56 -0400 Received: from b01ledav003.gho.pok.ibm.com (b01ledav003.gho.pok.ibm.com [9.57.199.108]) by b01cxnp22036.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w4EHwuYE58130472; Mon, 14 May 2018 17:58:56 GMT Received: from b01ledav003.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6C90AB2052; Mon, 14 May 2018 15:00:54 -0400 (EDT) Received: from paulmck-ThinkPad-W541 (unknown [9.70.82.108]) by b01ledav003.gho.pok.ibm.com (Postfix) with ESMTP id 193C4B2054; Mon, 14 May 2018 15:00:54 -0400 (EDT) Received: by paulmck-ThinkPad-W541 (Postfix, from userid 1000) id 9744F16C2ADD; Mon, 14 May 2018 11:00:27 -0700 (PDT) Date: Mon, 14 May 2018 11:00:27 -0700 From: "Paul E. McKenney" To: "Joel Fernandes (Google)" Cc: linux-kernel@vger.kernel.org, Josh Triplett , Steven Rostedt , Mathieu Desnoyers , Lai Jiangshan , byungchul.park@lge.com, kernel-team@android.com Subject: Re: [PATCH RFC 5/8] rcu: Use rcu_node as temporary variable in funnel locking loop Reply-To: paulmck@linux.vnet.ibm.com References: <20180514031541.67247-1-joel@joelfernandes.org> <20180514031541.67247-6-joel@joelfernandes.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180514031541.67247-6-joel@joelfernandes.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-GCONF: 00 x-cbid: 18051417-0008-0000-0000-00000307534E X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00009025; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000260; SDB=6.01032272; UDB=6.00527718; IPR=6.00811403; MB=3.00021110; MTD=3.00000008; XFM=3.00000015; UTC=2018-05-14 17:58:59 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18051417-0009-0000-0000-0000393F5881 Message-Id: <20180514180027.GC26088@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-05-14_04:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1805140181 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, May 13, 2018 at 08:15:38PM -0700, Joel Fernandes (Google) wrote: > The funnel locking loop in rcu_start_this_gp uses rcu_root as a > temporary variable while walking the combining tree. This causes a > tiresome exercise of a code reader reminding themselves that rcu_root > may not be root. Lets just call it rcu_node, and then finally when > rcu_node is the rcu_root, lets assign it at that time. > > Just a clean up patch, no logical change. > > Signed-off-by: Joel Fernandes (Google) I agree that my names could use some improvement, but given that you called it rnp_node in the patch and rcu_node in the commit log, I would argue that rnp_node has a Hamming-distance problem. ;-) How about rnp_start for the formal parameter, rnp for the cursor running up the tree, and retaining rnp_root for the root? I considered and rejected the thought of rnp_leaf for the formal parameter because this function is not necessarily called with a leaf rcu_node structure. Thanx, Paul > --- > kernel/rcu/tree.c | 34 ++++++++++++++++++---------------- > 1 file changed, 18 insertions(+), 16 deletions(-) > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c > index 9f5679ba413b..40670047d22c 100644 > --- a/kernel/rcu/tree.c > +++ b/kernel/rcu/tree.c > @@ -1568,7 +1568,7 @@ static bool rcu_start_this_gp(struct rcu_node *rnp, struct rcu_data *rdp, > { > bool ret = false; > struct rcu_state *rsp = rdp->rsp; > - struct rcu_node *rnp_root; > + struct rcu_node *rnp_node, *rnp_root = NULL; > > /* > * Use funnel locking to either acquire the root rcu_node > @@ -1581,24 +1581,26 @@ static bool rcu_start_this_gp(struct rcu_node *rnp, struct rcu_data *rdp, > */ > raw_lockdep_assert_held_rcu_node(rnp); > trace_rcu_this_gp(rnp, rdp, gp_seq_start, TPS("Startleaf")); > - for (rnp_root = rnp; 1; rnp_root = rnp_root->parent) { > - if (rnp_root != rnp) > - raw_spin_lock_rcu_node(rnp_root); > - if (ULONG_CMP_GE(rnp_root->gp_seq_needed, gp_seq_start) || > - rcu_seq_done(&rnp_root->gp_seq, gp_seq_start) || > - (rnp != rnp_root && > - rcu_seq_state(rcu_seq_current(&rnp_root->gp_seq)))) { > - trace_rcu_this_gp(rnp_root, rdp, gp_seq_start, > + for (rnp_node = rnp; 1; rnp_node = rnp_node->parent) { > + if (rnp_node != rnp) > + raw_spin_lock_rcu_node(rnp_node); > + if (ULONG_CMP_GE(rnp_node->gp_seq_needed, gp_seq_start) || > + rcu_seq_done(&rnp_node->gp_seq, gp_seq_start) || > + (rnp != rnp_node && > + rcu_seq_state(rcu_seq_current(&rnp_node->gp_seq)))) { > + trace_rcu_this_gp(rnp_node, rdp, gp_seq_start, > TPS("Prestarted")); > goto unlock_out; > } > - rnp_root->gp_seq_needed = gp_seq_start; > + rnp_node->gp_seq_needed = gp_seq_start; > if (rcu_seq_state(rcu_seq_current(&rnp->gp_seq))) > goto unlock_out; > - if (rnp_root != rnp && rnp_root->parent != NULL) > - raw_spin_unlock_rcu_node(rnp_root); > - if (!rnp_root->parent) > + if (rnp_node != rnp && rnp_node->parent != NULL) > + raw_spin_unlock_rcu_node(rnp_node); > + if (!rnp_node->parent) { > + rnp_root = rnp_node; > break; /* At root, and perhaps also leaf. */ > + } > } > > /* If GP already in progress, just leave, otherwise start one. */ > @@ -1616,10 +1618,10 @@ static bool rcu_start_this_gp(struct rcu_node *rnp, struct rcu_data *rdp, > trace_rcu_grace_period(rsp->name, READ_ONCE(rsp->gp_seq), TPS("newreq")); > ret = true; /* Caller must wake GP kthread. */ > unlock_out: > - if (rnp != rnp_root) > - raw_spin_unlock_rcu_node(rnp_root); > + if (rnp != rnp_node) > + raw_spin_unlock_rcu_node(rnp_node); > /* Push furthest requested GP to leaf node and rcu_data structure. */ > - if (ULONG_CMP_GE(rnp_root->gp_seq_needed, gp_seq_start)) { > + if (ULONG_CMP_GE(rnp_node->gp_seq_needed, gp_seq_start)) { > rnp->gp_seq_needed = gp_seq_start; > rdp->gp_seq_needed = gp_seq_start; > } > -- > 2.17.0.441.gb46fe60e1d-goog >