From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38380) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V3DpN-0008LY-TU for qemu-devel@nongnu.org; Sat, 27 Jul 2013 19:23:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V3DpH-0005Y8-R8 for qemu-devel@nongnu.org; Sat, 27 Jul 2013 19:23:09 -0400 Received: from cantor2.suse.de ([195.135.220.15]:47402 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V3DpH-0005Xy-9x for qemu-devel@nongnu.org; Sat, 27 Jul 2013 19:23:03 -0400 Message-ID: <51F45651.9010600@suse.de> Date: Sun, 28 Jul 2013 01:22:57 +0200 From: =?ISO-8859-1?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1374681580-17439-1-git-send-email-mst@redhat.com> <51F1495F.2010502@suse.de> <20130725161917.GA7079@redhat.com> <51F2693B.5070000@suse.de> In-Reply-To: <51F2693B.5070000@suse.de> Content-Type: multipart/mixed; boundary="------------040709000208030905050403" Subject: Re: [Qemu-devel] [PATCH v3 00/14] qemu: generate acpi tables for the guest List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: qemu-devel@nongnu.org, Anthony Liguori This is a multi-part message in MIME format. --------------040709000208030905050403 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Am 26.07.2013 14:19, schrieb Andreas F=E4rber: > Am 25.07.2013 18:19, schrieb Michael S. Tsirkin: >> On Thu, Jul 25, 2013 at 05:50:55PM +0200, Andreas F=E4rber wrote: >>> Am 24.07.2013 18:01, schrieb Michael S. Tsirkin: >>>> This code can also be found here: >>>> git://git.kernel.org/pub/scm/virt/kvm/mst/qemu.git acpi >>>> >>>> Please review, and consider for 1.6. >>> >>> Quite frankly, this is still not looking the way I imagined it based = on >>> the KVM call discussion and Anthony's comments that I remember: >>> >>> I believe Anthony asked to extract the information from the QOM tree, >>> originally from the SeaBIOS side, then later agreeing to do it on the >>> QEMU side. >>> >>> However here I am still seeing *functions* added in device code to ch= eck >>> device existence and to extract individual fields. I was assuming (an= d >>> clearly prefer) such code to live in a central place, be it acpi-buil= d.c >>> or something else, and to use QOM *API*s to obtain information when >>> needed rather than building up lots of new structs duplicating that >>> data. That would at the same time be a test case for how useful the Q= OM >>> tree is >>> >>> I'm not sure if there was a misunderstanding or whether the PC QOM mo= del >>> still sucks^W is incomplete? Anthony and Ping Fang(?) had both posted >>> patches to improve the composition tree once. If there's properties >>> missing that you need to access for ACPI, we should simply add them. >>> For i440fx we have /machine/i440fx. >>> For q35 I encountered an mch child on q35-pcihost, but what's trivial= ly >>> missing apparently is to add q35-pcihost as a child to /machine, e.g. >>> /machine/q35. >>> Then you'll end up doing >>> Object *obj =3D object_resolve_path_component(qdev_get_machine(), "q3= 5/mch"); >>> object_property_get_int(obj, "foo", &err); >>> object_property_get_string(obj, "bar", &err); >>> and so on. No need to do the TYPE_... based search for everything. >>> >>> User-added -devices will show up in /machine/peripheral or >>> /machine/peripheral-anon depending on whether id=3D is used, so there= a >>> type-based search probably makes sense. And there is nothing wrong wi= th >>> moving the TYPE_* constants to a device header where not yet the case= , >>> to allow that from generic code. >>> >>> Similarly, please don't open-code OBJECT_CHECK()s, do a trivial patch >>> with a macro that we can then reuse elsewhere. I'd be happy to review >>> such QOM patches and help fast-track them into master. >>> >>> Will take a closer look at the implementation later. >> >> This is not my understanding of previous comments on list >> or on KVM call. >> >> Basically it sounds like you want to make my work depend on completion >> of QOM conversion. >> I think we explicitly agreed full QOM convertion is not a blocker. >=20 > Not sure what you mean with "completion of QOM conversion" or "full QOM > conversion". What I am saying is that instead of spending time adding > functions to devices that fulfill your own ACPI needs only, that time > were better spent adding QOM properties where not yet existent. >=20 > Because then what you can access for ACPI can also be accessed by > libvirt and other management tools as well as qtest - I consider it a > test case. QMP does not offer an instance/path search by type. To clarify for everyone what we're talking about here, I'm attaching /machine composition tree dumps for pc,accel=3Dkvm and q35,accel=3Dkvm pl= us the rudimentary script I used to generate it. It shows for instance the mentioned /machine/i440fx and lack of /machine/q35. It also shows that there would be a /machine/fw_cfg. Paths starting with /machine/unassigned shouldn't be hardcoded anywhere (that's the nobody-added-it-as-a-child<> bucket), except maybe for /machine/unassigned/sysbus. But whenever there's a link from a named device to a /machine/unassigned/device[n] that may of course be used dynamically, e.g. /machine/icc-bridge/icc to discover CPUs and APICs. HTH, Andreas --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg --------------040709000208030905050403 Content-Type: text/plain; charset=UTF-8; name="pc_i440fx_kvm.txt" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="pc_i440fx_kvm.txt" /machine type: container /machine/i440fx parent_bus: /machine/unattached/sysbus realized: True type: i440FX-pcihost /machine/i440fx/ioapic parent_bus: /machine/unattached/sysbus gsi_base: 0 realized: True type: kvm-ioapic /machine/i440fx/pci.0 child[5]: /machine/unattached/device[23] child[4]: /machine/unattached/device[21] child[3]: /machine/unattached/device[20] child[2]: /machine/unattached/device[8] child[1]: /machine/unattached/device[5] child[0]: /machine/unattached/device[4] type: PCI /machine/fw_cfg parent_bus: /machine/unattached/sysbus data_iobase: 1297 legacy-data_iobase: 0x511 ctl_iobase: 1296 legacy-ctl_iobase: 0x510 realized: True type: fw_cfg /machine/icc-bridge parent_bus: /machine/unattached/sysbus realized: True type: icc-bridge /machine/icc-bridge/icc child[1]: /machine/unattached/device[0]/apic child[0]: /machine/unattached/device[0] type: icc-bus /machine/unattached type: container /machine/unattached/device[32] parent_bus: /machine/unattached/device[5]/isa.0 ioport: 1285 realized: True type: pvpanic /machine/unattached/device[31] parent_bus: /machine/unattached/device[23]/i2c address: 87 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[30] parent_bus: /machine/unattached/device[23]/i2c address: 86 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[29] parent_bus: /machine/unattached/device[23]/i2c address: 85 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[28] parent_bus: /machine/unattached/device[23]/i2c address: 84 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[27] parent_bus: /machine/unattached/device[23]/i2c address: 83 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[26] parent_bus: /machine/unattached/device[23]/i2c address: 82 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[25] parent_bus: /machine/unattached/device[23]/i2c address: 81 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[24] parent_bus: /machine/unattached/device[23]/i2c address: 80 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[23] parent_bus: /machine/i440fx/pci.0 command_serr_enable: True legacy-command_serr_enable: on multifunction: False legacy-multifunction: off rombar: 1 romfile: legacy-romfile: addr: 11 legacy-addr: 01.3 s4_val: 2 disable_s4: 0 disable_s3: 0 smb_io_base: 45312 realized: True type: PIIX4_PM /machine/unattached/device[23]/i2c child[7]: /machine/unattached/device[31] child[6]: /machine/unattached/device[30] child[5]: /machine/unattached/device[29] child[4]: /machine/unattached/device[28] child[3]: /machine/unattached/device[27] child[2]: /machine/unattached/device[26] child[1]: /machine/unattached/device[25] child[0]: /machine/unattached/device[24] type: i2c-bus /machine/unattached/device[22] parent_bus: /machine/unattached/device[21]/ide.1 unit: 0 model: legacy-model: serial: QM00003 legacy-serial: "QM00003" wwn: 0 legacy-wwn: 0x0 ver: 1.5.50 legacy-ver: "1.5.50" discard_granularity: 512 bootindex: -1 opt_io_size: 0 min_io_size: 0 physical_block_size: 512 logical_block_size: 512 drive: ide1-cd0 realized: True type: ide-cd /machine/unattached/device[21] parent_bus: /machine/i440fx/pci.0 command_serr_enable: True legacy-command_serr_enable: on multifunction: False legacy-multifunction: off rombar: 1 romfile: legacy-romfile: addr: 9 legacy-addr: 01.1 realized: True type: piix3-ide /machine/unattached/device[21]/ide.1 child[0]: /machine/unattached/device[22] type: IDE /machine/unattached/device[21]/ide.0 type: IDE /machine/unattached/device[20] parent_bus: /machine/i440fx/pci.0 command_serr_enable: True legacy-command_serr_enable: on multifunction: False legacy-multifunction: off rombar: 1 romfile: efi-e1000.rom legacy-romfile: "efi-e1000.rom" addr: 24 legacy-addr: 03.0 autonegotiation: True legacy-autonegotiation: on bootindex: -1 netdev: hub0port0 vlan: 0 legacy-vlan: 0 mac: 52:54:00:12:34:56 realized: True type: e1000 /machine/unattached/device[19] parent_bus: /machine/unattached/device[5]/isa.0 check_media_rate: True legacy-check_media_rate: on bootindexB: -1 bootindexA: -1 driveB: driveA: floppy0 dma: 2 irq: 6 iobase: 1008 legacy-iobase: 0x3f0 realized: True type: isa-fdc /machine/unattached/device[18] parent_bus: /machine/unattached/device[5]/isa.0 realized: True type: port92 /machine/unattached/device[17] parent_bus: /machine/unattached/device[5]/isa.0 legacy-ps2_mouse: realized: True type: vmmouse /machine/unattached/device[16] parent_bus: /machine/unattached/device[5]/isa.0 realized: True type: vmport /machine/unattached/device[15] parent_bus: /machine/unattached/device[5]/isa.0 realized: True type: i8042 /machine/unattached/device[14] parent_bus: /machine/unattached/device[5]/isa.0 chardev: parallel0 irq: 7 iobase: 888 legacy-iobase: 0x378 index: 0 realized: True type: isa-parallel /machine/unattached/device[13] parent_bus: /machine/unattached/device[5]/isa.0 wakeup: 0 chardev: serial0 irq: 4 iobase: 1016 legacy-iobase: 0x3f8 index: 0 realized: True type: isa-serial /machine/unattached/device[12] parent_bus: /machine/unattached/device[5]/isa.0 legacy-pit: iobase: 97 legacy-iobase: 0x61 realized: True type: isa-pcspk /machine/unattached/device[11] parent_bus: /machine/unattached/device[5]/isa.0 lost_tick_policy: delay iobase: 64 legacy-iobase: 0x40 realized: True type: kvm-pit /machine/unattached/device[10] date: {u'tm_sec': 31, u'tm_hour': 23, u'tm_mday': 27, u'tm_year': 113, u'tm_mon': 6, u'tm_min': 5} parent_bus: /machine/unattached/device[5]/isa.0 lost_tick_policy: discard base_year: 0 realized: True type: mc146818rtc /machine/unattached/device[9] parent_bus: /machine/unattached/sysbus msi: False legacy-msi: off timers: 3 realized: True type: hpet /machine/unattached/device[8] parent_bus: /machine/i440fx/pci.0 command_serr_enable: True legacy-command_serr_enable: on multifunction: False legacy-multifunction: off rombar: 1 romfile: vgabios-cirrus.bin legacy-romfile: "vgabios-cirrus.bin" addr: 16 legacy-addr: 02.0 vgamem_mb: 8 realized: True type: cirrus-vga /machine/unattached/device[7] parent_bus: /machine/unattached/device[5]/isa.0 master: False legacy-master: off elcr_mask: 222 legacy-elcr_mask: 0xde elcr_addr: 1233 legacy-elcr_addr: 0x4d1 iobase: 160 legacy-iobase: 0xa0 realized: True type: kvm-i8259 /machine/unattached/device[6] parent_bus: /machine/unattached/device[5]/isa.0 master: True legacy-master: on elcr_mask: 248 legacy-elcr_mask: 0xf8 elcr_addr: 1232 legacy-elcr_addr: 0x4d0 iobase: 32 legacy-iobase: 0x20 realized: True type: kvm-i8259 /machine/unattached/device[5] parent_bus: /machine/i440fx/pci.0 command_serr_enable: True legacy-command_serr_enable: on multifunction: True legacy-multifunction: on rombar: 1 romfile: legacy-romfile: addr: 8 legacy-addr: 01.0 realized: True type: PIIX3 /machine/unattached/device[5]/isa.0 child[12]: /machine/unattached/device[32] child[11]: /machine/unattached/device[19] child[10]: /machine/unattached/device[18] child[9]: /machine/unattached/device[17] child[8]: /machine/unattached/device[16] child[7]: /machine/unattached/device[15] child[6]: /machine/unattached/device[14] child[5]: /machine/unattached/device[13] child[4]: /machine/unattached/device[12] child[3]: /machine/unattached/device[11] child[2]: /machine/unattached/device[10] child[1]: /machine/unattached/device[7] child[0]: /machine/unattached/device[6] type: ISA /machine/unattached/device[4] parent_bus: /machine/i440fx/pci.0 command_serr_enable: True legacy-command_serr_enable: on multifunction: False legacy-multifunction: off rombar: 1 romfile: legacy-romfile: addr: 0 legacy-addr: 00.0 realized: True type: i440FX /machine/unattached/device[3] parent_bus: /machine/unattached/sysbus rom_only: 1 isapc_ram_fw: 0 realized: True type: pc-sysfw /machine/unattached/device[2] parent_bus: /machine/unattached/sysbus realized: True type: kvmclock /machine/unattached/device[1] parent_bus: /machine/unattached/sysbus realized: True type: kvmvapic /machine/unattached/device[0] filtered-features: [{u'cpuid-register': u'EDX', u'cpuid-input-eax': 2147483658, u'features': 0}, {u'cpuid-register': u'EAX', u'cpuid-input-eax': 1073741825, u'features': 0}, {u'cpuid-register': u'EDX', u'cpuid-input-eax': 3221225473, u'features': 0}, {u'cpuid-register': u'ECX', u'cpuid-input-eax': 2147483649, u'features': 100}, {u'cpuid-register': u'EDX', u'cpuid-input-eax': 2147483649, u'features': 0}, {u'cpuid-register': u'EBX', u'cpuid-input-eax': 7, u'features': 0, u'cpuid-input-ecx': 0}, {u'cpuid-register': u'ECX', u'cpuid-input-eax': 1, u'features': 0}, {u'cpuid-register': u'EDX', u'cpuid-input-eax': 1, u'features': 0}] feature-words: [{u'cpuid-register': u'EDX', u'cpuid-input-eax': 2147483658, u'features': 0}, {u'cpuid-register': u'EAX', u'cpuid-input-eax': 1073741825, u'features': 16777339}, {u'cpuid-register': u'EDX', u'cpuid-input-eax': 3221225473, u'features': 0}, {u'cpuid-register': u'ECX', u'cpuid-input-eax': 2147483649, u'features': 1}, {u'cpuid-register': u'EDX', u'cpuid-input-eax': 2147483649, u'features': 563194877}, {u'cpuid-register': u'EBX', u'cpuid-input-eax': 7, u'features': 0, u'cpuid-input-ecx': 0}, {u'cpuid-register': u'ECX', u'cpuid-input-eax': 1, u'features': 2155880449}, {u'cpuid-register': u'EDX', u'cpuid-input-eax': 1, u'features': 126614525}] apic-id: 0 tsc-frequency: 0 model-id: QEMU Virtual CPU version 1.5.50 vendor: GenuineIntel xlevel: 2147483658 level: 4 stepping: 3 model: 2 family: 6 parent_bus: /machine/icc-bridge/icc realized: True type: x86_64-cpu /machine/unattached/device[0]/apic parent_bus: /machine/icc-bridge/icc vapic: True legacy-vapic: on id: 0 realized: True type: kvm-apic /machine/unattached/sysbus child[7]: /machine/unattached/device[9] child[6]: /machine/i440fx/ioapic child[5]: /machine/i440fx child[4]: /machine/fw_cfg child[3]: /machine/unattached/device[3] child[2]: /machine/unattached/device[2] child[1]: /machine/unattached/device[1] child[0]: /machine/icc-bridge type: System /machine/peripheral type: container /machine/peripheral-anon type: container --------------040709000208030905050403 Content-Type: text/plain; charset=UTF-8; name="pc_q35_kvm.txt" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="pc_q35_kvm.txt" /machine type: container /machine/fw_cfg parent_bus: /machine/unattached/sysbus data_iobase: 1297 legacy-data_iobase: 0x511 ctl_iobase: 1296 legacy-ctl_iobase: 0x510 realized: True type: fw_cfg /machine/icc-bridge parent_bus: /machine/unattached/sysbus realized: True type: icc-bridge /machine/icc-bridge/icc child[1]: /machine/unattached/device[0]/apic child[0]: /machine/unattached/device[0] type: icc-bus /machine/unattached type: container /machine/unattached/device[32] parent_bus: /machine/unattached/device[5]/isa.0 ioport: 1285 realized: True type: pvpanic /machine/unattached/device[31] parent_bus: /machine/unattached/device[4]/pcie.0 command_serr_enable: True legacy-command_serr_enable: on multifunction: False legacy-multifunction: off rombar: 1 romfile: efi-e1000.rom legacy-romfile: "efi-e1000.rom" addr: 16 legacy-addr: 02.0 autonegotiation: True legacy-autonegotiation: on bootindex: -1 netdev: hub0port0 vlan: 0 legacy-vlan: 0 mac: 52:54:00:12:34:56 realized: True type: e1000 /machine/unattached/device[30] parent_bus: /machine/unattached/device[4]/pcie.0 command_serr_enable: True legacy-command_serr_enable: on multifunction: False legacy-multifunction: off rombar: 1 romfile: vgabios-cirrus.bin legacy-romfile: "vgabios-cirrus.bin" addr: 8 legacy-addr: 01.0 vgamem_mb: 8 realized: True type: cirrus-vga /machine/unattached/device[29] parent_bus: /machine/unattached/device[21]/i2c address: 87 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[28] parent_bus: /machine/unattached/device[21]/i2c address: 86 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[27] parent_bus: /machine/unattached/device[21]/i2c address: 85 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[26] parent_bus: /machine/unattached/device[21]/i2c address: 84 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[25] parent_bus: /machine/unattached/device[21]/i2c address: 83 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[24] parent_bus: /machine/unattached/device[21]/i2c address: 82 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[23] parent_bus: /machine/unattached/device[21]/i2c address: 81 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[22] parent_bus: /machine/unattached/device[21]/i2c address: 80 legacy-data: realized: True type: smbus-eeprom /machine/unattached/device[21] parent_bus: /machine/unattached/device[4]/pcie.0 command_serr_enable: True legacy-command_serr_enable: on multifunction: True legacy-multifunction: on rombar: 1 romfile: legacy-romfile: addr: 251 legacy-addr: 1f.3 realized: True type: ICH9 SMB /machine/unattached/device[21]/i2c child[7]: /machine/unattached/device[29] child[6]: /machine/unattached/device[28] child[5]: /machine/unattached/device[27] child[4]: /machine/unattached/device[26] child[3]: /machine/unattached/device[25] child[2]: /machine/unattached/device[24] child[1]: /machine/unattached/device[23] child[0]: /machine/unattached/device[22] type: i2c-bus /machine/unattached/device[20] parent_bus: /machine/unattached/device[4]/pcie.0 command_serr_enable: True legacy-command_serr_enable: on multifunction: True legacy-multifunction: on rombar: 1 romfile: legacy-romfile: addr: 250 legacy-addr: 1f.2 realized: True type: ich9-ahci /machine/unattached/device[20]/ide.5 type: IDE /machine/unattached/device[20]/ide.4 type: IDE /machine/unattached/device[20]/ide.3 type: IDE /machine/unattached/device[20]/ide.2 type: IDE /machine/unattached/device[20]/ide.1 type: IDE /machine/unattached/device[20]/ide.0 type: IDE /machine/unattached/device[19] parent_bus: /machine/unattached/device[5]/isa.0 check_media_rate: True legacy-check_media_rate: on bootindexB: -1 bootindexA: -1 driveB: driveA: floppy0 dma: 2 irq: 6 iobase: 1008 legacy-iobase: 0x3f0 realized: True type: isa-fdc /machine/unattached/device[18] parent_bus: /machine/unattached/device[5]/isa.0 realized: True type: port92 /machine/unattached/device[17] parent_bus: /machine/unattached/device[5]/isa.0 legacy-ps2_mouse: realized: True type: vmmouse /machine/unattached/device[16] parent_bus: /machine/unattached/device[5]/isa.0 realized: True type: vmport /machine/unattached/device[15] parent_bus: /machine/unattached/device[5]/isa.0 realized: True type: i8042 /machine/unattached/device[14] parent_bus: /machine/unattached/device[5]/isa.0 chardev: parallel0 irq: 7 iobase: 888 legacy-iobase: 0x378 index: 0 realized: True type: isa-parallel /machine/unattached/device[13] parent_bus: /machine/unattached/device[5]/isa.0 wakeup: 0 chardev: serial0 irq: 4 iobase: 1016 legacy-iobase: 0x3f8 index: 0 realized: True type: isa-serial /machine/unattached/device[12] parent_bus: /machine/unattached/device[5]/isa.0 legacy-pit: iobase: 97 legacy-iobase: 0x61 realized: True type: isa-pcspk /machine/unattached/device[11] parent_bus: /machine/unattached/device[5]/isa.0 lost_tick_policy: delay iobase: 64 legacy-iobase: 0x40 realized: True type: kvm-pit /machine/unattached/device[10] date: {u'tm_sec': 42, u'tm_hour': 23, u'tm_mday': 27, u'tm_year': 113, u'tm_mon': 6, u'tm_min': 4} parent_bus: /machine/unattached/device[5]/isa.0 lost_tick_policy: discard base_year: 0 realized: True type: mc146818rtc /machine/unattached/device[9] parent_bus: /machine/unattached/sysbus msi: False legacy-msi: off timers: 3 realized: True type: hpet /machine/unattached/device[8] parent_bus: /machine/unattached/sysbus gsi_base: 0 realized: True type: kvm-ioapic /machine/unattached/device[7] parent_bus: /machine/unattached/device[5]/isa.0 master: False legacy-master: off elcr_mask: 222 legacy-elcr_mask: 0xde elcr_addr: 1233 legacy-elcr_addr: 0x4d1 iobase: 160 legacy-iobase: 0xa0 realized: True type: kvm-i8259 /machine/unattached/device[6] parent_bus: /machine/unattached/device[5]/isa.0 master: True legacy-master: on elcr_mask: 248 legacy-elcr_mask: 0xf8 elcr_addr: 1232 legacy-elcr_addr: 0x4d0 iobase: 32 legacy-iobase: 0x20 realized: True type: kvm-i8259 /machine/unattached/device[5] parent_bus: /machine/unattached/device[4]/pcie.0 command_serr_enable: True legacy-command_serr_enable: on multifunction: True legacy-multifunction: on rombar: 1 romfile: legacy-romfile: addr: 248 legacy-addr: 1f.0 realized: True type: ICH9 LPC /machine/unattached/device[5]/isa.0 child[12]: /machine/unattached/device[32] child[11]: /machine/unattached/device[19] child[10]: /machine/unattached/device[18] child[9]: /machine/unattached/device[17] child[8]: /machine/unattached/device[16] child[7]: /machine/unattached/device[15] child[6]: /machine/unattached/device[14] child[5]: /machine/unattached/device[13] child[4]: /machine/unattached/device[12] child[3]: /machine/unattached/device[11] child[2]: /machine/unattached/device[10] child[1]: /machine/unattached/device[7] child[0]: /machine/unattached/device[6] type: ISA /machine/unattached/device[4] parent_bus: /machine/unattached/sysbus MCFG: -1 realized: True type: q35-pcihost /machine/unattached/device[4]/pcie.0 child[5]: /machine/unattached/device[31] child[4]: /machine/unattached/device[30] child[3]: /machine/unattached/device[21] child[2]: /machine/unattached/device[20] child[1]: /machine/unattached/device[5] child[0]: /machine/unattached/device[4]/mch type: PCIE /machine/unattached/device[4]/mch parent_bus: /machine/unattached/device[4]/pcie.0 command_serr_enable: True legacy-command_serr_enable: on multifunction: False legacy-multifunction: off rombar: 1 romfile: legacy-romfile: addr: 0 legacy-addr: 00.0 realized: True type: mch /machine/unattached/device[3] parent_bus: /machine/unattached/sysbus rom_only: 1 isapc_ram_fw: 0 realized: True type: pc-sysfw /machine/unattached/device[2] parent_bus: /machine/unattached/sysbus realized: True type: kvmclock /machine/unattached/device[1] parent_bus: /machine/unattached/sysbus realized: True type: kvmvapic /machine/unattached/device[0] filtered-features: [{u'cpuid-register': u'EDX', u'cpuid-input-eax': 2147483658, u'features': 0}, {u'cpuid-register': u'EAX', u'cpuid-input-eax': 1073741825, u'features': 0}, {u'cpuid-register': u'EDX', u'cpuid-input-eax': 3221225473, u'features': 0}, {u'cpuid-register': u'ECX', u'cpuid-input-eax': 2147483649, u'features': 100}, {u'cpuid-register': u'EDX', u'cpuid-input-eax': 2147483649, u'features': 0}, {u'cpuid-register': u'EBX', u'cpuid-input-eax': 7, u'features': 0, u'cpuid-input-ecx': 0}, {u'cpuid-register': u'ECX', u'cpuid-input-eax': 1, u'features': 0}, {u'cpuid-register': u'EDX', u'cpuid-input-eax': 1, u'features': 0}] feature-words: [{u'cpuid-register': u'EDX', u'cpuid-input-eax': 2147483658, u'features': 0}, {u'cpuid-register': u'EAX', u'cpuid-input-eax': 1073741825, u'features': 16777339}, {u'cpuid-register': u'EDX', u'cpuid-input-eax': 3221225473, u'features': 0}, {u'cpuid-register': u'ECX', u'cpuid-input-eax': 2147483649, u'features': 1}, {u'cpuid-register': u'EDX', u'cpuid-input-eax': 2147483649, u'features': 563194877}, {u'cpuid-register': u'EBX', u'cpuid-input-eax': 7, u'features': 0, u'cpuid-input-ecx': 0}, {u'cpuid-register': u'ECX', u'cpuid-input-eax': 1, u'features': 2155880449}, {u'cpuid-register': u'EDX', u'cpuid-input-eax': 1, u'features': 126614525}] apic-id: 0 tsc-frequency: 0 model-id: QEMU Virtual CPU version 1.5.50 vendor: GenuineIntel xlevel: 2147483658 level: 4 stepping: 3 model: 2 family: 6 parent_bus: /machine/icc-bridge/icc realized: True type: x86_64-cpu /machine/unattached/device[0]/apic parent_bus: /machine/icc-bridge/icc vapic: True legacy-vapic: on id: 0 realized: True type: kvm-apic /machine/unattached/sysbus child[7]: /machine/unattached/device[9] child[6]: /machine/unattached/device[8] child[5]: /machine/unattached/device[4] child[4]: /machine/fw_cfg child[3]: /machine/unattached/device[3] child[2]: /machine/unattached/device[2] child[1]: /machine/unattached/device[1] child[0]: /machine/icc-bridge type: System /machine/peripheral type: container /machine/peripheral-anon type: container --------------040709000208030905050403 Content-Type: text/plain; charset=UTF-8; name="qom-tree" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="qom-tree" #!/usr/bin/python ## # QEMU Object Model test tools # # Copyright IBM, Corp. 2011 # # Authors: # Anthony Liguori # Andreas Faerber # # This work is licensed under the terms of the GNU GPL, version 2 or later. See # the COPYING file in the top-level directory. ## import sys import os from qmp import QEMUMonitorProtocol cmd, args = sys.argv[0], sys.argv[1:] socket_path = None path = None prop = None def usage(): return '''environment variables: QMP_SOCKET= usage: %s [-h] [-s ] [] ''' % cmd def usage_error(error_msg = "unspecified error"): sys.stderr.write('%s\nERROR: %s\n' % (usage(), error_msg)) exit(1) if len(args) > 0: if args[0] == "-h": print usage() exit(0); elif args[0] == "-s": try: socket_path = args[1] except: usage_error("missing argument: QMP socket path or address"); args = args[2:] if not socket_path: if os.environ.has_key('QMP_SOCKET'): socket_path = os.environ['QMP_SOCKET'] else: usage_error("no QMP socket path or address given"); srv = QEMUMonitorProtocol(socket_path) srv.connect() def list_node(path): print '%s' % path items = srv.command('qom-list', path=path) for item in items: if not item['type'].startswith('child<'): #and not item['type'].startswith('link<'): try: print ' %s: %s' % (item['name'], srv.command('qom-get', path=path, property=item['name'])) except: print ' %s: ' % item['name'] print '' for item in items: if item['type'].startswith('child<'): list_node(path + '/' + item['name']) list_node('/machine') --------------040709000208030905050403--