Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp1362495ybi; Fri, 12 Jul 2019 14:36:49 -0700 (PDT) X-Google-Smtp-Source: APXvYqwnuEipfTUEpnYY08VL7S7IYwsOQX9+x80H1QVZPg24cqki0QMMOiQSEv1D0IhfEHRz/Acj X-Received: by 2002:a17:902:324:: with SMTP id 33mr13859757pld.340.1562967409548; Fri, 12 Jul 2019 14:36:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562967409; cv=none; d=google.com; s=arc-20160816; b=YjFUV5AKCVrLv2N1Fg454YrFj2Gav10I1t5+hx1X+woaCY4K+beKG5hGr1JbmujUeH 4kkckiRNiKY6i34h5KpTRK16pCRDfdM/xAMrQQQMPIQwV5RSgQiE+3Nr3TuUNRlnE7EO h1TtG+/F31TWzeEERUvTZLNqKTwt06K3DnjQFnzgu3xKJO8h2QGYSS9vIXO8wfXlVzWz hzrH30E2TwpZWpDmnJqm8uOeB2wRjbN5EAzSSBQY3IRFsWP9C8nijPYvCbjFnjkeJVra ChDMGK+MNzDs0lSsrtKg1o0VWG1eoNS8A/X9uXnRMOBlTJpDj5TP222mhmfi3ZJiSsRD XleA== 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; bh=f1OhDpjzDD7S0+COFpFd965N8mxlYpQZP4b4JR0VTV8=; b=gZjFEeuPqqLB/X8gG/OzHBMCC/wtjTWlaMy88Qw3QAv/5wA9mHNwcr8kSRVvh6G1az iMA9EMp8lD5ooceZyggTcs+lNkvtzV8BVyyvr4XucWrBOTmnNMR/XFULWsAzy8Jj/oK4 /TZB9EPELNy7dEPUpg1XtO3DyblEoiiGHKxYuIoJZsedaP4kFq3XPTqx418Ehtox0fmN X3LBQCn0y2eBGytqD/OX/ExYDwQUp4fXp+9Y3FhWXkbZ2QR9cLCkH4gQLmoun2lMJFkg R6gmmgTog3OgLZftJaJ+Fsqz/HQVYddL2gZ8Sp/ioeJotT9YUPcAE0zMoEzbO4ll2TqA PHbg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=lZCvyn5n; 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 f1si9675749plf.410.2019.07.12.14.36.27; Fri, 12 Jul 2019 14:36:49 -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=@joelfernandes.org header.s=google header.b=lZCvyn5n; 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 S1728085AbfGLVgE (ORCPT + 99 others); Fri, 12 Jul 2019 17:36:04 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:34050 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728071AbfGLVgD (ORCPT ); Fri, 12 Jul 2019 17:36:03 -0400 Received: by mail-pf1-f193.google.com with SMTP id b13so4855624pfo.1 for ; Fri, 12 Jul 2019 14:36:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=f1OhDpjzDD7S0+COFpFd965N8mxlYpQZP4b4JR0VTV8=; b=lZCvyn5n8owKQ3JyeYzt9+z6iXWkLSpYG3eAl8ccauBAjpAsmohxfuQbcSnqrAuKVo EhJuv2vWWbTPd0eO0fNUhuM6JbViOUOUf/4BwXkUGXtZsJcQX4/U66ACGCFiWUk//WdV Q8H3IUlKRvwTyqp0yyd7gnCEfVZU4qo6+E1Lc= 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=f1OhDpjzDD7S0+COFpFd965N8mxlYpQZP4b4JR0VTV8=; b=JDDBeLKs0RXLNhHCvsM72v7xx5JIRtrhuu7C1MQ5LYq8J2mabxXih8NPbHGFhmxuHB ZuZ2LiE8FsknEiRm5hAhONp2xYe1y0Yk8qgYxWbSHrTSK41rgzZpd9E7jtwWIwc6a+iz IrOtfvWz7Tax/JihEb8l3wzQD1I0+LtAyGm1mi6CSiHNfZe4cVLmuKbNK7QscN1oSbEN PZCLwD5pWZOBXDvtl4/w/dTGiBlCLNEocztCkdpP8YH3+8O4vAo0Ir11hYkvgTSjqPK5 PMfzR/uEZCNNeUXeyVBtoOPs1fnWBWihuO4CY4ULio0wFffb9LTn/5CdflFI9GABEr+e matQ== X-Gm-Message-State: APjAAAUbUMW3BBbxX0ekjIQ6DpRBoNCsMLd1ICeD4c2pO2OjJQTxOisF q/G82JGgB5kQcmX5P52FXOWO62dW X-Received: by 2002:a63:fb4b:: with SMTP id w11mr13352876pgj.415.1562967362076; Fri, 12 Jul 2019 14:36:02 -0700 (PDT) Received: from localhost ([2620:15c:6:12:9c46:e0da:efbf:69cc]) by smtp.gmail.com with ESMTPSA id o32sm9047532pje.9.2019.07.12.14.36.00 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Fri, 12 Jul 2019 14:36:01 -0700 (PDT) Date: Fri, 12 Jul 2019 17:35:59 -0400 From: Joel Fernandes To: linux-kernel@vger.kernel.org Cc: Oleg Nesterov , Alexey Kuznetsov , Bjorn Helgaas , Borislav Petkov , c0d1n61at3@gmail.com, "David S. Miller" , edumazet@google.com, Greg Kroah-Hartman , Hideaki YOSHIFUJI , "H. Peter Anvin" , Ingo Molnar , Jonathan Corbet , Josh Triplett , keescook@chromium.org, kernel-hardening@lists.openwall.com, kernel-team@android.com, Lai Jiangshan , Len Brown , linux-acpi@vger.kernel.org, linux-doc@vger.kernel.org, linux-pci@vger.kernel.org, linux-pm@vger.kernel.org, Mathieu Desnoyers , neilb@suse.com, netdev@vger.kernel.org, "Paul E. McKenney" , Pavel Machek , peterz@infradead.org, "Rafael J. Wysocki" , Rasmus Villemoes , rcu@vger.kernel.org, Steven Rostedt , Tejun Heo , Thomas Gleixner , will@kernel.org, "maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)" Subject: Re: [PATCH v2 3/9] rcu/sync: Remove custom check for reader-section Message-ID: <20190712213559.GA175138@google.com> References: <20190712170024.111093-1-joel@joelfernandes.org> <20190712170024.111093-4-joel@joelfernandes.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190712170024.111093-4-joel@joelfernandes.org> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jul 12, 2019 at 01:00:18PM -0400, Joel Fernandes (Google) wrote: > The rcu/sync code was doing its own check whether we are in a reader > section. With RCU consolidating flavors and the generic helper added in > this series, this is no longer need. We can just use the generic helper > and it results in a nice cleanup. > > Cc: Oleg Nesterov > Signed-off-by: Joel Fernandes (Google) Hi Oleg, Slightly unrelated to the patch, I tried hard to understand this comment below in percpu_down_read() but no dice. I do understand how rcu sync and percpu rwsem works, however the comment below didn't make much sense to me. For one, there's no readers_fast anymore so I did not follow what readers_fast means. Could the comment be updated to reflect latest changes? Also could you help understand how is a writer not able to change sem->state and count the per-cpu read counters at the same time as the comment tries to say? /* * We are in an RCU-sched read-side critical section, so the writer * cannot both change sem->state from readers_fast and start checking * counters while we are here. So if we see !sem->state, we know that * the writer won't be checking until we're past the preempt_enable() * and that once the synchronize_rcu() is done, the writer will see * anything we did within this RCU-sched read-size critical section. */ Also, I guess we could get rid of all of the gp_ops struct stuff now that since all the callbacks are the same now. I will post that as a follow-up patch to this series. thanks! - Joel > --- > Please note: Only build and boot tested this particular patch so far. > > include/linux/rcu_sync.h | 5 ++--- > kernel/rcu/sync.c | 22 ---------------------- > 2 files changed, 2 insertions(+), 25 deletions(-) > > diff --git a/include/linux/rcu_sync.h b/include/linux/rcu_sync.h > index 6fc53a1345b3..c954f1efc919 100644 > --- a/include/linux/rcu_sync.h > +++ b/include/linux/rcu_sync.h > @@ -39,9 +39,8 @@ extern void rcu_sync_lockdep_assert(struct rcu_sync *); > */ > static inline bool rcu_sync_is_idle(struct rcu_sync *rsp) > { > -#ifdef CONFIG_PROVE_RCU > - rcu_sync_lockdep_assert(rsp); > -#endif > + RCU_LOCKDEP_WARN(!rcu_read_lock_any_held(), > + "suspicious rcu_sync_is_idle() usage"); > return !rsp->gp_state; /* GP_IDLE */ > } > > diff --git a/kernel/rcu/sync.c b/kernel/rcu/sync.c > index a8304d90573f..535e02601f56 100644 > --- a/kernel/rcu/sync.c > +++ b/kernel/rcu/sync.c > @@ -10,37 +10,25 @@ > #include > #include > > -#ifdef CONFIG_PROVE_RCU > -#define __INIT_HELD(func) .held = func, > -#else > -#define __INIT_HELD(func) > -#endif > - > static const struct { > void (*sync)(void); > void (*call)(struct rcu_head *, void (*)(struct rcu_head *)); > void (*wait)(void); > -#ifdef CONFIG_PROVE_RCU > - int (*held)(void); > -#endif > } gp_ops[] = { > [RCU_SYNC] = { > .sync = synchronize_rcu, > .call = call_rcu, > .wait = rcu_barrier, > - __INIT_HELD(rcu_read_lock_held) > }, > [RCU_SCHED_SYNC] = { > .sync = synchronize_rcu, > .call = call_rcu, > .wait = rcu_barrier, > - __INIT_HELD(rcu_read_lock_sched_held) > }, > [RCU_BH_SYNC] = { > .sync = synchronize_rcu, > .call = call_rcu, > .wait = rcu_barrier, > - __INIT_HELD(rcu_read_lock_bh_held) > }, > }; > > @@ -49,16 +37,6 @@ enum { CB_IDLE = 0, CB_PENDING, CB_REPLAY }; > > #define rss_lock gp_wait.lock > > -#ifdef CONFIG_PROVE_RCU > -void rcu_sync_lockdep_assert(struct rcu_sync *rsp) > -{ > - RCU_LOCKDEP_WARN(!gp_ops[rsp->gp_type].held(), > - "suspicious rcu_sync_is_idle() usage"); > -} > - > -EXPORT_SYMBOL_GPL(rcu_sync_lockdep_assert); > -#endif > - > /** > * rcu_sync_init() - Initialize an rcu_sync structure > * @rsp: Pointer to rcu_sync structure to be initialized > -- > 2.22.0.510.g264f2c817a-goog >