提交 764f0138 编写于 作者: J Jeremy Fitzhardinge

xen: allocate level1_ident_pgt

Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
上级 f0991802
...@@ -138,7 +138,8 @@ static inline void check_zero(void) ...@@ -138,7 +138,8 @@ static inline void check_zero(void)
* large enough to allocate page table pages to allocate the rest. * large enough to allocate page table pages to allocate the rest.
* Each page can map 2MB. * Each page can map 2MB.
*/ */
static pte_t level1_ident_pgt[PTRS_PER_PTE * 4] __page_aligned_bss; #define LEVEL1_IDENT_ENTRIES (PTRS_PER_PTE * 4)
static RESERVE_BRK_ARRAY(pte_t, level1_ident_pgt, LEVEL1_IDENT_ENTRIES);
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
/* l3 pud for userspace vsyscall mapping */ /* l3 pud for userspace vsyscall mapping */
...@@ -1718,6 +1719,9 @@ static __init void xen_map_identity_early(pmd_t *pmd, unsigned long max_pfn) ...@@ -1718,6 +1719,9 @@ static __init void xen_map_identity_early(pmd_t *pmd, unsigned long max_pfn)
unsigned ident_pte; unsigned ident_pte;
unsigned long pfn; unsigned long pfn;
level1_ident_pgt = extend_brk(sizeof(pte_t) * LEVEL1_IDENT_ENTRIES,
PAGE_SIZE);
ident_pte = 0; ident_pte = 0;
pfn = 0; pfn = 0;
for (pmdidx = 0; pmdidx < PTRS_PER_PMD && pfn < max_pfn; pmdidx++) { for (pmdidx = 0; pmdidx < PTRS_PER_PMD && pfn < max_pfn; pmdidx++) {
...@@ -1728,7 +1732,7 @@ static __init void xen_map_identity_early(pmd_t *pmd, unsigned long max_pfn) ...@@ -1728,7 +1732,7 @@ static __init void xen_map_identity_early(pmd_t *pmd, unsigned long max_pfn)
pte_page = m2v(pmd[pmdidx].pmd); pte_page = m2v(pmd[pmdidx].pmd);
else { else {
/* Check for free pte pages */ /* Check for free pte pages */
if (ident_pte == ARRAY_SIZE(level1_ident_pgt)) if (ident_pte == LEVEL1_IDENT_ENTRIES)
break; break;
pte_page = &level1_ident_pgt[ident_pte]; pte_page = &level1_ident_pgt[ident_pte];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册