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-ppc-devel

[XenPPC] [PATCH 1/3] libxc: add start_info_t node to devtree

To: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Subject: [XenPPC] [PATCH 1/3] libxc: add start_info_t node to devtree
From: Ryan Harper <ryanh@xxxxxxxxxx>
Date: Wed, 24 Jan 2007 11:41:10 -0600
Delivery-date: Wed, 24 Jan 2007 09:41:51 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-ppc-devel-request@lists.xensource.com?subject=help>
List-id: Xen PPC development <xen-ppc-devel.lists.xensource.com>
List-post: <mailto:xen-ppc-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-ppc-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.6+20040907i
This patch creates a new node, /xen/start_info_t in the flat devtree.
It adds a property for each field of the start_info_t structure that
xc_linux_build used to fill-out.  I've also removed the helper functions
which created/filled-out the start_info_t structure.

This patch depends on Patch2 which modifies linux:xen_init_early().

-- 
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
(512) 838-9253   T/L: 678-9253
ryanh@xxxxxxxxxx


diffstat output:
 mk_flatdevtree.c |   36 +++++++++++++++++++++-----
 mk_flatdevtree.h |    6 ++--
 xc_linux_build.c |   76 +++++++++++++++++++++++--------------------------------
 3 files changed, 67 insertions(+), 51 deletions(-)

Signed-off-by: Ryan Harper <ryanh@xxxxxxxxxx>
---
diff -r ed5ee9dde0bd tools/libxc/powerpc64/mk_flatdevtree.c
--- a/tools/libxc/powerpc64/mk_flatdevtree.c    Sun Jan 21 08:17:46 2007 -0500
+++ b/tools/libxc/powerpc64/mk_flatdevtree.c    Tue Jan 23 09:50:43 2007 -0600
@@ -316,7 +316,10 @@ int make_devtree(struct ft_cxt *root,
                  unsigned long shadow_mb,
                  unsigned long initrd_base,
                  unsigned long initrd_len,
-                 const char *bootargs)
+                 const char *bootargs,
+                 unsigned long console_evtchn,
+                 unsigned long store_evtchn,
+                 unsigned long nr_pages)
 {
     struct boot_param_header *bph = NULL;
     uint64_t val[2];
@@ -419,11 +422,6 @@ int make_devtree(struct ft_cxt *root,
     /* xen = root.addnode('xen') */
     ft_begin_node(root, "xen");
 
-    /* start-info is the first page in the RMA reserved area */
-    val[0] = cpu_to_be64((u64) (rma_bytes - rma_reserve));
-    val[1] = cpu_to_be64((u64) PAGE_SIZE);
-    ft_prop(root, "start-info", val, sizeof(val));
-
     /*  xen.addprop('version', 'Xen-3.0-unstable\0') */
     ft_prop_str(root, "version", "Xen-3.0-unstable");
 
@@ -448,6 +446,32 @@ int make_devtree(struct ft_cxt *root,
     ft_prop(root, "interrupts", val32, sizeof(val32));
 
     /* end of console */
+    ft_end_node(root);
+
+    /* mark up start_info fields here */
+    ft_begin_node(root, "start_info_t");
+
+    ft_prop_str(root, "magic", "xen-3.0-powerpc64HV");
+
+    val[0] = cpu_to_be64((u64) nr_pages);
+    ft_prop(root, "nr_pages", &(val[0]), sizeof(val[0]));
+
+    val[0] = cpu_to_be64((u64) (rma_bytes - PAGE_SIZE));
+    ft_prop(root, "shared_info", &(val[0]), sizeof(val[0]));
+
+    val[0] = cpu_to_be64((u64) ((rma_bytes >> PAGE_SHIFT) - 2));
+    ft_prop(root, "store_mfn", &(val[0]), sizeof(val[0]));
+
+    ft_prop_int(root, "store_evtchn", store_evtchn);
+
+    /* start_info->console.domU.mfn */
+    val[0] = cpu_to_be64((u64) ((rma_bytes >> PAGE_SHIFT) - 3));
+    ft_prop(root, "console_domU_mfn", &(val[0]), sizeof(val[0]));
+
+    /* start_info->console.domU.evtchn */
+    ft_prop_int(root, "console_domU_evtchn", console_evtchn);
+
+    /* end of start_info_t */
     ft_end_node(root);
 
     /* end of xen node */
diff -r ed5ee9dde0bd tools/libxc/powerpc64/mk_flatdevtree.h
--- a/tools/libxc/powerpc64/mk_flatdevtree.h    Sun Jan 21 08:17:46 2007 -0500
+++ b/tools/libxc/powerpc64/mk_flatdevtree.h    Mon Jan 22 15:38:46 2007 -0600
@@ -32,8 +32,10 @@ extern int make_devtree(struct ft_cxt *r
                         unsigned long shadow_mb,
                         unsigned long initrd_base,
                         unsigned long initrd_len,
-                        const char *bootargs);
-
+                        const char *bootargs,
+                        unsigned long console_evtchn,
+                        unsigned long store_evtchn,
+                        unsigned long nr_pages);
 #define MAX_PATH 200
 #define BUFSIZE 1024
 #define BPH_SIZE 16*1024
diff -r ed5ee9dde0bd tools/libxc/powerpc64/xc_linux_build.c
--- a/tools/libxc/powerpc64/xc_linux_build.c    Sun Jan 21 08:17:46 2007 -0500
+++ b/tools/libxc/powerpc64/xc_linux_build.c    Tue Jan 23 10:14:55 2007 -0600
@@ -109,34 +109,6 @@ out:
     return rc;
 }
 
-static unsigned long create_start_info(
-        start_info_t *start_info,
-        unsigned int console_evtchn,
-        unsigned int store_evtchn,
-        unsigned long nr_pages,
-        unsigned long rma_pages)
-{
-    unsigned long start_info_addr;
-    uint64_t rma_top;
-
-    memset(start_info, 0, sizeof(*start_info));
-    snprintf(start_info->magic, sizeof(start_info->magic),
-             "xen-%d.%d-powerpc64HV", 3, 0);
-
-    rma_top = rma_pages << PAGE_SHIFT;
-    DPRINTF("RMA top = 0x%"PRIX64"\n", rma_top);
-
-    start_info->nr_pages = nr_pages;
-    start_info->shared_info = rma_top - PAGE_SIZE;
-    start_info->store_mfn = (rma_top >> PAGE_SHIFT) - 2;
-    start_info->store_evtchn = store_evtchn;
-    start_info->console.domU.mfn = (rma_top >> PAGE_SHIFT) - 3;
-    start_info->console.domU.evtchn = console_evtchn;
-    start_info_addr = rma_top - 4*PAGE_SIZE;
-
-    return start_info_addr;
-}
-
 static void free_page_array(xen_pfn_t *page_array)
 {
     free(page_array);
@@ -191,7 +163,6 @@ int xc_linux_build(int xc_handle,
                    unsigned int console_evtchn,
                    unsigned long *console_mfn)
 {
-    start_info_t start_info;
     struct domain_setup_info dsi;
     xen_pfn_t *page_array = NULL;
     unsigned long nr_pages;
@@ -199,7 +170,6 @@ int xc_linux_build(int xc_handle,
     unsigned long kern_addr;
     unsigned long initrd_base = 0;
     unsigned long initrd_len = 0;
-    unsigned long start_info_addr;
     unsigned long rma_pages;
     unsigned long shadow_mb;
     u32 remaining_kb;
@@ -208,7 +178,9 @@ int xc_linux_build(int xc_handle,
     int rma_log = 26;  /* 64MB RMA */
     int rc = 0;
     int op;
+    void *si;
     struct ft_cxt devtree;
+    u64 val;
 
     DPRINTF("%s\n", __func__);
 
@@ -283,23 +255,41 @@ int xc_linux_build(int xc_handle,
 
     /* build the devtree here */
     DPRINTF("constructing devtree\n");
-    if (make_devtree(&devtree, domid, mem_mb, (rma_pages*PAGE_SIZE), shadow_mb,
-                     initrd_base, initrd_len, cmdline) < 0) {
+    if (make_devtree(&devtree, domid, mem_mb, (rma_pages << 12), shadow_mb, 
+                     initrd_base, initrd_len, cmdline, console_evtchn,
+                     store_evtchn, nr_pages) < 0) {
         DPRINTF("failed to create flattened device tree\n");
         rc = -1;
         goto out;
     }
-    
-    /* start_info stuff: about to be removed  */
-    start_info_addr = create_start_info(&start_info, console_evtchn,
-                                        store_evtchn, nr_pages, rma_pages);
-    *console_mfn = page_array[start_info.console.domU.mfn];
-    *store_mfn = page_array[start_info.store_mfn];
-    if (install_image(xc_handle, domid, page_array, &start_info,
-                      start_info_addr, sizeof(start_info_t))) {
-        rc = -1;
-        goto out;
-    }
+
+    /* fetch console_mfn and store_mfn values from devtree */
+    si = ft_find_node((void *)devtree.bph, "/xen/start_info_t");
+    if (si == NULL) {
+        DPRINTF("failed to find /xen/start_info_t in devtree\n");
+        rc = -1;
+        goto out;
+    }
+
+    /* mfn properties are stored as u64s */
+    if (ft_get_prop((void *)devtree.bph, si, "console_domU_mfn",
+                    &val, sizeof(val)) < 0) {
+        DPRINTF("failed to get 'console_domU_mfn' property\n");
+        rc = -1;
+        goto out;
+    }
+    *console_mfn = page_array[(xen_pfn_t)val];
+
+    if (ft_get_prop((void *)devtree.bph, si, "store_mfn",
+                    &val, sizeof(val)) < 0) {
+        DPRINTF("failed to get 'store_mfn' property\n");
+        rc = -1;
+        goto out;
+    }
+    *store_mfn = page_array[(xen_pfn_t)val];
+
+    DPRINTF("console_mfn->%08lx store_mfn->%08lx\n", *console_mfn,
+            *store_mfn);
 
     devtree_addr = DEVTREE_ADDR;
     DPRINTF("loading flattened device tree to 0x%lx[0x%x]\n",

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