diff options
Diffstat (limited to 'mm')
| -rw-r--r-- | mm/hugetlb.c | 8 | ||||
| -rw-r--r-- | mm/memory_hotplug.c | 6 | 
2 files changed, 11 insertions, 3 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 0a0be33bb19..ca9a7c6d7e9 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -2124,8 +2124,12 @@ int hugetlb_report_node_meminfo(int nid, char *buf)  /* Return the number pages of memory we physically have, in PAGE_SIZE units. */  unsigned long hugetlb_total_pages(void)  { -	struct hstate *h = &default_hstate; -	return h->nr_huge_pages * pages_per_huge_page(h); +	struct hstate *h; +	unsigned long nr_total_pages = 0; + +	for_each_hstate(h) +		nr_total_pages += h->nr_huge_pages * pages_per_huge_page(h); +	return nr_total_pages;  }  static int hugetlb_acct_memory(struct hstate *h, long delta) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 9597eec8239..ee376576081 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1779,7 +1779,11 @@ void try_offline_node(int nid)  	for (i = 0; i < MAX_NR_ZONES; i++) {  		struct zone *zone = pgdat->node_zones + i; -		if (zone->wait_table) +		/* +		 * wait_table may be allocated from boot memory, +		 * here only free if it's allocated by vmalloc. +		 */ +		if (is_vmalloc_addr(zone->wait_table))  			vfree(zone->wait_table);  	}  |