linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@linux-foundation.org>
To: Pavel Tatashin <pasha.tatashin@oracle.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Matthew Wilcox <willy@infradead.org>,
	Ingo Molnar <mingo@redhat.com>, Jens Axboe <axboe@kernel.dk>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	David Miller <davem@davemloft.net>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Dave Airlie <airlied@gmail.com>, Tejun Heo <tj@kernel.org>,
	Ted Ts'o <tytso@google.com>, Mike Snitzer <snitzer@redhat.com>,
	linux-mm <linux-mm@kvack.org>, Daniel Vacek <neelx@redhat.com>,
	Mel Gorman <mgorman@techsingularity.net>
Subject: Re: Instability in current -git tree
Date: Fri, 13 Jul 2018 20:04:21 -0700	[thread overview]
Message-ID: <CA+55aFy-WcfHqKvdj9N9w56dFXscB7ELNMD8BJbPzRfejzh82w@mail.gmail.com> (raw)
In-Reply-To: <CA+55aFwPAwczHS3XKkEnjY02PaDf2mWrcqx_hket4Ce3nScsSg@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 657 bytes --]

On Fri, Jul 13, 2018 at 7:40 PM Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> Should we perhaps just revert
>
>   124049decbb1 x86/e820: put !E820_TYPE_RAM regions into memblock.reserved
>   f7f99100d8d9 mm: stop zeroing memory during allocation in vmemmap
>
> it still reverts fairly cleanly (there's a trivial conflict with the
> older commit).

This is the revert I'm testing right now..  It seems to be stable for
me (doing that "limited memory, nasty memory hogs" test that I did
before), but I'll keep running this for a while. Even with the memory
limit and the memory hogs, it sometimes took some time to crash.

                  Linus

[-- Attachment #2: patch.diff --]
[-- Type: text/x-patch, Size: 4923 bytes --]

 arch/x86/kernel/e820.c | 15 +++------------
 mm/page_alloc.c        |  1 -
 mm/sparse-vmemmap.c    | 23 ++++++-----------------
 mm/sparse.c            |  6 +++---
 4 files changed, 12 insertions(+), 33 deletions(-)

diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
index c88c23c658c1..d1f25c831447 100644
--- a/arch/x86/kernel/e820.c
+++ b/arch/x86/kernel/e820.c
@@ -1248,7 +1248,6 @@ void __init e820__memblock_setup(void)
 {
 	int i;
 	u64 end;
-	u64 addr = 0;
 
 	/*
 	 * The bootstrap memblock region count maximum is 128 entries
@@ -1265,21 +1264,13 @@ void __init e820__memblock_setup(void)
 		struct e820_entry *entry = &e820_table->entries[i];
 
 		end = entry->addr + entry->size;
-		if (addr < entry->addr)
-			memblock_reserve(addr, entry->addr - addr);
-		addr = end;
 		if (end != (resource_size_t)end)
 			continue;
 
-		/*
-		 * all !E820_TYPE_RAM ranges (including gap ranges) are put
-		 * into memblock.reserved to make sure that struct pages in
-		 * such regions are not left uninitialized after bootup.
-		 */
 		if (entry->type != E820_TYPE_RAM && entry->type != E820_TYPE_RESERVED_KERN)
-			memblock_reserve(entry->addr, entry->size);
-		else
-			memblock_add(entry->addr, entry->size);
+			continue;
+
+		memblock_add(entry->addr, entry->size);
 	}
 
 	/* Throw away partial pages: */
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 1521100f1e63..2fe859726f9a 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1171,7 +1171,6 @@ static void free_one_page(struct zone *zone,
 static void __meminit __init_single_page(struct page *page, unsigned long pfn,
 				unsigned long zone, int nid)
 {
-	mm_zero_struct_page(page);
 	set_page_links(page, zone, nid, pfn);
 	init_page_count(page);
 	page_mapcount_reset(page);
diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
index bd0276d5f66b..c363c60be7d3 100644
--- a/mm/sparse-vmemmap.c
+++ b/mm/sparse-vmemmap.c
@@ -42,7 +42,7 @@ static void * __ref __earlyonly_bootmem_alloc(int node,
 				unsigned long align,
 				unsigned long goal)
 {
-	return memblock_virt_alloc_try_nid_raw(size, align, goal,
+	return memblock_virt_alloc_try_nid(size, align, goal,
 					    BOOTMEM_ALLOC_ACCESSIBLE, node);
 }
 
@@ -53,7 +53,7 @@ void * __meminit vmemmap_alloc_block(unsigned long size, int node)
 {
 	/* If the main allocator is up use that, fallback to bootmem. */
 	if (slab_is_available()) {
-		gfp_t gfp_mask = GFP_KERNEL|__GFP_RETRY_MAYFAIL|__GFP_NOWARN;
+		gfp_t gfp_mask = GFP_KERNEL|__GFP_ZERO|__GFP_RETRY_MAYFAIL|__GFP_NOWARN;
 		int order = get_order(size);
 		static bool warned;
 		struct page *page;
@@ -165,22 +165,11 @@ pte_t * __meminit vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node)
 	return pte;
 }
 
-static void * __meminit vmemmap_alloc_block_zero(unsigned long size, int node)
-{
-	void *p = vmemmap_alloc_block(size, node);
-
-	if (!p)
-		return NULL;
-	memset(p, 0, size);
-
-	return p;
-}
-
 pmd_t * __meminit vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node)
 {
 	pmd_t *pmd = pmd_offset(pud, addr);
 	if (pmd_none(*pmd)) {
-		void *p = vmemmap_alloc_block_zero(PAGE_SIZE, node);
+		void *p = vmemmap_alloc_block(PAGE_SIZE, node);
 		if (!p)
 			return NULL;
 		pmd_populate_kernel(&init_mm, pmd, p);
@@ -192,7 +181,7 @@ pud_t * __meminit vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node)
 {
 	pud_t *pud = pud_offset(p4d, addr);
 	if (pud_none(*pud)) {
-		void *p = vmemmap_alloc_block_zero(PAGE_SIZE, node);
+		void *p = vmemmap_alloc_block(PAGE_SIZE, node);
 		if (!p)
 			return NULL;
 		pud_populate(&init_mm, pud, p);
@@ -204,7 +193,7 @@ p4d_t * __meminit vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node)
 {
 	p4d_t *p4d = p4d_offset(pgd, addr);
 	if (p4d_none(*p4d)) {
-		void *p = vmemmap_alloc_block_zero(PAGE_SIZE, node);
+		void *p = vmemmap_alloc_block(PAGE_SIZE, node);
 		if (!p)
 			return NULL;
 		p4d_populate(&init_mm, p4d, p);
@@ -216,7 +205,7 @@ pgd_t * __meminit vmemmap_pgd_populate(unsigned long addr, int node)
 {
 	pgd_t *pgd = pgd_offset_k(addr);
 	if (pgd_none(*pgd)) {
-		void *p = vmemmap_alloc_block_zero(PAGE_SIZE, node);
+		void *p = vmemmap_alloc_block(PAGE_SIZE, node);
 		if (!p)
 			return NULL;
 		pgd_populate(&init_mm, pgd, p);
diff --git a/mm/sparse.c b/mm/sparse.c
index f13f2723950a..4cc1558fd10c 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -419,9 +419,9 @@ void __init sparse_mem_maps_populate_node(struct page **map_map,
 	unsigned long size = sizeof(struct page) * PAGES_PER_SECTION;
 
 	size = PAGE_ALIGN(size);
-	map = memblock_virt_alloc_try_nid_raw(size * map_count,
-					      PAGE_SIZE, __pa(MAX_DMA_ADDRESS),
-					      BOOTMEM_ALLOC_ACCESSIBLE, nodeid);
+	map = memblock_virt_alloc_try_nid(size * map_count,
+					  PAGE_SIZE, __pa(MAX_DMA_ADDRESS),
+					  BOOTMEM_ALLOC_ACCESSIBLE, nodeid);
 	if (map) {
 		for (pnum = pnum_begin; pnum < pnum_end; pnum++) {
 			if (!present_section_nr(pnum))

  parent reply	other threads:[~2018-07-14  3:04 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CA+55aFyARQV302+mXNYznrOOjzW+yxbcv+=OkD43dG6G1ktoMQ@mail.gmail.com>
     [not found] ` <alpine.DEB.2.21.1807140031440.2644@nanos.tec.linutronix.de>
     [not found]   ` <CA+55aFzBx1haeM2QSFvhaW2t_HVK78Y=bKvsiJmOZztwkZ-y7Q@mail.gmail.com>
     [not found]     ` <CA+55aFzVGa57apuzDMBLgWQQRcm3BNBs1UEg-G_2o7YW1i=o2Q@mail.gmail.com>
     [not found]       ` <CA+55aFy9NJZeqT7h_rAgbKUZLjzfxvDPwneFQracBjVhY53aQQ@mail.gmail.com>
2018-07-13 23:48         ` Andrew Morton
2018-07-13 23:51           ` Linus Torvalds
2018-07-13 23:58             ` Andrew Morton
2018-07-14  0:19               ` Pavel Tatashin
2018-07-14  0:28                 ` Linus Torvalds
2018-07-14  0:46                   ` Pavel Tatashin
2018-07-14  2:40                     ` Linus Torvalds
2018-07-14  3:03                       ` Pavel Tatashin
2018-07-14  3:25                         ` Linus Torvalds
2018-07-14  3:28                           ` Pavel Tatashin
2018-07-14 13:39                           ` Pavel Tatashin
2018-07-14 17:11                             ` Linus Torvalds
2018-07-14 17:29                               ` Linus Torvalds
2018-07-16 12:06                             ` Michal Hocko
2018-07-16 12:09                               ` Pavel Tatashin
2018-07-16 12:29                                 ` Michal Hocko
2018-07-16 13:26                                   ` Pavel Tatashin
2018-07-16 14:12                                     ` Michal Hocko
2018-07-16 13:39                                   ` Oscar Salvador
2018-07-14  3:04                       ` Linus Torvalds [this message]
2018-07-14  0:20             ` Linus Torvalds
2018-07-14  9:28               ` Ard Biesheuvel
2018-07-17  2:59               ` Ard Biesheuvel
2018-07-17  3:14                 ` Ard Biesheuvel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CA+55aFy-WcfHqKvdj9N9w56dFXscB7ELNMD8BJbPzRfejzh82w@mail.gmail.com \
    --to=torvalds@linux-foundation.org \
    --cc=airlied@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=axboe@kernel.dk \
    --cc=davem@davemloft.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@techsingularity.net \
    --cc=mingo@redhat.com \
    --cc=neelx@redhat.com \
    --cc=pasha.tatashin@oracle.com \
    --cc=snitzer@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=tytso@google.com \
    --cc=viro@zeniv.linux.org.uk \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox