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

Re: [Xen-devel] How to boot domU and dom0 from a device tree



Hi Stefano,

On 6/14/19 9:53 PM, Stefano Stabellini wrote:
On Wed, 12 Jun 2019, Julien Grall wrote:
(Moving from xen-users to xen-devel).

On 11/06/2019 23:18, Stefano Stabellini wrote:
I managed to reproduced the issue, and I know how to get past it.  Try
using the raw kernel Image (arch/arm64/boot/Image) instead of Image.gz
for dom0 and domU. That fixed it for me.

Julien, I didn't manage to figure out what the issue is exactly, but it
looks like Image.gz loading is broken at the moment.

Do you mean Image.gz is broken from DomU? Because per the log provided by
Denis, this is working perfectly for Dom0 as we don't create domain in
parallel.

By reading the code I can already spot the reason of the first issue reported
by Denis. For reminder, this is when Dom0 and DomU are using the same module
address for the gzip Image.

This is because when probing the kernel for Dom0, the module will get
uncompressed and the module start/end will be updated to point to the
uncompress version. Because of that, the probe for DomU kernel will not be
able to find the module (the start addressed changed).

In this case, I think we only want to uncompress the module one time to avoid
wasting memory. The solution I have in mind requires some rework in Xen, I
would actually start by probing the information for all the domains, then
uncompress the kernels modules, and then finish to build the domain.

For the out of memory problem discussed in this e-mail, I think the problem is
not because of lack of memory in DomU. The problem is related to the
inflate/gunzip the code. The code is using an heap (see perform_gunzip) where
it allocates memory from.

I am assuming the kernels for Dom0 and DomU are exactly the same but they are
coming from different address. Am I correct? If so, I am a bit unsure this
worked the first time and not the second time. This probably want some
debugging to understand the problem. Denis, Stefano, can one of you look at
it?

I couldn't find exactly the root cause yet, but I can reproduce the
issue even with Dom0 only (no domUs, no dom0less):

Looking at Denis's report, the error does not seem to be the same:

(XEN) ****************************************
(XEN) Panic on CPU 0:
(XEN) Out of memory
(XEN) ****************************************


But I think they may be related (see below).


ee.
(XEN) *** LOADING DOMAIN 0 ***
(XEN) DEBUG kernel_probe 445
(XEN) Loading d0 kernel from boot module @ 0000000047000000
(XEN) Loading ramdisk from boot module @ 0000000042000000
(XEN) DEBUG kernel_decompress 268
(XEN) DEBUG kernel_decompress 272
(XEN) DEBUG kernel_decompress 279
(XEN) DEBUG kernel_decompress 284
(XEN) DEBUG kernel_decompress 291 kernel_order_out=52 output_size=0
(XEN)
(XEN) ****************************************
(XEN) Panic on CPU 0:
(XEN) Could not set up DOM0 guest OS
(XEN) ****************************************
(XEN)
(XEN) Reboot in five seconds...


The issue seems to be that output_size, returned by output_length(input,
size) is 0. Then, kernel_order_out is set to 52 which is too large. As a
consequence kernel_decompress returns with -ENOMEM.

I have just tried to use compressed kernel and can't reproduce your error. However, I think the two problems ("out of memory" and your one) are because the module size does not exactly match the size of the compressed image.

The uncompressed size is part of the footer (the last 4-bytes). As we only have the module size in hand, we assume it is equal to the compressed size. If not, then we will return whatever is in the last 4-bytes of the module.

This means the module size should exactly match the compressed image size. AFAICT, gzip format doesn't provide a field for the compressed size, so we can't do better in Xen.

In other word, the Device-Tree multiboot nodes should be created with the exact size of the compressed image.

Regardless that, I still think we have some issues when using the same compressed kernel for Dom0 and DomU (see in my previous e-mail).

Cheers,

--
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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