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] [xenppc-unstable] [TOOLS][POWERPC] merge

To: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Subject: [XenPPC] [xenppc-unstable] [TOOLS][POWERPC] merge
From: Xen patchbot-xenppc-unstable <patchbot-xenppc-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sat, 11 Nov 2006 17:19:34 +0000
Delivery-date: Sat, 11 Nov 2006 09:22:52 -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>
Reply-to: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-ppc-devel-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Jimi Xenidis <jimix@xxxxxxxxxxxxxx>
# Node ID e0330d789a40959acc267ec342a6f907a8d73abc
# Parent  4d4f0d52c1934a50a67d3fe9bd30b4f7e23427fe
[TOOLS][POWERPC] merge

Signed-off-by: Jimi Xenidis <jimix@xxxxxxxxxxxxxx>
---
 tools/libxc/powerpc64/utils.c           |    2 
 tools/libxc/powerpc64/xc_linux_build.c  |    4 -
 tools/libxc/powerpc64/xc_prose_build.c  |    4 -
 tools/libxc/xenguest.h                  |    1 
 tools/python/xen/lowlevel/xc/xc.c       |   11 ++--
 tools/python/xen/xend/FlatDeviceTree.py |    2 
 tools/python/xen/xend/XendDomainInfo.py |   84 +++++++++++++++++++++++++++++++-
 tools/python/xen/xend/image.py          |    1 
 8 files changed, 97 insertions(+), 12 deletions(-)

diff -r 4d4f0d52c193 -r e0330d789a40 tools/libxc/powerpc64/utils.c
--- a/tools/libxc/powerpc64/utils.c     Thu Nov 09 15:37:17 2006 -0500
+++ b/tools/libxc/powerpc64/utils.c     Fri Nov 10 15:19:56 2006 -0500
@@ -77,7 +77,7 @@ int get_rma_page_array(int xc_handle, in
     /* We know that the RMA is machine contiguous so lets just get the
      * first MFN and fill the rest in ourselves */
     rc = xc_get_pfn_list(xc_handle, domid, *page_array, 1);
-    if (rc != 1) {
+    if (rc == -1) {
         perror("Could not get the page frame list");
         return -1;
     }
diff -r 4d4f0d52c193 -r e0330d789a40 tools/libxc/powerpc64/xc_linux_build.c
--- a/tools/libxc/powerpc64/xc_linux_build.c    Thu Nov 09 15:37:17 2006 -0500
+++ b/tools/libxc/powerpc64/xc_linux_build.c    Fri Nov 10 15:19:56 2006 -0500
@@ -229,6 +229,7 @@ static void free_page_array(xen_pfn_t *p
 
 int xc_linux_build(int xc_handle,
                    uint32_t domid,
+                   unsigned int mem_mb,
                    const char *image_name,
                    const char *initrd_name,
                    const char *cmdline,
@@ -254,8 +255,7 @@ int xc_linux_build(int xc_handle,
 
     DPRINTF("%s\n", __func__);
 
-    DPRINTF("xc_get_tot_pages\n");
-    nr_pages = xc_get_tot_pages(xc_handle, domid);
+    nr_pages = mem_mb << (20 - PAGE_SHIFT);
     DPRINTF("nr_pages 0x%lx\n", nr_pages);
 
     rma_pages = get_rma_pages(devtree);
diff -r 4d4f0d52c193 -r e0330d789a40 tools/libxc/powerpc64/xc_prose_build.c
--- a/tools/libxc/powerpc64/xc_prose_build.c    Thu Nov 09 15:37:17 2006 -0500
+++ b/tools/libxc/powerpc64/xc_prose_build.c    Fri Nov 10 15:19:56 2006 -0500
@@ -230,6 +230,7 @@ static void free_page_array(xen_pfn_t *p
 
 int xc_prose_build(int xc_handle,
                    uint32_t domid,
+                   unsigned int mem_mb,
                    const char *image_name,
                    const char *initrd_name,
                    const char *cmdline,
@@ -257,8 +258,7 @@ int xc_prose_build(int xc_handle,
 
     DPRINTF("cmdline=%s\n", cmdline);
 
-    DPRINTF("xc_get_tot_pages\n");
-    nr_pages = xc_get_tot_pages(xc_handle, domid);
+    nr_pages = mem_mb << (20 - PAGE_SHIFT);
     DPRINTF("nr_pages 0x%lx\n", nr_pages);
 
     rma_pages = get_rma_pages(devtree);
diff -r 4d4f0d52c193 -r e0330d789a40 tools/libxc/xenguest.h
--- a/tools/libxc/xenguest.h    Thu Nov 09 15:37:17 2006 -0500
+++ b/tools/libxc/xenguest.h    Fri Nov 10 15:19:56 2006 -0500
@@ -131,6 +131,7 @@ int xc_hvm_build_mem(int xc_handle,
 
 int xc_prose_build(int xc_handle,
                    uint32_t domid,
+                   unsigned int mem_mb,
                    const char *image_name,
                    const char *ramdisk_name,
                    const char *cmdline,
diff -r 4d4f0d52c193 -r e0330d789a40 tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c Thu Nov 09 15:37:17 2006 -0500
+++ b/tools/python/xen/lowlevel/xc/xc.c Fri Nov 10 15:19:56 2006 -0500
@@ -347,7 +347,7 @@ static PyObject *pyxc_linux_build(XcObje
                                 "ramdisk", "cmdline", "flags",
                                 "features", "arch_args", NULL };
 
-    if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiiis|ssis", kwd_list,
+    if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiiis|ssiss#", kwd_list,
                                       &dom, &store_evtchn, &mem_mb,
                                       &console_evtchn, &image,
                                       /* optional */
@@ -377,26 +377,27 @@ static PyObject *pyxc_prose_build(XcObje
     char *image, *ramdisk = NULL, *cmdline = "", *features = NULL;
     int flags = 0;
     int store_evtchn, console_evtchn;
+    unsigned int mem_mb;
     unsigned long store_mfn = 0;
     unsigned long console_mfn = 0;
     void *arch_args = NULL;
     int unused;
 
-    static char *kwd_list[] = { "dom", "store_evtchn",
+    static char *kwd_list[] = { "dom", "store_evtchn", "memsize",
                                 "console_evtchn", "image",
                                 /* optional */
                                 "ramdisk", "cmdline", "flags",
                                 "features", "arch_args", NULL };
 
-    if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiis|ssiss#", kwd_list,
-                                      &dom, &store_evtchn,
+    if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiiis|ssiss#", kwd_list,
+                                      &dom, &store_evtchn, &mem_mb,
                                       &console_evtchn, &image,
                                       /* optional */
                                       &ramdisk, &cmdline, &flags,
                                       &features, &arch_args, &unused) )
         return NULL;
 
-    if ( xc_prose_build(self->xc_handle, dom, image,
+    if ( xc_prose_build(self->xc_handle, dom, mem_mb, image,
                         ramdisk, cmdline, features, flags,
                         store_evtchn, &store_mfn,
                         console_evtchn, &console_mfn,
diff -r 4d4f0d52c193 -r e0330d789a40 tools/python/xen/xend/FlatDeviceTree.py
--- a/tools/python/xen/xend/FlatDeviceTree.py   Thu Nov 09 15:37:17 2006 -0500
+++ b/tools/python/xen/xend/FlatDeviceTree.py   Fri Nov 10 15:19:56 2006 -0500
@@ -298,7 +298,7 @@ def build(imghandler):
 
     # add memory nodes
     totalmem = imghandler.vm.getMemoryTarget() * 1024
-    rma_log = imghandler.vm.info.get('powerpc_rma_log')
+    rma_log = 26 ### imghandler.vm.info.get('powerpc_rma_log')
     rma_bytes = 1 << rma_log
 
     # RMA node
diff -r 4d4f0d52c193 -r e0330d789a40 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Thu Nov 09 15:37:17 2006 -0500
+++ b/tools/python/xen/xend/XendDomainInfo.py   Fri Nov 10 15:19:56 2006 -0500
@@ -315,7 +315,7 @@ def dom_get(dom):
     return None
 
 
-class XendDomainInfo:
+class Common_XendDomainInfo:
     """An object represents a domain.
 
     @TODO: try to unify dom and domid, they mean the same thing, but
@@ -2003,3 +2003,85 @@ class XendDomainInfo:
 
     __repr__ = __str__
 
+
+
+#
+# This change is only in the PPC tree and is done this way to ease
+# maintanence until the correct solution is made
+#
+
+
+class XendDomainInfo (Common_XendDomainInfo):
+    def arch(self):
+        return "powerpc"
+
+    _rmaLogs = {
+        "970": (26, 27, 28, 30, 34, 38),
+    }
+
+    def getRealModeLogs(self):
+        """Returns a list of RMA sizes this processor supports."""
+        cputype = "970" # XXX extract from cpuinfo or device tree
+        return self._rmaLogs[cputype]
+ 
+    def allocMem(self):
+        # Use architecture- and image-specific calculations to determine
+        # the various headrooms necessary, given the raw configured
+        # values.
+        # reservation, maxmem, memory, and shadow are all in KiB.
+        reservation = self.image.getRequiredInitialReservation(
+            self.info['memory'] * 1024)
+        maxmem = self.image.getRequiredAvailableMemory(
+            self.info['maxmem'] * 1024)
+        memory = self.image.getRequiredAvailableMemory(
+            self.info['memory'] * 1024)
+        shadow = self.image.getRequiredShadowMemory(
+            self.info['shadow_memory'] * 1024,
+            self.info['maxmem'] * 1024)
+        # Round shadow up to a multiple of a MiB, as shadow_mem_control
+        # takes MiB and we must not round down and end up under-providing.
+        shadow = ((shadow + 1023) / 1024) * 1024
+ 
+        # set memory limit
+        xc.domain_setmaxmem(self.domid, maxmem)
+        dev_uuid = self.info.device_add('vtpm', cfg_xenapi = xenapi_vtpm)
+ 
+        # Make sure there's enough RAM available for the domain
+        balloon.free(memory + shadow)
+ 
+        # Set up the shadow memory, i.e. the PowerPC hash table
+        shadow_cur = xc.shadow_mem_control(self.domid, shadow / 1024)
+        self.info['shadow_memory'] = shadow_cur
+ 
+        rma_log = 26 ### self.info['powerpc_rma_log']
+        if rma_log == 0:
+            # use smallest RMA size available
+            rma_log = self.getRealModeLogs()[0]
+
+        if rma_log not in self.getRealModeLogs():
+            raise ValueError("rma_log(%d) must be one of" % rma_log,
+                             self.getRealModeLogs())
+
+        # store info for FlatDeviceTree            
+        ### self.info['powerpc_rma_log'] = rma_log
+ 
+        rma_kb = (1 << rma_log) / 1024
+        if memory < rma_kb:
+            raise ValueError("Domain memory must be at least %d KB" % rma_kb)
+
+        # allocate the RMA
+        xc.alloc_real_mode_area(self.domid, rma_log)
+
+        # now allocate the remaining memory as large-order allocations
+        memory -= rma_kb
+        extent_log = 24 # 16 MB
+        extent_size = 1 << extent_log
+        page_log = 12 # 4 KB
+        extent_order = extent_log - page_log
+        for i in range(0, memory * 1024, extent_size):
+            log.debug("increase_reservation(%d, 0x%x, %d)", self.domid,
+                    extent_size >> 10, extent_order)
+            xc.domain_memory_increase_reservation(self.domid,
+                                                  extent_size >> 10,
+                                                  extent_order)
+
diff -r 4d4f0d52c193 -r e0330d789a40 tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py    Thu Nov 09 15:37:17 2006 -0500
+++ b/tools/python/xen/xend/image.py    Fri Nov 10 15:19:56 2006 -0500
@@ -279,6 +279,7 @@ class PPC_ProseImageHandler(LinuxImageHa
         devtree = FlatDeviceTree.build(self)
 
         return xc.prose_build(dom            = self.vm.getDomid(),
+                              memsize        = mem_mb,
                               image          = self.kernel,
                               store_evtchn   = store_evtchn,
                               console_evtchn = console_evtchn,

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

<Prev in Thread] Current Thread [Next in Thread>
  • [XenPPC] [xenppc-unstable] [TOOLS][POWERPC] merge, Xen patchbot-xenppc-unstable <=