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

Re: [Xen-devel] [PATCH] xend: Update info['platform']['pci']



Masaki,
Attached is my patch to fix another bug caused by wrong synchronization of info['platform']['pci']. Just FYI. I don't know if it still can apply on unstable. We also need make sure old saved image can be restored with this fix.

Thanks,


Masaki Kanno wrote:
Mon, 1 Jun 2009 14:01:58 +0800, "Zhai, Edwin" wrote:

Masaki,
How about removing the 'pci' config from the info['platform']? We already have the info['devices'] to kept the pci/vif/disk config, so duplicated info in ['platform']['pci'] would cause synchronization troubles.


There are only several places using info['platform']['pci'], so take place of them with _getDeviceInfo_pci('0') should be okay.

Hi Edwin,

As far as I know, info['platform']['pci'] is referred in the following places.
 - _constructDomain@xxxxxxxxxxxxxxxxx
 - image_sxpr@xxxxxxxxxxxxx

Are there any others than the above? If there are others, I will confirm them.

Best regards,
 Kan

On Thu, May 28, 2009 at 03:01:50PM +0800, Masaki Kanno wrote:
Hi,

This patch updates info['platform']['pci'] for PCI devices assignment to domains.

When a domain is started, xend confirms by using xc.test_assign_device whether PCI devices can be assigned to the domain. For the confirmation, info['platform']['pci'] must be an appropriate value. However, info['platform']['pci'] may be not appropriate. Because info['platform']['pci'] isn't almost always updated even if the PCI device configuration of the domain was changed by using xm pci-attach/detach. This patch updates info['platform']['pci'] to the appropriate value when domains are started.

Cc: Simon Horman <horms@xxxxxxxxxxxx>
Signed-off-by: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx>

Best regards,
 Kan

Content-Description: ATT00001.txt
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
--
best rgds,
edwin

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


--
best rgds,
edwin

Index: hv/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- hv.orig/tools/python/xen/xend/XendDomainInfo.py
+++ hv/tools/python/xen/xend/XendDomainInfo.py
@@ -851,18 +851,9 @@ class XendDomainInfo:
             if num_devs == 0:
                 if self.info.is_hvm():
                     self.destroyDevice('pci', devid, True)
-                    del self.info['devices'][dev_uuid]
-                    platform = self.info['platform']
-                    orig_dev_num = len(platform['pci'])
-                    # TODO: can use this to keep some info to ask high level
-                    # management tools to hot insert a new passthrough dev
-                    # after migration
-                    if orig_dev_num != 0:
-                        #platform['pci'] = ["%dDEVs" % orig_dev_num]
-                        platform['pci'] = []
                 else:
                     self.destroyDevice('pci', devid)
-                    del self.info['devices'][dev_uuid]
+                del self.info['devices'][dev_uuid]
         else:
             new_dev_sxp = ['pci']
             for cur_dev in sxp.children(existing_dev_info, 'dev'):
@@ -884,15 +875,6 @@ class XendDomainInfo:
             # If there is only 'vscsi' in new_dev_sxp, remove the config.
             if len(sxp.children(new_dev_sxp, 'dev')) == 0:
                 del self.info['devices'][dev_uuid]
-                if self.info.is_hvm():
-                    platform = self.info['platform']
-                    orig_dev_num = len(platform['pci'])
-                    # TODO: can use this to keep some info to ask high level
-                    # management tools to hot insert a new passthrough dev
-                    # after migration
-                    if orig_dev_num != 0:
-                        #platform['pci'] = ["%dDEVs" % orig_dev_num]
-                        platform['pci'] = []
 
         xen.xend.XendDomain.instance().managed_config_save(self)
 
@@ -2388,11 +2370,18 @@ class XendDomainInfo:
                               (self.getVCpuCount() * 100))
 
         # Test whether the devices can be assigned with VT-d
-        pci = self.info["platform"].get("pci")
         pci_str = ''
-        if pci and len(pci) > 0:
-            pci = map(lambda x: x[0:4], pci)  # strip options 
-            pci_str = str(pci)
+        pci_list = []
+        devid = '0'
+        dev_info = self._getDeviceInfo_pci(devid)
+        if dev_info is not None:
+            dev_uuid = sxp.child_value(dev_info, 'uuid')
+            pci_conf = self.info['devices'][dev_uuid][1]
+            pci_devs = pci_conf['devs']
+            for x in pci_devs:
+                pci_list.append([x['domain'], x['bus'], x['slot'], x['func']])
+            pci_str = str(pci_list)
+
         if hvm and pci_str:
             bdf = xc.test_assign_device(0, pci_str)
             if bdf != 0:
Index: hv/tools/python/xen/xend/XendConfig.py
===================================================================
--- hv.orig/tools/python/xen/xend/XendConfig.py
+++ hv/tools/python/xen/xend/XendConfig.py
@@ -163,7 +163,6 @@ XENAPI_PLATFORM_CFG_TYPES = {
     'vncpasswd': str,
     'vncunused': int,
     'xauthority': str,
-    'pci': str,
     'vhpt': int,
     'guest_os_type': str,
     'hap': int,
@@ -214,7 +213,6 @@ XENAPI_CFG_TYPES = {
     'other_config': dict,
     'target': int,
     'security_label': str,
-    'pci': str,
     'cpuid' : dict,
     'cpuid_check' : dict,
     'machine_address_size': int,
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

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