From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933370AbcFOW24 (ORCPT ); Wed, 15 Jun 2016 18:28:56 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:33951 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932456AbcFOW2f (ORCPT ); Wed, 15 Jun 2016 18:28:35 -0400 X-IBM-Helo: d01dlp03.pok.ibm.com X-IBM-MailFrom: paulmck@linux.vnet.ibm.com X-IBM-RcptTo: linux-kernel@vger.kernel.org From: "Paul E. McKenney" To: linux-kernel@vger.kernel.org Cc: 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, dvhart@linux.intel.com, fweisbec@gmail.com, oleg@redhat.com, bobby.prani@gmail.com, "Paul E. McKenney" Subject: [PATCH tip/core/rcu 8/8] torture: Affinity waiter tasks away from hotpluggable CPU Date: Wed, 15 Jun 2016 15:28:28 -0700 X-Mailer: git-send-email 2.5.2 In-Reply-To: <20160615222756.GA10695@linux.vnet.ibm.com> References: <20160615222756.GA10695@linux.vnet.ibm.com> X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16061522-0044-0000-0000-0000006949F1 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16061522-0045-0000-0000-0000047E5064 Message-Id: <1466029708-11359-8-git-send-email-paulmck@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-06-15_13:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=1 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1604210000 definitions=main-1606150236 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Paul E. McKenney --- kernel/rcu/waketorture.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/kernel/rcu/waketorture.c b/kernel/rcu/waketorture.c index f9843eb3f7b7..68be40400f51 100644 --- a/kernel/rcu/waketorture.c +++ b/kernel/rcu/waketorture.c @@ -236,7 +236,9 @@ static int wake_torture_waiter(void *arg) */ static int wake_torture_onoff(void *args) { + cpumask_var_t cm; int cpu; + int i; VERBOSE_TOROUT_STRING("wake_torture_onoff task started"); if (onoff_holdoff > 0) { @@ -244,6 +246,11 @@ static int wake_torture_onoff(void *args) schedule_timeout_interruptible(onoff_holdoff * HZ); VERBOSE_TOROUT_STRING("wake_torture_onoff end holdoff"); } + + /* + * Find the last hotpluggable CPU, and affinity the waiter + * tasks elsewhere. + */ for_each_online_cpu(cpu) { if (cpu_is_hotpluggable(cpu)) onoff_cpu = cpu; @@ -257,6 +264,18 @@ static int wake_torture_onoff(void *args) } } pr_alert("%s" TORTURE_FLAG " wake_torture_onoff: onoff_cpu: %d\n", torture_type, onoff_cpu); + if (!zalloc_cpumask_var(&cm, GFP_KERNEL)) { + VERBOSE_TOROUT_STRING("wake_torture_onoff: Out of memory, no affinity"); + } else { + cpumask_copy(cm, cpu_online_mask); + cpumask_clear_cpu(onoff_cpu, cm); + if (cpumask_weight(cm) == 0) + cpumask_setall(cm); + for (i = 0; i < nrealwaiters; i++) + set_cpus_allowed_ptr(waiter_tasks[i], cm); + } + + /* Cycle the victim CPU online and offline! */ while (!torture_must_stop() && onoff_cpu >= 0) { if (!torture_offline(onoff_cpu, &n_offline_attempts, &n_offline_successes, -- 2.5.2