From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4C4624A21 for ; Sun, 1 Feb 2026 00:10:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769904652; cv=none; b=gLFGiJjSH9GCdBuWxSGn/7My0oAMD7Mgh4UrEITrj77KTJMtG+E8jjRmxwC5Emqa9YmnibKbCQWSekPnVycTgOjP58GRHqxv8NXmHAqiOyN++CQWAtrHRUhmn+xh5K79GArOtLAFP5TSE0ZRsLtTXxma47kO7o4SlIha0qXB+bY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769904652; c=relaxed/simple; bh=kQPODrUPiUY8ypJn9UfaCgFiYZn8Bv06jSOIpi+1vNk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=o04Y+suIZCWvcI9fjTAPkTrXK4mQGHmyCKQQUTthgX/A9BLWpnQu0+mMuB/M8I4XquB4k9SMSQqD/EcdDdSGKgsYO7TyIrQXXMZpngLgumDmRRqYFX8BqwEIQEXA0EzdlqQ5n7hLrPoydYl7xXHNZUGzFs4PamsiPC17gkHu4iU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HZPRwdjq; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HZPRwdjq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 85585C4CEF1; Sun, 1 Feb 2026 00:10:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1769904651; bh=kQPODrUPiUY8ypJn9UfaCgFiYZn8Bv06jSOIpi+1vNk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HZPRwdjqd7n51HsggBZHcRVQhVZcoHGaVm/A76ifsFWXIUgfeox9jNYRIygd5ZJmi fRMOOnUIhuwoxNnA4s1OmUx0ClDPHqwpjmlzAcw0/HhxWXu4cYdUWwUx+6lWw3geZq I0XWjzYWi5teATSCzv42KzGXruNdU74PSejVu28MQQiR7mhV0nuUHWb19epJSReB+V wNMOBuGBUelGqLxbYZOIw1E5KrNsCulOhaoc2/BRVwnlNRuE0TvEKyAQEiMxhRjKgC M4dxaW5TukrVdoWMgUYxEDUu8rLZ02GfpWHZPbTDRPmsQSQknv5xHShNv0dpchRYj9 A+y4cc1DxZ6eg== From: SeongJae Park To: "Liam R. Howlett" Cc: SeongJae Park , Andrew Morton , maple-tree@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Suren Baghdasaryan , Matthew Wilcox , Sidhartha Kumar , Vlastimil Babka , Alice Ryhl , Kuninori Morimoto , Geert Uytterhoeven , Arnd Bergmann , Christian Kujau Subject: Re: [PATCH v3 21/30] maple_tree: Add cp_is_new_root() helper Date: Sat, 31 Jan 2026 16:10:42 -0800 Message-ID: <20260201001043.88706-1-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260130205935.2559335-22-Liam.Howlett@oracle.com> References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Hello, On Fri, 30 Jan 2026 15:59:26 -0500 "Liam R. Howlett" wrote: > Add a helper to do what is needed when the maple copy node contains a > new root node. This is useful for future commits and is > self-documenting code. > > Signed-off-by: Liam R. Howlett > --- > lib/maple_tree.c | 70 ++++++++++++++++++++++++++---------------------- > 1 file changed, 38 insertions(+), 32 deletions(-) > > diff --git a/lib/maple_tree.c b/lib/maple_tree.c > index 5280fa6d2d6ec..42038e42a4c7e 100644 > --- a/lib/maple_tree.c > +++ b/lib/maple_tree.c > @@ -3337,6 +3337,43 @@ static void mas_spanning_rebalance(struct ma_state *mas, > mas_spanning_rebalance_loop(mas, mast, count); > } > > +static inline bool cp_is_new_root(struct maple_copy *cp, struct ma_state *mas) > +{ > + if (cp->min || cp->max != ULONG_MAX) > + return false; > + > + if (cp->d_count != 1) { > + enum maple_type mt = maple_arange_64; > + > + if (!mt_is_alloc(mas->tree)) > + mt = maple_range_64; > + > + cp->data = cp->d_count; > + cp->s_count = 0; > + dst_setup(cp, mas, mt); > + init_cp_src(cp); > + node_copy(mas, cp->src[0].node, 0, cp->data, cp->max, maple_copy, > + cp->dst[0].node, 0, mt); > + node_finalise(cp->dst[0].node, mt, cp->end + 1); > + /* > + * Warning, see cp_leaf_init() comment and rcu_assign_pointer() > + * documentation. Since this is a new root, there are no > + * read-side operations that can view it until it is insert into > + * the tree after an rcu_assign_pointer() call. > + */ > + RCU_INIT_POINTER(cp->slot[0], mt_mk_node(cp->dst[0].node, mt)); I just found the above makes my build test using an old version compiler fails. Fortunately, seems it is same to the one we discussed before [1], and same mitigation like below attached patch works, at least for my test setup. [1] https://lore.kernel.org/dwhxxuil4zkesmyj6xviyyyfedrcd65h6qd4bplmcrsg36purj@f523i7t6nxag Thanks, SJ [...] === >8 === >From ecc4e468d72c431d53043c8a61fddb6ddf2ecf7c Mon Sep 17 00:00:00 2001 From: SeongJae Park Date: Sat, 31 Jan 2026 16:02:56 -0800 Subject: [PATCH] lib/mape_tree: temporal build fix Without the fix, build with old compilers fails like below: CC lib/maple_tree.o In file included from .../arch/arm64/include/asm/rwonce.h:67, from .../include/linux/compiler.h:380, from .../include/linux/array_size.h:5, from .../include/linux/kernel.h:16, from .../include/linux/maple_tree.h:11, from .../lib/maple_tree.c:56: .../lib/maple_tree.c: In function 'cp_is_new_root': .../include/linux/rcupdate.h:555:36: error: dereferencing pointer to incomplete type 'struct maple_enode' 555 | #define RCU_INITIALIZER(v) (typeof(*(v)) __force __rcu *)(v) | ^~~~ .../include/asm-generic/rwonce.h:55:33: note: in definition of macro '__WRITE_ONCE' 55 | *(volatile typeof(x) *)&(x) = (val); \ | ^~~ .../include/linux/rcupdate.h:1046:3: note: in expansion of macro 'WRITE_ONCE' 1046 | WRITE_ONCE(p, RCU_INITIALIZER(v)); \ | ^~~~~~~~~~ .../include/linux/rcupdate.h:1046:17: note: in expansion of macro 'RCU_INITIALIZER' 1046 | WRITE_ONCE(p, RCU_INITIALIZER(v)); \ | ^~~~~~~~~~~~~~~ .../lib/maple_tree.c:3364:3: note: in expansion of macro 'RCU_INIT_POINTER' 3364 | RCU_INIT_POINTER(cp->slot[0], mt_mk_node(cp->dst[0].node, mt)); | ^~~~~~~~~~~~~~~~ Signed-off-by: SeongJae Park --- lib/maple_tree.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index c522419e99f4e..eb2855269332a 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -3361,7 +3361,8 @@ static inline bool cp_is_new_root(struct maple_copy *cp, struct ma_state *mas) * read-side operations that can view it until it is insert into * the tree after an rcu_assign_pointer() call. */ - RCU_INIT_POINTER(cp->slot[0], mt_mk_node(cp->dst[0].node, mt)); + RCU_INIT_POINTER(cp->slot[0], + (void *)mt_mk_node(cp->dst[0].node, mt)); cp->height++; } WARN_ON_ONCE(cp->dst[0].node != mte_to_node( -- 2.47.3