@@ -2343,6 +2343,20 @@ static X86CPUDefinition builtin_x86_defs[] = {
CPUID_6_EAX_ARAT,
.xlevel = 0x80000008,
.model_id = "Intel Xeon Processor (Cascadelake)",
+ .versions = (X86CPUVersionDefinition[]) {
+ { .version = 1 },
+ { .version = 2,
+ .props = (PropValue[]) {
+ { "arch-capabilities", "on" },
+ { "rdctl-no", "on" },
+ { "ibrs-all", "on" },
+ { "skip-l1dfl-vmentry", "on" },
+ { "mds-no", "on" },
+ { /* end of list */ }
+ },
+ },
+ { /* end of list */ }
+ }
},
{
.name = "Icelake-Client",
@@ -25,6 +25,10 @@
import avocado_qemu
import re
+def get_cpu_prop(vm, prop):
+ cpu_path = vm.command('query-cpus')[0].get('qom_path')
+ return vm.command('qom-get', path=cpu_path, property=prop)
+
class X86CPUModelAliases(avocado_qemu.Test):
"""
Validation of PC CPU model versions and CPU model aliases
@@ -229,3 +233,72 @@ class X86CPUModelAliases(avocado_qemu.Test):
'qemu64-v1 must not be an alias')
self.validate_aliases(cpus)
+
+ def test_Cascadelake_arch_capabilities_result(self):
+ # machine-type only:
+ vm = self.get_vm()
+ vm.add_args('-S')
+ vm.set_machine('pc-i440fx-4.1')
+ vm.add_args('-cpu', 'Cascadelake-Server,x-force-features=on,check=off,enforce=off')
+ vm.launch()
+ self.assertFalse(get_cpu_prop(vm, 'arch-capabilities'),
+ 'pc-i440fx-4.1 + Cascadelake-Server should not have arch-capabilities')
+
+ vm = self.get_vm()
+ vm.add_args('-S')
+ vm.set_machine('pc-i440fx-4.0')
+ vm.add_args('-cpu', 'Cascadelake-Server,x-force-features=on,check=off,enforce=off')
+ vm.launch()
+ self.assertFalse(get_cpu_prop(vm, 'arch-capabilities'),
+ 'pc-i440fx-4.0 + Cascadelake-Server should not have arch-capabilities')
+
+ # command line must override machine-type if CPU model is not versioned:
+ vm = self.get_vm()
+ vm.add_args('-S')
+ vm.set_machine('pc-i440fx-4.0')
+ vm.add_args('-cpu', 'Cascadelake-Server,x-force-features=on,check=off,enforce=off,+arch-capabilities')
+ vm.launch()
+ self.assertTrue(get_cpu_prop(vm, 'arch-capabilities'),
+ 'pc-i440fx-4.0 + Cascadelake-Server,+arch-capabilities should have arch-capabilities')
+
+ vm = self.get_vm()
+ vm.add_args('-S')
+ vm.set_machine('pc-i440fx-4.1')
+ vm.add_args('-cpu', 'Cascadelake-Server,x-force-features=on,check=off,enforce=off,-arch-capabilities')
+ vm.launch()
+ self.assertFalse(get_cpu_prop(vm, 'arch-capabilities'),
+ 'pc-i440fx-4.1 + Cascadelake-Server,-arch-capabilities should not have arch-capabilities')
+
+ # versioned CPU model overrides machine-type:
+ vm = self.get_vm()
+ vm.add_args('-S')
+ vm.set_machine('pc-i440fx-4.0')
+ vm.add_args('-cpu', 'Cascadelake-Server-v1,x-force-features=on,check=off,enforce=off')
+ vm.launch()
+ self.assertFalse(get_cpu_prop(vm, 'arch-capabilities'),
+ 'pc-i440fx-4.1 + Cascadelake-Server-v1 should not have arch-capabilities')
+
+ vm = self.get_vm()
+ vm.add_args('-S')
+ vm.set_machine('pc-i440fx-4.0')
+ vm.add_args('-cpu', 'Cascadelake-Server-v2,x-force-features=on,check=off,enforce=off')
+ vm.launch()
+ self.assertTrue(get_cpu_prop(vm, 'arch-capabilities'),
+ 'pc-i440fx-4.1 + Cascadelake-Server-v1 should have arch-capabilities')
+
+ # command line must override machine-type and versioned CPU model:
+ vm = self.get_vm()
+ vm.add_args('-S')
+ vm.set_machine('pc-i440fx-4.0')
+ vm.add_args('-cpu', 'Cascadelake-Server,x-force-features=on,check=off,enforce=off,+arch-capabilities')
+ vm.launch()
+ self.assertTrue(get_cpu_prop(vm, 'arch-capabilities'),
+ 'pc-i440fx-4.0 + Cascadelake-Server-v1,+arch-capabilities should have arch-capabilities')
+
+ vm = self.get_vm()
+ vm.add_args('-S')
+ vm.set_machine('pc-i440fx-4.1')
+ vm.add_args('-cpu', 'Cascadelake-Server-v2,x-force-features=on,check=off,enforce=off,-arch-capabilities')
+ vm.launch()
+ self.assertFalse(get_cpu_prop(vm, 'arch-capabilities'),
+ 'pc-i440fx-4.1 + Cascadelake-Server-v2,-arch-capabilities should not have arch-capabilities')