[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |