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

dom0less boot two compressed kernel images out-of-memory work-around


  • To: "xen-users@xxxxxxxxxxxxxxxxxxxx" <xen-users@xxxxxxxxxxxxxxxxxxxx>
  • From: Charles Chiou <cchiou@xxxxxxxxxxxxx>
  • Date: Mon, 22 Feb 2021 05:02:27 +0000
  • Accept-language: en-US, zh-TW
  • Delivery-date: Mon, 22 Feb 2021 05:03:24 +0000
  • List-id: Xen user discussion <xen-users.lists.xenproject.org>
  • Thread-index: AdcI11fXdr1s8424TwKZN3/zNiqdwQ==
  • Thread-topic: dom0less boot two compressed kernel images out-of-memory work-around

Hello,

When trying to boot two zImage using dom0less boot on ARM, we encountered this 
problem when xen runs gunzip on second guest:

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

And worked around it with the following patch. We'd like to check to see if 
this is a known issue and if the work-around looks reasonable. Thank you


diff --git a/xen/common/gunzip.c b/xen/common/gunzip.c
index db4efcd34b..e5bd19ba7f 100644
--- a/xen/common/gunzip.c
+++ b/xen/common/gunzip.c
@@ -113,8 +113,10 @@ __init int perform_gunzip(char *output, char *image, 
unsigned long image_len)

     window = (unsigned char *)output;

+    if (!free_mem_ptr) {
         free_mem_ptr = (unsigned long)alloc_xenheap_pages(HEAPORDER, 0);
         free_mem_end_ptr = free_mem_ptr + (PAGE_SIZE << HEAPORDER);
+    }

     inbuf = (unsigned char *)image;
     insize = image_len;
@@ -131,7 +133,12 @@ __init int perform_gunzip(char *output, char *image, 
unsigned long image_len)
         rc = 0;
     }

+    if (free_mem_ptr) {
         free_xenheap_pages((void *)free_mem_ptr, HEAPORDER);
+        free_mem_ptr = 0;
+    }
+
+    bytes_out = 0;

     return rc;
}
diff --git a/xen/common/inflate.c b/xen/common/inflate.c
index f99c985d61..de96002188 100644
--- a/xen/common/inflate.c
+++ b/xen/common/inflate.c
@@ -244,7 +244,7 @@ static void *INIT malloc(int size)

     if (size < 0)
         error("Malloc error");
-    if (!malloc_ptr)
+    if ((!malloc_ptr) || (!malloc_count))
         malloc_ptr = free_mem_ptr;

     malloc_ptr = (malloc_ptr + 3) & ~3;     /* Align */

--
Charles Chiou


NOTE: This email (including attachments) contain Ambarella Proprietary and/or 
Confidential Information and is intended solely for the use of the 
individual(s) to whom it is addressed. Any unauthorized review, use, 
disclosure, distribute, copy, or print is prohibited. If you are not an 
intended recipient, please contact the sender by reply email and destroy all 
copies of the original message. Thank you.



 


Rackspace

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