From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 C1DF9425CC2 for ; Mon, 29 Jun 2026 14:42:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.137.202.133 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782744169; cv=none; b=MxEoD7015gZXwZ6DZI+UBsQO8HsqrITRrRMw2A2C6w7AqmymdjRV+N1rHwoF8Xh3xxYMXr+6GWZuO/h38lgWbZ4TAHDhGS7zH8BzYSU8I7BrQlGbqlb+lAIa+mIBA/y+tOD3X7qIjrCOLdehKwyRv7dXBl5UC8XgX4jS5e7HuoQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782744169; c=relaxed/simple; bh=uViKD7ErDVXCKa4Ey/xJRii0BUdgILqDC75RanGsNCw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mApDIxKGn0ZO+haI81XlFVjkoOBaQNpn1BBnXUIWgIsBQwI9gJ8b9VtlaTJlgYJVcOLxajRB0BCiUcQzzgWKl5wjBm9COXhPKp2Pe9C1GpYWWBJIRMAd/CM5MPXVwPLJZaLHJTO5Y4rfAEMK5KZCFN11CAoBNAkeSbX+WxoScHw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=infradead.org; spf=pass smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=euhmC69L; arc=none smtp.client-ip=198.137.202.133 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="euhmC69L" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description; bh=wl7SCHrPlo6N/ym8KPSSIcP6adc/9JLwa19T/UO77JQ=; b=euhmC69LbGhU9Dgd9AsPghPJN1 ebN6+NCHh2bzNlWJ78vv26FfpQw39H1ZmoWHhbtKq2ShvkbvqD6cVK5pSzzPitfB9on8/JhTco24+ 8uCmsiVON3l7fl15B2hhzU0i1q1bDfonnfDUAnbeQWUPvt1Rjw4zZkYT18lraKuL/s70pmRV3N/tQ scD8zbixPsPQZa8aa9vF5w7kPIACZr/wmOPOQUJxtg0IEmpl2dLS7cza9VK+G1ejB1D/X2a/8mep/ NwmenVnrgmeUgJCg6QDHSTNVMNKi1nBQvJjz5tdsl2eIvvun5q8Qd5P5d92pJUzDSro9kztBEwdAx 4ogi5WWA==; Received: from [38.23.173.23] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.99.1 #2 (Red Hat Linux)) id 1weDCC-0000000EubZ-0mxD; Mon, 29 Jun 2026 14:42:48 +0000 From: "Liam R. Howlett (Oracle)" To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, maple-tree@lists.infradead.org, "Liam R. Howlett (Oracle)" Subject: [PATCH 10/18] maple_tree: micro optimisation of mas_wr_store_type() Date: Mon, 29 Jun 2026 10:41:37 -0400 Message-ID: <20260629144145.1572283-11-liam@infradead.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260629144145.1572283-1-liam@infradead.org> References: <20260629144145.1572283-1-liam@infradead.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Use three new local booleans instead of reading other structures. This has shown an increase of 0.62% on a 2048 entry tree of height 4. Signed-off-by: Liam R. Howlett (Oracle) --- lib/maple_tree.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index a2b96ef05cb32..dd679ba2b8bfa 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -3729,6 +3729,9 @@ static inline enum store_type mas_wr_store_type(struct ma_wr_state *wr_mas) { struct ma_state *mas = wr_mas->mas; unsigned char new_end; + bool appending; + bool one_slot; + bool in_rcu; if (unlikely(mas_is_none(mas) || mas_is_ptr(mas))) return wr_store_root; @@ -3748,21 +3751,30 @@ static inline enum store_type mas_wr_store_type(struct ma_wr_state *wr_mas) return wr_new_root; new_end = mas_wr_new_end(wr_mas); + in_rcu = mt_in_rcu(mas->tree); + appending = mas->offset == mas->end; + one_slot = wr_mas->offset_end - mas->offset == 1; + /* Potential spanning rebalance collapsing a node */ if (new_end < mt_min_slots[wr_mas->type]) { if (!mte_is_root(mas->node)) return wr_rebalance; + if (!in_rcu) { + if (appending) + return wr_append; + else if (mas->end == new_end && one_slot) + return wr_slot_store; + } return wr_node_store; } if (new_end >= mt_slots[wr_mas->type]) return wr_split_store; - if (!mt_in_rcu(mas->tree) && (mas->offset == mas->end)) + if (!in_rcu && appending) return wr_append; - if ((new_end == mas->end) && (!mt_in_rcu(mas->tree) || - (wr_mas->offset_end - mas->offset == 1))) + if (new_end == mas->end && (!in_rcu || one_slot)) return wr_slot_store; return wr_node_store; -- 2.47.3