From nobody Fri Sep 25 10:37:08 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BC40541E6CE for ; Mon, 14 Sep 2026 09:34:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789378494; cv=none; b=eGkG1C9ViIYEYOnVuwYsLVrENkPGTgmoIqsiyVLuw1qM5B61nUP76sgzgaxSZ0fT7yRBv6DhEzwmqp+XLaKzZbjiFLDrrmE7SSbohUcBYuL58BvHyoQz7df/q5LEB5oLyfIzSYAd09nRVDLIoP7A0nWgeXxawnRl34iMrw8+u0s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789378494; c=relaxed/simple; bh=hLszDS3dQvGRDwX9LIEkBFevGqoODhAvW3lcutrJxzw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SYYLsqj+M9rS7lN8DTMmSM2t/Zgc0oH8C57Pde59extv+OPDe60G5L/Z0dvj9LirSjaN7rwJI8poiYHfAhc7r4Z15k6JtcM+/DlJ1/bnbpi4MCxn+EdZu1VBi0SlnyuuMlsl0Zze5uUTuSjLojWzhznLdWZE5kS9OxnyOUwQXPc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=qqtDK+iE; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="qqtDK+iE" Received: by mail-pj2-f13.google.com with SMTP id d9443c01a7336-2dd53691be5so15379635ad.1 for ; Mon, 14 Sep 2026 02:34:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789378492; x=1789983292; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=iLgVCUWBW6raNqfUrqpJZy+OR3PZ3ZnJ+vGI+hldboE=; b=qqtDK+iE3AkLqMBILWgpaHBHMkt9ydCWRKIjCV+B/tuBuEsiAo5QS1LwEB8QqQ80NX weHriKNg0JFeXea7RceQvl1f9GtW91r1Ty+9AjRd7K3kIYwrR5nkl15QXAzFdVZbdwfa A17a9Hn7sXoJvXIc1CHPj2ouoKTHdoFC5GSm3GAaxT6x/KcEgMns7MBr008yJvtKVBlE FkTbXAGoVKpVpnYbsoqBkR8sC5puPReW+2RzJggTgUFJWYZPbnDDRXeg5Fwj8YIUDxeY 5XpxrN5DWif7RmjL4ZEOvJ11LieJMqzGOyNkiNIWHfpxXRlEDVsu/3XA+WzdFC2KLYAm g8eA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789378492; x=1789983292; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=iLgVCUWBW6raNqfUrqpJZy+OR3PZ3ZnJ+vGI+hldboE=; b=SL1e/C03l6iIVIeL5DYT/0jWqtOPnb6nWQbIRt+TxBR4G0yGJkK5+4jUPeVHMgIzqn FCtS8+4ZfYVtwH+4GuSPsrTYBzkgDoAWV0pzQJ4Y1tCmK+WynRhk2QBMK8dElULlsQmA J4/d+pQTJ7O2nohaGquhK0e/6vlKY/czuY1NW3qP8UjFxQUcAVOmhw55FT2vojtfHJ69 MVBDSuxDqYpORHK0I0+B7sdync0MQIl6rI6hW6ZeI6kzAiws42qEtGaStqMHOAkXQKp+ 5ZfEMl6OxFJuxdS1KI6RO6P+oilDTxIVlqCA7cLSzuVK7JU5NtxdxB/xibCIAms/csqO QGcQ== X-Forwarded-Encrypted: i=1; AKwUvByJQDVBfCMq0kidZw3Hpj6Al9lPpZPgOmkH2MLqUv8BCy00QZ0gheAykhQ99v+4Df4MT6cCE/Y+fsYmVMw=@vger.kernel.org X-Gm-Message-State: AFuF++n4Kj/fajos0oO1vjVIydbaudqfFXXRVRWXsl19FvryjxbCiP01 +ePvtB/bIAoyPVYbGuMPbQ1S8oOCpKeuLsOyhrYzYcpI3dDbuJmC6Cmh X-Gm-Gg: AYBFou0BksWPopeB/9OsNZj4xD01VXsticP/gz17USmMmaIktC6IzXXpwXH94ED8/tY v1d3sCYsY1s6QFL0hj0uFF0plvHxRO+M4Dm2FRcio72ezvCulCw5oPS9M4wuSI7i3WkdxPDgP7x X9QcRoxfNZ00fGc1+HM+QFvr12lMtpmmzb5kUocDW8qCqmzye6vogBAM7sY6rtZzH5OivFkj4ed JzRyo1RsGsBEDoSU52jPGu3onf5VRpfr8uezRObFTUNC13YnVn35eqf/vViXBD5yC9XNXAtD5dV +q+qhZIDQaeP0wqhryPI9wb2wtEJMQqeHgOZ8xMCnP+Vd1q27YSI5etc4UZzdiKOsL6ridL5vJ3 05/ic0kY5OMTGO7wI4Lrubv8YPmpwbL5BKnCZVK/AZC3nFco+93iZRoulmrQ6kMAa1pBgO9fSkN Z9FPPSoH64vnTYm70wGikZ7j2h/dSCociZUKYEA6OeNTPS83XH2UtGHCBQT+dm/eQSBr2apEipT bOePQT5t4zy5EX1Yg== X-Received: by 2002:a17:903:2c07:b0:2d5:e3ce:3988 with SMTP id d9443c01a7336-2dd6c6e9b11mr38703905ad.11.1789378491934; Mon, 14 Sep 2026 02:34:51 -0700 (PDT) Received: from kernel.tail6741c6.ts.net ([185.220.238.35]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2dd2cfc2d3bsm46109865ad.48.2026.09.14.02.34.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Sep 2026 02:34:51 -0700 (PDT) From: Kunwu Chan To: jiangshanlai@gmail.com, paulmck@kernel.org Cc: josh@joshtriplett.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, rcu@vger.kernel.org, linux-kernel@vger.kernel.org, Kunwu Chan , Zqiang Subject: [PATCH 1/5] rcutorture: Add atomic SRCU lockdep support Date: Mon, 14 Sep 2026 17:34:15 +0800 Message-ID: <20260914093419.1474829-2-kunwu.chan@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260914093419.1474829-1-kunwu.chan@gmail.com> References: <20260914093419.1474829-1-kunwu.chan@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add three testtypes covering atomic SRCU lockdep behavior: testtype 4: atomic SRCU same-type deadlock testtype 5: atomic SRCU + raw spinlock dependency cycle testtype 6: synchronize_srcu_atomic() inside rcu_read_lock() Co-developed-by: Zqiang Signed-off-by: Zqiang Signed-off-by: Kunwu Chan Acked-by: Boqun Feng --- kernel/rcu/rcutorture.c | 84 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index d795e07a12ad..ac9c726cb391 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -4662,6 +4662,17 @@ static DECLARE_RWSEM(rwsem7); static DECLARE_RWSEM(rwsem8); static DECLARE_RWSEM(rwsem9); =20 +static DEFINE_RAW_SPINLOCK(spin0); +static DEFINE_RAW_SPINLOCK(spin1); +static DEFINE_RAW_SPINLOCK(spin2); +static DEFINE_RAW_SPINLOCK(spin3); +static DEFINE_RAW_SPINLOCK(spin4); +static DEFINE_RAW_SPINLOCK(spin5); +static DEFINE_RAW_SPINLOCK(spin6); +static DEFINE_RAW_SPINLOCK(spin7); +static DEFINE_RAW_SPINLOCK(spin8); +static DEFINE_RAW_SPINLOCK(spin9); + DEFINE_STATIC_SRCU(srcu0); DEFINE_STATIC_SRCU(srcu1); DEFINE_STATIC_SRCU(srcu2); @@ -4673,6 +4684,17 @@ DEFINE_STATIC_SRCU(srcu7); DEFINE_STATIC_SRCU(srcu8); DEFINE_STATIC_SRCU(srcu9); =20 +DEFINE_STATIC_SRCU_ATOMIC(srcu0_atomic); +DEFINE_STATIC_SRCU_ATOMIC(srcu1_atomic); +DEFINE_STATIC_SRCU_ATOMIC(srcu2_atomic); +DEFINE_STATIC_SRCU_ATOMIC(srcu3_atomic); +DEFINE_STATIC_SRCU_ATOMIC(srcu4_atomic); +DEFINE_STATIC_SRCU_ATOMIC(srcu5_atomic); +DEFINE_STATIC_SRCU_ATOMIC(srcu6_atomic); +DEFINE_STATIC_SRCU_ATOMIC(srcu7_atomic); +DEFINE_STATIC_SRCU_ATOMIC(srcu8_atomic); +DEFINE_STATIC_SRCU_ATOMIC(srcu9_atomic); + static int srcu_lockdep_next(const char *f, const char *fl, const char *fs= , const char *fu, int i, int cyclelen, int deadlock) { @@ -4702,6 +4724,12 @@ static void rcu_torture_init_srcu_lockdep(void) &rwsem5, &rwsem6, &rwsem7, &rwsem8, &rwsem9 }; struct srcu_struct *srcus[] =3D { &srcu0, &srcu1, &srcu2, &srcu3, &srcu4, &srcu5, &srcu6, &srcu7, &srcu8, &srcu9 }; + raw_spinlock_t *spins[] =3D { &spin0, &spin1, &spin2, &spin3, &spin4, + &spin5, &spin6, &spin7, &spin8, &spin9 }; + struct srcu_struct *srcus_atomic[] =3D { &srcu0_atomic, &srcu1_atomic, &s= rcu2_atomic, + &srcu3_atomic, &srcu4_atomic, &srcu5_atomic, + &srcu6_atomic, &srcu7_atomic, &srcu8_atomic, + &srcu9_atomic }; int testtype; =20 if (!test_srcu_lockdep) @@ -4812,11 +4840,65 @@ static void rcu_torture_init_srcu_lockdep(void) } #endif // #ifdef CONFIG_TASKS_TRACE_RCU =20 + if (testtype =3D=3D 4) { + pr_info("%s: test_srcu_lockdep =3D %05d: SRCU_ATOMIC %d-way %sdeadlock.\= n", + __func__, test_srcu_lockdep, cyclelen, deadlock ? "" : "non-"); + if (deadlock && cyclelen =3D=3D 1) + pr_info("%s: Expect hang.\n", __func__); + for (i =3D 0; i < cyclelen; i++) { + j =3D srcu_lockdep_next(__func__, "srcu_read_lock_atomic", + "synchronize_srcu_atomic", + "srcu_read_unlock_atomic", i, + cyclelen, deadlock); + idx =3D srcu_read_lock_atomic(srcus_atomic[i]); + if (j >=3D 0) + synchronize_srcu_atomic(srcus_atomic[j]); + srcu_read_unlock_atomic(srcus_atomic[i], idx); + } + return; + } + + if (testtype =3D=3D 5) { + pr_info("%s: test_srcu_lockdep =3D %05d: SRCU_ATOMIC/raw_spinlock %d-way= %sdeadlock.\n", + __func__, test_srcu_lockdep, cyclelen, deadlock ? "" : "non-"); + for (i =3D 0; i < cyclelen; i++) { + pr_info("%s: srcu_read_lock_atomic(%d), raw_spin_lock(%d), raw_spin_unl= ock(%d), srcu_read_unlock_atomic(%d)\n", + __func__, i, i, i, i); + idx =3D srcu_read_lock_atomic(srcus_atomic[i]); + raw_spin_lock(spins[i]); + raw_spin_unlock(spins[i]); + srcu_read_unlock_atomic(srcus_atomic[i], idx); + + j =3D srcu_lockdep_next(__func__, "raw_spin_lock", + "synchronize_srcu_atomic", + "raw_spin_unlock", i, cyclelen, + deadlock); + raw_spin_lock(spins[i]); + if (j >=3D 0) + synchronize_srcu_atomic(srcus_atomic[j]); + raw_spin_unlock(spins[i]); + } + return; + } + + if (testtype =3D=3D 6) { + pr_info("%s: test_srcu_lockdep =3D %05d: synchronize_srcu_atomic() insid= e rcu_read_lock() %d-way.\n", + __func__, test_srcu_lockdep, cyclelen); + for (i =3D 0; i < cyclelen; i++) { + rcu_read_lock(); + synchronize_srcu_atomic(srcus_atomic[i]); + rcu_read_unlock(); + } + return; + } + err_out: pr_info("%s: test_srcu_lockdep =3D %05d does nothing.\n", __func__, test_= srcu_lockdep); pr_info("%s: test_srcu_lockdep =3D DNNL.\n", __func__); pr_info("%s: D: Deadlock if nonzero.\n", __func__); - pr_info("%s: NN: Test number, 0=3DSRCU, 1=3DSRCU/mutex, 2=3DSRCU/rwsem, 3= =3DSRCU/Tasks Trace RCU.\n", __func__); + pr_info("%s: NN: Test number, 0=3DSRCU, 1=3DSRCU/mutex, 2=3DSRCU/rwsem, 3= =3DSRCU/Tasks Trace RCU, 4=3DSRCU_ATOMIC, ", + __func__); + pr_cont("5=3DSRCU_ATOMIC/raw_spinlock, 6=3Dsynchronize_srcu_atomic inside= rcu_read_lock.\n"); pr_info("%s: L: Cycle length.\n", __func__); if (!IS_ENABLED(CONFIG_TASKS_TRACE_RCU)) pr_info("%s: NN=3D3 disallowed because kernel is built with CONFIG_TASKS= _TRACE_RCU=3Dn\n", __func__); --=20 2.43.0 From nobody Fri Sep 25 10:37:08 2026 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6571841D4F1 for ; Mon, 14 Sep 2026 09:34:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789378498; cv=none; b=fMyaJTiTD8cpTaJkchH68QShL9nGzohUxt2EmEzk+/E3sXuNc89ttjWjBe1dVqbJoyEWe7rwYed8ntnOHCyia5cKPrdbd1Q05Qcah8o9buLsoKXskRK3Wz+9CX34/Mtl+/nS8A6Zt9kFkE0zMglUR0U9SPLAtWtpUDVaBnufQPM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789378498; c=relaxed/simple; bh=JFMGR3cxE4ehfOWdnWdPRDKltW26+/+24XyQ31ipOHU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WPivdTRYzE1sOHFRKXT/ZVpj5oqHD+hUVS2Ke1BlbTGbFzVrkzktd8rySa/64ZvpBWjjPt6UZqSvFJInPrptXUpgz64C2XIfF1vYz0wEVMnJlavtW2eRb0ZOi3V/TJXoBLvHchcwrbMYzYkctmEcyzaLIKd+qF5rVhIajWe41dQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=arwYoqiT; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="arwYoqiT" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2dd1dcdcf95so22737825ad.1 for ; Mon, 14 Sep 2026 02:34:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789378497; x=1789983297; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=1sLm0cRCwoEOt+wRLHqXO/oJXjLUglwx1i1oC6fe9Yg=; b=arwYoqiTleIbbj4hK4RJGjINaHIFkxS3CAYZEQkHLuJEztYH81WLW2y0aHfJlRnwMH SrPBC3tCJCq6LqU8P7fRZsRTmZrntkW3XMvi427OrbpCRmyhnt5oVZRfwPzcFQ85cS5d mupVqv2/h0bGbGu0ELJxtnOT0xBm6pFE9DUo5GbXSSR9FQfJN1WTdAW4apAsvJJ1lM+I HB+nUwU1xScHyynsDhYUZ5teaYCYvz/iEj9onBqwe6QIDEtT+RG19AIGWa078+QlEQgj Ej9Sd497IbFpzaPrHg2fE3hps5CPvClic+c462aj28CaJ2x7Xz8aVDwdjN5i5WtwL88C g0cw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789378497; x=1789983297; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=1sLm0cRCwoEOt+wRLHqXO/oJXjLUglwx1i1oC6fe9Yg=; b=JZDwcUAJlafZqSyocR+KtWl7rsWxvUYndIK5nLZXEwyLnlXjA8/BIVXqHiDHaVXKKe OdjgQ52A8aJnTp7KnvLxhe0TjgKCHsJH4k5Uuekp3f6bUpbCCRv2ExigaQ+AjTy87NK2 DZM4rduMM7um6jv3/ImqcDWk4GNK3ZrXnTAtvOaYtwifLEQmz4MzbVXeaKUG0nhkMdUO B10NehEdeoZOp7Cj5sqke81t5OXv/DgZMyxwPTNNBKFEJZ8W+RCvlT4Tt54MHkBcYRwb Te+F2eRM86Az9kVRCAyCRokf9WVcVstN/J9EW+Kn6DKjzh7Ia7OwVoNdltiGn/b0uZAl Xl0Q== X-Forwarded-Encrypted: i=1; AKwUvBy35kRdVgzyJBSoZdJwO62VO0gsUX5JYsyCGIjRGc5Wwv8cHFdsP8kql2LvnJNsl4vVzQ368yjcFwV+Zno=@vger.kernel.org X-Gm-Message-State: AFuF++kYOWNwp84OWJziLor6Zkse2gJoBWJ7IN1e8A2oOoFRuzswkabF B6QwfGCksRhx91vCs1ikcmV3f78mRUkQnnUXg023PkwYgGF8ihb1Yesc X-Gm-Gg: AYBFou0v3DYDG7nqQIv4nybJIyQ7+9udxTGplZIPqsltdO1oAzKgEBjx4zELxKe3tYa 3ThqEFjZRqGQyVpNgJFu0EicKLn+2XidUwsOKp1vJqlRjyHvvdCdAniSxUCMRpOSuzrtMewnziD xbS7lncFE+u34DIku8kqV9lVceIAPBM6uP33/ai/yz40cjk0shHSyqZExkPz1p4HGsNH2sFmx89 fyZFjvA6gPE15lXEl3eXSimEJ+y2A5OX8n95fugXsxoxAPU0Nq7R6jj/2IXXO1PIzJwP4x+d+/k XF3H9CQOnGSOAdpKreRzdLTYDcI9kgHzW2NCFXF5yK1j7n/50tnrC7BGuMGKW70HSRCQ2zjv1Lc TAS1DhQpRpK6KMZHiUCzTpXsRIc9l0aOsbh+bI6a8ODUYa+spFRAM09HLQkMnTWJCXp2frRDc9p ckhjlfpGM6QZkPTJtX5iAXsK9ASvRVDYJpAa4prtTYSerK9vplePXfKfycftdizOuQH8+5oFYRw S4EfEQR+HWTauYstg== X-Received: by 2002:a17:902:f786:b0:2d8:d4d2:d138 with SMTP id d9443c01a7336-2dd5f1bc196mr71500385ad.20.1789378496559; Mon, 14 Sep 2026 02:34:56 -0700 (PDT) Received: from kernel.tail6741c6.ts.net ([185.220.238.35]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2dd2cfc2d3bsm46109865ad.48.2026.09.14.02.34.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Sep 2026 02:34:56 -0700 (PDT) From: Kunwu Chan To: jiangshanlai@gmail.com, paulmck@kernel.org Cc: josh@joshtriplett.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, rcu@vger.kernel.org, linux-kernel@vger.kernel.org, Kunwu Chan , Zqiang Subject: [PATCH 2/5] selftests/rcutorture: Wire atomic SRCU into srcu_lockdep.sh Date: Mon, 14 Sep 2026 17:34:16 +0800 Message-ID: <20260914093419.1474829-3-kunwu.chan@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260914093419.1474829-1-kunwu.chan@gmail.com> References: <20260914093419.1474829-1-kunwu.chan@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add testtypes 4 (atomic SRCU same-type deadlock) and 5 (atomic SRCU + raw_spinlock dependency cycle) to the deadlock-detection loop. Add a separate loop for testtype 6 (rcu_read_lock() =E2=86=92 synchronize_srcu_atomic()), which also verifies via console.log that no lockdep warning is triggered. Co-developed-by: Zqiang Signed-off-by: Zqiang Signed-off-by: Kunwu Chan Acked-by: Boqun Feng --- .../selftests/rcutorture/bin/srcu_lockdep.sh | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/rcutorture/bin/srcu_lockdep.sh b/tools= /testing/selftests/rcutorture/bin/srcu_lockdep.sh index 4e98c697def4..72791499dd96 100755 --- a/tools/testing/selftests/rcutorture/bin/srcu_lockdep.sh +++ b/tools/testing/selftests/rcutorture/bin/srcu_lockdep.sh @@ -44,7 +44,7 @@ nerrs=3D0 # Test lockdep's handling of deadlocks. for d in 0 1 do - for t in 0 1 2 + for t in 0 1 2 4 5 do for c in 1 2 3 do @@ -79,6 +79,43 @@ do done done =20 +# Verify that synchronize_srcu_atomic() does not trigger lockdep +# warnings when called inside rcu_read_lock(). +for c in 1 2 3 +do + err=3D + val=3D$((6*10+c)) + tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration 5s \ + --configs "SRCU-P" \ + --kconfig "CONFIG_FORCE_NEED_SRCU_NMI_SAFE=3Dy" \ + --bootargs "rcutorture.test_srcu_lockdep=3D$val" \ + --trust-make --datestamp "$ds/$val" > "$T/kvm.sh.out" 2>&1 + ret=3D$? + mv "$T/kvm.sh.out" "$RCUTORTURE/res/$ds/$val" + if ! grep -q '^CONFIG_PROVE_LOCKING=3Dy' .config + then + echo "rcu_torture_init_srcu_lockdep:Error: CONFIG_PROVE_LOCKING" \ + "disabled in rcutorture SRCU-P scenario" + err=3D1 + fi + if test "$ret" -ne 0 + then + err=3D1 + echo -n Unexpected failure for > "$RCUTORTURE/res/$ds/$val/kvm.sh.err" + elif grep -qE "WARNING: possible (recursive locking|circular locking depe= ndency)" \ + "$RCUTORTURE/res/$ds/$val/SRCU-P/console.log" + then + err=3D1 + echo -n Unexpected lockdep warning for > "$RCUTORTURE/res/$ds/$val/kvm.s= h.err" + fi + if test -n "$err" + then + grep "rcu_torture_init_srcu_lockdep: test_srcu_lockdep =3D " "$RCUTORTUR= E/res/$ds/$val/SRCU-P/console.log" | sed -e 's/^.*rcu_torture_init_srcu_loc= kdep://' >> "$RCUTORTURE/res/$ds/$val/kvm.sh.err" + cat "$RCUTORTURE/res/$ds/$val/kvm.sh.err" + nerrs=3D$((nerrs+1)) + fi +done + # Test lockdep-enabled testing of mixed SRCU readers. for val in 0x1 0xf do --=20 2.43.0 From nobody Fri Sep 25 10:37:08 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1279E423788 for ; Mon, 14 Sep 2026 09:35:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789378502; cv=none; b=b6KqZaiJEW/3HRm5UbB9NDGJWGJOmNHWv4SzjQv4FWeceWzx6hJRWNCBFROsGFwRlsAwpS9C74v0NL1Do+bkH+lgK8SQoYIhVT1Oho65w6wfDZdsFIKriVaixjmPHAIy/5Qpr5KIW4VfOghpkut+vts8Ixrq8BntQ+I5FpcjqbM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789378502; c=relaxed/simple; bh=5Vk7KcRU9V4X/ipHU254D4BIdjqisl9bj3wEmszSWIQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uZM/zI9fof0fMii9sl7zg2dPw9iVnY4u3cpBRxjKeOglxTNFiLJ+T04Sc5ObAxQhuXNxDabJMB+IIb6BiKQSNoluezl4Hynl9WHSJQElcQsQyy1WTocGmQrQKdVBcCoagkFFAr7CPQSauIQUy9KP7icQQD5aHSNKtPp81qLKspE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=EnQMCKXC; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EnQMCKXC" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2db18fe459dso7845325ad.3 for ; Mon, 14 Sep 2026 02:35:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789378500; x=1789983300; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=QPEcLs4lXFeouUcd3VfYmQWKBkCZIqO2a7zYwGl971s=; b=EnQMCKXColTIR8yjhvIKNne1T7ZsYwSY6+LvLApZgm/tPjbsWM/0jszsOI1eUL/czV fpTsWxr+04Sd5YO+te/v44Hq0FSzpVwNKYR7wAJDkIJcsoHJcJ8mLRQMk+q1ftQ/I62k qhtRGmjozceFitqDE3UC4tRkq50TSODErnFMcSYLt/3UGNCdBn6DMyQPj2jsdNoWufme 9E9CY2D/2P79Y46FPVp3Dv9EpB0sn0lMA6Dl7QJekjIVQOYSFKTXaRNHn8Hk59zatfA/ QzvLU5reG2hEh1w/2wtLPsVC5oBTtVRip954oU2En6cTXTvuZ4a9gG8jtj0WQPK2oEat C2yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789378500; x=1789983300; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=QPEcLs4lXFeouUcd3VfYmQWKBkCZIqO2a7zYwGl971s=; b=DZzSjsdNMn689U8jY0386XGM2Tm5kd223c/lN/niDCn99G96RrhtIX7TIgx/927rmA wWrwTC+rxwHnAJrVgeQ6lw4kwH0ldAI1uhNpHlY6ePa0sXl7q4eSpYJD5ggZxSgRJPSI aXRQ23AaqZ1JDt8A2m3A1RvbwQ3Th+rLwLJxNGLwJDjHBVNuKujrc90PidaFer3kNtNP 6MT5WNiBMHL8xE0Uc8Uol17utpNsZysgGIbhrZTaPQbcCuQFEk579/PdctrtWAirdvXg 1xM4q2NYOUy8CuqK1+7HOpv5YNjMBE9oUC+luhWEdM4MN7GHObH7Hp87kUx50cDznL57 0voQ== X-Forwarded-Encrypted: i=1; AKwUvBw92JZoWcwijfOfcV+OV8EMLnM9MyJ4HoyTAEIXTCiw4KyCBBxIHWasqoZZsTciBlsCOYX1YaqG4x/t1PY=@vger.kernel.org X-Gm-Message-State: AFuF++lm5W4gV9tsG3ypjJ8+0a0i6ODUX3DKlXx+QV4jvjr1yJYXQzgd 9Uo8mgG4g25GRgjpH2Hig/Yqob/BVwKHJSnfFDYTgzDQtdSixHG3V1Ss X-Gm-Gg: AYBFou3e6vJnQ/Z9g/M5gOxRG72xNRZZg3PXhPhTtQA/iEhif6Ti1dDf2Q+njHWY/GB ORcd9wUP5SfuGb6Uoz+jSe0ma0GAgCGnXk+bGMf4FVJHiL8E2+x00NlwX6kEPHrYygQvD+JpOBv n3zn1BzH9BikSrygrmOAmU0kNCOi7Gdop1ciLO1RXCPMsMm2QGEZAqo67+x9oiwNZjY68VshLsk ZrbH5DTGAW3QqSy3X5/05yUFEiaETINsKiqCp7rs4RAvrKY1kKez9xx5SzPBfk85H7FRo3Xv581 2eCWoxhFTl5YRBO6EmehDyGp+VPzZQnmGdUDuM5MWda0GQMm2ZDC/NV6LeMlBuImxvYnSOUqprs FYDgkdBckzbrjEXxm+4yvSMJxC8KAk+Lao9YK4+sP7JM58L+60tpT4VDuv9gJLsjHoOS+WrAFqx U7U+R2cxPex8HWH2mjkHF2s4W/FRZ6NYV3oAEabgf7pSS8Dh/ajyWhToMLvwno00FXAn74mY5Bu XsdMMOD4SwwTNYQqQ== X-Received: by 2002:a17:903:40c9:b0:2d5:3f5f:e645 with SMTP id d9443c01a7336-2dd6c6eb731mr39207435ad.12.1789378500232; Mon, 14 Sep 2026 02:35:00 -0700 (PDT) Received: from kernel.tail6741c6.ts.net ([185.220.238.35]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2dd2cfc2d3bsm46109865ad.48.2026.09.14.02.34.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Sep 2026 02:34:59 -0700 (PDT) From: Kunwu Chan To: jiangshanlai@gmail.com, paulmck@kernel.org Cc: josh@joshtriplett.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, rcu@vger.kernel.org, linux-kernel@vger.kernel.org, Kunwu Chan , Zqiang Subject: [PATCH 3/5] srcutree: Preserve IRQ state in synchronize_srcu_atomic() callchain Date: Mon, 14 Sep 2026 17:34:17 +0800 Message-ID: <20260914093419.1474829-4-kunwu.chan@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260914093419.1474829-1-kunwu.chan@gmail.com> References: <20260914093419.1474829-1-kunwu.chan@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" synchronize_srcu_atomic() may be called with interrupts disabled, but its callchain uses raw_spin_lock_irq_rcu_node() / raw_spin_unlock_irq_rcu_node(), which unconditionally enables interrupts on unlock. This can incorrectly change the caller's IRQ state. Use the irqsave/irqrestore variants for the locks in this callchain so that the caller's IRQ state is preserved. Co-developed-by: Zqiang Signed-off-by: Zqiang Signed-off-by: Kunwu Chan Acked-by: Boqun Feng --- kernel/rcu/srcutree.c | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c index 6c729e805fb3..d32615d54177 100644 --- a/kernel/rcu/srcutree.c +++ b/kernel/rcu/srcutree.c @@ -985,6 +985,7 @@ static void srcu_gp_end(struct srcu_struct *ssp, bool i= s_atomic) bool cbs; bool last_lvl; int cpu; + unsigned long flags; unsigned long gpseq; int idx; unsigned long mask; @@ -999,7 +1000,7 @@ static void srcu_gp_end(struct srcu_struct *ssp, bool = is_atomic) mutex_lock(&sup->srcu_cb_mutex); =20 /* End the current grace period. */ - raw_spin_lock_irq_rcu_node(sup); + raw_spin_lock_irqsave_rcu_node(sup, flags); idx =3D rcu_seq_state(sup->srcu_gp_seq); WARN_ON_ONCE(idx !=3D SRCU_STATE_SCAN2); if (srcu_gp_is_expedited(ssp)) @@ -1010,7 +1011,7 @@ static void srcu_gp_end(struct srcu_struct *ssp, bool= is_atomic) gpseq =3D rcu_seq_current(&sup->srcu_gp_seq); if (ULONG_CMP_LT(sup->srcu_gp_seq_needed_exp, gpseq)) WRITE_ONCE(sup->srcu_gp_seq_needed_exp, gpseq); - raw_spin_unlock_irq_rcu_node(sup); + raw_spin_unlock_irqrestore_rcu_node(sup, flags); if (!is_atomic) mutex_unlock(&sup->srcu_gp_mutex); /* A new grace period can start at this point. But only one. */ @@ -1048,12 +1049,12 @@ static void srcu_gp_end(struct srcu_struct *ssp, bo= ol is_atomic) if (!(gpseq & counter_wrap_check)) for_each_possible_cpu(cpu) { sdp =3D per_cpu_ptr(ssp->sda, cpu); - raw_spin_lock_irq_rcu_node(sdp); + raw_spin_lock_irqsave_rcu_node(sdp, flags); if (ULONG_CMP_GE(gpseq, sdp->srcu_gp_seq_needed + 100)) sdp->srcu_gp_seq_needed =3D gpseq; if (ULONG_CMP_GE(gpseq, sdp->srcu_gp_seq_needed_exp + 100)) sdp->srcu_gp_seq_needed_exp =3D gpseq; - raw_spin_unlock_irq_rcu_node(sdp); + raw_spin_unlock_irqrestore_rcu_node(sdp, flags); } =20 /* Callback initiation done, allow grace periods after next. */ @@ -1061,16 +1062,16 @@ static void srcu_gp_end(struct srcu_struct *ssp, bo= ol is_atomic) mutex_unlock(&sup->srcu_cb_mutex); =20 /* Start a new grace period if needed. */ - raw_spin_lock_irq_rcu_node(sup); + raw_spin_lock_irqsave_rcu_node(sup, flags); gpseq =3D rcu_seq_current(&sup->srcu_gp_seq); if (!rcu_seq_state(gpseq) && ULONG_CMP_LT(gpseq, sup->srcu_gp_seq_needed)) { WARN_ON_ONCE(ssp->srcu_reader_flavor & SRCU_READ_FLAVOR_ATOMIC); srcu_gp_start(ssp); - raw_spin_unlock_irq_rcu_node(sup); + raw_spin_unlock_irqrestore_rcu_node(sup, flags); srcu_reschedule(ssp, 0); } else { - raw_spin_unlock_irq_rcu_node(sup); + raw_spin_unlock_irqrestore_rcu_node(sup, flags); } =20 /* Transition to big if needed, but never for atomic SRCU. */ @@ -1221,10 +1222,11 @@ static void srcu_funnel_gp_start(struct srcu_struct= *ssp, struct srcu_data *sdp, static bool try_check_zero(struct srcu_struct *ssp, int idx, int trycount) { unsigned long curdelay; + unsigned long flags; =20 - raw_spin_lock_irq_rcu_node(ssp->srcu_sup); + raw_spin_lock_irqsave_rcu_node(ssp->srcu_sup, flags); curdelay =3D !srcu_get_delay(ssp); - raw_spin_unlock_irq_rcu_node(ssp->srcu_sup); + raw_spin_unlock_irqrestore_rcu_node(ssp->srcu_sup, flags); =20 for (;;) { if (srcu_readers_active_idx_check(ssp, idx)) @@ -2024,6 +2026,7 @@ EXPORT_SYMBOL_GPL(srcu_batches_completed); */ static void srcu_advance_state(struct srcu_struct *ssp, bool is_atomic) { + unsigned long flags; int idx; =20 if (!is_atomic) @@ -2041,10 +2044,10 @@ static void srcu_advance_state(struct srcu_struct *= ssp, bool is_atomic) */ idx =3D rcu_seq_state(smp_load_acquire(&ssp->srcu_sup->srcu_gp_seq)); /* = ^^^ */ if (idx =3D=3D SRCU_STATE_IDLE) { - raw_spin_lock_irq_rcu_node(ssp->srcu_sup); + raw_spin_lock_irqsave_rcu_node(ssp->srcu_sup, flags); if (ULONG_CMP_GE(ssp->srcu_sup->srcu_gp_seq, ssp->srcu_sup->srcu_gp_seq_= needed)) { WARN_ON_ONCE(rcu_seq_state(ssp->srcu_sup->srcu_gp_seq)); - raw_spin_unlock_irq_rcu_node(ssp->srcu_sup); + raw_spin_unlock_irqrestore_rcu_node(ssp->srcu_sup, flags); if (!is_atomic) mutex_unlock(&ssp->srcu_sup->srcu_gp_mutex); return; @@ -2054,7 +2057,7 @@ static void srcu_advance_state(struct srcu_struct *ss= p, bool is_atomic) WARN_ON_ONCE(ssp->srcu_reader_flavor & SRCU_READ_FLAVOR_ATOMIC); srcu_gp_start(ssp); } - raw_spin_unlock_irq_rcu_node(ssp->srcu_sup); + raw_spin_unlock_irqrestore_rcu_node(ssp->srcu_sup, flags); if (idx !=3D SRCU_STATE_IDLE) { if (!is_atomic) mutex_unlock(&ssp->srcu_sup->srcu_gp_mutex); @@ -2070,10 +2073,10 @@ static void srcu_advance_state(struct srcu_struct *= ssp, bool is_atomic) return; /* readers present, retry later. */ } srcu_flip(ssp); - raw_spin_lock_irq_rcu_node(ssp->srcu_sup); + raw_spin_lock_irqsave_rcu_node(ssp->srcu_sup, flags); rcu_seq_set_state(&ssp->srcu_sup->srcu_gp_seq, SRCU_STATE_SCAN2); ssp->srcu_sup->srcu_n_exp_nodelay =3D 0; - raw_spin_unlock_irq_rcu_node(ssp->srcu_sup); + raw_spin_unlock_irqrestore_rcu_node(ssp->srcu_sup, flags); } =20 if (rcu_seq_state(READ_ONCE(ssp->srcu_sup->srcu_gp_seq)) =3D=3D SRCU_STAT= E_SCAN2) { @@ -2120,6 +2123,7 @@ void synchronize_srcu_atomic(struct srcu_struct *ssp) { unsigned long srcu_state; struct srcu_usage *sup =3D ssp->srcu_sup; + unsigned long flags; unsigned long rdm0, rdm1; unsigned long unlocks0, unlocks1; =20 @@ -2150,9 +2154,9 @@ void synchronize_srcu_atomic(struct srcu_struct *ssp) } =20 // One last check for others doing our work for us under the lock. - raw_spin_lock_irq_rcu_node(sup); + raw_spin_lock_irqsave_rcu_node(sup, flags); if (poll_state_synchronize_srcu(ssp, srcu_state)) { - raw_spin_unlock_irq_rcu_node(sup); + raw_spin_unlock_irqrestore_rcu_node(sup, flags); atomic_set(&sup->srcu_atomic_gp_flag, 0); preempt_enable(); return; @@ -2163,7 +2167,7 @@ void synchronize_srcu_atomic(struct srcu_struct *ssp) smp_store_release(&sup->srcu_gp_seq_needed, srcu_state); // See srcu_funn= el_gp_start(). ASSERT_EXCLUSIVE_WRITER(ssp->srcu_sup->srcu_gp_seq); srcu_gp_start(ssp); - raw_spin_unlock_irq_rcu_node(sup); + raw_spin_unlock_irqrestore_rcu_node(sup, flags); =20 // // Fastpath: If there are no readers at all, neither grace-period @@ -2201,9 +2205,9 @@ void synchronize_srcu_atomic(struct srcu_struct *ssp) // poll_state_synchronize_srcu() working, all under ->lock // and ->srcu_atomic_gp_flag, which excludes concurrent // sequence-number updates. - raw_spin_lock_irq_rcu_node(sup); + raw_spin_lock_irqsave_rcu_node(sup, flags); rcu_seq_end(&sup->srcu_gp_seq); - raw_spin_unlock_irq_rcu_node(sup); + raw_spin_unlock_irqrestore_rcu_node(sup, flags); WARN_ON_ONCE(!poll_state_synchronize_srcu(ssp, srcu_state)); atomic_set_release(&sup->srcu_atomic_gp_flag, 0); preempt_enable(); --=20 2.43.0 From nobody Fri Sep 25 10:37:08 2026 Received: from mail-pz2-f12.google.com (mail-pz2-f12.google.com [74.125.228.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A01F422E2E for ; Mon, 14 Sep 2026 09:35:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.228.12 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789378505; cv=none; b=AkOnl/+Csa2xntpt/zzpIzMKoHJmOD4UiDxXaqyytJwwGX8TTeN0nhKvEW+ZGL2TB71ylvyB6PUFuUIp/FEDGUQnTXvcXrKYtJyC3FfL1VsjiEjcS+oyQeL48CzVogS/wY39iUZKmQ+pvVdXAb2z4dXzm+0gubloTbdElLR2e1o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789378505; c=relaxed/simple; bh=RWixKcQI2wmaygQZobVDeYA2rMusdPg2Sj3o1m1LYFI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=B9+C6UURi201xCLoc2xRXo8IaeZVu4qr4J+jnLGsMy4DOibkcMwy/6MNzvUYeRY4u7sqxL8WnSOy7UPgerxpCZWAMMzbDdqSwXjiV0dwR+vUUBqIyEZxpHpw6UGPoi6E8fjpkhQFp/rzbxNuxzMsu75ly3JsTRzzQBp1Ipqttkc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=YED872fg; arc=none smtp.client-ip=74.125.228.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YED872fg" Received: by mail-pz2-f12.google.com with SMTP id 41be03b00d2f7-cc1cea4bfd1so1312666a12.0 for ; Mon, 14 Sep 2026 02:35:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789378504; x=1789983304; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=o6IuVmpr5xM+RRdI6lEpXivXGb0nbPt12Ew5SJP1A+U=; b=YED872fg8vrTMmOVUyr4JuDCYViET+rLqWFovHJMHcqBEooxh5tMdIPXEZi2lw6hj5 vBDVfKpnvQUOjKR/TFuPj8H/l3e/tmeHrqRJBRBNgOEZ/7c9fQaB/9X4/XjPzdVqXRUv uR0veKVwC8EQQ8bcZ9T16rIr018vxQjOvyJn5GbgnMP/9T50x1Y79U1Je6I1OhcphyOf IbgM/9UuEsOHgKy35MxVvOuThodPQPlF1x6LGb26mLp55R/cNmFNoSdAndTejZVlZu5O YDPMNgFBVB2md8IO8Sdsad2lrfTFZPjtN736wGtj/dykzsEtn+jk/bCghnvfGI+LUKZQ hsAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789378504; x=1789983304; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=o6IuVmpr5xM+RRdI6lEpXivXGb0nbPt12Ew5SJP1A+U=; b=fMgkPfisytV34HTsIPqS4XdMs8X44RdfGOnADNEg9LqU0Dz5bIAqp78OybEmzhK8x+ RIs9ztW+JwQNvh4kKygzh4jaupEYzKuHQkeh/KUqUSJnbRWe2XRq/+CHfJhUHV7t03Z6 0CCXEwHdcHDF7x3ZmhKX8QVpH8RESnAxUUtOo0HNjIFP14T8RMw2BBlf6vewO29C1gtw djEAwIPtyr/f5jyku70WqtcMy0JOxquS8gOGyMLgmS8M+/D7F6zrpYVHLhJCpnO5ac5k mxinMsL1z2HUiZ4ubap9yaBGAurnmROymYajBRJk+lsWIcwdbFSZah4dAm729AiMCLZi qTkw== X-Forwarded-Encrypted: i=1; AKwUvBzPDgNdt4u0ioeXRI3Ata5n/9yZILZ5746IJ+Upa427poc5D1M0priX5QZtVzVop3+NjBCAKvYxV4MlkUY=@vger.kernel.org X-Gm-Message-State: AFuF++lCDSaQse+uvQcZnsxXLYIrDfcb4QIM1pJ2DvlaDB4M/iup62ND Ugi58JRLKGodFOPRB6hGKorIcGOihsGo+09fundpnCnJm2+fFqnjBhTc X-Gm-Gg: AYBFou3j/btUoZdg9GLYD1vi4iUUyEswzy2WPitVx+oyHiBR+jf2/XW5HViumfejOTF c+LJIYuZO7N1munxf5Lj+mw+aZvISayFuhKt5AEnMeH7q/Dg81tY5oc8m2AaXOeqinutODApt+U h7HIQHDwi5DtAKRuFh5ZVU/Tq89A8s3Tfoy6y1xq3UDwEk2onN9OyjMz51YFZmzJqsOc2j7Gp7y B8HHyDX2ARb7kXlF3iPQpPGlRDsTfecGBN0VoNpfShVqAaPlFjC+KMud/iJvuwauNSD02esajBq QL113x1xyjh/IK2CziaLivJgfPFu47ArcnqXITVxy3Ozbg2Juu99iXNseOpKMtFS5kzY12Azu39 5eHJcuoAqmVl3Jnaso/v9ldD1gMUqOJHW9Qx05ioLeQngM5Nq9MmiUGUC7p+ADwq3UEGUwngZ4c TPh78f+tRVCFzFSWDcDpgXlIsqZaM1Vwa6EwSrAt3RB+pmtpd/sYXcAq1I5s0pL2RJjnApvGxa3 rxE+3c96eXTydNC+Q== X-Received: by 2002:a17:903:388d:b0:2dd:143:d5 with SMTP id d9443c01a7336-2dd6c75a396mr43870995ad.22.1789378503638; Mon, 14 Sep 2026 02:35:03 -0700 (PDT) Received: from kernel.tail6741c6.ts.net ([185.220.238.35]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2dd2cfc2d3bsm46109865ad.48.2026.09.14.02.35.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Sep 2026 02:35:03 -0700 (PDT) From: Kunwu Chan To: jiangshanlai@gmail.com, paulmck@kernel.org Cc: josh@joshtriplett.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, rcu@vger.kernel.org, linux-kernel@vger.kernel.org, Kunwu Chan Subject: [PATCH 4/5] selftests/rcutorture: Fix double nerrs count in srcu_lockdep.sh Date: Mon, 14 Sep 2026 17:34:18 +0800 Message-ID: <20260914093419.1474829-5-kunwu.chan@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260914093419.1474829-1-kunwu.chan@gmail.com> References: <20260914093419.1474829-1-kunwu.chan@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When CONFIG_PROVE_LOCKING is missing, the deadlock-detection loop and the mixed-SRCU-readers section each increment nerrs once in the configuration check and again in the common error path, counting the same error twice. Remove the stray increments so that each error advances nerrs by one. Signed-off-by: Kunwu Chan Acked-by: Boqun Feng --- tools/testing/selftests/rcutorture/bin/srcu_lockdep.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/testing/selftests/rcutorture/bin/srcu_lockdep.sh b/tools= /testing/selftests/rcutorture/bin/srcu_lockdep.sh index 72791499dd96..3acaffe52c78 100755 --- a/tools/testing/selftests/rcutorture/bin/srcu_lockdep.sh +++ b/tools/testing/selftests/rcutorture/bin/srcu_lockdep.sh @@ -56,7 +56,6 @@ do if ! grep -q '^CONFIG_PROVE_LOCKING=3Dy' .config then echo "rcu_torture_init_srcu_lockdep:Error: CONFIG_PROVE_LOCKING disabl= ed in rcutorture SRCU-P scenario" - nerrs=3D$((nerrs+1)) err=3D1 fi if test "$d" -ne 0 && test "$ret" -eq 0 @@ -126,7 +125,6 @@ do if ! grep -q '^CONFIG_PROVE_LOCKING=3Dy' .config then echo "rcu_torture_init_srcu_lockdep:Error: CONFIG_PROVE_LOCKING disabled= in rcutorture SRCU-P scenario" - nerrs=3D$((nerrs+1)) err=3D1 fi if test "$val" =3D 0xf && test "$ret" -eq 0 --=20 2.43.0 From nobody Fri Sep 25 10:37:08 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EE4A425888 for ; Mon, 14 Sep 2026 09:35:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789378511; cv=none; b=IHZdCOJwi8YBVD37NxECX2uTSgFvywCn3x7eZ9iXymgZW7ntAJjJ1XXIyvlYt31rl6BZPx8TxofX7Eyy3AUUM279dQVyqwClIeIUaMSTYJW2KAV65yREFYJwtEXp5qXQKpfkVl9gTHaLLhs6zX6C/0F0VDBSCJ6BVxAO7+inZ4o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789378511; c=relaxed/simple; bh=AaTPGmc07kKC+uF/wcEqFJK98KQDzZQ5+h3ErmNQP5Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ldazXdztmN4u8+R5Pvny2vca9bXDQUFxXTC25s4CQS+r3O5TyNBfjM6y0tBAYUHozXXv3371uYR5lfaoGgbHUEKiA2Aewngn4ig1ViXBspA3oVgS6YvqCucOUf8H1KaJ/Wcp+huwDTsEinP9UWDsDHK/SKiyfQI2CHyVST8pG8c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=oJCGjk9P; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="oJCGjk9P" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2d747ed6d6eso11220065ad.2 for ; Mon, 14 Sep 2026 02:35:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789378507; x=1789983307; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=jIXoOdHN0FbScEAQfYR8vM5M5/92HY0s7q+t9tEs9HY=; b=oJCGjk9PuFMtOSzELL28Qv8UjnKoPmJ3oVuAb7CZamkYCaE4ttvR4rqZbf9NRudRYw PwaX0ihqcBarSXZL4Bw4G13YbE4Jp+KXXkRTFju+hlfBlMizcGdR50+C5uDts3wLIPcv VODvH8RMD1ir0glqgxMtbYXYK5muodTmZsjrRgBWs+1/i53cebVmSmQkC2cNlo3M4DBA MJo4ycQC2Ze9CY5VJqg6QRK/GPyLToLhxYesJJwefiNQ3mCYIpcPS6KyKXJzx2+V6lGK amk5QzTZRTvDXDXTYhMT7wTX2W7o/SqdRR+rsH3fPzxTZs3u7zEVy+DcC8ELx5N2A9Pe wi3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789378507; x=1789983307; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=jIXoOdHN0FbScEAQfYR8vM5M5/92HY0s7q+t9tEs9HY=; b=WmtJF3S/EjbzN3kolHF8sCD9KNTy2h9DA4Dyw6eJFtOVqDxqh+Hjj2EKj7IcnHQuqj m3bYaxbXcgviOw4l1Zt42DTvrJe8YT6Wu3HWxSbtKTtQOOZaTX41rbv9YFosAwuDKdo5 26wrshzv3JyNCP7nCwNSHg37jcV2UPsDcJT767ngtyNTTdC3gT2Oy6B6xnqMnlriJVq6 quWRpqYJBG/y7IBLLMbs6YHpoLU5rD73qJG5mZzDut6zgWcSaNrtZYgqwATmuGMfGjhz LSYk+JrQiHVJKVnK9uveYCexD9bBVpnrsDXLE7TngtRfn5LMUdJdAPAvZgqkV33OsrD0 gunA== X-Forwarded-Encrypted: i=1; AKwUvByz/3F9ofYn7EUI4JuYup2quTROfdQWlVMIwuIJYhRs74Gw1QUrlRKLLCcSqOQG195y4cKAGbnsmwjIE0s=@vger.kernel.org X-Gm-Message-State: AFuF++nMN3g0BsmGQ261WQanX6iy0rPYqypOfCMnIWpqe+glf30N637N gJn9Mwt0TjzFJYb6SS1b+NLbnE6eG3ZKxpFEm+qDRk0RENqap+nmSceA X-Gm-Gg: AYBFou20rNGFQKlx1B0FaYGFgze98Sc1wL0zAGoThUMmbvQX6Y8jjsYcvVCOuQ63efJ YmbAo44/jV9w1e477vvPYXq6lccTi2MBcG9SUYHRfSzfLnNU7kkT6nW3a7v2wZWd7Wx7h/McVq6 n7n30vxICZd5ZVDMw77wouFloBrgRitR79sRZJeEfXbKelR2S9E14x/NbjcJqUI5AyZ3TIGAM3U VtaLQEzmse2etTNl2/Gd6YzqB0+LtKuJYoFSzrjX6Myk2Xccerp/y3zNr0U2EXWYhJTcdmFEkm1 BQpYg14UBDNNAL6jptpw6irI8Yka0WJORtuMvvhkmkc9vjFfU/QlQDZraRXBH2o4JeKA7wdgiii aY1L3jD6b/nSgnTimpxZNNyHsbHkc5tq8pbIxajzYOfLrJ1nimU6hwwEWS3lw4SzczDBH4RDM48 R9mYV2uZwpww9zjs4xW0YZasVL4MFI1UtCp7lCwqL/1DkWsktD8Z1n2/2TYzzpzoBcCTPH0OTBa YM8/aoRPF8a4oMaIw== X-Received: by 2002:a17:903:244d:b0:2d9:438e:b70d with SMTP id d9443c01a7336-2dd6c5c1352mr38430615ad.1.1789378507308; Mon, 14 Sep 2026 02:35:07 -0700 (PDT) Received: from kernel.tail6741c6.ts.net ([185.220.238.35]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2dd2cfc2d3bsm46109865ad.48.2026.09.14.02.35.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Sep 2026 02:35:06 -0700 (PDT) From: Kunwu Chan To: jiangshanlai@gmail.com, paulmck@kernel.org Cc: josh@joshtriplett.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, rcu@vger.kernel.org, linux-kernel@vger.kernel.org, Kunwu Chan , Zqiang Subject: [PATCH 5/5] rcutorture: Add atomic SRCU cross-CPU IRQ context mismatch test Date: Mon, 14 Sep 2026 17:34:19 +0800 Message-ID: <20260914093419.1474829-6-kunwu.chan@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260914093419.1474829-1-kunwu.chan@gmail.com> References: <20260914093419.1474829-1-kunwu.chan@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add testtype 7 to verify that lockdep detects an IRQ-context mismatch when an atomic SRCU read-side critical section is held with IRQs enabled on one CPU and synchronize_srcu_atomic() is called from an IPI handler on another CPU. This covers the cross-CPU case that cannot be detected by checking the current task's held locks. Co-developed-by: Zqiang Signed-off-by: Zqiang Signed-off-by: Kunwu Chan Acked-by: Boqun Feng --- kernel/rcu/rcutorture.c | 27 +++++++++++++- .../selftests/rcutorture/bin/srcu_lockdep.sh | 36 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index ac9c726cb391..6f5a1d635f94 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -4695,6 +4695,8 @@ DEFINE_STATIC_SRCU_ATOMIC(srcu7_atomic); DEFINE_STATIC_SRCU_ATOMIC(srcu8_atomic); DEFINE_STATIC_SRCU_ATOMIC(srcu9_atomic); =20 +DEFINE_STATIC_SRCU_ATOMIC(srcu_irq); + static int srcu_lockdep_next(const char *f, const char *fl, const char *fs= , const char *fu, int i, int cyclelen, int deadlock) { @@ -4709,6 +4711,11 @@ static int srcu_lockdep_next(const char *f, const ch= ar *fl, const char *fs, cons return j; } =20 +static void srcu_sync_irq(void *unused) +{ + synchronize_srcu_atomic(&srcu_irq); +} + // Test lockdep on SRCU-based deadlock scenarios. static void rcu_torture_init_srcu_lockdep(void) { @@ -4892,13 +4899,31 @@ static void rcu_torture_init_srcu_lockdep(void) return; } =20 + if (testtype =3D=3D 7) { + int cpu; + + for (i =3D 0; i < cyclelen; i++) { + idx =3D srcu_read_lock_atomic(&srcu_irq); + cpu =3D cpumask_any_but(cpu_online_mask, + smp_processor_id()); + if (cpu < nr_cpu_ids) { + pr_info("%s: CPU%d sending IPI to CPU%d\n", + __func__, smp_processor_id(), cpu); + smp_call_function_single(cpu, srcu_sync_irq, + NULL, 1); + } + srcu_read_unlock_atomic(&srcu_irq, idx); + } + return; + } + err_out: pr_info("%s: test_srcu_lockdep =3D %05d does nothing.\n", __func__, test_= srcu_lockdep); pr_info("%s: test_srcu_lockdep =3D DNNL.\n", __func__); pr_info("%s: D: Deadlock if nonzero.\n", __func__); pr_info("%s: NN: Test number, 0=3DSRCU, 1=3DSRCU/mutex, 2=3DSRCU/rwsem, 3= =3DSRCU/Tasks Trace RCU, 4=3DSRCU_ATOMIC, ", __func__); - pr_cont("5=3DSRCU_ATOMIC/raw_spinlock, 6=3Dsynchronize_srcu_atomic inside= rcu_read_lock.\n"); + pr_cont("5=3DSRCU_ATOMIC/raw_spinlock, 6=3Dsynchronize_srcu_atomic inside= rcu_read_lock, 7=3Datomic SRCU cross-CPU IRQ context mismatch.\n"); pr_info("%s: L: Cycle length.\n", __func__); if (!IS_ENABLED(CONFIG_TASKS_TRACE_RCU)) pr_info("%s: NN=3D3 disallowed because kernel is built with CONFIG_TASKS= _TRACE_RCU=3Dn\n", __func__); diff --git a/tools/testing/selftests/rcutorture/bin/srcu_lockdep.sh b/tools= /testing/selftests/rcutorture/bin/srcu_lockdep.sh index 3acaffe52c78..c29a39f7d891 100755 --- a/tools/testing/selftests/rcutorture/bin/srcu_lockdep.sh +++ b/tools/testing/selftests/rcutorture/bin/srcu_lockdep.sh @@ -115,6 +115,42 @@ do fi done =20 +# Verify that synchronize_srcu_atomic() detects IRQ context mismatch +# when SRCU reader previously ran with IRQs enabled. +for c in 1 2 3 +do + err=3D + val=3D$((1000+7*10+c)) + tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration 5s \ + --configs "SRCU-P" \ + --kconfig "CONFIG_FORCE_NEED_SRCU_NMI_SAFE=3Dy" \ + --bootargs "rcutorture.test_srcu_lockdep=3D$val" \ + --trust-make --datestamp "$ds/$val" > "$T/kvm.sh.out" 2>&1 + ret=3D$? + mv "$T/kvm.sh.out" "$RCUTORTURE/res/$ds/$val" + if ! grep -q '^CONFIG_PROVE_LOCKING=3Dy' .config + then + echo "rcu_torture_init_srcu_lockdep:Error: CONFIG_PROVE_LOCKING" \ + "disabled in rcutorture SRCU-P scenario" + err=3D1 + fi + if test "$ret" -eq 0 + then + err=3D1 + echo -n Missing lockdep warning for > "$RCUTORTURE/res/$ds/$val/kvm.sh.e= rr" + elif ! grep -q "inconsistent {HARDIRQ-ON-R}" "$RCUTORTURE/res/$ds/$val/SR= CU-P/console.log" + then + err=3D1 + echo -n Missing lockdep warning for > "$RCUTORTURE/res/$ds/$val/kvm.sh.e= rr" + fi + if test -n "$err" + then + grep "rcu_torture_init_srcu_lockdep: test_srcu_lockdep =3D " "$RCUTORTUR= E/res/$ds/$val/SRCU-P/console.log" | sed -e 's/^.*rcu_torture_init_srcu_loc= kdep://' >> "$RCUTORTURE/res/$ds/$val/kvm.sh.err" + cat "$RCUTORTURE/res/$ds/$val/kvm.sh.err" + nerrs=3D$((nerrs+1)) + fi +done + # Test lockdep-enabled testing of mixed SRCU readers. for val in 0x1 0xf do --=20 2.43.0