Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp102586ybi; Thu, 1 Aug 2019 15:27:26 -0700 (PDT) X-Google-Smtp-Source: APXvYqwUzL3o0H7juF8bbVTvYb6VH6alf1b0zyklqF0ApG7A7q0ZuVworA6r+8DY9o1JgAQU9BLp X-Received: by 2002:a63:6901:: with SMTP id e1mr90051470pgc.390.1564698446649; Thu, 01 Aug 2019 15:27:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564698446; cv=none; d=google.com; s=arc-20160816; b=UawWoCD491pTs99HENnnOhFBgNZX/92NJq95aZmY4ivoAqRh+/Kf9BO9MQ9soetC4F LNc/bkLV191/NaRUcsy2/RyPvBzKnvGvkcZlo+neNDDvD36gq80Lo8fnDubRAiHw+OyB Khx8iFa0LNfw3kx74/mtsMFdr96MrV5H2ZhA/JUbqyS8VlVdyKddXhtR4boFciLkl/zK NgaIvz6R5j6htv3RUR7huGKX9M4np6Q4LV8lJjIZvYXjCuGhuKBzVuot0ULEWRLhqN1M EcwAdK1u7sIAgJHsjaEHRMwiXCNz3DAYfYpy/TGXJoKHNlHVfeGaFqLS8T6tEEJ9XDRI IBuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=VtEVs28pcx+R11OqcxdYNvkun1RRpQ2WR9PzINStNLg=; b=mhjBN8uA19vNeOUwLxTpN41E/gsKYNM3EVC9wnwPQFaYRTvYLB6YqTLl/HIazMJklN OwQMw8iPhAMNhaM3/0E63pOBT7weE51X02ri4nnQZC0spkTwt1dg3L1kTAVV1Nawy9m8 Ro1P0mwVBXe184i2Q2LuCvsxeWjG3ww8p/3TrCyIPwXVbW9Bx0AGA/bjok1kUsOV/uJl x7HyD7bIF12FvcVh01y0VdSAeZzW0yYxw/Jskk3HxsPYFu1W42JQcfTP50HWp25zwVRJ qmjndG8WMrHz1XC9JyFxKpzDpzb4w894oc6aG6mrloNtW9hhKBNzwyk8K9P1R7prFSlO v09g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=hrLmkwAe; 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 c8si32586524pls.436.2019.08.01.15.27.11; Thu, 01 Aug 2019 15:27:26 -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=hrLmkwAe; 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 S2388171AbfHASO0 (ORCPT + 99 others); Thu, 1 Aug 2019 14:14:26 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:40384 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388150AbfHASOX (ORCPT ); Thu, 1 Aug 2019 14:14:23 -0400 Received: by mail-pl1-f193.google.com with SMTP id a93so32512060pla.7 for ; Thu, 01 Aug 2019 11:14:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VtEVs28pcx+R11OqcxdYNvkun1RRpQ2WR9PzINStNLg=; b=hrLmkwAen060wVuTuRN9+LZt8J5otJRPcPXHJtayUa2WUrf43XWDWat3sgIJORZfoU yB/0dLVKoTEiUK+dPNVTwXWJnMOW+8w7UuRY1AuTD/ym0HjNMlcg3PsmXWMeVI2dzKVi CmzYPOzWN1rTfdBooVbmSgmv4lQG0fs3vBIVQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VtEVs28pcx+R11OqcxdYNvkun1RRpQ2WR9PzINStNLg=; b=hOwJoVbWD8iimorlkkVPvP5KNgEYCr/4i7NeddRyGu8xl5S3mhF0tFedImPf9TDuz5 odDqZijn4+oMgFU8QWODFYoVWNbf4MiYQW/YxXqGvZo7UAg34n+6bzn2zixFZmmZ2U8F i9AORFGTuC6iGRu/xOMIqPIPTY1ySJ71rwCo/OyQuRsMOdfTTpJ+TpFO74f/ftsG7/ul xY64IfzZKGynW/CM7fPOkYnozfpplttKBULMbtVcgEnQc3XLQ8RmzCNnPx80Ivbpv2mB L/4Vzx4DaC/BAV1HSZnrulQMM3L4tmmUCbFZyO3zh4L05mcUgcEogrWp/nQTVF2liG4J lJBw== X-Gm-Message-State: APjAAAURZz9t8h/7CTVMMSnKX0vYkvax//BXhAPkPE3Ed587qZxGnc7Y vx6XVyY/kf+bxUj3M3P5AWLPnPrX X-Received: by 2002:a17:902:8203:: with SMTP id x3mr128386713pln.304.1564683261513; Thu, 01 Aug 2019 11:14:21 -0700 (PDT) Received: from joelaf.cam.corp.google.com ([2620:15c:6:12:9c46:e0da:efbf:69cc]) by smtp.gmail.com with ESMTPSA id g8sm82089165pgk.1.2019.08.01.11.14.20 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Thu, 01 Aug 2019 11:14:20 -0700 (PDT) From: "Joel Fernandes (Google)" To: linux-kernel@vger.kernel.org Cc: "Joel Fernandes (Google)" , "Paul E. McKenney" , rcu@vger.kernel.org Subject: [PATCH 2/9] Revert "rcu: Add support for consolidated-RCU reader checking" Date: Thu, 1 Aug 2019 14:14:04 -0400 Message-Id: <20190801181411.96429-3-joel@joelfernandes.org> X-Mailer: git-send-email 2.22.0.770.g0f2c4a37fd-goog In-Reply-To: <20190801181411.96429-1-joel@joelfernandes.org> References: <20190801181411.96429-1-joel@joelfernandes.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This reverts commit 50ad3f1f9b13c8a6f2ae79df4cecb2c21da1c7c8. --- include/linux/rculist.h | 32 ++++---------------- include/linux/rcupdate.h | 7 ----- kernel/rcu/Kconfig.debug | 11 ------- kernel/rcu/update.c | 65 ++++++++++++++-------------------------- 4 files changed, 27 insertions(+), 88 deletions(-) diff --git a/include/linux/rculist.h b/include/linux/rculist.h index 4158b7212936..932296144131 100644 --- a/include/linux/rculist.h +++ b/include/linux/rculist.h @@ -40,24 +40,6 @@ static inline void INIT_LIST_HEAD_RCU(struct list_head *list) */ #define list_next_rcu(list) (*((struct list_head __rcu **)(&(list)->next))) -/* - * Check during list traversal that we are within an RCU reader - */ - -#define check_arg_count_one(dummy) - -#ifdef CONFIG_PROVE_RCU_LIST -#define __list_check_rcu(dummy, cond, extra...) \ - ({ \ - check_arg_count_one(extra); \ - RCU_LOCKDEP_WARN(!cond && !rcu_read_lock_any_held(), \ - "RCU-list traversed in non-reader section!"); \ - }) -#else -#define __list_check_rcu(dummy, cond, extra...) \ - ({ check_arg_count_one(extra); }) -#endif - /* * Insert a new entry between two known consecutive entries. * @@ -361,16 +343,14 @@ static inline void list_splice_tail_init_rcu(struct list_head *list, * @pos: the type * to use as a loop cursor. * @head: the head for your list. * @member: the name of the list_head within the struct. - * @cond: optional lockdep expression if called from non-RCU protection. * * This list-traversal primitive may safely run concurrently with * the _rcu list-mutation primitives such as list_add_rcu() * as long as the traversal is guarded by rcu_read_lock(). */ -#define list_for_each_entry_rcu(pos, head, member, cond...) \ - for (__list_check_rcu(dummy, ## cond, 0), \ - pos = list_entry_rcu((head)->next, typeof(*pos), member); \ - &pos->member != (head); \ +#define list_for_each_entry_rcu(pos, head, member) \ + for (pos = list_entry_rcu((head)->next, typeof(*pos), member); \ + &pos->member != (head); \ pos = list_entry_rcu(pos->member.next, typeof(*pos), member)) /** @@ -636,15 +616,13 @@ static inline void hlist_add_behind_rcu(struct hlist_node *n, * @pos: the type * to use as a loop cursor. * @head: the head for your list. * @member: the name of the hlist_node within the struct. - * @cond: optional lockdep expression if called from non-RCU protection. * * This list-traversal primitive may safely run concurrently with * the _rcu list-mutation primitives such as hlist_add_head_rcu() * as long as the traversal is guarded by rcu_read_lock(). */ -#define hlist_for_each_entry_rcu(pos, head, member, cond...) \ - for (__list_check_rcu(dummy, ## cond, 0), \ - pos = hlist_entry_safe(rcu_dereference_raw(hlist_first_rcu(head)),\ +#define hlist_for_each_entry_rcu(pos, head, member) \ + for (pos = hlist_entry_safe(rcu_dereference_raw(hlist_first_rcu(head)),\ typeof(*(pos)), member); \ pos; \ pos = hlist_entry_safe(rcu_dereference_raw(hlist_next_rcu(\ diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 80d6056f5855..bfcafbc1e301 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -221,7 +221,6 @@ int debug_lockdep_rcu_enabled(void); int rcu_read_lock_held(void); int rcu_read_lock_bh_held(void); int rcu_read_lock_sched_held(void); -int rcu_read_lock_any_held(void); #else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */ @@ -242,12 +241,6 @@ static inline int rcu_read_lock_sched_held(void) { return !preemptible(); } - -static inline int rcu_read_lock_any_held(void) -{ - return !preemptible(); -} - #endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */ #ifdef CONFIG_PROVE_RCU diff --git a/kernel/rcu/Kconfig.debug b/kernel/rcu/Kconfig.debug index 4aa02eee8f6c..5ec3ea4028e2 100644 --- a/kernel/rcu/Kconfig.debug +++ b/kernel/rcu/Kconfig.debug @@ -8,17 +8,6 @@ menu "RCU Debugging" config PROVE_RCU def_bool PROVE_LOCKING -config PROVE_RCU_LIST - bool "RCU list lockdep debugging" - depends on PROVE_RCU && RCU_EXPERT - default n - help - Enable RCU lockdep checking for list usages. By default it is - turned off since there are several list RCU users that still - need to be converted to pass a lockdep expression. To prevent - false-positive splats, we keep it default disabled but once all - users are converted, we can remove this config option. - config TORTURE_TEST tristate default n diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c index c768f1fd6804..64e9cc8609e7 100644 --- a/kernel/rcu/update.c +++ b/kernel/rcu/update.c @@ -91,30 +91,19 @@ module_param(rcu_normal_after_boot, int, 0); * Similarly, we avoid claiming an SRCU read lock held if the current * CPU is offline. */ -static bool rcu_read_lock_held_common(bool *ret) -{ - if (!debug_lockdep_rcu_enabled()) { - *ret = 1; - return true; - } - if (!rcu_is_watching()) { - *ret = 0; - return true; - } - if (!rcu_lockdep_current_cpu_online()) { - *ret = 0; - return true; - } - return false; -} - int rcu_read_lock_sched_held(void) { - bool ret; + int lockdep_opinion = 0; - if (rcu_read_lock_held_common(&ret)) - return ret; - return lock_is_held(&rcu_sched_lock_map) || !preemptible(); + if (!debug_lockdep_rcu_enabled()) + return 1; + if (!rcu_is_watching()) + return 0; + if (!rcu_lockdep_current_cpu_online()) + return 0; + if (debug_locks) + lockdep_opinion = lock_is_held(&rcu_sched_lock_map); + return lockdep_opinion || !preemptible(); } EXPORT_SYMBOL(rcu_read_lock_sched_held); #endif @@ -271,10 +260,12 @@ NOKPROBE_SYMBOL(debug_lockdep_rcu_enabled); */ int rcu_read_lock_held(void) { - bool ret; - - if (rcu_read_lock_held_common(&ret)) - return ret; + if (!debug_lockdep_rcu_enabled()) + return 1; + if (!rcu_is_watching()) + return 0; + if (!rcu_lockdep_current_cpu_online()) + return 0; return lock_is_held(&rcu_lock_map); } EXPORT_SYMBOL_GPL(rcu_read_lock_held); @@ -296,28 +287,16 @@ EXPORT_SYMBOL_GPL(rcu_read_lock_held); */ int rcu_read_lock_bh_held(void) { - bool ret; - - if (rcu_read_lock_held_common(&ret)) - return ret; + if (!debug_lockdep_rcu_enabled()) + return 1; + if (!rcu_is_watching()) + return 0; + if (!rcu_lockdep_current_cpu_online()) + return 0; return in_softirq() || irqs_disabled(); } EXPORT_SYMBOL_GPL(rcu_read_lock_bh_held); -int rcu_read_lock_any_held(void) -{ - bool ret; - - if (rcu_read_lock_held_common(&ret)) - return ret; - if (lock_is_held(&rcu_lock_map) || - lock_is_held(&rcu_bh_lock_map) || - lock_is_held(&rcu_sched_lock_map)) - return 1; - return !preemptible(); -} -EXPORT_SYMBOL_GPL(rcu_read_lock_any_held); - #endif /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */ /** -- 2.22.0.770.g0f2c4a37fd-goog