diff --git a/nova/tests/functional/regressions/test_bug_2139351.py b/nova/tests/functional/regressions/test_bug_2139351.py
index b5584353b287..76650633841f 100644
--- a/nova/tests/functional/regressions/test_bug_2139351.py
+++ b/nova/tests/functional/regressions/test_bug_2139351.py
@@ -126,18 +126,14 @@ class TestLiveMigrationIOThreadPinning(
dest_iothreadpin = self._get_xml_element(
dest_xml, './cputune/iothreadpin')
self.assertIsNotNone(dest_iothreadpin)
- # FIXME: this is bug 2139351
- self.assertEqual('0-1', dest_iothreadpin.get('cpuset'))
- self.assertNotEqual(
- dest_emulatorpin.get('cpuset'), dest_iothreadpin.get('cpuset'))
- # self.assertEqual(
- # '2-3', dest_iothreadpin.get('cpuset'),
- # f"iothreadpin was not updated during live migration. "
- # f"Expected '2-3' but got '{dest_iothreadpin.get('cpuset')}'")
+ self.assertEqual(
+ '2-3', dest_iothreadpin.get('cpuset'),
+ f"iothreadpin was not updated during live migration. "
+ f"Expected '2-3' but got '{dest_iothreadpin.get('cpuset')}'")
- # # Both should match
- # self.assertEqual(
- # dest_emulatorpin.get('cpuset'), dest_iothreadpin.get('cpuset'))
+ # Both should match
+ self.assertEqual(
+ dest_emulatorpin.get('cpuset'), dest_iothreadpin.get('cpuset'))
def test_live_migrate_unpinned_vcpu_cpuset_updated(self):
"""Test vcpu cpuset updated for unpinned VMs with cpu_shared_set.
diff --git a/nova/tests/unit/virt/libvirt/test_config.py b/nova/tests/unit/virt/libvirt/test_config.py
index 2816878aaeb1..4de39628cb3a 100644
--- a/nova/tests/unit/virt/libvirt/test_config.py
+++ b/nova/tests/unit/virt/libvirt/test_config.py
@@ -4049,10 +4049,14 @@ class LibvirtConfigGuestCPUTuneTest(LibvirtConfigBaseTest):
vcpu3.cpuset = set([6, 7])
cputune.vcpupin.extend([vcpu0, vcpu1, vcpu2, vcpu3])
- emu = config.LibvirtConfigGuestCPUTuneIOThreadPin()
+ emu = config.LibvirtConfigGuestCPUTuneEmulatorPin()
emu.cpuset = set([0, 1, 2, 3, 4, 5, 6, 7])
cputune.emulatorpin = emu
+ iot = config.LibvirtConfigGuestCPUTuneIOThreadPin()
+ iot.cpuset = set([0, 1, 2, 3, 4, 5, 6, 7])
+ cputune.iothreadpin = iot
+
sch0 = config.LibvirtConfigGuestCPUTuneVCPUSched()
sch0.vcpus = set([0, 1, 2, 3])
sch0.scheduler = "fifo"
@@ -4066,6 +4070,7 @@ class LibvirtConfigGuestCPUTuneTest(LibvirtConfigBaseTest):
xml = cputune.to_xml()
self.assertXmlEqual("""
+
diff --git a/nova/tests/unit/virt/libvirt/test_migration.py b/nova/tests/unit/virt/libvirt/test_migration.py
index 38680f10cf99..db44e7ac7dba 100644
--- a/nova/tests/unit/virt/libvirt/test_migration.py
+++ b/nova/tests/unit/virt/libvirt/test_migration.py
@@ -518,6 +518,7 @@ class UtilityMigrationTestCase(test.NoDBTestCase):
+
@@ -545,6 +546,7 @@ class UtilityMigrationTestCase(test.NoDBTestCase):
+
diff --git a/nova/virt/libvirt/migration.py b/nova/virt/libvirt/migration.py
index 80f3f7730265..30dc39b2cb8f 100644
--- a/nova/virt/libvirt/migration.py
+++ b/nova/virt/libvirt/migration.py
@@ -270,6 +270,10 @@ def _update_numa_xml(xml_doc, migrate_data):
emulatorpin.set('cpuset',
hardware.format_cpu_spec(info.emulator_pins))
+ iothreadpin = xml_doc.find('./cputune/iothreadpin')
+ iothreadpin.set('cpuset',
+ hardware.format_cpu_spec(info.emulator_pins))
+
all_cells = []
for guest_id, host_ids in info.cell_pins.items():
all_cells.extend(host_ids)