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: fix options for assigned pci

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] xend: fix options for assigned pci
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 08 Jan 2010 04:00:25 -0800
Delivery-date: Fri, 08 Jan 2010 04:00:58 -0800
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 1262950746 0
# Node ID 0db36bfd1986318fccefa15d78e7fd6534be8aa7
# Parent  dc8fb5dc629dc9f8a657480eb8d42b1018d916d3
xend: fix options for assigned pci

pci global options and per-device options for HVM device model have
been broken for some time, the patch tries to fix the problem. It:
    * maintains global options in xend, and merge it into
      per-device option when creating the backend
    * merge the global options also into the parameter of pci-ins
      dm-command

The second one is there because the backend is effectively skipped
in ioemu at present, ioemu solely relies on the parameter string to
create the device.

Cc: Simon Horman <horms@xxxxxxxxxxxx>
Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Signed-off-by: Qing He <qing.he@xxxxxxxxx>
---
 tools/python/xen/util/pci.py            |    6 +++++-
 tools/python/xen/xend/XendDomainInfo.py |   15 ++++++++++++++-
 tools/python/xen/xend/server/pciif.py   |   19 ++++++++++++++-----
 3 files changed, 33 insertions(+), 7 deletions(-)

diff -r dc8fb5dc629d -r 0db36bfd1986 tools/python/xen/util/pci.py
--- a/tools/python/xen/util/pci.py      Fri Jan 08 11:37:44 2010 +0000
+++ b/tools/python/xen/util/pci.py      Fri Jan 08 11:39:06 2010 +0000
@@ -157,6 +157,10 @@ def split_pci_opts(opts):
 def split_pci_opts(opts):
     return map(lambda x: x.split('='),
                filter(lambda x: x != '', opts.split(',')))
+
+def append_default_pci_opts(opts, defopts):
+    optsdict = dict(opts)
+    return opts + filter(lambda (k, v): not optsdict.has_key(k), defopts)
 
 def pci_opts_list_to_sxp(list):
     return dev_dict_to_sxp({'opts': list})
@@ -328,7 +332,7 @@ def parse_pci_name_extended(pci_dev_str)
     template['domain'] = "0x%04x" % domain
     template['bus']    = "0x%02x" % int(pci_dev_info['bus'], 16)
     template['slot']   = "0x%02x" % int(pci_dev_info['slot'], 16)
-    template['key']    = pci_dev_str
+    template['key']    = pci_dev_str.split(',')[0]
     if pci_dev_info['opts'] != '':
         template['opts'] = split_pci_opts(pci_dev_info['opts'])
         check_pci_opts(template['opts'])
diff -r dc8fb5dc629d -r 0db36bfd1986 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Fri Jan 08 11:37:44 2010 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py   Fri Jan 08 11:39:06 2010 +0000
@@ -42,6 +42,7 @@ from xen.util import xsconstants
 from xen.util import xsconstants
 from xen.util import mkdir
 from xen.util.pci import serialise_pci_opts, pci_opts_list_to_sxp, \
+                         append_default_pci_opts, \
                          pci_dict_to_bdf_str, pci_dict_to_xc_str, \
                          pci_convert_sxp_to_dict, pci_convert_dict_to_sxp, \
                          pci_dict_cmp, PCI_DEVFN, PCI_SLOT, PCI_FUNC, parse_hex
@@ -784,8 +785,20 @@ class XendDomainInfo:
 
         if self.domid is not None:
             opts = ''
+            optslist = []
+            pci_defopts = []
+            if 'pci_msitranslate' in self.info['platform']:
+                pci_defopts.append(['msitranslate',
+                        str(self.info['platform']['pci_msitranslate'])])
+            if 'pci_power_mgmt' in self.info['platform']:
+                pci_defopts.append(['power_mgmt',
+                        str(self.info['platform']['pci_power_mgmt'])])
             if new_dev.has_key('opts'):
-                opts = ',' + serialise_pci_opts(new_dev['opts'])
+                optslist += new_dev['opts']
+
+            if optslist or pci_defopts:
+                opts = ',' + serialise_pci_opts(
+                       append_default_pci_opts(optslist, pci_defopts))
 
             bdf_str = "%s@%02x%s" % (pci_dict_to_bdf_str(new_dev),
                                      int(new_dev['vdevfn'], 16), opts)
diff -r dc8fb5dc629d -r 0db36bfd1986 tools/python/xen/xend/server/pciif.py
--- a/tools/python/xen/xend/server/pciif.py     Fri Jan 08 11:37:44 2010 +0000
+++ b/tools/python/xen/xend/server/pciif.py     Fri Jan 08 11:39:06 2010 +0000
@@ -97,6 +97,15 @@ class PciController(DevController):
         """@see DevController.getDeviceDetails"""
         back = {}
         pcidevid = 0
+        pci_defopts = []
+
+        if 'pci_msitranslate' in self.vm.info['platform']:
+            pci_defopts.append(['msitranslate',
+                    str(self.vm.info['platform']['pci_msitranslate'])])
+        if 'pci_power_mgmt' in self.vm.info['platform']:
+            pci_defopts.append(['power_mgmt',
+                    str(self.vm.info['platform']['pci_power_mgmt'])])
+
         for pci_config in config.get('devs', []):
             domain = parse_hex(pci_config.get('domain', 0))
             bus = parse_hex(pci_config.get('bus', 0))
@@ -105,8 +114,12 @@ class PciController(DevController):
             vdevfn = parse_hex(pci_config.get('vdevfn', \
                                               '0x%02x' % AUTO_PHP_SLOT))
 
+            optslist = []
             if pci_config.has_key('opts'):
-                opts = serialise_pci_opts(pci_config['opts'])
+                optslist += pci_config['opts']
+            if optslist or pci_defopts:
+                opts = serialise_pci_opts(
+                       append_default_pci_opts(optslist, pci_defopts))
                 back['opts-%i' % pcidevid] = opts
 
             back['dev-%i' % pcidevid] = "%04x:%02x:%02x.%01x" % \
@@ -118,10 +131,6 @@ class PciController(DevController):
 
         back['num_devs']=str(pcidevid)
         back['uuid'] = config.get('uuid','')
-        if 'pci_msitranslate' in self.vm.info['platform']:
-            
back['msitranslate']=str(self.vm.info['platform']['pci_msitranslate'])
-        if 'pci_power_mgmt' in self.vm.info['platform']:
-            back['power_mgmt']=str(self.vm.info['platform']['pci_power_mgmt'])
 
         return (0, back, {})
 

_______________________________________________
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: fix options for assigned pci, Xen patchbot-unstable <=