|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC 21/55] x86_64/mm: introduce pl2e in paging_init
On Thu, 2019-02-07 at 16:44 +0000, Wei Liu wrote:
> Introduce pl2e so that we can use l2_ro_mpt to point to the page
> table
> itself.
>
> No functional change.
>
> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
> ---
> xen/arch/x86/x86_64/mm.c | 18 ++++++++++--------
> 1 file changed, 10 insertions(+), 8 deletions(-)
>
> diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
> index d8f558bc3a..83d62674c0 100644
> --- a/xen/arch/x86/x86_64/mm.c
> +++ b/xen/arch/x86/x86_64/mm.c
> @@ -497,7 +497,7 @@ void __init paging_init(void)
> unsigned long i, mpt_size, va;
> unsigned int n, memflags;
> l3_pgentry_t *l3_ro_mpt;
> - l2_pgentry_t *l2_ro_mpt = NULL;
> + l2_pgentry_t *pl2e = NULL, *l2_ro_mpt;
nit: In the next patch the NULL initialization for l2_ro_mpt is added
back in. No need to remove it here.
> struct page_info *l1_pg;
>
> /*
> @@ -547,7 +547,7 @@ void __init paging_init(void)
> (L2_PAGETABLE_SHIFT - 3 + PAGE_SHIFT)));
>
> if ( cpu_has_page1gb &&
> - !((unsigned long)l2_ro_mpt & ~PAGE_MASK) &&
> + !((unsigned long)pl2e & ~PAGE_MASK) &&
> (mpt_size >> L3_PAGETABLE_SHIFT) > (i >>
> PAGETABLE_ORDER) )
> {
> unsigned int k, holes;
> @@ -606,7 +606,7 @@ void __init paging_init(void)
> memset((void *)(RDWR_MPT_VIRT_START + (i <<
> L2_PAGETABLE_SHIFT)),
> 0xFF, 1UL << L2_PAGETABLE_SHIFT);
> }
> - if ( !((unsigned long)l2_ro_mpt & ~PAGE_MASK) )
> + if ( !((unsigned long)pl2e & ~PAGE_MASK) )
> {
> if ( (l2_ro_mpt = alloc_xen_pagetable()) == NULL )
> goto nomem;
> @@ -614,13 +614,14 @@ void __init paging_init(void)
> l3e_write(&l3_ro_mpt[l3_table_offset(va)],
> l3e_from_paddr(__pa(l2_ro_mpt),
> __PAGE_HYPERVISOR_RO |
> _PAGE_USER));
> + pl2e = l2_ro_mpt;
> ASSERT(!l2_table_offset(va));
> }
> /* NB. Cannot be GLOBAL: guest user mode should not see it.
> */
> if ( l1_pg )
> - l2e_write(l2_ro_mpt, l2e_from_page(
> + l2e_write(pl2e, l2e_from_page(
> l1_pg,
> /*_PAGE_GLOBAL|*/_PAGE_PSE|_PAGE_USER|_PAGE_PRESENT));
> - l2_ro_mpt++;
> + pl2e++;
> }
> #undef CNT
> #undef MFN
> @@ -636,7 +637,8 @@ void __init paging_init(void)
> clear_page(l2_ro_mpt);
> l3e_write(&l3_ro_mpt[l3_table_offset(HIRO_COMPAT_MPT_VIRT_START)
> ],
> l3e_from_paddr(__pa(l2_ro_mpt),
> __PAGE_HYPERVISOR_RO));
> - l2_ro_mpt += l2_table_offset(HIRO_COMPAT_MPT_VIRT_START);
> + pl2e = l2_ro_mpt;
> + pl2e += l2_table_offset(HIRO_COMPAT_MPT_VIRT_START);
nit: Those two lines could be combined.
- Stefan
> /* Allocate and map the compatibility mode machine-to-phys
> table. */
> mpt_size = (mpt_size >> 1) + (1UL << (L2_PAGETABLE_SHIFT - 1));
> if ( mpt_size > RDWR_COMPAT_MPT_VIRT_END -
> RDWR_COMPAT_MPT_VIRT_START )
> @@ -649,7 +651,7 @@ void __init paging_init(void)
> sizeof(*compat_machine_to_phys_mapping))
> BUILD_BUG_ON((sizeof(*frame_table) & ~sizeof(*frame_table)) % \
> sizeof(*compat_machine_to_phys_mapping));
> - for ( i = 0; i < (mpt_size >> L2_PAGETABLE_SHIFT); i++,
> l2_ro_mpt++ )
> + for ( i = 0; i < (mpt_size >> L2_PAGETABLE_SHIFT); i++, pl2e++ )
> {
> memflags = MEMF_node(phys_to_nid(i <<
> (L2_PAGETABLE_SHIFT - 2 + PAGE_SHIFT)));
> @@ -671,7 +673,7 @@ void __init paging_init(void)
> 0x55,
> 1UL << L2_PAGETABLE_SHIFT);
> /* NB. Cannot be GLOBAL as the ptes get copied into per-VM
> space. */
> - l2e_write(l2_ro_mpt, l2e_from_page(l1_pg,
> _PAGE_PSE|_PAGE_PRESENT));
> + l2e_write(pl2e, l2e_from_page(l1_pg,
> _PAGE_PSE|_PAGE_PRESENT));
> }
> #undef CNT
> #undef MFN
Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrer: Christian Schlaeger, Ralf Herbrich
Ust-ID: DE 289 237 879
Eingetragen am Amtsgericht Charlottenburg HRB 149173 B
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |