At init of pc_i440fx_wily_machine_options the referred compat is ok: compat_props_add(m->compat_props, hw_compat_2_3, hw_compat_2_3_len); It contains any_layout off for virtio-balloon-pci (gdb) p hw_compat_2_3[1] $7 = {driver = 0x555555ea725c "virtio-balloon-pci", property = 0x555555ea2c91 "any_layout", value = 0x555555ee6853 "off", used = false, optional = false} Prior to applying 2_3 115-120 are the last entries: (gdb) p (m->compat_props).pdata[115] $58 = (gpointer) 0x5555564d0400 (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[115]) $61 = {driver = 0x555555e93d89 "virtio-blk-device", property = 0x555555e9cb8f "scsi", value = 0x555555eece85 "true", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[116]) $62 = {driver = 0x555555ea8ffe "e1000", property = 0x555555ee7f21 "extra_mac_registers", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[117]) $63 = {driver = 0x555555e978cb "virtio-pci", property = 0x555555ee7f35 "x-disable-pcie", value = 0x555555eeb3e5 "on", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[118]) $64 = {driver = 0x555555e978cb "virtio-pci", property = 0x555555ee7f44 "migrate-extra", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[119]) $65 = {driver = 0x555555ee7f52 "fw_cfg_mem", property = 0x555555eb0b55 "dma_enabled", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[120]) $66 = {driver = 0x555555ee7f5d "fw_cfg_io", property = 0x555555eb0b55 "dma_enabled", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[121]) Cannot access memory at address 0x0 Eventually [137] will be the last entry of pc_compat_2_4 that was added. Then hw_compat_2_3 is added. Thread 1 "qemu-system-x86" hit Breakpoint 2, compat_props_add (nelem=9, props=, arr=0x5555566121a0) at ./include/hw/qdev-core.h:289 After that we have: (gdb) p (m->compat_props).pdata[138] $89 = (gpointer) 0x5555564d02e0 ... (gdb) p (m->compat_props).pdata[146] $93 = (gpointer) 0x5555564d03e0 (gdb) p (m->compat_props).pdata[147] $94 = (gpointer) 0x0 And content: (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[138]) $96 = {driver = 0x555555ea755c "virtio-blk-pci", property = 0x555555ea2c91 "any_layout", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[139]) $97 = {driver = 0x555555ea725c "virtio-balloon-pci", property = 0x555555ea2c91 "any_layout", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[140]) $98 = {driver = 0x555555ea778a "virtio-serial-pci", property = 0x555555ea2c91 "any_layout", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[141]) $99 = {driver = 0x555555ea735a "virtio-9p-pci", property = 0x555555ea2c91 "any_layout", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[142]) $100 = {driver = 0x555555ea7126 "virtio-rng-pci", property = 0x555555ea2c91 "any_layout", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[143]) $101 = {driver = 0x555555e98ea0 "pci-device", property = 0x555555ee7ed3 "x-pcie-lnksta-dllla", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[144]) $102 = {driver = 0x555555ea9369 "migration", property = 0x555555ee7ee7 "send-configuration", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[145]) $103 = {driver = 0x555555ea9369 "migration", property = 0x555555ee7efa "send-section-footer", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[146]) $104 = {driver = 0x555555ea9369 "migration", property = 0x555555ee7f0e "store-global-state", value = 0x555555ee6853 "off", used = false, optional = false} (gdb) p (*(GlobalProperty*)(m->compat_props).pdata[147]) Cannot access memory at address 0x0 That means all the expected attributes got added. Including the expected $97 = {driver = 0x555555ea725c "virtio-balloon-pci", property = 0x555555ea2c91 "any_layout", value = 0x555555ee6853 "off", used = false, optional = false} So on init all seems as one would expect in Focal. We might need to debug the "info qtree" to see where it is reading from.