From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751068AbdKSCpo (ORCPT ); Sat, 18 Nov 2017 21:45:44 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:36624 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750997AbdKSCpl (ORCPT ); Sat, 18 Nov 2017 21:45:41 -0500 Date: Sat, 18 Nov 2017 18:45:36 -0800 From: "Paul E. McKenney" To: Rakib Mullick Cc: linux-kernel@vger.kernel.org, mingo@kernel.org, Josh Triplett , Steven Rostedt , Mathieu Desnoyers , Lai Jiangshan Subject: Re: [PATCH] RCU: Remove have_rcu_nocb_mask from tree_plugin.h Reply-To: paulmck@linux.vnet.ibm.com References: <20171117154015.19525-1-rakib.mullick@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171117154015.19525-1-rakib.mullick@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-GCONF: 00 x-cbid: 17111902-0044-0000-0000-000003B22984 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00008091; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000240; SDB=6.00947924; UDB=6.00478601; IPR=6.00728206; BA=6.00005699; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00018088; XFM=3.00000015; UTC=2017-11-19 02:45:38 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17111902-0045-0000-0000-000007E14CA3 Message-Id: <20171119024536.GO3624@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-11-19_01:,, 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-1711190036 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Nov 17, 2017 at 09:40:15PM +0600, Rakib Mullick wrote: > Currently have_rcu_nocb_mask is used to avoid double allocation of > rcu_nocb_mask during boot up. Due to different representation of > cpumask_var_t on different kernel config CPUMASK=y(or n) it was okay. > But now we have a helper cpumask_available(), which can be utilized > to check whether rcu_nocb_mask has been allocated or not without using > a variable. > > Removing the variable also reduces vmlinux size. > > Unpatched version: > text data bss dec hex filename > 13050393 7852470 14543408 35446271 21cddff vmlinux > > Patched version: > text data bss dec hex filename > 13050390 7852438 14543408 35446236 21cdddc vmlinux > > Signed-off-by: Rakib Mullick > Cc: "Paul E. McKenney" > Cc: Josh Triplett > Cc: Steven Rostedt > Cc: Mathieu Desnoyers > Cc: Lai Jiangshan Queued for review and testing, thank you! Thanx, Paul > --- > Patch applied on top of linus's tree (commit cf9b0772f2e41). > > kernel/rcu/tree_plugin.h | 11 ++++------- > 1 file changed, 4 insertions(+), 7 deletions(-) > > diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h > index db85ca3..13a8e08 100644 > --- a/kernel/rcu/tree_plugin.h > +++ b/kernel/rcu/tree_plugin.h > @@ -61,7 +61,6 @@ DEFINE_PER_CPU(char, rcu_cpu_has_work); > > #ifdef CONFIG_RCU_NOCB_CPU > static cpumask_var_t rcu_nocb_mask; /* CPUs to have callbacks offloaded. */ > -static bool have_rcu_nocb_mask; /* Was rcu_nocb_mask allocated? */ > static bool __read_mostly rcu_nocb_poll; /* Offload kthread are to poll. */ > #endif /* #ifdef CONFIG_RCU_NOCB_CPU */ > > @@ -1752,7 +1751,6 @@ static void increment_cpu_stall_ticks(void) > static int __init rcu_nocb_setup(char *str) > { > alloc_bootmem_cpumask_var(&rcu_nocb_mask); > - have_rcu_nocb_mask = true; > cpulist_parse(str, rcu_nocb_mask); > return 1; > } > @@ -1801,7 +1799,7 @@ static void rcu_init_one_nocb(struct rcu_node *rnp) > /* Is the specified CPU a no-CBs CPU? */ > bool rcu_is_nocb_cpu(int cpu) > { > - if (have_rcu_nocb_mask) > + if (cpumask_available(rcu_nocb_mask)) > return cpumask_test_cpu(cpu, rcu_nocb_mask); > return false; > } > @@ -2295,14 +2293,13 @@ void __init rcu_init_nohz(void) > need_rcu_nocb_mask = true; > #endif /* #if defined(CONFIG_NO_HZ_FULL) */ > > - if (!have_rcu_nocb_mask && need_rcu_nocb_mask) { > + if (!cpumask_available(rcu_nocb_mask) && need_rcu_nocb_mask) { > if (!zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL)) { > pr_info("rcu_nocb_mask allocation failed, callback offloading disabled.\n"); > return; > } > - have_rcu_nocb_mask = true; > } > - if (!have_rcu_nocb_mask) > + if (!cpumask_available(rcu_nocb_mask)) > return; > > #if defined(CONFIG_NO_HZ_FULL) > @@ -2428,7 +2425,7 @@ static void __init rcu_organize_nocb_kthreads(struct rcu_state *rsp) > struct rcu_data *rdp_leader = NULL; /* Suppress misguided gcc warn. */ > struct rcu_data *rdp_prev = NULL; > > - if (!have_rcu_nocb_mask) > + if (!cpumask_available(rcu_nocb_mask)) > return; > if (ls == -1) { > ls = int_sqrt(nr_cpu_ids); > -- > 2.9.3 >