[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen passthrough: fix recent regressions
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |