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

Re: [XenPPC] Error creating domain on JS20 (Fw: [Prose-jvm] Brief Status

To: Maria Butrico <butrico@xxxxxxxxxx>
Subject: Re: [XenPPC] Error creating domain on JS20 (Fw: [Prose-jvm] Brief Status in TRL (2006/08/24))
From: Hollis Blanchard <hollisb@xxxxxxxxxx>
Date: Thu, 24 Aug 2006 15:19:58 -0500
Cc: KAWATIYA@xxxxxxxxxx, xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Thu, 24 Aug 2006 13:20:34 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <1156433724.24494.7.camel@xxxxxxxxxxxxxxxxxxxxx>
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>
Organization: IBM Linux Technology Center
References: <OF4FF9241B.00E00F30-ON852571D4.004E5AE6-852571D4.0050CDFA@xxxxxxxxxx> <1156433724.24494.7.camel@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-ppc-devel-bounces@xxxxxxxxxxxxxxxxxxx
On Thu, 2006-08-24 at 10:35 -0500, Hollis Blanchard wrote:
> On Thu, 2006-08-24 at 10:42 -0400, Kiyokuni Kawachiya wrote:
> 
> > Today, I installed necessary tools including mercurial to LinuxPPC,
> > self-built XenPPC, dom0 Linux, and Xen Tools on LinuxPPC, and installed
> > them.  I also built j9-xen-ppc with the latest codes, and tried to start it
> > on my Linux/XenPPC/JS20.  The xend daemon was successfully started, but
> > when I tried "xm create -c xen-domain-config", it failed with the following
> > message.
> > 
> >     Error: [Errno 2] No such file or directory:
> > '/proc/device-tree/cpus/PowerPC,970@0'
> > 
> > The directory does not exist in my dom0 Linux, but "PowerPC,970FX@0" exists
> > instead.  Maybe, my JS20 is newer than Watson's, and uses different CPU
> > (970FX).  Today, I have no time to debug this further.  Any solution?
> 
> I'll try to come up with a more general solution.

Here is the more general solution: it searches /cpus for the first node
with device_type containing "cpu", regardless of how the node is named.

I won't commit until I hear a couple "works for me" reports (and no
"fails miserably" reports :) .

diff -r b2f2c477895a tools/python/xen/xend/FlatDeviceTree.py
--- a/tools/python/xen/xend/FlatDeviceTree.py   Tue Aug 22 16:48:58 2006 -0500
+++ b/tools/python/xen/xend/FlatDeviceTree.py   Thu Aug 24 15:16:13 2006 -0500
@@ -22,6 +22,9 @@ import struct
 import struct
 import stat
 import re
+import glob
+
+_host_devtree_root = '/proc/device-tree'
 
 _OF_DT_HEADER = int("d00dfeed", 16) # avoid signed/unsigned FutureWarning
 _OF_DT_BEGIN_NODE = 0x1
@@ -231,29 +234,36 @@ class Tree(_Node):
         header.totalsize = len(payload) + _alignup(len(header.to_bin()), 8)
         return _pad(header.to_bin(), 8) + payload
 
-_host_devtree_root = '/proc/device-tree'
-def _getprop(propname):
-    '''Extract a property from the system's device tree.'''
-    f = file(os.path.join(_host_devtree_root, propname), 'r')
+def _readfile(fullpath):
+    '''Return full contents of a file.'''
+    f = file(fullpath, 'r')
     data = f.read()
     f.close()
     return data
 
+def _find_first_cpu(dirpath):
+    '''Find the first node of type 'cpu' in a directory tree.'''
+    cpulist = glob.glob(os.path.join(dirpath, 'cpus', '*'))
+    for node in cpulist:
+        try:
+            data = _readfile(os.path.join(node, 'device_type'))
+        except IOError:
+            continue
+        if 'cpu' in data:
+            return node
+    raise IOError("couldn't find any CPU nodes under " + dirpath)
+
 def _copynode(node, dirpath, propfilter):
-    '''Extract all properties from a node in the system's device tree.'''
+    '''Copy all properties and children nodes from a directory tree.'''
     dirents = os.listdir(dirpath)
     for dirent in dirents:
         fullpath = os.path.join(dirpath, dirent)
         st = os.lstat(fullpath)
         if stat.S_ISDIR(st.st_mode):
             child = node.addnode(dirent)
-            _copytree(child, fullpath, propfilter)
+            _copynode(child, fullpath, propfilter)
         elif stat.S_ISREG(st.st_mode) and propfilter(fullpath):
-            node.addprop(dirent, _getprop(fullpath))
-
-def _copytree(node, dirpath, propfilter):
-    path = os.path.join(_host_devtree_root, dirpath)
-    _copynode(node, path, propfilter)
+            node.addprop(dirent, _readfile(fullpath))
 
 def build(imghandler):
     '''Construct a device tree by combining the domain's configuration and
@@ -289,15 +299,18 @@ def build(imghandler):
     cpus.addprop('#address-cells', 1)
 
     # Copy all properties the system firmware gave us, except for 'linux,'
-    # properties, from 'cpus/@0', once for every vcpu. Hopefully all cpus are
-    # identical...
+    # properties, from the first CPU node in the device tree. Do this once for
+    # every vcpu. Hopefully all cpus are identical...
     cpu0 = None
+    cpu0path = _find_first_cpu(_host_devtree_root)
     def _nolinuxprops(fullpath):
         return not os.path.basename(fullpath).startswith('linux,')
     for i in range(imghandler.vm.getVCpuCount()):
-        cpu = cpus.addnode('PowerPC,970@0')
-        _copytree(cpu, 'cpus/PowerPC,970@0', _nolinuxprops)
-        # and then overwrite what we need to
+        # create new node and copy all properties
+        cpu = cpus.addnode('PowerPC,970@%d' % i)
+        _copynode(cpu, cpu0path, _nolinuxprops)
+
+        # overwrite what we need to
         pft_size = imghandler.vm.info.get('pft-size', 0x14)
         cpu.setprop('ibm,pft-size', 0, pft_size)
 

-- 
Hollis Blanchard
IBM Linux Technology Center


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