diff options
Diffstat (limited to 'arch/x86/power/hibernate_64.c')
-rw-r--r-- | arch/x86/power/hibernate_64.c | 18 |
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 | */ |
38 | unsigned long restore_cr3 __visible; | 38 | unsigned long restore_cr3 __visible; |
39 | 39 | ||
40 | pgd_t *temp_level4_pgt __visible; | 40 | unsigned long temp_level4_pgt __visible; |
41 | 41 | ||
42 | unsigned long relocated_restore_code __visible; | 42 | unsigned long relocated_restore_code __visible; |
43 | 43 | ||
44 | static int set_up_temporary_text_mapping(void) | 44 | static 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 | ||