On Tue, 1 Jul 2025, Jan Beulich wrote:
> Sadly from this you omitted the output from the setup of the offsets
> arrays. Considering also your later reply, I'd be curious to know what
> mfn_to_pdx(0x50000000) is.
Full logs here, and debug patch in attachment.
(XEN) Checking for initrd in /chosen
(XEN) RAM: 0000000000000000 - 000000007fffffff
(XEN) RAM: 0000000800000000 - 000000087fffffff
(XEN) RAM: 0000050000000000 - 000005007fffffff
(XEN) RAM: 0000060000000000 - 000006007fffffff
(XEN) RAM: 0000070000000000 - 000007007fffffff
(XEN)
(XEN) MODULE[0]: 0000000022000000 - 0000000022172fff Xen
(XEN) MODULE[1]: 0000000022200000 - 000000002220efff Device Tree
(XEN) MODULE[2]: 0000000020400000 - 0000000021e2ffff Kernel
(XEN) RESVD[0]: 0000000000000000 - 0000000000ffffff
(XEN) RESVD[1]: 0000000001000000 - 00000000015fffff
(XEN) RESVD[2]: 0000000001600000 - 00000000017fffff
(XEN) RESVD[3]: 0000000001800000 - 00000000097fffff
(XEN) RESVD[4]: 0000000009800000 - 000000000bffffff
(XEN) RESVD[5]: 0000000011126000 - 000000001114dfff
(XEN) RESVD[6]: 000000001114e000 - 000000001214efff
(XEN) RESVD[7]: 0000000017275000 - 000000001729cfff
(XEN) RESVD[8]: 000000001729d000 - 000000001829dfff
(XEN) RESVD[9]: 000000001a7df000 - 000000001a806fff
(XEN) RESVD[10]: 000000001a807000 - 000000001b807fff
(XEN) RESVD[11]: 000000001d908000 - 000000001d92ffff
(XEN) RESVD[12]: 000000001d930000 - 000000001e930fff
(XEN) RESVD[13]: 000000001829e000 - 000000001869dfff
(XEN) RESVD[14]: 000000001869e000 - 00000000186ddfff
(XEN) RESVD[15]: 0000000800000000 - 000000083fffffff
(XEN)
(XEN)
(XEN) Command line: console=dtuart dom0_mem=2048M console_timestamps=boot debug
bootscrub=0 vwfi=native sched=null
(XEN) [00000006bfc302ec] parameter "debug" unknown!
(XEN) [00000006bfcc0476] DEBUG init_pdx 294 start=0 end=80000000
(XEN) [00000006bfcd2400] DEBUG init_pdx 294 start=800000000 end=880000000
(XEN) [00000006bfce29ec] DEBUG init_pdx 294 start=50000000000 end=50080000000
(XEN) [00000006bfcf1768] DEBUG init_pdx 294 start=60000000000 end=60080000000
(XEN) [00000006bfd015a4] DEBUG init_pdx 294 start=70000000000 end=70080000000
(XEN) [00000006bfd1444f] DEBUG setup_mm 252
(XEN) [00000006bfd3dc6f] DEBUG setup_mm 273 start=0 size=80000000
ram_end=80000000 directmap_base_pdx=0
(XEN) [00000006bfd5616e] DEBUG setup_directmap_mappings 229 base_mfn=0
nr_mfns=80000 directmap_base_pdx=0 mfn_to_pdx=0
(XEN) [00000006bfd7d38a] DEBUG setup_directmap_mappings 237 base_mfn=0
nr_mfns=80000 directmap_base_pdx=0
(XEN) [00000006bfd92728] DEBUG setup_mm 273 start=800000000 size=80000000
ram_end=880000000 directmap_base_pdx=0
(XEN) [00000006bfdaba3b] DEBUG setup_directmap_mappings 229 base_mfn=800000
nr_mfns=80000 directmap_base_pdx=0 mfn_to_pdx=800000
(XEN) [00000006bfdcd79c] DEBUG setup_directmap_mappings 237 base_mfn=800000
nr_mfns=80000 directmap_base_pdx=0
(XEN) [00000006bfde4d82] DEBUG setup_mm 273 start=50000000000 size=80000000
ram_end=50080000000 directmap_base_pdx=0
(XEN) [00000006bfdfaef0] DEBUG setup_directmap_mappings 229 base_mfn=50000000
nr_mfns=80000 directmap_base_pdx=0 mfn_to_pdx=50000000
(XEN) [00000006bfe35249] Assertion '(mfn_to_pdx(maddr_to_mfn(ma)) -
directmap_base_pdx) < (DIRECTMAP_SIZE >> PAGE_SHIFT)' failed at
./arch/arm/include/asm/mmu/mm.h:72
(XEN) [00000006bfe68507] ----[ Xen-4.21-unstable arm64 debug=y Not tainted
]----
(XEN) [00000006bfe766bf] CPU: 0
(XEN) [00000006bfe832e0] PC: 00000a00002da70c setup_mm+0x284/0x308
(XEN) [00000006bfea5b1a] LR: 00000a00002da6b0
(XEN) [00000006bfeb1032] SP: 00000a0000327e00
(XEN) [00000006bfebf403] CPSR: 00000000200003c9 MODE:64-bit EL2h (Hypervisor,
handler)
(XEN) [00000006bfed4634] X0: 0000000000000017 X1: 0000000000000000 X2:
0000000050000000
(XEN) [00000006bfee4d11] X3: 000000004fffffff X4: 0000000000000020 X5:
0000000000000000
(XEN) [00000006bfef48cf] X6: 0000000000000000 X7: 0000000000000000 X8:
ffffffffffffffff
(XEN) [00000006bff047ac] X9: fefefefefefeff09 X10: 0000000000000080 X11:
0101010101010101
(XEN) [00000006bff153b4] X12: 0000000000000008 X13: 0000000000000009 X14:
0000000000000030
(XEN) [00000006bff2620d] X15: 00000a0000a00000 X16: 00000a0000291478 X17:
0000000000000000
(XEN) [00000006bff35c41] X18: 000000007be9bbe0 X19: 00000a0000292c40 X20:
00000a00002ade68
(XEN) [00000006bff465a5] X21: 0000050080000000 X22: 0000000000000000 X23:
0000000180000000
(XEN) [00000006bff57a51] X24: 0000000000000002 X25: 00000a0000292c50 X26:
0000000050000000
(XEN) [00000006bff67d91] X27: 0000000000080000 X28: 0000050000000000 FP:
00000a0000327e00
(XEN) [00000006bff76ebe]
(XEN) [00000006bff7c3e3] VTCR_EL2: 0000000000000000
(XEN) [00000006bff8501a] VTTBR_EL2: 0000000000000000
(XEN) [00000006bff8f616]
(XEN) [00000006bff94c4a] SCTLR_EL2: 0000000030cd183d
(XEN) [00000006bff9e3f7] HCR_EL2: 0000000000000038
(XEN) [00000006bffaac9c] TTBR0_EL2: 0000000022148000
(XEN) [00000006bffb6794]
(XEN) [00000006bffbc972] ESR_EL2: 00000000f2000001
(XEN) [00000006bffcb424] HPFAR_EL2: 0000000000000000
(XEN) [00000006bffd7c69] FAR_EL2: 0000000000000000
(XEN) [00000006bffe3719]
(XEN) [00000006bffecd4b] Xen stack trace from sp=00000a0000327e00:
(XEN) [00000006bfff9321] 00000a0000327e60 00000a00002e4378 0000000022200000
000000000000f000
(XEN) [00000006c000e3e1] 00000a0000c0a5c0 00000a0000332000 00000a0000a00000
0000000000000000
(XEN) [00000006c001f69c] 0000000000000000 0000000000000000 0000000000000000
000000007bff2f70
(XEN) [00000006c0031b91] 000000007be89ea0 00000a00002001a4 0000000022000000
fffff60021e00000
(XEN) [00000006c0041c20] 0000000022200000 0000000000001710 0000000000000000
0000000000000000
(XEN) [00000006c0052629] 0000000000000000 0000000000000000 0000000000000000
0000000000000000
(XEN) [00000006c0065bde] 0000000000000000 0000000000000000 0000000000000000
0000000000000000
(XEN) [00000006c00752d1] 0000000000000000 0000000000000000 0000000000000000
0000000000000000
(XEN) [00000006c00858cc] 0000000000000000 0000000000000000 0000000000000000
0000000000000000
(XEN) [00000006c0096b34] 0000000000000000 0000000000000000 0000000000000000
0000000000000000
(XEN) [00000006c00a72f3] 0000000000000000 0000000000000000 0000000000000000
0000000000000000
(XEN) [00000006c00b8357] 0000000000000000 0000000000000000 0000000000000000
0000000000000000
(XEN) [00000006c00ce60f] 0000000000000000 0000000000000000 0000000000000000
0000000000000000
(XEN) [00000006c00e2ee4] 0000000000000000 0000000000000000 0000000000000000
0000000000000000
(XEN) [00000006c00f53e7] 0000000000000000 0000000000000000 0000000000000000
0000000000000000
(XEN) [00000006c01091f3] 0000000000000000 0000000000000000 0000000000000000
0000000000000000
(XEN) [00000006c011cd30] Xen call trace:
(XEN) [00000006c01264b7] [<00000a00002da70c>] setup_mm+0x284/0x308 (PC)
(XEN) [00000006c01348a8] [<00000a00002da6b0>] setup_mm+0x228/0x308 (LR)
(XEN) [00000006c0144263] [<00000a00002e4378>] start_xen+0x118/0x9d0
(XEN) [00000006c01529c3] [<00000a00002001a4>]
arch/arm/arm64/head.o#primary_switched+0x4/0x24
(XEN) [00000006c0165f60]
(XEN) [00000006c0176bd8]
(XEN) [00000006c017c5cf] ****************************************
(XEN) [00000006c018964c] Panic on CPU 0:
(XEN) [00000006c0190b79] Assertion '(mfn_to_pdx(maddr_to_mfn(ma)) -
directmap_base_pdx) < (DIRECTMAP_SIZE >> PAGE_SHIFT)' failed at
./arch/arm/include/asm/mmu/mm.h:72
(XEN) [00000006c01af78d] ****************************************
diff --git a/xen/arch/arm/arm64/mmu/mm.c b/xen/arch/arm/arm64/mmu/mm.c
index 27327b11db..c1eb13219c 100644
--- a/xen/arch/arm/arm64/mmu/mm.c
+++ b/xen/arch/arm/arm64/mmu/mm.c
@@ -226,6 +226,7 @@ static void __init setup_directmap_mappings(unsigned long base_mfn,
(base_mfn - mfn_gb) * PAGE_SIZE;
}
+ printk("DEBUG %s %d base_mfn=%lx nr_mfns=%lx directmap_base_pdx=%lx mfn_to_pdx=%lx\n",__func__,__LINE__,base_mfn,nr_mfns,directmap_base_pdx,(unsigned long)mfn_to_pdx(_mfn(base_mfn)));
if ( base_mfn < mfn_x(directmap_mfn_start) )
panic("cannot add directmap mapping at %lx below heap start %lx\n",
base_mfn, mfn_x(directmap_mfn_start));
@@ -233,6 +234,7 @@ static void __init setup_directmap_mappings(unsigned long base_mfn,
rc = map_pages_to_xen((vaddr_t)__mfn_to_virt(base_mfn),
_mfn(base_mfn), nr_mfns,
PAGE_HYPERVISOR_RW | _PAGE_BLOCK);
+ printk("DEBUG %s %d base_mfn=%lx nr_mfns=%lx directmap_base_pdx=%lx\n",__func__,__LINE__,base_mfn,nr_mfns,directmap_base_pdx);
if ( rc )
panic("Unable to setup the directmap mappings.\n");
}
@@ -247,6 +249,7 @@ void __init setup_mm(void)
init_pdx();
+ printk("DEBUG %s %d\n",__func__,__LINE__);
/*
* We need some memory to allocate the page-tables used for the directmap
* mappings. But some regions may contain memory already allocated
@@ -267,19 +270,24 @@ void __init setup_mm(void)
ram_start = min(ram_start, bank->start);
ram_end = max(ram_end, bank_end);
+ printk("DEBUG %s %d start=%lx size=%lx ram_end=%lx directmap_base_pdx=%lx\n",__func__,__LINE__,bank->start,bank->size,ram_end, directmap_base_pdx);
setup_directmap_mappings(PFN_DOWN(bank->start),
PFN_DOWN(bank->size));
}
+ printk("DEBUG %s %d\n",__func__,__LINE__);
total_pages += ram_size >> PAGE_SHIFT;
directmap_virt_end = XENHEAP_VIRT_START + ram_end - ram_start;
directmap_mfn_start = maddr_to_mfn(ram_start);
directmap_mfn_end = maddr_to_mfn(ram_end);
+ printk("DEBUG %s %d\n",__func__,__LINE__);
max_page = PFN_DOWN(ram_end);
+ printk("DEBUG %s %d\n",__func__,__LINE__);
init_frametable();
+ printk("DEBUG %s %d\n",__func__,__LINE__);
init_staticmem_pages();
init_sharedmem_pages();
diff --git a/xen/arch/arm/mmu/mm.c b/xen/arch/arm/mmu/mm.c
index 69617a4986..c31ef3255b 100644
--- a/xen/arch/arm/mmu/mm.c
+++ b/xen/arch/arm/mmu/mm.c
@@ -25,6 +25,7 @@ init_frametable_chunk(unsigned long pdx_s, unsigned long pdx_e)
base_mfn = alloc_boot_pages(chunk_size >> PAGE_SHIFT, 32 << (20 - 12));
virt = (unsigned long)pdx_to_page(pdx_s);
+ printk("DEBUG %s %d virt=%lx base_mfn=%lx pfn_start=%lx pfn_end=%lx\n",__func__,__LINE__,(unsigned long)virt,mfn_x(base_mfn),mfn_x(pdx_to_mfn(pdx_s)),mfn_x(pdx_to_mfn(pdx_e)));
rc = map_pages_to_xen(virt, base_mfn, chunk_size >> PAGE_SHIFT,
PAGE_HYPERVISOR_RW | _PAGE_BLOCK);
if ( rc )
@@ -64,6 +65,7 @@ void __init init_frametable(void)
if ( nidx >= max_idx )
break;
+ printk("DEBUG %s %d start=%lx end=%lx\n",__func__,__LINE__,mfn_x(pdx_to_mfn(sidx * PDX_GROUP_COUNT)),mfn_x(pdx_to_mfn(eidx * PDX_GROUP_COUNT)));
init_frametable_chunk(sidx * PDX_GROUP_COUNT, eidx * PDX_GROUP_COUNT);
}
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index c9ad6bbab6..1f5c1866c4 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -291,6 +291,7 @@ void __init init_pdx(void)
bank_size = mem->bank[bank].size;
bank_end = bank_start + bank_size;
+ printk("DEBUG %s %d start=%lx end=%lx\n",__func__,__LINE__,bank_start,bank_end);
set_pdx_range(paddr_to_pfn(bank_start),
paddr_to_pfn(bank_end));
}