From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Horman Subject: [patch 09/16] xend: pass-through: Use common parsing code in preprocess_pci() Date: Mon, 15 Jun 2009 11:55:24 +1000 Message-ID: <20090615015912.536612264@vergenet.net> References: <20090615015515.927085604@vergenet.net> Return-path: Content-Disposition: inline; filename=preprocess_pci-use-parse_pci_name_dict.patch List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com Cc: Masaki Kanno , Dexuan Cui List-Id: xen-devel@lists.xenproject.org Cc: Dexuan Cui Cc: Masaki Kanno Signed-off-by: Simon Horman Index: xen-unstable.hg/tools/python/xen/xm/create.py =================================================================== --- xen-unstable.hg.orig/tools/python/xen/xm/create.py 2009-06-13 11:03:40.000000000 +1000 +++ xen-unstable.hg/tools/python/xen/xm/create.py 2009-06-13 11:09:37.000000000 +1000 @@ -38,8 +38,8 @@ from xen.util import vscsi_util import xen.util.xsm.xsm as security from xen.xm.main import serverType, SERVER_XEN_API, get_single_vm from xen.util import utils, auxbin -from xen.util.pci import split_pci_opts, check_pci_opts, \ - pci_opts_list_to_sxp +from xen.util.pci import pci_opts_list_to_sxp, \ + parse_pci_name_extended, PciDeviceParseError from xen.xm.opts import * @@ -710,14 +710,7 @@ def configure_pci(config_devs, vals): config_pci_bdf = ['dev', ['domain', domain], ['bus', bus], \ ['slot', slot], ['func', func], ['vslot', vslot]] - - opts_list = split_pci_opts(opts) - try: - check_pci_opts(opts_list) - except PciDeviceParseError, ex: - err(str(ex)) - - config_opts = pci_opts_list_to_sxp(split_pci_opts(opts)) + config_opts = pci_opts_list_to_sxp(opts) config_pci.append(sxp.merge(config_pci_bdf, config_opts)) if len(config_pci)>0: @@ -1052,33 +1045,18 @@ def preprocess_cpuid(vals, attr_name): cpuid[input][res['reg']] = res['val'] # new register setattr(vals, attr_name, cpuid) +def pci_dict_to_tuple(dev): + return (dev['domain'], dev['bus'], dev['slot'], dev['func'], + dev['vslot'], dev.get('opts', [])) + def preprocess_pci(vals): - if not vals.pci: return - pci = [] - for pci_dev_str in vals.pci: - pci_match = re.match(r"((?P[0-9a-fA-F]{1,4})[:,])?" + \ - r"(?P[0-9a-fA-F]{1,2})[:,]" + \ - r"(?P[0-9a-fA-F]{1,2})[.,]" + \ - r"(?P[0-7])" + \ - r"(@(?P[01]?[0-9a-fA-F]))?" + \ - r"(,(?P.*))?$", \ - pci_dev_str) - if pci_match!=None: - pci_dev_info = pci_match.groupdict('') - if pci_dev_info['domain']=='': - pci_dev_info['domain']='0' - if pci_dev_info['vslot']=='': - pci_dev_info['vslot']="%02x" % AUTO_PHP_SLOT - try: - pci.append( ('0x'+pci_dev_info['domain'], \ - '0x'+pci_dev_info['bus'], \ - '0x'+pci_dev_info['slot'], \ - '0x'+pci_dev_info['func'], \ - '0x'+pci_dev_info['vslot'], \ - pci_dev_info['opts'])) - except IndexError: - err('Error in PCI slot syntax "%s"'%(pci_dev_str)) - vals.pci = pci + if not vals.pci: + return + try: + vals.pci = map(pci_dict_to_tuple, + map(parse_pci_name_extended, vals.pci)) + except PciDeviceParseError, ex: + err(str(ex)) def preprocess_vscsi(vals): if not vals.vscsi: return --