Message ID | 20230202070245.3311951-1-qiang1.zhang@intel.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp83071wrn; Wed, 1 Feb 2023 23:04:29 -0800 (PST) X-Google-Smtp-Source: AK7set9ulV3KVt55e9+rYhG0N1Zo8Sk8u6VryiCbd0v7VnIaRu+7djCgJwC4TtsvR9T42o0mKCHF X-Received: by 2002:a17:907:6d17:b0:88d:ba89:1843 with SMTP id sa23-20020a1709076d1700b0088dba891843mr1341571ejc.20.1675321469634; Wed, 01 Feb 2023 23:04:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675321469; cv=none; d=google.com; s=arc-20160816; b=UQPRWnizlDGorPgmDdxedHsgqNcZ+UKoVAn/JglE3TC5waXSXWjf3BFHm0lUSwod1I vmzT+5OcJanq5nl+LFWFC0jCgqjxx+ZgZJfevfUg2Er5bIin5T7BxuvwlIIUZzOVVCtB IKGl39sd1ThmZ7019Ceo8PQw0CTV18kIP8P9B2UUtyqy3SBamul8mrec89aTHm1ORKRC WWOEq5cOr+cM6gKpIqwO/HVdjJ9tW2xoXlzNGewIL2MjU4Fb0zFrlwq3shyuXFJiQ9/w jY6JYybu8inYaH2W6mS+KGSZrXE6Kb/KyR2foBymQbALmO/w+wAwR4odJM99T2aqgZFR lnXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=i7BALCsgyj40P4ND2FDajmLnAzDYsyZ1aJ0FK/VCosI=; b=Q5D2tmP/4aQCXjiauHUGTazDuyZSeNhSE9eoxEkyWuWjVegNwXT0aQ+F9BDGejmYnF 0uOMPnKl33xruRmRgH2Gzw1/xjpjggtDop2E/v/x/OQl6f9yy9K2M0c4TOLAaQYva93O sH1Zvx1W9jOs1cAtK1bdP71BvFESljGWpelpO5zVdnrGkRHbOCdTriP85lJjDUkG5+tx YL6I160xbWMlIbP5MvUs098L0tdb9l1IePA0siPjzGXEbd3KSXo0/iCBFN/erPPdKFoD yzOOyTGKJL9hPvy9t+q8yllCVZQ82ShI7uoWUGEuZB3qReUiJ6XviRdgi/S8gvPoSrsq GgRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=EAhOvgqy; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hp37-20020a1709073e2500b008776a7302e2si34297176ejc.402.2023.02.01.23.04.04; Wed, 01 Feb 2023 23:04:29 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=EAhOvgqy; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229915AbjBBG5m (ORCPT <rfc822;il.mystafa@gmail.com> + 99 others); Thu, 2 Feb 2023 01:57:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44148 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229546AbjBBG5l (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Thu, 2 Feb 2023 01:57:41 -0500 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 45E2818ABE; Wed, 1 Feb 2023 22:57:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1675321060; x=1706857060; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=Wzqp+Jk3onerpOsKwl6dtIABBtz+CT+6UyzxpOGfv20=; b=EAhOvgqye7/fgluD6+RSdoHwWZlr5MrcOMBNjDfQIYB4yP+g/nuiCpAs +93L4mCD8W9PLp6A4a/fHfpzOMoF+9zJt7tjqTB25XNZYKu3QWGjRvBZt 0QLoG5796h45eEF0ioFc7dozAlDxKQaVjLprErZr5SfXm7ig5wAxdA2kY vMnZm0y6LOgdy37FvbLbLVTBOERK4m9wIHQwvHevZ/mEjtHdlgFgapp7X 0pBVa0rP4VmWv2Kh9/0l8akQMlZ6W14Zyg15s4pUVO9d+FCd0F1Y+wJO+ k4Hdu3jxTETEUz+hy7I6Y0O0Afrnt4VrO/9YFRxK099dFVYW3xALUJtRN Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10608"; a="326069302" X-IronPort-AV: E=Sophos;i="5.97,266,1669104000"; d="scan'208";a="326069302" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Feb 2023 22:57:40 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10608"; a="773747679" X-IronPort-AV: E=Sophos;i="5.97,266,1669104000"; d="scan'208";a="773747679" Received: from zq-optiplex-7090.bj.intel.com ([10.238.156.129]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Feb 2023 22:57:38 -0800 From: Zqiang <qiang1.zhang@intel.com> To: paulmck@kernel.org, frederic@kernel.org, quic_neeraju@quicinc.com, joel@joelfernandes.org Cc: rcu@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] rcutorture: Create nocb tasks only for CONFIG_RCU_NOCB_CPU=y kernels Date: Thu, 2 Feb 2023 15:02:45 +0800 Message-Id: <20230202070245.3311951-1-qiang1.zhang@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756700833944506902?= X-GMAIL-MSGID: =?utf-8?q?1756701885211927104?= |
Series |
[v2] rcutorture: Create nocb tasks only for CONFIG_RCU_NOCB_CPU=y kernels
|
|
Commit Message
Zqiang
Feb. 2, 2023, 7:02 a.m. UTC
When setting nocbs_nthreads to start rcutorture test with a non-zero value,
the nocb tasks will be created and invoke rcu_nocb_cpu_offload/deoffload()
to toggle CPU's callback-offload state, but for CONFIG_RCU_NOCB_CPU=n
kernel, the rcu_nocb_cpu_offload/deoffload() is a no-op and this is also
meaningless for torture_type is non-rcu.
This commit therefore add member can_nocbs_toggle to rcu_torture_ops
structure to avoid unnecessary nocb tasks creation.
Signed-off-by: Zqiang <qiang1.zhang@intel.com>
---
kernel/rcu/rcutorture.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
Comments
> On Feb 2, 2023, at 1:57 AM, Zqiang <qiang1.zhang@intel.com> wrote: > > When setting nocbs_nthreads to start rcutorture test with a non-zero value, > the nocb tasks will be created and invoke rcu_nocb_cpu_offload/deoffload() > to toggle CPU's callback-offload state, but for CONFIG_RCU_NOCB_CPU=n > kernel, the rcu_nocb_cpu_offload/deoffload() is a no-op and this is also > meaningless for torture_type is non-rcu. > > This commit therefore add member can_nocbs_toggle to rcu_torture_ops > structure to avoid unnecessary nocb tasks creation. > > Signed-off-by: Zqiang <qiang1.zhang@intel.com> > --- > kernel/rcu/rcutorture.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) Sorry if I am missing something but what is the point of adding more lines of code and complexity to handle this? Does it improve the test coverage or reduce overhead? This is test code. I see no problem with cost of an extra unused task with positive trade off of keeping the code simple… thanks, - Joel > > diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c > index 297da28ce92d..ced0a8e1d765 100644 > --- a/kernel/rcu/rcutorture.c > +++ b/kernel/rcu/rcutorture.c > @@ -383,6 +383,7 @@ struct rcu_torture_ops { > long cbflood_max; > int irq_capable; > int can_boost; > + int can_nocbs_toggle; > int extendables; > int slow_gps; > int no_pi_lock; > @@ -569,6 +570,7 @@ static struct rcu_torture_ops rcu_ops = { > .stall_dur = rcu_jiffies_till_stall_check, > .irq_capable = 1, > .can_boost = IS_ENABLED(CONFIG_RCU_BOOST), > + .can_nocbs_toggle = IS_ENABLED(CONFIG_RCU_NOCB_CPU), > .extendables = RCUTORTURE_MAX_EXTEND, > .name = "rcu" > }; > @@ -2356,7 +2358,7 @@ rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, const char *tag) > "n_barrier_cbs=%d " > "onoff_interval=%d onoff_holdoff=%d " > "read_exit_delay=%d read_exit_burst=%d " > - "nocbs_nthreads=%d nocbs_toggle=%d " > + "nocbs_nthreads=%d/%d nocbs_toggle=%d " > "test_nmis=%d\n", > torture_type, tag, nrealreaders, nfakewriters, > stat_interval, verbose, test_no_idle_hz, shuffle_interval, > @@ -2368,7 +2370,7 @@ rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, const char *tag) > n_barrier_cbs, > onoff_interval, onoff_holdoff, > read_exit_delay, read_exit_burst, > - nocbs_nthreads, nocbs_toggle, > + nocbs_nthreads, cur_ops->can_nocbs_toggle, nocbs_toggle, > test_nmis); > } > > @@ -3708,6 +3710,10 @@ rcu_torture_init(void) > pr_alert("rcu-torture: ->fqs NULL and non-zero fqs_duration, fqs disabled.\n"); > fqs_duration = 0; > } > + if (!cur_ops->can_nocbs_toggle && nocbs_nthreads != 0) { > + pr_alert("rcu-torture: ->can_nocbs_toggle false and non-zero nocbs_nthreads, nocbs_toggle disabled.\n"); > + nocbs_nthreads = 0; > + } > if (cur_ops->init) > cur_ops->init(); > > -- > 2.25.1 >
> On Feb 2, 2023, at 1:57 AM, Zqiang <qiang1.zhang@intel.com> wrote: > > When setting nocbs_nthreads to start rcutorture test with a non-zero value, > the nocb tasks will be created and invoke rcu_nocb_cpu_offload/deoffload() > to toggle CPU's callback-offload state, but for CONFIG_RCU_NOCB_CPU=n > kernel, the rcu_nocb_cpu_offload/deoffload() is a no-op and this is also > meaningless for torture_type is non-rcu. > > This commit therefore add member can_nocbs_toggle to rcu_torture_ops > structure to avoid unnecessary nocb tasks creation. > > Signed-off-by: Zqiang <qiang1.zhang@intel.com> > --- > kernel/rcu/rcutorture.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > >Sorry if I am missing something but what is the point of adding more lines of code and complexity to handle this? Does it improve the test coverage or reduce overhead? > >This is test code. I see no problem with cost of an extra unused task with positive trade off of keeping the code simple… For nocbs_nthreads is non-zero and CONFIG_RCU_NOCB_CPU=n kernels, the rcu_nocb_cpu_offload/deoffload() is a no-op, we create nocbs_nthreads kthreads and perform nocb toggle tests periodically, which is meaningless and will take extra cpu time. For non-rcu tests, it really doesn't make sense for us to turn on nocb toggle test. Does this make the test a little more rigorous? Thanks Zqiang > >thanks, > > - Joel > > diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c > index 297da28ce92d..ced0a8e1d765 100644 > --- a/kernel/rcu/rcutorture.c > +++ b/kernel/rcu/rcutorture.c > @@ -383,6 +383,7 @@ struct rcu_torture_ops { > long cbflood_max; > int irq_capable; > int can_boost; > + int can_nocbs_toggle; > int extendables; > int slow_gps; > int no_pi_lock; > @@ -569,6 +570,7 @@ static struct rcu_torture_ops rcu_ops = { > .stall_dur = rcu_jiffies_till_stall_check, > .irq_capable = 1, > .can_boost = IS_ENABLED(CONFIG_RCU_BOOST), > + .can_nocbs_toggle = IS_ENABLED(CONFIG_RCU_NOCB_CPU), > .extendables = RCUTORTURE_MAX_EXTEND, > .name = "rcu" > }; > @@ -2356,7 +2358,7 @@ rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, const char *tag) > "n_barrier_cbs=%d " > "onoff_interval=%d onoff_holdoff=%d " > "read_exit_delay=%d read_exit_burst=%d " > - "nocbs_nthreads=%d nocbs_toggle=%d " > + "nocbs_nthreads=%d/%d nocbs_toggle=%d " > "test_nmis=%d\n", > torture_type, tag, nrealreaders, nfakewriters, > stat_interval, verbose, test_no_idle_hz, shuffle_interval, > @@ -2368,7 +2370,7 @@ rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, const char *tag) > n_barrier_cbs, > onoff_interval, onoff_holdoff, > read_exit_delay, read_exit_burst, > - nocbs_nthreads, nocbs_toggle, > + nocbs_nthreads, cur_ops->can_nocbs_toggle, nocbs_toggle, > test_nmis); > } > > @@ -3708,6 +3710,10 @@ rcu_torture_init(void) > pr_alert("rcu-torture: ->fqs NULL and non-zero fqs_duration, fqs disabled.\n"); > fqs_duration = 0; > } > + if (!cur_ops->can_nocbs_toggle && nocbs_nthreads != 0) { > + pr_alert("rcu-torture: ->can_nocbs_toggle false and non-zero nocbs_nthreads, nocbs_toggle disabled.\n"); > + nocbs_nthreads = 0; > + } > if (cur_ops->init) > cur_ops->init(); > > -- > 2.25.1 >
On Thu, Feb 2, 2023 at 4:25 PM Zhang, Qiang1 <qiang1.zhang@intel.com> wrote: > > > > On Feb 2, 2023, at 1:57 AM, Zqiang <qiang1.zhang@intel.com> wrote: > > > > When setting nocbs_nthreads to start rcutorture test with a non-zero value, > > the nocb tasks will be created and invoke rcu_nocb_cpu_offload/deoffload() > > to toggle CPU's callback-offload state, but for CONFIG_RCU_NOCB_CPU=n > > kernel, the rcu_nocb_cpu_offload/deoffload() is a no-op and this is also > > meaningless for torture_type is non-rcu. > > > > This commit therefore add member can_nocbs_toggle to rcu_torture_ops > > structure to avoid unnecessary nocb tasks creation. > > > > Signed-off-by: Zqiang <qiang1.zhang@intel.com> > > --- > > kernel/rcu/rcutorture.c | 10 ++++++++-- > > 1 file changed, 8 insertions(+), 2 deletions(-) > > > >Sorry if I am missing something but what is the point of adding more lines of code and complexity to handle this? Does it improve the test coverage or reduce overhead? > > > >This is test code. I see no problem with cost of an extra unused task with positive trade off of keeping the code simple… > > For nocbs_nthreads is non-zero and CONFIG_RCU_NOCB_CPU=n kernels, > the rcu_nocb_cpu_offload/deoffload() is a no-op, we create nocbs_nthreads > kthreads and perform nocb toggle tests periodically, which is meaningless and > will take extra cpu time. Ah, ok. I see what you did now, could you add these details to the changelog. One comment below: [...] > > @@ -569,6 +570,7 @@ static struct rcu_torture_ops rcu_ops = { > > .stall_dur = rcu_jiffies_till_stall_check, > > .irq_capable = 1, > > .can_boost = IS_ENABLED(CONFIG_RCU_BOOST), > > + .can_nocbs_toggle = IS_ENABLED(CONFIG_RCU_NOCB_CPU), > > .extendables = RCUTORTURE_MAX_EXTEND, > > .name = "rcu" > > }; > > @@ -2356,7 +2358,7 @@ rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, const char *tag) > > "n_barrier_cbs=%d " > > "onoff_interval=%d onoff_holdoff=%d " > > "read_exit_delay=%d read_exit_burst=%d " > > - "nocbs_nthreads=%d nocbs_toggle=%d " > > + "nocbs_nthreads=%d/%d nocbs_toggle=%d " > > "test_nmis=%d\n", > > torture_type, tag, nrealreaders, nfakewriters, > > stat_interval, verbose, test_no_idle_hz, shuffle_interval, > > @@ -2368,7 +2370,7 @@ rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, const char *tag) > > n_barrier_cbs, > > onoff_interval, onoff_holdoff, > > read_exit_delay, read_exit_burst, > > - nocbs_nthreads, nocbs_toggle, > > + nocbs_nthreads, cur_ops->can_nocbs_toggle, nocbs_toggle, > > test_nmis); > > } > > > > @@ -3708,6 +3710,10 @@ rcu_torture_init(void) > > pr_alert("rcu-torture: ->fqs NULL and non-zero fqs_duration, fqs disabled.\n"); > > fqs_duration = 0; > > } > > + if (!cur_ops->can_nocbs_toggle && nocbs_nthreads != 0) { > > + pr_alert("rcu-torture: ->can_nocbs_toggle false and non-zero nocbs_nthreads, nocbs_toggle disabled.\n"); > > + nocbs_nthreads = 0; > > + } Instead of adding a hook, why not check for CONFIG_RCU_NOCB_CPU here? so like: if (cur_ops != &rcu_ops || !IS_ENABLED(CONFIG_RCU_NOCB_CPU)) nocbs_nthreads = 0; Or will that not work for some reason? Just 2 line change and no ugly hooks =) - Joel
> > > > On Feb 2, 2023, at 1:57 AM, Zqiang <qiang1.zhang@intel.com> wrote: > > > > When setting nocbs_nthreads to start rcutorture test with a non-zero value, > > the nocb tasks will be created and invoke rcu_nocb_cpu_offload/deoffload() > > to toggle CPU's callback-offload state, but for CONFIG_RCU_NOCB_CPU=n > > kernel, the rcu_nocb_cpu_offload/deoffload() is a no-op and this is also > > meaningless for torture_type is non-rcu. > > > > This commit therefore add member can_nocbs_toggle to rcu_torture_ops > > structure to avoid unnecessary nocb tasks creation. > > > > Signed-off-by: Zqiang <qiang1.zhang@intel.com> > > --- > > kernel/rcu/rcutorture.c | 10 ++++++++-- > > 1 file changed, 8 insertions(+), 2 deletions(-) > > > >Sorry if I am missing something but what is the point of adding more lines of code and complexity to handle this? Does it improve the test coverage or reduce overhead? > > > >This is test code. I see no problem with cost of an extra unused task with positive trade off of keeping the code simple… > > For nocbs_nthreads is non-zero and CONFIG_RCU_NOCB_CPU=n kernels, > the rcu_nocb_cpu_offload/deoffload() is a no-op, we create nocbs_nthreads > kthreads and perform nocb toggle tests periodically, which is meaningless and > will take extra cpu time. > >Ah, ok. I see what you did now, could you add these details to the >changelog. One comment below: > >[...] > > @@ -569,6 +570,7 @@ static struct rcu_torture_ops rcu_ops = { > > .stall_dur = rcu_jiffies_till_stall_check, > > .irq_capable = 1, > > .can_boost = IS_ENABLED(CONFIG_RCU_BOOST), > > + .can_nocbs_toggle = IS_ENABLED(CONFIG_RCU_NOCB_CPU), > > .extendables = RCUTORTURE_MAX_EXTEND, > > .name = "rcu" > > }; > > @@ -2356,7 +2358,7 @@ rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, const char *tag) > > "n_barrier_cbs=%d " > > "onoff_interval=%d onoff_holdoff=%d " > > "read_exit_delay=%d read_exit_burst=%d " > > - "nocbs_nthreads=%d nocbs_toggle=%d " > > + "nocbs_nthreads=%d/%d nocbs_toggle=%d " > > "test_nmis=%d\n", > > torture_type, tag, nrealreaders, nfakewriters, > > stat_interval, verbose, test_no_idle_hz, shuffle_interval, > > @@ -2368,7 +2370,7 @@ rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, const char *tag) > > n_barrier_cbs, > > onoff_interval, onoff_holdoff, > > read_exit_delay, read_exit_burst, > > - nocbs_nthreads, nocbs_toggle, > > + nocbs_nthreads, cur_ops->can_nocbs_toggle, nocbs_toggle, > > test_nmis); > > } > > > > @@ -3708,6 +3710,10 @@ rcu_torture_init(void) > > pr_alert("rcu-torture: ->fqs NULL and non-zero fqs_duration, fqs disabled.\n"); > > fqs_duration = 0; > > } > > + if (!cur_ops->can_nocbs_toggle && nocbs_nthreads != 0) { > > + pr_alert("rcu-torture: ->can_nocbs_toggle false and non-zero nocbs_nthreads, nocbs_toggle disabled.\n"); > > + nocbs_nthreads = 0; > > + } >Instead of adding a hook, why not check for CONFIG_RCU_NOCB_CPU here? > >so like: > if (cur_ops != &rcu_ops || !IS_ENABLED(CONFIG_RCU_NOCB_CPU)) > nocbs_nthreads = 0; Concise approach, I will resend. Thanks Zqiang > >Or will that not work for some reason? Just 2 line change and no ugly hooks =) > >- Joel
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 297da28ce92d..ced0a8e1d765 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -383,6 +383,7 @@ struct rcu_torture_ops { long cbflood_max; int irq_capable; int can_boost; + int can_nocbs_toggle; int extendables; int slow_gps; int no_pi_lock; @@ -569,6 +570,7 @@ static struct rcu_torture_ops rcu_ops = { .stall_dur = rcu_jiffies_till_stall_check, .irq_capable = 1, .can_boost = IS_ENABLED(CONFIG_RCU_BOOST), + .can_nocbs_toggle = IS_ENABLED(CONFIG_RCU_NOCB_CPU), .extendables = RCUTORTURE_MAX_EXTEND, .name = "rcu" }; @@ -2356,7 +2358,7 @@ rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, const char *tag) "n_barrier_cbs=%d " "onoff_interval=%d onoff_holdoff=%d " "read_exit_delay=%d read_exit_burst=%d " - "nocbs_nthreads=%d nocbs_toggle=%d " + "nocbs_nthreads=%d/%d nocbs_toggle=%d " "test_nmis=%d\n", torture_type, tag, nrealreaders, nfakewriters, stat_interval, verbose, test_no_idle_hz, shuffle_interval, @@ -2368,7 +2370,7 @@ rcu_torture_print_module_parms(struct rcu_torture_ops *cur_ops, const char *tag) n_barrier_cbs, onoff_interval, onoff_holdoff, read_exit_delay, read_exit_burst, - nocbs_nthreads, nocbs_toggle, + nocbs_nthreads, cur_ops->can_nocbs_toggle, nocbs_toggle, test_nmis); } @@ -3708,6 +3710,10 @@ rcu_torture_init(void) pr_alert("rcu-torture: ->fqs NULL and non-zero fqs_duration, fqs disabled.\n"); fqs_duration = 0; } + if (!cur_ops->can_nocbs_toggle && nocbs_nthreads != 0) { + pr_alert("rcu-torture: ->can_nocbs_toggle false and non-zero nocbs_nthreads, nocbs_toggle disabled.\n"); + nocbs_nthreads = 0; + } if (cur_ops->init) cur_ops->init();