mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 10:34:58 -06:00
i386: Make unversioned CPU models be aliases
This will make unversioned CPU models behavior depend on the machine type: * "pc-*-4.0" and older will not report them as aliases. This is done to keep compatibility with older QEMU versions after management software starts translating aliases. * "pc-*-4.1" will translate unversioned CPU models to -v1. This is done to keep compatibility with existing management software, that still relies on CPU model runnability promises. * "none" will translate unversioned CPU models to their latest version. This is planned become the default in future machine types (probably in pc-*-4.3). Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Message-Id: <20190628002844.24894-8-ehabkost@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
53db89d93b
commit
0788a56bd1
7 changed files with 203 additions and 1 deletions
|
@ -103,3 +103,129 @@ class X86CPUModelAliases(avocado_qemu.Test):
|
|||
# On pc-*-4.0, no CPU model should be reported as an alias:
|
||||
for name,c in cpus.items():
|
||||
self.assertNotIn('alias-of', c, "%s shouldn't be an alias" % (name))
|
||||
|
||||
def test_4_1_alias(self):
|
||||
"""Check if unversioned CPU model is an alias pointing to right version"""
|
||||
self.vm.add_args('-S')
|
||||
self.vm.set_machine('pc-i440fx-4.1')
|
||||
self.vm.launch()
|
||||
|
||||
cpus = dict((m['name'], m) for m in self.vm.command('query-cpu-definitions'))
|
||||
|
||||
self.assertFalse(cpus['Cascadelake-Server']['static'],
|
||||
'unversioned Cascadelake-Server CPU model must not be static')
|
||||
self.assertEquals(cpus['Cascadelake-Server'].get('alias-of'), 'Cascadelake-Server-v1',
|
||||
'Cascadelake-Server must be an alias of Cascadelake-Server-v1')
|
||||
self.assertNotIn('alias-of', cpus['Cascadelake-Server-v1'],
|
||||
'Cascadelake-Server-v1 must not be an alias')
|
||||
|
||||
self.assertFalse(cpus['qemu64']['static'],
|
||||
'unversioned qemu64 CPU model must not be static')
|
||||
self.assertEquals(cpus['qemu64'].get('alias-of'), 'qemu64-v1',
|
||||
'qemu64 must be an alias of qemu64-v1')
|
||||
self.assertNotIn('alias-of', cpus['qemu64-v1'],
|
||||
'qemu64-v1 must not be an alias')
|
||||
|
||||
self.validate_variant_aliases(cpus)
|
||||
|
||||
# On pc-*-4.1, -noTSX and -IBRS models should be aliases:
|
||||
self.assertEquals(cpus["Haswell"].get('alias-of'),
|
||||
"Haswell-v1",
|
||||
"Haswell must be an alias")
|
||||
self.assertEquals(cpus["Haswell-noTSX"].get('alias-of'),
|
||||
"Haswell-v2",
|
||||
"Haswell-noTSX must be an alias")
|
||||
self.assertEquals(cpus["Haswell-IBRS"].get('alias-of'),
|
||||
"Haswell-v3",
|
||||
"Haswell-IBRS must be an alias")
|
||||
self.assertEquals(cpus["Haswell-noTSX-IBRS"].get('alias-of'),
|
||||
"Haswell-v4",
|
||||
"Haswell-noTSX-IBRS must be an alias")
|
||||
|
||||
self.assertEquals(cpus["Broadwell"].get('alias-of'),
|
||||
"Broadwell-v1",
|
||||
"Broadwell must be an alias")
|
||||
self.assertEquals(cpus["Broadwell-noTSX"].get('alias-of'),
|
||||
"Broadwell-v2",
|
||||
"Broadwell-noTSX must be an alias")
|
||||
self.assertEquals(cpus["Broadwell-IBRS"].get('alias-of'),
|
||||
"Broadwell-v3",
|
||||
"Broadwell-IBRS must be an alias")
|
||||
self.assertEquals(cpus["Broadwell-noTSX-IBRS"].get('alias-of'),
|
||||
"Broadwell-v4",
|
||||
"Broadwell-noTSX-IBRS must be an alias")
|
||||
|
||||
self.assertEquals(cpus["Nehalem"].get('alias-of'),
|
||||
"Nehalem-v1",
|
||||
"Nehalem must be an alias")
|
||||
self.assertEquals(cpus["Nehalem-IBRS"].get('alias-of'),
|
||||
"Nehalem-v2",
|
||||
"Nehalem-IBRS must be an alias")
|
||||
|
||||
self.assertEquals(cpus["Westmere"].get('alias-of'),
|
||||
"Westmere-v1",
|
||||
"Westmere must be an alias")
|
||||
self.assertEquals(cpus["Westmere-IBRS"].get('alias-of'),
|
||||
"Westmere-v2",
|
||||
"Westmere-IBRS must be an alias")
|
||||
|
||||
self.assertEquals(cpus["SandyBridge"].get('alias-of'),
|
||||
"SandyBridge-v1",
|
||||
"SandyBridge must be an alias")
|
||||
self.assertEquals(cpus["SandyBridge-IBRS"].get('alias-of'),
|
||||
"SandyBridge-v2",
|
||||
"SandyBridge-IBRS must be an alias")
|
||||
|
||||
self.assertEquals(cpus["IvyBridge"].get('alias-of'),
|
||||
"IvyBridge-v1",
|
||||
"IvyBridge must be an alias")
|
||||
self.assertEquals(cpus["IvyBridge-IBRS"].get('alias-of'),
|
||||
"IvyBridge-v2",
|
||||
"IvyBridge-IBRS must be an alias")
|
||||
|
||||
self.assertEquals(cpus["Skylake-Client"].get('alias-of'),
|
||||
"Skylake-Client-v1",
|
||||
"Skylake-Client must be an alias")
|
||||
self.assertEquals(cpus["Skylake-Client-IBRS"].get('alias-of'),
|
||||
"Skylake-Client-v2",
|
||||
"Skylake-Client-IBRS must be an alias")
|
||||
|
||||
self.assertEquals(cpus["Skylake-Server"].get('alias-of'),
|
||||
"Skylake-Server-v1",
|
||||
"Skylake-Server must be an alias")
|
||||
self.assertEquals(cpus["Skylake-Server-IBRS"].get('alias-of'),
|
||||
"Skylake-Server-v2",
|
||||
"Skylake-Server-IBRS must be an alias")
|
||||
|
||||
self.assertEquals(cpus["EPYC"].get('alias-of'),
|
||||
"EPYC-v1",
|
||||
"EPYC must be an alias")
|
||||
self.assertEquals(cpus["EPYC-IBPB"].get('alias-of'),
|
||||
"EPYC-v2",
|
||||
"EPYC-IBPB must be an alias")
|
||||
|
||||
self.validate_aliases(cpus)
|
||||
|
||||
def test_none_alias(self):
|
||||
"""Check if unversioned CPU model is an alias pointing to some version"""
|
||||
self.vm.add_args('-S')
|
||||
self.vm.set_machine('none')
|
||||
self.vm.launch()
|
||||
|
||||
cpus = dict((m['name'], m) for m in self.vm.command('query-cpu-definitions'))
|
||||
|
||||
self.assertFalse(cpus['Cascadelake-Server']['static'],
|
||||
'unversioned Cascadelake-Server CPU model must not be static')
|
||||
self.assertTrue(re.match('Cascadelake-Server-v[0-9]+', cpus['Cascadelake-Server']['alias-of']),
|
||||
'Cascadelake-Server must be an alias of versioned CPU model')
|
||||
self.assertNotIn('alias-of', cpus['Cascadelake-Server-v1'],
|
||||
'Cascadelake-Server-v1 must not be an alias')
|
||||
|
||||
self.assertFalse(cpus['qemu64']['static'],
|
||||
'unversioned qemu64 CPU model must not be static')
|
||||
self.assertTrue(re.match('qemu64-v[0-9]+', cpus['qemu64']['alias-of']),
|
||||
'qemu64 must be an alias of versioned CPU model')
|
||||
self.assertNotIn('alias-of', cpus['qemu64-v1'],
|
||||
'qemu64-v1 must not be an alias')
|
||||
|
||||
self.validate_aliases(cpus)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue