# HG changeset patch # User t.horikoshi@jp.fujitsu.com # Date 1215499511 -32400 # Node ID 0e8c3c0e145d920aca1628dd6d2e8e04448f2796 # Parent 5eaec8296a226f0d561da05d5faca250ff56112c pvscsi: Source marge, and Fix attach, detach. Signed-off-by: Tomonari Horikoshi Signed-off-by: Jun Kamada diff -r 5eaec8296a22 -r 0e8c3c0e145d tools/python/xen/xend/XendConfig.py --- a/tools/python/xen/xend/XendConfig.py Sun Jul 06 20:16:24 2008 +0100 +++ b/tools/python/xen/xend/XendConfig.py Tue Jul 08 15:45:11 2008 +0900 @@ -1223,22 +1223,23 @@ class XendConfig(dict): pci_dict = self.pci_convert_sxp_to_dict(config) pci_devs = pci_dict['devs'] - # create XenAPI DPCI objects. - for pci_dev in pci_devs: - dpci_uuid = pci_dev.get('uuid') - ppci_uuid = XendPPCI.get_by_sbdf(pci_dev['domain'], - pci_dev['bus'], - pci_dev['slot'], - pci_dev['func']) - if ppci_uuid is None: - continue - dpci_record = { - 'VM': self['uuid'], - 'PPCI': ppci_uuid, - 'hotplug_slot': pci_dev.get('vslot', 0) - } - XendDPCI(dpci_uuid, dpci_record) - + if dev_type != 'vscsi': + # create XenAPI DPCI objects. + for pci_dev in pci_devs: + dpci_uuid = pci_dev.get('uuid') + ppci_uuid = XendPPCI.get_by_sbdf(pci_dev['domain'], + pci_dev['bus'], + pci_dev['slot'], + pci_dev['func']) + if ppci_uuid is None: + continue + dpci_record = { + 'VM': self['uuid'], + 'PPCI': ppci_uuid, + 'hotplug_slot': pci_dev.get('vslot', 0) + } + XendDPCI(dpci_uuid, dpci_record) + target['devices'][pci_devs_uuid] = (dev_type, {'devs': pci_devs, 'uuid': pci_devs_uuid}) @@ -1633,21 +1634,22 @@ class XendConfig(dict): for dpci_uuid in XendDPCI.get_by_VM(self['uuid']): XendAPIStore.deregister(dpci_uuid, "DPCI") - # create XenAPI DPCI objects. - for pci_dev in pci_devs: - dpci_uuid = pci_dev.get('uuid') - ppci_uuid = XendPPCI.get_by_sbdf(pci_dev['domain'], - pci_dev['bus'], - pci_dev['slot'], - pci_dev['func']) - if ppci_uuid is None: - continue - dpci_record = { - 'VM': self['uuid'], - 'PPCI': ppci_uuid, - 'hotplug_slot': pci_dev.get('vslot', 0) - } - XendDPCI(dpci_uuid, dpci_record) + if dev_type != 'vscsi': + # create XenAPI DPCI objects. + for pci_dev in pci_devs: + dpci_uuid = pci_dev.get('uuid') + ppci_uuid = XendPPCI.get_by_sbdf(pci_dev['domain'], + pci_dev['bus'], + pci_dev['slot'], + pci_dev['func']) + if ppci_uuid is None: + continue + dpci_record = { + 'VM': self['uuid'], + 'PPCI': ppci_uuid, + 'hotplug_slot': pci_dev.get('vslot', 0) + } + XendDPCI(dpci_uuid, dpci_record) self['devices'][dev_uuid] = (dev_type, {'devs': pci_devs, diff -r 5eaec8296a22 -r 0e8c3c0e145d tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Sun Jul 06 20:16:24 2008 +0100 +++ b/tools/python/xen/xend/XendDomainInfo.py Tue Jul 08 15:45:11 2008 +0900 @@ -758,7 +758,7 @@ class XendDomainInfo: if dev_class != 'vscsi': return False - dev_config = self.pci_convert_sxp_to_dict(dev_sxp) + dev_config = self.info.pci_convert_sxp_to_dict(dev_sxp) dev = dev_config['devs'][0] req_devid = sxp.child_value(dev_sxp, 'devid') req_devid = int(req_devid) diff -r 5eaec8296a22 -r 0e8c3c0e145d tools/python/xen/xend/server/vscsiif.py --- a/tools/python/xen/xend/server/vscsiif.py Sun Jul 06 20:16:24 2008 +0100 +++ b/tools/python/xen/xend/server/vscsiif.py Tue Jul 08 15:45:11 2008 +0900 @@ -169,6 +169,10 @@ class VSCSIController(DevController): devid = int(devid) vscsi_config = config['devs'][0] states = config.get('states', []) + driver_state = self.readBackend(devid, 'state') + if str(xenbusState['Connected']) != driver_state: + raise VmError("Driver status is not connected") + uuid = self.readBackend(devid, 'uuid') if states[0] == 'Initialising': back['uuid'] = uuid