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 59E5347B41F for ; Tue, 30 Jun 2026 19:09:05 +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=1782846546; cv=none; b=gBi/7LiBW/Tp+s/+ZHGKO7Z6rCk6oF3Z1UIiSxqWpvy1oTFPFkqotTpmYMg6Ot8OYeloHdc7777rh5eaFRLUvKZrJAGSbaQHf7NF9mrz+cB1q3N/Lg+iQ2ECUpdEftx/4V5KG2vftHfgWYhcox1SfPUGtGJmsvBbILT5gWn6pNw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782846546; c=relaxed/simple; bh=+ZXgYcjojjMdn1Hr2BkGtSt44F57eflpcJqxzNGCI7M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Vu1NNgc4EUpSHL8jNWE6AG/x3bV9dBmHQFmUY981qShgzrhRTk1bElcj2IhSsfTEXNa+XQDeLIsEY7sABB1ESNUBVqgB9Ivsm3G+4+K7yjr1QDZC5SSb4YjLrgMFvatte07kbzzhZrzvNpFv78mOV5wJfloFRUWdUWZmqQvJom8= 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=3bncAdR+; 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="3bncAdR+" 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=IEh6mKqSChyP6nlTu9460jgHkPhuMRjj4FVGibEoyXE=; b=3bncAdR+RCglPPzy90z05Z+dKy xTOxtAjFoamH2C7k8m/cCmza9kRFJmi2beXPldDauiYsxvqxJ6YrKL3iGlNGXDsZzV9dU4KeOHluP fcHqnVh5cxhKDiRi1evXkEppdb7P7zpwJt4u6+xJpk2LglHj4BRO5d5oKVWGlH0/tmcPVXkkVGLsc YwUbBh0sQRy4kQbFJxX6+O0cUUcO2ZXVvCHAbFIcHyNJdw8KVySlgCY3nvpFpt3J9QIDCoi90sfOp IPAi9Cvn4KAlaq5CrvnoJbD3G3mAgHD/mC9vGTiArHXXEwVc5ggErgYbNtgcrFN5VMM6QefiTIVmy 4tdndmBg==; Received: from [38.23.173.23] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.99.1 #2 (Red Hat Linux)) id 1wedpQ-000000005vq-0HLl; Tue, 30 Jun 2026 19:09:04 +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 v2 10/19] maple_tree: micro optimisation of mas_wr_store_type() Date: Tue, 30 Jun 2026 15:08:34 -0400 Message-ID: <20260630190843.3563858-11-liam@infradead.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260630190843.3563858-1-liam@infradead.org> References: <20260630190843.3563858-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 1c96b3a5dab60..999a1d095e369 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -3736,6 +3736,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; @@ -3755,21 +3758,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