Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp2301795ybv; Fri, 14 Feb 2020 15:56:38 -0800 (PST) X-Google-Smtp-Source: APXvYqzjj1xz/8stQm65IIRxnAV3C7Lz/sngOoHV5yudu72W9fCrtQhOhw44fcJYcijMPlDgcEnk X-Received: by 2002:aca:b4c3:: with SMTP id d186mr3459310oif.131.1581724598456; Fri, 14 Feb 2020 15:56:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581724598; cv=none; d=google.com; s=arc-20160816; b=e+ncuesnaUcYA9cZ1Fjv9kA2/vshPApSQC4/QS0nMBuhuSQz9p5litPGUsx9fh9uUy JXh8PCB3wuyfHJ1BgBfLtixr/tMvP7yssuUovjc99fwGVSJSofMnZ1L5ir7l6+R8iB6c 0926IesRfvMJD695GfjM1YsO+DRmhrR9iEU5UbFt8xo9TP5x2jAAEHMhPB891b2SZnbS HR77OSrDLw+7ZYX1RXqmlBgRz+HdovpF0ISO3RjrdnsMxuBKQNSNYp7UpETdZOIt8rkW yEm6rvi8kb++hMGDDTyNs0ZMKCF6s0/AEu+rOXJ5rOoME1U6/4u/gIhYG23jgte10J+F diog== 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=mswdGc2F/nSuuJftIo4qUnw4eVKvGMT5ZHtxT5EF6ho=; b=H02mUXaaIuONKzDWL6FnLnldgVg+tt2huxr/v3qrxtOJP+eS+PTCm+6u1cJJYGIwvg Vqm6DmArTMURicrs0pehyZ/VEtNc119xLAL0Jii3FGBTb4EWF2t9ijp7cKOL4YVasH4/ tkynGcco3/SwjrkvjiTVimocbnW3pdFFx1Mjb+I1yrtMrieMkWJ7D3EL87K1yZ0TMo0l /Y/DX4dNj2JJPRFsYxA66R1DngjXDq0rC8swbJ4nad/yM/yJHx7Oh1HWtSKr/4OB+iZy ppQeup8US/uubB5Axsdo4fhSZaOyXXu99NJzF7QiFdZ8xpHd1ce2a/O4Dqoxcjq18xao ur5w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=M34dHv1Z; 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 4si3390919oip.107.2020.02.14.15.56.26; Fri, 14 Feb 2020 15:56:38 -0800 (PST) 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=M34dHv1Z; 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 S1728396AbgBNX4S (ORCPT + 99 others); Fri, 14 Feb 2020 18:56:18 -0500 Received: from mail.kernel.org ([198.145.29.99]:36042 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727649AbgBNX4S (ORCPT ); Fri, 14 Feb 2020 18:56:18 -0500 Received: from paulmck-ThinkPad-P72.c.hoisthospitality.com (unknown [62.84.152.189]) (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 B8A70217F4; Fri, 14 Feb 2020 23:56:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581724577; bh=7CNvii9CnoOApIZ3tmG1GiK1b7u2u/vdaOrCJaOUH0M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=M34dHv1Zd/268Ul+GZqPtZR52ytj7JztwlSxiYUUBl6//8EuaCTbtxJX6KqstIkOw S48mWMucx9/92ZGFIF4PUNflzSH/8cDB2yNb8IwWH5esC1b1MOzwSnFONkoSDbSUcn Gas6RFJsr7SbgGb+21UVnyw1kmuHwhHpIWwt4W1w= 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 tip/core/rcu 02/30] rcu: Warn on for_each_leaf_node_cpu_mask() from non-leaf Date: Fri, 14 Feb 2020 15:55:39 -0800 Message-Id: <20200214235607.13749-2-paulmck@kernel.org> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20200214235536.GA13364@paulmck-ThinkPad-P72> References: <20200214235536.GA13364@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" The for_each_leaf_node_cpu_mask() and for_each_leaf_node_possible_cpu() macros must be invoked only on leaf rcu_node structures. Failing to abide by this restriction can result in infinite loops on systems with more than 64 CPUs (or for more than 32 CPUs on 32-bit systems). This commit therefore adds WARN_ON_ONCE() calls to make misuse of these two macros easier to debug. Reported-by: Qian Cai Signed-off-by: Paul E. McKenney --- kernel/rcu/rcu.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h index 05f936e..f6ce173 100644 --- a/kernel/rcu/rcu.h +++ b/kernel/rcu/rcu.h @@ -325,7 +325,8 @@ static inline void rcu_init_levelspread(int *levelspread, const int *levelcnt) * Iterate over all possible CPUs in a leaf RCU node. */ #define for_each_leaf_node_possible_cpu(rnp, cpu) \ - for ((cpu) = cpumask_next((rnp)->grplo - 1, cpu_possible_mask); \ + for (WARN_ON_ONCE(!rcu_is_leaf_node(rnp)), \ + (cpu) = cpumask_next((rnp)->grplo - 1, cpu_possible_mask); \ (cpu) <= rnp->grphi; \ (cpu) = cpumask_next((cpu), cpu_possible_mask)) @@ -335,7 +336,8 @@ static inline void rcu_init_levelspread(int *levelspread, const int *levelcnt) #define rcu_find_next_bit(rnp, cpu, mask) \ ((rnp)->grplo + find_next_bit(&(mask), BITS_PER_LONG, (cpu))) #define for_each_leaf_node_cpu_mask(rnp, cpu, mask) \ - for ((cpu) = rcu_find_next_bit((rnp), 0, (mask)); \ + for (WARN_ON_ONCE(!rcu_is_leaf_node(rnp)), \ + (cpu) = rcu_find_next_bit((rnp), 0, (mask)); \ (cpu) <= rnp->grphi; \ (cpu) = rcu_find_next_bit((rnp), (cpu) + 1 - (rnp->grplo), (mask))) -- 2.9.5