[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [patch] [xm, xend] passthrough: Add assigned_or_requested_vslot()
Hi Simon, Great!! Your patch is of importance. If without your patch, we cannot start domains. I found a problem about starting domains. The reproduction operations of the problem are as follows. Step to Reproduce: 1. xm start <domain> 2. xm pci-attach <domain> **:**.* * 3. Shutdown guest OS on <domain> 4. xm start <domain> ---> fail Your patch has solved the problem. Trivial comment: The following line includes Tab indent. Index: xen-unstable.hg/tools/python/xen/xm/main.py =================================================================== --- xen-unstable.hg.orig/tools/python/xen/xm/main.py 2009-05-26 14: 37:15.000000000 +1000 +++ xen-unstable.hg/tools/python/xen/xm/main.py 2009-05-26 14:38:36. 000000000 +1000 @@ -2167,18 +2167,12 @@ def xm_pci_list(args): has_vslot = False for x in devs: - if x.has_key('vslot'): - if x['vslot'] == "0x%s" % AUTO_PHP_SLOT_STR: - x['vslot'] = '-' - else: - has_vslot = True - elif not x.has_key('requested_vslot'): - x['vslot'] = '-' - elif x['requested_vslot'] == "0x%s" % AUTO_PHP_SLOT_STR: + vslot = assigned_or_requested_vslot(x) <------------ here!! + if int(vslot, 16) == AUTO_PHP_SLOT: x['vslot'] = '-' else: + x['vslot'] = vslot has_vslot = True - x['vslot'] = x['requested_vslot'] if has_vslot: hdr_str = 'VSlt domain bus slot func' Best regards, Kan Tue, 26 May 2009 16:33:42 +1000, Simon Horman wrote: >Add an accessor to simplify accessing vslot if available, >otherwise requested_vslot. > >Lightly tested > >Cc: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx> >Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx> > >--- > > tools/python/xen/util/pci.py | 14 +++++++++++++- > tools/python/xen/xend/XendDomainInfo.py | 16 ++++------------ > tools/python/xen/xend/server/pciif.py | 10 +++++----- > tools/python/xen/xm/main.py | 12 +++--------- > 4 files changed, 25 insertions(+), 27 deletions(-) > >Index: xen-unstable.hg/tools/python/xen/util/pci.py >=================================================================== >--- xen-unstable.hg.orig/tools/python/xen/util/pci.py 2009-05-26 14:17:52. >000000000 +1000 >+++ xen-unstable.hg/tools/python/xen/util/pci.py 2009-05-26 14:38:36. >000000000 +1000 >@@ -138,7 +138,13 @@ def parse_pci_name(pci_name_string): > func = parse_hex(pci_dev_info['func']) > > return (domain, bus, slot, func) >- >+ >+def assigned_or_requested_vslot(dev): >+ if dev.has_key("vslot"): >+ return dev["vslot"] >+ if dev.has_key("requested_vslot"): >+ return dev["requested_vslot"] >+ raise PciDeviceVslotMissing("%s" % dev) > > def find_sysfs_mnt(): > try: >@@ -355,6 +361,12 @@ class PciDeviceAssignmentError(Exception > return 'pci: impproper device assignment spcified: ' + \ > self.message > >+class PciDeviceVslotMissing(Exception): >+ def __init__(self,msg): >+ self.message = msg >+ def __str__(self): >+ return 'pci: no vslot or requested_vslot: ' + self.message >+ > class PciDevice: > def __init__(self, domain, bus, slot, func): > self.domain = domain >Index: xen-unstable.hg/tools/python/xen/xend/XendDomainInfo.py >=================================================================== >--- xen-unstable.hg.orig/tools/python/xen/xend/XendDomainInfo.py 2009-05 -26 > 14:37:18.000000000 +1000 >+++ xen-unstable.hg/tools/python/xen/xend/XendDomainInfo.py 2009-05-26 16: >29:41.000000000 +1000 >@@ -38,6 +38,7 @@ from xen.util import asserts > from xen.util.blkif import blkdev_uname_to_file, blkdev_uname_to_taptype > import xen.util.xsm.xsm as security > from xen.util import xsconstants >+from xen.util.pci import assigned_or_requested_vslot > > from xen.xend import balloon, sxp, uuid, image, arch, osdep > from xen.xend import XendOptions, XendNode, XendConfig >@@ -621,10 +622,7 @@ class XendDomainInfo: > pci_conf = self.info['devices'][dev_uuid][1] > pci_devs = pci_conf['devs'] > for x in pci_devs: >- if x.has_key('vslot'): >- x_vslot = x['vslot'] >- else: >- x_vslot = x['requested_vslot'] >+ x_vslot = assigned_or_requested_vslot(x) > if (int(x_vslot, 16) == int(new_dev['requested_vslot'], 16 >) and > int(x_vslot, 16) != AUTO_PHP_SLOT): > raise VmError("vslot %s already have a device." % ( >new_dev['requested_vslot'])) >@@ -819,10 +817,7 @@ class XendDomainInfo: > int(x['bus'], 16) == int(dev['bus'], 16) and > int(x['slot'], 16) == int(dev['slot'], 16) and > int(x['func'], 16) == int(dev['func'], 16) ): >- if x.has_key('vslot'): >- vslot = x['vslot'] >- else: >- vslot = x['requested_vslot'] >+ vslot = assigned_or_requested_vslot(x) > break > if vslot == AUTO_PHP_SLOT_STR: > raise VmError("Device %04x:%02x:%02x.%01x is not >connected" >@@ -1119,10 +1114,7 @@ class XendDomainInfo: > #find the pass-through device with the virtual slot > devnum = 0 > for x in pci_conf['devs']: >- if x.has_key('vslot'): >- x_vslot = x['vslot'] >- else: >- x_vslot = x['requested_vslot'] >+ x_vslot = assigned_or_requested_vslot(x) > if int(x_vslot, 16) == vslot: > break > devnum += 1 >Index: xen-unstable.hg/tools/python/xen/xend/server/pciif.py >=================================================================== >--- xen-unstable.hg.orig/tools/python/xen/xend/server/pciif.py 2009-05-26 >14:37:15.000000000 +1000 >+++ xen-unstable.hg/tools/python/xen/xend/server/pciif.py 2009-05-26 14: 38: >36.000000000 +1000 >@@ -71,15 +71,15 @@ class PciController(DevController): > pcidevid = 0 > vslots = "" > for pci_config in config.get('devs', []): >- vslot = pci_config.get('vslot') >- if vslot is not None: >- vslots = vslots + vslot + ";" >+ attached_vslot = pci_config.get('vslot') >+ if attached_vslot is not None: >+ vslots = vslots + attached_vslot + ";" > > domain = parse_hex(pci_config.get('domain', 0)) > bus = parse_hex(pci_config.get('bus', 0)) > slot = parse_hex(pci_config.get('slot', 0)) > func = parse_hex(pci_config.get('func', 0)) >- requested_vslot = parse_hex(pci_config.get('requested_vslot', >0)) >+ vslot = parse_hex(assigned_or_requested_vslot(pci_config)) > > opts = pci_config.get('opts', '') > if len(opts) > 0: >@@ -90,7 +90,7 @@ class PciController(DevController): > back['dev-%i' % pcidevid] = "%04x:%02x:%02x.%01x" % \ > (domain, bus, slot, func) > back['uuid-%i' % pcidevid] = pci_config.get('uuid', '') >- back['vslot-%i' % pcidevid] = "%02x" % requested_vslot >+ back['vslot-%i' % pcidevid] = "%02x" % vslot > pcidevid += 1 > > if vslots != "": >Index: xen-unstable.hg/tools/python/xen/xm/main.py >=================================================================== >--- xen-unstable.hg.orig/tools/python/xen/xm/main.py 2009-05-26 14:37:15. >000000000 +1000 >+++ xen-unstable.hg/tools/python/xen/xm/main.py 2009-05-26 14:38:36. >000000000 +1000 >@@ -2167,18 +2167,12 @@ def xm_pci_list(args): > > has_vslot = False > for x in devs: >- if x.has_key('vslot'): >- if x['vslot'] == "0x%s" % AUTO_PHP_SLOT_STR: >- x['vslot'] = '-' >- else: >- has_vslot = True >- elif not x.has_key('requested_vslot'): >- x['vslot'] = '-' >- elif x['requested_vslot'] == "0x%s" % AUTO_PHP_SLOT_STR: >+ vslot = assigned_or_requested_vslot(x) >+ if int(vslot, 16) == AUTO_PHP_SLOT: > x['vslot'] = '-' > else: >+ x['vslot'] = vslot > has_vslot = True >- x['vslot'] = x['requested_vslot'] > > if has_vslot: > hdr_str = 'VSlt domain bus slot func' > >_______________________________________________ >Xen-devel mailing list >Xen-devel@xxxxxxxxxxxxxxxxxxx >http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |