Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp798298ybh; Thu, 12 Mar 2020 11:18:58 -0700 (PDT) X-Google-Smtp-Source: ADFU+vuA3rgcKAT9NyLcZGRRmbdtPknlY9Iv4iu88o/s5tzDFVCIeomOXCk/Pf/VQTekCsHbXDDp X-Received: by 2002:a05:6830:14cc:: with SMTP id t12mr6973770otq.95.1584037138300; Thu, 12 Mar 2020 11:18:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584037138; cv=none; d=google.com; s=arc-20160816; b=YCpmBGFYOBq2U1wtJUat9BGHr+z6erxAzwhxEWivU5PnyjjiM2iKRShsj6bdjMKqlr N7jjDVlsTP49HwopWldo7D+uosPiiH4Cg6FqVmyYvU2l9Z4wFFO349sr1b95dOEoEJNL OE7iP0Tg0pH822WeDhx5v6+kPpAj91Z/wOMotGspIf06zOkklkYkLCgyfWOZlfWzw5vX Wc5ziYPwOI1fLSYgVGfeQ5Tqm8b75i6ZR+jOYk7PITcG5uOAFJH4taHI+OzhIrhqduXB PkoqbUJnRka48jeLDIVEW1PtVRQ7c3FPDv65dRchww/wlSI1WuIZ27F/WMlPqwTXeTiU dB3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=bl5F7O29W8mSDHQFINqaVT8pmYHSVLpAAgyXE1cMY1E=; b=zfKAT8G+FzGqLJpmbtO9EJrCkqt5GkeB24zFhTFxnIG+Ve3Q5l4wwalwwnFfxqWV1n nuEjVSF47ZweoxrnR4lcKlF1g8bSrhl/1lqIcsI6ce0BjCy8Z5Y4ePIMA5lk2MkYChBw MzYVe4vsXHSOYf9309t0sBuL59A93jAjPPmHyho6ryymacHFN7otw+x15ryVzVp8gezC qI4p6gwlXQD8S8kN6BzZAGVYL2IAbyvoiF6Z+czp3N5+OJ1uVUB3Qsgdnn0nZxq+/fBo OxKp0d5W/vFUO8VdGsNGUMNr0VlHhiciPvo/WUEud1wjD/jv0dm9H1w0tW9SWDaxCZXH jWSA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=zUOWK6m2; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r12si2877229oic.246.2020.03.12.11.18.45; Thu, 12 Mar 2020 11:18:58 -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=@kernel.org header.s=default header.b=zUOWK6m2; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726982AbgCLSRy (ORCPT + 99 others); Thu, 12 Mar 2020 14:17:54 -0400 Received: from mail.kernel.org ([198.145.29.99]:51958 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726599AbgCLSRG (ORCPT ); Thu, 12 Mar 2020 14:17:06 -0400 Received: from paulmck-ThinkPad-P72.home (50-39-105-78.bvtn.or.frontiernet.net [50.39.105.78]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 09AF92073B; Thu, 12 Mar 2020 18:17:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1584037025; bh=8csvVhRW3l5KCsMDr6QYUn3YY8DNKrig/Br59Zsgyso=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=zUOWK6m2oCPce5Zcj5hEAhQGIF/dz9Zo7wrRTl1/JXfyQS90EQoAs+oqFFW5L9SZC RT+sD7HaVJDt3YhIWuIBa74IM0uh24/BeWSYLXIfT8b4hZo6MjRF9rssLA2Ib8CEOC AVxL7KmXQ34FEQYjwcx3sLFhVLPs5y8WQ7YfttDY= From: paulmck@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, kernel-team@fb.com, mingo@kernel.org, jiangshanlai@gmail.com, dipankar@in.ibm.com, akpm@linux-foundation.org, mathieu.desnoyers@efficios.com, josh@joshtriplett.org, tglx@linutronix.de, peterz@infradead.org, rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com, fweisbec@gmail.com, oleg@redhat.com, joel@joelfernandes.org, "Paul E. McKenney" Subject: [PATCH RFC tip/core/rcu 03/16] rcutorture: Add flag to produce non-busy-wait task stalls Date: Thu, 12 Mar 2020 11:16:49 -0700 Message-Id: <20200312181702.8443-3-paulmck@kernel.org> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20200312181618.GA21271@paulmck-ThinkPad-P72> References: <20200312181618.GA21271@paulmck-ThinkPad-P72> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Paul E. McKenney" This commit aids testing of RCU task stall warning messages by adding an rcutorture.stall_cpu_block module parameter that results in the induced stall sleeping within the RCU read-side critical section. Spinning with interrupts disabled is still available via the rcutorture.stall_cpu_irqsoff module parameter, and specifying neither of these two module parameters will spin with preemption disabled. Note that sleeping (as opposed to preemption) results in additional complaints from RCU at context-switch time, so yet more testing. Signed-off-by: Paul E. McKenney --- Documentation/admin-guide/kernel-parameters.txt | 5 +++++ kernel/rcu/rcutorture.c | 13 ++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 6d16b78..17eff15 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -4161,6 +4161,11 @@ Duration of CPU stall (s) to test RCU CPU stall warnings, zero to disable. + rcutorture.stall_cpu_block= [KNL] + Sleep while stalling if set. This will result + in warnings from preemptible RCU in addition + to any other stall-related activity. + rcutorture.stall_cpu_holdoff= [KNL] Time to wait (s) after boot before inducing stall. diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index b3301f3..f75d466 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -102,6 +102,7 @@ torture_param(int, stall_cpu, 0, "Stall duration (s), zero to disable."); torture_param(int, stall_cpu_holdoff, 10, "Time to wait before starting stall (s)."); torture_param(int, stall_cpu_irqsoff, 0, "Disable interrupts while stalling."); +torture_param(int, stall_cpu_block, 0, "Sleep while stalling."); torture_param(int, stat_interval, 60, "Number of seconds between stats printk()s"); torture_param(int, stutter, 5, "Number of seconds to run/halt test"); @@ -1599,6 +1600,7 @@ static int rcutorture_booster_init(unsigned int cpu) */ static int rcu_torture_stall(void *args) { + int idx; unsigned long stop_at; VERBOSE_TOROUT_STRING("rcu_torture_stall task started"); @@ -1610,21 +1612,22 @@ static int rcu_torture_stall(void *args) if (!kthread_should_stop()) { stop_at = ktime_get_seconds() + stall_cpu; /* RCU CPU stall is expected behavior in following code. */ - rcu_read_lock(); + idx = cur_ops->readlock(); if (stall_cpu_irqsoff) local_irq_disable(); - else + else if (!stall_cpu_block) preempt_disable(); pr_alert("rcu_torture_stall start on CPU %d.\n", smp_processor_id()); while (ULONG_CMP_LT((unsigned long)ktime_get_seconds(), stop_at)) - continue; /* Induce RCU CPU stall warning. */ + if (stall_cpu_block) + schedule_timeout_uninterruptible(HZ); if (stall_cpu_irqsoff) local_irq_enable(); - else + else if (!stall_cpu_block) preempt_enable(); - rcu_read_unlock(); + cur_ops->readunlock(idx); pr_alert("rcu_torture_stall end.\n"); } torture_shutdown_absorb("rcu_torture_stall"); -- 2.9.5