aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-07-31 12:39:56 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-07-31 12:39:56 +0100
commitdfad53d5feed1111c2f660fb4d8e44ac004cf206 (patch)
tree544f0896dd450b0dbdc7a683c795d660c3fb92c3
parent52c456a522e1efd841fcbfe137c8ed24d81d9113 (diff)
downloadxen-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>
-rw-r--r--tools/python/xen/util/pci.py29
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: