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-devel

[Xen-devel] [PATCH] xend: fix options for assigned pci

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] xend: fix options for assigned pci
From: Qing He <qing.he@xxxxxxxxx>
Date: Fri, 8 Jan 2010 16:29:04 +0800
Bcc: Qing He <qing.he@xxxxxxxxx>
Cc: horms@xxxxxxxxxxxx, stefano.stabellini@xxxxxxxxxxxxx
Delivery-date: Fri, 08 Jan 2010 00:30:30 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.20 (2009-06-14)
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>
---
diff -r 683bf4ce2e93 tools/python/xen/util/pci.py
--- a/tools/python/xen/util/pci.py      Mon Jan 04 10:35:16 2010 +0000
+++ b/tools/python/xen/util/pci.py      Fri Jan 08 16:01:55 2010 +0800
@@ -158,6 +158,10 @@
     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 @@
     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 683bf4ce2e93 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Mon Jan 04 10:35:16 2010 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py   Fri Jan 08 16:01:55 2010 +0800
@@ -42,6 +42,7 @@
 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
@@ -766,8 +767,20 @@
 
         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 683bf4ce2e93 tools/python/xen/xend/server/pciif.py
--- a/tools/python/xen/xend/server/pciif.py     Mon Jan 04 10:35:16 2010 +0000
+++ b/tools/python/xen/xend/server/pciif.py     Fri Jan 08 16:01:55 2010 +0800
@@ -97,6 +97,15 @@
         """@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 @@
             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 @@
 
         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-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>