From nobody Sun Feb 8 15:54:16 2026 Received: from out203-205-221-191.mail.qq.com (out203-205-221-191.mail.qq.com [203.205.221.191]) (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 DA4342C0F71 for ; Fri, 14 Nov 2025 10:40:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.205.221.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763116852; cv=none; b=ZLc6bV1z22izfX5WNvPjHVviNIReQP0a0ftTofr2naHMYIT/PDUK6ymaqMhp+HQ0W/2hmOciRdJv5NFlNwUS8LxfQ7rYQouiIsz0jFSEwvwy2tSpRO12OI3OEDocyhZQK7lhfPediekMLYWtukkRhQmP3PO/Q5Tt4xg07BgnMVo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763116852; c=relaxed/simple; bh=KHGw0JrQ5b9yzDf5BhV3fWRCR+KP7DzGbCF3Oxraaro=; h=Message-ID:From:To:Cc:Subject:Date:MIME-Version; b=GR2vgCNdj0oDff0oSVPALSA770QJLRNHWrzSmNY0rVR0iklTvqX5UPZOem0eDKTC7972HAxq3ekt3NE/zd2w3Wq7pcXXWqmyt5w5AUUGkOGvj8toSgnw5D35SlSDPYszl9EPmdir7e4Pj7xp72E8dST7aA7HU182rjwkLff0x68= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=qq.com; spf=pass smtp.mailfrom=qq.com; dkim=pass (1024-bit key) header.d=qq.com header.i=@qq.com header.b=iJEAeLjh; arc=none smtp.client-ip=203.205.221.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=qq.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=qq.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=qq.com header.i=@qq.com header.b="iJEAeLjh" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512; t=1763116846; bh=e3qA8tOoAeoWIDGPeQT0umXZVt3+AbbRL3OHzsWicUc=; h=From:To:Cc:Subject:Date; b=iJEAeLjh8Uj/XlBiGE+vegcadyjDUTtDbOlmb5s3P2gUva+itO6ad0MwT7jBNFu6H KoLIIdck8nPaXhUkhahGh86ZJbSpL8z6RBJY07PS5CvytYWOPBk85AQQ9P0QBnRC7f QqgHnZVhgYJu96EHijvr7KXTPtjzityAyyqtRja8= Received: from node68.. ([166.111.236.25]) by newxmesmtplogicsvrsza56-0.qq.com (NewEsmtp) with SMTP id A2B98296; Fri, 14 Nov 2025 18:40:43 +0800 X-QQ-mid: xmsmtpt1763116843t84na8r37 Message-ID: X-QQ-XMAILINFO: MZtEYADUG4AgMgoRmqPjUxGtzBJG3g0Kyyc2+px6B5cZVB9QClxOIYZkpOPEnb YwpIDGtC1l8v+vzbrhN46OL+VN8GkMR3mm3JkOWyaMUo4s9XejBIR5NVEy4mYb/FzWT4r6A3CDBl EmcuZDIwThiHiuWgzXK4MNQIXSmBT+7tNWNmvAaqhA5dTrYoKIA7+6K3iRFt/uOBsmdtOiNYvbJY nKGUvoiN+/LoXT++N9ZB6kftflJBCUEIEcSBQNoNH2rnGBoW0z2aYTx4xXhTuRf7DVBjesFE3buk X5keZy9EkS5IiSYJOHcr3z43KNS/SY/s8uyqfjSweyPCLDUAO1RszoILHyvS/kaSGlfhgh6jefQS +O0S4/3uIRM1R+cOa8Ar6f+mFktLvJxAYUfy75U5OPqgsaPGWwvVrbv6hNPB+R5gGuOB8rVtQrcx iljTEnBOWgnXmli4tkz+g9y3CxPDmsQRd/YOVK5OZfccTHK/05omCjkh8z7kQiJsjmxL3eXne7TK 2LhXwvDkmlm15dsJtFsQ+5LXtN/VdwsLd3l41mzofVU2X4AcLhcpzWcqW4td1LfVpSdaYIXXEkze xlDEIaziyPOI47agF+CftbquzAj8cXrYbbPw/DtQnzIfNbHoA3EIQdSxKZO2JxUnTntCkaZS7ui3 skLLoVYnnQbTBYvD0ZYNcEvYrp60+5VCmi7hiYSAQfQHfOHKGwdeQZY5Lm4G9DdLrwKHAQ9Cn0I3 dX1jNpW5++tl4tw7M9T94wBuaTuzSA+I+sF6vsqJMKyh6mHxABiBthRTqLUtMMDrG/c7n4YEhrIV ePCuEX/pbqOITlIpzTDtGnAf4VyAW4NuqunQqEEFu5arl+bY1o6HngHpjzY2JnqekXboQv4c6BVQ VOIQnmD9WpPOzlkLhNEfhKChNrk5zNnVVaxPXOVDTitQdjTU4QF9B5HGljP1k/kPi7Y0aJdL39eJ OD57Rw6DjK7gDeg+AfW0TjMd769jAkgg6nPE3uuIWT/fTbqttKqbPTxs8QgB8w0wcQKAdfpVv+Yw 7uhYgQzG+rMFhTSAi06KaMtFcG98wWxfvsRNvfh3dbQ6EbJqyDZ/5o/NyG3FNjdFmXhEOWAA== X-QQ-XMRINFO: OD9hHCdaPRBwq3WW+NvGbIU= From: fujunjie To: akpm@linux-foundation.org Cc: vbabka@suse.cz, surenb@google.com, mhocko@suse.com, jackmanb@google.com, hannes@cmpxchg.org, ziy@nvidia.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, fujunjie Subject: [PATCH] mm/page_alloc: optimize lowmem_reserve max lookup using monotonicity Date: Fri, 14 Nov 2025 10:40:32 +0000 X-OQ-MSGID: <20251114104032.2740513-1-fujunjie1@qq.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" calculate_totalreserve_pages() currently finds the maximum lowmem_reserve[j] for a zone by scanning the full range [j =3D zone_idx .. MAX_NR_ZONES). However, setup_per_zone_lowmem_reserve() constructs lowmem_reserve[] monotonically increasing in j for a fixed zone (and never populates lowmem_reserve[zone_idx] itself). This means the maximum valid reserve entry always resides at the highest j > zone_idx that has a non-zero value. Rewrite the loop to walk backwards from MAX_NR_ZONES - 1 down to zone_idx + 1, stopping at the first non-zero lowmem_reserve[j]. This avoids a full-range scan and makes the intent clearer. Behavior remains unchanged. Although this code is not on a hot path, the revised form is clearer and avoids an unnecessary full scan. Signed-off-by: fujunjie --- mm/page_alloc.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 600d9e981c23d..414c5ba978418 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -6285,10 +6285,22 @@ static void calculate_totalreserve_pages(void) long max =3D 0; unsigned long managed_pages =3D zone_managed_pages(zone); =20 - /* Find valid and maximum lowmem_reserve in the zone */ - for (j =3D i; j < MAX_NR_ZONES; j++) - max =3D max(max, zone->lowmem_reserve[j]); + /* + * Find valid and maximum lowmem_reserve in the zone. + * + * setup_per_zone_lowmem_reserve() builds + * lowmem_reserve[j] monotonically increasing in j + * for a fixed zone, so the maximum lives at the + * highest index that has a non-zero value. Walk + * backwards and stop at the first hit. + */ + for (j =3D MAX_NR_ZONES - 1; j > i; j--) { + if (!zone->lowmem_reserve[j]) + continue; =20 + max =3D zone->lowmem_reserve[j]; + break; + } /* we treat the high watermark as reserved pages. */ max +=3D high_wmark_pages(zone); =20 --=20 2.34.1