{"id":2223478,"url":"http://patchwork.ozlabs.org/api/1.2/patches/2223478/?format=json","web_url":"http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260415111412.1003526-2-songmuchun@bytedance.com/","project":{"id":2,"url":"http://patchwork.ozlabs.org/api/1.2/projects/2/?format=json","name":"Linux PPC development","link_name":"linuxppc-dev","list_id":"linuxppc-dev.lists.ozlabs.org","list_email":"linuxppc-dev@lists.ozlabs.org","web_url":"https://github.com/linuxppc/wiki/wiki","scm_url":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git","webscm_url":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/","list_archive_url":"https://lore.kernel.org/linuxppc-dev/","list_archive_url_format":"https://lore.kernel.org/linuxppc-dev/{}/","commit_url_format":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}"},"msgid":"<20260415111412.1003526-2-songmuchun@bytedance.com>","list_archive_url":"https://lore.kernel.org/linuxppc-dev/20260415111412.1003526-2-songmuchun@bytedance.com/","date":"2026-04-15T11:14:07","name":"[v2,1/6] mm/sparse-vmemmap: Fix vmemmap accounting underflow","commit_ref":null,"pull_url":null,"state":"handled-elsewhere","archived":false,"hash":"6ab5ba622ddf61a966764fccb8d48c11bda34fbb","submitter":{"id":78930,"url":"http://patchwork.ozlabs.org/api/1.2/people/78930/?format=json","name":"Muchun Song","email":"songmuchun@bytedance.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260415111412.1003526-2-songmuchun@bytedance.com/mbox/","series":[{"id":499970,"url":"http://patchwork.ozlabs.org/api/1.2/series/499970/?format=json","web_url":"http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=499970","date":"2026-04-15T11:14:06","name":"mm: Fix vmemmap optimization accounting and initialization","version":2,"mbox":"http://patchwork.ozlabs.org/series/499970/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2223478/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2223478/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <linuxppc-dev+bounces-19764-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=bytedance.com header.i=@bytedance.com\n header.a=rsa-sha256 header.s=google header.b=j7Bz8odD;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=112.213.38.117; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-19764-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)","lists.ozlabs.org;\n arc=none smtp.remote-ip=\"2607:f8b0:4864:20::1031\"","lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=bytedance.com","lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=bytedance.com header.i=@bytedance.com\n header.a=rsa-sha256 header.s=google header.b=j7Bz8odD;\n\tdkim-atps=neutral","lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=bytedance.com\n (client-ip=2607:f8b0:4864:20::1031; helo=mail-pj1-x1031.google.com;\n envelope-from=songmuchun@bytedance.com; receiver=lists.ozlabs.org)"],"Received":["from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117])\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 4fwdp26DYbz1yHM\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 21:14:34 +1000 (AEST)","from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4fwdny25Wzz3013;\n\tWed, 15 Apr 2026 21:14:30 +1000 (AEST)","from mail-pj1-x1031.google.com (mail-pj1-x1031.google.com\n [IPv6:2607:f8b0:4864:20::1031])\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 4fwdnx1mCpz2yvG\n\tfor <linuxppc-dev@lists.ozlabs.org>; Wed, 15 Apr 2026 21:14:28 +1000 (AEST)","by mail-pj1-x1031.google.com with SMTP id\n 98e67ed59e1d1-35d9f68d011so4284094a91.2\n        for <linuxppc-dev@lists.ozlabs.org>;\n Wed, 15 Apr 2026 04:14:28 -0700 (PDT)","from n232-176-004.byted.org ([36.110.163.96])\n        by smtp.gmail.com with ESMTPSA id\n d9443c01a7336-2b477fd3724sm19509485ad.0.2026.04.15.04.14.20\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Wed, 15 Apr 2026 04:14:25 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1776251670;\n\tcv=none;\n b=Pzqgl2kO3jPqj24XdogCWrkMBrLyyotO4xQ5T7Xq6b//Tknb9JtmfuPolYATpvHZA2+FuWe4E6Lu7uL6tH1Nx7T6QUWjPiebRSCzJkGE4edg1BVWS3uKPB2nq9k7pWb8Lx8p80GpxUTTzVPtnozIp7IXsCPxiz8JM9/Etb0pIo4HM0DvLaE73a93Xjc+GiblfKftGe/tcKmkeTB08I5PQ550c8fQoDtTUHaMa2aiaVmMB9dHQEpUBOedfc4Nmx8UciNHGXFsm6yeGLBM+B8fMEmc46QitYhkIFB6dJ5BoTDFw7KDUD2doTZxWda3VRYS7Hirdp/wLY8hoPQadAItNQ==","ARC-Message-Signature":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1776251670; c=relaxed/relaxed;\n\tbh=t2IwsSjULj2cdQGLjgGLVnmP99rI03lQ3ndkxR63O5c=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t MIME-Version;\n b=TLPGMa9Lo4cdt60lAui/E9UEXjMzSdSpdiIyG2Rpm97uhueUFUbw3j5ADZ2vn94cvse5y3tTzPqw6qp2kP6/BzhVqg7uV9AW9+6eyPEAuS3JBfbifR+vqTxp7gSXntsTEQ8G3yJWqZI0PmOi7qGfZ9qHW/4D9ccWt0iYcvaRYAGeLrNRWxSzt2vLclDpAM8r7JkNkoxNryP3evTqp+DlMQTAS7jUO67X5UyaRlCMvcHhMk39s1NN6j2TQTszvivqog0XsrKs3Fa3foteXTngntA8xv4UdxExgiK1Rx93jiF6DO632GM47c57JRBrSYTN+lyeFJ+jbk69SQ2xxMqrKg==","ARC-Authentication-Results":"i=1; lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=bytedance.com;\n dkim=pass (2048-bit key;\n unprotected) header.d=bytedance.com header.i=@bytedance.com\n header.a=rsa-sha256 header.s=google header.b=j7Bz8odD; dkim-atps=neutral;\n spf=pass (client-ip=2607:f8b0:4864:20::1031; helo=mail-pj1-x1031.google.com;\n envelope-from=songmuchun@bytedance.com;\n receiver=lists.ozlabs.org) smtp.mailfrom=bytedance.com","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=bytedance.com; s=google; t=1776251666; x=1776856466;\n darn=lists.ozlabs.org;\n        h=content-transfer-encoding:mime-version:references:in-reply-to\n         :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=t2IwsSjULj2cdQGLjgGLVnmP99rI03lQ3ndkxR63O5c=;\n        b=j7Bz8odDboFwges/CzlKXxlCCXugRiJ9E1VDIUSoIJzwsuYZCmN+YPs4QdrWBoCbV4\n         965UGETJ+Gy72YeIgsiwVP/1Q6u0cTDD4y9eySEVPbPhUFHEkhyfwZbLPKNcbRv2ZD+e\n         KB/iRnyK1cj1FvXfgY2k4p4hVIYRTpmRENC+zvH+sgpqiMB0D2+1ii/gTyLueEZC3rgY\n         ePV+zFpLOGjjfssFnXLtMRiTimnlRkgPKR3BqRaETgXc4WFl+BbFImzER7apN6sU2AA8\n         45ZOaEuPknx/tRP7KIFv4Fk5iHwP615tUwt7w0wLsBYft1ECHLs9zGyGwvfZmY18e0tV\n         ysgw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1776251666; x=1776856466;\n        h=content-transfer-encoding:mime-version:references:in-reply-to\n         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n         :to:cc:subject:date:message-id:reply-to;\n        bh=t2IwsSjULj2cdQGLjgGLVnmP99rI03lQ3ndkxR63O5c=;\n        b=CjANGwpDtURWws6u8Exn34GxxSZRtUQ1AVt7BSMGOc7gjlKyJJGSuVkh7tl56LT7CF\n         y0Gk3n9g7jcvZWk9HaObXKxqe16dO94ycuZ41bAkbOudCwl9oISrXcM/InHPFyo60gU6\n         4sH1PGDbED16u4ZHpM5Y/IqefTIjAflUDtJQ5rLI1TJAbMTu0zWdCcXjGSx63NnwQxxh\n         DNqssU2d3mpGmvluQbuKqP/0/qbVwsc3BG9wowY58yB9uTnOpxITqlpEw96DkhFReDDY\n         g1yykWg8W5P27Ar+/Nv8qQ9D7Dl6KNTXX7WtX5ioAO7ZE7tFjcORI0xDviKJCpphJe5f\n         WQvg==","X-Forwarded-Encrypted":"i=1;\n AFNElJ9U5R8tEIULMRKHT5tgSswCoIbjcEgII13zfo1y2OQPmh+6yWVJftuFLcQXT5BAGSPmzZMrYi+m2rEiiIw=@lists.ozlabs.org","X-Gm-Message-State":"AOJu0YzgBhacnRNvrocbbmqitu37G3FjJFzDYJODqyQ4ywO2bKOQl8BX\n\tAuJvsgqgeKIwY8RWAnq9sITNJiW2BB7OyebAX+fOyp6CeHPr1AYG6xyE9iNzQlY35gg=","X-Gm-Gg":"AeBDietX7moUWxOhf8q77UNr3vXjmA8EGD0YoKqXb+oKfw4mr8yM9rS2bL+Jzj3AJCQ\n\t96hg7PpnLlcA/W/fDLkzTwl4JQyu58NMXj8kjqR/6SyY2HUIcDspC7Yk5e+WXEOq/6ec528ww9B\n\tWeJ0y4rLqMe2w8uLhgTmblRiANMVWIVndaY6tIhgBBKIUiYp92uIPjIkXj5z3TvAZxh7GVcDBIt\n\trwuMfVlAuL0h7GEdzljGBbu+FFBzf6gBmdpfhiTK1FtzauEXzq0GwyXZWQq8DSix+iRoGgMzIo7\n\tR0qVtlheSSb/tN0+MHnoeXgpy1K6E3mbz+nvX0I9z/Kgbq3i0V1ghrMy2uSLDvqJ6trb6x6dGKl\n\t9c9kKLr8wX4IcekplDtcuS7gPfrwZrqPnyHQYOYL2D3ujw8ZPkXGIErHPSt9FoftRhBc/F4zxTf\n\thyluChn/UrlBu1AZBn/bxgyHHGyG4GSy/HGmGLBeLM4CQ=","X-Received":"by 2002:a17:90b:17cd:b0:35f:c1e1:a263 with SMTP id\n 98e67ed59e1d1-35fc1f0e974mr7643499a91.19.1776251666069;\n        Wed, 15 Apr 2026 04:14:26 -0700 (PDT)","From":"Muchun Song <songmuchun@bytedance.com>","To":"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>","Cc":"Lorenzo Stoakes <ljs@kernel.org>,\n\t\"Liam R . Howlett\" <Liam.Howlett@oracle.com>,\n\tVlastimil Babka <vbabka@kernel.org>,\n\tMike Rapoport <rppt@kernel.org>,\n\tSuren Baghdasaryan <surenb@google.com>,\n\tMichal Hocko <mhocko@suse.com>,\n\tNicholas Piggin <npiggin@gmail.com>,\n\tChristophe Leroy <chleroy@kernel.org>,\n\taneesh.kumar@linux.ibm.com,\n\tjoao.m.martins@oracle.com,\n\tlinux-mm@kvack.org,\n\tlinuxppc-dev@lists.ozlabs.org,\n\tlinux-kernel@vger.kernel.org,\n\tMuchun Song <songmuchun@bytedance.com>","Subject":"[PATCH v2 1/6] mm/sparse-vmemmap: Fix vmemmap accounting underflow","Date":"Wed, 15 Apr 2026 19:14:07 +0800","Message-Id":"<20260415111412.1003526-2-songmuchun@bytedance.com>","X-Mailer":"git-send-email 2.20.1","In-Reply-To":"<20260415111412.1003526-1-songmuchun@bytedance.com>","References":"<20260415111412.1003526-1-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-Transfer-Encoding":"8bit","X-Spam-Status":"No, score=-0.2 required=3.0 tests=DKIM_SIGNED,DKIM_VALID,\n\tDKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,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"},"content":"In section_activate(), if populate_section_memmap() fails, the error\nhandling path calls section_deactivate() to roll back the state. This\ncauses a vmemmap accounting imbalance.\n\nSince commit c3576889d87b (\"mm: fix accounting of memmap pages\"),\nmemmap pages are accounted for only after populate_section_memmap()\nsucceeds. However, the failure path unconditionally calls\nsection_deactivate(), which decreases the vmemmap count. Consequently,\na failure in populate_section_memmap() leads to an accounting underflow,\nincorrectly reducing the system's tracked vmemmap usage.\n\nFix this more thoroughly by moving all accounting calls into the lower\nlevel functions that actually perform the vmemmap allocation and freeing:\n\n  - populate_section_memmap() accounts for newly allocated vmemmap pages\n  - depopulate_section_memmap() unaccounts when vmemmap is freed\n  - free_map_bootmem() handles early bootmem section accounting\n\nThis ensures proper accounting in all code paths, including error\nhandling and early section cases.\n\nFixes: c3576889d87b (\"mm: fix accounting of memmap pages\")\nSigned-off-by: Muchun Song <songmuchun@bytedance.com>\n---\n mm/sparse-vmemmap.c | 20 ++++++++++++--------\n 1 file changed, 12 insertions(+), 8 deletions(-)","diff":"diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c\nindex 6eadb9d116e4..a7b11248b989 100644\n--- a/mm/sparse-vmemmap.c\n+++ b/mm/sparse-vmemmap.c\n@@ -656,7 +656,12 @@ 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 {\n-\treturn __populate_section_memmap(pfn, nr_pages, nid, altmap, pgmap);\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+\n+\treturn page;\n }\n \n static void depopulate_section_memmap(unsigned long pfn, unsigned long nr_pages,\n@@ -665,13 +670,17 @@ 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 \tvmemmap_free(start, end, altmap);\n }\n+\n static void free_map_bootmem(struct page *memmap)\n {\n \tunsigned long start = (unsigned long)memmap;\n \tunsigned long end = (unsigned long)(memmap + PAGES_PER_SECTION);\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 \tvmemmap_free(start, end, NULL);\n }\n \n@@ -774,14 +783,10 @@ static void section_deactivate(unsigned long pfn, unsigned long nr_pages,\n \t * The memmap of early sections is always fully populated. See\n \t * section_activate() and pfn_valid() .\n \t */\n-\tif (!section_is_early) {\n-\t\tmemmap_pages_add(-1L * (DIV_ROUND_UP(nr_pages * sizeof(struct page), PAGE_SIZE)));\n+\tif (!section_is_early)\n \t\tdepopulate_section_memmap(pfn, nr_pages, altmap);\n-\t} else if (memmap) {\n-\t\tmemmap_boot_pages_add(-1L * (DIV_ROUND_UP(nr_pages * sizeof(struct page),\n-\t\t\t\t\t\t\t  PAGE_SIZE)));\n+\telse if (memmap)\n \t\tfree_map_bootmem(memmap);\n-\t}\n \n \tif (empty)\n \t\tms->section_mem_map = (unsigned long)NULL;\n@@ -826,7 +831,6 @@ static struct page * __meminit section_activate(int nid, unsigned long pfn,\n \t\tsection_deactivate(pfn, nr_pages, altmap);\n \t\treturn ERR_PTR(-ENOMEM);\n \t}\n-\tmemmap_pages_add(DIV_ROUND_UP(nr_pages * sizeof(struct page), PAGE_SIZE));\n \n \treturn memmap;\n }\n","prefixes":["v2","1/6"]}