Simon Horman
2009-Jul-22 01:24 UTC
[Xen-devel] [patch] xend: pass-through: use identity-mapping of PCI functions
This reverses changeset "xend: pass-through: Implement least-mapping of
virtual" (19854:22067ba1de0d) and reverts the code to identity mapping
physical PCI functions to virtual ones when multi-function virtual devices
are in use. It is my opinion that this is both safer and simpler than
least-mapping, and that in the absence of further analysis identity-mapping
the best choice for now.
Signed-off-by: Simon Horman <horms@verge.net.au>
Index: xen-unstable.hg/tools/python/xen/util/pci.py
==================================================================---
xen-unstable.hg.orig/tools/python/xen/util/pci.py 2009-07-21 20:23:23.000000000
+1000
+++ xen-unstable.hg/tools/python/xen/util/pci.py 2009-07-21 20:23:48.000000000
+1000
@@ -287,13 +287,19 @@ def parse_pci_name_extended(pci_dev_str)
# Virtual slot assignment takes place here if specified in the bdf,
# else it is done inside qemu-xen, as it knows which slots are free
pci = []
- vfunc = 0;
func_list = pci_func_list_process(pci_dev_str, template,
pci_dev_info[''func''])
for func in func_list:
pci_dev = template.copy()
pci_dev[''func''] = "0x%x" % func
+ if len(func_list) == 1:
+ # For single-function devices vfunc must be 0
+ vfunc = 0
+ else:
+ # For multi-function virtual devices,
+ # identity map the func to vfunc
+ vfunc = func
if pci_dev_info[''vdevfn''] == '''':
vdevfn = AUTO_PHP_SLOT | vfunc
else:
@@ -301,7 +307,6 @@ def parse_pci_name_extended(pci_dev_str)
pci_dev[''vdevfn''] = "0x%02x" % vdevfn
pci.append(pci_dev)
- vfunc += 1
# For pci attachment and detachment is it important that virtual
# function 0 is done last. This is because is virtual function 0 that
Index: xen-unstable.hg/tools/python/xen/xm/main.py
==================================================================---
xen-unstable.hg.orig/tools/python/xen/xm/main.py 2009-07-21 20:23:23.000000000
+1000
+++ xen-unstable.hg/tools/python/xen/xm/main.py 2009-07-21 20:30:03.000000000
+1000
@@ -2226,17 +2226,9 @@ def xm_pci_list(args):
if len(devs) == 0:
return
- def f(x):
- # The vfunc shouldn''t be used for ordering if the vslot
hasn''t been
- # assigned as the output looks odd beacuse the vfunc isn''t
reported
- # but the (physical) function is.
- if x[''vdevfn''] & AUTO_PHP_SLOT:
- vdevfn = AUTO_PHP_SLOT
- else:
- vdevfn = x[''vdevfn'']
- return (vdevfn << 32) | \
- PCI_BDF(x[''domain''],
x[''bus''], x[''slot''],
x[''func''])
- devs.sort(None, f)
+ devs.sort(None,
+ lambda x: (x[''vdevfn''] -
PCI_FUNC(x[''vdevfn''])) << 32 |
+ PCI_BDF(x[''domain''],
x[''bus''], x[''slot''],
x[''func'']))
has_vdevfn = False
for x in devs:
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel