diff options
| -rw-r--r-- | include/linux/mmzone.h | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 962b14d403e8..46ffab808f03 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -1397,13 +1397,16 @@ static inline unsigned long *section_to_usemap(struct mem_section *ms)  static inline struct mem_section *__nr_to_section(unsigned long nr)  { +	unsigned long root = SECTION_NR_TO_ROOT(nr); + +	if (unlikely(root >= NR_SECTION_ROOTS)) +		return NULL; +  #ifdef CONFIG_SPARSEMEM_EXTREME -	if (!mem_section) +	if (!mem_section || !mem_section[root])  		return NULL;  #endif -	if (!mem_section[SECTION_NR_TO_ROOT(nr)]) -		return NULL; -	return &mem_section[SECTION_NR_TO_ROOT(nr)][nr & SECTION_ROOT_MASK]; +	return &mem_section[root][nr & SECTION_ROOT_MASK];  }  extern size_t mem_section_usage_size(void); |