All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <010001858025fc22-e619988e-c0a5-4545-bd93-783890b9ad14-000000@email.amazonses.com>

diff --git a/a/1.txt b/N1/1.txt
index 006d6ef..e1c302a 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,98 +1,84 @@
-If CONFIG_DEFERRED_STRUCT_PAGE_INIT is enabled, memblock_free_pages()
-only releases pages to the buddy allocator if they are not in the
-deferred range. This is correct for free pages (as defined by
-for_each_free_mem_pfn_range_in_zone()) because free pages in the
-deferred range will be initialized and released as part of the deferred
-init process. memblock_free_pages() is called by memblock_free_late(),
-which is used to free reserved ranges after memblock_free_all() has
-run. All pages in reserved ranges have been initialized at that point,
-and accordingly, those pages are not touched by the deferred init
-process. This means that currently, if the pages that
-memblock_free_late() intends to release are in the deferred range, they
-will never be released to the buddy allocator. They will forever be
-reserved.
+From: Aaron Thompson <dev@aaront.org>\r
 
-In addition, memblock_free_pages() calls kmsan_memblock_free_pages(),
-which is also correct for free pages but is not correct for reserved
-pages. KMSAN metadata for reserved pages is initialized by
-kmsan_init_shadow(), which runs shortly before memblock_free_all().
-
-For both of these reasons, memblock_free_pages() should only be called
-for free pages, and memblock_free_late() should call __free_pages_core()
-directly instead.
-
-One case where this issue can occur in the wild is EFI boot on
-x86_64. The x86 EFI code reserves all EFI boot services memory ranges
-via memblock_reserve() and frees them later via memblock_free_late()
-(efi_reserve_boot_services() and efi_free_boot_services(),
-respectively). If any of those ranges happen to fall within the deferred
-init range, the pages will not be released and that memory will be
-unavailable.
-
-For example, on an Amazon EC2 t3.micro VM (1 GB) booting via EFI:
-
-v6.2-rc2:
-  # grep -E 'Node|spanned|present|managed' /proc/zoneinfo
-  Node 0, zone      DMA
-          spanned  4095
-          present  3999
-          managed  3840
-  Node 0, zone    DMA32
-          spanned  246652
-          present  245868
-          managed  178867
-
-v6.2-rc2 + patch:
-  # grep -E 'Node|spanned|present|managed' /proc/zoneinfo
-  Node 0, zone      DMA
-          spanned  4095
-          present  3999
-          managed  3840
-  Node 0, zone    DMA32
-          spanned  246652
-          present  245868
-          managed  222816
-
-Fixes: 3a80a7fa7989 ("mm: meminit: initialise a subset of struct pages if CONFIG_DEFERRED_STRUCT_PAGE_INIT is set")
-Signed-off-by: Aaron Thompson <dev@aaront.org>
----
- mm/memblock.c                     | 8 +++++++-
- tools/testing/memblock/internal.h | 4 ++++
- 2 files changed, 11 insertions(+), 1 deletion(-)
-
-diff --git a/mm/memblock.c b/mm/memblock.c
-index 511d4783dcf1..fc3d8fbd2060 100644
---- a/mm/memblock.c
-+++ b/mm/memblock.c
-@@ -1640,7 +1640,13 @@ void __init memblock_free_late(phys_addr_t base, phys_addr_t size)
- 	end = PFN_DOWN(base + size);
- 
- 	for (; cursor < end; cursor++) {
--		memblock_free_pages(pfn_to_page(cursor), cursor, 0);
-+		/*
-+		 * Reserved pages are always initialized by the end of
-+		 * memblock_free_all() (by memmap_init() and, if deferred
-+		 * initialization is enabled, memmap_init_reserved_pages()), so
-+		 * these pages can be released directly to the buddy allocator.
-+		 */
-+		__free_pages_core(pfn_to_page(cursor), 0);
- 		totalram_pages_inc();
- 	}
- }
-diff --git a/tools/testing/memblock/internal.h b/tools/testing/memblock/internal.h
-index fdb7f5db7308..85973e55489e 100644
---- a/tools/testing/memblock/internal.h
-+++ b/tools/testing/memblock/internal.h
-@@ -15,6 +15,10 @@ bool mirrored_kernelcore = false;
- 
- struct page {};
- 
-+void __free_pages_core(struct page *page, unsigned int order)
-+{
-+}
-+
- void memblock_free_pages(struct page *page, unsigned long pfn,
- 			 unsigned int order)
- {
--- 
+If CONFIG_DEFERRED_STRUCT_PAGE_INIT is enabled, memblock_free_pages()\r
+only releases pages to the buddy allocator if they are not in the\r
+deferred range. This is correct for free pages (as defined by\r
+for_each_free_mem_pfn_range_in_zone()) because free pages in the\r
+deferred range will be initialized and released as part of the deferred\r
+init process. memblock_free_pages() is called by memblock_free_late(),\r
+which is used to free reserved ranges after memblock_free_all() has\r
+run. All pages in reserved ranges have been initialized at that point,\r
+and accordingly, those pages are not touched by the deferred init\r
+process. This means that currently, if the pages that\r
+memblock_free_late() intends to release are in the deferred range, they\r
+will never be released to the buddy allocator. They will forever be\r
+reserved.\r
+\r
+In addition, memblock_free_pages() calls kmsan_memblock_free_pages(),\r
+which is also correct for free pages but is not correct for reserved\r
+pages. KMSAN metadata for reserved pages is initialized by\r
+kmsan_init_shadow(), which runs shortly before memblock_free_all().\r
+\r
+For both of these reasons, memblock_free_pages() should only be called\r
+for free pages, and memblock_free_late() should call __free_pages_core()\r
+directly instead.\r
+\r
+One case where this issue can occur in the wild is EFI boot on\r
+x86_64. The x86 EFI code reserves all EFI boot services memory ranges\r
+via memblock_reserve() and frees them later via memblock_free_late()\r
+(efi_reserve_boot_services() and efi_free_boot_services(),\r
+respectively). If any of those ranges happen to fall within the deferred\r
+init range, the pages will not be released and that memory will be\r
+unavailable.\r
+\r
+For example, on an Amazon EC2 t3.micro VM (1 GB) booting via EFI:\r
+\r
+v6.2-rc2:\r
+  # grep -E 'Node|spanned|present|managed' /proc/zoneinfo\r
+  Node 0, zone      DMA\r
+          spanned  4095\r
+          present  3999\r
+          managed  3840\r
+  Node 0, zone    DMA32\r
+          spanned  246652\r
+          present  245868\r
+          managed  178867\r
+\r
+v6.2-rc2 + patch:\r
+  # grep -E 'Node|spanned|present|managed' /proc/zoneinfo\r
+  Node 0, zone      DMA\r
+          spanned  4095\r
+          present  3999\r
+          managed  3840\r
+  Node 0, zone    DMA32\r
+          spanned  246652\r
+          present  245868\r
+          managed  222816\r
+\r
+Fixes: 3a80a7fa7989 ("mm: meminit: initialise a subset of struct pages if CONFIG_DEFERRED_STRUCT_PAGE_INIT is set")\r
+Signed-off-by: Aaron Thompson <dev@aaront.org>\r
+---\r
+ mm/memblock.c                     | 8 +++++++-\r
+ 2 files changed, 11 insertions(+), 1 deletion(-)\r
+\r
+diff --git a/mm/memblock.c b/mm/memblock.c\r
+index 511d4783dcf1..fc3d8fbd2060 100644\r
+--- a/mm/memblock.c\r
++++ b/mm/memblock.c\r
+@@ -1640,7 +1640,13 @@ void __init memblock_free_late(phys_addr_t base, phys_addr_t size)\r
+ 	end = PFN_DOWN(base + size);\r
+ \r
+ 	for (; cursor < end; cursor++) {\r
+-		memblock_free_pages(pfn_to_page(cursor), cursor, 0);\r
++		/*\r
++		 * Reserved pages are always initialized by the end of\r
++		 * memblock_free_all() (by memmap_init() and, if deferred\r
++		 * initialization is enabled, memmap_init_reserved_pages()), so\r
++		 * these pages can be released directly to the buddy allocator.\r
++		 */\r
++		__free_pages_core(pfn_to_page(cursor), 0);\r
+ 		totalram_pages_inc();\r
+ 	}\r
+ }\r
+-- \r
 2.30.2
\ No newline at end of file
diff --git a/a/content_digest b/N1/content_digest
index 5e04e43..a23a996 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -5,38 +5,21 @@
   "ref\00020230105041650.1485-1-dev\@aaront.org\0"
 ]
 [
-  "From\0Aaron Thompson <dev\@aaront.org>\0"
+  "From\0Xu Yu <xuyu\@linux.alibaba.com>\0"
 ]
 [
   "Subject\0[PATCH v2 1/1] mm: Always release pages to the buddy allocator in memblock_free_late().\0"
 ]
 [
-  "Date\0Thu, 5 Jan 2023 04:17:31 +0000\0"
+  "Date\0Mon, 30 Jan 2023 15:40:34 +0800\0"
 ]
 [
-  "To\0Mike Rapoport <rppt\@kernel.org>",
+  "To\0baolin.wang\@linux.alibaba.com",
+  " Mike Rapoport <rppt\@kernel.org>",
   " linux-mm\@kvack.org\0"
 ]
 [
-  "Cc\0H. Peter Anvin <hpa\@zytor.com>",
-  " Alexander Potapenko <glider\@google.com>",
-  " Andrew Morton <akpm\@linux-foundation.org>",
-  " Andy Shevchenko <andy\@infradead.org>",
-  " Ard Biesheuvel <ardb\@kernel.org>",
-  " Borislav Petkov <bp\@alien8.de>",
-  " Darren Hart <dvhart\@infradead.org>",
-  " Dave Hansen <dave.hansen\@linux.intel.com>",
-  " David Rientjes <rientjes\@google.com>",
-  " Dmitry Vyukov <dvyukov\@google.com>",
-  " Ingo Molnar <mingo\@redhat.com>",
-  " Marco Elver <elver\@google.com>",
-  " Thomas Gleixner <tglx\@linutronix.de>",
-  " kasan-dev\@googlegroups.com",
-  " linux-efi\@vger.kernel.org",
-  " linux-kernel\@vger.kernel.org",
-  " platform-driver-x86\@vger.kernel.org",
-  " x86\@kernel.org",
-  " Aaron Thompson <dev\@aaront.org>\0"
+  "Cc\0alikernel-developer\@linux.alibaba.com\0"
 ]
 [
   "\0000:1\0"
@@ -45,104 +28,90 @@
   "b\0"
 ]
 [
-  "If CONFIG_DEFERRED_STRUCT_PAGE_INIT is enabled, memblock_free_pages()\n",
-  "only releases pages to the buddy allocator if they are not in the\n",
-  "deferred range. This is correct for free pages (as defined by\n",
-  "for_each_free_mem_pfn_range_in_zone()) because free pages in the\n",
-  "deferred range will be initialized and released as part of the deferred\n",
-  "init process. memblock_free_pages() is called by memblock_free_late(),\n",
-  "which is used to free reserved ranges after memblock_free_all() has\n",
-  "run. All pages in reserved ranges have been initialized at that point,\n",
-  "and accordingly, those pages are not touched by the deferred init\n",
-  "process. This means that currently, if the pages that\n",
-  "memblock_free_late() intends to release are in the deferred range, they\n",
-  "will never be released to the buddy allocator. They will forever be\n",
-  "reserved.\n",
+  "From: Aaron Thompson <dev\@aaront.org>\r\n",
   "\n",
-  "In addition, memblock_free_pages() calls kmsan_memblock_free_pages(),\n",
-  "which is also correct for free pages but is not correct for reserved\n",
-  "pages. KMSAN metadata for reserved pages is initialized by\n",
-  "kmsan_init_shadow(), which runs shortly before memblock_free_all().\n",
-  "\n",
-  "For both of these reasons, memblock_free_pages() should only be called\n",
-  "for free pages, and memblock_free_late() should call __free_pages_core()\n",
-  "directly instead.\n",
-  "\n",
-  "One case where this issue can occur in the wild is EFI boot on\n",
-  "x86_64. The x86 EFI code reserves all EFI boot services memory ranges\n",
-  "via memblock_reserve() and frees them later via memblock_free_late()\n",
-  "(efi_reserve_boot_services() and efi_free_boot_services(),\n",
-  "respectively). If any of those ranges happen to fall within the deferred\n",
-  "init range, the pages will not be released and that memory will be\n",
-  "unavailable.\n",
-  "\n",
-  "For example, on an Amazon EC2 t3.micro VM (1 GB) booting via EFI:\n",
-  "\n",
-  "v6.2-rc2:\n",
-  "  # grep -E 'Node|spanned|present|managed' /proc/zoneinfo\n",
-  "  Node 0, zone      DMA\n",
-  "          spanned  4095\n",
-  "          present  3999\n",
-  "          managed  3840\n",
-  "  Node 0, zone    DMA32\n",
-  "          spanned  246652\n",
-  "          present  245868\n",
-  "          managed  178867\n",
-  "\n",
-  "v6.2-rc2 + patch:\n",
-  "  # grep -E 'Node|spanned|present|managed' /proc/zoneinfo\n",
-  "  Node 0, zone      DMA\n",
-  "          spanned  4095\n",
-  "          present  3999\n",
-  "          managed  3840\n",
-  "  Node 0, zone    DMA32\n",
-  "          spanned  246652\n",
-  "          present  245868\n",
-  "          managed  222816\n",
-  "\n",
-  "Fixes: 3a80a7fa7989 (\"mm: meminit: initialise a subset of struct pages if CONFIG_DEFERRED_STRUCT_PAGE_INIT is set\")\n",
-  "Signed-off-by: Aaron Thompson <dev\@aaront.org>\n",
-  "---\n",
-  " mm/memblock.c                     | 8 +++++++-\n",
-  " tools/testing/memblock/internal.h | 4 ++++\n",
-  " 2 files changed, 11 insertions(+), 1 deletion(-)\n",
-  "\n",
-  "diff --git a/mm/memblock.c b/mm/memblock.c\n",
-  "index 511d4783dcf1..fc3d8fbd2060 100644\n",
-  "--- a/mm/memblock.c\n",
-  "+++ b/mm/memblock.c\n",
-  "\@\@ -1640,7 +1640,13 \@\@ void __init memblock_free_late(phys_addr_t base, phys_addr_t size)\n",
-  " \tend = PFN_DOWN(base + size);\n",
-  " \n",
-  " \tfor (; cursor < end; cursor++) {\n",
-  "-\t\tmemblock_free_pages(pfn_to_page(cursor), cursor, 0);\n",
-  "+\t\t/*\n",
-  "+\t\t * Reserved pages are always initialized by the end of\n",
-  "+\t\t * memblock_free_all() (by memmap_init() and, if deferred\n",
-  "+\t\t * initialization is enabled, memmap_init_reserved_pages()), so\n",
-  "+\t\t * these pages can be released directly to the buddy allocator.\n",
-  "+\t\t */\n",
-  "+\t\t__free_pages_core(pfn_to_page(cursor), 0);\n",
-  " \t\ttotalram_pages_inc();\n",
-  " \t}\n",
-  " }\n",
-  "diff --git a/tools/testing/memblock/internal.h b/tools/testing/memblock/internal.h\n",
-  "index fdb7f5db7308..85973e55489e 100644\n",
-  "--- a/tools/testing/memblock/internal.h\n",
-  "+++ b/tools/testing/memblock/internal.h\n",
-  "\@\@ -15,6 +15,10 \@\@ bool mirrored_kernelcore = false;\n",
-  " \n",
-  " struct page {};\n",
-  " \n",
-  "+void __free_pages_core(struct page *page, unsigned int order)\n",
-  "+{\n",
-  "+}\n",
-  "+\n",
-  " void memblock_free_pages(struct page *page, unsigned long pfn,\n",
-  " \t\t\t unsigned int order)\n",
-  " {\n",
-  "-- \n",
+  "If CONFIG_DEFERRED_STRUCT_PAGE_INIT is enabled, memblock_free_pages()\r\n",
+  "only releases pages to the buddy allocator if they are not in the\r\n",
+  "deferred range. This is correct for free pages (as defined by\r\n",
+  "for_each_free_mem_pfn_range_in_zone()) because free pages in the\r\n",
+  "deferred range will be initialized and released as part of the deferred\r\n",
+  "init process. memblock_free_pages() is called by memblock_free_late(),\r\n",
+  "which is used to free reserved ranges after memblock_free_all() has\r\n",
+  "run. All pages in reserved ranges have been initialized at that point,\r\n",
+  "and accordingly, those pages are not touched by the deferred init\r\n",
+  "process. This means that currently, if the pages that\r\n",
+  "memblock_free_late() intends to release are in the deferred range, they\r\n",
+  "will never be released to the buddy allocator. They will forever be\r\n",
+  "reserved.\r\n",
+  "\r\n",
+  "In addition, memblock_free_pages() calls kmsan_memblock_free_pages(),\r\n",
+  "which is also correct for free pages but is not correct for reserved\r\n",
+  "pages. KMSAN metadata for reserved pages is initialized by\r\n",
+  "kmsan_init_shadow(), which runs shortly before memblock_free_all().\r\n",
+  "\r\n",
+  "For both of these reasons, memblock_free_pages() should only be called\r\n",
+  "for free pages, and memblock_free_late() should call __free_pages_core()\r\n",
+  "directly instead.\r\n",
+  "\r\n",
+  "One case where this issue can occur in the wild is EFI boot on\r\n",
+  "x86_64. The x86 EFI code reserves all EFI boot services memory ranges\r\n",
+  "via memblock_reserve() and frees them later via memblock_free_late()\r\n",
+  "(efi_reserve_boot_services() and efi_free_boot_services(),\r\n",
+  "respectively). If any of those ranges happen to fall within the deferred\r\n",
+  "init range, the pages will not be released and that memory will be\r\n",
+  "unavailable.\r\n",
+  "\r\n",
+  "For example, on an Amazon EC2 t3.micro VM (1 GB) booting via EFI:\r\n",
+  "\r\n",
+  "v6.2-rc2:\r\n",
+  "  # grep -E 'Node|spanned|present|managed' /proc/zoneinfo\r\n",
+  "  Node 0, zone      DMA\r\n",
+  "          spanned  4095\r\n",
+  "          present  3999\r\n",
+  "          managed  3840\r\n",
+  "  Node 0, zone    DMA32\r\n",
+  "          spanned  246652\r\n",
+  "          present  245868\r\n",
+  "          managed  178867\r\n",
+  "\r\n",
+  "v6.2-rc2 + patch:\r\n",
+  "  # grep -E 'Node|spanned|present|managed' /proc/zoneinfo\r\n",
+  "  Node 0, zone      DMA\r\n",
+  "          spanned  4095\r\n",
+  "          present  3999\r\n",
+  "          managed  3840\r\n",
+  "  Node 0, zone    DMA32\r\n",
+  "          spanned  246652\r\n",
+  "          present  245868\r\n",
+  "          managed  222816\r\n",
+  "\r\n",
+  "Fixes: 3a80a7fa7989 (\"mm: meminit: initialise a subset of struct pages if CONFIG_DEFERRED_STRUCT_PAGE_INIT is set\")\r\n",
+  "Signed-off-by: Aaron Thompson <dev\@aaront.org>\r\n",
+  "---\r\n",
+  " mm/memblock.c                     | 8 +++++++-\r\n",
+  " 2 files changed, 11 insertions(+), 1 deletion(-)\r\n",
+  "\r\n",
+  "diff --git a/mm/memblock.c b/mm/memblock.c\r\n",
+  "index 511d4783dcf1..fc3d8fbd2060 100644\r\n",
+  "--- a/mm/memblock.c\r\n",
+  "+++ b/mm/memblock.c\r\n",
+  "\@\@ -1640,7 +1640,13 \@\@ void __init memblock_free_late(phys_addr_t base, phys_addr_t size)\r\n",
+  " \tend = PFN_DOWN(base + size);\r\n",
+  " \r\n",
+  " \tfor (; cursor < end; cursor++) {\r\n",
+  "-\t\tmemblock_free_pages(pfn_to_page(cursor), cursor, 0);\r\n",
+  "+\t\t/*\r\n",
+  "+\t\t * Reserved pages are always initialized by the end of\r\n",
+  "+\t\t * memblock_free_all() (by memmap_init() and, if deferred\r\n",
+  "+\t\t * initialization is enabled, memmap_init_reserved_pages()), so\r\n",
+  "+\t\t * these pages can be released directly to the buddy allocator.\r\n",
+  "+\t\t */\r\n",
+  "+\t\t__free_pages_core(pfn_to_page(cursor), 0);\r\n",
+  " \t\ttotalram_pages_inc();\r\n",
+  " \t}\r\n",
+  " }\r\n",
+  "-- \r\n",
   "2.30.2"
 ]
 
-3fef11ead3eb36e428a62229c5822fa16f066ec266873d645d6c3d63f0b37612
+1839eaf5c6acecf63baa18ed76b329dfde4a7b5ae767e2f36c57ac8e050b089b

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.