WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] xend: pass-through: Implement least-mappi

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] xend: pass-through: Implement least-mapping of virtual functions
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 29 Jun 2009 02:20:22 -0700
Delivery-date: Mon, 29 Jun 2009 02:21:43 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# 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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] xend: pass-through: Implement least-mapping of virtual functions, Xen patchbot-unstable <=