WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] Integration of the xen4xlilo patch. (by Tristan Gingold)

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Integration of the xen4xlilo patch. (by Tristan Gingold)
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sun, 20 Nov 2005 12:58:10 +0000
Delivery-date: Sun, 20 Nov 2005 12:58:57 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User djm@xxxxxxxxxxxxxxx
# Node ID d0a2b36f72f26c7ef4fb855215ede6aaa8ef8af3
# Parent  8c42a46de7f8b02d3516e6b8d83da5f74c37e44b
Integration of the xen4xlilo patch. (by Tristan Gingold)
It is now backward compatible: works with the old elilo.

diff -r 8c42a46de7f8 -r d0a2b36f72f2 xen/arch/ia64/xen/dom_fw.c
--- a/xen/arch/ia64/xen/dom_fw.c        Thu Nov 17 00:40:24 2005
+++ b/xen/arch/ia64/xen/dom_fw.c        Thu Nov 17 13:21:18 2005
@@ -686,6 +686,12 @@
        bp->console_info.orig_x = 0;
        bp->console_info.orig_y = 24;
        bp->fpswa = 0;
+        bp->initrd_start = (dom0_start+dom0_size) -
+                (PAGE_ALIGN(ia64_boot_param->initrd_size) + 4*1024*1024);
+        bp->initrd_size = ia64_boot_param->initrd_size;
+                printf(" initrd start %0xlx", bp->initrd_start);
+                printf(" initrd size %0xlx", bp->initrd_size);
+
 
        return bp;
 }
diff -r 8c42a46de7f8 -r d0a2b36f72f2 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Thu Nov 17 00:40:24 2005
+++ b/xen/arch/ia64/xen/domain.c        Thu Nov 17 13:21:18 2005
@@ -823,6 +823,7 @@
        unsigned long pkern_start;
        unsigned long pkern_entry;
        unsigned long pkern_end;
+       unsigned long pinitrd_start = 0;
        unsigned long ret, progress = 0;
 
 //printf("construct_dom0: starting\n");
@@ -841,12 +842,6 @@
        alloc_start = dom0_start;
        alloc_end = dom0_start + dom0_size;
        d->tot_pages = d->max_pages = dom0_size/PAGE_SIZE;
-       image_start = __va(ia64_boot_param->initrd_start);
-       image_len = ia64_boot_param->initrd_size;
-//printk("image_start=%lx, image_len=%lx\n",image_start,image_len);
-//printk("First word of image: %lx\n",*(unsigned long *)image_start);
-
-//printf("construct_dom0: about to call parseelfimage\n");
        dsi.image_addr = (unsigned long)image_start;
        dsi.image_len  = image_len;
        rc = parseelfimage(&dsi);
@@ -883,11 +878,18 @@
            return -EINVAL;
        }
 
+        if(initrd_start&&initrd_len){
+             pinitrd_start=(dom0_start+dom0_size) -
+                          (PAGE_ALIGN(initrd_len) + 4*1024*1024);
+
+             memcpy(__va(pinitrd_start),initrd_start,initrd_len);
+        }
+
        printk("METAPHYSICAL MEMORY ARRANGEMENT:\n"
               " Kernel image:  %lx->%lx\n"
               " Entry address: %lx\n"
-              " Init. ramdisk:   (NOT IMPLEMENTED YET)\n",
-              pkern_start, pkern_end, pkern_entry);
+               " Init. ramdisk: %lx len %lx\n",
+               pkern_start, pkern_end, pkern_entry, pinitrd_start, initrd_len);
 
        if ( (pkern_end - pkern_start) > (d->max_pages * PAGE_SIZE) )
        {
diff -r 8c42a46de7f8 -r d0a2b36f72f2 xen/arch/ia64/xen/xensetup.c
--- a/xen/arch/ia64/xen/xensetup.c      Thu Nov 17 00:40:24 2005
+++ b/xen/arch/ia64/xen/xensetup.c      Thu Nov 17 13:21:18 2005
@@ -153,7 +153,8 @@
     void *heap_start;
     int i;
     unsigned long max_mem, nr_pages, firsthole_start;
-    unsigned long dom0_memory_start, dom0_memory_end;
+    unsigned long dom0_memory_start, dom0_memory_size;
+    unsigned long dom0_initrd_start, dom0_initrd_size;
     unsigned long initial_images_start, initial_images_end;
 
     running_on_sim = is_platform_hp_ski();
@@ -190,8 +191,30 @@
     firsthole_start = 0;
     efi_memmap_walk(xen_find_first_hole, &firsthole_start);
 
+    if (ia64_boot_param->domain_start == 0
+       || ia64_boot_param->domain_size == 0) {
+           /* This is possible only with the old elilo, which does not support
+              a vmm.  Fix now, and continue without initrd.  */
+           printk ("Your elilo is not Xen-aware.  Bootparams fixed\n");
+           ia64_boot_param->domain_start = ia64_boot_param->initrd_start;
+           ia64_boot_param->domain_size = ia64_boot_param->initrd_size;
+           ia64_boot_param->initrd_start = 0;
+           ia64_boot_param->initrd_size = 0;
+    }
+
     initial_images_start = xenheap_phys_end;
-    initial_images_end = initial_images_start + ia64_boot_param->initrd_size;
+    initial_images_end = initial_images_start +
+       PAGE_ALIGN(ia64_boot_param->domain_size);
+
+    /* also reserve space for initrd */
+    if (ia64_boot_param->initrd_start && ia64_boot_param->initrd_size)
+       initial_images_end += PAGE_ALIGN(ia64_boot_param->initrd_size);
+    else {
+       /* sanity cleanup */
+       ia64_boot_param->initrd_size = 0;
+       ia64_boot_param->initrd_start = 0;
+    }
+
 
     /* Later may find another memory trunk, even away from xen image... */
     if (initial_images_end > firsthole_start) {
@@ -203,11 +226,21 @@
 
     /* This copy is time consuming, but elilo may load Dom0 image
      * within xenheap range */
-    printk("ready to move Dom0 to 0x%lx...", initial_images_start);
+    printk("ready to move Dom0 to 0x%lx with len %lx...", initial_images_start,
+          ia64_boot_param->domain_size);
+
     memmove(__va(initial_images_start),
+          __va(ia64_boot_param->domain_start),
+          ia64_boot_param->domain_size);
+//    ia64_boot_param->domain_start = initial_images_start;
+
+    printk("ready to move initrd to 0x%lx with len %lx...",
+          initial_images_start+PAGE_ALIGN(ia64_boot_param->domain_size),
+          ia64_boot_param->initrd_size);
+    
memmove(__va(initial_images_start+PAGE_ALIGN(ia64_boot_param->domain_size)),
+
           __va(ia64_boot_param->initrd_start),
           ia64_boot_param->initrd_size);
-    ia64_boot_param->initrd_start = initial_images_start;
     printk("Done\n");
 
     /* first find highest page frame number */
@@ -329,13 +362,16 @@
      * We're going to setup domain0 using the module(s) that we stashed safely
      * above our heap. The second module, if present, is an initrd ramdisk.
      */
-printk("About to call construct_dom0()\n");
-    dom0_memory_start = __va(ia64_boot_param->initrd_start);
-    dom0_memory_end = ia64_boot_param->initrd_size;
-    if ( construct_dom0(dom0, dom0_memory_start, dom0_memory_end,
-                       0,
-                        0,
-                       0) != 0)
+    printk("About to call construct_dom0()\n");
+    dom0_memory_start = __va(initial_images_start);
+    dom0_memory_size = ia64_boot_param->domain_size;
+    dom0_initrd_start = __va(initial_images_start +
+                            PAGE_ALIGN(ia64_boot_param->domain_size));
+    dom0_initrd_size = ia64_boot_param->initrd_size;
+ 
+    if ( construct_dom0(dom0, dom0_memory_start, dom0_memory_size,
+                        dom0_initrd_start,dom0_initrd_size,
+                       0) != 0)
         panic("Could not set up DOM0 guest OS\n");
 
     /* PIN domain0 on CPU 0.  */
@@ -345,22 +381,28 @@
 #ifdef CLONE_DOMAIN0
     {
     int i;
-    dom0_memory_start = __va(ia64_boot_param->initrd_start);
-    dom0_memory_end = ia64_boot_param->initrd_size;
+    dom0_memory_start = __va(ia64_boot_param->domain_start);
+    dom0_memory_size = ia64_boot_param->domain_size;
+
     for (i = 0; i < CLONE_DOMAIN0; i++) {
-printk("CONSTRUCTING DOMAIN0 CLONE #%d\n",i+1);
-        if ( construct_domU(clones[i], dom0_memory_start, dom0_memory_end,
-                        0, 
-                        0,
-                       0) != 0)
+      printk("CONSTRUCTING DOMAIN0 CLONE #%d\n",i+1);
+      if ( construct_domU(clones[i], dom0_memory_start, dom0_memory_size,
+                         dom0_initrd_start,dom0_initrd_size,
+                         0) != 0)
             panic("Could not set up DOM0 clone %d\n",i);
     }
     }
 #endif
 
     /* The stash space for the initial kernel image can now be freed up. */
-    init_domheap_pages(ia64_boot_param->initrd_start,
-                      ia64_boot_param->initrd_start + 
ia64_boot_param->initrd_size);
+    init_domheap_pages(ia64_boot_param->domain_start,
+                       ia64_boot_param->domain_size);
+    /* throw away initrd area passed from elilo */
+    if (ia64_boot_param->initrd_size) {
+        init_domheap_pages(ia64_boot_param->initrd_start,
+                          ia64_boot_param->initrd_size);
+    }
+
     if (!running_on_sim)  // slow on ski and pages are pre-initialized to zero
        scrub_heap_pages();
 
diff -r 8c42a46de7f8 -r d0a2b36f72f2 xen/include/asm-ia64/linux-xen/asm/system.h
--- a/xen/include/asm-ia64/linux-xen/asm/system.h       Thu Nov 17 00:40:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/system.h       Thu Nov 17 13:21:18 2005
@@ -56,6 +56,10 @@
        __u64 fpswa;            /* physical address of the fpswa interface */
        __u64 initrd_start;
        __u64 initrd_size;
+//for loading initrd for dom0
+       __u64 domain_start;     /* virtual address where the boot time domain 
begins */
+       __u64 domain_size;      /* how big is the boot domain */
+
 } *ia64_boot_param;
 
 /*

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Integration of the xen4xlilo patch. (by Tristan Gingold), Xen patchbot -unstable <=