From patchwork Sat Jun 1 13:34:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Yang X-Patchwork-Id: 13682421 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 569AEC25B76 for ; Sat, 1 Jun 2024 13:34:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 63D516B0098; Sat, 1 Jun 2024 09:34:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5ECB46B009A; Sat, 1 Jun 2024 09:34:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4B4906B009E; Sat, 1 Jun 2024 09:34:23 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 2DF9B6B0098 for ; Sat, 1 Jun 2024 09:34:23 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id A1FEF80F12 for ; Sat, 1 Jun 2024 13:34:22 +0000 (UTC) X-FDA: 82182413964.18.72F2D6E Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) by imf14.hostedemail.com (Postfix) with ESMTP id 0B642100013 for ; Sat, 1 Jun 2024 13:34:20 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=WumRYlmJ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf14.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.218.51 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1717248861; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references:dkim-signature; bh=ed0ndcnOPxTFHGipBMURY8Imk+dcSASaALhML2a4IdE=; b=OuIBA41U7LZs1iYCmvCPF1jvEOisp6D6gXJnONKZsZmVBIqxsPdmEG/6kEspNygd3UKiqC 2a/Y9+RONf4X0Z3aZ6ev+CozjIxpKRMo11jyfjGk2+KrST3P3dZLFS8VOBpYHD91UNL6wr Zp2k8OTd0+qWDV6rA6gnWV8sZmeSv4s= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=WumRYlmJ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf14.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.218.51 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1717248861; a=rsa-sha256; cv=none; b=NQt7dJpajCLHHC/DD7c1PnmxPWbo1FbqNIaa7pVO7YZ8BMTPbC5GheTNkp9axOAm6e9PyG e/vOqyxsXfsZlJueAZlfrVbecChNN50lq/HEXC+q6rxRUaFzFHzHfLGX2PTos/a6OABFXp Ag4TJm9I9Dfb/Ux0dDHSZ7jV0kDSEgA= Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-a68b41ef3f6so35682766b.1 for ; Sat, 01 Jun 2024 06:34:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1717248859; x=1717853659; darn=kvack.org; h=message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ed0ndcnOPxTFHGipBMURY8Imk+dcSASaALhML2a4IdE=; b=WumRYlmJA9rytFQe291/0kwN5euFTEwPUjlxNH8mkH/Lt/leT1uHIl2vnF9mrwN97K TM0xVW3ckoHBv1I0Fs6ZumoyneQyzNQhivPLAsQ8EwYmGaq9FvO0UggWhcsOFpCeHWdM J2chWt6lTjuVs4o+yubr6SXUYH6wW0gijLEqN4Im+9hhMJukvNb39P+AV1uexJoMwfOi 61EOKDVCoryksfChzyMj/m9Z5xyurI/S9mzru5qMEh9dcZxRUrl4+ht0WQKy0Id7HE8e 90EXOeoNmsoZ7VS4/SKpLI2R0Dn5Td15Q/HLCgOZ7TKQGPtu15PDvtNw7iTXwvs7y2DT LMAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717248859; x=1717853659; h=message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ed0ndcnOPxTFHGipBMURY8Imk+dcSASaALhML2a4IdE=; b=uaxN2Exqv7nOR7cKUD/3X+GbyQkSDzkkZXvsvsjV80OZrvDYTlovBrfQ47rwZe+Kce TSqB/EOgZzT4kIuNj3xjrHfclq14uUt4zyx2uVjXei9+DaC62Ahl5cGVQliqKp8yoigt SBWRryGQ5uRokfCG1b+HbiPOZ4EwsmZiinFLnqT0NPkShg+gmnAjjrxghehVvJZhGax/ B/+0KFoUbmZgNXrrf9dn8CI9cNO94qnjPI6+lAUyzv5S4K6jWzQNyZydtnW69HYafYYW 1hGZJbNSpe69zHRRt72NKSykl3SrS7rQwtzkCI5RAz4qFR8j4b4X23pI4fhVsr4chBMx l1lQ== X-Gm-Message-State: AOJu0YwsEYHUcvMlHtmfaA7p5BEnP3btAD6MULmappA9iD5SZYb5qZYv xgZpVn4aWlI2DOvwS1DsG1W7PrAl+L6vJkES9ULWsBGc7/Z78CRa X-Google-Smtp-Source: AGHT+IEEuTH0VoIAQeEyUyypzgkth23765dAxgEq5uLxP6S/TSdqJON5VDJro9e586vObhxYrJ7Vyg== X-Received: by 2002:a17:907:8001:b0:a66:3ef1:9ed9 with SMTP id a640c23a62f3a-a6821d64758mr242967666b.56.1717248858989; Sat, 01 Jun 2024 06:34:18 -0700 (PDT) Received: from localhost ([185.92.221.13]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-57a31c6d3c3sm2299128a12.59.2024.06.01.06.34.18 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 01 Jun 2024 06:34:18 -0700 (PDT) From: Wei Yang To: rppt@kernel.org, akpm@linux-foundation.org, david@redhat.com, osalvador@suse.de Cc: linux-mm@kvack.org, Wei Yang Subject: [PATCH] mm: increase totalram_pages on freeing to buddy system Date: Sat, 1 Jun 2024 13:34:02 +0000 Message-Id: <20240601133402.2675-1-richard.weiyang@gmail.com> X-Mailer: git-send-email 2.11.0 X-Rspamd-Queue-Id: 0B642100013 X-Stat-Signature: yi7jh51pm5y3atwrkypc5k3wf4xtczjy X-Rspam-User: X-Rspamd-Server: rspam04 X-HE-Tag: 1717248860-438745 X-HE-Meta: U2FsdGVkX1+EUonT38S+V+HZYXKRTqlvVPapQKb1/0bmUdysPYCh88a4pVZiG8GBYpt6H53y3J0OQlVxsAGTG/VK5XK9WA8CGnzWDG1RdqJvmRIM44COyqkrAmYLJdCXrIsV9jisbyHDhBediDsw3dGbwPEMtx7f+OCimlhzJa+0U3sESsBc7jzGkezpnulWp9p8v9vAtPIrbtlq6JE3S2xQqPxe8seEvxKqYvVR1ZR9rLUSJZZPi5CGbt2MZmK7aK2fFbour5EBkFrIgGmahKBAhhB1ZGXtG3E6lOj2m+ZazRxtEWETV2GdjCwc+tNb6bltGHZr8nBZMp/Z5DC3uu9p1a6xFeHr7fUQ/JtZWCN2yHRaawkhX6QGZTGS4KGRMyP4+ilNFEdgeVf+mCHeQnpBzSwi+/ou/4uuEh4C2abHt1oOgKFtm84BWAJFicAoriqYOV0SwVroy4Fy+xGKEuSZwr/4iV5bW8ZbwaCgKSFYbXcDzlYeYRRkhOLptmj17NFEa+HMXRsGBoGn/T1BkCUF6XbB6cVLGgJsLjXOXJUQRlxWVrWOIlWCzvted1t/cTw589g1bic7bjFFT6vIWM2fty+F2wvyaX8MpRvotvIkDKBXKcTqBIHZrGXAnwomnsVWTdzRM0tq29f0mcjilJ9JBJV8JwpY8Z6G/47bZR7dy7A1flfX7zp6Ucij4RzLFechvLXqlUakePewoSEjzJsh8cfDgu1JzPaO1ExPg0hQPkjw4ElHwPBH+zpyLFUv8ylYLiMEFZkhHoai2FusMzn9r1oMVXjt14uisHprqT07zAk1apzW2zzBEpT5TAhvNIuC1mRd3QQmFfKVGHbAvsQJSZFe4+WDIfXOW50gwKOtJ1SSKy9SXBGZvHW1bQvQFA9kTeX1QbBxM2a4sjxpvFTGFcOQuuxLA10dIRDFZpzvgdRgNpWQ4OWWWp/6qR75AupdluIwPP/cftVyIzS PlC77oFO oeYJtyYkCWAGFVcaoeOnCWpFoJ6eLy/8SVFy7bX7vHnEmLa6XvVVH+Hnd/e94t4vIorZOkptp50oqrZ0X7j+xJ0/iasqG+1QMzKzXQCq/Y2VesrUw0UJPvhUgjKgJR/uuHpSSmeIqjIf0GEzrGUN0teYh+9E3P890m2uBjLpDSDKw7uzC1LFDhTAr2/QBH6+YSTTq3aRpzhxr+iM7nZ/MAUA8bwmNA5yGoDeQUxUXNL88ZCABYTcmXG0d7Yf9c/rlu/h4pQN9QvjFMi5zrzvosv/m2jIg7fvU5ImRHdBFmbz8EjFGKIJN7lTAAufT9S4f6LUJxscNhJx1J1twUQQ33WA4gpyayus9ULbccXqUuzxb3n4eRplGxI7BUZeaJQxURelgqajTB4bKfdJYNTaKr6cfw/ahbjcl+69Dkdc6yrNApsjElbcerxmHYODBynYwo1hmxBPC+gI6DIN1fV00YR9tVQGMVtgvNoJg4i9diRFLskBnFb1YcEaoQNelhkcKJniwg4M3RxIOdumGtf9VgTAHWoh7O/df2hnxN0wwpmOyAOg= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Total memory represents pages managed by buddy system. After the introduction of DEFERRED_STRUCT_PAGE_INIT, it may count the pages before being managed. free_low_memory_core_early() returns number of pages for all free pages, even at this moment only early initialized pages are freed to buddy system. This means the total memory at this moment is not correct. Let's increase it when pages are freed to buddy system. Signed-off-by: Wei Yang --- mm/memblock.c | 23 ++++++----------------- mm/memory_hotplug.c | 1 - mm/page_alloc.c | 1 + 3 files changed, 7 insertions(+), 18 deletions(-) diff --git a/mm/memblock.c b/mm/memblock.c index 98d25689cf10..51dd143eabb4 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -1716,10 +1716,8 @@ void __init memblock_free_late(phys_addr_t base, phys_addr_t size) cursor = PFN_UP(base); end = PFN_DOWN(base + size); - for (; cursor < end; cursor++) { + for (; cursor < end; cursor++) memblock_free_pages(pfn_to_page(cursor), cursor, 0); - totalram_pages_inc(); - } } /* @@ -2128,7 +2126,7 @@ static void __init __free_pages_memory(unsigned long start, unsigned long end) } } -static unsigned long __init __free_memory_core(phys_addr_t start, +static void __init __free_memory_core(phys_addr_t start, phys_addr_t end) { unsigned long start_pfn = PFN_UP(start); @@ -2136,11 +2134,9 @@ static unsigned long __init __free_memory_core(phys_addr_t start, PFN_DOWN(end), max_low_pfn); if (start_pfn >= end_pfn) - return 0; + return; __free_pages_memory(start_pfn, end_pfn); - - return end_pfn - start_pfn; } static void __init memmap_init_reserved_pages(void) @@ -2182,9 +2178,8 @@ static void __init memmap_init_reserved_pages(void) } } -static unsigned long __init free_low_memory_core_early(void) +static void __init free_low_memory_core_early(void) { - unsigned long count = 0; phys_addr_t start, end; u64 i; @@ -2199,9 +2194,7 @@ static unsigned long __init free_low_memory_core_early(void) */ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE, &start, &end, NULL) - count += __free_memory_core(start, end); - - return count; + __free_memory_core(start, end); } static int reset_managed_pages_done __initdata; @@ -2232,13 +2225,9 @@ void __init reset_all_zones_managed_pages(void) */ void __init memblock_free_all(void) { - unsigned long pages; - free_unused_memmap(); reset_all_zones_managed_pages(); - - pages = free_low_memory_core_early(); - totalram_pages_add(pages); + free_low_memory_core_early(); } #if defined(CONFIG_DEBUG_FS) && defined(CONFIG_ARCH_KEEP_MEMBLOCK) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 431b1f6753c0..84bb4b0205d7 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -637,7 +637,6 @@ void generic_online_page(struct page *page, unsigned int order) */ debug_pagealloc_map_pages(page, 1 << order); __free_pages_core(page, order); - totalram_pages_add(1UL << order); } EXPORT_SYMBOL_GPL(generic_online_page); diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 00954d8c9c30..33cd15efac9e 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1234,6 +1234,7 @@ void __free_pages_core(struct page *page, unsigned int order) set_page_count(p, 0); atomic_long_add(nr_pages, &page_zone(page)->managed_pages); + totalram_pages_add(nr_pages); if (page_contains_unaccepted(page, order)) { if (order == MAX_PAGE_ORDER && __free_unaccepted(page))