Simon Horman
2009-May-26 08:45 UTC
[Xen-devel] [patch v2] Add assigned_or_requested_vslot()
Add an accessor to simplify accessing vslot if available,
otherwise requested_vslot.
Lightly tested
Cc: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
---
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(-)
Changes
v2: Use spaces instead of tabs
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@lists.xensource.com
http://lists.xensource.com/xen-devel