Setting max_pfn_mapped here has no effect. It still fails the same way.
Later on in setup_arch(), max_pfn_mapped is set to max_lower_pfn_mapped. For
64 bit dom0, it will try to set it again for memory above 4GB by calling
init_memory_mapping(1UL<<32, max_pfn<<PAGE_SHIFT) - this is where it eventually
fails.
The problem is max_pfn also contains non-RAM extra memory. Should max_pfn set
to xen_low_pfn_mapped before calling init_memory_mapping for memory above 4GB?
Allen
-----Original Message-----
From: Stefano Stabellini [mailto:stefano.stabellini@xxxxxxxxxxxxx]
Sent: Tuesday, February 15, 2011 6:58 AM
To: Kay, Allen M
Cc: Jeremy Fitzhardinge; Konrad Rzeszutek Wilk; Stefano Stabellini; xen-devel;
Keir Fraser
Subject: RE: [Xen-devel] 2.6.32.27 dom0 + latest xen staging boot failure
On Tue, 15 Feb 2011, Kay, Allen M wrote:
> The failure occurs when dom0 tries to pin an l1 table entry because L1 table
> entry for the failed address is garbage. The memory range being pinned is in
> the range of this extra balloon driver memory not backed by real RAM. Is
> this intended?
>
The pfn in question is returned by alloc_low_page and is equal to
e820_table_end, that should fall into the range
e820_table_start-e820_table_top.
This range is allocated by find_early_table_space in the initial
pagetable mappings between 0x8000 and max_pfn_mapped, respecting the
reserved memblock regions.
Maybe we didn't reserve some ranges in there that should have been
reserved?
What happen you apply this patch?
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 5e92b61..73a21db 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1653,9 +1653,6 @@ static __init void xen_map_identity_early(pmd_t *pmd,
unsigned long max_pfn)
for (pteidx = 0; pteidx < PTRS_PER_PTE; pteidx++, pfn++) {
pte_t pte;
- if (pfn > max_pfn_mapped)
- max_pfn_mapped = pfn;
-
if (!pte_none(pte_page[pteidx]))
continue;
@@ -1713,6 +1710,8 @@ __init pgd_t *xen_setup_kernel_pagetable(pgd_t *pgd,
pud_t *l3;
pmd_t *l2;
+ max_pfn_mapped = PFN_DOWN(__pa(xen_start_info->mfn_list));
+
/* Zap identity mapping */
init_level4_pgt[0] = __pgd(0);
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|