mirror of
https://github.com/torvalds/linux.git
synced 2025-11-30 23:16:01 +07:00
memblock: drop for_each_free_mem_pfn_range_in_zone_from()
for_each_free_mem_pfn_range_in_zone_from() and its "backend" implementation __next_mem_pfn_range_in_zone() were only used by deferred initialization of the memory map. Remove them as they are not used anymore. Reviewed-by: Wei Yang <richard.weiyang@gmail.com> Reviewed-by: David Hildenbrand <david@redhat.com> Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
This commit is contained in:
@@ -294,7 +294,6 @@ ForEachMacros:
|
|||||||
- 'for_each_fib6_node_rt_rcu'
|
- 'for_each_fib6_node_rt_rcu'
|
||||||
- 'for_each_fib6_walker_rt'
|
- 'for_each_fib6_walker_rt'
|
||||||
- 'for_each_file_lock'
|
- 'for_each_file_lock'
|
||||||
- 'for_each_free_mem_pfn_range_in_zone_from'
|
|
||||||
- 'for_each_free_mem_range'
|
- 'for_each_free_mem_range'
|
||||||
- 'for_each_free_mem_range_reverse'
|
- 'for_each_free_mem_range_reverse'
|
||||||
- 'for_each_func_rsrc'
|
- 'for_each_func_rsrc'
|
||||||
|
|||||||
@@ -324,28 +324,6 @@ void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn,
|
|||||||
for (i = -1, __next_mem_pfn_range(&i, nid, p_start, p_end, p_nid); \
|
for (i = -1, __next_mem_pfn_range(&i, nid, p_start, p_end, p_nid); \
|
||||||
i >= 0; __next_mem_pfn_range(&i, nid, p_start, p_end, p_nid))
|
i >= 0; __next_mem_pfn_range(&i, nid, p_start, p_end, p_nid))
|
||||||
|
|
||||||
#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
|
|
||||||
void __next_mem_pfn_range_in_zone(u64 *idx, struct zone *zone,
|
|
||||||
unsigned long *out_spfn,
|
|
||||||
unsigned long *out_epfn);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* for_each_free_mem_pfn_range_in_zone_from - iterate through zone specific
|
|
||||||
* free memblock areas from a given point
|
|
||||||
* @i: u64 used as loop variable
|
|
||||||
* @zone: zone in which all of the memory blocks reside
|
|
||||||
* @p_start: ptr to phys_addr_t for start address of the range, can be %NULL
|
|
||||||
* @p_end: ptr to phys_addr_t for end address of the range, can be %NULL
|
|
||||||
*
|
|
||||||
* Walks over free (memory && !reserved) areas of memblock in a specific
|
|
||||||
* zone, continuing from current position. Available as soon as memblock is
|
|
||||||
* initialized.
|
|
||||||
*/
|
|
||||||
#define for_each_free_mem_pfn_range_in_zone_from(i, zone, p_start, p_end) \
|
|
||||||
for (; i != U64_MAX; \
|
|
||||||
__next_mem_pfn_range_in_zone(&i, zone, p_start, p_end))
|
|
||||||
|
|
||||||
#endif /* CONFIG_DEFERRED_STRUCT_PAGE_INIT */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* for_each_free_mem_range - iterate through free memblock areas
|
* for_each_free_mem_range - iterate through free memblock areas
|
||||||
|
|||||||
@@ -1445,70 +1445,6 @@ int __init_memblock memblock_set_node(phys_addr_t base, phys_addr_t size,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
|
|
||||||
/**
|
|
||||||
* __next_mem_pfn_range_in_zone - iterator for for_each_*_range_in_zone()
|
|
||||||
*
|
|
||||||
* @idx: pointer to u64 loop variable
|
|
||||||
* @zone: zone in which all of the memory blocks reside
|
|
||||||
* @out_spfn: ptr to ulong for start pfn of the range, can be %NULL
|
|
||||||
* @out_epfn: ptr to ulong for end pfn of the range, can be %NULL
|
|
||||||
*
|
|
||||||
* This function is meant to be a zone/pfn specific wrapper for the
|
|
||||||
* for_each_mem_range type iterators. Specifically they are used in the
|
|
||||||
* deferred memory init routines and as such we were duplicating much of
|
|
||||||
* this logic throughout the code. So instead of having it in multiple
|
|
||||||
* locations it seemed like it would make more sense to centralize this to
|
|
||||||
* one new iterator that does everything they need.
|
|
||||||
*/
|
|
||||||
void __init_memblock
|
|
||||||
__next_mem_pfn_range_in_zone(u64 *idx, struct zone *zone,
|
|
||||||
unsigned long *out_spfn, unsigned long *out_epfn)
|
|
||||||
{
|
|
||||||
int zone_nid = zone_to_nid(zone);
|
|
||||||
phys_addr_t spa, epa;
|
|
||||||
|
|
||||||
__next_mem_range(idx, zone_nid, MEMBLOCK_NONE,
|
|
||||||
&memblock.memory, &memblock.reserved,
|
|
||||||
&spa, &epa, NULL);
|
|
||||||
|
|
||||||
while (*idx != U64_MAX) {
|
|
||||||
unsigned long epfn = PFN_DOWN(epa);
|
|
||||||
unsigned long spfn = PFN_UP(spa);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Verify the end is at least past the start of the zone and
|
|
||||||
* that we have at least one PFN to initialize.
|
|
||||||
*/
|
|
||||||
if (zone->zone_start_pfn < epfn && spfn < epfn) {
|
|
||||||
/* if we went too far just stop searching */
|
|
||||||
if (zone_end_pfn(zone) <= spfn) {
|
|
||||||
*idx = U64_MAX;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (out_spfn)
|
|
||||||
*out_spfn = max(zone->zone_start_pfn, spfn);
|
|
||||||
if (out_epfn)
|
|
||||||
*out_epfn = min(zone_end_pfn(zone), epfn);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
__next_mem_range(idx, zone_nid, MEMBLOCK_NONE,
|
|
||||||
&memblock.memory, &memblock.reserved,
|
|
||||||
&spa, &epa, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* signal end of iteration */
|
|
||||||
if (out_spfn)
|
|
||||||
*out_spfn = ULONG_MAX;
|
|
||||||
if (out_epfn)
|
|
||||||
*out_epfn = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* CONFIG_DEFERRED_STRUCT_PAGE_INIT */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* memblock_alloc_range_nid - allocate boot memory block
|
* memblock_alloc_range_nid - allocate boot memory block
|
||||||
* @size: size of memory block to be allocated in bytes
|
* @size: size of memory block to be allocated in bytes
|
||||||
|
|||||||
Reference in New Issue
Block a user