On 06/12/2015 08:53 AM, Jiri Denemark wrote: > Some machine types are only reported as canonical names for other > machine types, which make it a bit harder to find what machine types are > supported by a specific QEMU binary. Ideally, one would just use > /capabilities/guest/arch[@name='...']/machine/text() XPath to get a list > of all supported machine types, but it doesn't work right now. > > For example, we report > > <machine canonical='pc-i440fx-2.3' maxCpus='255'>pc</machine> > > in guest capabilities, but the corresponding > > <machine maxCpus='255'>pc-i440fx-2.3</machine> > > is missing. > > This is a result of QMP probing. With "-machine ?" parsing QEMU sends > us two lines: > > pc Standard PC (i440FX + PIIX, 1996) (alias of pc-i440fx-2.3) > pc-i440fx-2.3 Standard PC (i440FX + PIIX, 1996) (default) > > while query-machines QMP command reports both in the same entry: > > {"name": "pc-i440fx-2.3", "is-default": true, "cpu-max": 255, "alias": "pc"} > > Let's make sure we always report separate <machine/> for both the > canonical name and its alias and using the canonical name as the default > machine type (i.e., inserting it before its alias) in case is-default is > true. > > https://bugzilla.redhat.com/show_bug.cgi?id=1229666 > > Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx> > --- > src/qemu/qemu_capabilities.c | 38 ++++++++++++++++++++++++++++++++++++++ > 1 file changed, 38 insertions(+) > There's no existing test for this? I guess I would have expected to see differences in output and thus test adjustments as well. The code seems to be doing what is stated though... and the tests/capabilityschemadata/caps-qemu-kvm.xml seems to show the output as desired. ACK - John > diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c > index ca7a7c2..e9b3bb5 100644 > --- a/src/qemu/qemu_capabilities.c > +++ b/src/qemu/qemu_capabilities.c > @@ -2223,6 +2223,44 @@ int virQEMUCapsGetMachineTypesCaps(virQEMUCapsPtr qemuCaps, > mach->maxCpus = qemuCaps->machineMaxCpus[i]; > } > > + /* Make sure all canonical machine types also have their own entry so that > + * /capabilities/guest/arch[@name='...']/machine/text() XPath selects all > + * supported machine types. > + */ > + i = 0; > + while (i < *nmachines) { > + size_t j; > + bool found = false; > + virCapsGuestMachinePtr machine = (*machines)[i]; > + > + if (!machine->canonical) { > + i++; > + continue; > + } > + > + for (j = 0; j < *nmachines; j++) { > + if (STREQ(machine->canonical, (*machines)[j]->name)) { > + found = true; > + break; > + } > + } > + > + if (!found) { > + virCapsGuestMachinePtr mach; > + if (VIR_ALLOC(mach) < 0) > + goto error; > + if (VIR_INSERT_ELEMENT_COPY(*machines, i, *nmachines, mach) < 0) { > + VIR_FREE(mach); > + goto error; > + } > + if (VIR_STRDUP(mach->name, machine->canonical) < 0) > + goto error; > + mach->maxCpus = machine->maxCpus; > + i++; > + } > + i++; > + } > + > return 0; > > error: > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list