mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	LoongArch: Fix kernel_page_present() for KPRANGE/XKPRANGE
Now kernel_page_present() always return true for KPRANGE/XKPRANGE addresses, this isn't correct because hibernation (ACPI S4) use it to distinguish whether a page is saveable. If all KPRANGE/XKPRANGE addresses are considered as saveable, then reserved memory such as EFI_RUNTIME_SERVICES_CODE / EFI_RUNTIME_SERVICES_DATA will also be saved and restored. Fix this by returning true only if the KPRANGE/XKPRANGE address is in memblock.memory. Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
This commit is contained in:
		
							parent
							
								
									edb1942542
								
							
						
					
					
						commit
						619b52777a
					
				
					 1 changed files with 2 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
 * Copyright (C) 2024 Loongson Technology Corporation Limited
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/memblock.h>
 | 
			
		||||
#include <linux/pagewalk.h>
 | 
			
		||||
#include <linux/pgtable.h>
 | 
			
		||||
#include <asm/set_memory.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -167,7 +168,7 @@ bool kernel_page_present(struct page *page)
 | 
			
		|||
	unsigned long addr = (unsigned long)page_address(page);
 | 
			
		||||
 | 
			
		||||
	if (addr < vm_map_base)
 | 
			
		||||
		return true;
 | 
			
		||||
		return memblock_is_memory(__pa(addr));
 | 
			
		||||
 | 
			
		||||
	pgd = pgd_offset_k(addr);
 | 
			
		||||
	if (pgd_none(pgdp_get(pgd)))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue