From: Julien Grall <julien@xen.org>
To: Henry Wang <Henry.Wang@arm.com>,
"sstabellini@kernel.org" <sstabellini@kernel.org>,
"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Wei Chen <Wei.Chen@arm.com>, Penny Zheng <Penny.Zheng@arm.com>,
Bertrand Marquis <Bertrand.Marquis@arm.com>
Subject: Re: Discussion of Xenheap problems on AArch64
Date: Sat, 15 May 2021 20:11:27 +0100 [thread overview]
Message-ID: <7247122c-127d-705c-78a5-7f9460f5821a@xen.org> (raw)
In-Reply-To: <PA4PR08MB6253E95579D8277D7FD1BE9A92509@PA4PR08MB6253.eurprd08.prod.outlook.com>
Hi Henry,
On 14/05/2021 05:35, Henry Wang wrote:
>> From: Julien Grall <julien@xen.org>
> Hi Julien,
>
>>
>> On 11/05/2021 02:11, Henry Wang wrote:
>>> Hi Julien,
>> Hi Henry,
>>>
>>>> From: Julien Grall <julien@xen.org>
>>>> Hi Henry,
>>>>
>>>> On 07/05/2021 05:06, Henry Wang wrote:
>>>>>> From: Julien Grall <julien@xen.org>
>>>>>> On 28/04/2021 10:28, Henry Wang wrote:
>>>> [...]
>>>>
>>>>> when I continue booting Xen, I got following error log:
>>>>>
>>>>> (XEN) Xen call trace:
>>>>> (XEN) [<00000000002b5a5c>] alloc_boot_pages+0x94/0x98 (PC)
>>>>> (XEN) [<00000000002ca3bc>] setup_frametable_mappings+0xa4/0x108
>>>> (LR)
>>>>> (XEN) [<00000000002ca3bc>] setup_frametable_mappings+0xa4/0x108
>>>>> (XEN) [<00000000002cb988>] start_xen+0x344/0xbcc
>>>>> (XEN) [<00000000002001c0>]
>>>> arm64/head.o#primary_switched+0x10/0x30
>>>>> (XEN)
>>>>> (XEN) ****************************************
>>>>> (XEN) Panic on CPU 0:
>>>>> (XEN) Xen BUG at page_alloc.c:432
>>>>> (XEN) ****************************************
>>>>
>>>> This is happening without my patch series applied, right? If so, what
>>>> happen if you apply it?
>>>
>>> No, I am afraid this is with your patch series applied, and that is why I
>>> am a little bit confused about the error log...
>>
>> You are hitting the BUG() at the end of alloc_boot_pages(). This is hit
>> because the boot allocator couldn't allocate memory for your request.
>>
>> Would you be able to apply the following diff and paste the output here?
>
> Thank you, of course yes, please see below output attached :)
>
>>
>> diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
>> index ace6333c18ea..dbb736fdb275 100644
>> --- a/xen/common/page_alloc.c
>> +++ b/xen/common/page_alloc.c
>> @@ -329,6 +329,8 @@ void __init init_boot_pages(paddr_t ps, paddr_t pe)
>> if ( pe <= ps )
>> return;
>>
>> + printk("%s: ps %"PRI_paddr" pe %"PRI_paddr"\n", __func__, ps, pe);
> ^ FYI: I have to change this PRI_paddr to PRIpaddr
> to make compiler happy
Ah yes, we don't have a variant with _. I thought compiled test before
sending it :(.
>
>> +
>> first_valid_mfn = mfn_min(maddr_to_mfn(ps), first_valid_mfn);
>>
>> bootmem_region_add(ps >> PAGE_SHIFT, pe >> PAGE_SHIFT);
>> @@ -395,6 +397,8 @@ mfn_t __init alloc_boot_pages(unsigned long nr_pfns,
>> unsigned long pfn_align)
>> unsigned long pg, _e;
>> unsigned int i = nr_bootmem_regions;
>>
>> + printk("%s: nr_pfns %lu pfn_align %lu\n", __func__, nr_pfns,
>> pfn_align);
>> +
>> BUG_ON(!nr_bootmem_regions);
>>
>> while ( i-- )
>>
>
> I also added some printk to make sure the dtb is parsed correctly, and for the
> Error case, I get following log:
Thank you for the log.
>
> (XEN) ----------banks=2--------
> (XEN) ----------start=80000000--------
> (XEN) ----------size=7F000000--------
> (XEN) ----------start=F900000000--------
> (XEN) ----------size=80000000--------
> (XEN) Checking for initrd in /chosen
> (XEN) RAM: 0000000080000000 - 00000000feffffff
> (XEN) RAM: 000000f900000000 - 000000f97fffffff
> (XEN)
> (XEN) MODULE[0]: 0000000084000000 - 00000000841464c8 Xen
> (XEN) MODULE[1]: 00000000841464c8 - 0000000084148c9b Device Tree
> (XEN) MODULE[2]: 0000000080080000 - 0000000081080000 Kernel
> (XEN) RESVD[0]: 0000000080000000 - 0000000080010000
> (XEN)
> (XEN) Command line: noreboot dom0_mem=1024M console=dtuart
> dtuart=serial0 bootscrub=0
> (XEN) PFN compression on bits 21...22
> (XEN) init_boot_pages: ps 0000000080010000 pe 0000000080080000
The size of this region is 448MB.
> (XEN) init_boot_pages: ps 0000000081080000 pe 0000000084000000
The size of this region is 47MB.
> (XEN) init_boot_pages: ps 0000000084149000 pe 00000000ff000000
The size of this region is 1966MB.
> (XEN) alloc_boot_pages: nr_pfns 1 pfn_align 1
> (XEN) alloc_boot_pages: nr_pfns 1 pfn_align 1
> (XEN) alloc_boot_pages: nr_pfns 1 pfn_align 1
> (XEN) init_boot_pages: ps 000000f900000000 pe 000000f980000000
The size of this region is 2048MB.
> (XEN) alloc_boot_pages: nr_pfns 909312 pfn_align 8192
This is asking for 3552MB of contiguous memory which cannot be
accommodated. In any case, this is quite a large region to ask.
Same...
> (XEN) Xen BUG at page_alloc.c:436
>
> To compare with the maximum start address (f800000000) of second part mem
> where xen boots correctly, I also attached the log for your information:
>
> (XEN) ----------banks=2--------
> (XEN) ----------start=80000000--------
> (XEN) ----------size=7F000000--------
> (XEN) ----------start=F800000000--------
> (XEN) ----------size=80000000--------
> (XEN) Checking for initrd in /chosen
> (XEN) RAM: 0000000080000000 - 00000000feffffff
> (XEN) RAM: 000000f800000000 - 000000f87fffffff
> (XEN)
> (XEN) MODULE[0]: 0000000084000000 - 00000000841464c8 Xen
> (XEN) MODULE[1]: 00000000841464c8 - 0000000084148c9b Device Tree
> (XEN) MODULE[2]: 0000000080080000 - 0000000081080000 Kernel
> (XEN) RESVD[0]: 0000000080000000 - 0000000080010000
> (XEN)
> (XEN) Command line: noreboot dom0_mem=1024M console=dtuart
> dtuart=serial0 bootscrub=0
> (XEN) PFN compression on bits 20...22
> (XEN) init_boot_pages: ps 0000000080010000 pe 0000000080080000
> (XEN) init_boot_pages: ps 0000000081080000 pe 0000000084000000
> (XEN) init_boot_pages: ps 0000000084149000 pe 00000000ff000000
> (XEN) alloc_boot_pages: nr_pfns 1 pfn_align 1
> (XEN) alloc_boot_pages: nr_pfns 1 pfn_align 1
> (XEN) alloc_boot_pages: nr_pfns 1 pfn_align 1
> (XEN) init_boot_pages: ps 000000f800000000 pe 000000f880000000
> (XEN) alloc_boot_pages: nr_pfns 450560 pfn_align 8192
... here. We are trying to allocate a 1.5GB frametable. You have only
4GB of memory so the frametable should be a lot smaller (few tens of MB).
This is happening because PDX is not able to find many bits to compress.
I am not sure we can compress more with the current PDX algorithm. This
may require some extensive improvement to reduce the footprint.
On a previous e-mail, you said you tweaked the FVP model to set those
regions. Were you trying to mimick the memory layout of a real HW
(either current or future)?
Cheers,
--
Julien Grall
next prev parent reply other threads:[~2021-05-15 19:11 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-21 6:28 Discussion of Xenheap problems on AArch64 Henry Wang
2021-04-21 9:03 ` Julien Grall
2021-04-21 9:32 ` Henry Wang
2021-04-25 20:19 ` Julien Grall
2021-04-27 6:29 ` Henry Wang
2021-04-28 9:28 ` Henry Wang
2021-04-28 12:46 ` Julien Grall
2021-05-07 4:06 ` Henry Wang
2021-05-10 16:58 ` Julien Grall
2021-05-11 1:11 ` Henry Wang
2021-05-13 18:18 ` Julien Grall
2021-05-14 4:35 ` Henry Wang
2021-05-15 19:11 ` Julien Grall [this message]
2021-05-17 6:38 ` Henry Wang
2021-05-18 14:09 ` Julien Grall
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7247122c-127d-705c-78a5-7f9460f5821a@xen.org \
--to=julien@xen.org \
--cc=Bertrand.Marquis@arm.com \
--cc=Henry.Wang@arm.com \
--cc=Penny.Zheng@arm.com \
--cc=Wei.Chen@arm.com \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).