summaryrefslogtreecommitdiff
path: root/nova/objects/pci_device.py
diff options
context:
space:
mode:
Diffstat (limited to 'nova/objects/pci_device.py')
-rw-r--r--nova/objects/pci_device.py62
1 files changed, 22 insertions, 40 deletions
diff --git a/nova/objects/pci_device.py b/nova/objects/pci_device.py
index a61a5f3bd7..87e55645e9 100644
--- a/nova/objects/pci_device.py
+++ b/nova/objects/pci_device.py
@@ -279,10 +279,7 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
if self.dev_type == fields.PciDeviceType.SRIOV_PF:
# Update PF status to CLAIMED if all of it dependants are free
# and set their status to UNCLAIMABLE
- vfs_list = objects.PciDeviceList.get_by_parent_address(
- self._context,
- self.compute_node_id,
- self.address)
+ vfs_list = self.child_devices
if not all([vf.is_available() for vf in vfs_list]):
raise exception.PciDeviceVFInvalidStatus(
compute_node_id=self.compute_node_id,
@@ -301,10 +298,8 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
parent_ok_statuses = (fields.PciDeviceStatus.AVAILABLE,
fields.PciDeviceStatus.UNCLAIMABLE,
fields.PciDeviceStatus.UNAVAILABLE)
- try:
- parent = self.get_by_dev_addr(self._context,
- self.compute_node_id,
- self.parent_addr)
+ parent = self.parent_device
+ if parent:
if parent.status not in parent_ok_statuses:
raise exception.PciDevicePFInvalidStatus(
compute_node_id=self.compute_node_id,
@@ -314,11 +309,11 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
# Set PF status
if parent.status == fields.PciDeviceStatus.AVAILABLE:
parent.status = fields.PciDeviceStatus.UNCLAIMABLE
- except exception.PciDeviceNotFound:
+ else:
LOG.debug('Physical function addr: %(pf_addr)s parent of '
- 'VF addr: %(vf_addr)s was not found',
- {'pf_addr': self.parent_addr,
- 'vf_addr': self.address})
+ 'VF addr: %(vf_addr)s was not found',
+ {'pf_addr': self.parent_addr,
+ 'vf_addr': self.address})
self.status = fields.PciDeviceStatus.CLAIMED
self.instance_uuid = instance_uuid
@@ -343,10 +338,7 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
address=self.address, owner=self.instance_uuid,
hopeowner=instance['uuid'])
if self.dev_type == fields.PciDeviceType.SRIOV_PF:
- vfs_list = objects.PciDeviceList.get_by_parent_address(
- self._context,
- self.compute_node_id,
- self.address)
+ vfs_list = self.child_devices
if not all([vf.status in dependatns_ok_statuses for
vf in vfs_list]):
raise exception.PciDeviceVFInvalidStatus(
@@ -356,10 +348,8 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
fields.PciDeviceStatus.UNAVAILABLE)
elif (self.dev_type == fields.PciDeviceType.SRIOV_VF):
- try:
- parent = self.get_by_dev_addr(self._context,
- self.compute_node_id,
- self.parent_addr)
+ parent = self.parent_device
+ if parent:
if parent.status not in parent_ok_statuses:
raise exception.PciDevicePFInvalidStatus(
compute_node_id=self.compute_node_id,
@@ -368,7 +358,7 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
hopestatus=parent_ok_statuses)
# Set PF status
parent.status = fields.PciDeviceStatus.UNAVAILABLE
- except exception.PciDeviceNotFound:
+ else:
LOG.debug('Physical function addr: %(pf_addr)s parent of '
'VF addr: %(vf_addr)s was not found',
{'pf_addr': self.parent_addr,
@@ -412,31 +402,23 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
hopeowner=instance['uuid'])
if self.dev_type == fields.PciDeviceType.SRIOV_PF:
# Set all PF dependants status to AVAILABLE
- vfs_list = objects.PciDeviceList.get_by_parent_address(
- self._context,
- self.compute_node_id,
- self.address)
+ vfs_list = self.child_devices
self._bulk_update_status(vfs_list,
fields.PciDeviceStatus.AVAILABLE)
free_devs.extend(vfs_list)
if self.dev_type == fields.PciDeviceType.SRIOV_VF:
# Set PF status to AVAILABLE if all of it's VFs are free
- vfs_list = objects.PciDeviceList.get_by_parent_address(
- self._context,
- self.compute_node_id,
- self.parent_addr)
- if all([vf.is_available() for vf in vfs_list if vf.id != self.id]):
- try:
- parent = self.get_by_dev_addr(self._context,
- self.compute_node_id,
- self.parent_addr)
- parent.status = fields.PciDeviceStatus.AVAILABLE
+ parent = self.parent_device
+ if not parent:
+ LOG.debug('Physical function addr: %(pf_addr)s parent of '
+ 'VF addr: %(vf_addr)s was not found',
+ {'pf_addr': self.parent_addr,
+ 'vf_addr': self.address})
+ else:
+ vfs_list = parent.child_devices
+ if all([vf.is_available() for vf in vfs_list
+ if vf.id != self.id]):
free_devs.append(parent)
- except exception.PciDeviceNotFound:
- LOG.debug('Physical function addr: %(pf_addr)s parent of '
- 'VF addr: %(vf_addr)s was not found',
- {'pf_addr': self.parent_addr,
- 'vf_addr': self.address})
old_status = self.status
self.status = fields.PciDeviceStatus.AVAILABLE
free_devs.append(self)