[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.