From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754720AbdESHMv (ORCPT ); Fri, 19 May 2017 03:12:51 -0400 Received: from forwardcorp1h.cmail.yandex.net ([87.250.230.216]:54432 "EHLO forwardcorp1h.cmail.yandex.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751418AbdESHMq (ORCPT ); Fri, 19 May 2017 03:12:46 -0400 X-Greylist: delayed 521 seconds by postgrey-1.27 at vger.kernel.org; Fri, 19 May 2017 03:12:46 EDT Authentication-Results: smtpcorp1m.mail.yandex.net; dkim=pass header.i=@yandex-team.ru Subject: [PATCH] rcu: mark debug_lockdep_rcu_enabled() as pure From: Konstantin Khlebnikov To: linux-kernel@vger.kernel.org Cc: Peter Zijlstra , Lai Jiangshan , Josh Triplett , Steven Rostedt , Ingo Molnar , Mathieu Desnoyers , "Paul E. McKenney" Date: Fri, 19 May 2017 10:03:59 +0300 Message-ID: <149517743964.33034.3209718816521589307.stgit@buzz> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This allows to get rid of unneeded invocations. Function debug_lockdep_rcu_enabled() becomes really hot if several debug options are enabled together with CONFIG_PROVE_RCU. Hottest path ends with: debug_lockdep_rcu_enabled is_ftrace_trampoline __kernel_text_address Here debug_lockdep_rcu_enabled() is called from condition (debug_lockdep_rcu_enabled() && !__warned && (c)) inside macro do_for_each_ftrace_op(), where "c" is false. With this patch "netperf -H localhost" shows boost from 2400 to 2500. Signed-off-by: Konstantin Khlebnikov --- include/linux/rcupdate.h | 2 +- kernel/rcu/update.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index e1e5d002fdb9..9ecb3cb715bd 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -472,7 +472,7 @@ extern struct lockdep_map rcu_lock_map; extern struct lockdep_map rcu_bh_lock_map; extern struct lockdep_map rcu_sched_lock_map; extern struct lockdep_map rcu_callback_map; -int debug_lockdep_rcu_enabled(void); +int __pure debug_lockdep_rcu_enabled(void); int rcu_read_lock_held(void); int rcu_read_lock_bh_held(void); diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c index 273e869ca21d..a0c30abefdcd 100644 --- a/kernel/rcu/update.c +++ b/kernel/rcu/update.c @@ -292,7 +292,7 @@ struct lockdep_map rcu_callback_map = STATIC_LOCKDEP_MAP_INIT("rcu_callback", &rcu_callback_key); EXPORT_SYMBOL_GPL(rcu_callback_map); -int notrace debug_lockdep_rcu_enabled(void) +int __pure notrace debug_lockdep_rcu_enabled(void) { return rcu_scheduler_active != RCU_SCHEDULER_INACTIVE && debug_locks && current->lockdep_recursion == 0;