Thread (33 messages) 33 messages, 6 authors, 2020-05-26

Re: [PATCH v2 17/20] mm: free_area_init: allow defining max_zone_pfn in descending order

From: Vineet Gupta <hidden>
Date: 2020-05-05 17:27:45
Also in: linux-alpha, linux-arch, linux-mm, linux-riscv, linux-um

On 5/5/20 6:18 AM, Guenter Roeck wrote:
On 5/4/20 8:39 AM, Mike Rapoport wrote:
quoted
On Sun, May 03, 2020 at 11:43:00AM -0700, Guenter Roeck wrote:
quoted
On Sun, May 03, 2020 at 10:41:38AM -0700, Guenter Roeck wrote:
quoted
Hi,

On Wed, Apr 29, 2020 at 03:11:23PM +0300, Mike Rapoport wrote:
quoted
From: Mike Rapoport <redacted>

Some architectures (e.g. ARC) have the ZONE_HIGHMEM zone below the
ZONE_NORMAL. Allowing free_area_init() parse max_zone_pfn array even it is
sorted in descending order allows using free_area_init() on such
architectures.

Add top -> down traversal of max_zone_pfn array in free_area_init() and use
the latter in ARC node/zone initialization.

Signed-off-by: Mike Rapoport <redacted>
This patch causes my microblazeel qemu boot test in linux-next to fail.
Reverting it fixes the problem.
The same problem is seen with s390 emulations.
Yeah, this patch breaks some others as well :(

My assumption that max_zone_pfn defines architectural limit for maximal
PFN that can belong to a zone was over-optimistic. Several arches
actually do that, but others do

	max_zone_pfn[ZONE_DMA] = MAX_DMA_PFN;
	max_zone_pfn[ZONE_NORMAL] = max_pfn;

where MAX_DMA_PFN is build-time constrain and max_pfn is run time limit
for the current system.

So, when max_pfn is lower than MAX_DMA_PFN, the free_init_area() will
consider max_zone_pfn as descending and will wrongly calculate zone
extents.

That said, instead of trying to create a generic way to special case
ARC, I suggest to simply use the below patch instead.
As a reminder, I reported the problem against s390 and microblazeel
(interestingly enough, microblaze (big endian) works), not against arc.
Understood and my comment was to point to any other problems in future.

Thx,
-Vineet
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help