[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] xen/arm: RAM address alignment


   With UEFI boot and with RAM start address is from 0xc00000, the
fails to map because offset becomes 0xfffff400.

base_mfn always assumes 1GB boundary so with base_mfn passed as 0xc00
it becomes 0x0
where as xenheap_mfn_start is 0xc00. So offset computation becomes negative.
See below log with some debug prints

Is my observation is correct?

Question is why base_mfn should be always aligned to 1GB boundary?

void __init setup_xenheap_mappings(unsigned long base_mfn,
                                   unsigned long nr_mfns)
    lpae_t *first, pte;
    unsigned long offset, end_mfn;
    vaddr_t vaddr;

    /* First call sets the xenheap physical offset. */
    if ( xenheap_mfn_start == ~0UL )
        xenheap_mfn_start = base_mfn;

    if ( base_mfn < xenheap_mfn_start )
        panic("cannot add xenheap mapping at %lx below heap start %lx",
              base_mfn, xenheap_mfn_start);

    end_mfn = base_mfn + nr_mfns;

    /* Align to previous 1GB boundary */
    base_mfn &= ~((FIRST_SIZE>>PAGE_SHIFT)-1);

    offset = pfn_to_pdx(base_mfn - xenheap_mfn_start);
    vaddr = DIRECTMAP_VIRT_START + offset*PAGE_SIZE;

(XEN) Checking for initrd in /chosen
(XEN) RAM: 0000000000c00000 - 0000000077ffffff
(XEN) RAM: 0000000078000000 - 000000007801ffff
(XEN) RAM: 0000000078020000 - 000000007a1c5fff
(XEN) RAM: 000000007a895000 - 000000007a895fff
(XEN) RAM: 000000007aa85000 - 000000007ab6ffff
(XEN) RAM: 000000007ab70000 - 000000007b7e5fff
(XEN) RAM: 000000007b7e6000 - 000000007b8d0fff
(XEN) RAM: 000000007b8d1000 - 000000007b996fff
(XEN) RAM: 000000007b997000 - 000000007f219fff
(XEN) RAM: 000000007f21a000 - 000000007f24cfff
(XEN) RAM: 000000007f24d000 - 000000007f26cfff
(XEN) RAM: 000000007f26d000 - 000000007f26efff
(XEN) RAM: 000000007f26f000 - 000000007f273fff
(XEN) RAM: 000000007f274000 - 000000007f279fff
(XEN) RAM: 000000007f27a000 - 000000007f282fff
(XEN) RAM: 000000007f283000 - 000000007f284fff
(XEN) RAM: 000000007f285000 - 000000007f9a3fff
(XEN) RAM: 000000007f9a4000 - 000000007fa29fff
(XEN) RAM: 000000007fa2a000 - 000000007fb33fff
(XEN) RAM: 000000007fb7a000 - 000000007fffffff
(XEN) MODULE[0]: 000000007a893000 - 000000007a895000 Device Tree
(XEN) MODULE[1]: 000000007a1c8000 - 000000007a8926a8 Kernel
console=hvc0 earlycon=pl011,0x87e024000000 mem=512M debug=y rw
root=/dev/sda xen.fifo_events=0
(XEN) Command line: xen no-bootscrub console=dtuart conswitch=x
dtuart=serial0 earlyprintk=pl011,0x87e024000000 debug=y
(XEN) Placing Xen at 0x0000000079e00000-0x000000007a000000
(XEN) Update BOOTMOD_XEN from 000000007a897000-000000007a999d81 =>
(XEN) In setup_mm line 626
(XEN)     bank start 0xc00000 bank size 0x77400000 bank end 0x78000000
(XEN)     new ram start 0xc00000 size 0x77400000 end 0x78000000
(XEN) In setup_xenheap_mappings >>>>>> base_mfn 0xc00 nr_mfns 0x77400
xenheap_mfn_start 0xffffffffffffffff
(XEN) In setup_xenheap_mappings offset 0xfffffffffffff400 vaddr
0x7fffff400000 base_mfn 0x0 end_mfn 0x78000
(XEN) ****************************************
(XEN) Panic on CPU 0:
(XEN) Boot BUG at page_alloc.c:266
(XEN) ****************************************
(XEN) Reboot in five seconds...

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.