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 762DDC83030 for ; Thu, 3 Jul 2025 20:00:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 09B996B0294; Thu, 3 Jul 2025 16:00:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 073126B0295; Thu, 3 Jul 2025 16:00:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ECC1D6B0296; Thu, 3 Jul 2025 16:00:28 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id D9EDF6B0294 for ; Thu, 3 Jul 2025 16:00:28 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id CF63880695 for ; Thu, 3 Jul 2025 20:00:27 +0000 (UTC) X-FDA: 83624020494.11.2D33E52 Received: from out-189.mta1.migadu.com (out-189.mta1.migadu.com [95.215.58.189]) by imf21.hostedemail.com (Postfix) with ESMTP id 06D041C0004 for ; Thu, 3 Jul 2025 20:00:25 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=M8R6JXbF; spf=pass (imf21.hostedemail.com: domain of shakeel.butt@linux.dev designates 95.215.58.189 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751572826; 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-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=SGhXzWJsGk56JycQmQ+hoC74TrLHTSnR2HKmNnQu/Nw=; b=NclrGPo+XLbYxKp7MxupxwkgJLH53I5Wbc67szUbjktggjuoHFaOtRvTyDw+UiwYLSEvqt 8eUEzggC8rFnJBmgATewv5HziN+cg574WFmXoO9zFsyTDoSHHlyAIMLf/3nIeFWE2cE7jG 4PI4pkwxz8Tqj5cCjfbfgM2hqPjhypI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751572826; a=rsa-sha256; cv=none; b=MRfTQcoKRRxKuLhAkeZrfD8NJLEhlYbev7AuLKerPHH0nVtfcBavQMSPnRjb/zQdRikaSe Dtoug2Hls2qMtT1Al6vdIPOWMMS+X9VyYe8XHctcMMZaNlK7hActIIeaxT36AI5U8GSjpe zg/Vn23cVGdbshoDQANKznz0H/T/wJE= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=M8R6JXbF; spf=pass (imf21.hostedemail.com: domain of shakeel.butt@linux.dev designates 95.215.58.189 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev; dmarc=pass (policy=none) header.from=linux.dev X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1751572823; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=SGhXzWJsGk56JycQmQ+hoC74TrLHTSnR2HKmNnQu/Nw=; b=M8R6JXbF/SaGFD0ewZZk0dtUaSuRsaRB2w+WYGGTkJNFxeUR/FELr5MkCYl+5heZ1Bvldu rAph2Kt+lIAcvjEPESRtd9zcuPsoTSp6uH2XtCtVCdFuMlg4YCVOSVphNeCcvtXwz7vm07 MnYUxRFP7aFUHRwrjaetduqdFT0oXjA= From: Shakeel Butt To: Tejun Heo Cc: "Paul E . McKenney" , Andrew Morton , JP Kobryn , Johannes Weiner , Ying Huang , Vlastimil Babka , Alexei Starovoitov , Sebastian Andrzej Siewior , =?UTF-8?q?Michal=20Koutn=C3=BD?= , bpf@vger.kernel.org, linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, Meta kernel team Subject: [PATCH 1/2] llist: avoid memory tearing for llist_node Date: Thu, 3 Jul 2025 13:00:11 -0700 Message-ID: <20250703200012.3734798-1-shakeel.butt@linux.dev> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 06D041C0004 X-Stat-Signature: w9z5g1uute1rfq85g43k4m4xfg9hjgie X-HE-Tag: 1751572825-333781 X-HE-Meta: U2FsdGVkX18DvorWPXKc1NY4KfH49o7UDm7B/HJZ6Omj11NKqYXi9Qx5f/xlkTwwAOhVPEHv38Wnt4ahdzsJbWgKUNmC4xGjCqSW252nD8wkaXakRzpvLD2H3ThRN/nfFE2qjDKaYMfnG6Agp2OUWfsBLRKYLVWQRKWOMBKVypZfQ5g7uk+vvmAMDNs3N1vlXSe3OSnda0HlHJMHlq+otNwWZzPcguWfGj5JOAxeGiTS1Y5HMjuBFxSHKecTZdVuhOMpTkWVfseWag2wJzvYh56GVbtwmugEHwywCes4LCdEND1J/FX3QMdrBF0ptoUsT2ONEERr/BEr+SnCIIwD9/fYyhjcX5FV0Yv3U31u/l87m3weOJk/h3MxmY7umszyK/jnSGKSXbNVSJrZVx0Lyuis84bu65LJTnhXGWySg/CwgZhJIIy1zDwZBJX++A9/on7ZYGa/C7Jbo7AxREXBUmP2wL/bgNScNlu9HYHXxe3b24TRA2r9Vn1MY2zkdjlvmRZiiM6zZSuY5zP+DW6fHIwuvNgCYCZ1Ctibv8+xoFWhv2oCtgPi36YlgsKAmD93ugc8kC4m+AGJ6X915wzN5n1PKVNQaCjT2Ay7FCKCHLmWf4F83q3hQy+LXd+F1f4Ttu3VEdh3oANpyV6i9BX/6S3+9pX14SVtaKrLH4VI++5CS7uBXAWL9nbyDq1Pa8BU4MOwtQ8cct1XWtlDCN0n3iMyKftvrAcNp8tZ7/11QD1SWqvsUpSYO4ZQSaRO5bpHfWYcJhq4z7eEMQiQd0XFYcNVx4e3L4DkYFraxxsm8mOPNjcUH7lC5bVDTxA7oOD2oJ4aHeQfB+0qRr4u6aiZGBjcXX/dO62+KJVG8E/X3imNDEQ/GpW+2gPws0ATNn8vcsmv7F0YHoTR9YNtWH/3gc9zwwOrdAAOLfQI5tk+RL5gea9+i0Fth3kht5eQkfBFz+ikcjMUNqT7Gx9xUoM Kx/td+xN 67tLDwp3//n1YuUW3loeSg2Z2qTCRR0mWkDsqKDsPsH7SRJiu3KIlXPoH5dpPfbmPYNPQ67L2nQ/+3JM4k708e8yNi9NH/lbrr3UyAZC0hv1HT9Wc4Lq1WxwxsyWdKX/n6dXG8Nb4JGV1IcxeUTRkJpyDmpKQbGaiC35pbTP7Pfd2jQIV4UGCEVHSXcVA5Q2VZJ2CsaKzDWlX5OVYzCXru5LbHr06+9xldFhz6C9S1PxpxMmm/P7sKozR2tjL1vC8EyCdtOVFv0uVwIs1vRTY3Be/QyqjW+zgTvDLBqRZiMfKHY+ZlXP0vrklAPPICDV1XbntPQfZ/qR7Zs7frv6xvHwPhWujaH88ANc4yg877xk0ziM= 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: 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 --- 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