Re: mmotm 2018-02-21-14-48 uploaded (mm/page_alloc.c on UML)

From: Michal Hocko
Date: Thu Feb 22 2018 - 02:20:59 EST


On Wed 21-02-18 15:58:41, Randy Dunlap wrote:
> On 02/21/2018 02:48 PM, akpm@xxxxxxxxxxxxxxxxxxxx wrote:
> > The mm-of-the-moment snapshot 2018-02-21-14-48 has been uploaded to
> >
> > http://www.ozlabs.org/~akpm/mmotm/
> >
> > mmotm-readme.txt says
> >
> > README for mm-of-the-moment:
> >
> > http://www.ozlabs.org/~akpm/mmotm/
> >
> > This is a snapshot of my -mm patch queue. Uploaded at random hopefully
> > more than once a week.
> >
> > You will need quilt to apply these patches to the latest Linus release (4.x
> > or 4.x-rcY). The series file is in broken-out.tar.gz and is duplicated in
> > http://ozlabs.org/~akpm/mmotm/series
> >
> > The file broken-out.tar.gz contains two datestamp files: .DATE and
> > .DATE-yyyy-mm-dd-hh-mm-ss. Both contain the string yyyy-mm-dd-hh-mm-ss,
> > followed by the base kernel version against which this patch series is to
> > be applied.
>
> um (or uml) defconfig on i386 and/or x86_64:
>
> ../mm/page_alloc.c: In function 'memmap_init_zone':
> ../mm/page_alloc.c:5450:5: error: implicit declaration of function 'memblock_next_valid_pfn' [-Werror=implicit-function-declaration]
> pfn = memblock_next_valid_pfn(pfn, end_pfn) - 1;
> ^
>
>
> probably (?):
> From: Eugeniu Rosca <erosca@xxxxxxxxxxxxxx>
> Subject: mm: page_alloc: skip over regions of invalid pfns on UMA

Yes. Steven has already reported the same [1]. There are two possible
ways around this. Either provide and empty stub or use ifdef around
memblock_next_valid_pfn. I would use the later because it is less
confusing. We really do not want memblock_next_valid_pfn to be used
outside of memblock aware code.

[1] http://lkml.kernel.org/r/20180222143057.3a1b3746@xxxxxxxxxxxxxxxx


diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 4334d3a9c6a2..2836bc9e0999 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5446,8 +5446,9 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
* end_pfn), such that we hit a valid pfn (or end_pfn)
* on our next iteration of the loop.
*/
- if (IS_ENABLED(CONFIG_HAVE_MEMBLOCK))
- pfn = memblock_next_valid_pfn(pfn, end_pfn) - 1;
+#ifdef CONFIG_HAVE_MEMBLOCK
+ pfn = memblock_next_valid_pfn(pfn, end_pfn) - 1;
+#endif
continue;
}
if (!early_pfn_in_nid(pfn, nid))
--
Michal Hocko
SUSE Labs