diff options
Diffstat (limited to 'arch/x86/power/hibernate_64.c')
| -rw-r--r-- | arch/x86/power/hibernate_64.c | 11 | 
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/x86/power/hibernate_64.c b/arch/x86/power/hibernate_64.c index 6a61194ffd58..f2598d81cd55 100644 --- a/arch/x86/power/hibernate_64.c +++ b/arch/x86/power/hibernate_64.c @@ -104,7 +104,7 @@ static int set_up_temporary_mappings(void)  {  	struct x86_mapping_info info = {  		.alloc_pgt_page	= alloc_pgt_page, -		.pmd_flag	= __PAGE_KERNEL_LARGE_EXEC, +		.page_flag	= __PAGE_KERNEL_LARGE_EXEC,  		.offset		= __PAGE_OFFSET,  	};  	unsigned long mstart, mend; @@ -147,10 +147,11 @@ static int relocate_restore_code(void)  	if (!relocated_restore_code)  		return -ENOMEM; -	memcpy((void *)relocated_restore_code, &core_restore_code, PAGE_SIZE); +	memcpy((void *)relocated_restore_code, core_restore_code, PAGE_SIZE);  	/* Make the page containing the relocated code executable */ -	pgd = (pgd_t *)__va(read_cr3()) + pgd_index(relocated_restore_code); +	pgd = (pgd_t *)__va(read_cr3_pa()) + +		pgd_index(relocated_restore_code);  	p4d = p4d_offset(pgd, relocated_restore_code);  	if (p4d_large(*p4d)) {  		set_p4d(p4d, __p4d(p4d_val(*p4d) & ~_PAGE_NX)); @@ -292,8 +293,8 @@ int arch_hibernation_header_save(void *addr, unsigned int max_size)  	if (max_size < sizeof(struct restore_data_record))  		return -EOVERFLOW; -	rdr->jump_address = (unsigned long)&restore_registers; -	rdr->jump_address_phys = __pa_symbol(&restore_registers); +	rdr->jump_address = (unsigned long)restore_registers; +	rdr->jump_address_phys = __pa_symbol(restore_registers);  	rdr->cr3 = restore_cr3;  	rdr->magic = RESTORE_MAGIC;  |