mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	mm/memblock.c: use CONFIG_HAVE_MEMBLOCK_NODE_MAP to protect movablecore_map in memblock_overlaps_region().
The definition of struct movablecore_map is protected by CONFIG_HAVE_MEMBLOCK_NODE_MAP but its use in memblock_overlaps_region() is not. So add CONFIG_HAVE_MEMBLOCK_NODE_MAP to protect the use of movablecore_map in memblock_overlaps_region(). Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com> Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									01a178a94e
								
							
						
					
					
						commit
						f7210e6c4a
					
				
					 2 changed files with 35 additions and 0 deletions
				
			
		| 
						 | 
					@ -61,6 +61,7 @@ int memblock_reserve(phys_addr_t base, phys_addr_t size);
 | 
				
			||||||
void memblock_trim_memory(phys_addr_t align);
 | 
					void memblock_trim_memory(phys_addr_t align);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
 | 
					#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn,
 | 
					void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn,
 | 
				
			||||||
			  unsigned long *out_end_pfn, int *out_nid);
 | 
								  unsigned long *out_end_pfn, int *out_nid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,9 +92,13 @@ static long __init_memblock memblock_overlaps_region(struct memblock_type *type,
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Find @size free area aligned to @align in the specified range and node.
 | 
					 * Find @size free area aligned to @align in the specified range and node.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 | 
					 * If we have CONFIG_HAVE_MEMBLOCK_NODE_MAP defined, we need to check if the
 | 
				
			||||||
 | 
					 * memory we found if not in hotpluggable ranges.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 * RETURNS:
 | 
					 * RETURNS:
 | 
				
			||||||
 * Found address on success, %0 on failure.
 | 
					 * Found address on success, %0 on failure.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
 | 
				
			||||||
phys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t start,
 | 
					phys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t start,
 | 
				
			||||||
					phys_addr_t end, phys_addr_t size,
 | 
										phys_addr_t end, phys_addr_t size,
 | 
				
			||||||
					phys_addr_t align, int nid)
 | 
										phys_addr_t align, int nid)
 | 
				
			||||||
| 
						 | 
					@ -139,6 +143,36 @@ phys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t start,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					#else /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */
 | 
				
			||||||
 | 
					phys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t start,
 | 
				
			||||||
 | 
										phys_addr_t end, phys_addr_t size,
 | 
				
			||||||
 | 
										phys_addr_t align, int nid)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						phys_addr_t this_start, this_end, cand;
 | 
				
			||||||
 | 
						u64 i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* pump up @end */
 | 
				
			||||||
 | 
						if (end == MEMBLOCK_ALLOC_ACCESSIBLE)
 | 
				
			||||||
 | 
							end = memblock.current_limit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* avoid allocating the first page */
 | 
				
			||||||
 | 
						start = max_t(phys_addr_t, start, PAGE_SIZE);
 | 
				
			||||||
 | 
						end = max(start, end);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for_each_free_mem_range_reverse(i, nid, &this_start, &this_end, NULL) {
 | 
				
			||||||
 | 
							this_start = clamp(this_start, start, end);
 | 
				
			||||||
 | 
							this_end = clamp(this_end, start, end);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (this_end < size)
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							cand = round_down(this_end - size, align);
 | 
				
			||||||
 | 
							if (cand >= this_start)
 | 
				
			||||||
 | 
								return cand;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * memblock_find_in_range - find free area in given range
 | 
					 * memblock_find_in_range - find free area in given range
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue