Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit af370fb8 authored by Yasunori Goto's avatar Yasunori Goto Committed by Linus Torvalds
Browse files

memory hotplug: small fixes to bootmem freeing for memory hotremove



- Change some naming
  * Magic -> types
  * MIX_INFO -> MIX_SECTION_INFO
  * Change definition of bootmem type from direct hex value

- __free_pages_bootmem() becomes __meminit.

Signed-off-by: default avatarYasunori Goto <y-goto@jp.fujitsu.com>
Cc: Andy Whitcroft <apw@shadowen.org>
Cc: Badari Pulavarty <pbadari@us.ibm.com>
Cc: Yinghai Lu <yhlu.kernel@gmail.com>
Cc: Johannes Weiner <hannes@saeurebad.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 48c90682
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -13,12 +13,12 @@ struct mem_section;
#ifdef CONFIG_MEMORY_HOTPLUG
#ifdef CONFIG_MEMORY_HOTPLUG


/*
/*
 * Magic number for free bootmem.
 * Types for free bootmem.
 * The normal smallest mapcount is -1. Here is smaller value than it.
 * The normal smallest mapcount is -1. Here is smaller value than it.
 */
 */
#define SECTION_INFO		0xfffffffe
#define SECTION_INFO		(-1 - 1)
#define MIX_INFO		0xfffffffd
#define MIX_SECTION_INFO	(-1 - 2)
#define NODE_INFO		0xfffffffc
#define NODE_INFO		(-1 - 3)


/*
/*
 * pgdat resizing functions
 * pgdat resizing functions
+6 −6
Original line number Original line Diff line number Diff line
@@ -62,9 +62,9 @@ static void release_memory_resource(struct resource *res)


#ifdef CONFIG_MEMORY_HOTPLUG_SPARSE
#ifdef CONFIG_MEMORY_HOTPLUG_SPARSE
#ifndef CONFIG_SPARSEMEM_VMEMMAP
#ifndef CONFIG_SPARSEMEM_VMEMMAP
static void get_page_bootmem(unsigned long info,  struct page *page, int magic)
static void get_page_bootmem(unsigned long info,  struct page *page, int type)
{
{
	atomic_set(&page->_mapcount, magic);
	atomic_set(&page->_mapcount, type);
	SetPagePrivate(page);
	SetPagePrivate(page);
	set_page_private(page, info);
	set_page_private(page, info);
	atomic_inc(&page->_count);
	atomic_inc(&page->_count);
@@ -72,10 +72,10 @@ static void get_page_bootmem(unsigned long info, struct page *page, int magic)


void put_page_bootmem(struct page *page)
void put_page_bootmem(struct page *page)
{
{
	int magic;
	int type;


	magic = atomic_read(&page->_mapcount);
	type = atomic_read(&page->_mapcount);
	BUG_ON(magic >= -1);
	BUG_ON(type >= -1);


	if (atomic_dec_return(&page->_count) == 1) {
	if (atomic_dec_return(&page->_count) == 1) {
		ClearPagePrivate(page);
		ClearPagePrivate(page);
@@ -119,7 +119,7 @@ static void register_page_bootmem_info_section(unsigned long start_pfn)
	mapsize = PAGE_ALIGN(usemap_size()) >> PAGE_SHIFT;
	mapsize = PAGE_ALIGN(usemap_size()) >> PAGE_SHIFT;


	for (i = 0; i < mapsize; i++, page++)
	for (i = 0; i < mapsize; i++, page++)
		get_page_bootmem(section_nr, page, MIX_INFO);
		get_page_bootmem(section_nr, page, MIX_SECTION_INFO);


}
}


+1 −1
Original line number Original line Diff line number Diff line
@@ -533,7 +533,7 @@ static void __free_pages_ok(struct page *page, unsigned int order)
/*
/*
 * permit the bootmem allocator to evade page validation on high-order frees
 * permit the bootmem allocator to evade page validation on high-order frees
 */
 */
void __free_pages_bootmem(struct page *page, unsigned int order)
void __meminit __free_pages_bootmem(struct page *page, unsigned int order)
{
{
	if (order == 0) {
	if (order == 0) {
		__ClearPageReserved(page);
		__ClearPageReserved(page);