[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] xend: pass-through: Implement least-mapping of virtual functions



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1246093280 -3600
# Node ID 22067ba1de0dc1cc54bd78c034401f9e87d87123
# Parent  4926b30ed56d7259c5b9ad2811f3e8712e83d820
xend: pass-through: Implement least-mapping of virtual functions

This is an alternative to identity mapping virtual functions.

It works by assigning the numerically lowest virtual function that is
available.

* The order of assignment is thus dependent on the order that physical
  functions are specified.

  e.g.
  config         physical     virtual
  01.00.0,2  ->  01:00.0  ->  00:07.0
             ->  01:00.2  ->  00:07.1

  is different to

  config         physical     virtual
  01.00.2,0  ->  01:00.2  ->  00:07.0
             ->  01:00.0  ->  00:07.1

* Physical function 0 need not be present

  e.g.
  config         physical     virtual
  01.00.1,2  ->  01:00.1  ->  00:07.0
             ->  01:00.2  ->  00:07.1

* Functions from the same physical multi-function device
  may be exported as multiple multi-function and single-function
  devices

  e.g.
  01.00.0,2  ->  01:00.0  ->  00:07.0
             ->  01:00.2  ->  00:07.1
  and
  01.00.1,3  ->  01:00.1  ->  00:08.1
             ->  01:00.3  ->  00:08.1
  and
  01.00.5    ->  01:00.5  ->  00:09.0

Cc: Dexuan Cui <dexuan.cui@xxxxxxxxx>
Cc: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx>
Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>
---
 tools/python/xen/util/pci.py |    9 ++-------
 tools/python/xen/xm/main.py  |   14 +++++++++++---
 2 files changed, 13 insertions(+), 10 deletions(-)

diff -r 4926b30ed56d -r 22067ba1de0d tools/python/xen/util/pci.py
--- a/tools/python/xen/util/pci.py      Sat Jun 27 10:00:24 2009 +0100
+++ b/tools/python/xen/util/pci.py      Sat Jun 27 10:01:20 2009 +0100
@@ -286,19 +286,13 @@ 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:
@@ -306,6 +300,7 @@ 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
diff -r 4926b30ed56d -r 22067ba1de0d tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Sat Jun 27 10:00:24 2009 +0100
+++ b/tools/python/xen/xm/main.py       Sat Jun 27 10:01:20 2009 +0100
@@ -2226,9 +2226,17 @@ def xm_pci_list(args):
     if len(devs) == 0:
         return
 
-    devs.sort(None,
-              lambda x: (x['vdevfn'] - PCI_FUNC(x['vdevfn'])) << 32 |
-                        PCI_BDF(x['domain'], x['bus'], x['slot'], x['func']))
+    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)
 
     has_vdevfn = False
     for x in devs:

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.