+#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
#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;
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();
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 )
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)