[libvirt] [PATCHv1 4/7] qemu_capabilities: Baseline CPUModel via QEMU
Jiri Denemark
jdenemar at redhat.com
Thu May 17 20:38:01 UTC 2018
On Sat, May 05, 2018 at 12:48:46 -0500, Chris Venteicher wrote:
> Spinup QEMU instance and complete QMP query-cpu-model-baseline exchanges
> to determine CPUModel Baseline.
>
> query-cpu-model-baseline only compares two CPUModels so multiple
> exchanges are needed to evaluate more than two CPUModels.
> ---
> src/qemu/qemu_capabilities.c | 132 +++++++++++++++++++++++++++++++++++++++++++
> src/qemu/qemu_capabilities.h | 9 +++
> 2 files changed, 141 insertions(+)
>
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 097985cbe7..9ffbf91a90 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -5122,3 +5122,135 @@ virQEMUCapsSetMicrocodeVersion(virQEMUCapsPtr qemuCaps,
> {
> qemuCaps->microcodeVersion = microcodeVersion;
> }
> +
> +
> +/* in:
> + * <host>
> + * <cpu>
> + * <arch>s390x</arch>
> + * <model>z13-base</model>
> + * <feature name='xxx'/>
> + * ...
> + * <feature name='yyy'/>
> + * </cpu>
> + * <cpu>
> + * <arch>s390x</arch>
> + * <model>z114-base</model>
> + * <feature name='xxx'/>
> + * ...
> + * <feature name='yyy'/>
> + * </cpu>
> + * </host>
> + *
> + * out:
> + * <cpu match='exact'>
> + * <model>z13-base</model>
> + * <feature policy='require' name='xxx'/>
> + * <feature policy='require' name='yyy'/>
> + * </cpu>
> + *
> + * (ret==0) && (baseline.len == 0) if baseline not supported by QEMU
> + */
> +int
> +virQEMUCapsQMPBaselineCPUModel(char *exec,
> + const char *libDir,
> + uid_t runUid,
> + gid_t runGid,
> + const char **xmlCPUs,
> + unsigned int ncpus,
> + bool migratable,
> + virBufferPtr baseline)
> +{
> + qemuMonitorCPUModelInfoPtr model_baseline = NULL;
> + qemuMonitorCPUModelInfoPtr new_model_baseline = NULL;
> + qemuMonitorCPUModelInfoPtr model_b = NULL;
> + virQEMUCapsInitQMPCommandPtr cmd = NULL;
> + virBuffer buf = VIR_BUFFER_INITIALIZER;
> + bool forceTCG = false;
> + int ret = -1;
> + size_t i;
> +
> + VIR_DEBUG("ncpus=%i, migratable=%i", ncpus, migratable);
> +
> + if (!(cmd = virQEMUCapsSpinUpQemu(exec, libDir, runUid, runGid, forceTCG)))
> + goto cleanup;
> +
> + if (!(cmd->mon)) {
This test will never be true.
> + /* Not connected to QEMU (monitor) */
> + VIR_DEBUG("QEMU failed to initialize error=%s", virGetLastErrorMessage());
> + goto cleanup;
> + }
> +
> + /* QEMU requires qmp_capabilities exchange first */
> + if (qemuMonitorSetCapabilities(cmd->mon) < 0) {
> + VIR_DEBUG("Failed to set monitor capabilities %s",
> + virGetLastErrorMessage());
> + goto cleanup;
> + }
This should be moved inside virQEMUCapsSpinUpQemu.
And the rest of the function needs to be changed to work on CPUDefs
already parsed by the caller.
Jirka
More information about the libvir-list
mailing list