1*0034d039SAni Sinha# Check for crash when using memory beyond the available guest processor 2*0034d039SAni Sinha# address space. 3*0034d039SAni Sinha# 4*0034d039SAni Sinha# Copyright (c) 2023 Red Hat, Inc. 5*0034d039SAni Sinha# 6*0034d039SAni Sinha# Author: 7*0034d039SAni Sinha# Ani Sinha <anisinha@redhat.com> 8*0034d039SAni Sinha# 9*0034d039SAni Sinha# SPDX-License-Identifier: GPL-2.0-or-later 10*0034d039SAni Sinha 11*0034d039SAni Sinhafrom avocado_qemu import QemuSystemTest 12*0034d039SAni Sinhaimport signal 13*0034d039SAni Sinhaimport time 14*0034d039SAni Sinha 15*0034d039SAni Sinhaclass MemAddrCheck(QemuSystemTest): 16*0034d039SAni Sinha # after launch, in order to generate the logs from QEMU we need to 17*0034d039SAni Sinha # wait for some time. Launching and then immediately shutting down 18*0034d039SAni Sinha # the VM generates empty logs. A delay of 1 second is added for 19*0034d039SAni Sinha # this reason. 20*0034d039SAni Sinha DELAY_Q35_BOOT_SEQUENCE = 1 21*0034d039SAni Sinha 22*0034d039SAni Sinha # first, lets test some 32-bit processors. 23*0034d039SAni Sinha # for all 32-bit cases, pci64_hole_size is 0. 24*0034d039SAni Sinha def test_phybits_low_pse36(self): 25*0034d039SAni Sinha """ 26*0034d039SAni Sinha :avocado: tags=machine:q35 27*0034d039SAni Sinha :avocado: tags=arch:x86_64 28*0034d039SAni Sinha 29*0034d039SAni Sinha With pse36 feature ON, a processor has 36 bits of addressing. So it can 30*0034d039SAni Sinha access up to a maximum of 64GiB of memory. Memory hotplug region begins 31*0034d039SAni Sinha at 4 GiB boundary when "above_4g_mem_size" is 0 (this would be true when 32*0034d039SAni Sinha we have 0.5 GiB of VM memory, see pc_q35_init()). This means total 33*0034d039SAni Sinha hotpluggable memory size is 60 GiB. Per slot, we reserve 1 GiB of memory 34*0034d039SAni Sinha for dimm alignment for all newer machines (see enforce_aligned_dimm 35*0034d039SAni Sinha property for pc machines and pc_get_device_memory_range()). That leaves 36*0034d039SAni Sinha total hotpluggable actual memory size of 59 GiB. If the VM is started 37*0034d039SAni Sinha with 0.5 GiB of memory, maxmem should be set to a maximum value of 38*0034d039SAni Sinha 59.5 GiB to ensure that the processor can address all memory directly. 39*0034d039SAni Sinha Note that 64-bit pci hole size is 0 in this case. If maxmem is set to 40*0034d039SAni Sinha 59.6G, QEMU should fail to start with a message "phy-bits are too low". 41*0034d039SAni Sinha If maxmem is set to 59.5G with all other QEMU parameters identical, QEMU 42*0034d039SAni Sinha should start fine. 43*0034d039SAni Sinha """ 44*0034d039SAni Sinha self.vm.add_args('-S', '-machine', 'q35', '-m', 45*0034d039SAni Sinha '512,slots=1,maxmem=59.6G', 46*0034d039SAni Sinha '-cpu', 'pentium,pse36=on', '-display', 'none', 47*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 48*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 49*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 50*0034d039SAni Sinha self.vm.launch() 51*0034d039SAni Sinha self.vm.wait() 52*0034d039SAni Sinha self.assertEquals(self.vm.exitcode(), 1, "QEMU exit code should be 1") 53*0034d039SAni Sinha self.assertRegex(self.vm.get_log(), r'phys-bits too low') 54*0034d039SAni Sinha 55*0034d039SAni Sinha def test_phybits_low_pae(self): 56*0034d039SAni Sinha """ 57*0034d039SAni Sinha :avocado: tags=machine:q35 58*0034d039SAni Sinha :avocado: tags=arch:x86_64 59*0034d039SAni Sinha 60*0034d039SAni Sinha With pae feature ON, a processor has 36 bits of addressing. So it can 61*0034d039SAni Sinha access up to a maximum of 64GiB of memory. Rest is the same as the case 62*0034d039SAni Sinha with pse36 above. 63*0034d039SAni Sinha """ 64*0034d039SAni Sinha self.vm.add_args('-S', '-machine', 'q35', '-m', 65*0034d039SAni Sinha '512,slots=1,maxmem=59.6G', 66*0034d039SAni Sinha '-cpu', 'pentium,pae=on', '-display', 'none', 67*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 68*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 69*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 70*0034d039SAni Sinha self.vm.launch() 71*0034d039SAni Sinha self.vm.wait() 72*0034d039SAni Sinha self.assertEquals(self.vm.exitcode(), 1, "QEMU exit code should be 1") 73*0034d039SAni Sinha self.assertRegex(self.vm.get_log(), r'phys-bits too low') 74*0034d039SAni Sinha 75*0034d039SAni Sinha def test_phybits_ok_pentium_pse36(self): 76*0034d039SAni Sinha """ 77*0034d039SAni Sinha :avocado: tags=machine:q35 78*0034d039SAni Sinha :avocado: tags=arch:x86_64 79*0034d039SAni Sinha 80*0034d039SAni Sinha Setting maxmem to 59.5G and making sure that QEMU can start with the 81*0034d039SAni Sinha same options as the failing case above with pse36 cpu feature. 82*0034d039SAni Sinha """ 83*0034d039SAni Sinha self.vm.add_args('-machine', 'q35', '-m', 84*0034d039SAni Sinha '512,slots=1,maxmem=59.5G', 85*0034d039SAni Sinha '-cpu', 'pentium,pse36=on', '-display', 'none', 86*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 87*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 88*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 89*0034d039SAni Sinha self.vm.launch() 90*0034d039SAni Sinha time.sleep(self.DELAY_Q35_BOOT_SEQUENCE) 91*0034d039SAni Sinha self.vm.shutdown() 92*0034d039SAni Sinha self.assertNotRegex(self.vm.get_log(), r'phys-bits too low') 93*0034d039SAni Sinha 94*0034d039SAni Sinha def test_phybits_ok_pentium_pae(self): 95*0034d039SAni Sinha """ 96*0034d039SAni Sinha :avocado: tags=machine:q35 97*0034d039SAni Sinha :avocado: tags=arch:x86_64 98*0034d039SAni Sinha 99*0034d039SAni Sinha Test is same as above but now with pae cpu feature turned on. 100*0034d039SAni Sinha Setting maxmem to 59.5G and making sure that QEMU can start fine 101*0034d039SAni Sinha with the same options as the case above. 102*0034d039SAni Sinha """ 103*0034d039SAni Sinha self.vm.add_args('-machine', 'q35', '-m', 104*0034d039SAni Sinha '512,slots=1,maxmem=59.5G', 105*0034d039SAni Sinha '-cpu', 'pentium,pae=on', '-display', 'none', 106*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 107*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 108*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 109*0034d039SAni Sinha self.vm.launch() 110*0034d039SAni Sinha time.sleep(self.DELAY_Q35_BOOT_SEQUENCE) 111*0034d039SAni Sinha self.vm.shutdown() 112*0034d039SAni Sinha self.assertNotRegex(self.vm.get_log(), r'phys-bits too low') 113*0034d039SAni Sinha 114*0034d039SAni Sinha def test_phybits_ok_pentium2(self): 115*0034d039SAni Sinha """ 116*0034d039SAni Sinha :avocado: tags=machine:q35 117*0034d039SAni Sinha :avocado: tags=arch:x86_64 118*0034d039SAni Sinha 119*0034d039SAni Sinha Pentium2 has 36 bits of addressing, so its same as pentium 120*0034d039SAni Sinha with pse36 ON. 121*0034d039SAni Sinha """ 122*0034d039SAni Sinha self.vm.add_args('-machine', 'q35', '-m', 123*0034d039SAni Sinha '512,slots=1,maxmem=59.5G', 124*0034d039SAni Sinha '-cpu', 'pentium2', '-display', 'none', 125*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 126*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 127*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 128*0034d039SAni Sinha self.vm.launch() 129*0034d039SAni Sinha time.sleep(self.DELAY_Q35_BOOT_SEQUENCE) 130*0034d039SAni Sinha self.vm.shutdown() 131*0034d039SAni Sinha self.assertNotRegex(self.vm.get_log(), r'phys-bits too low') 132*0034d039SAni Sinha 133*0034d039SAni Sinha def test_phybits_low_nonpse36(self): 134*0034d039SAni Sinha """ 135*0034d039SAni Sinha :avocado: tags=machine:q35 136*0034d039SAni Sinha :avocado: tags=arch:x86_64 137*0034d039SAni Sinha 138*0034d039SAni Sinha Pentium processor has 32 bits of addressing without pse36 or pae 139*0034d039SAni Sinha so it can access physical address up to 4 GiB. Setting maxmem to 140*0034d039SAni Sinha 4 GiB should make QEMU fail to start with "phys-bits too low" 141*0034d039SAni Sinha message because the region for memory hotplug is always placed 142*0034d039SAni Sinha above 4 GiB due to the PCI hole and simplicity. 143*0034d039SAni Sinha """ 144*0034d039SAni Sinha self.vm.add_args('-S', '-machine', 'q35', '-m', 145*0034d039SAni Sinha '512,slots=1,maxmem=4G', 146*0034d039SAni Sinha '-cpu', 'pentium', '-display', 'none', 147*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 148*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 149*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 150*0034d039SAni Sinha self.vm.launch() 151*0034d039SAni Sinha self.vm.wait() 152*0034d039SAni Sinha self.assertEquals(self.vm.exitcode(), 1, "QEMU exit code should be 1") 153*0034d039SAni Sinha self.assertRegex(self.vm.get_log(), r'phys-bits too low') 154*0034d039SAni Sinha 155*0034d039SAni Sinha # now lets test some 64-bit CPU cases. 156*0034d039SAni Sinha def test_phybits_low_tcg_q35_70_amd(self): 157*0034d039SAni Sinha """ 158*0034d039SAni Sinha :avocado: tags=machine:q35 159*0034d039SAni Sinha :avocado: tags=arch:x86_64 160*0034d039SAni Sinha 161*0034d039SAni Sinha For q35 7.1 machines and above, there is a HT window that starts at 162*0034d039SAni Sinha 1024 GiB and ends at 1 TiB - 1. If the max GPA falls in this range, 163*0034d039SAni Sinha "above_4G" memory is adjusted to start at 1 TiB boundary for AMD cpus 164*0034d039SAni Sinha in the default case. Lets test without that case for machines 7.0. 165*0034d039SAni Sinha For q35-7.0 machines, "above 4G" memory starts are 4G. 166*0034d039SAni Sinha pci64_hole size is 32 GiB. Since TCG_PHYS_ADDR_BITS is defined to 167*0034d039SAni Sinha be 40, TCG emulated CPUs have maximum of 1 TiB (1024 GiB) of 168*0034d039SAni Sinha directly addressible memory. 169*0034d039SAni Sinha Hence, maxmem value at most can be 170*0034d039SAni Sinha 1024 GiB - 4 GiB - 1 GiB per slot for alignment - 32 GiB + 0.5 GiB 171*0034d039SAni Sinha which is equal to 987.5 GiB. Setting the value to 988 GiB should 172*0034d039SAni Sinha make QEMU fail with the error message. 173*0034d039SAni Sinha """ 174*0034d039SAni Sinha self.vm.add_args('-S', '-machine', 'pc-q35-7.0', '-m', 175*0034d039SAni Sinha '512,slots=1,maxmem=988G', 176*0034d039SAni Sinha '-display', 'none', 177*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 178*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 179*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 180*0034d039SAni Sinha self.vm.launch() 181*0034d039SAni Sinha self.vm.wait() 182*0034d039SAni Sinha self.assertEquals(self.vm.exitcode(), 1, "QEMU exit code should be 1") 183*0034d039SAni Sinha self.assertRegex(self.vm.get_log(), r'phys-bits too low') 184*0034d039SAni Sinha 185*0034d039SAni Sinha def test_phybits_low_tcg_q35_71_amd(self): 186*0034d039SAni Sinha """ 187*0034d039SAni Sinha :avocado: tags=machine:q35 188*0034d039SAni Sinha :avocado: tags=arch:x86_64 189*0034d039SAni Sinha 190*0034d039SAni Sinha AMD_HT_START is defined to be at 1012 GiB. So for q35 machines 191*0034d039SAni Sinha version > 7.0 and AMD cpus, instead of 1024 GiB limit for 40 bit 192*0034d039SAni Sinha processor address space, it has to be 1012 GiB , that is 12 GiB 193*0034d039SAni Sinha less than the case above in order to accomodate HT hole. 194*0034d039SAni Sinha Make sure QEMU fails when maxmem size is 976 GiB (12 GiB less 195*0034d039SAni Sinha than 988 GiB). 196*0034d039SAni Sinha """ 197*0034d039SAni Sinha self.vm.add_args('-S', '-machine', 'pc-q35-7.1', '-m', 198*0034d039SAni Sinha '512,slots=1,maxmem=976G', 199*0034d039SAni Sinha '-display', 'none', 200*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 201*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 202*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 203*0034d039SAni Sinha self.vm.launch() 204*0034d039SAni Sinha self.vm.wait() 205*0034d039SAni Sinha self.assertEquals(self.vm.exitcode(), 1, "QEMU exit code should be 1") 206*0034d039SAni Sinha self.assertRegex(self.vm.get_log(), r'phys-bits too low') 207*0034d039SAni Sinha 208*0034d039SAni Sinha def test_phybits_ok_tcg_q35_70_amd(self): 209*0034d039SAni Sinha """ 210*0034d039SAni Sinha :avocado: tags=machine:q35 211*0034d039SAni Sinha :avocado: tags=arch:x86_64 212*0034d039SAni Sinha 213*0034d039SAni Sinha Same as q35-7.0 AMD case except that here we check that QEMU can 214*0034d039SAni Sinha successfully start when maxmem is < 988G. 215*0034d039SAni Sinha """ 216*0034d039SAni Sinha self.vm.add_args('-S', '-machine', 'pc-q35-7.0', '-m', 217*0034d039SAni Sinha '512,slots=1,maxmem=987.5G', 218*0034d039SAni Sinha '-display', 'none', 219*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 220*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 221*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 222*0034d039SAni Sinha self.vm.launch() 223*0034d039SAni Sinha time.sleep(self.DELAY_Q35_BOOT_SEQUENCE) 224*0034d039SAni Sinha self.vm.shutdown() 225*0034d039SAni Sinha self.assertNotRegex(self.vm.get_log(), r'phys-bits too low') 226*0034d039SAni Sinha 227*0034d039SAni Sinha def test_phybits_ok_tcg_q35_71_amd(self): 228*0034d039SAni Sinha """ 229*0034d039SAni Sinha :avocado: tags=machine:q35 230*0034d039SAni Sinha :avocado: tags=arch:x86_64 231*0034d039SAni Sinha 232*0034d039SAni Sinha Same as q35-7.1 AMD case except that here we check that QEMU can 233*0034d039SAni Sinha successfully start when maxmem is < 976G. 234*0034d039SAni Sinha """ 235*0034d039SAni Sinha self.vm.add_args('-S', '-machine', 'pc-q35-7.1', '-m', 236*0034d039SAni Sinha '512,slots=1,maxmem=975.5G', 237*0034d039SAni Sinha '-display', 'none', 238*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 239*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 240*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 241*0034d039SAni Sinha self.vm.launch() 242*0034d039SAni Sinha time.sleep(self.DELAY_Q35_BOOT_SEQUENCE) 243*0034d039SAni Sinha self.vm.shutdown() 244*0034d039SAni Sinha self.assertNotRegex(self.vm.get_log(), r'phys-bits too low') 245*0034d039SAni Sinha 246*0034d039SAni Sinha def test_phybits_ok_tcg_q35_71_intel(self): 247*0034d039SAni Sinha """ 248*0034d039SAni Sinha :avocado: tags=machine:q35 249*0034d039SAni Sinha :avocado: tags=arch:x86_64 250*0034d039SAni Sinha 251*0034d039SAni Sinha Same parameters as test_phybits_low_tcg_q35_71_amd() but use 252*0034d039SAni Sinha Intel cpu instead. QEMU should start fine in this case as 253*0034d039SAni Sinha "above_4G" memory starts at 4G. 254*0034d039SAni Sinha """ 255*0034d039SAni Sinha self.vm.add_args('-S', '-cpu', 'Skylake-Server', 256*0034d039SAni Sinha '-machine', 'pc-q35-7.1', '-m', 257*0034d039SAni Sinha '512,slots=1,maxmem=976G', 258*0034d039SAni Sinha '-display', 'none', 259*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 260*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 261*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 262*0034d039SAni Sinha self.vm.launch() 263*0034d039SAni Sinha time.sleep(self.DELAY_Q35_BOOT_SEQUENCE) 264*0034d039SAni Sinha self.vm.shutdown() 265*0034d039SAni Sinha self.assertNotRegex(self.vm.get_log(), r'phys-bits too low') 266*0034d039SAni Sinha 267*0034d039SAni Sinha def test_phybits_low_tcg_q35_71_amd_41bits(self): 268*0034d039SAni Sinha """ 269*0034d039SAni Sinha :avocado: tags=machine:q35 270*0034d039SAni Sinha :avocado: tags=arch:x86_64 271*0034d039SAni Sinha 272*0034d039SAni Sinha AMD processor with 41 bits. Max cpu hw address = 2 TiB. 273*0034d039SAni Sinha By setting maxram above 1012 GiB - 32 GiB - 4 GiB = 976 GiB, we can 274*0034d039SAni Sinha force "above_4G" memory to start at 1 TiB for q35-7.1 machines 275*0034d039SAni Sinha (max GPA will be above AMD_HT_START which is defined as 1012 GiB). 276*0034d039SAni Sinha 277*0034d039SAni Sinha With pci_64_hole size at 32 GiB, in this case, maxmem should be 991.5 278*0034d039SAni Sinha GiB with 1 GiB per slot for alignment and 0.5 GiB as non-hotplug 279*0034d039SAni Sinha memory for the VM (1024 - 32 - 1 + 0.5). With 992 GiB, QEMU should 280*0034d039SAni Sinha fail to start. 281*0034d039SAni Sinha """ 282*0034d039SAni Sinha self.vm.add_args('-S', '-cpu', 'EPYC-v4,phys-bits=41', 283*0034d039SAni Sinha '-machine', 'pc-q35-7.1', '-m', 284*0034d039SAni Sinha '512,slots=1,maxmem=992G', 285*0034d039SAni Sinha '-display', 'none', 286*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 287*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 288*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 289*0034d039SAni Sinha self.vm.launch() 290*0034d039SAni Sinha self.vm.wait() 291*0034d039SAni Sinha self.assertEquals(self.vm.exitcode(), 1, "QEMU exit code should be 1") 292*0034d039SAni Sinha self.assertRegex(self.vm.get_log(), r'phys-bits too low') 293*0034d039SAni Sinha 294*0034d039SAni Sinha def test_phybits_ok_tcg_q35_71_amd_41bits(self): 295*0034d039SAni Sinha """ 296*0034d039SAni Sinha :avocado: tags=machine:q35 297*0034d039SAni Sinha :avocado: tags=arch:x86_64 298*0034d039SAni Sinha 299*0034d039SAni Sinha AMD processor with 41 bits. Max cpu hw address = 2 TiB. 300*0034d039SAni Sinha Same as above but by setting maxram beween 976 GiB and 992 Gib, 301*0034d039SAni Sinha QEMU should start fine. 302*0034d039SAni Sinha """ 303*0034d039SAni Sinha self.vm.add_args('-S', '-cpu', 'EPYC-v4,phys-bits=41', 304*0034d039SAni Sinha '-machine', 'pc-q35-7.1', '-m', 305*0034d039SAni Sinha '512,slots=1,maxmem=990G', 306*0034d039SAni Sinha '-display', 'none', 307*0034d039SAni Sinha '-object', 'memory-backend-ram,id=mem1,size=1G', 308*0034d039SAni Sinha '-device', 'pc-dimm,id=vm0,memdev=mem1') 309*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 310*0034d039SAni Sinha self.vm.launch() 311*0034d039SAni Sinha time.sleep(self.DELAY_Q35_BOOT_SEQUENCE) 312*0034d039SAni Sinha self.vm.shutdown() 313*0034d039SAni Sinha self.assertNotRegex(self.vm.get_log(), r'phys-bits too low') 314*0034d039SAni Sinha 315*0034d039SAni Sinha def test_phybits_low_tcg_q35_intel_cxl(self): 316*0034d039SAni Sinha """ 317*0034d039SAni Sinha :avocado: tags=machine:q35 318*0034d039SAni Sinha :avocado: tags=arch:x86_64 319*0034d039SAni Sinha 320*0034d039SAni Sinha cxl memory window starts after memory device range. Here, we use 1 GiB 321*0034d039SAni Sinha of cxl window memory. 4G_mem end aligns at 4G. pci64_hole is 32 GiB and 322*0034d039SAni Sinha starts after the cxl memory window. 323*0034d039SAni Sinha So maxmem here should be at most 986 GiB considering all memory boundary 324*0034d039SAni Sinha alignment constraints with 40 bits (1 TiB) of processor physical bits. 325*0034d039SAni Sinha """ 326*0034d039SAni Sinha self.vm.add_args('-S', '-cpu', 'Skylake-Server,phys-bits=40', 327*0034d039SAni Sinha '-machine', 'q35,cxl=on', '-m', 328*0034d039SAni Sinha '512,slots=1,maxmem=987G', 329*0034d039SAni Sinha '-display', 'none', 330*0034d039SAni Sinha '-device', 'pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1', 331*0034d039SAni Sinha '-M', 'cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=1G') 332*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 333*0034d039SAni Sinha self.vm.launch() 334*0034d039SAni Sinha self.vm.wait() 335*0034d039SAni Sinha self.assertEquals(self.vm.exitcode(), 1, "QEMU exit code should be 1") 336*0034d039SAni Sinha self.assertRegex(self.vm.get_log(), r'phys-bits too low') 337*0034d039SAni Sinha 338*0034d039SAni Sinha def test_phybits_ok_tcg_q35_intel_cxl(self): 339*0034d039SAni Sinha """ 340*0034d039SAni Sinha :avocado: tags=machine:q35 341*0034d039SAni Sinha :avocado: tags=arch:x86_64 342*0034d039SAni Sinha 343*0034d039SAni Sinha Same as above but here we do not reserve any cxl memory window. Hence, 344*0034d039SAni Sinha with the exact same parameters as above, QEMU should start fine even 345*0034d039SAni Sinha with cxl enabled. 346*0034d039SAni Sinha """ 347*0034d039SAni Sinha self.vm.add_args('-S', '-cpu', 'Skylake-Server,phys-bits=40', 348*0034d039SAni Sinha '-machine', 'q35,cxl=on', '-m', 349*0034d039SAni Sinha '512,slots=1,maxmem=987G', 350*0034d039SAni Sinha '-display', 'none', 351*0034d039SAni Sinha '-device', 'pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1') 352*0034d039SAni Sinha self.vm.set_qmp_monitor(enabled=False) 353*0034d039SAni Sinha self.vm.launch() 354*0034d039SAni Sinha time.sleep(self.DELAY_Q35_BOOT_SEQUENCE) 355*0034d039SAni Sinha self.vm.shutdown() 356*0034d039SAni Sinha self.assertNotRegex(self.vm.get_log(), r'phys-bits too low') 357