1bbbd9b6eSWillian Rampazzo# 2bbbd9b6eSWillian Rampazzo# Basic validation of x86 versioned CPU models and CPU model aliases 3bbbd9b6eSWillian Rampazzo# 4bbbd9b6eSWillian Rampazzo# Copyright (c) 2019 Red Hat Inc 5bbbd9b6eSWillian Rampazzo# 6bbbd9b6eSWillian Rampazzo# Author: 7bbbd9b6eSWillian Rampazzo# Eduardo Habkost <ehabkost@redhat.com> 8bbbd9b6eSWillian Rampazzo# 9bbbd9b6eSWillian Rampazzo# This library is free software; you can redistribute it and/or 10bbbd9b6eSWillian Rampazzo# modify it under the terms of the GNU Lesser General Public 11bbbd9b6eSWillian Rampazzo# License as published by the Free Software Foundation; either 12bbbd9b6eSWillian Rampazzo# version 2.1 of the License, or (at your option) any later version. 13bbbd9b6eSWillian Rampazzo# 14bbbd9b6eSWillian Rampazzo# This library is distributed in the hope that it will be useful, 15bbbd9b6eSWillian Rampazzo# but WITHOUT ANY WARRANTY; without even the implied warranty of 16bbbd9b6eSWillian Rampazzo# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17bbbd9b6eSWillian Rampazzo# Lesser General Public License for more details. 18bbbd9b6eSWillian Rampazzo# 19bbbd9b6eSWillian Rampazzo# You should have received a copy of the GNU Lesser General Public 20bbbd9b6eSWillian Rampazzo# License along with this library; if not, see <http://www.gnu.org/licenses/>. 21bbbd9b6eSWillian Rampazzo# 22bbbd9b6eSWillian Rampazzo 23bbbd9b6eSWillian Rampazzo 24bbbd9b6eSWillian Rampazzoimport avocado_qemu 25bbbd9b6eSWillian Rampazzoimport re 26bbbd9b6eSWillian Rampazzo 272283b627SPhilippe Mathieu-Daudéclass X86CPUModelAliases(avocado_qemu.QemuSystemTest): 28bbbd9b6eSWillian Rampazzo """ 29bbbd9b6eSWillian Rampazzo Validation of PC CPU model versions and CPU model aliases 30bbbd9b6eSWillian Rampazzo 31bbbd9b6eSWillian Rampazzo :avocado: tags=arch:x86_64 32bbbd9b6eSWillian Rampazzo """ 33bbbd9b6eSWillian Rampazzo def validate_aliases(self, cpus): 34bbbd9b6eSWillian Rampazzo for c in cpus.values(): 35bbbd9b6eSWillian Rampazzo if 'alias-of' in c: 36bbbd9b6eSWillian Rampazzo # all aliases must point to a valid CPU model name: 37bbbd9b6eSWillian Rampazzo self.assertIn(c['alias-of'], cpus, 38bbbd9b6eSWillian Rampazzo '%s.alias-of (%s) is not a valid CPU model name' % (c['name'], c['alias-of'])) 39bbbd9b6eSWillian Rampazzo # aliases must not point to aliases 40bbbd9b6eSWillian Rampazzo self.assertNotIn('alias-of', cpus[c['alias-of']], 41bbbd9b6eSWillian Rampazzo '%s.alias-of (%s) points to another alias' % (c['name'], c['alias-of'])) 42bbbd9b6eSWillian Rampazzo 43bbbd9b6eSWillian Rampazzo # aliases must not be static 44bbbd9b6eSWillian Rampazzo self.assertFalse(c['static']) 45bbbd9b6eSWillian Rampazzo 46bbbd9b6eSWillian Rampazzo def validate_variant_aliases(self, cpus): 47bbbd9b6eSWillian Rampazzo # -noTSX, -IBRS and -IBPB variants of CPU models are special: 48bbbd9b6eSWillian Rampazzo # they shouldn't have their own versions: 49bbbd9b6eSWillian Rampazzo self.assertNotIn("Haswell-noTSX-v1", cpus, 50bbbd9b6eSWillian Rampazzo "Haswell-noTSX shouldn't be versioned") 51bbbd9b6eSWillian Rampazzo self.assertNotIn("Broadwell-noTSX-v1", cpus, 52bbbd9b6eSWillian Rampazzo "Broadwell-noTSX shouldn't be versioned") 53bbbd9b6eSWillian Rampazzo self.assertNotIn("Nehalem-IBRS-v1", cpus, 54bbbd9b6eSWillian Rampazzo "Nehalem-IBRS shouldn't be versioned") 55bbbd9b6eSWillian Rampazzo self.assertNotIn("Westmere-IBRS-v1", cpus, 56bbbd9b6eSWillian Rampazzo "Westmere-IBRS shouldn't be versioned") 57bbbd9b6eSWillian Rampazzo self.assertNotIn("SandyBridge-IBRS-v1", cpus, 58bbbd9b6eSWillian Rampazzo "SandyBridge-IBRS shouldn't be versioned") 59bbbd9b6eSWillian Rampazzo self.assertNotIn("IvyBridge-IBRS-v1", cpus, 60bbbd9b6eSWillian Rampazzo "IvyBridge-IBRS shouldn't be versioned") 61bbbd9b6eSWillian Rampazzo self.assertNotIn("Haswell-noTSX-IBRS-v1", cpus, 62bbbd9b6eSWillian Rampazzo "Haswell-noTSX-IBRS shouldn't be versioned") 63bbbd9b6eSWillian Rampazzo self.assertNotIn("Haswell-IBRS-v1", cpus, 64bbbd9b6eSWillian Rampazzo "Haswell-IBRS shouldn't be versioned") 65bbbd9b6eSWillian Rampazzo self.assertNotIn("Broadwell-noTSX-IBRS-v1", cpus, 66bbbd9b6eSWillian Rampazzo "Broadwell-noTSX-IBRS shouldn't be versioned") 67bbbd9b6eSWillian Rampazzo self.assertNotIn("Broadwell-IBRS-v1", cpus, 68bbbd9b6eSWillian Rampazzo "Broadwell-IBRS shouldn't be versioned") 69bbbd9b6eSWillian Rampazzo self.assertNotIn("Skylake-Client-IBRS-v1", cpus, 70bbbd9b6eSWillian Rampazzo "Skylake-Client-IBRS shouldn't be versioned") 71bbbd9b6eSWillian Rampazzo self.assertNotIn("Skylake-Server-IBRS-v1", cpus, 72bbbd9b6eSWillian Rampazzo "Skylake-Server-IBRS shouldn't be versioned") 73bbbd9b6eSWillian Rampazzo self.assertNotIn("EPYC-IBPB-v1", cpus, 74bbbd9b6eSWillian Rampazzo "EPYC-IBPB shouldn't be versioned") 75bbbd9b6eSWillian Rampazzo 76bbbd9b6eSWillian Rampazzo def test_4_0_alias_compatibility(self): 77bbbd9b6eSWillian Rampazzo """ 78bbbd9b6eSWillian Rampazzo Check if pc-*-4.0 unversioned CPU model won't be reported as aliases 79bbbd9b6eSWillian Rampazzo 80bbbd9b6eSWillian Rampazzo :avocado: tags=machine:pc-i440fx-4.0 81bbbd9b6eSWillian Rampazzo """ 82bbbd9b6eSWillian Rampazzo # pc-*-4.0 won't expose non-versioned CPU models as aliases 83bbbd9b6eSWillian Rampazzo # We do this to help management software to keep compatibility 84bbbd9b6eSWillian Rampazzo # with older QEMU versions that didn't have the versioned CPU model 85bbbd9b6eSWillian Rampazzo self.vm.add_args('-S') 86bbbd9b6eSWillian Rampazzo self.vm.launch() 87684750abSVladimir Sementsov-Ogievskiy cpus = dict((m['name'], m) for m in 88684750abSVladimir Sementsov-Ogievskiy self.vm.cmd('query-cpu-definitions')) 89bbbd9b6eSWillian Rampazzo 90bbbd9b6eSWillian Rampazzo self.assertFalse(cpus['Cascadelake-Server']['static'], 91bbbd9b6eSWillian Rampazzo 'unversioned Cascadelake-Server CPU model must not be static') 92bbbd9b6eSWillian Rampazzo self.assertNotIn('alias-of', cpus['Cascadelake-Server'], 93bbbd9b6eSWillian Rampazzo 'Cascadelake-Server must not be an alias') 94bbbd9b6eSWillian Rampazzo self.assertNotIn('alias-of', cpus['Cascadelake-Server-v1'], 95bbbd9b6eSWillian Rampazzo 'Cascadelake-Server-v1 must not be an alias') 96bbbd9b6eSWillian Rampazzo 97bbbd9b6eSWillian Rampazzo self.assertFalse(cpus['qemu64']['static'], 98bbbd9b6eSWillian Rampazzo 'unversioned qemu64 CPU model must not be static') 99bbbd9b6eSWillian Rampazzo self.assertNotIn('alias-of', cpus['qemu64'], 100bbbd9b6eSWillian Rampazzo 'qemu64 must not be an alias') 101bbbd9b6eSWillian Rampazzo self.assertNotIn('alias-of', cpus['qemu64-v1'], 102bbbd9b6eSWillian Rampazzo 'qemu64-v1 must not be an alias') 103bbbd9b6eSWillian Rampazzo 104bbbd9b6eSWillian Rampazzo self.validate_variant_aliases(cpus) 105bbbd9b6eSWillian Rampazzo 106bbbd9b6eSWillian Rampazzo # On pc-*-4.0, no CPU model should be reported as an alias: 107bbbd9b6eSWillian Rampazzo for name,c in cpus.items(): 108bbbd9b6eSWillian Rampazzo self.assertNotIn('alias-of', c, "%s shouldn't be an alias" % (name)) 109bbbd9b6eSWillian Rampazzo 110bbbd9b6eSWillian Rampazzo def test_4_1_alias(self): 111bbbd9b6eSWillian Rampazzo """ 112bbbd9b6eSWillian Rampazzo Check if unversioned CPU model is an alias pointing to right version 113bbbd9b6eSWillian Rampazzo 114bbbd9b6eSWillian Rampazzo :avocado: tags=machine:pc-i440fx-4.1 115bbbd9b6eSWillian Rampazzo """ 116bbbd9b6eSWillian Rampazzo self.vm.add_args('-S') 117bbbd9b6eSWillian Rampazzo self.vm.launch() 118bbbd9b6eSWillian Rampazzo 119684750abSVladimir Sementsov-Ogievskiy cpus = dict((m['name'], m) for m in 120684750abSVladimir Sementsov-Ogievskiy self.vm.cmd('query-cpu-definitions')) 121bbbd9b6eSWillian Rampazzo 122bbbd9b6eSWillian Rampazzo self.assertFalse(cpus['Cascadelake-Server']['static'], 123bbbd9b6eSWillian Rampazzo 'unversioned Cascadelake-Server CPU model must not be static') 124861f724dSThomas Huth self.assertEqual(cpus['Cascadelake-Server'].get('alias-of'), 125861f724dSThomas Huth 'Cascadelake-Server-v1', 126bbbd9b6eSWillian Rampazzo 'Cascadelake-Server must be an alias of Cascadelake-Server-v1') 127bbbd9b6eSWillian Rampazzo self.assertNotIn('alias-of', cpus['Cascadelake-Server-v1'], 128bbbd9b6eSWillian Rampazzo 'Cascadelake-Server-v1 must not be an alias') 129bbbd9b6eSWillian Rampazzo 130bbbd9b6eSWillian Rampazzo self.assertFalse(cpus['qemu64']['static'], 131bbbd9b6eSWillian Rampazzo 'unversioned qemu64 CPU model must not be static') 132861f724dSThomas Huth self.assertEqual(cpus['qemu64'].get('alias-of'), 'qemu64-v1', 133bbbd9b6eSWillian Rampazzo 'qemu64 must be an alias of qemu64-v1') 134bbbd9b6eSWillian Rampazzo self.assertNotIn('alias-of', cpus['qemu64-v1'], 135bbbd9b6eSWillian Rampazzo 'qemu64-v1 must not be an alias') 136bbbd9b6eSWillian Rampazzo 137bbbd9b6eSWillian Rampazzo self.validate_variant_aliases(cpus) 138bbbd9b6eSWillian Rampazzo 139bbbd9b6eSWillian Rampazzo # On pc-*-4.1, -noTSX and -IBRS models should be aliases: 140861f724dSThomas Huth self.assertEqual(cpus["Haswell"].get('alias-of'), 141bbbd9b6eSWillian Rampazzo "Haswell-v1", 142bbbd9b6eSWillian Rampazzo "Haswell must be an alias") 143861f724dSThomas Huth self.assertEqual(cpus["Haswell-noTSX"].get('alias-of'), 144bbbd9b6eSWillian Rampazzo "Haswell-v2", 145bbbd9b6eSWillian Rampazzo "Haswell-noTSX must be an alias") 146861f724dSThomas Huth self.assertEqual(cpus["Haswell-IBRS"].get('alias-of'), 147bbbd9b6eSWillian Rampazzo "Haswell-v3", 148bbbd9b6eSWillian Rampazzo "Haswell-IBRS must be an alias") 149861f724dSThomas Huth self.assertEqual(cpus["Haswell-noTSX-IBRS"].get('alias-of'), 150bbbd9b6eSWillian Rampazzo "Haswell-v4", 151bbbd9b6eSWillian Rampazzo "Haswell-noTSX-IBRS must be an alias") 152bbbd9b6eSWillian Rampazzo 153861f724dSThomas Huth self.assertEqual(cpus["Broadwell"].get('alias-of'), 154bbbd9b6eSWillian Rampazzo "Broadwell-v1", 155bbbd9b6eSWillian Rampazzo "Broadwell must be an alias") 156861f724dSThomas Huth self.assertEqual(cpus["Broadwell-noTSX"].get('alias-of'), 157bbbd9b6eSWillian Rampazzo "Broadwell-v2", 158bbbd9b6eSWillian Rampazzo "Broadwell-noTSX must be an alias") 159861f724dSThomas Huth self.assertEqual(cpus["Broadwell-IBRS"].get('alias-of'), 160bbbd9b6eSWillian Rampazzo "Broadwell-v3", 161bbbd9b6eSWillian Rampazzo "Broadwell-IBRS must be an alias") 162861f724dSThomas Huth self.assertEqual(cpus["Broadwell-noTSX-IBRS"].get('alias-of'), 163bbbd9b6eSWillian Rampazzo "Broadwell-v4", 164bbbd9b6eSWillian Rampazzo "Broadwell-noTSX-IBRS must be an alias") 165bbbd9b6eSWillian Rampazzo 166861f724dSThomas Huth self.assertEqual(cpus["Nehalem"].get('alias-of'), 167bbbd9b6eSWillian Rampazzo "Nehalem-v1", 168bbbd9b6eSWillian Rampazzo "Nehalem must be an alias") 169861f724dSThomas Huth self.assertEqual(cpus["Nehalem-IBRS"].get('alias-of'), 170bbbd9b6eSWillian Rampazzo "Nehalem-v2", 171bbbd9b6eSWillian Rampazzo "Nehalem-IBRS must be an alias") 172bbbd9b6eSWillian Rampazzo 173861f724dSThomas Huth self.assertEqual(cpus["Westmere"].get('alias-of'), 174bbbd9b6eSWillian Rampazzo "Westmere-v1", 175bbbd9b6eSWillian Rampazzo "Westmere must be an alias") 176861f724dSThomas Huth self.assertEqual(cpus["Westmere-IBRS"].get('alias-of'), 177bbbd9b6eSWillian Rampazzo "Westmere-v2", 178bbbd9b6eSWillian Rampazzo "Westmere-IBRS must be an alias") 179bbbd9b6eSWillian Rampazzo 180861f724dSThomas Huth self.assertEqual(cpus["SandyBridge"].get('alias-of'), 181bbbd9b6eSWillian Rampazzo "SandyBridge-v1", 182bbbd9b6eSWillian Rampazzo "SandyBridge must be an alias") 183861f724dSThomas Huth self.assertEqual(cpus["SandyBridge-IBRS"].get('alias-of'), 184bbbd9b6eSWillian Rampazzo "SandyBridge-v2", 185bbbd9b6eSWillian Rampazzo "SandyBridge-IBRS must be an alias") 186bbbd9b6eSWillian Rampazzo 187861f724dSThomas Huth self.assertEqual(cpus["IvyBridge"].get('alias-of'), 188bbbd9b6eSWillian Rampazzo "IvyBridge-v1", 189bbbd9b6eSWillian Rampazzo "IvyBridge must be an alias") 190861f724dSThomas Huth self.assertEqual(cpus["IvyBridge-IBRS"].get('alias-of'), 191bbbd9b6eSWillian Rampazzo "IvyBridge-v2", 192bbbd9b6eSWillian Rampazzo "IvyBridge-IBRS must be an alias") 193bbbd9b6eSWillian Rampazzo 194861f724dSThomas Huth self.assertEqual(cpus["Skylake-Client"].get('alias-of'), 195bbbd9b6eSWillian Rampazzo "Skylake-Client-v1", 196bbbd9b6eSWillian Rampazzo "Skylake-Client must be an alias") 197861f724dSThomas Huth self.assertEqual(cpus["Skylake-Client-IBRS"].get('alias-of'), 198bbbd9b6eSWillian Rampazzo "Skylake-Client-v2", 199bbbd9b6eSWillian Rampazzo "Skylake-Client-IBRS must be an alias") 200bbbd9b6eSWillian Rampazzo 201861f724dSThomas Huth self.assertEqual(cpus["Skylake-Server"].get('alias-of'), 202bbbd9b6eSWillian Rampazzo "Skylake-Server-v1", 203bbbd9b6eSWillian Rampazzo "Skylake-Server must be an alias") 204861f724dSThomas Huth self.assertEqual(cpus["Skylake-Server-IBRS"].get('alias-of'), 205bbbd9b6eSWillian Rampazzo "Skylake-Server-v2", 206bbbd9b6eSWillian Rampazzo "Skylake-Server-IBRS must be an alias") 207bbbd9b6eSWillian Rampazzo 208861f724dSThomas Huth self.assertEqual(cpus["EPYC"].get('alias-of'), 209bbbd9b6eSWillian Rampazzo "EPYC-v1", 210bbbd9b6eSWillian Rampazzo "EPYC must be an alias") 211861f724dSThomas Huth self.assertEqual(cpus["EPYC-IBPB"].get('alias-of'), 212bbbd9b6eSWillian Rampazzo "EPYC-v2", 213bbbd9b6eSWillian Rampazzo "EPYC-IBPB must be an alias") 214bbbd9b6eSWillian Rampazzo 215bbbd9b6eSWillian Rampazzo self.validate_aliases(cpus) 216bbbd9b6eSWillian Rampazzo 217bbbd9b6eSWillian Rampazzo def test_none_alias(self): 218bbbd9b6eSWillian Rampazzo """ 219bbbd9b6eSWillian Rampazzo Check if unversioned CPU model is an alias pointing to some version 220bbbd9b6eSWillian Rampazzo 221bbbd9b6eSWillian Rampazzo :avocado: tags=machine:none 222bbbd9b6eSWillian Rampazzo """ 223bbbd9b6eSWillian Rampazzo self.vm.add_args('-S') 224bbbd9b6eSWillian Rampazzo self.vm.launch() 225bbbd9b6eSWillian Rampazzo 226684750abSVladimir Sementsov-Ogievskiy cpus = dict((m['name'], m) for m in 227684750abSVladimir Sementsov-Ogievskiy self.vm.cmd('query-cpu-definitions')) 228bbbd9b6eSWillian Rampazzo 229bbbd9b6eSWillian Rampazzo self.assertFalse(cpus['Cascadelake-Server']['static'], 230bbbd9b6eSWillian Rampazzo 'unversioned Cascadelake-Server CPU model must not be static') 231bbbd9b6eSWillian Rampazzo self.assertTrue(re.match('Cascadelake-Server-v[0-9]+', cpus['Cascadelake-Server']['alias-of']), 232bbbd9b6eSWillian Rampazzo 'Cascadelake-Server must be an alias of versioned CPU model') 233bbbd9b6eSWillian Rampazzo self.assertNotIn('alias-of', cpus['Cascadelake-Server-v1'], 234bbbd9b6eSWillian Rampazzo 'Cascadelake-Server-v1 must not be an alias') 235bbbd9b6eSWillian Rampazzo 236bbbd9b6eSWillian Rampazzo self.assertFalse(cpus['qemu64']['static'], 237bbbd9b6eSWillian Rampazzo 'unversioned qemu64 CPU model must not be static') 238bbbd9b6eSWillian Rampazzo self.assertTrue(re.match('qemu64-v[0-9]+', cpus['qemu64']['alias-of']), 239bbbd9b6eSWillian Rampazzo 'qemu64 must be an alias of versioned CPU model') 240bbbd9b6eSWillian Rampazzo self.assertNotIn('alias-of', cpus['qemu64-v1'], 241bbbd9b6eSWillian Rampazzo 'qemu64-v1 must not be an alias') 242bbbd9b6eSWillian Rampazzo 243bbbd9b6eSWillian Rampazzo self.validate_aliases(cpus) 244bbbd9b6eSWillian Rampazzo 245bbbd9b6eSWillian Rampazzo 2462283b627SPhilippe Mathieu-Daudéclass CascadelakeArchCapabilities(avocado_qemu.QemuSystemTest): 247bbbd9b6eSWillian Rampazzo """ 248bbbd9b6eSWillian Rampazzo Validation of Cascadelake arch-capabilities 249bbbd9b6eSWillian Rampazzo 250bbbd9b6eSWillian Rampazzo :avocado: tags=arch:x86_64 251bbbd9b6eSWillian Rampazzo """ 252bbbd9b6eSWillian Rampazzo def get_cpu_prop(self, prop): 253684750abSVladimir Sementsov-Ogievskiy cpu_path = self.vm.cmd('query-cpus-fast')[0].get('qom-path') 254684750abSVladimir Sementsov-Ogievskiy return self.vm.cmd('qom-get', path=cpu_path, property=prop) 255bbbd9b6eSWillian Rampazzo 256bbbd9b6eSWillian Rampazzo def test_4_1(self): 257bbbd9b6eSWillian Rampazzo """ 258bbbd9b6eSWillian Rampazzo :avocado: tags=machine:pc-i440fx-4.1 259bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:Cascadelake-Server 260bbbd9b6eSWillian Rampazzo """ 261bbbd9b6eSWillian Rampazzo # machine-type only: 262bbbd9b6eSWillian Rampazzo self.vm.add_args('-S') 263bbbd9b6eSWillian Rampazzo self.set_vm_arg('-cpu', 264bbbd9b6eSWillian Rampazzo 'Cascadelake-Server,x-force-features=on,check=off,' 265bbbd9b6eSWillian Rampazzo 'enforce=off') 266bbbd9b6eSWillian Rampazzo self.vm.launch() 267bbbd9b6eSWillian Rampazzo self.assertFalse(self.get_cpu_prop('arch-capabilities'), 268bbbd9b6eSWillian Rampazzo 'pc-i440fx-4.1 + Cascadelake-Server should not have arch-capabilities') 269bbbd9b6eSWillian Rampazzo 270bbbd9b6eSWillian Rampazzo def test_4_0(self): 271bbbd9b6eSWillian Rampazzo """ 272bbbd9b6eSWillian Rampazzo :avocado: tags=machine:pc-i440fx-4.0 273bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:Cascadelake-Server 274bbbd9b6eSWillian Rampazzo """ 275bbbd9b6eSWillian Rampazzo self.vm.add_args('-S') 276bbbd9b6eSWillian Rampazzo self.set_vm_arg('-cpu', 277bbbd9b6eSWillian Rampazzo 'Cascadelake-Server,x-force-features=on,check=off,' 278bbbd9b6eSWillian Rampazzo 'enforce=off') 279bbbd9b6eSWillian Rampazzo self.vm.launch() 280bbbd9b6eSWillian Rampazzo self.assertFalse(self.get_cpu_prop('arch-capabilities'), 281bbbd9b6eSWillian Rampazzo 'pc-i440fx-4.0 + Cascadelake-Server should not have arch-capabilities') 282bbbd9b6eSWillian Rampazzo 283bbbd9b6eSWillian Rampazzo def test_set_4_0(self): 284bbbd9b6eSWillian Rampazzo """ 285bbbd9b6eSWillian Rampazzo :avocado: tags=machine:pc-i440fx-4.0 286bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:Cascadelake-Server 287bbbd9b6eSWillian Rampazzo """ 288bbbd9b6eSWillian Rampazzo # command line must override machine-type if CPU model is not versioned: 289bbbd9b6eSWillian Rampazzo self.vm.add_args('-S') 290bbbd9b6eSWillian Rampazzo self.set_vm_arg('-cpu', 291bbbd9b6eSWillian Rampazzo 'Cascadelake-Server,x-force-features=on,check=off,' 292bbbd9b6eSWillian Rampazzo 'enforce=off,+arch-capabilities') 293bbbd9b6eSWillian Rampazzo self.vm.launch() 294bbbd9b6eSWillian Rampazzo self.assertTrue(self.get_cpu_prop('arch-capabilities'), 295bbbd9b6eSWillian Rampazzo 'pc-i440fx-4.0 + Cascadelake-Server,+arch-capabilities should have arch-capabilities') 296bbbd9b6eSWillian Rampazzo 297bbbd9b6eSWillian Rampazzo def test_unset_4_1(self): 298bbbd9b6eSWillian Rampazzo """ 299bbbd9b6eSWillian Rampazzo :avocado: tags=machine:pc-i440fx-4.1 300bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:Cascadelake-Server 301bbbd9b6eSWillian Rampazzo """ 302bbbd9b6eSWillian Rampazzo self.vm.add_args('-S') 303bbbd9b6eSWillian Rampazzo self.set_vm_arg('-cpu', 304bbbd9b6eSWillian Rampazzo 'Cascadelake-Server,x-force-features=on,check=off,' 305bbbd9b6eSWillian Rampazzo 'enforce=off,-arch-capabilities') 306bbbd9b6eSWillian Rampazzo self.vm.launch() 307bbbd9b6eSWillian Rampazzo self.assertFalse(self.get_cpu_prop('arch-capabilities'), 308bbbd9b6eSWillian Rampazzo 'pc-i440fx-4.1 + Cascadelake-Server,-arch-capabilities should not have arch-capabilities') 309bbbd9b6eSWillian Rampazzo 310bbbd9b6eSWillian Rampazzo def test_v1_4_0(self): 311bbbd9b6eSWillian Rampazzo """ 312bbbd9b6eSWillian Rampazzo :avocado: tags=machine:pc-i440fx-4.0 313bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:Cascadelake-Server 314bbbd9b6eSWillian Rampazzo """ 315bbbd9b6eSWillian Rampazzo # versioned CPU model overrides machine-type: 316bbbd9b6eSWillian Rampazzo self.vm.add_args('-S') 317bbbd9b6eSWillian Rampazzo self.set_vm_arg('-cpu', 318bbbd9b6eSWillian Rampazzo 'Cascadelake-Server-v1,x-force-features=on,check=off,' 319bbbd9b6eSWillian Rampazzo 'enforce=off') 320bbbd9b6eSWillian Rampazzo self.vm.launch() 321bbbd9b6eSWillian Rampazzo self.assertFalse(self.get_cpu_prop('arch-capabilities'), 322bbbd9b6eSWillian Rampazzo 'pc-i440fx-4.0 + Cascadelake-Server-v1 should not have arch-capabilities') 323bbbd9b6eSWillian Rampazzo 324bbbd9b6eSWillian Rampazzo def test_v2_4_0(self): 325bbbd9b6eSWillian Rampazzo """ 326bbbd9b6eSWillian Rampazzo :avocado: tags=machine:pc-i440fx-4.0 327bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:Cascadelake-Server 328bbbd9b6eSWillian Rampazzo """ 329bbbd9b6eSWillian Rampazzo self.vm.add_args('-S') 330bbbd9b6eSWillian Rampazzo self.set_vm_arg('-cpu', 331bbbd9b6eSWillian Rampazzo 'Cascadelake-Server-v2,x-force-features=on,check=off,' 332bbbd9b6eSWillian Rampazzo 'enforce=off') 333bbbd9b6eSWillian Rampazzo self.vm.launch() 334bbbd9b6eSWillian Rampazzo self.assertTrue(self.get_cpu_prop('arch-capabilities'), 335bbbd9b6eSWillian Rampazzo 'pc-i440fx-4.0 + Cascadelake-Server-v2 should have arch-capabilities') 336bbbd9b6eSWillian Rampazzo 337bbbd9b6eSWillian Rampazzo def test_v1_set_4_0(self): 338bbbd9b6eSWillian Rampazzo """ 339bbbd9b6eSWillian Rampazzo :avocado: tags=machine:pc-i440fx-4.0 340bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:Cascadelake-Server 341bbbd9b6eSWillian Rampazzo """ 342bbbd9b6eSWillian Rampazzo # command line must override machine-type and versioned CPU model: 343bbbd9b6eSWillian Rampazzo self.vm.add_args('-S') 344bbbd9b6eSWillian Rampazzo self.set_vm_arg('-cpu', 345bbbd9b6eSWillian Rampazzo 'Cascadelake-Server-v1,x-force-features=on,check=off,' 346bbbd9b6eSWillian Rampazzo 'enforce=off,+arch-capabilities') 347bbbd9b6eSWillian Rampazzo self.vm.launch() 348bbbd9b6eSWillian Rampazzo self.assertTrue(self.get_cpu_prop('arch-capabilities'), 349bbbd9b6eSWillian Rampazzo 'pc-i440fx-4.0 + Cascadelake-Server-v1,+arch-capabilities should have arch-capabilities') 350bbbd9b6eSWillian Rampazzo 351bbbd9b6eSWillian Rampazzo def test_v2_unset_4_1(self): 352bbbd9b6eSWillian Rampazzo """ 353bbbd9b6eSWillian Rampazzo :avocado: tags=machine:pc-i440fx-4.1 354bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:Cascadelake-Server 355bbbd9b6eSWillian Rampazzo """ 356bbbd9b6eSWillian Rampazzo self.vm.add_args('-S') 357bbbd9b6eSWillian Rampazzo self.set_vm_arg('-cpu', 358bbbd9b6eSWillian Rampazzo 'Cascadelake-Server-v2,x-force-features=on,check=off,' 359bbbd9b6eSWillian Rampazzo 'enforce=off,-arch-capabilities') 360bbbd9b6eSWillian Rampazzo self.vm.launch() 361bbbd9b6eSWillian Rampazzo self.assertFalse(self.get_cpu_prop('arch-capabilities'), 362bbbd9b6eSWillian Rampazzo 'pc-i440fx-4.1 + Cascadelake-Server-v2,-arch-capabilities should not have arch-capabilities') 363