Merge "pci: Make sure PF is 'available' when last VF is freed"
This commit is contained in:
@@ -418,6 +418,7 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
|
|||||||
vfs_list = parent.child_devices
|
vfs_list = parent.child_devices
|
||||||
if all([vf.is_available() for vf in vfs_list
|
if all([vf.is_available() for vf in vfs_list
|
||||||
if vf.id != self.id]):
|
if vf.id != self.id]):
|
||||||
|
parent.status = fields.PciDeviceStatus.AVAILABLE
|
||||||
free_devs.append(parent)
|
free_devs.append(parent)
|
||||||
old_status = self.status
|
old_status = self.status
|
||||||
self.status = fields.PciDeviceStatus.AVAILABLE
|
self.status = fields.PciDeviceStatus.AVAILABLE
|
||||||
|
|||||||
@@ -521,7 +521,7 @@ class _TestSRIOVPciDeviceObject(object):
|
|||||||
'parent_addr': None,
|
'parent_addr': None,
|
||||||
'numa_node': 0}
|
'numa_node': 0}
|
||||||
pci_dev_obj = objects.PciDevice.create(None, pci_dev)
|
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 = []
|
pci_dev_obj.child_devices = []
|
||||||
self.sriov_pf_devices.append(pci_dev_obj)
|
self.sriov_pf_devices.append(pci_dev_obj)
|
||||||
|
|
||||||
@@ -537,7 +537,7 @@ class _TestSRIOVPciDeviceObject(object):
|
|||||||
'parent_addr': '0000:81:00.%d' % int(dev / 4),
|
'parent_addr': '0000:81:00.%d' % int(dev / 4),
|
||||||
'numa_node': 0}
|
'numa_node': 0}
|
||||||
pci_dev_obj = objects.PciDevice.create(None, pci_dev)
|
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 = self.sriov_pf_devices[int(dev / 4)]
|
||||||
pci_dev_obj.parent_device.child_devices.append(pci_dev_obj)
|
pci_dev_obj.parent_device.child_devices.append(pci_dev_obj)
|
||||||
self.sriov_vf_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
|
# check if parent device status has been changed to UNCLAIMABLE
|
||||||
parent = self._get_parent_by_address(devobj.parent_addr)
|
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):
|
def test_allocate_PF(self):
|
||||||
self._create_fake_instance()
|
self._create_fake_instance()
|
||||||
@@ -694,19 +694,19 @@ class _TestSRIOVPciDeviceObject(object):
|
|||||||
devobj.claim(self.inst.uuid)
|
devobj.claim(self.inst.uuid)
|
||||||
devobj.allocate(self.inst)
|
devobj.allocate(self.inst)
|
||||||
self.assertEqual(devobj.status,
|
self.assertEqual(devobj.status,
|
||||||
fields.PciDeviceStatus.ALLOCATED)
|
fields.PciDeviceStatus.ALLOCATED)
|
||||||
for devobj in dependents[:3]:
|
for devobj in dependents[:-1]:
|
||||||
devobj.free(self.inst)
|
devobj.free(self.inst)
|
||||||
# check if parent device status is still UNAVAILABLE
|
# check if parent device status is still UNAVAILABLE
|
||||||
parent = self._get_parent_by_address(devobj.parent_addr)
|
parent = self._get_parent_by_address(devobj.parent_addr)
|
||||||
self.assertTrue(fields.PciDeviceStatus.UNAVAILABLE,
|
self.assertEqual(fields.PciDeviceStatus.UNAVAILABLE,
|
||||||
parent.status)
|
parent.status)
|
||||||
for devobj in dependents[3:]:
|
devobj = dependents[-1]
|
||||||
devobj.free(self.inst)
|
devobj.free(self.inst)
|
||||||
# check if parent device status is now AVAILABLE
|
# check if parent device status is now AVAILABLE
|
||||||
parent = self._get_parent_by_address(devobj.parent_addr)
|
parent = self._get_parent_by_address(devobj.parent_addr)
|
||||||
self.assertTrue(fields.PciDeviceStatus.AVAILABLE,
|
self.assertEqual(fields.PciDeviceStatus.AVAILABLE,
|
||||||
parent.status)
|
parent.status)
|
||||||
|
|
||||||
|
|
||||||
class TestSRIOVPciDeviceListObject(test_objects._LocalTest,
|
class TestSRIOVPciDeviceListObject(test_objects._LocalTest,
|
||||||
|
|||||||
Reference in New Issue
Block a user