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))
next prev 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