[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XenPPC] Error creating domain on JS20 (Fw: [Prose-jvm] Brief Status in TRL (2006/08/24))
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |