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

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

To: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] xend: Update info['platform']['pci']
From: "Zhai, Edwin" <edwin.zhai@xxxxxxxxx>
Date: Mon, 01 Jun 2009 17:54:30 +0800
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>, "horms@xxxxxxxxxxxx" <horms@xxxxxxxxxxxx>
Delivery-date: Mon, 01 Jun 2009 02:56:52 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <80C9E29C5A6928kanno.masaki@xxxxxxxxxxxxxx>
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>
References: <78C9DF622C5003kanno.masaki@xxxxxxxxxxxxxx> <20090601060158.GA8483@xxxxxxxxxxxxxxxxxxxxxx> <80C9E29C5A6928kanno.masaki@xxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.17 (X11/20080914)
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
<Prev in Thread] Current Thread [Next in Thread>