aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/power/hibernate_64.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/power/hibernate_64.c')
-rw-r--r--arch/x86/power/hibernate_64.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/arch/x86/power/hibernate_64.c b/arch/x86/power/hibernate_64.c
index f2b5e6a5cf95..f0b5f2d402af 100644
--- a/arch/x86/power/hibernate_64.c
+++ b/arch/x86/power/hibernate_64.c
@@ -37,11 +37,11 @@ unsigned long jump_address_phys;
37 */ 37 */
38unsigned long restore_cr3 __visible; 38unsigned long restore_cr3 __visible;
39 39
40pgd_t *temp_level4_pgt __visible; 40unsigned long temp_level4_pgt __visible;
41 41
42unsigned long relocated_restore_code __visible; 42unsigned long relocated_restore_code __visible;
43 43
44static int set_up_temporary_text_mapping(void) 44static int set_up_temporary_text_mapping(pgd_t *pgd)
45{ 45{
46 pmd_t *pmd; 46 pmd_t *pmd;
47 pud_t *pud; 47 pud_t *pud;
@@ -71,7 +71,7 @@ static int set_up_temporary_text_mapping(void)
71 __pmd((jump_address_phys & PMD_MASK) | __PAGE_KERNEL_LARGE_EXEC)); 71 __pmd((jump_address_phys & PMD_MASK) | __PAGE_KERNEL_LARGE_EXEC));
72 set_pud(pud + pud_index(restore_jump_address), 72 set_pud(pud + pud_index(restore_jump_address),
73 __pud(__pa(pmd) | _KERNPG_TABLE)); 73 __pud(__pa(pmd) | _KERNPG_TABLE));
74 set_pgd(temp_level4_pgt + pgd_index(restore_jump_address), 74 set_pgd(pgd + pgd_index(restore_jump_address),
75 __pgd(__pa(pud) | _KERNPG_TABLE)); 75 __pgd(__pa(pud) | _KERNPG_TABLE));
76 76
77 return 0; 77 return 0;
@@ -90,15 +90,16 @@ static int set_up_temporary_mappings(void)
90 .kernel_mapping = true, 90 .kernel_mapping = true,
91 }; 91 };
92 unsigned long mstart, mend; 92 unsigned long mstart, mend;
93 pgd_t *pgd;
93 int result; 94 int result;
94 int i; 95 int i;
95 96
96 temp_level4_pgt = (pgd_t *)get_safe_page(GFP_ATOMIC); 97 pgd = (pgd_t *)get_safe_page(GFP_ATOMIC);
97 if (!temp_level4_pgt) 98 if (!pgd)
98 return -ENOMEM; 99 return -ENOMEM;
99 100
100 /* Prepare a temporary mapping for the kernel text */ 101 /* Prepare a temporary mapping for the kernel text */
101 result = set_up_temporary_text_mapping(); 102 result = set_up_temporary_text_mapping(pgd);
102 if (result) 103 if (result)
103 return result; 104 return result;
104 105
@@ -107,13 +108,12 @@ static int set_up_temporary_mappings(void)
107 mstart = pfn_mapped[i].start << PAGE_SHIFT; 108 mstart = pfn_mapped[i].start << PAGE_SHIFT;
108 mend = pfn_mapped[i].end << PAGE_SHIFT; 109 mend = pfn_mapped[i].end << PAGE_SHIFT;
109 110
110 result = kernel_ident_mapping_init(&info, temp_level4_pgt, 111 result = kernel_ident_mapping_init(&info, pgd, mstart, mend);
111 mstart, mend);
112
113 if (result) 112 if (result)
114 return result; 113 return result;
115 } 114 }
116 115
116 temp_level4_pgt = (unsigned long)pgd - __PAGE_OFFSET;
117 return 0; 117 return 0;
118} 118}
119 119