# HG changeset patch
# User Jimi Xenidis <[EMAIL PROTECTED]>
# Node ID e0330d789a40959acc267ec342a6f907a8d73abc
# Parent  4d4f0d52c1934a50a67d3fe9bd30b4f7e23427fe
[TOOLS][POWERPC] merge

Signed-off-by: Jimi Xenidis <[EMAIL PROTECTED]>
---
 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@lists.xensource.com
http://lists.xensource.com/xen-ppc-devel

Reply via email to