diff options
Diffstat (limited to 'arch/x86/mm/init_64.c')
-rw-r--r-- | arch/x86/mm/init_64.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 2b6b4a3c8beb..fd4404f19d39 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
@@ -108,13 +108,13 @@ void sync_global_pgds(unsigned long start, unsigned long end) | |||
108 | for (address = start; address <= end; address += PGDIR_SIZE) { | 108 | for (address = start; address <= end; address += PGDIR_SIZE) { |
109 | const pgd_t *pgd_ref = pgd_offset_k(address); | 109 | const pgd_t *pgd_ref = pgd_offset_k(address); |
110 | struct page *page; | 110 | struct page *page; |
111 | pgd_t *pgd; | ||
111 | 112 | ||
112 | if (pgd_none(*pgd_ref)) | 113 | if (pgd_none(*pgd_ref)) |
113 | continue; | 114 | continue; |
114 | 115 | ||
115 | spin_lock(&pgd_lock); | 116 | spin_lock(&pgd_lock); |
116 | list_for_each_entry(page, &pgd_list, lru) { | 117 | list_for_each_entry(page, &pgd_list, lru) { |
117 | pgd_t *pgd; | ||
118 | spinlock_t *pgt_lock; | 118 | spinlock_t *pgt_lock; |
119 | 119 | ||
120 | pgd = (pgd_t *)page_address(page) + pgd_index(address); | 120 | pgd = (pgd_t *)page_address(page) + pgd_index(address); |
@@ -130,6 +130,13 @@ void sync_global_pgds(unsigned long start, unsigned long end) | |||
130 | 130 | ||
131 | spin_unlock(pgt_lock); | 131 | spin_unlock(pgt_lock); |
132 | } | 132 | } |
133 | |||
134 | pgd = __va(real_mode_header->trampoline_pgd); | ||
135 | pgd += pgd_index(address); | ||
136 | |||
137 | if (pgd_none(*pgd)) | ||
138 | set_pgd(pgd, *pgd_ref); | ||
139 | |||
133 | spin_unlock(&pgd_lock); | 140 | spin_unlock(&pgd_lock); |
134 | } | 141 | } |
135 | } | 142 | } |