Revert "memory hotplug: Correct page reservation checking"
This reverts commit 54f23eb7ba.
Turns out this patch is wrong, another correct one will follow it.
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
			
			
This commit is contained in:
		
							parent
							
								
									5fa224295f
								
							
						
					
					
						commit
						de0ed36a3e
					
				| @ -227,42 +227,41 @@ int memory_isolate_notify(unsigned long val, void *v) | ||||
|  * MEMORY_HOTPLUG depends on SPARSEMEM in mm/Kconfig, so it is | ||||
|  * OK to have direct references to sparsemem variables in here. | ||||
|  */ | ||||
| static int check_page_reservations(unsigned long phys_index) | ||||
| { | ||||
| 	int i; | ||||
| 	struct page *page; | ||||
| 
 | ||||
| 	page = pfn_to_page(phys_index << PFN_SECTION_SHIFT); | ||||
| 
 | ||||
| 	for (i = 0; i < PAGES_PER_SECTION; i++) { | ||||
| 		if (PageReserved(page + i)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		printk(KERN_WARNING "section number %ld page number %d " | ||||
| 			"not reserved, was it already online?\n", phys_index, i); | ||||
| 			return -EBUSY; | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| memory_block_action(unsigned long phys_index, unsigned long action) | ||||
| { | ||||
| 	int i; | ||||
| 	unsigned long start_pfn, start_paddr; | ||||
| 	unsigned long nr_pages = PAGES_PER_SECTION * sections_per_block; | ||||
| 	struct page *page; | ||||
| 	struct page *first_page; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	page = pfn_to_page(phys_index << PFN_SECTION_SHIFT); | ||||
| 	first_page = pfn_to_page(phys_index << PFN_SECTION_SHIFT); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * The probe routines leave the pages reserved, just | ||||
| 	 * as the bootmem code does.  Make sure they're still | ||||
| 	 * that way. | ||||
| 	 */ | ||||
| 	if (action == MEM_ONLINE) { | ||||
| 		for (i = 0; i < nr_pages; i++) { | ||||
| 			if (PageReserved(first_page+i)) | ||||
| 				continue; | ||||
| 
 | ||||
| 			printk(KERN_WARNING "section number %ld page number %d " | ||||
| 				"not reserved, was it already online?\n", | ||||
| 				phys_index, i); | ||||
| 			return -EBUSY; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	switch (action) { | ||||
| 		case MEM_ONLINE: | ||||
| 			start_pfn = page_to_pfn(page); | ||||
| 			start_pfn = page_to_pfn(first_page); | ||||
| 			ret = online_pages(start_pfn, nr_pages); | ||||
| 			break; | ||||
| 		case MEM_OFFLINE: | ||||
| 			start_paddr = page_to_pfn(page) << PAGE_SHIFT; | ||||
| 			start_paddr = page_to_pfn(first_page) << PAGE_SHIFT; | ||||
| 			ret = remove_memory(start_paddr, | ||||
| 					    nr_pages << PAGE_SHIFT); | ||||
| 			break; | ||||
| @ -278,7 +277,7 @@ memory_block_action(unsigned long phys_index, unsigned long action) | ||||
| static int memory_block_change_state(struct memory_block *mem, | ||||
| 		unsigned long to_state, unsigned long from_state_req) | ||||
| { | ||||
| 	int i, ret = 0; | ||||
| 	int ret = 0; | ||||
| 
 | ||||
| 	mutex_lock(&mem->state_mutex); | ||||
| 
 | ||||
| @ -290,19 +289,6 @@ static int memory_block_change_state(struct memory_block *mem, | ||||
| 	if (to_state == MEM_OFFLINE) | ||||
| 		mem->state = MEM_GOING_OFFLINE; | ||||
| 
 | ||||
| 	if (to_state == MEM_ONLINE) { | ||||
| 		/*
 | ||||
| 		 * The probe routines leave the pages reserved, just | ||||
| 		 * as the bootmem code does.  Make sure they're still | ||||
| 		 * that way. | ||||
| 		 */ | ||||
| 		for (i = 0; i < sections_per_block; i++) { | ||||
| 			ret = check_page_reservations(mem->start_section_nr + i); | ||||
| 			if (ret) | ||||
| 				return ret; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	ret = memory_block_action(mem->start_section_nr, to_state); | ||||
| 
 | ||||
| 	if (ret) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user