mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
x86/EFI: keep EFI runtime services top level page tables up-to-date
Updates to idle_pg_table[] need to be mirrored into the page tables
used for invoking EFI runtime services.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
master commit: db83975f0f
master date: 2015-05-19 11:39:09 +0200
This commit is contained in:
1 parent
9d5b2b0102
commit
5ca0609a7b
4 files changed
+15
-1
No files matched your search
@@ -1,5 +1,12 @@
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/mc146818rtc.h>
|
||||
|
||||
#ifndef COMPAT
|
||||
l4_pgentry_t *__read_mostly efi_l4_pgtable;
|
||||
|
||||
void efi_update_l4_pgtable(unsigned int l4idx, l4_pgentry_t l4e)
|
||||
{
|
||||
if ( efi_l4_pgtable )
|
||||
l4e_write(efi_l4_pgtable + l4idx, l4e);
|
||||
}
|
||||
#endif
|
||||
@@ -2,6 +2,7 @@
|
||||
#include <xen/errno.h>
|
||||
#include <xen/init.h>
|
||||
#include <xen/lib.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
#ifndef efi_enabled
|
||||
const bool_t efi_enabled = 0;
|
||||
@@ -9,6 +10,8 @@ const bool_t efi_enabled = 0;
|
||||
|
||||
void __init efi_init_memory(void) { }
|
||||
|
||||
void efi_update_l4_pgtable(unsigned int l4idx, l4_pgentry_t l4e) { }
|
||||
|
||||
paddr_t efi_rs_page_table(void)
|
||||
{
|
||||
BUG();
|
||||
|
||||
+4
-1
@@ -5287,7 +5287,10 @@ static l3_pgentry_t *virt_to_xen_l3e(unsigned long v)
|
||||
spin_lock(&map_pgdir_lock);
|
||||
if ( !(l4e_get_flags(*pl4e) & _PAGE_PRESENT) )
|
||||
{
|
||||
l4e_write(pl4e, l4e_from_paddr(__pa(pl3e), __PAGE_HYPERVISOR));
|
||||
l4_pgentry_t l4e = l4e_from_paddr(__pa(pl3e), __PAGE_HYPERVISOR);
|
||||
|
||||
l4e_write(pl4e, l4e);
|
||||
efi_update_l4_pgtable(l4_table_offset(v), l4e);
|
||||
pl3e = NULL;
|
||||
}
|
||||
if ( locking )
|
||||
|
||||
@@ -286,6 +286,7 @@ extern l2_pgentry_t l2_identmap[4*L2_PAGETABLE_ENTRIES];
|
||||
extern l1_pgentry_t l1_identmap[L1_PAGETABLE_ENTRIES],
|
||||
l1_fixmap[L1_PAGETABLE_ENTRIES];
|
||||
void paging_init(void);
|
||||
void efi_update_l4_pgtable(unsigned int l4idx, l4_pgentry_t);
|
||||
#endif /* !defined(__ASSEMBLY__) */
|
||||
|
||||
#define _PAGE_NONE _AC(0x000,U)
|
||||
|
||||