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] xen passthrough: fix recent regressions

To: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] xen passthrough: fix recent regressions
From: Simon Horman <horms@xxxxxxxxxxxx>
Date: Wed, 4 Nov 2009 08:39:55 +1100
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Tue, 03 Nov 2009 13:40:28 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <alpine.DEB.2.00.0911031124340.28545@kaball-desktop>
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: <alpine.DEB.2.00.0911031124340.28545@kaball-desktop>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.20 (2009-06-14)
On Tue, Nov 03, 2009 at 11:30:38AM +0000, Stefano Stabellini wrote:
> Hi all,
> this patch fixes the recent regressions pointed out by Dexuan, keeping
> pci passthrough working with stubdom too.
> In particular calling device_create when pci_state == 'Initialising' is
> a mistake because the state is always Initialising when attaching a
> devicem while device_create has too be called only when the pci backend
> is missing.
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> 
> ---
> 
> 
> diff -r 47136dbb972d tools/python/xen/xend/XendDomainInfo.py
> --- a/tools/python/xen/xend/XendDomainInfo.py Wed Oct 28 10:59:55 2009 +0000
> +++ b/tools/python/xen/xend/XendDomainInfo.py Tue Nov 03 11:06:16 2009 +0000
> @@ -597,6 +597,7 @@
>              return
>  
>          devid = '0'
> +        first = True
>          dev_info = self._getDeviceInfo_pci(devid)
>          if dev_info is None:
>              return
> @@ -619,7 +620,8 @@
>              head_dev = dev.pop()
>              dev_sxp = pci_convert_dict_to_sxp(head_dev, 'Initialising',
>                                                'Booting')
> -            self.pci_device_configure(dev_sxp)
> +            self.pci_device_configure(dev_sxp, first_dev = first)
> +            first = False
>  
>              # That is all for single-function virtual devices
>              if len(dev) == 0:
> @@ -829,7 +831,7 @@
>          return self.getDeviceController(dev_type).sxpr(devid)
>  
>  
> -    def pci_device_configure(self, dev_sxp, devid = 0):
> +    def pci_device_configure(self, dev_sxp, devid = 0, first_dev = False):
>          """Configure an existing pci device.
>          
>          @param dev_sxp: device configuration
> @@ -859,13 +861,13 @@
>          dev = dev_config['devs'][0]
>  
>          stubdomid = self.getStubdomDomid()
> -        if stubdomid is not None :
> -            from xen.xend import XendDomain
> -            
> XendDomain.instance().domain_lookup(stubdomid).pci_device_configure(dev_sxp[:])
> -
>          # Do HVM specific processing
>          if self.info.is_hvm():
> +            from xen.xend import XendDomain

Could this import go at the top of the .py file?

>              if pci_state == 'Initialising':
> +                if stubdomid is not None :

Could the above two lines be the following?
It seems a bit clearer to me.

                if pci_state == 'Initialising' and stubdomid is not None:

> +                    
> XendDomain.instance().domain_lookup(stubdomid).pci_device_configure(dev_sxp[:])
> +
>                  # HVM PCI device attachment
>                  if pci_sub_state == 'Booting':
>                      vdevfn = self.hvm_pci_device_insert(dev_config)
> @@ -896,6 +898,8 @@
>                  # same vslot.
>                  if (PCI_FUNC(int(new_dev['vdevfn'], 16)) == 0):
>                      self.hvm_destroyPCIDevice(new_dev)
> +                if stubdomid is not None :
> +                    
> XendDomain.instance().domain_lookup(stubdomid).pci_device_configure(dev_sxp[:])
>                  # Update vdevfn
>                  dev['vdevfn'] = new_dev['vdevfn']
>                  for n in sxp.children(pci_dev):
> @@ -908,15 +912,22 @@
>                  self.pci_device_check_attachability(dev)
>  
>          # If pci platform does not exist, create and exit.
> -        if pci_state == 'Initialising' :
> +        if existing_dev_info is None :
>              self.device_create(dev_sxp)
> +            return True
> +
> +        if first_dev is True :
> +            existing_dev_uuid = sxp.child_value(existing_dev_info, 'uuid')
> +            existing_pci_conf = self.info['devices'][existing_dev_uuid][1]
> +            devid = self._createDevice('pci', existing_pci_conf)
> +            self.info['devices'][existing_dev_uuid][1]['devid'] = devid
>              return True

Is the logic immediately above present elsewhere?
If so could it be broken out into a function into a function and shared?

>          if self.domid is not None:
>              # use DevController.reconfigureDevice to change device config
>              dev_control = self.getDeviceController(dev_class)
>              dev_uuid = dev_control.reconfigureDevice(devid, dev_config)
> -            if not self.info.is_hvm():
> +            if not self.info.is_hvm() and not self.info.is_stubdom():
>                  # in PV case, wait until backend state becomes connected.
>                  dev_control.waitForDevice_reconfigure(devid)
>              num_devs = dev_control.cleanupDevice(devid)

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