diff options
author | Jenkins <jenkins@review.openstack.org> | 2016-06-01 16:07:12 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2016-06-01 16:07:14 +0000 |
commit | 4e767d8fc7c7b762fdf58af4f29b496d55f1f80c (patch) | |
tree | 72bc7659f9469abd0ff42e94ada3414c0c6f83a7 | |
parent | 9e8a403001dbbf0438bf9be33caec9c3c8960dd6 (diff) | |
parent | b9858b2981fbdc52c0721d29cc15abce93371544 (diff) | |
download | nova-4e767d8fc7c7b762fdf58af4f29b496d55f1f80c.tar.gz |
Merge "pci: Make sure PF is 'available' when last VF is freed"
-rw-r--r-- | nova/objects/pci_device.py | 1 | ||||
-rw-r--r-- | nova/tests/unit/objects/test_pci_device.py | 26 |
2 files changed, 14 insertions, 13 deletions
diff --git a/nova/objects/pci_device.py b/nova/objects/pci_device.py index 87e55645e9..2e7c01538b 100644 --- a/nova/objects/pci_device.py +++ b/nova/objects/pci_device.py @@ -418,6 +418,7 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject): vfs_list = parent.child_devices if all([vf.is_available() for vf in vfs_list if vf.id != self.id]): + parent.status = fields.PciDeviceStatus.AVAILABLE free_devs.append(parent) old_status = self.status self.status = fields.PciDeviceStatus.AVAILABLE diff --git a/nova/tests/unit/objects/test_pci_device.py b/nova/tests/unit/objects/test_pci_device.py index b56cb455fe..8d39d9b6a0 100644 --- a/nova/tests/unit/objects/test_pci_device.py +++ b/nova/tests/unit/objects/test_pci_device.py @@ -521,7 +521,7 @@ class _TestSRIOVPciDeviceObject(object): 'parent_addr': None, 'numa_node': 0} pci_dev_obj = objects.PciDevice.create(None, pci_dev) - pci_dev_obj.id = num_pfs + 81 + pci_dev_obj.id = dev + 81 pci_dev_obj.child_devices = [] self.sriov_pf_devices.append(pci_dev_obj) @@ -537,7 +537,7 @@ class _TestSRIOVPciDeviceObject(object): 'parent_addr': '0000:81:00.%d' % int(dev / 4), 'numa_node': 0} pci_dev_obj = objects.PciDevice.create(None, pci_dev) - pci_dev_obj.id = num_vfs + 1 + pci_dev_obj.id = dev + 1 pci_dev_obj.parent_device = self.sriov_pf_devices[int(dev / 4)] pci_dev_obj.parent_device.child_devices.append(pci_dev_obj) self.sriov_vf_devices.append(pci_dev_obj) @@ -596,7 +596,7 @@ class _TestSRIOVPciDeviceObject(object): # check if parent device status has been changed to UNCLAIMABLE parent = self._get_parent_by_address(devobj.parent_addr) - self.assertTrue(fields.PciDeviceStatus.UNCLAIMABLE, parent.status) + self.assertEqual(fields.PciDeviceStatus.UNCLAIMABLE, parent.status) def test_allocate_PF(self): self._create_fake_instance() @@ -694,19 +694,19 @@ class _TestSRIOVPciDeviceObject(object): devobj.claim(self.inst.uuid) devobj.allocate(self.inst) self.assertEqual(devobj.status, - fields.PciDeviceStatus.ALLOCATED) - for devobj in dependents[:3]: + fields.PciDeviceStatus.ALLOCATED) + for devobj in dependents[:-1]: devobj.free(self.inst) # check if parent device status is still UNAVAILABLE parent = self._get_parent_by_address(devobj.parent_addr) - self.assertTrue(fields.PciDeviceStatus.UNAVAILABLE, - parent.status) - for devobj in dependents[3:]: - devobj.free(self.inst) - # check if parent device status is now AVAILABLE - parent = self._get_parent_by_address(devobj.parent_addr) - self.assertTrue(fields.PciDeviceStatus.AVAILABLE, - parent.status) + self.assertEqual(fields.PciDeviceStatus.UNAVAILABLE, + parent.status) + devobj = dependents[-1] + devobj.free(self.inst) + # check if parent device status is now AVAILABLE + parent = self._get_parent_by_address(devobj.parent_addr) + self.assertEqual(fields.PciDeviceStatus.AVAILABLE, + parent.status) class TestSRIOVPciDeviceListObject(test_objects._LocalTest, |