From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 765C8CF9C6A for ; Sun, 3 Nov 2024 03:35:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E50CC6B009F; Sat, 2 Nov 2024 23:35:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E009D6B00A0; Sat, 2 Nov 2024 23:35:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CA1026B00A1; Sat, 2 Nov 2024 23:35:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id ACE866B009F for ; Sat, 2 Nov 2024 23:35:43 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 5027B41397 for ; Sun, 3 Nov 2024 03:35:43 +0000 (UTC) X-FDA: 82743368652.05.61F1753 Received: from mail-qv1-f45.google.com (mail-qv1-f45.google.com [209.85.219.45]) by imf19.hostedemail.com (Postfix) with ESMTP id 5CBB51A0003 for ; Sun, 3 Nov 2024 03:35:03 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=MktMvnzE; spf=pass (imf19.hostedemail.com: domain of boqun.feng@gmail.com designates 209.85.219.45 as permitted sender) smtp.mailfrom=boqun.feng@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1730604858; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=7Urc9Z86LcjyqhCcm6H0VVQdu+SdtQEzmvHdA+i0O10=; b=ZHSPCkYJLmN3iJHalvj94wGcdWwLw1TWk67A6yI79beXrcA2pGffK+6poUgGMH6rhWTzym 50zerfSxS0cCekSdVEPQZpkK5tzZAWKgOOPVaic50aI5xuQxUZkiYaYafdJo5iSKnSoOTY Syd70BUIDdHOWcxHL+z7JeBfvd0Pk2A= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1730604858; a=rsa-sha256; cv=none; b=5u+4AF9xMofEnU1TDSnLt1l+4GDcuxdoy/hjmhIvwXokxb7hJSL9fpepGfSrzmaMY7c4Ry Vv1OoaCAyKF0bedvo27IiQKacNwTmvrbPneNsK3pgQ5s4k656VtgDXoIHZPQ/0G3jO0lFE V2O7NRelCUZ51lbzOnehTo9Bgi3k1g4= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=MktMvnzE; spf=pass (imf19.hostedemail.com: domain of boqun.feng@gmail.com designates 209.85.219.45 as permitted sender) smtp.mailfrom=boqun.feng@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-qv1-f45.google.com with SMTP id 6a1803df08f44-6cbf340fccaso26230956d6.1 for ; Sat, 02 Nov 2024 20:35:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730604940; x=1731209740; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:feedback-id:from:to:cc:subject:date :message-id:reply-to; bh=7Urc9Z86LcjyqhCcm6H0VVQdu+SdtQEzmvHdA+i0O10=; b=MktMvnzEqR3BPWZGU1AjKU4755vbSbetfYb0TUSUBEXYg7hEp6f43+PHlqneMLMGZ8 X+rKTD3ao14yh6DONMJX5cAYWfdCYm3LmO66ra+SPnZ1nLzXTAiqS02083n/zS0O1Lgt plKHIGbr7sDRPG5Moz7eMEciDGpS7RIiKTsOfavonj+s5ilcbf6JI9VyFoiBhc8y3bUV vn2e5XDecZ+EeFbj8yk79CpLlTVJWGYtP34tqD+WXYx4DP7Nkq59vH0bKpvm7LrUzFbP 4+aE/uK8AReL1gqSc6V2QOvFFeQj1oVrYWZvtMFYTOZOfbnkbtIT/iQ08xUH6OUtizJZ ZYvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730604940; x=1731209740; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:feedback-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7Urc9Z86LcjyqhCcm6H0VVQdu+SdtQEzmvHdA+i0O10=; b=QOvV9h5GzIJ9rq24PVkki7Jt57QZqi1PoQRXzG8SivprcaNPuHMj7vGTAqMTc7342H HFD7KnkDpgzWLDPWvHdpQvFtIZPpzbnaLsqSL+FBQfE3NQHOXqbK4mbUxqXRZrWeZ9EY hcnN2aqykY0ehmy4qK+Lk8aslob5lTWjzbH0AFEhhTTO+XHfLdk/tdSj+7McNT5G12ao 2lKwpUGvhce4devVqTs/Fb1GBUqRuAZZEj8ZcnP+pIQdRT09nu0p2jODbp384mJMZXaI VFlhGDvtBFqjP9alGOlzNPJjVKJQaO1KpWVCzzdNnbo8JrJAYy+ldlvhAJn4PRL7/T3K OccA== X-Forwarded-Encrypted: i=1; AJvYcCUm9yjOAKEFLzIpHA7NS43G5e1j37k1CO7kb/3JjPaGRZV578OuiwIfiVirK73EmAAAROUYWikZSg==@kvack.org X-Gm-Message-State: AOJu0YwUH7/ivhwVESn7uG2GXEkXTfp2raFXHuTK8sIk6XTUQvYlfWOS EvQS1EHgF03Ut60W0sQtqEYoCi/MWvEGLkK3SzZLE5R6i41BiHZX X-Google-Smtp-Source: AGHT+IEbzeGYn2+Z6MWmsVVv7YSFNBxFwFumW2eL1yqpcXinGbawh6m18jluX4ZYN/s4hgo2EShoEg== X-Received: by 2002:a05:6214:5d0e:b0:6d1:9f1b:b669 with SMTP id 6a1803df08f44-6d3542eddbbmr200542976d6.15.1730604939972; Sat, 02 Nov 2024 20:35:39 -0700 (PDT) Received: from fauth-a2-smtp.messagingengine.com (fauth-a2-smtp.messagingengine.com. [103.168.172.201]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7b2f3a718bbsm309375385a.87.2024.11.02.20.35.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Nov 2024 20:35:39 -0700 (PDT) Received: from phl-compute-03.internal (phl-compute-03.phl.internal [10.202.2.43]) by mailfauth.phl.internal (Postfix) with ESMTP id 89A4F1200076; Sat, 2 Nov 2024 23:35:38 -0400 (EDT) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-03.internal (MEProxy); Sat, 02 Nov 2024 23:35:38 -0400 X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrvdelvddgheekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurhepfffhvfevuffkfhggtggujgesthdtredttddtvden ucfhrhhomhepuehoqhhunhcuhfgvnhhguceosghoqhhunhdrfhgvnhhgsehgmhgrihhlrd gtohhmqeenucggtffrrghtthgvrhhnpefhtedvgfdtueekvdekieetieetjeeihedvteeh uddujedvkedtkeefgedvvdehtdenucffohhmrghinhepkhgvrhhnvghlrdhorhhgnecuve hluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepsghoqhhunhdo mhgvshhmthhprghuthhhphgvrhhsohhnrghlihhthidqieelvdeghedtieegqddujeejke ehheehvddqsghoqhhunhdrfhgvnhhgpeepghhmrghilhdrtghomhesfhhigihmvgdrnhgr mhgvpdhnsggprhgtphhtthhopedukedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtoh epphgruhhlmhgtkheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepsghighgvrghshies lhhinhhuthhrohhnihigrdguvgdprhgtphhtthhopehvsggrsghkrgesshhushgvrdgtii dprhgtphhtthhopegvlhhvvghrsehgohhoghhlvgdrtghomhdprhgtphhtthhopehlihhn uhigqdhnvgigthesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehlihhnuh igqdhkvghrnhgvlhesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehkrghs rghnqdguvghvsehgohhoghhlvghgrhhouhhpshdrtghomhdprhgtphhtthhopehlihhnuh igqdhmmheskhhvrggtkhdrohhrghdprhgtphhtthhopehsfhhrsegtrghnsgdrrghuuhhg rdhorhhgrdgruh X-ME-Proxy: Feedback-ID: iad51458e:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 2 Nov 2024 23:35:37 -0400 (EDT) Date: Sat, 2 Nov 2024 20:35:36 -0700 From: Boqun Feng To: "Paul E. McKenney" Cc: Sebastian Andrzej Siewior , Vlastimil Babka , Marco Elver , linux-next@vger.kernel.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, sfr@canb.auug.org.au, longman@redhat.com, cl@linux.com, penberg@kernel.org, rientjes@google.com, iamjoonsoo.kim@lge.com, akpm@linux-foundation.org, Thomas Gleixner , Peter Zijlstra Subject: Re: [PATCH] scftorture: Use workqueue to free scf_check Message-ID: References: <20241101195438.1658633-1-boqun.feng@gmail.com> <37c2ad76-37d1-44da-9532-65d67e849bba@paulmck-laptop> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <37c2ad76-37d1-44da-9532-65d67e849bba@paulmck-laptop> X-Rspamd-Server: rspam10 X-Stat-Signature: f7csyyh14xxmi34oin6cj58eernyac1g X-Rspamd-Queue-Id: 5CBB51A0003 X-Rspam-User: X-HE-Tag: 1730604903-720927 X-HE-Meta: U2FsdGVkX1+x6a9yjN9bLsU49QMZnAGBxCqGpnD6yJhHzxmBMUOEeHIskbjnGWMRfTbqhNdWca6gqW+5DD/GBC/n1WF+YYd9B2NGrt8CUa6GmJIPeuYl70BSfSicif0LJXBZSb9DlnqRDtIh8jkOnmA+iy4R0aPPofK171TktBAxFPZR97PHMsCqDEOZsvAm/FejnOnr2bDtVtaxbS62fIy5aITPswLHurqOenKgM3saZe74ZPIFKgeLHwiqKx6WPc/VcGm+iDpT80+SoZGNeuJshyLQmRrXci08tckrkN/klskGqj3bmvReUbQ1b7DWhmcJiaSjQLWsaX3nTU0t5Pxpb7bSUm7oTVxE2konfQN6qr7SWGhsWtaCDFbwVfLLIyFGm0P0LDDK9/5YGJ4qFueLhfUe78JcUsmzmag/3kIoBL2zedvA4I+2aZxxk//XeGYpSsBqepkg9nkevpEgHHPylBahVI9KUFHPonr5h1cLP/FxbsmCz6xMNLEcsYLOpKwcXawT7SxoUr1/NaRjXyup2RrF4+lllP5vQ1TWJ9uMyY9sMxt84lCn6VizGjCGhs2+cWIsIE1/EjRKMUpVq7V5zkzEn1Pi3ohaoQyq6Hh8GGvtwXgkjZCaDbVhVUBi5cRhCvGud9xg8gmD+szS8Q49SFSQ5xvpuRF8NVpISRFAHxcomvxxgDKw8cHi//2bdQ31FYiL6jFZW0sYfM7llQHHFHqJI7yZrdRfGgcxmumzFCwZB+yPoeltxMg6Jl3+vPlF6pOpuSQvaoALvle1wXeZigobG3vyqGPbvBU7ogGYnL9TMYie7jA3qKl9964Oj/Nq9D954wqb7tALYbbyj/W4PC/5TIoxuH09mxjuYh0KYFORvT430lAbZf9LonJKJ4UcMzPpW6EQSLhxxF8D/MlPEBwxz/ZnDkIw43SYY+4uz6OhGXODth0EV+fhPjq8cnOxEg2fLPvoxzzNFtY Egp+CyfN 9TQy+V2EwQqrtQ3WxoBS/ocSmOfWbSv6Fl5GQrBApNuIiNNyQ8SDTXiAyfyMBYRK5dZfRJn7IqHqa7zhRsjMBAvTfTmirTXISXiFwgXPYFHgNQ6twIdGZZolNlc/72i2ApXfbnTrTcj7FcSLTovFz36emjIzT76lcvi+Lv41hy5lcThHYOJb5T+AaP+8caelTnn15v2OhLR5M04G5jsE5C62UcOJufvOAQxewe3+uiBVC3TkrYfEy2JwvkMjpFyBW+/Ghrj91zXhgXS6TGQ0i0DudSSIQVe/Jz4A/lRnurloYZyOIPd/I1gXnJV0lKJyI8SdvUJrcuvUXzBz3DZzpas01zaZVQl0OHbphE6N3WEbKVO04aSebMSnaPp4Z39dBCqkhuS+PTv9oUw/QlgxMAGg75Cg9b1Zzr/mkX+LXM5JUjQfAtACcnQmBRpefQr2IfbSozhh5wgnNKBd3D0JI3n1sJfgNd3eWyWFXcJz/fChEt2OLL5anVaG53HCdbspHmINB X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Fri, Nov 01, 2024 at 04:35:28PM -0700, Paul E. McKenney wrote: > On Fri, Nov 01, 2024 at 12:54:38PM -0700, Boqun Feng wrote: > > Paul reported an invalid wait context issue in scftorture catched by > > lockdep, and the cause of the issue is because scf_handler() may call > > kfree() to free the struct scf_check: > > > > static void scf_handler(void *scfc_in) > > { > > [...] > > } else { > > kfree(scfcp); > > } > > } > > > > (call chain anlysis from Marco Elver) > > > > This is problematic because smp_call_function() uses non-threaded > > interrupt and kfree() may acquire a local_lock which is a sleepable lock > > on RT. > > > > The general rule is: do not alloc or free memory in non-threaded > > interrupt conntexts. > > > > A quick fix is to use workqueue to defer the kfree(). However, this is > > OK only because scftorture is test code. In general the users of > > interrupts should avoid giving interrupt handlers the ownership of > > objects, that is, users should handle the lifetime of objects outside > > and interrupt handlers should only hold references to objects. > > > > Reported-by: "Paul E. McKenney" > > Link: https://lore.kernel.org/lkml/41619255-cdc2-4573-a360-7794fc3614f7@paulmck-laptop/ > > Signed-off-by: Boqun Feng > > Thank you! > > I was worried that putting each kfree() into a separate workqueue handler > would result in freeing not keeping up with allocation for asynchronous > testing (for example, scftorture.weight_single=1), but it seems to be > doing fine in early testing. > I shared the same worry, so it's why I added the comments before queue_work() saying it's only OK because it's test code, it's certainly not something recommended for general use. But glad it turns out OK so far for scftorture ;-) Regards, Boqun > So I have queued this in my -rcu tree for review and further testing. > > Thanx, Paul > > > --- > > kernel/scftorture.c | 14 +++++++++++++- > > 1 file changed, 13 insertions(+), 1 deletion(-) > > > > diff --git a/kernel/scftorture.c b/kernel/scftorture.c > > index 44e83a646264..ab6dcc7c0116 100644 > > --- a/kernel/scftorture.c > > +++ b/kernel/scftorture.c > > @@ -127,6 +127,7 @@ static unsigned long scf_sel_totweight; > > > > // Communicate between caller and handler. > > struct scf_check { > > + struct work_struct work; > > bool scfc_in; > > bool scfc_out; > > int scfc_cpu; // -1 for not _single(). > > @@ -252,6 +253,13 @@ static struct scf_selector *scf_sel_rand(struct torture_random_state *trsp) > > return &scf_sel_array[0]; > > } > > > > +static void kfree_scf_check_work(struct work_struct *w) > > +{ > > + struct scf_check *scfcp = container_of(w, struct scf_check, work); > > + > > + kfree(scfcp); > > +} > > + > > // Update statistics and occasionally burn up mass quantities of CPU time, > > // if told to do so via scftorture.longwait. Otherwise, occasionally burn > > // a little bit. > > @@ -296,7 +304,10 @@ static void scf_handler(void *scfc_in) > > if (scfcp->scfc_rpc) > > complete(&scfcp->scfc_completion); > > } else { > > - kfree(scfcp); > > + // Cannot call kfree() directly, pass it to workqueue. It's OK > > + // only because this is test code, avoid this in real world > > + // usage. > > + queue_work(system_wq, &scfcp->work); > > } > > } > > > > @@ -335,6 +346,7 @@ static void scftorture_invoke_one(struct scf_statistics *scfp, struct torture_ra > > scfcp->scfc_wait = scfsp->scfs_wait; > > scfcp->scfc_out = false; > > scfcp->scfc_rpc = false; > > + INIT_WORK(&scfcp->work, kfree_scf_check_work); > > } > > } > > switch (scfsp->scfs_prim) { > > -- > > 2.45.2 > >