[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/EFI: keep EFI runtime services top level page tables up-to-date
On 18/05/15 11:22, Jan Beulich wrote: > 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@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > --- > This in particular is a prereq for the patch at > http://lists.xenproject.org/archives/html/xen-devel/2015-05/msg02125.html > to be correct. > > --- a/xen/arch/x86/efi/runtime.h > +++ b/xen/arch/x86/efi/runtime.h > @@ -2,4 +2,10 @@ > > #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 > --- a/xen/arch/x86/efi/stub.c > +++ b/xen/arch/x86/efi/stub.c > @@ -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(); > --- a/xen/arch/x86/mm.c > +++ b/xen/arch/x86/mm.c > @@ -5311,7 +5311,10 @@ static l3_pgentry_t *virt_to_xen_l3e(uns > 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 ) > --- a/xen/include/asm-x86/page.h > +++ b/xen/include/asm-x86/page.h > @@ -288,6 +288,7 @@ extern l2_pgentry_t l2_identmap[4*L2_PAG > 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) > > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |