Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp31711ybb; Fri, 27 Mar 2020 15:26:35 -0700 (PDT) X-Google-Smtp-Source: ADFU+vt7iq9Ojxj+1JYSAZBxgjviFTmceFIRbe91Hze9CdsZe0BQ9OCDT8irrdoMvL+sZ43j4eTn X-Received: by 2002:aca:57d6:: with SMTP id l205mr819754oib.20.1585347995357; Fri, 27 Mar 2020 15:26:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585347995; cv=none; d=google.com; s=arc-20160816; b=PGPVr+P8qlBmDIYA9g+q8Eq/hidr+YnBJqV22LwcEE+5nuXN22tks3yNzggD1a5lcd Zxip8r0RlYUegU7eC4vffNVJZ3rJU7RB6kPm6MK0zkwGKjKc0CR9eVxxU02we0dQIim1 Psp6DxiBFd92tlXi585dcPxT4Dx4JQSpsG2MgDmWbGHYljlRWxmRgBQdY7qWjlDojXC/ 666la82vW2P1hHqkO0l2TB6E5o9pOvFyVJpMM0nG5w4bClYh0DCQDavPjuY+g4OZfBqK M1WiRIsDJv1FvU0TEDRUb+FbRlopo3Bc6r4wxKchFvBjSSnnuduOV6wVlmlEDRitMJ5c c8Ew== 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=02q9Ss5l4Nd5xjUsmsxDdTfrSzVZYvwhGjRJCqZYwiI=; b=DQ4ZNA9/Dq7gA8kpCqu6Blu6HQMjxN5ZB1tZrkymcQheFVVEDjtTYF92bzFo8hFakR d9PTUrXjdgxmXEmLPxx34Pzp6b227Fv2LKNVETU9UDEjraOjYxdSHKKfcYo9zb1xBOi5 hPTsbC3k/zMjeoTtWSMlxDbY4YTOFbrEaA/uV2+jIwduJX45bJH3ThGA8a1vfpvZCxo8 gqL4lv6/iZ471JnO3NIdgeSo0+s4nx7p8oH5TPIZRJhdFiNYxvH2BvnVGypNibBpCNZg j8TgwSO5e4Lx0a4GXkyw+ACDwZQhItHADdxr/7nslYEQGUDZCGf9F8w5vQLKxSelOW7c qhAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IwmsQchj; 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 h3si1927282otg.9.2020.03.27.15.26.22; Fri, 27 Mar 2020 15:26:35 -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=IwmsQchj; 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 S1727754AbgC0WZA (ORCPT + 99 others); Fri, 27 Mar 2020 18:25:00 -0400 Received: from mail.kernel.org ([198.145.29.99]:42564 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727685AbgC0WY7 (ORCPT ); Fri, 27 Mar 2020 18:24:59 -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 D6B462076B; Fri, 27 Mar 2020 22:24:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1585347899; bh=EC3QM1BbeU4Cs1HwMrmG+n0h5VnQjTcg8c5ioo+vBYk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IwmsQchjaT635fji9+oaxE6MEFjDgBK5K8ilcHgT17q2ceZf2egjAhkRjZ9SaWUvC qQHbWNrdHmbHWVw75Swcfk+hGB7+2nVxVxKRWTsK7bD57FsrAcVAK2ofWcm4VJV73/ 7kHKHZSlBS80OKISS4fghdNqPK2ltuOqp2A8sICQ= 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 v3 tip/core/rcu 03/34] rcutorture: Add flag to produce non-busy-wait task stalls Date: Fri, 27 Mar 2020 15:24:25 -0700 Message-Id: <20200327222456.12470-3-paulmck@kernel.org> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20200327222346.GA12082@paulmck-ThinkPad-P72> References: <20200327222346.GA12082@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 | 15 +++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 1a5ff11..df2baf9 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -4165,6 +4165,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..ada5b91 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()); + raw_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