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 35E71C83030 for ; Thu, 3 Jul 2025 22:24:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A36926B029C; Thu, 3 Jul 2025 18:24:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A0E456B029D; Thu, 3 Jul 2025 18:24:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 929BE6B029E; Thu, 3 Jul 2025 18:24:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 81FDD6B029C for ; Thu, 3 Jul 2025 18:24:25 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 24CC7104D03 for ; Thu, 3 Jul 2025 22:24:25 +0000 (UTC) X-FDA: 83624383290.03.AF19ADF Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf22.hostedemail.com (Postfix) with ESMTP id 690FDC0013 for ; Thu, 3 Jul 2025 22:24:23 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=m7D1V8lv; spf=pass (imf22.hostedemail.com: domain of "SRS0=1KN4=ZQ=paulmck-ThinkPad-P17-Gen-1.home=paulmck@kernel.org" designates 139.178.84.217 as permitted sender) smtp.mailfrom="SRS0=1KN4=ZQ=paulmck-ThinkPad-P17-Gen-1.home=paulmck@kernel.org"; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751581463; h=from:from:sender:reply-to: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=LVMWrEMZdZyoSeAR7sRdhmcDvc7WxVH05aARqJxtc7Y=; b=MuCOu4T+L+DEhlcC9qdRBw/pzPxADRP3x9/yTZKeXWv1rqaAmmZgnjrVLTr/BXVPee8DFs wW6JXY76ZZ+eBe9GAC5b3q941eK7+EvL5xyv5kQgneKbK/vwbbnhQDB0OKE+idLD/pwkOZ q9VSg/k1IHVUBiNOQTMKC/D5DlYrsT0= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=m7D1V8lv; spf=pass (imf22.hostedemail.com: domain of "SRS0=1KN4=ZQ=paulmck-ThinkPad-P17-Gen-1.home=paulmck@kernel.org" designates 139.178.84.217 as permitted sender) smtp.mailfrom="SRS0=1KN4=ZQ=paulmck-ThinkPad-P17-Gen-1.home=paulmck@kernel.org"; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751581463; a=rsa-sha256; cv=none; b=WJ1vUgTo9mrs21lMdRWoP7aJbEc/ntBW732KQgaAi4bU8LM3tV64pz4CBHZv0T4p4YuAgX mw6J+W3u2vSCwRspwt78Ei2WAGLTBt3PRDsv6OMrNFxGuMrWWTxaaY5p+GrErrjSc8RO+u jdOdRX1fIyl7/My2ijQ8qxN7uQsoClo= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 413C95C569C; Thu, 3 Jul 2025 22:24:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DF723C4CEE3; Thu, 3 Jul 2025 22:24:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751581461; bh=w3w1HWQyGrjxfcDVX2a88rURwMNQ/bcqmR87nd0s9Z8=; h=Date:From:To:Cc:Subject:Reply-To:References:In-Reply-To:From; b=m7D1V8lvjoTrd6PjJFv97POmRk+UwpwxR+LzTocMLe/xsSNRhHobl/uHgb5255QMN v7amSpj80uwaAx16SBhhDPWQ35p6mdwGQhSU+jR3Gj+qJMKSWOScm6pCaJeqBwsuuH lCOMVNgrdLHU756bL5Ck6fc8woPLcLjJ5tBYw6TIvb1ST5WaCdL34r0uVObPOowGzH Nk4snpd8+8Mmj4myMi37u2r9QvNvaWGqnxJP9mvbxLyJWsgfr2uxa4sv+3iN/uxGGI G8Uq8ZLwKC2tpiQZBzXDY2ODw9gG1ijfCJbFAhMmuE3AFGK+SfvhUgXBYR6ZyngGAi Oh3lvRnXgQyXw== Received: by paulmck-ThinkPad-P17-Gen-1.home (Postfix, from userid 1000) id 80FF4CE0C97; Thu, 3 Jul 2025 15:24:21 -0700 (PDT) Date: Thu, 3 Jul 2025 15:24:21 -0700 From: "Paul E. McKenney" To: Shakeel Butt Cc: Tejun Heo , Andrew Morton , JP Kobryn , Johannes Weiner , Ying Huang , Vlastimil Babka , Alexei Starovoitov , Sebastian Andrzej Siewior , Michal =?iso-8859-1?Q?Koutn=FD?= , bpf@vger.kernel.org, linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, Meta kernel team Subject: Re: [PATCH 1/2] llist: avoid memory tearing for llist_node Message-ID: Reply-To: paulmck@kernel.org References: <20250703200012.3734798-1-shakeel.butt@linux.dev> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250703200012.3734798-1-shakeel.butt@linux.dev> X-Rspamd-Queue-Id: 690FDC0013 X-Stat-Signature: euua5fsjsya5kqp5qy5u8q1cc8cphopm X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1751581463-251634 X-HE-Meta: U2FsdGVkX1+JhMpYb1cMDhdQB+NjtvD8II7vNYvdb0HFOc9qRIzrY7j3ldbjpg4xduL+YkTPoOJEa9ZNUDlxl5S1WY5riheqFUWjA2FI+7DG1SaQ0JQ673fn40CppCLaPZof0WqtGo1ptJ49EKfc4suhzu/jTHSstbLRQHqq4iYT4xvh3EYK+nls/+8Arv9e/yheEdH+bDoNiqhJYSegSWDkpcgUGVZrsTco24Z2tPK2z7h4zuZuEi5TEyWu0Gsr4lpHy5GxJeQgDsQuvOX9aIsT7oxZHJmxluXb/cDgAbNZkCKiFLPke5lhQxBVCf2E71e3H/T/hl4VEEw6utUx0Og3tGR87nIT7uCVRo9A0hDWkBSn6QrVb+VVD79PjAwx0EfEiwWFHPlJoa4OEXmD34G3JlBxzVumkJkC06+5AHNUFHWlG5ssG1dbM3aT9170PfHJuSvjdzK4TcfYoLtkm9Xfm3bST6t6D3O93pnnsLMs5zDseupDy6BILfz1sJX0P0hRrxeOpv91XVdrYTW5PRY7l5MEpfoF7zaLVIW/jK7fxu/ci4Su+Gl5Hk0xYI98lM5sE0Ybq5O00ZO9G3FYHduGXoKvFJYUFocAHV6StbyBTArlJzUC1T2m2BJNsLNirY1Z1G7FPIxHVkgShUNJWpFlwX0JuiJukVWsfRReYqMGjAFYluepjbJo63utdr80tdEf2QI22lxulgY+p/GogM7pHGHzXxGTZSAR5KAit6K47Z8ePe0/gOfjrHq4LN7U7/KTZHzBrA1yZrVc7RRDBRWkDWHKJZgLVkA4R6wy6Rb1cnTfOreT0DRlYFwkeUJQwwz+MAX0K+Ptlin/lwsMN2vPqVi+Isnm0cwH9Nct1zw5u0n+Vf8aLueNYr9bhef3hJ5QD84I/YHBkYwhviYZ29GXnwU+kJV38P1rXWRYdqC2bF4tMqjUYaTIofjY8xElnQIqjQq4IAfSQlHcCMD 8OQe1jIR kjFoZVZTPYw0qw65eGBPpQFeRxcj/LXMGM50Q7OFj+3fKGUjbH0VeAs03aK64pXve2zSwWcdtFwQgUd1R3v3ArImaEt7y277wuR9uPD8e2DMmi7RfN3oUOGBQ5OlOVzENRtrun82mSVRZNi1oCOhT2eCFbrabJd5tYIvbeepEcYUC0lbHjW+t8/UP3SC0yYWsiKjyHrTqnFRZtDLSdYrZ53USTFrG9/VmiGaSHmAiKMi5gFXHYxpavNh2YunRBMlSqVrP5TpP7xPfJHiQ1ttNjcsOm+yU/Y+0td0OFrKDsrdSPUPDZthXNYe11XAAV6ExC3rwgkovFodHjh4o2w33c8DO1ehi8CoWzM4zf4n5SqWf7wo6RzbEswo144Kbf6IaQCPhbdXiwKNqZAG3/Mn9QNLyNz6b5uNJev2mvvT2a9kCDWPbL3K4L3UwJvlA1NLryj/RdC/17GCqiUtyj04wLNe1Dh2CcV23yc5C6ZfN/1++V/MW3pp+/6qq1AlzrGZfbkDoW0NuUR424beV5Lm62q3ugc11OJFYAAERmNYRjN1ihTGn/IfvQ8xDASM2I+zY7+FBK1rBsZ8iDOE402C5zI+Ehr8N9Dic0+tBjYjO7O7JOfx4UWmLh5NIwrox6tNpzFZOz/OjYK5qbWcKaMpx7Bc+dIpcsUmmghbfw7h2FdcExuFsqxTD8SkBw6hfPKSWBKHaHxhAC6LD6jmx2pu9HGeg6cABR1BLB919GdYJURx8/tmnl1HNljbXmsx08Haf1WicozQM1G0oj8GDeWRULfjo8F3HwnCnIpixsz49VOl2NuLOv1YkrNpZJ7+bhH182fxF 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 Thu, Jul 03, 2025 at 01:00:11PM -0700, Shakeel Butt wrote: > Before the commit 36df6e3dbd7e ("cgroup: make css_rstat_updated nmi > safe"), the struct llist_node is expected to be private to the one > inserting the node to the lockless list or the one removing the node > from the lockless list. After the mentioned commit, the llist_node in > the rstat code is per-cpu shared between the stacked contexts i.e. > process, softirq, hardirq & nmi. It is possible the compiler may tear > the loads or stores of llist_node. Let's avoid that. > > Signed-off-by: Shakeel Butt Reviewed-by: Paul E. McKenney > --- > include/linux/llist.h | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/include/linux/llist.h b/include/linux/llist.h > index 27b17f64bcee..607b2360c938 100644 > --- a/include/linux/llist.h > +++ b/include/linux/llist.h > @@ -83,7 +83,7 @@ static inline void init_llist_head(struct llist_head *list) > */ > static inline void init_llist_node(struct llist_node *node) > { > - node->next = node; > + WRITE_ONCE(node->next, node); > } > > /** > @@ -97,7 +97,7 @@ static inline void init_llist_node(struct llist_node *node) > */ > static inline bool llist_on_list(const struct llist_node *node) > { > - return node->next != node; > + return READ_ONCE(node->next) != node; > } > > /** > @@ -220,7 +220,7 @@ static inline bool llist_empty(const struct llist_head *head) > > static inline struct llist_node *llist_next(struct llist_node *node) > { > - return node->next; > + return READ_ONCE(node->next); > } > > /** > -- > 2.47.1 >