diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-07-31 12:39:56 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-07-31 12:39:56 +0100 |
commit | dfad53d5feed1111c2f660fb4d8e44ac004cf206 (patch) | |
tree | 544f0896dd450b0dbdc7a683c795d660c3fb92c3 /tools | |
parent | 52c456a522e1efd841fcbfe137c8ed24d81d9113 (diff) | |
download | xen-dfad53d5feed1111c2f660fb4d8e44ac004cf206.tar.gz xen-dfad53d5feed1111c2f660fb4d8e44ac004cf206.tar.bz2 xen-dfad53d5feed1111c2f660fb4d8e44ac004cf206.zip |
xend: Fix portability issue of lspci option.
Signed-off-by: Yosuke Iwamatsu <y-iwamatsu@ab.jp.nec.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/python/xen/util/pci.py | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/tools/python/xen/util/pci.py b/tools/python/xen/util/pci.py index b8f8b6c4b8..2fce04a8c5 100644 --- a/tools/python/xen/util/pci.py +++ b/tools/python/xen/util/pci.py @@ -111,15 +111,22 @@ def parse_hex(val): return None def parse_pci_name(pci_name_string): - # Format: xxxx:xx:xx.x - s = pci_name_string - s = s.split(':') - dom = parse_hex(s[0]) - bus = parse_hex(s[1]) - s = s[2].split('.') - dev = parse_hex(s[0]) - func = parse_hex(s[1]) - return (dom, bus, dev, func) + pci_match = re.match(r"((?P<domain>[0-9a-fA-F]{1,4})[:,])?" + \ + r"(?P<bus>[0-9a-fA-F]{1,2})[:,]" + \ + r"(?P<slot>[0-9a-fA-F]{1,2})[.,]" + \ + r"(?P<func>[0-7])$", pci_name_string) + if pci_match is None: + raise PciDeviceParseError(('Failed to parse pci device name: %s' % + pci_name_string)) + pci_dev_info = pci_match.groupdict('0') + + domain = parse_hex(pci_dev_info['domain']) + bus = parse_hex(pci_dev_info['bus']) + slot = parse_hex(pci_dev_info['slot']) + func = parse_hex(pci_dev_info['func']) + + return (domain, bus, slot, func) + def find_sysfs_mnt(): global sysfs_mnt_point @@ -175,14 +182,14 @@ def create_lspci_info(): # Execute 'lspci' command and parse the result. # If the command does not exist, lspci_info will be kept blank ({}). - for paragraph in os.popen(LSPCI_CMD + ' -vmmD').read().split('\n\n'): + for paragraph in os.popen(LSPCI_CMD + ' -vmm').read().split('\n\n'): device_name = None device_info = {} for line in paragraph.split('\n'): try: (opt, value) = line.split(':\t') if opt == 'Slot': - device_name = value + device_name = PCI_DEV_FORMAT_STR % parse_pci_name(value) else: device_info[opt] = value except: |