New issue
Advanced search Search tips

Issue 891178 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Oct 8
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 3
Type: Bug

Blocking:
issue 890335



Sign in to add a comment

The high zone managed page count is wrong on nyan boards

Project Member Reported by vovoy@chromium.org, Oct 2

Issue description

E.g. On nyan_big with 4GB RAM.
# cat /proc/zoneinfo
...
Node 0, zone  HighMem
  pages free     578616
        min      128
        low      2106
        high     4085
        scanned  0
        spanned  854016
        present  845802
        managed  1691604

The managed field is wrong. There are ~6607 MB of managed pages, larger than physical RAM. Wrong managed field would confuse the memory reclaim and the low memory notification mechanisms.

The wrong managed field is introduced by patch "ARM: Speed up page list initialization during boot" (https://crrev.com/c/190381)

It can be fixed by applying upstream patch "mm: accurately calculate zone->managed_pages for highmem zones" (https://github.com/torvalds/linux/commit/7b4b2a0d6c8500350784beb83a6a55e60ea3bea3)
 
Cc: chirantan@chromium.org
More explanation about how "mm: accurately calculate zone->managed_pages for highmem zones" fixes the bug:
https://docs.google.com/document/d/1SGOHptN09gMD6P0bJwzSW0VtPgHCnjCAGH0G8XH0pJU/edit?usp=sharing
Project Member

Comment 3 by bugdroid1@chromium.org, Oct 3

Labels: merge-merged-chromeos-3.10
The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/third_party/kernel/+/719e863357ccbb233d91b17853a5a746268c3612

commit 719e863357ccbb233d91b17853a5a746268c3612
Author: Jiang Liu <liuj97@gmail.com>
Date: Wed Oct 03 13:51:02 2018

UPSTREAM: mm: accurately calculate zone->managed_pages for highmem zones

Commit "mm: introduce new field 'managed_pages' to struct zone" assumes
that all highmem pages will be freed into the buddy system by function
mem_init().  But that's not always true, some architectures may reserve
some highmem pages during boot.  For example PPC may allocate highmem
pages for giagant HugeTLB pages, and several architectures have code to
check PageReserved flag to exclude highmem pages allocated during boot
when freeing highmem pages into the buddy system.

So treat highmem pages in the same way as normal pages, that is to:
1) reset zone->managed_pages to zero in mem_init().
2) recalculate managed_pages when freeing pages into the buddy system.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Joonsoo Kim <js1304@gmail.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: <sworddragon2@aol.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Jianguo Wu <wujianguo@huawei.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Michel Lespinasse <walken@google.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Tang Chen <tangchen@cn.fujitsu.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Wen Congyang <wency@cn.fujitsu.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit 7b4b2a0d6c8500350784beb83a6a55e60ea3bea3)
Signed-off-by: Kuo-Hsin Yang <vovoy@chromium.org>

BUG= chromium:891178 
TEST=boot and check /proc/zoneinfo
Change-Id: I4ba7e6d033514b5f854835490e9c44ed47c4adda
Reviewed-on: https://chromium-review.googlesource.com/1256642
Commit-Ready: Vovo Yang <vovoy@chromium.org>
Tested-by: Vovo Yang <vovoy@chromium.org>
Reviewed-by: Guenter Roeck <groeck@chromium.org>
Reviewed-by: Sonny Rao <sonnyrao@chromium.org>

[modify] https://crrev.com/719e863357ccbb233d91b17853a5a746268c3612/mm/nobootmem.c
[modify] https://crrev.com/719e863357ccbb233d91b17853a5a746268c3612/arch/metag/mm/init.c
[modify] https://crrev.com/719e863357ccbb233d91b17853a5a746268c3612/mm/bootmem.c
[modify] https://crrev.com/719e863357ccbb233d91b17853a5a746268c3612/arch/x86/mm/highmem_32.c
[modify] https://crrev.com/719e863357ccbb233d91b17853a5a746268c3612/mm/page_alloc.c
[modify] https://crrev.com/719e863357ccbb233d91b17853a5a746268c3612/include/linux/bootmem.h

Status: Fixed (was: Started)

Sign in to add a comment