|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86_64/mm: introduce pl2e in paging_init
commit 33a8018d2e4e4c62b767f9934c682d9d8c90d3d5
Author: Wei Liu <wei.liu2@xxxxxxxxxx>
AuthorDate: Thu Apr 22 14:13:13 2021 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Apr 22 14:13:13 2021 +0200
x86_64/mm: introduce pl2e in paging_init
We will soon map and unmap pages in paging_init(). 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>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/arch/x86/x86_64/mm.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
index d7e67311fa..59049bdf8e 100644
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -496,7 +496,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 = NULL;
struct page_info *l1_pg;
/*
@@ -546,7 +546,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
@@ -632,6 +633,7 @@ void __init paging_init(void)
goto nomem;
compat_idle_pg_table_l2 = l2_ro_mpt;
clear_page(l2_ro_mpt);
+ pl2e = l2_ro_mpt;
/* Allocate and map the compatibility mode machine-to-phys table. */
mpt_size = (mpt_size >> 1) + (1UL << (L2_PAGETABLE_SHIFT - 1));
@@ -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)
(i << L2_PAGETABLE_SHIFT)),
0xFF, 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
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |