mm: factor out next_present_section_nr()
Let's move it to the header and use the shorter variant from mm/page_alloc.c (the original one will also check "__highest_present_section_nr + 1", which is not necessary). While at it, make the section_nr in next_pfn() const. In next_pfn(), we now return section_nr_to_pfn(-1) instead of -1 once we exceed __highest_present_section_nr, which doesn't make a difference in the caller as it is big enough (>= all sane end_pfn). Link: http://lkml.kernel.org/r/20200113144035.10848-3-david@redhat.com Signed-off-by: David Hildenbrand <david@redhat.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Baoquan He <bhe@redhat.com> Cc: Dan Williams <dan.j.williams@intel.com> Cc: "Jin, Zhi" <zhi.jin@intel.com> Cc: "Kirill A. Shutemov" <kirill@shutemov.name> Cc: Mel Gorman <mgorman@suse.de> Cc: Michal Hocko <mhocko@kernel.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: Pavel Tatashin <pasha.tatashin@oracle.com> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
948c436e46
commit
4c6058814e
|
@ -1379,6 +1379,16 @@ static inline int pfn_present(unsigned long pfn)
|
|||
return present_section(__nr_to_section(pfn_to_section_nr(pfn)));
|
||||
}
|
||||
|
||||
static inline unsigned long next_present_section_nr(unsigned long section_nr)
|
||||
{
|
||||
while (++section_nr <= __highest_present_section_nr) {
|
||||
if (present_section_nr(section_nr))
|
||||
return section_nr;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* These are _only_ used during initialisation, therefore they
|
||||
* can use __initdata ... They could have names to indicate
|
||||
|
|
|
@ -5852,18 +5852,11 @@ overlap_memmap_init(unsigned long zone, unsigned long *pfn)
|
|||
/* Skip PFNs that belong to non-present sections */
|
||||
static inline __meminit unsigned long next_pfn(unsigned long pfn)
|
||||
{
|
||||
unsigned long section_nr;
|
||||
const unsigned long section_nr = pfn_to_section_nr(++pfn);
|
||||
|
||||
section_nr = pfn_to_section_nr(++pfn);
|
||||
if (present_section_nr(section_nr))
|
||||
return pfn;
|
||||
|
||||
while (++section_nr <= __highest_present_section_nr) {
|
||||
if (present_section_nr(section_nr))
|
||||
return section_nr_to_pfn(section_nr);
|
||||
}
|
||||
|
||||
return -1;
|
||||
return section_nr_to_pfn(next_present_section_nr(section_nr));
|
||||
}
|
||||
#else
|
||||
static inline __meminit unsigned long next_pfn(unsigned long pfn)
|
||||
|
|
10
mm/sparse.c
10
mm/sparse.c
|
@ -198,16 +198,6 @@ static void section_mark_present(struct mem_section *ms)
|
|||
ms->section_mem_map |= SECTION_MARKED_PRESENT;
|
||||
}
|
||||
|
||||
static inline unsigned long next_present_section_nr(unsigned long section_nr)
|
||||
{
|
||||
do {
|
||||
section_nr++;
|
||||
if (present_section_nr(section_nr))
|
||||
return section_nr;
|
||||
} while ((section_nr <= __highest_present_section_nr));
|
||||
|
||||
return -1;
|
||||
}
|
||||
#define for_each_present_section_nr(start, section_nr) \
|
||||
for (section_nr = next_present_section_nr(start-1); \
|
||||
((section_nr != -1) && \
|
||||
|
|
Loading…
Reference in New Issue
Block a user