diff options
Diffstat (limited to 'include/linux/memblock.h')
| -rw-r--r-- | include/linux/memblock.h | 55 | 
1 files changed, 50 insertions, 5 deletions
diff --git a/include/linux/memblock.h b/include/linux/memblock.h index 77c60e52939d..1ef66360f0b0 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h @@ -19,9 +19,13 @@  #define INIT_MEMBLOCK_REGIONS	128 +/* Definition of memblock flags. */ +#define MEMBLOCK_HOTPLUG	0x1	/* hotpluggable region */ +  struct memblock_region {  	phys_addr_t base;  	phys_addr_t size; +	unsigned long flags;  #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP  	int nid;  #endif @@ -43,15 +47,21 @@ struct memblock {  extern struct memblock memblock;  extern int memblock_debug; +#ifdef CONFIG_MOVABLE_NODE +/* If movable_node boot option specified */ +extern bool movable_node_enabled; +#endif /* CONFIG_MOVABLE_NODE */  #define memblock_dbg(fmt, ...) \  	if (memblock_debug) printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) -phys_addr_t 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 memblock_find_in_range_node(phys_addr_t size, phys_addr_t align, +					    phys_addr_t start, phys_addr_t end, +					    int nid);  phys_addr_t memblock_find_in_range(phys_addr_t start, phys_addr_t end,  				   phys_addr_t size, phys_addr_t align);  phys_addr_t get_allocated_memblock_reserved_regions_info(phys_addr_t *addr); +phys_addr_t get_allocated_memblock_memory_regions_info(phys_addr_t *addr);  void memblock_allow_resize(void);  int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid);  int memblock_add(phys_addr_t base, phys_addr_t size); @@ -59,6 +69,28 @@ int memblock_remove(phys_addr_t base, phys_addr_t size);  int memblock_free(phys_addr_t base, phys_addr_t size);  int memblock_reserve(phys_addr_t base, phys_addr_t size);  void memblock_trim_memory(phys_addr_t align); +int memblock_mark_hotplug(phys_addr_t base, phys_addr_t size); +int memblock_clear_hotplug(phys_addr_t base, phys_addr_t size); +#ifdef CONFIG_MOVABLE_NODE +static inline bool memblock_is_hotpluggable(struct memblock_region *m) +{ +	return m->flags & MEMBLOCK_HOTPLUG; +} + +static inline bool movable_node_is_enabled(void) +{ +	return movable_node_enabled; +} +#else +static inline bool memblock_is_hotpluggable(struct memblock_region *m) +{ +	return false; +} +static inline bool movable_node_is_enabled(void) +{ +	return false; +} +#endif  #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP  int memblock_search_pfn_nid(unsigned long pfn, unsigned long *start_pfn, @@ -87,7 +119,7 @@ void __next_free_mem_range(u64 *idx, int nid, phys_addr_t *out_start,  /**   * for_each_free_mem_range - iterate through free memblock areas   * @i: u64 used as loop variable - * @nid: node selector, %MAX_NUMNODES for all nodes + * @nid: node selector, %NUMA_NO_NODE for all nodes   * @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   * @p_nid: ptr to int for nid of the range, can be %NULL @@ -107,7 +139,7 @@ void __next_free_mem_range_rev(u64 *idx, int nid, phys_addr_t *out_start,  /**   * for_each_free_mem_range_reverse - rev-iterate through free memblock areas   * @i: u64 used as loop variable - * @nid: node selector, %MAX_NUMNODES for all nodes + * @nid: node selector, %NUMA_NO_NODE for all nodes   * @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   * @p_nid: ptr to int for nid of the range, can be %NULL @@ -121,8 +153,21 @@ void __next_free_mem_range_rev(u64 *idx, int nid, phys_addr_t *out_start,  	     i != (u64)ULLONG_MAX;					\  	     __next_free_mem_range_rev(&i, nid, p_start, p_end, p_nid)) +static inline void memblock_set_region_flags(struct memblock_region *r, +					     unsigned long flags) +{ +	r->flags |= flags; +} + +static inline void memblock_clear_region_flags(struct memblock_region *r, +					       unsigned long flags) +{ +	r->flags &= ~flags; +} +  #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP -int memblock_set_node(phys_addr_t base, phys_addr_t size, int nid); +int memblock_set_node(phys_addr_t base, phys_addr_t size, +		      struct memblock_type *type, int nid);  static inline void memblock_set_region_node(struct memblock_region *r, int nid)  {  |