[{"id":3677746,"web_url":"http://patchwork.ozlabs.org/comment/3677746/","msgid":"<ad-1t9sMWBqmgJ3g@kernel.org>","date":"2026-04-15T15:58:47","subject":"Re: [PATCH v2 3/6] mm/sparse-vmemmap: Fix DAX vmemmap accounting\n with optimization","submitter":{"id":77733,"url":"http://patchwork.ozlabs.org/api/people/77733/","name":"Mike Rapoport","email":"rppt@kernel.org"},"content":"On Wed, Apr 15, 2026 at 07:14:09PM +0800, Muchun Song wrote:\n> When vmemmap optimization is enabled for DAX, the nr_memmap_pages\n> counter in /proc/vmstat is incorrect. The current code always accounts\n> for the full, non-optimized vmemmap size, but vmemmap optimization\n> reduces the actual number of vmemmap pages by reusing tail pages. This\n> causes the system to overcount vmemmap usage, leading to inaccurate\n> page statistics in /proc/vmstat.\n> \n> Fix this by introducing section_vmemmap_pages(), which returns the exact\n> vmemmap page count for a given pfn range based on whether optimization\n> is in effect.\n> \n> Fixes: 15995a352474 (\"mm: report per-page metadata information\")\n> Signed-off-by: Muchun Song <songmuchun@bytedance.com>\n\nAcked-by: Mike Rapoport (Microsoft) <rppt@kernel.org>\n\n> ---\n>  mm/sparse-vmemmap.c | 32 ++++++++++++++++++++++++++++----\n>  1 file changed, 28 insertions(+), 4 deletions(-)\n> \n> diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c\n> index 40290fbc1db4..05e3e2b94e32 100644\n> --- a/mm/sparse-vmemmap.c\n> +++ b/mm/sparse-vmemmap.c\n> @@ -652,6 +652,29 @@ void offline_mem_sections(unsigned long start_pfn, unsigned long end_pfn)\n>  \t}\n>  }\n>  \n> +static int __meminit section_vmemmap_pages(unsigned long pfn, unsigned long nr_pages,\n> +\t\t\t\t\t   struct vmem_altmap *altmap,\n> +\t\t\t\t\t   struct dev_pagemap *pgmap)\n> +{\n> +\tunsigned int order = pgmap ? pgmap->vmemmap_shift : 0;\n> +\tunsigned long pages_per_compound = 1L << order;\n> +\n> +\tVM_WARN_ON_ONCE(!IS_ALIGNED(pfn | nr_pages, min(pages_per_compound,\n> +\t\t\t\t\t\t\tPAGES_PER_SECTION)));\n> +\tVM_WARN_ON_ONCE(pfn_to_section_nr(pfn) != pfn_to_section_nr(pfn + nr_pages - 1));\n> +\n> +\tif (!vmemmap_can_optimize(altmap, pgmap))\n> +\t\treturn DIV_ROUND_UP(nr_pages * sizeof(struct page), PAGE_SIZE);\n> +\n> +\tif (order < PFN_SECTION_SHIFT)\n> +\t\treturn VMEMMAP_RESERVE_NR * nr_pages / pages_per_compound;\n> +\n> +\tif (IS_ALIGNED(pfn, pages_per_compound))\n> +\t\treturn VMEMMAP_RESERVE_NR;\n> +\n> +\treturn 0;\n> +}\n> +\n>  static struct page * __meminit populate_section_memmap(unsigned long pfn,\n>  \t\tunsigned long nr_pages, int nid, struct vmem_altmap *altmap,\n>  \t\tstruct dev_pagemap *pgmap)\n> @@ -659,7 +682,7 @@ static struct page * __meminit populate_section_memmap(unsigned long pfn,\n>  \tstruct page *page = __populate_section_memmap(pfn, nr_pages, nid, altmap,\n>  \t\t\t\t\t\t      pgmap);\n>  \n> -\tmemmap_pages_add(DIV_ROUND_UP(nr_pages * sizeof(struct page), PAGE_SIZE));\n> +\tmemmap_pages_add(section_vmemmap_pages(pfn, nr_pages, altmap, pgmap));\n>  \n>  \treturn page;\n>  }\n> @@ -670,7 +693,7 @@ static void depopulate_section_memmap(unsigned long pfn, unsigned long nr_pages,\n>  \tunsigned long start = (unsigned long) pfn_to_page(pfn);\n>  \tunsigned long end = start + nr_pages * sizeof(struct page);\n>  \n> -\tmemmap_pages_add(-1L * (DIV_ROUND_UP(nr_pages * sizeof(struct page), PAGE_SIZE)));\n> +\tmemmap_pages_add(-section_vmemmap_pages(pfn, nr_pages, altmap, pgmap));\n>  \tvmemmap_free(start, end, altmap);\n>  }\n>  \n> @@ -679,9 +702,10 @@ static void free_map_bootmem(struct page *memmap, struct vmem_altmap *altmap,\n>  {\n>  \tunsigned long start = (unsigned long)memmap;\n>  \tunsigned long end = (unsigned long)(memmap + PAGES_PER_SECTION);\n> +\tunsigned long pfn = page_to_pfn(memmap);\n>  \n> -\tmemmap_boot_pages_add(-1L * (DIV_ROUND_UP(PAGES_PER_SECTION * sizeof(struct page),\n> -\t\t\t\t\t\t  PAGE_SIZE)));\n> +\tmemmap_boot_pages_add(-section_vmemmap_pages(pfn, PAGES_PER_SECTION,\n> +\t\t\t\t\t\t     altmap, pgmap));\n>  \tvmemmap_free(start, end, NULL);\n>  }\n>  \n> -- \n> 2.20.1\n>","headers":{"Return-Path":"\n <linuxppc-dev+bounces-19780-incoming=patchwork.ozlabs.org@lists.ozlabs.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=H0i33bJZ;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-19780-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)","lists.ozlabs.org;\n arc=none smtp.remote-ip=\"2600:3c0a:e001:78e:0:1991:8:25\"","lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org","lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=H0i33bJZ;\n\tdkim-atps=neutral","lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=kernel.org\n (client-ip=2600:3c0a:e001:78e:0:1991:8:25; helo=sea.source.kernel.org;\n envelope-from=rppt@kernel.org; receiver=lists.ozlabs.org)"],"Received":["from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fwm6F3M2lz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 01:59:01 +1000 (AEST)","from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4fwm6D5rzpz2yvr;\n\tThu, 16 Apr 2026 01:59:00 +1000 (AEST)","from sea.source.kernel.org (sea.source.kernel.org\n [IPv6:2600:3c0a:e001:78e:0:1991:8:25])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4fwm6C4nq5z2yvG\n\tfor <linuxppc-dev@lists.ozlabs.org>; Thu, 16 Apr 2026 01:58:59 +1000 (AEST)","from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n\tby sea.source.kernel.org (Postfix) with ESMTP id 3B94F404B4;\n\tWed, 15 Apr 2026 15:58:57 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 6368DC19424;\n\tWed, 15 Apr 2026 15:58:51 +0000 (UTC)"],"ARC-Seal":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1776268740;\n\tcv=none;\n b=im+bVEcJ0slHNSwisPYdIeK+tE2KT8lwF3g5PIhzKX0Yc6Mg1WR8d3enXKDiubbFHnEcsOD3EryZLcXPqTt1yijVJDlrW8E/2wBEDReBxp5CIbFmD59/Ggq1RTJHV/nA4r2APnEIqBQM/ZxRXao3+ewIIvD5IT6FXkNSMi6DR07BciXR5KC7KdvPpPQiUt38PR9tDcJORLAO3JfvMRm/GjABNETRwEnfO12HXP0Hk/vcXwrZL0avwrGDiUYAVu7rf6uWShRKbHQcMnyj0vlgRzBR/ySIYZv+WcNVskFjdjohduA+8fse0kzgfSAnyiqEz8qSUh5QVkCKnFIWziELbw==","ARC-Message-Signature":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1776268740; c=relaxed/relaxed;\n\tbh=O7rgm7cxZaadd6+va1WKqLPVDJoEG/g/j6EWoeXD+ew=;\n\th=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:\n\t Content-Type:Content-Disposition:In-Reply-To;\n b=nXJ2EzGN6uOR1Ax2JNtMsn8GkwvTj0KGpvNI4QkwFPJVLFm3qrU/ef8+Dow1duNEWW6mQfWBx4mpatwAJeHpEDl/DKj4rCXrQZuIaZwx53pH9DnKazv/5vI9fijq26JqsBfsfKzJpyS8GshhhxrRCdTBl8jSfzFxeq/ZFCf6usYPNyDncaZv2CpbfVmH8uft8HKZysBd4vNitebSTmfa91UiOKfe+5IKFvnw9F2IiGV2N6+jEwzaibztQjh4E4vuTyM0gcjZxijoC0dihoRwYU6H0uyFJYPYVBc5HkqXiiALeCDQZDCO+Ksu+8IEKGo7GKPLgONusBtQr98vy4ozmw==","ARC-Authentication-Results":"i=1; lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org;\n dkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=H0i33bJZ; dkim-atps=neutral;\n spf=pass (client-ip=2600:3c0a:e001:78e:0:1991:8:25;\n helo=sea.source.kernel.org; envelope-from=rppt@kernel.org;\n receiver=lists.ozlabs.org) smtp.mailfrom=kernel.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1776268737;\n\tbh=y+oq4INIxgbLQllztrJYjafmJkeuG9Q8awCwafdTv18=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=H0i33bJZOnaxzNBKISduWbARJbUIWH5tRHgMmNW9tGUDA65uuEWbQytdZpKAwleUm\n\t 2R/5Xj3BYQt06J9Pt8r1Umg7yauBzgLvmDnjAGySIE0ayUcHQHxeky8KavBuS9QUcs\n\t ZF0KFAz/6OUD0nQ+T+f1dJDvWHdhhTq8+PDYVBnlLr4nuTkaADeTEMzJXYlVO7s3AX\n\t o6fAv2+7lLuamfYG62wd2tnlRZNPn97bj0RSkuegYp/wVfhHKD0B1KQpV14gm4I9da\n\t BQ9hZk46xrvcn+0wl4O3LCZCwKYjlZ/63x5kdPTeA9qbpk182SsVzVmouMLLhLdgnI\n\t itjpqaY6gD1Cg==","Date":"Wed, 15 Apr 2026 18:58:47 +0300","From":"Mike Rapoport <rppt@kernel.org>","To":"Muchun Song <songmuchun@bytedance.com>","Cc":"Andrew Morton <akpm@linux-foundation.org>,\n\tDavid Hildenbrand <david@kernel.org>,\n\tMuchun Song <muchun.song@linux.dev>,\n\tOscar Salvador <osalvador@suse.de>,\n\tMichael Ellerman <mpe@ellerman.id.au>,\n\tMadhavan Srinivasan <maddy@linux.ibm.com>,\n\tLorenzo Stoakes <ljs@kernel.org>,\n\t\"Liam R . Howlett\" <Liam.Howlett@oracle.com>,\n\tVlastimil Babka <vbabka@kernel.org>,\n\tSuren Baghdasaryan <surenb@google.com>,\n\tMichal Hocko <mhocko@suse.com>, Nicholas Piggin <npiggin@gmail.com>,\n\tChristophe Leroy <chleroy@kernel.org>, aneesh.kumar@linux.ibm.com,\n\tjoao.m.martins@oracle.com, linux-mm@kvack.org,\n\tlinuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org","Subject":"Re: [PATCH v2 3/6] mm/sparse-vmemmap: Fix DAX vmemmap accounting\n with optimization","Message-ID":"<ad-1t9sMWBqmgJ3g@kernel.org>","References":"<20260415111412.1003526-1-songmuchun@bytedance.com>\n <20260415111412.1003526-4-songmuchun@bytedance.com>","X-Mailing-List":"linuxppc-dev@lists.ozlabs.org","List-Id":"<linuxppc-dev.lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev+help@lists.ozlabs.org>","List-Owner":"<mailto:linuxppc-dev+owner@lists.ozlabs.org>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Archive":"<https://lore.kernel.org/linuxppc-dev/>,\n  <https://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Subscribe":"<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>","List-Unsubscribe":"<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>","Precedence":"list","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20260415111412.1003526-4-songmuchun@bytedance.com>","X-Spam-Status":"No, score=-0.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,\n\tDKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS\n\tautolearn=disabled version=4.0.1 OzLabs 8","X-Spam-Checker-Version":"SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org"}}]